@json-to-office/jto 3.0.0 → 3.2.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/cli.js +1 -1
- package/dist/client/assets/{HomePage-BlzZ7qG4.js → HomePage-tunH4yrJ.js} +4 -4
- package/dist/client/assets/{HomePage-BlzZ7qG4.js.map → HomePage-tunH4yrJ.js.map} +1 -1
- package/dist/client/assets/{JsonEditorPage-kWuP_kL3.js → JsonEditorPage-BoWB1SW8.js} +3 -3
- package/dist/client/assets/{JsonEditorPage-kWuP_kL3.js.map → JsonEditorPage-BoWB1SW8.js.map} +1 -1
- package/dist/client/assets/{MonacoPluginProvider-Dbv1PrO2.js → MonacoPluginProvider-CZLdOK0o.js} +5 -5
- package/dist/client/assets/{MonacoPluginProvider-Dbv1PrO2.js.map → MonacoPluginProvider-CZLdOK0o.js.map} +1 -1
- package/dist/client/assets/{_virtual_jto-plugin-type-libs-B6KyD9RL.js → _virtual_jto-plugin-type-libs-BP6g-o7Z.js} +104 -63
- package/dist/client/assets/{_virtual_jto-plugin-type-libs-B6KyD9RL.js.map → _virtual_jto-plugin-type-libs-BP6g-o7Z.js.map} +1 -1
- package/dist/client/assets/_virtual_jto-sandbox-runtime-U0ykVFSo.js +2 -0
- package/dist/client/assets/_virtual_jto-sandbox-runtime-U0ykVFSo.js.map +1 -0
- package/dist/client/assets/{editor-CwEocOY2.js → editor-C6m04j66.js} +2 -2
- package/dist/client/assets/{editor-CwEocOY2.js.map → editor-C6m04j66.js.map} +1 -1
- package/dist/client/assets/{editor-monaco-json-D_oiidNg.js → editor-monaco-json-DsYufbUM.js} +2 -2
- package/dist/client/assets/{editor-monaco-json-D_oiidNg.js.map → editor-monaco-json-DsYufbUM.js.map} +1 -1
- package/dist/client/assets/index-B7DLwiJH.js +27 -0
- package/dist/client/assets/index-B7DLwiJH.js.map +1 -0
- package/dist/client/assets/{index-UheDso2P.js → index-BDoOeKmB.js} +2 -2
- package/dist/client/assets/{index-UheDso2P.js.map → index-BDoOeKmB.js.map} +1 -1
- package/dist/client/assets/{preview-CWdUATNl.js → preview-CutpTQQJ.js} +2 -2
- package/dist/client/assets/{preview-CWdUATNl.js.map → preview-CutpTQQJ.js.map} +1 -1
- package/dist/client/assets/{useQualityAnalysis-Cl4QPeOT.js → useQualityAnalysis-k0GXJxAw.js} +2 -2
- package/dist/client/assets/{useQualityAnalysis-Cl4QPeOT.js.map → useQualityAnalysis-k0GXJxAw.js.map} +1 -1
- package/dist/client/index.html +1 -1
- package/dist/client/templates/client-report-blocks.docx.json +779 -17
- package/dist/client/templates/media/client-report-blocks/delivery-model.png +0 -0
- package/package.json +4 -4
- package/dist/client/assets/_virtual_jto-sandbox-runtime-Bzo2M5U7.js +0 -2
- package/dist/client/assets/_virtual_jto-sandbox-runtime-Bzo2M5U7.js.map +0 -1
- package/dist/client/assets/index-DFJaEoi0.js +0 -27
- package/dist/client/assets/index-DFJaEoi0.js.map +0 -1
|
@@ -590,8 +590,65 @@
|
|
|
590
590
|
]
|
|
591
591
|
}
|
|
592
592
|
},
|
|
593
|
-
"
|
|
594
|
-
"description": "
|
|
593
|
+
"source-line": {
|
|
594
|
+
"description": "A hairline and a source line in the source role, under a figure or a table. The data blocks invoke it; copy it to add a source to anything else.",
|
|
595
|
+
"slots": {
|
|
596
|
+
"text": {
|
|
597
|
+
"type": "string",
|
|
598
|
+
"required": true,
|
|
599
|
+
"maxWords": 20,
|
|
600
|
+
"role": "source"
|
|
601
|
+
}
|
|
602
|
+
},
|
|
603
|
+
"body": [
|
|
604
|
+
{
|
|
605
|
+
"name": "divider",
|
|
606
|
+
"props": {
|
|
607
|
+
"thickness": 0.5,
|
|
608
|
+
"color": {
|
|
609
|
+
"$theme": "/palette/rule",
|
|
610
|
+
"default": "borderPrimary"
|
|
611
|
+
},
|
|
612
|
+
"spacing": {
|
|
613
|
+
"before": 4,
|
|
614
|
+
"after": 4
|
|
615
|
+
}
|
|
616
|
+
}
|
|
617
|
+
},
|
|
618
|
+
{
|
|
619
|
+
"name": "paragraph",
|
|
620
|
+
"props": {
|
|
621
|
+
"text": {
|
|
622
|
+
"$slot": "/text"
|
|
623
|
+
},
|
|
624
|
+
"font": {
|
|
625
|
+
"family": {
|
|
626
|
+
"$theme": "/fonts/body/family",
|
|
627
|
+
"default": "Calibri"
|
|
628
|
+
},
|
|
629
|
+
"size": {
|
|
630
|
+
"$theme": "/styles/source/size",
|
|
631
|
+
"default": 8
|
|
632
|
+
},
|
|
633
|
+
"bold": {
|
|
634
|
+
"$theme": "/styles/source/bold",
|
|
635
|
+
"default": false
|
|
636
|
+
},
|
|
637
|
+
"color": {
|
|
638
|
+
"$theme": "/styles/source/color",
|
|
639
|
+
"default": "textMuted"
|
|
640
|
+
}
|
|
641
|
+
},
|
|
642
|
+
"spacing": {
|
|
643
|
+
"before": 0,
|
|
644
|
+
"after": 8
|
|
645
|
+
}
|
|
646
|
+
}
|
|
647
|
+
}
|
|
648
|
+
]
|
|
649
|
+
},
|
|
650
|
+
"kpi-row": {
|
|
651
|
+
"description": "Two to four headline metrics in equal columns: value with its unit, label, and a signed delta with a direction glyph. An optional source collapses with its hairline. Text budgets reject overflow; columns reflow at unchanged type size.",
|
|
595
652
|
"slots": {
|
|
596
653
|
"items": {
|
|
597
654
|
"type": "array",
|
|
@@ -604,19 +661,38 @@
|
|
|
604
661
|
"value": {
|
|
605
662
|
"type": "string",
|
|
606
663
|
"required": true,
|
|
607
|
-
"maxLength": 12
|
|
664
|
+
"maxLength": 12,
|
|
665
|
+
"description": "The headline figure, already formatted: 8.8, 94, +18."
|
|
666
|
+
},
|
|
667
|
+
"unit": {
|
|
668
|
+
"type": "string",
|
|
669
|
+
"maxLength": 6,
|
|
670
|
+
"description": "Suffix drawn after the figure at half its size: %, €m, pts. Write the space yourself when one belongs."
|
|
608
671
|
},
|
|
609
672
|
"label": {
|
|
610
673
|
"type": "string",
|
|
611
674
|
"required": true,
|
|
612
|
-
"
|
|
675
|
+
"oneLine": true,
|
|
676
|
+
"maxWords": 6,
|
|
677
|
+
"description": "What the figure measures."
|
|
678
|
+
},
|
|
679
|
+
"delta": {
|
|
680
|
+
"type": "string",
|
|
681
|
+
"maxLength": 12,
|
|
682
|
+
"description": "Signed change shown beside the figure: +3.2 pts, −0.4."
|
|
683
|
+
},
|
|
684
|
+
"trend": {
|
|
685
|
+
"type": "string",
|
|
686
|
+
"enum": ["up", "down", "neutral"],
|
|
687
|
+
"description": "Direction glyph drawn before the delta."
|
|
613
688
|
}
|
|
614
689
|
}
|
|
615
690
|
}
|
|
616
691
|
},
|
|
617
692
|
"source": {
|
|
618
693
|
"type": "string",
|
|
619
|
-
"maxWords": 20
|
|
694
|
+
"maxWords": 20,
|
|
695
|
+
"role": "source"
|
|
620
696
|
}
|
|
621
697
|
},
|
|
622
698
|
"body": [
|
|
@@ -634,11 +710,20 @@
|
|
|
634
710
|
"template": {
|
|
635
711
|
"name": "statistic",
|
|
636
712
|
"props": {
|
|
713
|
+
"number": {
|
|
714
|
+
"$item": "/value"
|
|
715
|
+
},
|
|
716
|
+
"unit": {
|
|
717
|
+
"$item": "/unit"
|
|
718
|
+
},
|
|
637
719
|
"description": {
|
|
638
720
|
"$item": "/label"
|
|
639
721
|
},
|
|
640
|
-
"
|
|
641
|
-
"$item": "/
|
|
722
|
+
"trend": {
|
|
723
|
+
"$item": "/trend"
|
|
724
|
+
},
|
|
725
|
+
"trendValue": {
|
|
726
|
+
"$item": "/delta"
|
|
642
727
|
}
|
|
643
728
|
}
|
|
644
729
|
}
|
|
@@ -647,21 +732,571 @@
|
|
|
647
732
|
},
|
|
648
733
|
{
|
|
649
734
|
"$if": "/source",
|
|
735
|
+
"then": {
|
|
736
|
+
"name": "block",
|
|
737
|
+
"props": {
|
|
738
|
+
"ref": "source-line",
|
|
739
|
+
"slots": {
|
|
740
|
+
"text": {
|
|
741
|
+
"$slot": "/source"
|
|
742
|
+
}
|
|
743
|
+
}
|
|
744
|
+
}
|
|
745
|
+
}
|
|
746
|
+
}
|
|
747
|
+
]
|
|
748
|
+
},
|
|
749
|
+
"callout": {
|
|
750
|
+
"description": "An aside set off by a hairline rule down its left edge: a short label over up to sixty words of text. No fill, so it reads as a note beside the argument rather than a box in it.",
|
|
751
|
+
"slots": {
|
|
752
|
+
"label": {
|
|
753
|
+
"type": "string",
|
|
754
|
+
"oneLine": true,
|
|
755
|
+
"maxWords": 6,
|
|
756
|
+
"default": "Note"
|
|
757
|
+
},
|
|
758
|
+
"text": {
|
|
759
|
+
"type": "string",
|
|
760
|
+
"required": true,
|
|
761
|
+
"maxWords": 60
|
|
762
|
+
}
|
|
763
|
+
},
|
|
764
|
+
"body": [
|
|
765
|
+
{
|
|
766
|
+
"name": "text-box",
|
|
767
|
+
"props": {
|
|
768
|
+
"width": "100%",
|
|
769
|
+
"style": {
|
|
770
|
+
"padding": {
|
|
771
|
+
"top": 2,
|
|
772
|
+
"bottom": 2,
|
|
773
|
+
"left": 10,
|
|
774
|
+
"right": 0
|
|
775
|
+
},
|
|
776
|
+
"border": {
|
|
777
|
+
"left": {
|
|
778
|
+
"style": "solid",
|
|
779
|
+
"width": 0.75,
|
|
780
|
+
"color": {
|
|
781
|
+
"$theme": "/palette/rule",
|
|
782
|
+
"default": "borderPrimary"
|
|
783
|
+
}
|
|
784
|
+
}
|
|
785
|
+
}
|
|
786
|
+
}
|
|
787
|
+
},
|
|
788
|
+
"children": [
|
|
789
|
+
{
|
|
790
|
+
"name": "paragraph",
|
|
791
|
+
"props": {
|
|
792
|
+
"text": {
|
|
793
|
+
"$slot": "/label"
|
|
794
|
+
},
|
|
795
|
+
"font": {
|
|
796
|
+
"family": {
|
|
797
|
+
"$theme": "/fonts/body/family",
|
|
798
|
+
"default": "Calibri"
|
|
799
|
+
},
|
|
800
|
+
"size": {
|
|
801
|
+
"$theme": "/styles/label/size",
|
|
802
|
+
"default": 9
|
|
803
|
+
},
|
|
804
|
+
"bold": {
|
|
805
|
+
"$theme": "/styles/label/bold",
|
|
806
|
+
"default": true
|
|
807
|
+
},
|
|
808
|
+
"color": {
|
|
809
|
+
"$theme": "/styles/label/color",
|
|
810
|
+
"default": "textPrimary"
|
|
811
|
+
}
|
|
812
|
+
},
|
|
813
|
+
"spacing": {
|
|
814
|
+
"before": 0,
|
|
815
|
+
"after": 2
|
|
816
|
+
},
|
|
817
|
+
"keepNext": true
|
|
818
|
+
}
|
|
819
|
+
},
|
|
820
|
+
{
|
|
821
|
+
"name": "paragraph",
|
|
822
|
+
"props": {
|
|
823
|
+
"text": {
|
|
824
|
+
"$slot": "/text"
|
|
825
|
+
},
|
|
826
|
+
"spacing": {
|
|
827
|
+
"before": 0,
|
|
828
|
+
"after": 0
|
|
829
|
+
}
|
|
830
|
+
}
|
|
831
|
+
}
|
|
832
|
+
]
|
|
833
|
+
}
|
|
834
|
+
]
|
|
835
|
+
},
|
|
836
|
+
"data-table": {
|
|
837
|
+
"description": "A sourced numeric table: a title, a text column of row labels, one to six data columns right-aligned by construction, then optional notes and a source line. With its header, 24 rows keep the table on one page; the table-design rule checks the compiled table for mixed decimals.",
|
|
838
|
+
"slots": {
|
|
839
|
+
"title": {
|
|
840
|
+
"type": "string",
|
|
841
|
+
"required": true,
|
|
842
|
+
"oneLine": true,
|
|
843
|
+
"maxWords": 16
|
|
844
|
+
},
|
|
845
|
+
"labelHeader": {
|
|
846
|
+
"type": "string",
|
|
847
|
+
"oneLine": true,
|
|
848
|
+
"maxWords": 4,
|
|
849
|
+
"default": "",
|
|
850
|
+
"description": "Header of the row-label column."
|
|
851
|
+
},
|
|
852
|
+
"labels": {
|
|
853
|
+
"type": "array",
|
|
854
|
+
"required": true,
|
|
855
|
+
"minItems": 1,
|
|
856
|
+
"maxItems": 24,
|
|
857
|
+
"items": {
|
|
858
|
+
"type": "string",
|
|
859
|
+
"oneLine": true,
|
|
860
|
+
"maxWords": 8
|
|
861
|
+
},
|
|
862
|
+
"description": "Row labels, top to bottom. Every data column lists its cells in this order and at this count."
|
|
863
|
+
},
|
|
864
|
+
"columns": {
|
|
865
|
+
"type": "array",
|
|
866
|
+
"required": true,
|
|
867
|
+
"minItems": 1,
|
|
868
|
+
"maxItems": 6,
|
|
869
|
+
"items": {
|
|
870
|
+
"type": "object",
|
|
871
|
+
"properties": {
|
|
872
|
+
"header": {
|
|
873
|
+
"type": "string",
|
|
874
|
+
"required": true,
|
|
875
|
+
"oneLine": true,
|
|
876
|
+
"maxWords": 4,
|
|
877
|
+
"description": "Column header; put the unit here: Revenue (€m)."
|
|
878
|
+
},
|
|
879
|
+
"cells": {
|
|
880
|
+
"type": "array",
|
|
881
|
+
"required": true,
|
|
882
|
+
"minItems": 1,
|
|
883
|
+
"maxItems": 24,
|
|
884
|
+
"items": {
|
|
885
|
+
"type": "string",
|
|
886
|
+
"maxLength": 16
|
|
887
|
+
},
|
|
888
|
+
"description": "One formatted value per row label, rounded the same way down the column."
|
|
889
|
+
},
|
|
890
|
+
"numeric": {
|
|
891
|
+
"type": "boolean",
|
|
892
|
+
"default": true,
|
|
893
|
+
"description": "Right-align header and cells so digits line up by place value. Set false for a text column."
|
|
894
|
+
}
|
|
895
|
+
}
|
|
896
|
+
}
|
|
897
|
+
},
|
|
898
|
+
"notes": {
|
|
899
|
+
"type": "string",
|
|
900
|
+
"maxWords": 40,
|
|
901
|
+
"description": "What the reader needs to interpret the figures: definitions, periods, exclusions."
|
|
902
|
+
},
|
|
903
|
+
"source": {
|
|
904
|
+
"type": "string",
|
|
905
|
+
"maxWords": 20,
|
|
906
|
+
"role": "source"
|
|
907
|
+
}
|
|
908
|
+
},
|
|
909
|
+
"body": [
|
|
910
|
+
{
|
|
911
|
+
"name": "paragraph",
|
|
912
|
+
"props": {
|
|
913
|
+
"text": {
|
|
914
|
+
"$slot": "/title"
|
|
915
|
+
},
|
|
916
|
+
"font": {
|
|
917
|
+
"family": {
|
|
918
|
+
"$theme": "/fonts/body/family",
|
|
919
|
+
"default": "Calibri"
|
|
920
|
+
},
|
|
921
|
+
"size": {
|
|
922
|
+
"$theme": "/styles/label/size",
|
|
923
|
+
"default": 9
|
|
924
|
+
},
|
|
925
|
+
"bold": {
|
|
926
|
+
"$theme": "/styles/label/bold",
|
|
927
|
+
"default": true
|
|
928
|
+
},
|
|
929
|
+
"color": {
|
|
930
|
+
"$theme": "/styles/label/color",
|
|
931
|
+
"default": "textPrimary"
|
|
932
|
+
}
|
|
933
|
+
},
|
|
934
|
+
"spacing": {
|
|
935
|
+
"before": 8,
|
|
936
|
+
"after": 4
|
|
937
|
+
},
|
|
938
|
+
"keepNext": true
|
|
939
|
+
}
|
|
940
|
+
},
|
|
941
|
+
{
|
|
942
|
+
"name": "table",
|
|
943
|
+
"props": {
|
|
944
|
+
"width": 100,
|
|
945
|
+
"repeatHeaderOnPageBreak": true,
|
|
946
|
+
"columns": [
|
|
947
|
+
{
|
|
948
|
+
"header": {
|
|
949
|
+
"content": {
|
|
950
|
+
"$slot": "/labelHeader"
|
|
951
|
+
}
|
|
952
|
+
},
|
|
953
|
+
"cells": {
|
|
954
|
+
"$each": "/labels",
|
|
955
|
+
"template": {
|
|
956
|
+
"content": {
|
|
957
|
+
"$item": ""
|
|
958
|
+
}
|
|
959
|
+
}
|
|
960
|
+
}
|
|
961
|
+
},
|
|
962
|
+
{
|
|
963
|
+
"$each": "/columns",
|
|
964
|
+
"template": {
|
|
965
|
+
"header": {
|
|
966
|
+
"content": {
|
|
967
|
+
"$item": "/header"
|
|
968
|
+
},
|
|
969
|
+
"horizontalAlignment": {
|
|
970
|
+
"$if": {
|
|
971
|
+
"$item": "/numeric"
|
|
972
|
+
},
|
|
973
|
+
"then": "right",
|
|
974
|
+
"else": "left"
|
|
975
|
+
}
|
|
976
|
+
},
|
|
977
|
+
"cellDefaults": {
|
|
978
|
+
"horizontalAlignment": {
|
|
979
|
+
"$if": {
|
|
980
|
+
"$item": "/numeric"
|
|
981
|
+
},
|
|
982
|
+
"then": "right",
|
|
983
|
+
"else": "left"
|
|
984
|
+
}
|
|
985
|
+
},
|
|
986
|
+
"cells": {
|
|
987
|
+
"$each": {
|
|
988
|
+
"$item": "/cells"
|
|
989
|
+
},
|
|
990
|
+
"template": {
|
|
991
|
+
"content": {
|
|
992
|
+
"$item": ""
|
|
993
|
+
}
|
|
994
|
+
}
|
|
995
|
+
}
|
|
996
|
+
}
|
|
997
|
+
}
|
|
998
|
+
]
|
|
999
|
+
}
|
|
1000
|
+
},
|
|
1001
|
+
{
|
|
1002
|
+
"$if": "/notes",
|
|
1003
|
+
"then": {
|
|
1004
|
+
"name": "paragraph",
|
|
1005
|
+
"props": {
|
|
1006
|
+
"text": {
|
|
1007
|
+
"$slot": "/notes"
|
|
1008
|
+
},
|
|
1009
|
+
"font": {
|
|
1010
|
+
"family": {
|
|
1011
|
+
"$theme": "/fonts/body/family",
|
|
1012
|
+
"default": "Calibri"
|
|
1013
|
+
},
|
|
1014
|
+
"size": {
|
|
1015
|
+
"$theme": "/styles/source/size",
|
|
1016
|
+
"default": 8
|
|
1017
|
+
},
|
|
1018
|
+
"bold": {
|
|
1019
|
+
"$theme": "/styles/source/bold",
|
|
1020
|
+
"default": false
|
|
1021
|
+
},
|
|
1022
|
+
"color": {
|
|
1023
|
+
"$theme": "/styles/source/color",
|
|
1024
|
+
"default": "textMuted"
|
|
1025
|
+
}
|
|
1026
|
+
},
|
|
1027
|
+
"spacing": {
|
|
1028
|
+
"before": 4,
|
|
1029
|
+
"after": 0
|
|
1030
|
+
}
|
|
1031
|
+
}
|
|
1032
|
+
}
|
|
1033
|
+
},
|
|
1034
|
+
{
|
|
1035
|
+
"$if": "/source",
|
|
1036
|
+
"then": {
|
|
1037
|
+
"name": "block",
|
|
1038
|
+
"props": {
|
|
1039
|
+
"ref": "source-line",
|
|
1040
|
+
"slots": {
|
|
1041
|
+
"text": {
|
|
1042
|
+
"$slot": "/source"
|
|
1043
|
+
}
|
|
1044
|
+
}
|
|
1045
|
+
}
|
|
1046
|
+
}
|
|
1047
|
+
}
|
|
1048
|
+
]
|
|
1049
|
+
},
|
|
1050
|
+
"figure-caption": {
|
|
1051
|
+
"description": "The numbered caption under a figure: **Figure N.** and the text, N being a Word SEQ field over the figure sequence. chart-figure and figure invoke it, so charts and images number together.",
|
|
1052
|
+
"slots": {
|
|
1053
|
+
"text": {
|
|
1054
|
+
"type": "string",
|
|
1055
|
+
"required": true,
|
|
1056
|
+
"oneLine": true,
|
|
1057
|
+
"maxWords": 20
|
|
1058
|
+
}
|
|
1059
|
+
},
|
|
1060
|
+
"body": [
|
|
1061
|
+
{
|
|
1062
|
+
"name": "paragraph",
|
|
1063
|
+
"props": {
|
|
1064
|
+
"text": {
|
|
1065
|
+
"$join": [
|
|
1066
|
+
"**Figure {SEQ:figure}.** ",
|
|
1067
|
+
{
|
|
1068
|
+
"$slot": "/text"
|
|
1069
|
+
}
|
|
1070
|
+
]
|
|
1071
|
+
},
|
|
1072
|
+
"font": {
|
|
1073
|
+
"family": {
|
|
1074
|
+
"$theme": "/fonts/body/family",
|
|
1075
|
+
"default": "Calibri"
|
|
1076
|
+
},
|
|
1077
|
+
"size": {
|
|
1078
|
+
"$theme": "/styles/label/size",
|
|
1079
|
+
"default": 9
|
|
1080
|
+
},
|
|
1081
|
+
"bold": false,
|
|
1082
|
+
"color": {
|
|
1083
|
+
"$theme": "/styles/label/color",
|
|
1084
|
+
"default": "textPrimary"
|
|
1085
|
+
}
|
|
1086
|
+
},
|
|
1087
|
+
"spacing": {
|
|
1088
|
+
"before": 4,
|
|
1089
|
+
"after": 2
|
|
1090
|
+
},
|
|
1091
|
+
"keepNext": true
|
|
1092
|
+
}
|
|
1093
|
+
}
|
|
1094
|
+
]
|
|
1095
|
+
},
|
|
1096
|
+
"chart-figure": {
|
|
1097
|
+
"description": "A numbered, sourced chart: the chart itself (highcharts through the export server, or a native chart on the office-open renderer), a caption that says what it shows, an optional takeaway beneath, and the source line the report cites. The source is required; the figure number is a Word SEQ field.",
|
|
1098
|
+
"slots": {
|
|
1099
|
+
"chart": {
|
|
1100
|
+
"type": "component",
|
|
1101
|
+
"required": true,
|
|
1102
|
+
"description": "A highcharts or chart component. Put the unit in the value-axis title: Revenue (€m)."
|
|
1103
|
+
},
|
|
1104
|
+
"caption": {
|
|
1105
|
+
"type": "string",
|
|
1106
|
+
"required": true,
|
|
1107
|
+
"oneLine": true,
|
|
1108
|
+
"maxWords": 20,
|
|
1109
|
+
"description": "What the chart shows, as a statement: Revenue by quarter, 2026."
|
|
1110
|
+
},
|
|
1111
|
+
"takeaway": {
|
|
1112
|
+
"type": "string",
|
|
1113
|
+
"maxWords": 30,
|
|
1114
|
+
"role": "takeaway",
|
|
1115
|
+
"description": "The one sentence the reader should leave with."
|
|
1116
|
+
},
|
|
1117
|
+
"source": {
|
|
1118
|
+
"type": "string",
|
|
1119
|
+
"required": true,
|
|
1120
|
+
"maxWords": 20,
|
|
1121
|
+
"role": "source"
|
|
1122
|
+
}
|
|
1123
|
+
},
|
|
1124
|
+
"body": [
|
|
1125
|
+
{
|
|
1126
|
+
"$slot": "/chart"
|
|
1127
|
+
},
|
|
1128
|
+
{
|
|
1129
|
+
"name": "block",
|
|
1130
|
+
"props": {
|
|
1131
|
+
"ref": "figure-caption",
|
|
1132
|
+
"slots": {
|
|
1133
|
+
"text": {
|
|
1134
|
+
"$slot": "/caption"
|
|
1135
|
+
}
|
|
1136
|
+
}
|
|
1137
|
+
}
|
|
1138
|
+
},
|
|
1139
|
+
{
|
|
1140
|
+
"$if": "/takeaway",
|
|
1141
|
+
"then": {
|
|
1142
|
+
"name": "paragraph",
|
|
1143
|
+
"props": {
|
|
1144
|
+
"text": {
|
|
1145
|
+
"$slot": "/takeaway"
|
|
1146
|
+
},
|
|
1147
|
+
"font": {
|
|
1148
|
+
"family": {
|
|
1149
|
+
"$theme": "/fonts/body/family",
|
|
1150
|
+
"default": "Calibri"
|
|
1151
|
+
},
|
|
1152
|
+
"color": {
|
|
1153
|
+
"$theme": "/styles/quote/color",
|
|
1154
|
+
"default": "textSecondary"
|
|
1155
|
+
}
|
|
1156
|
+
},
|
|
1157
|
+
"spacing": {
|
|
1158
|
+
"before": 0,
|
|
1159
|
+
"after": 2
|
|
1160
|
+
}
|
|
1161
|
+
}
|
|
1162
|
+
}
|
|
1163
|
+
},
|
|
1164
|
+
{
|
|
1165
|
+
"$if": "/source",
|
|
1166
|
+
"then": {
|
|
1167
|
+
"name": "block",
|
|
1168
|
+
"props": {
|
|
1169
|
+
"ref": "source-line",
|
|
1170
|
+
"slots": {
|
|
1171
|
+
"text": {
|
|
1172
|
+
"$slot": "/source"
|
|
1173
|
+
}
|
|
1174
|
+
}
|
|
1175
|
+
}
|
|
1176
|
+
}
|
|
1177
|
+
}
|
|
1178
|
+
]
|
|
1179
|
+
},
|
|
1180
|
+
"figure": {
|
|
1181
|
+
"description": "A numbered image with a caption and an optional source line. The image keeps its own width and alt text; the figure number is a Word SEQ field shared with chart-figure.",
|
|
1182
|
+
"slots": {
|
|
1183
|
+
"image": {
|
|
1184
|
+
"type": "component",
|
|
1185
|
+
"required": true,
|
|
1186
|
+
"description": "An image or visual component. Give it alt text and a width."
|
|
1187
|
+
},
|
|
1188
|
+
"caption": {
|
|
1189
|
+
"type": "string",
|
|
1190
|
+
"required": true,
|
|
1191
|
+
"oneLine": true,
|
|
1192
|
+
"maxWords": 20
|
|
1193
|
+
},
|
|
1194
|
+
"source": {
|
|
1195
|
+
"type": "string",
|
|
1196
|
+
"maxWords": 20,
|
|
1197
|
+
"role": "source"
|
|
1198
|
+
}
|
|
1199
|
+
},
|
|
1200
|
+
"body": [
|
|
1201
|
+
{
|
|
1202
|
+
"$slot": "/image"
|
|
1203
|
+
},
|
|
1204
|
+
{
|
|
1205
|
+
"name": "block",
|
|
1206
|
+
"props": {
|
|
1207
|
+
"ref": "figure-caption",
|
|
1208
|
+
"slots": {
|
|
1209
|
+
"text": {
|
|
1210
|
+
"$slot": "/caption"
|
|
1211
|
+
}
|
|
1212
|
+
}
|
|
1213
|
+
}
|
|
1214
|
+
},
|
|
1215
|
+
{
|
|
1216
|
+
"$if": "/source",
|
|
1217
|
+
"then": {
|
|
1218
|
+
"name": "block",
|
|
1219
|
+
"props": {
|
|
1220
|
+
"ref": "source-line",
|
|
1221
|
+
"slots": {
|
|
1222
|
+
"text": {
|
|
1223
|
+
"$slot": "/source"
|
|
1224
|
+
}
|
|
1225
|
+
}
|
|
1226
|
+
}
|
|
1227
|
+
}
|
|
1228
|
+
}
|
|
1229
|
+
]
|
|
1230
|
+
},
|
|
1231
|
+
"footnotes": {
|
|
1232
|
+
"description": "Notes and sources: every distinct source-role slot value the document's block invocations carry, in order, as a numbered list under a label — the engine's /sources context. Emits nothing when no invocation cites a source.",
|
|
1233
|
+
"slots": {
|
|
1234
|
+
"title": {
|
|
1235
|
+
"type": "string",
|
|
1236
|
+
"oneLine": true,
|
|
1237
|
+
"maxWords": 6,
|
|
1238
|
+
"default": "Notes and sources"
|
|
1239
|
+
}
|
|
1240
|
+
},
|
|
1241
|
+
"body": [
|
|
1242
|
+
{
|
|
1243
|
+
"$if": {
|
|
1244
|
+
"$context": "/sources"
|
|
1245
|
+
},
|
|
650
1246
|
"then": [
|
|
651
1247
|
{
|
|
652
1248
|
"name": "divider",
|
|
653
1249
|
"props": {
|
|
654
|
-
"thickness": 0.5
|
|
1250
|
+
"thickness": 0.5,
|
|
1251
|
+
"color": {
|
|
1252
|
+
"$theme": "/palette/rule",
|
|
1253
|
+
"default": "borderPrimary"
|
|
1254
|
+
},
|
|
1255
|
+
"spacing": {
|
|
1256
|
+
"before": 12,
|
|
1257
|
+
"after": 4
|
|
1258
|
+
}
|
|
655
1259
|
}
|
|
656
1260
|
},
|
|
657
1261
|
{
|
|
658
1262
|
"name": "paragraph",
|
|
659
1263
|
"props": {
|
|
660
1264
|
"text": {
|
|
661
|
-
"$slot": "/
|
|
1265
|
+
"$slot": "/title"
|
|
662
1266
|
},
|
|
663
1267
|
"font": {
|
|
664
|
-
"
|
|
1268
|
+
"family": {
|
|
1269
|
+
"$theme": "/fonts/body/family",
|
|
1270
|
+
"default": "Calibri"
|
|
1271
|
+
},
|
|
1272
|
+
"size": {
|
|
1273
|
+
"$theme": "/styles/label/size",
|
|
1274
|
+
"default": 9
|
|
1275
|
+
},
|
|
1276
|
+
"bold": true,
|
|
1277
|
+
"color": {
|
|
1278
|
+
"$theme": "/styles/label/color",
|
|
1279
|
+
"default": "textPrimary"
|
|
1280
|
+
}
|
|
1281
|
+
},
|
|
1282
|
+
"spacing": {
|
|
1283
|
+
"before": 0,
|
|
1284
|
+
"after": 4
|
|
1285
|
+
},
|
|
1286
|
+
"keepNext": true
|
|
1287
|
+
}
|
|
1288
|
+
},
|
|
1289
|
+
{
|
|
1290
|
+
"name": "list",
|
|
1291
|
+
"props": {
|
|
1292
|
+
"format": "decimal",
|
|
1293
|
+
"items": {
|
|
1294
|
+
"$each": {
|
|
1295
|
+
"$context": "/sources"
|
|
1296
|
+
},
|
|
1297
|
+
"template": {
|
|
1298
|
+
"$item": ""
|
|
1299
|
+
}
|
|
665
1300
|
}
|
|
666
1301
|
}
|
|
667
1302
|
}
|
|
@@ -738,19 +1373,42 @@
|
|
|
738
1373
|
{
|
|
739
1374
|
"name": "block",
|
|
740
1375
|
"props": {
|
|
741
|
-
"ref": "
|
|
1376
|
+
"ref": "kpi-row",
|
|
742
1377
|
"slots": {
|
|
743
1378
|
"items": [
|
|
744
1379
|
{
|
|
745
|
-
"value": "
|
|
746
|
-
"
|
|
1380
|
+
"value": "8.8",
|
|
1381
|
+
"unit": " €m",
|
|
1382
|
+
"label": "Revenue year to date",
|
|
1383
|
+
"delta": "+16.9%",
|
|
1384
|
+
"trend": "up"
|
|
1385
|
+
},
|
|
1386
|
+
{
|
|
1387
|
+
"value": "94",
|
|
1388
|
+
"unit": "%",
|
|
1389
|
+
"label": "Client retention",
|
|
1390
|
+
"delta": "+2 pts",
|
|
1391
|
+
"trend": "up"
|
|
747
1392
|
},
|
|
748
1393
|
{
|
|
749
|
-
"value": "
|
|
750
|
-
"
|
|
1394
|
+
"value": "11",
|
|
1395
|
+
"unit": " days",
|
|
1396
|
+
"label": "Median time to deliver",
|
|
1397
|
+
"delta": "−3 days",
|
|
1398
|
+
"trend": "down"
|
|
751
1399
|
}
|
|
752
1400
|
],
|
|
753
|
-
"source": "Source: quarterly operating review."
|
|
1401
|
+
"source": "Source: quarterly operating review, 2026."
|
|
1402
|
+
}
|
|
1403
|
+
}
|
|
1404
|
+
},
|
|
1405
|
+
{
|
|
1406
|
+
"name": "block",
|
|
1407
|
+
"props": {
|
|
1408
|
+
"ref": "callout",
|
|
1409
|
+
"slots": {
|
|
1410
|
+
"label": "How to read the deltas",
|
|
1411
|
+
"text": "Deltas compare the first three quarters of 2026 with the same period of 2025. Retention counts contracts renewed within thirty days of their term; late renewals are excluded from both years."
|
|
754
1412
|
}
|
|
755
1413
|
}
|
|
756
1414
|
}
|
|
@@ -779,10 +1437,114 @@
|
|
|
779
1437
|
}
|
|
780
1438
|
}
|
|
781
1439
|
},
|
|
1440
|
+
{
|
|
1441
|
+
"name": "block",
|
|
1442
|
+
"props": {
|
|
1443
|
+
"ref": "data-table",
|
|
1444
|
+
"slots": {
|
|
1445
|
+
"title": "Revenue and retention by segment, 2026 to date",
|
|
1446
|
+
"labelHeader": "Segment",
|
|
1447
|
+
"labels": [
|
|
1448
|
+
"Enterprise",
|
|
1449
|
+
"Mid-market",
|
|
1450
|
+
"Public sector",
|
|
1451
|
+
"All segments"
|
|
1452
|
+
],
|
|
1453
|
+
"columns": [
|
|
1454
|
+
{
|
|
1455
|
+
"header": "Revenue (€m)",
|
|
1456
|
+
"cells": ["4.2", "2.7", "1.9", "8.8"]
|
|
1457
|
+
},
|
|
1458
|
+
{
|
|
1459
|
+
"header": "Growth (%)",
|
|
1460
|
+
"cells": ["21.0", "14.5", "9.8", "16.9"]
|
|
1461
|
+
},
|
|
1462
|
+
{
|
|
1463
|
+
"header": "Retention (%)",
|
|
1464
|
+
"cells": ["96", "93", "91", "94"]
|
|
1465
|
+
}
|
|
1466
|
+
],
|
|
1467
|
+
"notes": "Growth is year on year on the same nine months. Retention counts contracts renewed within thirty days of their term.",
|
|
1468
|
+
"source": "Source: quarterly operating review, 2026."
|
|
1469
|
+
}
|
|
1470
|
+
}
|
|
1471
|
+
},
|
|
782
1472
|
{
|
|
783
1473
|
"name": "paragraph",
|
|
784
1474
|
"props": {
|
|
785
|
-
"text": "The inherited running header uses this section
|
|
1475
|
+
"text": "The inherited running header uses this section’s tracker and page width. Page numbers are native Word fields."
|
|
1476
|
+
}
|
|
1477
|
+
},
|
|
1478
|
+
{
|
|
1479
|
+
"name": "block",
|
|
1480
|
+
"props": {
|
|
1481
|
+
"ref": "chart-figure",
|
|
1482
|
+
"slots": {
|
|
1483
|
+
"chart": {
|
|
1484
|
+
"name": "highcharts",
|
|
1485
|
+
"props": {
|
|
1486
|
+
"width": "100%",
|
|
1487
|
+
"options": {
|
|
1488
|
+
"chart": {
|
|
1489
|
+
"type": "column",
|
|
1490
|
+
"width": 900,
|
|
1491
|
+
"height": 460
|
|
1492
|
+
},
|
|
1493
|
+
"title": {
|
|
1494
|
+
"text": null
|
|
1495
|
+
},
|
|
1496
|
+
"xAxis": {
|
|
1497
|
+
"categories": ["Q1", "Q2", "Q3", "Q4"]
|
|
1498
|
+
},
|
|
1499
|
+
"yAxis": {
|
|
1500
|
+
"min": 0,
|
|
1501
|
+
"title": {
|
|
1502
|
+
"text": "Revenue (€m)"
|
|
1503
|
+
}
|
|
1504
|
+
},
|
|
1505
|
+
"legend": {
|
|
1506
|
+
"enabled": false
|
|
1507
|
+
},
|
|
1508
|
+
"series": [
|
|
1509
|
+
{
|
|
1510
|
+
"name": "Revenue",
|
|
1511
|
+
"data": [1.9, 2.4, 2.7, 3.1]
|
|
1512
|
+
}
|
|
1513
|
+
],
|
|
1514
|
+
"credits": {
|
|
1515
|
+
"enabled": false
|
|
1516
|
+
}
|
|
1517
|
+
}
|
|
1518
|
+
}
|
|
1519
|
+
},
|
|
1520
|
+
"caption": "Revenue by quarter, 2026",
|
|
1521
|
+
"takeaway": "Each quarter outgrew the last as delivery stabilised; the fourth quarter alone matched the first half of 2025.",
|
|
1522
|
+
"source": "Source: quarterly operating review, 2026."
|
|
1523
|
+
}
|
|
1524
|
+
}
|
|
1525
|
+
},
|
|
1526
|
+
{
|
|
1527
|
+
"name": "block",
|
|
1528
|
+
"props": {
|
|
1529
|
+
"ref": "figure",
|
|
1530
|
+
"slots": {
|
|
1531
|
+
"image": {
|
|
1532
|
+
"name": "image",
|
|
1533
|
+
"props": {
|
|
1534
|
+
"path": "media/client-report-blocks/delivery-model.png",
|
|
1535
|
+
"width": "100%",
|
|
1536
|
+
"alt": "Four delivery stages in sequence: intake, weekly ownership, delivery and renewal; ownership and delivery are shaded as the stages that changed"
|
|
1537
|
+
}
|
|
1538
|
+
},
|
|
1539
|
+
"caption": "The delivery model, with the two stages that changed this year",
|
|
1540
|
+
"source": "Source: operating handbook, 2026 edition."
|
|
1541
|
+
}
|
|
1542
|
+
}
|
|
1543
|
+
},
|
|
1544
|
+
{
|
|
1545
|
+
"name": "block",
|
|
1546
|
+
"props": {
|
|
1547
|
+
"ref": "footnotes"
|
|
786
1548
|
}
|
|
787
1549
|
}
|
|
788
1550
|
]
|