@json-to-office/shared-docx 1.0.0 → 1.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{chunk-ZC2I7CTZ.js → chunk-45I2NASU.js} +5 -3
- package/dist/{chunk-ZC2I7CTZ.js.map → chunk-45I2NASU.js.map} +1 -1
- package/dist/chunk-5KOKA5GY.js +687 -0
- package/dist/chunk-5KOKA5GY.js.map +1 -0
- package/dist/{chunk-MG2PLA6W.js → chunk-6B3LHADB.js} +2 -2
- package/dist/{chunk-NZO5SZUO.js → chunk-6HFF6XZN.js} +44 -7
- package/dist/chunk-6HFF6XZN.js.map +1 -0
- package/dist/{chunk-V4HZOLMN.js → chunk-6YMJWMEC.js} +34 -18
- package/dist/chunk-6YMJWMEC.js.map +1 -0
- package/dist/{chunk-WXG3FQ5V.js → chunk-A2K66URO.js} +30 -151
- package/dist/chunk-A2K66URO.js.map +1 -0
- package/dist/{chunk-G3XK537A.js → chunk-BBFR3RRN.js} +14 -8
- package/dist/chunk-BBFR3RRN.js.map +1 -0
- package/dist/{chunk-NAVRPVTN.js → chunk-LBXOAXMG.js} +6 -6
- package/dist/{chunk-VEF4T6PL.js → chunk-MYLVUQCN.js} +2 -2
- package/dist/chunk-OP5PCDNN.js +1272 -0
- package/dist/chunk-OP5PCDNN.js.map +1 -0
- package/dist/{chunk-GT3MN2RI.js → chunk-TODYYVZ4.js} +2 -2
- package/dist/chunk-VX2J2KWA.js +465 -0
- package/dist/chunk-VX2J2KWA.js.map +1 -0
- package/dist/index.d.ts +2 -2
- package/dist/index.js +52 -28
- package/dist/index.js.map +1 -1
- package/dist/schemas/api.js +7 -6
- package/dist/schemas/component-defaults.js +2 -1
- package/dist/schemas/component-registry.js +5 -4
- package/dist/schemas/components.d.ts +1092 -4
- package/dist/schemas/components.js +72 -27
- package/dist/schemas/document.js +8 -7
- package/dist/schemas/export.d.ts +8 -2
- package/dist/schemas/export.js +6 -5
- package/dist/schemas/generator.js +6 -5
- package/dist/schemas/renderer.d.ts +21 -3
- package/dist/schemas/renderer.js +5 -1
- package/dist/schemas/theme.js +3 -2
- package/dist/validation/unified/index.js +8 -7
- package/package.json +2 -2
- package/dist/chunk-2YUAD26Q.js +0 -1718
- package/dist/chunk-2YUAD26Q.js.map +0 -1
- package/dist/chunk-G3XK537A.js.map +0 -1
- package/dist/chunk-NZO5SZUO.js.map +0 -1
- package/dist/chunk-T7P4TA7I.js +0 -89
- package/dist/chunk-T7P4TA7I.js.map +0 -1
- package/dist/chunk-V4HZOLMN.js.map +0 -1
- package/dist/chunk-WXG3FQ5V.js.map +0 -1
- /package/dist/{chunk-MG2PLA6W.js.map → chunk-6B3LHADB.js.map} +0 -0
- /package/dist/{chunk-NAVRPVTN.js.map → chunk-LBXOAXMG.js.map} +0 -0
- /package/dist/{chunk-VEF4T6PL.js.map → chunk-MYLVUQCN.js.map} +0 -0
- /package/dist/{chunk-GT3MN2RI.js.map → chunk-TODYYVZ4.js.map} +0 -0
|
@@ -1,33 +1,34 @@
|
|
|
1
1
|
import {
|
|
2
2
|
DOCX_RENDERER_IDS,
|
|
3
|
+
VisualPropsSchema,
|
|
3
4
|
docxPropsSchemaForRenderer
|
|
4
|
-
} from "./chunk-
|
|
5
|
+
} from "./chunk-5KOKA5GY.js";
|
|
5
6
|
import {
|
|
6
7
|
ThemeOverridesSchema
|
|
7
|
-
} from "./chunk-
|
|
8
|
+
} from "./chunk-45I2NASU.js";
|
|
8
9
|
import {
|
|
9
|
-
AlignmentSchema,
|
|
10
10
|
ColumnsPropsSchema,
|
|
11
11
|
ComponentDefaultsSchema,
|
|
12
|
-
FloatingPropertiesSchema,
|
|
13
12
|
HeadingPropsSchema,
|
|
14
13
|
ImagePropsSchema,
|
|
15
14
|
ListPropsSchema,
|
|
16
15
|
ParagraphPropsSchema,
|
|
17
16
|
SectionPropsSchema,
|
|
18
|
-
SpacingSchema,
|
|
19
17
|
StatisticPropsSchema,
|
|
20
18
|
TablePropsSchema,
|
|
21
19
|
createSectionPropsSchema,
|
|
22
20
|
createTablePropsSchema
|
|
23
|
-
} from "./chunk-
|
|
21
|
+
} from "./chunk-OP5PCDNN.js";
|
|
22
|
+
import {
|
|
23
|
+
FloatingPropertiesSchema
|
|
24
|
+
} from "./chunk-VX2J2KWA.js";
|
|
24
25
|
import {
|
|
25
26
|
HexColorSchema,
|
|
26
27
|
NoProofWordsSchema
|
|
27
28
|
} from "./chunk-7TTAAYQ5.js";
|
|
28
29
|
|
|
29
30
|
// src/schemas/component-registry.ts
|
|
30
|
-
import { Type as
|
|
31
|
+
import { Type as Type5 } from "@sinclair/typebox";
|
|
31
32
|
|
|
32
33
|
// src/schemas/components/report.ts
|
|
33
34
|
import { Type } from "@sinclair/typebox";
|
|
@@ -517,129 +518,6 @@ var HighchartsPropsSchema = Type4.Object({
|
|
|
517
518
|
)
|
|
518
519
|
});
|
|
519
520
|
|
|
520
|
-
// src/schemas/components/visual.ts
|
|
521
|
-
import { Type as Type5 } from "@sinclair/typebox";
|
|
522
|
-
import {
|
|
523
|
-
MIN_VISUAL_DPI,
|
|
524
|
-
MAX_VISUAL_DPI,
|
|
525
|
-
DEFAULT_VISUAL_DPI
|
|
526
|
-
} from "@json-to-office/shared";
|
|
527
|
-
import { PptxSlideContentSchema } from "@json-to-office/shared/schemas/slide-content";
|
|
528
|
-
var VisualCanvasBackgroundSchema = Type5.Object(
|
|
529
|
-
{
|
|
530
|
-
color: Type5.Optional(
|
|
531
|
-
Type5.String({
|
|
532
|
-
description: 'Background color (hex like "#FFFFFF" or a theme color name)'
|
|
533
|
-
})
|
|
534
|
-
),
|
|
535
|
-
image: Type5.Optional(
|
|
536
|
-
Type5.Object(
|
|
537
|
-
{
|
|
538
|
-
path: Type5.Optional(Type5.String()),
|
|
539
|
-
base64: Type5.Optional(Type5.String())
|
|
540
|
-
},
|
|
541
|
-
{ additionalProperties: false }
|
|
542
|
-
)
|
|
543
|
-
)
|
|
544
|
-
},
|
|
545
|
-
{ additionalProperties: false }
|
|
546
|
-
);
|
|
547
|
-
var VisualCanvasSchema = Type5.Object(
|
|
548
|
-
{
|
|
549
|
-
width: Type5.Number({
|
|
550
|
-
minimum: 0.1,
|
|
551
|
-
description: "Canvas width in inches (pptx slideWidth)"
|
|
552
|
-
}),
|
|
553
|
-
height: Type5.Number({
|
|
554
|
-
minimum: 0.1,
|
|
555
|
-
description: "Canvas height in inches (pptx slideHeight)"
|
|
556
|
-
}),
|
|
557
|
-
theme: Type5.Optional(
|
|
558
|
-
Type5.String({ description: "pptx theme name applied to the slide" })
|
|
559
|
-
),
|
|
560
|
-
background: Type5.Optional(VisualCanvasBackgroundSchema)
|
|
561
|
-
},
|
|
562
|
-
{
|
|
563
|
-
description: "pptx canvas definition for the visual",
|
|
564
|
-
additionalProperties: false
|
|
565
|
-
}
|
|
566
|
-
);
|
|
567
|
-
var VisualPropsSchema = Type5.Object(
|
|
568
|
-
{
|
|
569
|
-
// ── canvas (drives aspect ratio + physical size) ──
|
|
570
|
-
canvas: VisualCanvasSchema,
|
|
571
|
-
// pptx slide content elements, absolutely positioned on the canvas
|
|
572
|
-
elements: Type5.Optional(
|
|
573
|
-
Type5.Array(PptxSlideContentSchema, {
|
|
574
|
-
description: "pptx slide content elements (text, image, shape, table, highcharts, chart), positioned with x/y/w/h in inches"
|
|
575
|
-
})
|
|
576
|
-
),
|
|
577
|
-
// ── rasterization ──
|
|
578
|
-
dpi: Type5.Optional(
|
|
579
|
-
Type5.Number({
|
|
580
|
-
minimum: MIN_VISUAL_DPI,
|
|
581
|
-
maximum: MAX_VISUAL_DPI,
|
|
582
|
-
default: DEFAULT_VISUAL_DPI,
|
|
583
|
-
description: `Raster resolution in DPI (default ${DEFAULT_VISUAL_DPI}, range ${MIN_VISUAL_DPI}-${MAX_VISUAL_DPI}). Higher = sharper + larger.`
|
|
584
|
-
})
|
|
585
|
-
),
|
|
586
|
-
serverUrl: Type5.Optional(
|
|
587
|
-
Type5.String({
|
|
588
|
-
description: "Rasterization service URL override (default from services.pptx)"
|
|
589
|
-
})
|
|
590
|
-
),
|
|
591
|
-
// ── placement in the document (mirrors `image`) ──
|
|
592
|
-
width: Type5.Optional(
|
|
593
|
-
Type5.Union(
|
|
594
|
-
[
|
|
595
|
-
Type5.Number({ minimum: 1, description: "Rendered width in pixels" }),
|
|
596
|
-
Type5.String({
|
|
597
|
-
pattern: "^\\d+(\\.\\d+)?%$",
|
|
598
|
-
description: 'Rendered width as percentage (e.g. "90%")'
|
|
599
|
-
})
|
|
600
|
-
],
|
|
601
|
-
{
|
|
602
|
-
description: "Rendered width in the document, in pixels (number) or percentage string. Defaults to the canvas physical size."
|
|
603
|
-
}
|
|
604
|
-
)
|
|
605
|
-
),
|
|
606
|
-
height: Type5.Optional(
|
|
607
|
-
Type5.Union([
|
|
608
|
-
Type5.Number({ minimum: 1, description: "Rendered height in pixels" }),
|
|
609
|
-
Type5.String({
|
|
610
|
-
pattern: "^\\d+(\\.\\d+)?%$",
|
|
611
|
-
description: 'Rendered height as percentage (e.g. "90%")'
|
|
612
|
-
})
|
|
613
|
-
])
|
|
614
|
-
),
|
|
615
|
-
alignment: Type5.Optional(AlignmentSchema),
|
|
616
|
-
caption: Type5.Optional(
|
|
617
|
-
Type5.String({
|
|
618
|
-
description: "Caption (supports rich text with **bold**, *italic*, ***both***)"
|
|
619
|
-
})
|
|
620
|
-
),
|
|
621
|
-
alt: Type5.Optional(
|
|
622
|
-
Type5.String({ description: "Alternative text for accessibility" })
|
|
623
|
-
),
|
|
624
|
-
spacing: Type5.Optional(SpacingSchema),
|
|
625
|
-
floating: Type5.Optional(FloatingPropertiesSchema),
|
|
626
|
-
keepNext: Type5.Optional(
|
|
627
|
-
Type5.Boolean({
|
|
628
|
-
description: "Keep paragraph with next paragraph on same page"
|
|
629
|
-
})
|
|
630
|
-
),
|
|
631
|
-
keepLines: Type5.Optional(
|
|
632
|
-
Type5.Boolean({
|
|
633
|
-
description: "Keep all lines of paragraph together on same page"
|
|
634
|
-
})
|
|
635
|
-
)
|
|
636
|
-
},
|
|
637
|
-
{
|
|
638
|
-
description: "Visual component props (pptx-rendered graphic)",
|
|
639
|
-
additionalProperties: false
|
|
640
|
-
}
|
|
641
|
-
);
|
|
642
|
-
|
|
643
521
|
// src/schemas/component-registry.ts
|
|
644
522
|
var STANDARD_COMPONENTS_REGISTRY = [
|
|
645
523
|
// ========================================================================
|
|
@@ -770,7 +648,7 @@ var STANDARD_COMPONENTS_REGISTRY = [
|
|
|
770
648
|
propsSchema: VisualPropsSchema,
|
|
771
649
|
hasChildren: false,
|
|
772
650
|
category: "content",
|
|
773
|
-
description:
|
|
651
|
+
description: 'Free-canvas graphic for infographics, diagrams and layered compositions the document flow cannot express. Rasterized from a pptx slide by default; renderMode "native" draws it as an editable Word drawing group (renderer "office-open").'
|
|
774
652
|
}
|
|
775
653
|
];
|
|
776
654
|
function getStandardComponent(name) {
|
|
@@ -797,26 +675,26 @@ function demandsProps(propsSchema) {
|
|
|
797
675
|
}
|
|
798
676
|
function createComponentSchemaObject(component, childrenType, selfRef, profile) {
|
|
799
677
|
const schema = {
|
|
800
|
-
name:
|
|
801
|
-
id:
|
|
802
|
-
enabled:
|
|
803
|
-
|
|
678
|
+
name: Type5.Literal(component.name),
|
|
679
|
+
id: Type5.Optional(Type5.String()),
|
|
680
|
+
enabled: Type5.Optional(
|
|
681
|
+
Type5.Boolean({
|
|
804
682
|
default: true,
|
|
805
683
|
description: "When false, this component is filtered out and not rendered. Defaults to true. Useful for conditional component inclusion."
|
|
806
684
|
})
|
|
807
685
|
)
|
|
808
686
|
};
|
|
809
687
|
if (component.special?.hasSchemaField) {
|
|
810
|
-
schema.$schema =
|
|
811
|
-
schema.renderer = profile ? profile.requireDiscriminator ?
|
|
688
|
+
schema.$schema = Type5.Optional(Type5.String({ format: "uri" }));
|
|
689
|
+
schema.renderer = profile ? profile.requireDiscriminator ? Type5.Literal(profile.renderer, {
|
|
812
690
|
description: "Renderer backend for this document"
|
|
813
|
-
}) :
|
|
814
|
-
|
|
691
|
+
}) : Type5.Optional(
|
|
692
|
+
Type5.Literal(profile.renderer, {
|
|
815
693
|
description: 'Renderer backend. Omitted defaults to "docxjs".'
|
|
816
694
|
})
|
|
817
|
-
) :
|
|
818
|
-
|
|
819
|
-
DOCX_RENDERER_IDS.map((renderer) =>
|
|
695
|
+
) : Type5.Optional(
|
|
696
|
+
Type5.Union(
|
|
697
|
+
DOCX_RENDERER_IDS.map((renderer) => Type5.Literal(renderer)),
|
|
820
698
|
{
|
|
821
699
|
description: 'Renderer backend. Omitted defaults to "docxjs".'
|
|
822
700
|
}
|
|
@@ -824,12 +702,16 @@ function createComponentSchemaObject(component, childrenType, selfRef, profile)
|
|
|
824
702
|
);
|
|
825
703
|
}
|
|
826
704
|
const basePropsSchema = component.createPropsSchema && selfRef ? component.createPropsSchema(selfRef) : component.propsSchema;
|
|
827
|
-
const propsSchema = profile ? docxPropsSchemaForRenderer(
|
|
828
|
-
|
|
705
|
+
const propsSchema = profile ? docxPropsSchemaForRenderer(
|
|
706
|
+
component.name,
|
|
707
|
+
basePropsSchema,
|
|
708
|
+
profile.renderer
|
|
709
|
+
) : basePropsSchema;
|
|
710
|
+
schema.props = demandsProps(propsSchema) ? propsSchema : Type5.Optional(propsSchema);
|
|
829
711
|
if (component.hasChildren && childrenType) {
|
|
830
|
-
schema.children = component.special?.hasSchemaField ?
|
|
712
|
+
schema.children = component.special?.hasSchemaField ? Type5.Array(childrenType) : Type5.Optional(Type5.Array(childrenType));
|
|
831
713
|
}
|
|
832
|
-
return
|
|
714
|
+
return Type5.Object(schema, {
|
|
833
715
|
additionalProperties: false,
|
|
834
716
|
description: component.description
|
|
835
717
|
});
|
|
@@ -870,7 +752,7 @@ function createAllComponentSchemasNarrowed(selfRef, pluginSchemas = [], profile)
|
|
|
870
752
|
if (!containerDeps.every((d) => resolved.has(d))) continue;
|
|
871
753
|
const childSchemas = comp.allowedChildren.map((name) => resolved.get(name) ?? leafSchemas.get(name)).filter((s) => s !== void 0);
|
|
872
754
|
const allChildSchemas = [...childSchemas, ...pluginSchemas];
|
|
873
|
-
const childrenType = allChildSchemas.length === 1 ? allChildSchemas[0] :
|
|
755
|
+
const childrenType = allChildSchemas.length === 1 ? allChildSchemas[0] : Type5.Union(allChildSchemas);
|
|
874
756
|
resolved.set(
|
|
875
757
|
comp.name,
|
|
876
758
|
createComponentSchemaObject(comp, childrenType, selfRef, profile)
|
|
@@ -897,9 +779,6 @@ export {
|
|
|
897
779
|
TocDepthRangeSchema,
|
|
898
780
|
TocPropsSchema,
|
|
899
781
|
HighchartsPropsSchema,
|
|
900
|
-
VisualCanvasBackgroundSchema,
|
|
901
|
-
VisualCanvasSchema,
|
|
902
|
-
VisualPropsSchema,
|
|
903
782
|
STANDARD_COMPONENTS_REGISTRY,
|
|
904
783
|
getStandardComponent,
|
|
905
784
|
getAllStandardComponentNames,
|
|
@@ -911,4 +790,4 @@ export {
|
|
|
911
790
|
createAllComponentSchemas,
|
|
912
791
|
createAllComponentSchemasNarrowed
|
|
913
792
|
};
|
|
914
|
-
//# sourceMappingURL=chunk-
|
|
793
|
+
//# sourceMappingURL=chunk-A2K66URO.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/schemas/component-registry.ts","../src/schemas/components/report.ts","../src/schemas/components/text-box.ts","../src/schemas/components/toc.ts","../src/schemas/components/highcharts.ts"],"sourcesContent":["/**\n * Component Registry - SINGLE SOURCE OF TRUTH\n *\n * This is the ONLY place where standard components are defined.\n * All schema generators MUST use this registry.\n *\n * Adding a new component: Add it to STANDARD_COMPONENTS_REGISTRY below.\n * It will automatically be included in:\n * - StandardComponentDefinitionSchema (components.ts)\n * - ComponentDefinitionSchema (components.ts)\n * - generateUnifiedDocumentSchema (generator.ts)\n * - Monaco editor autocomplete\n * - Build-time JSON schemas\n */\n\nimport { Type, TSchema } from '@sinclair/typebox';\n// Import directly from individual component files to avoid circular dependency\n// (components.ts imports from this file, so we can't import from components.ts)\nimport { ReportPropsSchema } from './components/report';\nimport {\n SectionPropsSchema,\n createSectionPropsSchema,\n} from './components/section';\nimport { ColumnsPropsSchema } from './components/columns';\nimport { HeadingPropsSchema } from './components/heading';\nimport { ParagraphPropsSchema } from './components/paragraph';\nimport { TextBoxPropsSchema } from './components/text-box';\nimport { ImagePropsSchema } from './components/image';\nimport { StatisticPropsSchema } from './components/statistic';\nimport { TablePropsSchema, createTablePropsSchema } from './components/table';\nimport { ListPropsSchema } from './components/list';\nimport { TocPropsSchema } from './components/toc';\nimport { HighchartsPropsSchema } from './components/highcharts';\nimport { VisualPropsSchema } from './components/visual';\nimport {\n DOCX_RENDERER_IDS,\n docxPropsSchemaForRenderer,\n type DocxRendererId,\n} from './renderer';\n\n/**\n * Component definition with metadata\n */\nexport interface StandardComponentDefinition {\n /** Component name identifier (e.g., 'heading', 'text', 'toc') */\n name: string;\n /** TypeBox schema for the component's props */\n propsSchema: TSchema;\n /** Whether this component can contain children */\n hasChildren: boolean;\n /**\n * Names of standard components allowed as direct children.\n * Only meaningful when hasChildren is true.\n * Plugin components are always allowed in addition to these.\n * Omit to allow the full recursive union (backward-compat).\n */\n allowedChildren?: readonly string[];\n /**\n * Factory that builds props with a live recursive ref (e.g., for section\n * header/footer, table cell content). When present and a recursive ref is\n * available, used instead of the static `propsSchema`.\n */\n createPropsSchema?: (recursiveRef: TSchema) => TSchema;\n /** Component category for organization */\n category: 'container' | 'content' | 'layout';\n /** Human-readable description */\n description: string;\n /** Special flags for this component */\n special?: {\n /** Has $schema field (only 'docx') */\n hasSchemaField?: boolean;\n };\n}\n\n/**\n * SINGLE SOURCE OF TRUTH for all standard components\n *\n * This is the ONLY place where standard components are defined.\n * All schema generators MUST use this registry.\n *\n * IMPORTANT: When adding a new component:\n * 1. Add the component definition to this array\n * 2. Import its props schema at the top of this file\n * 3. That's it! The component will automatically appear everywhere.\n */\nexport const STANDARD_COMPONENTS_REGISTRY: readonly StandardComponentDefinition[] =\n [\n // ========================================================================\n // Container Components (can contain children)\n // ========================================================================\n {\n name: 'docx',\n propsSchema: ReportPropsSchema,\n hasChildren: true,\n allowedChildren: ['section'],\n category: 'container',\n description:\n 'Main document container - defines the overall document structure. Required as the root component.',\n special: {\n hasSchemaField: true, // Only docx root has $schema field\n },\n },\n {\n name: 'section',\n propsSchema: SectionPropsSchema,\n createPropsSchema: createSectionPropsSchema,\n hasChildren: true,\n allowedChildren: [\n 'heading',\n 'paragraph',\n 'image',\n 'statistic',\n 'table',\n 'list',\n 'toc',\n 'highcharts',\n 'visual',\n 'columns',\n 'text-box',\n ],\n category: 'container',\n description:\n 'Section container - groups related content with optional title. Use for organizing document structure.',\n },\n {\n name: 'columns',\n propsSchema: ColumnsPropsSchema,\n hasChildren: true,\n allowedChildren: [\n 'heading',\n 'paragraph',\n 'image',\n 'statistic',\n 'table',\n 'list',\n 'toc',\n 'highcharts',\n 'visual',\n 'text-box',\n ],\n category: 'layout',\n description:\n 'Multi-column layout - arranges content in 2-4 columns. Great for side-by-side content.',\n },\n {\n name: 'text-box',\n propsSchema: TextBoxPropsSchema,\n hasChildren: true,\n allowedChildren: ['heading', 'paragraph', 'image'],\n category: 'layout',\n description:\n 'Floating text container - allows positioning text anywhere on the page with absolute or relative positioning.',\n },\n\n // ========================================================================\n // Content Components (leaf nodes, no children)\n // ========================================================================\n {\n name: 'heading',\n propsSchema: HeadingPropsSchema,\n hasChildren: false,\n category: 'content',\n description:\n 'Heading text - supports levels 1-6 for document hierarchy. Level 1 is largest.',\n },\n {\n name: 'paragraph',\n propsSchema: ParagraphPropsSchema,\n hasChildren: false,\n category: 'content',\n description:\n 'Paragraph text - supports formatting like bold, italic, and color. Main content element.',\n },\n {\n name: 'image',\n propsSchema: ImagePropsSchema,\n hasChildren: false,\n category: 'content',\n description:\n 'Image element - displays images with optional caption. Supports various formats.',\n },\n {\n name: 'statistic',\n propsSchema: StatisticPropsSchema,\n hasChildren: false,\n category: 'content',\n description:\n 'Statistic display - shows a number with description. Perfect for KPIs and metrics.',\n },\n {\n name: 'table',\n propsSchema: TablePropsSchema,\n createPropsSchema: createTablePropsSchema,\n hasChildren: false,\n category: 'content',\n description:\n 'Data table - displays tabular data with headers. Supports formatting and alignment.',\n },\n {\n name: 'list',\n propsSchema: ListPropsSchema,\n hasChildren: false,\n category: 'content',\n description:\n 'List element - bulleted or numbered list items. Supports nested lists.',\n },\n {\n name: 'toc',\n propsSchema: TocPropsSchema,\n hasChildren: false,\n category: 'content',\n description:\n 'Table of contents - automatically generates TOC from document headings. Supports depth ranges and custom styles.',\n },\n {\n name: 'highcharts',\n propsSchema: HighchartsPropsSchema,\n hasChildren: false,\n category: 'content',\n description:\n 'Chart component powered by Highcharts - render line, bar, pie, heatmap, and more with rich options.',\n },\n {\n name: 'visual',\n propsSchema: VisualPropsSchema,\n hasChildren: false,\n category: 'content',\n description:\n 'Free-canvas graphic for infographics, diagrams and layered compositions the document flow cannot express. Rasterized from a pptx slide by default; renderMode \"native\" draws it as an editable Word drawing group (renderer \"office-open\").',\n },\n ] as const;\n\n// ============================================================================\n// Helper Functions\n// ============================================================================\n\n/**\n * Get a component definition by name\n */\nexport function getStandardComponent(\n name: string\n): StandardComponentDefinition | undefined {\n return STANDARD_COMPONENTS_REGISTRY.find((c) => c.name === name);\n}\n\n/**\n * Get all standard component names\n */\nexport function getAllStandardComponentNames(): readonly string[] {\n return STANDARD_COMPONENTS_REGISTRY.map((c) => c.name);\n}\n\n/**\n * Get components by category\n */\nexport function getComponentsByCategory(\n category: StandardComponentDefinition['category']\n): readonly StandardComponentDefinition[] {\n return STANDARD_COMPONENTS_REGISTRY.filter((c) => c.category === category);\n}\n\n/**\n * Get container components (components that can have children)\n */\nexport function getContainerComponents(): readonly StandardComponentDefinition[] {\n return STANDARD_COMPONENTS_REGISTRY.filter((c) => c.hasChildren);\n}\n\n/**\n * Get content components (components that cannot have children)\n */\nexport function getContentComponents(): readonly StandardComponentDefinition[] {\n return STANDARD_COMPONENTS_REGISTRY.filter((c) => !c.hasChildren);\n}\n\n/**\n * Check if a component name is a standard component\n */\nexport function isStandardComponent(name: string): boolean {\n return STANDARD_COMPONENTS_REGISTRY.some((c) => c.name === name);\n}\n\n// ============================================================================\n// Schema Generation Helpers\n// ============================================================================\n\n/**\n * True when a props schema rejects `{}`, i.e. the `props` key cannot be omitted.\n *\n * Only object schemas are inspected. Anything else (a union, a bare ref) is\n * treated as demanding props, preserving the previous stricter behavior for\n * shapes this cannot reason about.\n */\nfunction demandsProps(propsSchema: TSchema): boolean {\n const schema = propsSchema as { type?: string; required?: readonly string[] };\n return schema.type !== 'object' || (schema.required?.length ?? 0) > 0;\n}\n\n/**\n * Generate TypeBox schema object for a component.\n *\n * @param component - Component definition from the registry\n * @param childrenType - Schema for children items. For containers this should be\n * a narrowed union of allowed children; for leaves omit it.\n * @returns TypeBox schema object for the component\n */\nexport function createComponentSchemaObject(\n component: StandardComponentDefinition,\n childrenType?: TSchema,\n selfRef?: TSchema,\n profile?: { renderer: DocxRendererId; requireDiscriminator: boolean }\n): TSchema {\n const schema: Record<string, TSchema> = {\n name: Type.Literal(component.name),\n id: Type.Optional(Type.String()),\n enabled: Type.Optional(\n Type.Boolean({\n default: true,\n description:\n 'When false, this component is filtered out and not rendered. Defaults to true. Useful for conditional component inclusion.',\n })\n ),\n };\n\n // Special handling for report component (has $schema field)\n if (component.special?.hasSchemaField) {\n schema.$schema = Type.Optional(Type.String({ format: 'uri' }));\n schema.renderer = profile\n ? profile.requireDiscriminator\n ? Type.Literal(profile.renderer, {\n description: 'Renderer backend for this document',\n })\n : Type.Optional(\n Type.Literal(profile.renderer, {\n description: 'Renderer backend. Omitted defaults to \"docxjs\".',\n })\n )\n : Type.Optional(\n Type.Union(\n DOCX_RENDERER_IDS.map((renderer) => Type.Literal(renderer)),\n {\n description: 'Renderer backend. Omitted defaults to \"docxjs\".',\n }\n )\n );\n }\n\n // selfRef (full union) is intentionally passed to createPropsSchema so that\n // header/footer sub-schemas and table cell content can reference any component.\n const basePropsSchema =\n component.createPropsSchema && selfRef\n ? component.createPropsSchema(selfRef)\n : component.propsSchema;\n const propsSchema = profile\n ? docxPropsSchemaForRenderer(\n component.name,\n basePropsSchema,\n profile.renderer\n )\n : basePropsSchema;\n\n // `props` is required only when the props schema itself demands a field.\n // The runtime validator treats an omitted `props` as `{}` and lets the props\n // schema decide (see deep-validator.ts), so `section`, `toc`, `image` and\n // `text-box` are legal without the key. Exporting `props` as unconditionally\n // required reddened documents that build: the playground flagged all 23\n // propless sections in the shipped tech-report template while every runtime\n // gate stayed green. The root `docx` node already carried this fix locally in\n // generator.ts; this generalizes it to every component.\n schema.props = demandsProps(propsSchema)\n ? propsSchema\n : Type.Optional(propsSchema);\n\n // Add children support if applicable. The root component requires its\n // `children` array — deep-validator.ts enforces the same rule, but only on\n // the fallback path it takes when the TypeBox check already failed. That\n // made the rule fire only as a side effect of `props` being required, so\n // relaxing `props` above would silently retire it. Nested containers may\n // legitimately be empty.\n if (component.hasChildren && childrenType) {\n schema.children = component.special?.hasSchemaField\n ? Type.Array(childrenType)\n : Type.Optional(Type.Array(childrenType));\n }\n\n return Type.Object(schema, {\n additionalProperties: false,\n description: component.description,\n });\n}\n\n/**\n * Generate an array of TypeBox schemas for all standard components.\n * Uses a flat recursive ref for all containers (legacy behavior).\n *\n * @param recursiveRef - Optional recursive reference for children\n * @returns Array of TypeBox schemas for all components in the registry\n */\nexport function createAllComponentSchemas(\n recursiveRef?: TSchema\n): readonly TSchema[] {\n return STANDARD_COMPONENTS_REGISTRY.map((component) =>\n createComponentSchemaObject(component, recursiveRef)\n );\n}\n\n/**\n * Build all standard component schemas with per-container narrowed children.\n *\n * Resolves containers in dependency order so each container's children union\n * only references its allowedChildren. Plugin schemas are always included in\n * every container's children.\n *\n * @param selfRef - The Type.Recursive self-reference (used as fallback and for plugin children)\n * @param pluginSchemas - Plugin component schemas (always allowed in all containers)\n * @returns schemas array and a byName map for direct lookups\n */\nexport function createAllComponentSchemasNarrowed(\n selfRef: TSchema,\n pluginSchemas: TSchema[] = [],\n profile?: { renderer: DocxRendererId; requireDiscriminator: boolean }\n): { schemas: TSchema[]; byName: Map<string, TSchema> } {\n // Phase 1: Build leaf (non-container) component schemas — no children\n // selfRef is passed so factories (e.g. table) can wire up recursive refs.\n const leafSchemas = new Map<string, TSchema>();\n for (const comp of STANDARD_COMPONENTS_REGISTRY) {\n if (!comp.hasChildren) {\n leafSchemas.set(\n comp.name,\n createComponentSchemaObject(comp, undefined, selfRef, profile)\n );\n }\n }\n\n // Phase 2: Resolve containers in dependency order\n const containers = STANDARD_COMPONENTS_REGISTRY.filter((c) => c.hasChildren);\n const resolved = new Map<string, TSchema>();\n const pending = [...containers];\n\n while (pending.length > 0) {\n const before = pending.length;\n for (let i = pending.length - 1; i >= 0; i--) {\n const comp = pending[i];\n\n if (!comp.allowedChildren) {\n // No allowedChildren declared — fallback to full recursive ref\n resolved.set(\n comp.name,\n createComponentSchemaObject(comp, selfRef, selfRef, profile)\n );\n pending.splice(i, 1);\n continue;\n }\n\n // Check if all container dependencies are resolved\n const containerDeps = comp.allowedChildren.filter((name) =>\n containers.some((c) => c.name === name)\n );\n if (!containerDeps.every((d) => resolved.has(d))) continue;\n\n // Build narrowed children union\n const childSchemas = comp.allowedChildren\n .map((name) => resolved.get(name) ?? leafSchemas.get(name))\n .filter((s): s is TSchema => s !== undefined);\n\n const allChildSchemas = [...childSchemas, ...pluginSchemas];\n const childrenType =\n allChildSchemas.length === 1\n ? allChildSchemas[0]\n : Type.Union(allChildSchemas);\n\n resolved.set(\n comp.name,\n createComponentSchemaObject(comp, childrenType, selfRef, profile)\n );\n pending.splice(i, 1);\n }\n\n if (pending.length === before) {\n throw new Error(\n `Circular allowedChildren among: ${pending.map((c) => c.name).join(', ')}`\n );\n }\n }\n\n // Combine: containers (resolved) + leaves\n const byName = new Map([...resolved, ...leafSchemas]);\n return { schemas: [...byName.values()], byName };\n}\n","/**\n * Report Component Schema\n */\n\nimport { Type, Static, TSchema } from '@sinclair/typebox';\nimport { FontRegistrySchema } from '@json-to-office/shared';\nimport { ComponentDefaultsSchema } from '../component-defaults';\nimport { NoProofWordsSchema } from '../font';\nimport { ThemeOverridesSchema } from '../theme';\n\n// Create a function to generate ReportPropsSchema with recursive component reference\nexport const createReportPropsSchema = (_componentRef?: TSchema) =>\n Type.Object(\n {\n theme: Type.Optional(\n Type.String({\n description: 'Theme name to apply (default: \"minimal\")',\n examples: ['minimal', 'corporate', 'modern'],\n default: 'minimal',\n })\n ),\n themeOverrides: Type.Optional(ThemeOverridesSchema),\n fontRegistry: Type.Optional(FontRegistrySchema),\n componentDefaults: Type.Optional(ComponentDefaultsSchema),\n language: Type.Optional(\n Type.String({\n pattern: '^[A-Za-z]{2,3}(-[A-Za-z0-9]{2,8})*$',\n description:\n 'Default document language (BCP-47 tag, e.g. \"en-US\"). Sets Word\\'s default proofing/spell-check language; individual components can override it locally.',\n examples: ['en-US', 'fr-FR', 'de-DE', 'it-IT', 'es-ES'],\n })\n ),\n noProofWords: Type.Optional(NoProofWordsSchema),\n trackRevisions: Type.Optional(\n Type.Boolean({\n description:\n 'Open the document in track-changes mode: Word marks any further edits as revisions. Set automatically on redline documents produced by the diff engine',\n })\n ),\n metadata: Type.Optional(\n Type.Object(\n {\n title: Type.Optional(\n Type.String({\n description: 'Document title',\n examples: ['Annual Report 2024', 'Technical Documentation'],\n })\n ),\n subtitle: Type.Optional(\n Type.String({\n description: 'Document subtitle',\n })\n ),\n description: Type.Optional(Type.String()),\n author: Type.Optional(Type.String()),\n company: Type.Optional(\n Type.String({\n description:\n 'Company name, written to docProps/custom.xml (Word has no core-property slot for it)',\n })\n ),\n date: Type.Optional(\n Type.String({\n description:\n 'Document date used by {DATE}/{DATETIME} placeholders (defaults to the generation timestamp)',\n })\n ),\n version: Type.Optional(\n Type.String({\n description: 'Document version, written to docProps/custom.xml',\n examples: ['1.0', '2024.3'],\n })\n ),\n tags: Type.Optional(Type.Array(Type.String())),\n },\n {\n description:\n 'Document metadata (title, author, company, version, etc.). Package timestamps (dcterms:created/modified) are not part of this object: they come from the `generatedAt` generation option so repeated builds stay byte-identical.',\n additionalProperties: false,\n }\n )\n ),\n },\n {\n description: 'Report component props',\n additionalProperties: false,\n }\n );\n\nexport const ReportPropsSchema = createReportPropsSchema();\n\nexport type ReportProps = Static<typeof ReportPropsSchema>;\n","/**\n * Text Box Component Schema\n * A floating container that can hold child components (e.g., text, image, columns)\n *\n * Positioning API mirrors existing floating options from text/image for consistency.\n *\n * **Nested Columns Support:**\n * When a `columns` component is nested inside a `text-box`, it automatically renders\n * as a multi-column table instead of a section-level column layout. This allows\n * for columnar content within floating or inline containers.\n */\n\nimport { Type, Static } from '@sinclair/typebox';\nimport { FloatingPropertiesSchema } from './common';\nimport { HexColorSchema } from '../font';\n\nexport const TextBoxPropsSchema = Type.Object(\n {\n width: Type.Optional(\n Type.Union(\n [\n Type.Number({\n minimum: 1,\n description: 'Text box width in pixels',\n }),\n Type.String({\n pattern: '^\\\\d+(\\\\.\\\\d+)?%$',\n description:\n 'Text box width as percentage (e.g., \"50%\") relative to content width',\n }),\n ],\n {\n description:\n 'Text box width in pixels (number) or as percentage string (e.g., \"50%\")',\n }\n )\n ),\n height: Type.Optional(\n Type.Union(\n [\n Type.Number({\n minimum: 1,\n description: 'Text box height in pixels',\n }),\n Type.String({\n pattern: '^\\\\d+(\\\\.\\\\d+)?%$',\n description:\n 'Text box height as percentage (e.g., \"50%\") relative to content height',\n }),\n ],\n {\n description:\n 'Text box height in pixels (number) or as percentage string (e.g., \"50%\")',\n }\n )\n ),\n renderAs: Type.Optional(\n Type.Union([Type.Literal('table'), Type.Literal('shape')], {\n description:\n \"Rendering strategy. 'table' (default): borderless one-cell table — height auto-fits content, per-side borders and percentage widths resolve in Word. 'shape': native Word text box (WPS shape) — real wrap modes and z-order, but requires explicit width and height (no autofit), a single uniform border, and eagerly-resolved percentage sizes.\",\n })\n ),\n floating: Type.Optional(FloatingPropertiesSchema),\n style: Type.Optional(\n Type.Object(\n {\n padding: Type.Optional(\n Type.Object(\n {\n top: Type.Optional(Type.Number({ minimum: 0 })),\n right: Type.Optional(Type.Number({ minimum: 0 })),\n bottom: Type.Optional(Type.Number({ minimum: 0 })),\n left: Type.Optional(Type.Number({ minimum: 0 })),\n },\n { additionalProperties: false }\n )\n ),\n border: Type.Optional(\n Type.Object(\n {\n top: Type.Optional(\n // Reuse border schema semantics: style/width/color\n Type.Object(\n {\n style: Type.Optional(\n Type.Union([\n Type.Literal('solid'),\n Type.Literal('dashed'),\n Type.Literal('dotted'),\n Type.Literal('double'),\n Type.Literal('none'),\n ])\n ),\n width: Type.Optional(Type.Number({ minimum: 0 })),\n color: Type.Optional(HexColorSchema),\n },\n { additionalProperties: false }\n )\n ),\n right: Type.Optional(\n Type.Object(\n {\n style: Type.Optional(\n Type.Union([\n Type.Literal('solid'),\n Type.Literal('dashed'),\n Type.Literal('dotted'),\n Type.Literal('double'),\n Type.Literal('none'),\n ])\n ),\n width: Type.Optional(Type.Number({ minimum: 0 })),\n color: Type.Optional(HexColorSchema),\n },\n { additionalProperties: false }\n )\n ),\n bottom: Type.Optional(\n Type.Object(\n {\n style: Type.Optional(\n Type.Union([\n Type.Literal('solid'),\n Type.Literal('dashed'),\n Type.Literal('dotted'),\n Type.Literal('double'),\n Type.Literal('none'),\n ])\n ),\n width: Type.Optional(Type.Number({ minimum: 0 })),\n color: Type.Optional(HexColorSchema),\n },\n { additionalProperties: false }\n )\n ),\n left: Type.Optional(\n Type.Object(\n {\n style: Type.Optional(\n Type.Union([\n Type.Literal('solid'),\n Type.Literal('dashed'),\n Type.Literal('dotted'),\n Type.Literal('double'),\n Type.Literal('none'),\n ])\n ),\n width: Type.Optional(Type.Number({ minimum: 0 })),\n color: Type.Optional(HexColorSchema),\n },\n { additionalProperties: false }\n )\n ),\n },\n { additionalProperties: false }\n )\n ),\n shading: Type.Optional(\n Type.Object(\n {\n // Same domain as every other colour prop and as the border\n // colours above: resolveColor() accepts \"#RRGGBB\" or a theme\n // colour name, and throws on anything else at render time.\n fill: Type.Optional(HexColorSchema),\n },\n { additionalProperties: false }\n )\n ),\n },\n { additionalProperties: false }\n )\n ),\n },\n {\n additionalProperties: false,\n /**\n * The same two shape limits `collectTextBoxShapeConflicts` enforces, said\n * in JSON Schema so an editor can say it too.\n *\n * The deep validator only runs when a document is generated, so until now\n * an author learned that a shape needs a height by pressing Run. These are\n * plain cross-field rules, and `if`/`then` expresses them — which is what\n * Monaco checks the buffer against, so the editor underlines the mistake\n * while it is being made. The deep validator stays as the backstop: it\n * carries the remediation text, and it is what the API enforces for\n * callers who never see an editor.\n */\n allOf: [\n {\n if: {\n properties: { renderAs: { const: 'shape' } },\n required: ['renderAs'],\n },\n then: {\n required: ['width', 'height'],\n properties: {\n style: {\n properties: {\n border: {\n properties: Object.fromEntries(\n ['top', 'right', 'bottom', 'left'].map((side) => [\n side,\n { properties: { style: { enum: ['solid', 'none'] } } },\n ])\n ),\n },\n },\n },\n },\n },\n },\n ],\n }\n);\n\nexport type TextBoxProps = Static<typeof TextBoxPropsSchema>;\n","/**\n * Table of Contents Component Schema\n */\n\nimport { Type, Static } from '@sinclair/typebox';\n\n/**\n * Kept for back-compat only. Word's TOC field has no numbering switch, so the\n * renderer cannot apply this and logs a warning when it is set; entries inherit\n * the numbering of the heading styles they reference.\n */\nexport const TocStyleSchema = Type.Union(\n [Type.Literal('numeric'), Type.Literal('bullet'), Type.Literal('none')],\n {\n description:\n 'TOC numbering style — accepted but not applied (Word TOC fields carry no numbering switch); setting it logs a warning during generation',\n }\n);\n\nexport const TocScopeSchema = Type.Union(\n [Type.Literal('document'), Type.Literal('section')],\n { description: 'TOC scope: document-wide or section-only' }\n);\n\nexport const TocStyleMappingSchema = Type.Object(\n {\n styleId: Type.String({\n description: 'Custom style ID matching a key in theme.styles',\n }),\n level: Type.Number({\n minimum: 1,\n maximum: 6,\n description: 'TOC level (1-6) to assign to this style',\n }),\n },\n {\n description: 'Mapping of custom style to TOC level',\n additionalProperties: false,\n }\n);\n\nexport const TocDepthRangeSchema = Type.Object(\n {\n from: Type.Optional(\n Type.Number({\n minimum: 1,\n maximum: 6,\n default: 1,\n description:\n 'Starting heading level (1-6). Defaults to 1 if not specified.',\n })\n ),\n to: Type.Optional(\n Type.Number({\n minimum: 1,\n maximum: 6,\n default: 3,\n description:\n 'Ending heading level (1-6). Defaults to 3 if not specified.',\n })\n ),\n },\n {\n description:\n 'Range of heading levels to include in TOC. Specify at least one of \"from\" or \"to\".',\n additionalProperties: false,\n }\n);\n\nexport const TocPropsSchema = Type.Object(\n {\n pageBreak: Type.Optional(\n Type.Boolean({\n description: 'Insert page break before TOC block',\n })\n ),\n depth: Type.Optional(\n Type.Object(\n {\n from: Type.Optional(\n Type.Number({\n minimum: 1,\n maximum: 6,\n default: 1,\n description:\n 'Starting heading level (1-6). Defaults to 1 if not specified.',\n })\n ),\n to: Type.Optional(\n Type.Number({\n minimum: 1,\n maximum: 6,\n default: 3,\n description:\n 'Ending heading level (1-6). Defaults to 3 if not specified.',\n })\n ),\n },\n {\n description:\n 'Range of heading levels to include in TOC. Specify \"from\", \"to\", or both. Defaults: from=1, to=3',\n additionalProperties: false,\n default: { to: 3 },\n }\n )\n ),\n pageNumbersDepth: Type.Optional(\n Type.Object(\n {\n from: Type.Optional(\n Type.Number({\n minimum: 1,\n maximum: 6,\n default: 1,\n description:\n 'Starting heading level (1-6). Defaults to 1 if not specified.',\n })\n ),\n to: Type.Optional(\n Type.Number({\n minimum: 1,\n maximum: 6,\n default: 3,\n description:\n 'Ending heading level (1-6). Defaults to 3 if not specified.',\n })\n ),\n },\n {\n description:\n 'Range of heading levels to show page numbers. Specify \"from\", \"to\", or both. When specified, page numbers are hidden for entries outside this range.',\n additionalProperties: false,\n }\n )\n ),\n numberingStyle: Type.Optional(TocStyleSchema),\n title: Type.Optional(\n Type.String({\n description: 'TOC heading title',\n })\n ),\n includePageNumbers: Type.Optional(\n Type.Boolean({\n default: true,\n description: 'Show page numbers next to entries',\n })\n ),\n numberSeparator: Type.Optional(\n Type.Boolean({\n default: true,\n description:\n 'Use tab separator between entry and page number. True applies \"\\\\t\" (default), false applies \" \"',\n })\n ),\n scope: Type.Optional(\n Type.Union([TocScopeSchema, Type.Literal('auto')], {\n default: 'auto',\n description:\n 'TOC scope: \"document\" for entire document, \"section\" for parent section only, \"auto\" for automatic detection (section if inside section, otherwise document)',\n })\n ),\n styles: Type.Optional(\n Type.Array(TocStyleMappingSchema, {\n description:\n 'Custom style mappings for TOC entries. Maps custom theme styles to TOC levels.',\n })\n ),\n },\n {\n description: 'Table of Contents component props',\n additionalProperties: false,\n }\n);\n\nexport type TocProps = Static<typeof TocPropsSchema>;\n","/**\n * Highcharts Component Schema\n *\n * Standard component for rendering charts using Highcharts export server.\n */\n\nimport { Type, Static } from '@sinclair/typebox';\n\n/**\n * Highcharts component props schema\n * Accepts options that will be passed to Highcharts export server\n */\nexport const HighchartsPropsSchema = Type.Object({\n // Highcharts chart options - can be anything but must at least have chart.width and chart.height\n options: Type.Intersect([\n Type.Record(Type.String(), Type.Unknown()),\n Type.Object({\n chart: Type.Object({\n width: Type.Number(),\n height: Type.Number(),\n }),\n }),\n ]),\n // Optional scale factor for export\n scale: Type.Optional(Type.Number()),\n // Optional resources forwarded verbatim to the export server (CSS/JS/files).\n // Notably enables @font-face rules so charts render in custom fonts.\n resources: Type.Optional(\n Type.Object({\n css: Type.Optional(Type.String()),\n js: Type.Optional(Type.String()),\n files: Type.Optional(Type.Array(Type.String())),\n })\n ),\n // Optional Highcharts Export Server URL override\n serverUrl: Type.Optional(\n Type.String({\n description:\n 'Highcharts Export Server URL (default: http://localhost:7801)',\n })\n ),\n // Optional width for rendering (overrides chart width)\n width: Type.Optional(\n Type.Union(\n [\n Type.Number({\n minimum: 1,\n description: 'Image width in pixels',\n }),\n Type.String({\n pattern: '^\\\\d+(\\\\.\\\\d+)?%$',\n description:\n 'Image width as percentage (e.g., \"90%\") relative to content width',\n }),\n ],\n {\n description:\n 'Rendered image width in pixels (number) or as percentage string (e.g., \"90%\")',\n }\n )\n ),\n // Optional height for rendering (overrides chart height)\n height: Type.Optional(\n Type.Union(\n [\n Type.Number({\n minimum: 1,\n description: 'Image height in pixels',\n }),\n Type.String({\n pattern: '^\\\\d+(\\\\.\\\\d+)?%$',\n description:\n 'Image height as percentage (e.g., \"90%\") relative to content height',\n }),\n ],\n {\n description:\n 'Rendered image height in pixels (number) or as percentage string (e.g., \"90%\")',\n }\n )\n ),\n});\n\nexport type HighchartsProps = Static<typeof HighchartsPropsSchema>;\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAeA,SAAS,QAAAA,aAAqB;;;ACX9B,SAAS,YAA6B;AACtC,SAAS,0BAA0B;AAM5B,IAAM,0BAA0B,CAAC,kBACtC,KAAK;AAAA,EACH;AAAA,IACE,OAAO,KAAK;AAAA,MACV,KAAK,OAAO;AAAA,QACV,aAAa;AAAA,QACb,UAAU,CAAC,WAAW,aAAa,QAAQ;AAAA,QAC3C,SAAS;AAAA,MACX,CAAC;AAAA,IACH;AAAA,IACA,gBAAgB,KAAK,SAAS,oBAAoB;AAAA,IAClD,cAAc,KAAK,SAAS,kBAAkB;AAAA,IAC9C,mBAAmB,KAAK,SAAS,uBAAuB;AAAA,IACxD,UAAU,KAAK;AAAA,MACb,KAAK,OAAO;AAAA,QACV,SAAS;AAAA,QACT,aACE;AAAA,QACF,UAAU,CAAC,SAAS,SAAS,SAAS,SAAS,OAAO;AAAA,MACxD,CAAC;AAAA,IACH;AAAA,IACA,cAAc,KAAK,SAAS,kBAAkB;AAAA,IAC9C,gBAAgB,KAAK;AAAA,MACnB,KAAK,QAAQ;AAAA,QACX,aACE;AAAA,MACJ,CAAC;AAAA,IACH;AAAA,IACA,UAAU,KAAK;AAAA,MACb,KAAK;AAAA,QACH;AAAA,UACE,OAAO,KAAK;AAAA,YACV,KAAK,OAAO;AAAA,cACV,aAAa;AAAA,cACb,UAAU,CAAC,sBAAsB,yBAAyB;AAAA,YAC5D,CAAC;AAAA,UACH;AAAA,UACA,UAAU,KAAK;AAAA,YACb,KAAK,OAAO;AAAA,cACV,aAAa;AAAA,YACf,CAAC;AAAA,UACH;AAAA,UACA,aAAa,KAAK,SAAS,KAAK,OAAO,CAAC;AAAA,UACxC,QAAQ,KAAK,SAAS,KAAK,OAAO,CAAC;AAAA,UACnC,SAAS,KAAK;AAAA,YACZ,KAAK,OAAO;AAAA,cACV,aACE;AAAA,YACJ,CAAC;AAAA,UACH;AAAA,UACA,MAAM,KAAK;AAAA,YACT,KAAK,OAAO;AAAA,cACV,aACE;AAAA,YACJ,CAAC;AAAA,UACH;AAAA,UACA,SAAS,KAAK;AAAA,YACZ,KAAK,OAAO;AAAA,cACV,aAAa;AAAA,cACb,UAAU,CAAC,OAAO,QAAQ;AAAA,YAC5B,CAAC;AAAA,UACH;AAAA,UACA,MAAM,KAAK,SAAS,KAAK,MAAM,KAAK,OAAO,CAAC,CAAC;AAAA,QAC/C;AAAA,QACA;AAAA,UACE,aACE;AAAA,UACF,sBAAsB;AAAA,QACxB;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAAA,EACA;AAAA,IACE,aAAa;AAAA,IACb,sBAAsB;AAAA,EACxB;AACF;AAEK,IAAM,oBAAoB,wBAAwB;;;AC7EzD,SAAS,QAAAC,aAAoB;AAItB,IAAM,qBAAqBC,MAAK;AAAA,EACrC;AAAA,IACE,OAAOA,MAAK;AAAA,MACVA,MAAK;AAAA,QACH;AAAA,UACEA,MAAK,OAAO;AAAA,YACV,SAAS;AAAA,YACT,aAAa;AAAA,UACf,CAAC;AAAA,UACDA,MAAK,OAAO;AAAA,YACV,SAAS;AAAA,YACT,aACE;AAAA,UACJ,CAAC;AAAA,QACH;AAAA,QACA;AAAA,UACE,aACE;AAAA,QACJ;AAAA,MACF;AAAA,IACF;AAAA,IACA,QAAQA,MAAK;AAAA,MACXA,MAAK;AAAA,QACH;AAAA,UACEA,MAAK,OAAO;AAAA,YACV,SAAS;AAAA,YACT,aAAa;AAAA,UACf,CAAC;AAAA,UACDA,MAAK,OAAO;AAAA,YACV,SAAS;AAAA,YACT,aACE;AAAA,UACJ,CAAC;AAAA,QACH;AAAA,QACA;AAAA,UACE,aACE;AAAA,QACJ;AAAA,MACF;AAAA,IACF;AAAA,IACA,UAAUA,MAAK;AAAA,MACbA,MAAK,MAAM,CAACA,MAAK,QAAQ,OAAO,GAAGA,MAAK,QAAQ,OAAO,CAAC,GAAG;AAAA,QACzD,aACE;AAAA,MACJ,CAAC;AAAA,IACH;AAAA,IACA,UAAUA,MAAK,SAAS,wBAAwB;AAAA,IAChD,OAAOA,MAAK;AAAA,MACVA,MAAK;AAAA,QACH;AAAA,UACE,SAASA,MAAK;AAAA,YACZA,MAAK;AAAA,cACH;AAAA,gBACE,KAAKA,MAAK,SAASA,MAAK,OAAO,EAAE,SAAS,EAAE,CAAC,CAAC;AAAA,gBAC9C,OAAOA,MAAK,SAASA,MAAK,OAAO,EAAE,SAAS,EAAE,CAAC,CAAC;AAAA,gBAChD,QAAQA,MAAK,SAASA,MAAK,OAAO,EAAE,SAAS,EAAE,CAAC,CAAC;AAAA,gBACjD,MAAMA,MAAK,SAASA,MAAK,OAAO,EAAE,SAAS,EAAE,CAAC,CAAC;AAAA,cACjD;AAAA,cACA,EAAE,sBAAsB,MAAM;AAAA,YAChC;AAAA,UACF;AAAA,UACA,QAAQA,MAAK;AAAA,YACXA,MAAK;AAAA,cACH;AAAA,gBACE,KAAKA,MAAK;AAAA;AAAA,kBAERA,MAAK;AAAA,oBACH;AAAA,sBACE,OAAOA,MAAK;AAAA,wBACVA,MAAK,MAAM;AAAA,0BACTA,MAAK,QAAQ,OAAO;AAAA,0BACpBA,MAAK,QAAQ,QAAQ;AAAA,0BACrBA,MAAK,QAAQ,QAAQ;AAAA,0BACrBA,MAAK,QAAQ,QAAQ;AAAA,0BACrBA,MAAK,QAAQ,MAAM;AAAA,wBACrB,CAAC;AAAA,sBACH;AAAA,sBACA,OAAOA,MAAK,SAASA,MAAK,OAAO,EAAE,SAAS,EAAE,CAAC,CAAC;AAAA,sBAChD,OAAOA,MAAK,SAAS,cAAc;AAAA,oBACrC;AAAA,oBACA,EAAE,sBAAsB,MAAM;AAAA,kBAChC;AAAA,gBACF;AAAA,gBACA,OAAOA,MAAK;AAAA,kBACVA,MAAK;AAAA,oBACH;AAAA,sBACE,OAAOA,MAAK;AAAA,wBACVA,MAAK,MAAM;AAAA,0BACTA,MAAK,QAAQ,OAAO;AAAA,0BACpBA,MAAK,QAAQ,QAAQ;AAAA,0BACrBA,MAAK,QAAQ,QAAQ;AAAA,0BACrBA,MAAK,QAAQ,QAAQ;AAAA,0BACrBA,MAAK,QAAQ,MAAM;AAAA,wBACrB,CAAC;AAAA,sBACH;AAAA,sBACA,OAAOA,MAAK,SAASA,MAAK,OAAO,EAAE,SAAS,EAAE,CAAC,CAAC;AAAA,sBAChD,OAAOA,MAAK,SAAS,cAAc;AAAA,oBACrC;AAAA,oBACA,EAAE,sBAAsB,MAAM;AAAA,kBAChC;AAAA,gBACF;AAAA,gBACA,QAAQA,MAAK;AAAA,kBACXA,MAAK;AAAA,oBACH;AAAA,sBACE,OAAOA,MAAK;AAAA,wBACVA,MAAK,MAAM;AAAA,0BACTA,MAAK,QAAQ,OAAO;AAAA,0BACpBA,MAAK,QAAQ,QAAQ;AAAA,0BACrBA,MAAK,QAAQ,QAAQ;AAAA,0BACrBA,MAAK,QAAQ,QAAQ;AAAA,0BACrBA,MAAK,QAAQ,MAAM;AAAA,wBACrB,CAAC;AAAA,sBACH;AAAA,sBACA,OAAOA,MAAK,SAASA,MAAK,OAAO,EAAE,SAAS,EAAE,CAAC,CAAC;AAAA,sBAChD,OAAOA,MAAK,SAAS,cAAc;AAAA,oBACrC;AAAA,oBACA,EAAE,sBAAsB,MAAM;AAAA,kBAChC;AAAA,gBACF;AAAA,gBACA,MAAMA,MAAK;AAAA,kBACTA,MAAK;AAAA,oBACH;AAAA,sBACE,OAAOA,MAAK;AAAA,wBACVA,MAAK,MAAM;AAAA,0BACTA,MAAK,QAAQ,OAAO;AAAA,0BACpBA,MAAK,QAAQ,QAAQ;AAAA,0BACrBA,MAAK,QAAQ,QAAQ;AAAA,0BACrBA,MAAK,QAAQ,QAAQ;AAAA,0BACrBA,MAAK,QAAQ,MAAM;AAAA,wBACrB,CAAC;AAAA,sBACH;AAAA,sBACA,OAAOA,MAAK,SAASA,MAAK,OAAO,EAAE,SAAS,EAAE,CAAC,CAAC;AAAA,sBAChD,OAAOA,MAAK,SAAS,cAAc;AAAA,oBACrC;AAAA,oBACA,EAAE,sBAAsB,MAAM;AAAA,kBAChC;AAAA,gBACF;AAAA,cACF;AAAA,cACA,EAAE,sBAAsB,MAAM;AAAA,YAChC;AAAA,UACF;AAAA,UACA,SAASA,MAAK;AAAA,YACZA,MAAK;AAAA,cACH;AAAA;AAAA;AAAA;AAAA,gBAIE,MAAMA,MAAK,SAAS,cAAc;AAAA,cACpC;AAAA,cACA,EAAE,sBAAsB,MAAM;AAAA,YAChC;AAAA,UACF;AAAA,QACF;AAAA,QACA,EAAE,sBAAsB,MAAM;AAAA,MAChC;AAAA,IACF;AAAA,EACF;AAAA,EACA;AAAA,IACE,sBAAsB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAatB,OAAO;AAAA,MACL;AAAA,QACE,IAAI;AAAA,UACF,YAAY,EAAE,UAAU,EAAE,OAAO,QAAQ,EAAE;AAAA,UAC3C,UAAU,CAAC,UAAU;AAAA,QACvB;AAAA,QACA,MAAM;AAAA,UACJ,UAAU,CAAC,SAAS,QAAQ;AAAA,UAC5B,YAAY;AAAA,YACV,OAAO;AAAA,cACL,YAAY;AAAA,gBACV,QAAQ;AAAA,kBACN,YAAY,OAAO;AAAA,oBACjB,CAAC,OAAO,SAAS,UAAU,MAAM,EAAE,IAAI,CAAC,SAAS;AAAA,sBAC/C;AAAA,sBACA,EAAE,YAAY,EAAE,OAAO,EAAE,MAAM,CAAC,SAAS,MAAM,EAAE,EAAE,EAAE;AAAA,oBACvD,CAAC;AAAA,kBACH;AAAA,gBACF;AAAA,cACF;AAAA,YACF;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACF;;;ACjNA,SAAS,QAAAC,aAAoB;AAOtB,IAAM,iBAAiBA,MAAK;AAAA,EACjC,CAACA,MAAK,QAAQ,SAAS,GAAGA,MAAK,QAAQ,QAAQ,GAAGA,MAAK,QAAQ,MAAM,CAAC;AAAA,EACtE;AAAA,IACE,aACE;AAAA,EACJ;AACF;AAEO,IAAM,iBAAiBA,MAAK;AAAA,EACjC,CAACA,MAAK,QAAQ,UAAU,GAAGA,MAAK,QAAQ,SAAS,CAAC;AAAA,EAClD,EAAE,aAAa,2CAA2C;AAC5D;AAEO,IAAM,wBAAwBA,MAAK;AAAA,EACxC;AAAA,IACE,SAASA,MAAK,OAAO;AAAA,MACnB,aAAa;AAAA,IACf,CAAC;AAAA,IACD,OAAOA,MAAK,OAAO;AAAA,MACjB,SAAS;AAAA,MACT,SAAS;AAAA,MACT,aAAa;AAAA,IACf,CAAC;AAAA,EACH;AAAA,EACA;AAAA,IACE,aAAa;AAAA,IACb,sBAAsB;AAAA,EACxB;AACF;AAEO,IAAM,sBAAsBA,MAAK;AAAA,EACtC;AAAA,IACE,MAAMA,MAAK;AAAA,MACTA,MAAK,OAAO;AAAA,QACV,SAAS;AAAA,QACT,SAAS;AAAA,QACT,SAAS;AAAA,QACT,aACE;AAAA,MACJ,CAAC;AAAA,IACH;AAAA,IACA,IAAIA,MAAK;AAAA,MACPA,MAAK,OAAO;AAAA,QACV,SAAS;AAAA,QACT,SAAS;AAAA,QACT,SAAS;AAAA,QACT,aACE;AAAA,MACJ,CAAC;AAAA,IACH;AAAA,EACF;AAAA,EACA;AAAA,IACE,aACE;AAAA,IACF,sBAAsB;AAAA,EACxB;AACF;AAEO,IAAM,iBAAiBA,MAAK;AAAA,EACjC;AAAA,IACE,WAAWA,MAAK;AAAA,MACdA,MAAK,QAAQ;AAAA,QACX,aAAa;AAAA,MACf,CAAC;AAAA,IACH;AAAA,IACA,OAAOA,MAAK;AAAA,MACVA,MAAK;AAAA,QACH;AAAA,UACE,MAAMA,MAAK;AAAA,YACTA,MAAK,OAAO;AAAA,cACV,SAAS;AAAA,cACT,SAAS;AAAA,cACT,SAAS;AAAA,cACT,aACE;AAAA,YACJ,CAAC;AAAA,UACH;AAAA,UACA,IAAIA,MAAK;AAAA,YACPA,MAAK,OAAO;AAAA,cACV,SAAS;AAAA,cACT,SAAS;AAAA,cACT,SAAS;AAAA,cACT,aACE;AAAA,YACJ,CAAC;AAAA,UACH;AAAA,QACF;AAAA,QACA;AAAA,UACE,aACE;AAAA,UACF,sBAAsB;AAAA,UACtB,SAAS,EAAE,IAAI,EAAE;AAAA,QACnB;AAAA,MACF;AAAA,IACF;AAAA,IACA,kBAAkBA,MAAK;AAAA,MACrBA,MAAK;AAAA,QACH;AAAA,UACE,MAAMA,MAAK;AAAA,YACTA,MAAK,OAAO;AAAA,cACV,SAAS;AAAA,cACT,SAAS;AAAA,cACT,SAAS;AAAA,cACT,aACE;AAAA,YACJ,CAAC;AAAA,UACH;AAAA,UACA,IAAIA,MAAK;AAAA,YACPA,MAAK,OAAO;AAAA,cACV,SAAS;AAAA,cACT,SAAS;AAAA,cACT,SAAS;AAAA,cACT,aACE;AAAA,YACJ,CAAC;AAAA,UACH;AAAA,QACF;AAAA,QACA;AAAA,UACE,aACE;AAAA,UACF,sBAAsB;AAAA,QACxB;AAAA,MACF;AAAA,IACF;AAAA,IACA,gBAAgBA,MAAK,SAAS,cAAc;AAAA,IAC5C,OAAOA,MAAK;AAAA,MACVA,MAAK,OAAO;AAAA,QACV,aAAa;AAAA,MACf,CAAC;AAAA,IACH;AAAA,IACA,oBAAoBA,MAAK;AAAA,MACvBA,MAAK,QAAQ;AAAA,QACX,SAAS;AAAA,QACT,aAAa;AAAA,MACf,CAAC;AAAA,IACH;AAAA,IACA,iBAAiBA,MAAK;AAAA,MACpBA,MAAK,QAAQ;AAAA,QACX,SAAS;AAAA,QACT,aACE;AAAA,MACJ,CAAC;AAAA,IACH;AAAA,IACA,OAAOA,MAAK;AAAA,MACVA,MAAK,MAAM,CAAC,gBAAgBA,MAAK,QAAQ,MAAM,CAAC,GAAG;AAAA,QACjD,SAAS;AAAA,QACT,aACE;AAAA,MACJ,CAAC;AAAA,IACH;AAAA,IACA,QAAQA,MAAK;AAAA,MACXA,MAAK,MAAM,uBAAuB;AAAA,QAChC,aACE;AAAA,MACJ,CAAC;AAAA,IACH;AAAA,EACF;AAAA,EACA;AAAA,IACE,aAAa;AAAA,IACb,sBAAsB;AAAA,EACxB;AACF;;;ACtKA,SAAS,QAAAC,aAAoB;AAMtB,IAAM,wBAAwBA,MAAK,OAAO;AAAA;AAAA,EAE/C,SAASA,MAAK,UAAU;AAAA,IACtBA,MAAK,OAAOA,MAAK,OAAO,GAAGA,MAAK,QAAQ,CAAC;AAAA,IACzCA,MAAK,OAAO;AAAA,MACV,OAAOA,MAAK,OAAO;AAAA,QACjB,OAAOA,MAAK,OAAO;AAAA,QACnB,QAAQA,MAAK,OAAO;AAAA,MACtB,CAAC;AAAA,IACH,CAAC;AAAA,EACH,CAAC;AAAA;AAAA,EAED,OAAOA,MAAK,SAASA,MAAK,OAAO,CAAC;AAAA;AAAA;AAAA,EAGlC,WAAWA,MAAK;AAAA,IACdA,MAAK,OAAO;AAAA,MACV,KAAKA,MAAK,SAASA,MAAK,OAAO,CAAC;AAAA,MAChC,IAAIA,MAAK,SAASA,MAAK,OAAO,CAAC;AAAA,MAC/B,OAAOA,MAAK,SAASA,MAAK,MAAMA,MAAK,OAAO,CAAC,CAAC;AAAA,IAChD,CAAC;AAAA,EACH;AAAA;AAAA,EAEA,WAAWA,MAAK;AAAA,IACdA,MAAK,OAAO;AAAA,MACV,aACE;AAAA,IACJ,CAAC;AAAA,EACH;AAAA;AAAA,EAEA,OAAOA,MAAK;AAAA,IACVA,MAAK;AAAA,MACH;AAAA,QACEA,MAAK,OAAO;AAAA,UACV,SAAS;AAAA,UACT,aAAa;AAAA,QACf,CAAC;AAAA,QACDA,MAAK,OAAO;AAAA,UACV,SAAS;AAAA,UACT,aACE;AAAA,QACJ,CAAC;AAAA,MACH;AAAA,MACA;AAAA,QACE,aACE;AAAA,MACJ;AAAA,IACF;AAAA,EACF;AAAA;AAAA,EAEA,QAAQA,MAAK;AAAA,IACXA,MAAK;AAAA,MACH;AAAA,QACEA,MAAK,OAAO;AAAA,UACV,SAAS;AAAA,UACT,aAAa;AAAA,QACf,CAAC;AAAA,QACDA,MAAK,OAAO;AAAA,UACV,SAAS;AAAA,UACT,aACE;AAAA,QACJ,CAAC;AAAA,MACH;AAAA,MACA;AAAA,QACE,aACE;AAAA,MACJ;AAAA,IACF;AAAA,EACF;AACF,CAAC;;;AJIM,IAAM,+BACX;AAAA;AAAA;AAAA;AAAA,EAIE;AAAA,IACE,MAAM;AAAA,IACN,aAAa;AAAA,IACb,aAAa;AAAA,IACb,iBAAiB,CAAC,SAAS;AAAA,IAC3B,UAAU;AAAA,IACV,aACE;AAAA,IACF,SAAS;AAAA,MACP,gBAAgB;AAAA;AAAA,IAClB;AAAA,EACF;AAAA,EACA;AAAA,IACE,MAAM;AAAA,IACN,aAAa;AAAA,IACb,mBAAmB;AAAA,IACnB,aAAa;AAAA,IACb,iBAAiB;AAAA,MACf;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,IACA,UAAU;AAAA,IACV,aACE;AAAA,EACJ;AAAA,EACA;AAAA,IACE,MAAM;AAAA,IACN,aAAa;AAAA,IACb,aAAa;AAAA,IACb,iBAAiB;AAAA,MACf;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,IACA,UAAU;AAAA,IACV,aACE;AAAA,EACJ;AAAA,EACA;AAAA,IACE,MAAM;AAAA,IACN,aAAa;AAAA,IACb,aAAa;AAAA,IACb,iBAAiB,CAAC,WAAW,aAAa,OAAO;AAAA,IACjD,UAAU;AAAA,IACV,aACE;AAAA,EACJ;AAAA;AAAA;AAAA;AAAA,EAKA;AAAA,IACE,MAAM;AAAA,IACN,aAAa;AAAA,IACb,aAAa;AAAA,IACb,UAAU;AAAA,IACV,aACE;AAAA,EACJ;AAAA,EACA;AAAA,IACE,MAAM;AAAA,IACN,aAAa;AAAA,IACb,aAAa;AAAA,IACb,UAAU;AAAA,IACV,aACE;AAAA,EACJ;AAAA,EACA;AAAA,IACE,MAAM;AAAA,IACN,aAAa;AAAA,IACb,aAAa;AAAA,IACb,UAAU;AAAA,IACV,aACE;AAAA,EACJ;AAAA,EACA;AAAA,IACE,MAAM;AAAA,IACN,aAAa;AAAA,IACb,aAAa;AAAA,IACb,UAAU;AAAA,IACV,aACE;AAAA,EACJ;AAAA,EACA;AAAA,IACE,MAAM;AAAA,IACN,aAAa;AAAA,IACb,mBAAmB;AAAA,IACnB,aAAa;AAAA,IACb,UAAU;AAAA,IACV,aACE;AAAA,EACJ;AAAA,EACA;AAAA,IACE,MAAM;AAAA,IACN,aAAa;AAAA,IACb,aAAa;AAAA,IACb,UAAU;AAAA,IACV,aACE;AAAA,EACJ;AAAA,EACA;AAAA,IACE,MAAM;AAAA,IACN,aAAa;AAAA,IACb,aAAa;AAAA,IACb,UAAU;AAAA,IACV,aACE;AAAA,EACJ;AAAA,EACA;AAAA,IACE,MAAM;AAAA,IACN,aAAa;AAAA,IACb,aAAa;AAAA,IACb,UAAU;AAAA,IACV,aACE;AAAA,EACJ;AAAA,EACA;AAAA,IACE,MAAM;AAAA,IACN,aAAa;AAAA,IACb,aAAa;AAAA,IACb,UAAU;AAAA,IACV,aACE;AAAA,EACJ;AACF;AASK,SAAS,qBACd,MACyC;AACzC,SAAO,6BAA6B,KAAK,CAAC,MAAM,EAAE,SAAS,IAAI;AACjE;AAKO,SAAS,+BAAkD;AAChE,SAAO,6BAA6B,IAAI,CAAC,MAAM,EAAE,IAAI;AACvD;AAKO,SAAS,wBACd,UACwC;AACxC,SAAO,6BAA6B,OAAO,CAAC,MAAM,EAAE,aAAa,QAAQ;AAC3E;AAKO,SAAS,yBAAiE;AAC/E,SAAO,6BAA6B,OAAO,CAAC,MAAM,EAAE,WAAW;AACjE;AAKO,SAAS,uBAA+D;AAC7E,SAAO,6BAA6B,OAAO,CAAC,MAAM,CAAC,EAAE,WAAW;AAClE;AAKO,SAAS,oBAAoB,MAAuB;AACzD,SAAO,6BAA6B,KAAK,CAAC,MAAM,EAAE,SAAS,IAAI;AACjE;AAaA,SAAS,aAAa,aAA+B;AACnD,QAAM,SAAS;AACf,SAAO,OAAO,SAAS,aAAa,OAAO,UAAU,UAAU,KAAK;AACtE;AAUO,SAAS,4BACd,WACA,cACA,SACA,SACS;AACT,QAAM,SAAkC;AAAA,IACtC,MAAMC,MAAK,QAAQ,UAAU,IAAI;AAAA,IACjC,IAAIA,MAAK,SAASA,MAAK,OAAO,CAAC;AAAA,IAC/B,SAASA,MAAK;AAAA,MACZA,MAAK,QAAQ;AAAA,QACX,SAAS;AAAA,QACT,aACE;AAAA,MACJ,CAAC;AAAA,IACH;AAAA,EACF;AAGA,MAAI,UAAU,SAAS,gBAAgB;AACrC,WAAO,UAAUA,MAAK,SAASA,MAAK,OAAO,EAAE,QAAQ,MAAM,CAAC,CAAC;AAC7D,WAAO,WAAW,UACd,QAAQ,uBACNA,MAAK,QAAQ,QAAQ,UAAU;AAAA,MAC7B,aAAa;AAAA,IACf,CAAC,IACDA,MAAK;AAAA,MACHA,MAAK,QAAQ,QAAQ,UAAU;AAAA,QAC7B,aAAa;AAAA,MACf,CAAC;AAAA,IACH,IACFA,MAAK;AAAA,MACHA,MAAK;AAAA,QACH,kBAAkB,IAAI,CAAC,aAAaA,MAAK,QAAQ,QAAQ,CAAC;AAAA,QAC1D;AAAA,UACE,aAAa;AAAA,QACf;AAAA,MACF;AAAA,IACF;AAAA,EACN;AAIA,QAAM,kBACJ,UAAU,qBAAqB,UAC3B,UAAU,kBAAkB,OAAO,IACnC,UAAU;AAChB,QAAM,cAAc,UAChB;AAAA,IACE,UAAU;AAAA,IACV;AAAA,IACA,QAAQ;AAAA,EACV,IACA;AAUJ,SAAO,QAAQ,aAAa,WAAW,IACnC,cACAA,MAAK,SAAS,WAAW;AAQ7B,MAAI,UAAU,eAAe,cAAc;AACzC,WAAO,WAAW,UAAU,SAAS,iBACjCA,MAAK,MAAM,YAAY,IACvBA,MAAK,SAASA,MAAK,MAAM,YAAY,CAAC;AAAA,EAC5C;AAEA,SAAOA,MAAK,OAAO,QAAQ;AAAA,IACzB,sBAAsB;AAAA,IACtB,aAAa,UAAU;AAAA,EACzB,CAAC;AACH;AASO,SAAS,0BACd,cACoB;AACpB,SAAO,6BAA6B;AAAA,IAAI,CAAC,cACvC,4BAA4B,WAAW,YAAY;AAAA,EACrD;AACF;AAaO,SAAS,kCACd,SACA,gBAA2B,CAAC,GAC5B,SACsD;AAGtD,QAAM,cAAc,oBAAI,IAAqB;AAC7C,aAAW,QAAQ,8BAA8B;AAC/C,QAAI,CAAC,KAAK,aAAa;AACrB,kBAAY;AAAA,QACV,KAAK;AAAA,QACL,4BAA4B,MAAM,QAAW,SAAS,OAAO;AAAA,MAC/D;AAAA,IACF;AAAA,EACF;AAGA,QAAM,aAAa,6BAA6B,OAAO,CAAC,MAAM,EAAE,WAAW;AAC3E,QAAM,WAAW,oBAAI,IAAqB;AAC1C,QAAM,UAAU,CAAC,GAAG,UAAU;AAE9B,SAAO,QAAQ,SAAS,GAAG;AACzB,UAAM,SAAS,QAAQ;AACvB,aAAS,IAAI,QAAQ,SAAS,GAAG,KAAK,GAAG,KAAK;AAC5C,YAAM,OAAO,QAAQ,CAAC;AAEtB,UAAI,CAAC,KAAK,iBAAiB;AAEzB,iBAAS;AAAA,UACP,KAAK;AAAA,UACL,4BAA4B,MAAM,SAAS,SAAS,OAAO;AAAA,QAC7D;AACA,gBAAQ,OAAO,GAAG,CAAC;AACnB;AAAA,MACF;AAGA,YAAM,gBAAgB,KAAK,gBAAgB;AAAA,QAAO,CAAC,SACjD,WAAW,KAAK,CAAC,MAAM,EAAE,SAAS,IAAI;AAAA,MACxC;AACA,UAAI,CAAC,cAAc,MAAM,CAAC,MAAM,SAAS,IAAI,CAAC,CAAC,EAAG;AAGlD,YAAM,eAAe,KAAK,gBACvB,IAAI,CAAC,SAAS,SAAS,IAAI,IAAI,KAAK,YAAY,IAAI,IAAI,CAAC,EACzD,OAAO,CAAC,MAAoB,MAAM,MAAS;AAE9C,YAAM,kBAAkB,CAAC,GAAG,cAAc,GAAG,aAAa;AAC1D,YAAM,eACJ,gBAAgB,WAAW,IACvB,gBAAgB,CAAC,IACjBA,MAAK,MAAM,eAAe;AAEhC,eAAS;AAAA,QACP,KAAK;AAAA,QACL,4BAA4B,MAAM,cAAc,SAAS,OAAO;AAAA,MAClE;AACA,cAAQ,OAAO,GAAG,CAAC;AAAA,IACrB;AAEA,QAAI,QAAQ,WAAW,QAAQ;AAC7B,YAAM,IAAI;AAAA,QACR,mCAAmC,QAAQ,IAAI,CAAC,MAAM,EAAE,IAAI,EAAE,KAAK,IAAI,CAAC;AAAA,MAC1E;AAAA,IACF;AAAA,EACF;AAGA,QAAM,SAAS,IAAI,IAAI,CAAC,GAAG,UAAU,GAAG,WAAW,CAAC;AACpD,SAAO,EAAE,SAAS,CAAC,GAAG,OAAO,OAAO,CAAC,GAAG,OAAO;AACjD;","names":["Type","Type","Type","Type","Type","Type"]}
|
|
@@ -1,12 +1,13 @@
|
|
|
1
1
|
import {
|
|
2
2
|
createAllComponentSchemasNarrowed,
|
|
3
3
|
getStandardComponent
|
|
4
|
-
} from "./chunk-
|
|
4
|
+
} from "./chunk-A2K66URO.js";
|
|
5
5
|
import {
|
|
6
6
|
DEFAULT_DOCX_RENDERER_ID,
|
|
7
7
|
DOCX_RENDERER_IDS,
|
|
8
|
+
docxComponentDefinitionName,
|
|
8
9
|
docxPropsSchemaForRenderer
|
|
9
|
-
} from "./chunk-
|
|
10
|
+
} from "./chunk-5KOKA5GY.js";
|
|
10
11
|
|
|
11
12
|
// src/schemas/generator.ts
|
|
12
13
|
import { Type } from "@sinclair/typebox";
|
|
@@ -34,6 +35,7 @@ function generateRendererDocumentSchema(options, renderer, requireDiscriminator)
|
|
|
34
35
|
} = options;
|
|
35
36
|
let capturedRootChildSchemas = [];
|
|
36
37
|
let capturedPluginSchemas = [];
|
|
38
|
+
const definitionName = docxComponentDefinitionName(renderer);
|
|
37
39
|
const ComponentDefinition = Type.Recursive(
|
|
38
40
|
(This) => {
|
|
39
41
|
const pluginSchemas = [];
|
|
@@ -119,7 +121,7 @@ function generateRendererDocumentSchema(options, renderer, requireDiscriminator)
|
|
|
119
121
|
});
|
|
120
122
|
}
|
|
121
123
|
},
|
|
122
|
-
{ $id:
|
|
124
|
+
{ $id: definitionName }
|
|
123
125
|
);
|
|
124
126
|
const reportComponent = getStandardComponent("docx");
|
|
125
127
|
if (!reportComponent) {
|
|
@@ -146,7 +148,11 @@ function generateRendererDocumentSchema(options, renderer, requireDiscriminator)
|
|
|
146
148
|
// the generator, both of which treat a propless root as `props: {}`.
|
|
147
149
|
// Schema-driven editors would otherwise flag a document that builds.
|
|
148
150
|
props: Type.Optional(
|
|
149
|
-
docxPropsSchemaForRenderer(
|
|
151
|
+
docxPropsSchemaForRenderer(
|
|
152
|
+
reportComponent.name,
|
|
153
|
+
reportComponent.propsSchema,
|
|
154
|
+
renderer
|
|
155
|
+
)
|
|
150
156
|
),
|
|
151
157
|
// Required, matching the runtime validator: a root without `children`
|
|
152
158
|
// is rejected (deep-validator.ts), so the exported schema says so too.
|
|
@@ -160,9 +166,9 @@ function generateRendererDocumentSchema(options, renderer, requireDiscriminator)
|
|
|
160
166
|
additionalProperties: false,
|
|
161
167
|
title,
|
|
162
168
|
description,
|
|
163
|
-
// Embed
|
|
164
|
-
//
|
|
165
|
-
definitions: { ComponentDefinition }
|
|
169
|
+
// Embed it so convertToJsonSchema extracts it to definitions and this
|
|
170
|
+
// branch's bare `$ref: "<definitionName>"` values resolve.
|
|
171
|
+
definitions: { [definitionName]: ComponentDefinition }
|
|
166
172
|
}
|
|
167
173
|
);
|
|
168
174
|
}
|
|
@@ -170,4 +176,4 @@ function generateRendererDocumentSchema(options, renderer, requireDiscriminator)
|
|
|
170
176
|
export {
|
|
171
177
|
generateUnifiedDocumentSchema
|
|
172
178
|
};
|
|
173
|
-
//# sourceMappingURL=chunk-
|
|
179
|
+
//# sourceMappingURL=chunk-BBFR3RRN.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/schemas/generator.ts"],"sourcesContent":["/**\n * Unified Document Schema Generator - SHARED UTILITY\n *\n * This is the SHARED implementation for generating document schemas.\n * It's used by MULTIPLE CONSUMERS with different requirements:\n *\n * 1. BUILD-TIME: generate-schemas.mjs uses this to create static .schema.json files\n * - Only standard components (no custom components available at build time)\n * - Outputs to filesystem for IDE autocomplete\n *\n * 2. RUNTIME PLUGIN: plugin/schema.ts uses this for plugin-enhanced schemas\n * - Includes custom components registered at runtime\n * - Cannot be generated at build time (components must be instantiated)\n *\n * 3. WEB APP: Monaco editor may use this for in-browser validation\n * - Optimized for browser environment\n * - No filesystem access\n *\n * This separation is ARCHITECTURAL, not accidental:\n * - Build-time vs runtime constraints are incompatible\n * - Custom components require runtime instantiation\n * - Different consumers need different output formats\n *\n * IMPORTANT: Standard components are defined in component-registry.ts (SINGLE SOURCE OF TRUTH).\n * This generator consumes that registry to ensure consistency across all schema generation.\n */\n\nimport { Type, TSchema } from '@sinclair/typebox';\nimport {\n createAllComponentSchemasNarrowed,\n getStandardComponent,\n} from './component-registry';\nimport { latestVersion } from '@json-to-office/shared';\nimport {\n DEFAULT_DOCX_RENDERER_ID,\n DOCX_RENDERER_IDS,\n docxComponentDefinitionName,\n docxPropsSchemaForRenderer,\n type DocxRendererId,\n} from './renderer';\n\n/**\n * Per-version props schema entry\n */\nexport interface VersionedPropsEntry {\n version: string;\n propsSchema: TSchema;\n hasChildren?: boolean;\n description?: string;\n}\n\n/**\n * Custom component interface for plugins\n */\nexport interface CustomComponentInfo {\n name: string;\n propsSchema: TSchema;\n /** When true, the component includes an optional `children` array */\n hasChildren?: boolean;\n /** Human-readable description shown in autocomplete */\n description?: string;\n /**\n * Per-version props schemas for version-discriminated validation.\n * When provided, separate schema variants are generated per version,\n * each pairing its version literal with its specific props schema.\n * A \"no version\" fallback variant uses the latest version's props.\n */\n versionedProps?: VersionedPropsEntry[];\n}\n\n/**\n * Options for generating document schema\n */\nexport interface GenerateDocumentSchemaOptions {\n includeStandardComponents?: boolean;\n includeTheme?: boolean;\n customComponents?: CustomComponentInfo[];\n title?: string;\n description?: string;\n}\n\n/**\n * Generate a complete document schema with all components\n *\n * This is the SHARED IMPLEMENTATION used by:\n * - Build-time schema generation (standard components only)\n * - Runtime plugin schema generation (with custom components)\n * - Web app schema generation (optimized for browser)\n *\n * @param options Configuration for what to include in the schema\n * @returns TypeBox schema that can be converted to JSON Schema\n */\nexport function generateUnifiedDocumentSchema(\n options: GenerateDocumentSchemaOptions = {}\n): TSchema {\n return Type.Union(\n DOCX_RENDERER_IDS.map((renderer) =>\n generateRendererDocumentSchema(\n options,\n renderer,\n renderer !== DEFAULT_DOCX_RENDERER_ID\n )\n ),\n {\n description:\n 'Document definition, discriminated by the optional renderer field. Omitted renderer means docxjs.',\n }\n );\n}\n\nfunction generateRendererDocumentSchema(\n options: GenerateDocumentSchemaOptions,\n renderer: DocxRendererId,\n requireDiscriminator: boolean\n): TSchema {\n const {\n includeStandardComponents = true,\n customComponents = [],\n title = 'JSON Report Definition',\n description = 'JSON report definition with TypeBox schemas',\n } = options;\n\n // Captured from inside the recursive callback for the root's children.\n let capturedRootChildSchemas: TSchema[] = [];\n let capturedPluginSchemas: TSchema[] = [];\n\n // Named per renderer. Both branches used to share one `$id`, and the export\n // pass keys `definitions` by it, so the last branch walked overwrote the\n // first and every position reached through the definition got that\n // renderer's rules whatever the document said.\n const definitionName = docxComponentDefinitionName(renderer);\n\n // Create a recursive component definition schema\n const ComponentDefinition = Type.Recursive(\n (This) => {\n // ── Phase 1: Build plugin schemas (plugins get Self for arbitrary nesting) ──\n const pluginSchemas: TSchema[] = [];\n\n for (const customComponent of customComponents) {\n if (\n customComponent.versionedProps &&\n customComponent.versionedProps.length > 0\n ) {\n // Version-discriminated: one variant per version + one \"no version\" fallback\n const versionEntries = customComponent.versionedProps;\n const latest = latestVersion(versionEntries.map((e) => e.version));\n\n // Per-version variants: version is required, props are version-specific\n for (const entry of versionEntries) {\n const versionLiteralDesc =\n entry.description || customComponent.description;\n const schema: Record<string, TSchema> = {\n name: Type.Literal(customComponent.name),\n id: Type.Optional(Type.String()),\n version: versionLiteralDesc\n ? Type.Literal(entry.version, {\n description: versionLiteralDesc,\n })\n : Type.Literal(entry.version),\n props: entry.propsSchema,\n };\n if (entry.hasChildren) {\n schema.children = Type.Optional(Type.Array(This));\n }\n const versionDesc = entry.description\n ? `${customComponent.name} v${entry.version} — ${entry.description}`\n : customComponent.description\n ? `${customComponent.name} v${entry.version} — ${customComponent.description}`\n : `${customComponent.name} v${entry.version}`;\n pluginSchemas.push(\n Type.Object(schema, {\n additionalProperties: false,\n description: versionDesc,\n })\n );\n }\n\n // \"No version\" fallback: version is NOT allowed, uses latest props\n const latestEntry = versionEntries.find((e) => e.version === latest)!;\n const fallbackSchema: Record<string, TSchema> = {\n name: Type.Literal(customComponent.name),\n id: Type.Optional(Type.String()),\n props: latestEntry.propsSchema,\n };\n if (latestEntry.hasChildren) {\n fallbackSchema.children = Type.Optional(Type.Array(This));\n }\n const fallbackDesc = latestEntry.description\n ? `${customComponent.name} (latest: v${latest}) — ${latestEntry.description}`\n : customComponent.description\n ? `${customComponent.name} (latest: v${latest}) — ${customComponent.description}`\n : `${customComponent.name} (latest: v${latest})`;\n pluginSchemas.push(\n Type.Object(fallbackSchema, {\n additionalProperties: false,\n description: fallbackDesc,\n })\n );\n } else {\n // Non-versioned component: single variant\n const hasChildren = !!customComponent.hasChildren;\n const schema: Record<string, TSchema> = {\n name: Type.Literal(customComponent.name),\n id: Type.Optional(Type.String()),\n props: customComponent.propsSchema,\n };\n if (hasChildren) {\n schema.children = Type.Optional(Type.Array(This));\n }\n pluginSchemas.push(\n Type.Object(schema, {\n additionalProperties: false,\n ...(customComponent.description\n ? { description: customComponent.description }\n : {}),\n })\n );\n }\n }\n\n // ── Phase 2: Build standard components with narrowed children ──\n const { schemas: standardSchemas, byName } = includeStandardComponents\n ? createAllComponentSchemasNarrowed(This, pluginSchemas, {\n renderer,\n requireDiscriminator,\n })\n : { schemas: [] as TSchema[], byName: new Map<string, TSchema>() };\n\n // Capture the root's permitted children + plugins. Must happen inside\n // the callback while standardSchemas is available.\n //\n // The root accepts `section` *and* everything a section accepts: the\n // runtime validator and generator both take content components placed\n // directly under `docx` (examples/contract-v1.docx.json is written that\n // way), so a section-only schema reddened valid documents in\n // schema-driven editors.\n const sectionComponent = getStandardComponent('section');\n capturedRootChildSchemas = [\n 'section',\n ...(sectionComponent?.allowedChildren ?? []),\n ]\n .map((componentName) => byName.get(componentName))\n .filter((schema): schema is TSchema => schema !== undefined);\n capturedPluginSchemas = pluginSchemas;\n\n const componentSchemas = [...standardSchemas, ...pluginSchemas];\n\n // Create the union based on the number of schemas\n if (componentSchemas.length === 0) {\n return Type.Any();\n } else if (componentSchemas.length === 1) {\n return componentSchemas[0];\n } else {\n const componentDescription =\n customComponents.length > 0\n ? 'Component definition with discriminated union including custom components'\n : 'Component definition with discriminated union';\n\n return Type.Union(componentSchemas, {\n discriminator: { propertyName: 'name' },\n description: componentDescription,\n });\n }\n },\n { $id: definitionName }\n );\n\n // Build root docx schema with narrowed children (section + section's own\n // permitted content). The component definition is embedded in `definitions`\n // so that $refs inside section header/footer and table cell content resolve.\n const reportComponent = getStandardComponent('docx');\n if (!reportComponent) {\n throw new Error('Docx root component not found in registry');\n }\n\n if (capturedRootChildSchemas.length === 0) {\n throw new Error(\n 'Root child schemas not found in narrowed standard schemas'\n );\n }\n\n return Type.Object(\n {\n name: Type.Literal('docx'),\n id: Type.Optional(Type.String()),\n $schema: Type.Optional(Type.String({ format: 'uri' })),\n renderer: requireDiscriminator\n ? Type.Literal(renderer, {\n description: 'Renderer backend for this document',\n })\n : Type.Optional(\n Type.Literal(renderer, {\n description: 'Renderer backend. Omitted defaults to \"docxjs\".',\n })\n ),\n // Optional so the exported schema agrees with the runtime validator and\n // the generator, both of which treat a propless root as `props: {}`.\n // Schema-driven editors would otherwise flag a document that builds.\n props: Type.Optional(\n docxPropsSchemaForRenderer(\n reportComponent.name,\n reportComponent.propsSchema,\n renderer\n )\n ),\n // Required, matching the runtime validator: a root without `children`\n // is rejected (deep-validator.ts), so the exported schema says so too.\n children: Type.Array(\n Type.Union([...capturedRootChildSchemas, ...capturedPluginSchemas], {\n discriminator: { propertyName: 'name' },\n })\n ),\n },\n {\n additionalProperties: false,\n title,\n description,\n // Embed it so convertToJsonSchema extracts it to definitions and this\n // branch's bare `$ref: \"<definitionName>\"` values resolve.\n definitions: { [definitionName]: ComponentDefinition },\n } as Record<string, unknown>\n );\n}\n"],"mappings":"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","names":[]}
|
|
@@ -3,19 +3,19 @@ import {
|
|
|
3
3
|
strictDocumentValidator,
|
|
4
4
|
validateAgainstSchema,
|
|
5
5
|
validateJson
|
|
6
|
-
} from "./chunk-
|
|
6
|
+
} from "./chunk-6HFF6XZN.js";
|
|
7
7
|
import {
|
|
8
8
|
ComponentDefinitionSchema
|
|
9
|
-
} from "./chunk-
|
|
9
|
+
} from "./chunk-6B3LHADB.js";
|
|
10
10
|
import {
|
|
11
11
|
CustomComponentDefinitionSchema
|
|
12
12
|
} from "./chunk-7GGTZ4TA.js";
|
|
13
13
|
import {
|
|
14
14
|
ReportPropsSchema
|
|
15
|
-
} from "./chunk-
|
|
15
|
+
} from "./chunk-A2K66URO.js";
|
|
16
16
|
import {
|
|
17
17
|
ThemeConfigSchema
|
|
18
|
-
} from "./chunk-
|
|
18
|
+
} from "./chunk-45I2NASU.js";
|
|
19
19
|
import {
|
|
20
20
|
ColumnsPropsSchema,
|
|
21
21
|
HeadingPropsSchema,
|
|
@@ -25,7 +25,7 @@ import {
|
|
|
25
25
|
SectionPropsSchema,
|
|
26
26
|
StatisticPropsSchema,
|
|
27
27
|
TablePropsSchema
|
|
28
|
-
} from "./chunk-
|
|
28
|
+
} from "./chunk-OP5PCDNN.js";
|
|
29
29
|
|
|
30
30
|
// src/validation/unified/index.ts
|
|
31
31
|
import {
|
|
@@ -410,4 +410,4 @@ export {
|
|
|
410
410
|
createErrorConfig,
|
|
411
411
|
formatErrorMessage
|
|
412
412
|
};
|
|
413
|
-
//# sourceMappingURL=chunk-
|
|
413
|
+
//# sourceMappingURL=chunk-LBXOAXMG.js.map
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import {
|
|
2
2
|
ComponentDefinitionSchema
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-6B3LHADB.js";
|
|
4
4
|
|
|
5
5
|
// src/schemas/document.ts
|
|
6
6
|
var JsonComponentDefinitionSchema = ComponentDefinitionSchema;
|
|
@@ -31,4 +31,4 @@ export {
|
|
|
31
31
|
JsonComponentDefinitionSchema,
|
|
32
32
|
JSON_SCHEMA_URLS
|
|
33
33
|
};
|
|
34
|
-
//# sourceMappingURL=chunk-
|
|
34
|
+
//# sourceMappingURL=chunk-MYLVUQCN.js.map
|