@financial-times/content-tree 0.10.0 → 0.12.0-beta.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -198,6 +198,21 @@ A single semantic change to the content tree is usually split across multiple pu
198
198
 
199
199
  Before making a release you will also need to raise a pull request to increment the package.json version number, this should be made in its own PR so that at least one member of each team can approve it. Please get sign-off in the [#dynamic-storytelling-team](https://financialtimes.enterprise.slack.com/archives/C035P5DCHMH) slack channel and share this PR there. Releases are then made via GitHub Releases: they must include a SemVer tag `vX.Y.Z` which matches the one within the package json. The release notes should be completed to communicate what changed in the release. Cutting a release will trigger CI to publish to npm for JS consumers. Go consumers can depend on the new git tag as the module version.
200
200
 
201
+ ### Beta releases
202
+
203
+ If you want to make a beta release from a branch before you merge into main, you can do this with the following steps:
204
+
205
+ * set your release as `v0.0.0-beta.0` where `0` is whatever version number you are setting
206
+ * in Github, go into https://github.com/Financial-Times/content-tree/releases and press the Draft a new release button
207
+ * when drafting the new release
208
+ * set the tag to the same as you have for your beta
209
+ * set the target to the branch that you want to release from
210
+ * set the Release title to the version number
211
+ * fill in release notes as normal
212
+ * check the Pre-release option under Release label
213
+ * Press the Publish release button
214
+
215
+
201
216
  ## License
202
217
 
203
218
  This software is published by the Financial Times under the [MIT licence](mit).
package/SPEC.md CHANGED
@@ -343,28 +343,29 @@ interface Blockquote extends Parent {
343
343
 
344
344
  ```ts
345
345
  type StoryBlock =
346
- | ImageSet
347
- | Flourish
346
+ | AcastPodcast
348
347
  | BigNumber
348
+ | Carousel
349
+ | ClipSet
349
350
  | CustomCodeComponent
351
+ | Definition
352
+ | Flourish
353
+ | ImagePair
354
+ | ImageSet
355
+ | InfoBox
356
+ | InfoPair
357
+ | InNumbers
350
358
  | Layout
351
359
  | Pullquote
352
- | ScrollyBlock
353
- | ClipSet
354
- | Table
355
360
  | Recommended
356
361
  | RecommendedList
362
+ | ScrollyBlock
363
+ | Table
364
+ | Timeline
357
365
  | Tweet
358
366
  | Video
359
- | YoutubeVideo
360
367
  | VimeoVideo
361
- | AcastPodcast
362
- | Timeline
363
- | ImagePair
364
- | InNumbers
365
- | Definition
366
- | InfoBox
367
- | InfoPair
368
+ | YoutubeVideo
368
369
  ```
369
370
 
370
371
  `StoryBlock` nodes are things that can be inserted into an article body.
@@ -804,7 +805,7 @@ interface LayoutImage extends Node {
804
805
  type TableColumnSettings = {
805
806
  hideOnMobile: boolean
806
807
  sortable: boolean
807
- sortType: 'text' | 'number' | 'date' | 'currency' | 'percent'
808
+ sortType?: 'text' | 'number' | 'date' | 'currency' | 'percent'
808
809
  }
809
810
 
810
811
  type TableLayoutWidth = Extract<LayoutWidth,
@@ -814,6 +815,11 @@ type TableLayoutWidth = Extract<LayoutWidth,
814
815
  | 'inset-right'
815
816
  | 'full-bleed'>
816
817
 
818
+ type TableChildren =
819
+ | [TableCaption, TableBody, TableFooter?]
820
+ | [TableBody, TableFooter?]
821
+ | [TableCaption, TableHeader, TableBody, TableFooter?]
822
+ | [TableHeader, TableBody, TableFooter?]
817
823
 
818
824
  interface TableCaption extends Parent {
819
825
  type: 'table-caption'
@@ -828,6 +834,11 @@ interface TableCell extends Parent {
828
834
  children: Phrasing[]
829
835
  }
830
836
 
837
+ interface TableHeader extends Parent {
838
+ type: 'table-header'
839
+ children: TableRow[]
840
+ }
841
+
831
842
  interface TableRow extends Parent {
832
843
  type: 'table-row'
833
844
  children: TableCell[]
@@ -850,14 +861,14 @@ interface Table extends Parent {
850
861
  layoutWidth: TableLayoutWidth
851
862
  collapseAfterHowManyRows?: number
852
863
  responsiveStyle: 'overflow' | 'flat' | 'scroll'
853
- children: [TableCaption, TableBody, TableFooter] | [TableCaption, TableBody] | [TableBody, TableFooter] | [TableBody]
854
864
  columnSettings: TableColumnSettings[]
865
+ children: TableChildren
855
866
  }
856
867
  ```
857
868
 
858
869
  **Table** represents 2d data.
859
870
 
860
- ### CustomCodeComponent
871
+ ### `CustomCodeComponent`
861
872
 
862
873
  ```ts
863
874
  type CustomCodeComponentAttributes = {
@@ -887,7 +898,7 @@ interface CustomCodeComponent extends Node {
887
898
  - The basic interface in Spark to make reference to this system above (eg. the git repo URL or a public S3 bucket), and provide some data for it if necessary. This will be the Custom Component storyblock.
888
899
  - The data Spark receives from entering a specific ID will be used to render dynamic fields (the `attributes`).
889
900
 
890
- ### ImagePair
901
+ ### `ImagePair`
891
902
 
892
903
  ```ts
893
904
  interface ImagePair extends Parent {
@@ -898,7 +909,7 @@ interface ImagePair extends Parent {
898
909
 
899
910
  **ImagePair** is a set of two images
900
911
 
901
- ### Timeline
912
+ ### `Timeline`
902
913
 
903
914
  ```ts
904
915
  /**
@@ -923,7 +934,7 @@ interface TimelineEvent extends Parent {
923
934
  }
924
935
  ```
925
936
 
926
- ### InNumbers
937
+ ### `InNumbers`
927
938
 
928
939
  ```ts
929
940
  /**
@@ -946,7 +957,7 @@ interface InNumbers extends Parent {
946
957
  }
947
958
  ```
948
959
 
949
- ### Card
960
+ ### `Card`
950
961
 
951
962
  ```ts
952
963
  /** Allowed children for a card
@@ -963,7 +974,7 @@ interface Card extends Parent {
963
974
  }
964
975
  ```
965
976
 
966
- ### InfoBox
977
+ ### `InfoBox`
967
978
 
968
979
  ```ts
969
980
  /**
@@ -981,7 +992,7 @@ interface InfoBox extends Parent {
981
992
  }
982
993
  ```
983
994
 
984
- ### InfoPair
995
+ ### `InfoPair`
985
996
 
986
997
  ```ts
987
998
  /**
@@ -995,9 +1006,50 @@ interface InfoPair extends Parent {
995
1006
  }
996
1007
  ```
997
1008
 
1009
+ ### Carousels
998
1010
 
1011
+ #### `CarouselCard`
1012
+ ```ts
1013
+ interface CarouselCard extends Node {
1014
+ type: "carousel-card"
1015
+ image: ImageSet
1016
+ title?: string
1017
+ copy: Paragraph[]
1018
+ additionalInfo?: string
1019
+ }
1020
+ ```
1021
+ **CarouselCard** is a single item in a carousel
999
1022
 
1023
+ #### `CarouselChildren`
1024
+ ```ts
1025
+ /**
1026
+ * @maxItems 10
1027
+ * @minItems 4
1028
+ * @sparkRepeater true
1029
+ */
1030
+ type CarouselChildren = CarouselCard[]
1031
+ ```
1032
+ **CarouselChildren** the array of carousel cards that make up a carousel
1000
1033
 
1034
+ #### `CarouselHeading`
1035
+ ```ts
1036
+ interface CarouselHeading extends Node {
1037
+ type: "carousel-heading"
1038
+ title: string
1039
+ standfirst?: string
1040
+ }
1041
+ ```
1042
+ **CarouselHeading** is the main header for a carousel component
1001
1043
 
1002
-
1003
-
1044
+ #### `Carousel`
1045
+ ```ts
1046
+ /**
1047
+ * @sparkGenerateStoryBlock true
1048
+ */
1049
+ interface Carousel extends Parent {
1050
+ type: "carousel"
1051
+ heading?: CarouselHeading
1052
+ children: CarouselChildren
1053
+ }
1054
+ ```
1055
+ **Carousel** is the main container for a carousel component
package/content-tree.d.ts CHANGED
@@ -95,7 +95,7 @@ export declare namespace ContentTree {
95
95
  type: "blockquote";
96
96
  children: (Paragraph | Phrasing)[];
97
97
  }
98
- type StoryBlock = ImageSet | Flourish | BigNumber | CustomCodeComponent | Layout | Pullquote | ScrollyBlock | ClipSet | Table | Recommended | RecommendedList | Tweet | Video | YoutubeVideo | VimeoVideo | AcastPodcast | Timeline | ImagePair | InNumbers | Definition | InfoBox | InfoPair;
98
+ type StoryBlock = AcastPodcast | BigNumber | Carousel | ClipSet | CustomCodeComponent | Definition | Flourish | ImagePair | ImageSet | InfoBox | InfoPair | InNumbers | Layout | Pullquote | Recommended | RecommendedList | ScrollyBlock | Table | Timeline | Tweet | Video | VimeoVideo | YoutubeVideo;
99
99
  interface Pullquote extends Node {
100
100
  type: "pullquote";
101
101
  text: string;
@@ -305,9 +305,10 @@ export declare namespace ContentTree {
305
305
  type TableColumnSettings = {
306
306
  hideOnMobile: boolean;
307
307
  sortable: boolean;
308
- sortType: 'text' | 'number' | 'date' | 'currency' | 'percent';
308
+ sortType?: 'text' | 'number' | 'date' | 'currency' | 'percent';
309
309
  };
310
310
  type TableLayoutWidth = Extract<LayoutWidth, 'auto' | 'full-grid' | 'inset-left' | 'inset-right' | 'full-bleed'>;
311
+ type TableChildren = [TableCaption, TableBody, TableFooter?] | [TableBody, TableFooter?] | [TableCaption, TableHeader, TableBody, TableFooter?] | [TableHeader, TableBody, TableFooter?];
311
312
  interface TableCaption extends Parent {
312
313
  type: 'table-caption';
313
314
  children: Phrasing[];
@@ -319,6 +320,10 @@ export declare namespace ContentTree {
319
320
  rowSpan?: number;
320
321
  children: Phrasing[];
321
322
  }
323
+ interface TableHeader extends Parent {
324
+ type: 'table-header';
325
+ children: TableRow[];
326
+ }
322
327
  interface TableRow extends Parent {
323
328
  type: 'table-row';
324
329
  children: TableCell[];
@@ -338,8 +343,8 @@ export declare namespace ContentTree {
338
343
  layoutWidth: TableLayoutWidth;
339
344
  collapseAfterHowManyRows?: number;
340
345
  responsiveStyle: 'overflow' | 'flat' | 'scroll';
341
- children: [TableCaption, TableBody, TableFooter] | [TableCaption, TableBody] | [TableBody, TableFooter] | [TableBody];
342
346
  columnSettings: TableColumnSettings[];
347
+ children: TableChildren;
343
348
  }
344
349
  type CustomCodeComponentAttributes = {
345
350
  [key: string]: string | boolean | undefined;
@@ -434,6 +439,32 @@ export declare namespace ContentTree {
434
439
  title?: string;
435
440
  children: [Card, Card];
436
441
  }
442
+ interface CarouselCard extends Node {
443
+ type: "carousel-card";
444
+ image: ImageSet;
445
+ title?: string;
446
+ copy: Paragraph[];
447
+ additionalInfo?: string;
448
+ }
449
+ /**
450
+ * @maxItems 10
451
+ * @minItems 4
452
+ * @sparkRepeater true
453
+ */
454
+ type CarouselChildren = CarouselCard[];
455
+ interface CarouselHeading extends Node {
456
+ type: "carousel-heading";
457
+ title: string;
458
+ standfirst?: string;
459
+ }
460
+ /**
461
+ * @sparkGenerateStoryBlock true
462
+ */
463
+ interface Carousel extends Parent {
464
+ type: "carousel";
465
+ heading?: CarouselHeading;
466
+ children: CarouselChildren;
467
+ }
437
468
  namespace full {
438
469
  type AssetFormat = "desktop" | "mobile" | "square" | "square-ftedit" | "standard" | "wide" | "standard-inline";
439
470
  type LayoutWidth = "auto" | "in-line" | "inset-left" | "inset-right" | "full-bleed" | "full-grid" | "mid-grid" | "full-width";
@@ -531,7 +562,7 @@ export declare namespace ContentTree {
531
562
  type: "blockquote";
532
563
  children: (Paragraph | Phrasing)[];
533
564
  }
534
- type StoryBlock = ImageSet | Flourish | BigNumber | CustomCodeComponent | Layout | Pullquote | ScrollyBlock | ClipSet | Table | Recommended | RecommendedList | Tweet | Video | YoutubeVideo | VimeoVideo | AcastPodcast | Timeline | ImagePair | InNumbers | Definition | InfoBox | InfoPair;
565
+ type StoryBlock = AcastPodcast | BigNumber | Carousel | ClipSet | CustomCodeComponent | Definition | Flourish | ImagePair | ImageSet | InfoBox | InfoPair | InNumbers | Layout | Pullquote | Recommended | RecommendedList | ScrollyBlock | Table | Timeline | Tweet | Video | VimeoVideo | YoutubeVideo;
535
566
  interface Pullquote extends Node {
536
567
  type: "pullquote";
537
568
  text: string;
@@ -741,9 +772,10 @@ export declare namespace ContentTree {
741
772
  type TableColumnSettings = {
742
773
  hideOnMobile: boolean;
743
774
  sortable: boolean;
744
- sortType: 'text' | 'number' | 'date' | 'currency' | 'percent';
775
+ sortType?: 'text' | 'number' | 'date' | 'currency' | 'percent';
745
776
  };
746
777
  type TableLayoutWidth = Extract<LayoutWidth, 'auto' | 'full-grid' | 'inset-left' | 'inset-right' | 'full-bleed'>;
778
+ type TableChildren = [TableCaption, TableBody, TableFooter?] | [TableBody, TableFooter?] | [TableCaption, TableHeader, TableBody, TableFooter?] | [TableHeader, TableBody, TableFooter?];
747
779
  interface TableCaption extends Parent {
748
780
  type: 'table-caption';
749
781
  children: Phrasing[];
@@ -755,6 +787,10 @@ export declare namespace ContentTree {
755
787
  rowSpan?: number;
756
788
  children: Phrasing[];
757
789
  }
790
+ interface TableHeader extends Parent {
791
+ type: 'table-header';
792
+ children: TableRow[];
793
+ }
758
794
  interface TableRow extends Parent {
759
795
  type: 'table-row';
760
796
  children: TableCell[];
@@ -774,8 +810,8 @@ export declare namespace ContentTree {
774
810
  layoutWidth: TableLayoutWidth;
775
811
  collapseAfterHowManyRows?: number;
776
812
  responsiveStyle: 'overflow' | 'flat' | 'scroll';
777
- children: [TableCaption, TableBody, TableFooter] | [TableCaption, TableBody] | [TableBody, TableFooter] | [TableBody];
778
813
  columnSettings: TableColumnSettings[];
814
+ children: TableChildren;
779
815
  }
780
816
  type CustomCodeComponentAttributes = {
781
817
  [key: string]: string | boolean | undefined;
@@ -870,6 +906,32 @@ export declare namespace ContentTree {
870
906
  title?: string;
871
907
  children: [Card, Card];
872
908
  }
909
+ interface CarouselCard extends Node {
910
+ type: "carousel-card";
911
+ image: ImageSet;
912
+ title?: string;
913
+ copy: Paragraph[];
914
+ additionalInfo?: string;
915
+ }
916
+ /**
917
+ * @maxItems 10
918
+ * @minItems 4
919
+ * @sparkRepeater true
920
+ */
921
+ type CarouselChildren = CarouselCard[];
922
+ interface CarouselHeading extends Node {
923
+ type: "carousel-heading";
924
+ title: string;
925
+ standfirst?: string;
926
+ }
927
+ /**
928
+ * @sparkGenerateStoryBlock true
929
+ */
930
+ interface Carousel extends Parent {
931
+ type: "carousel";
932
+ heading?: CarouselHeading;
933
+ children: CarouselChildren;
934
+ }
873
935
  }
874
936
  namespace transit {
875
937
  type AssetFormat = "desktop" | "mobile" | "square" | "square-ftedit" | "standard" | "wide" | "standard-inline";
@@ -968,7 +1030,7 @@ export declare namespace ContentTree {
968
1030
  type: "blockquote";
969
1031
  children: (Paragraph | Phrasing)[];
970
1032
  }
971
- type StoryBlock = ImageSet | Flourish | BigNumber | CustomCodeComponent | Layout | Pullquote | ScrollyBlock | ClipSet | Table | Recommended | RecommendedList | Tweet | Video | YoutubeVideo | VimeoVideo | AcastPodcast | Timeline | ImagePair | InNumbers | Definition | InfoBox | InfoPair;
1033
+ type StoryBlock = AcastPodcast | BigNumber | Carousel | ClipSet | CustomCodeComponent | Definition | Flourish | ImagePair | ImageSet | InfoBox | InfoPair | InNumbers | Layout | Pullquote | Recommended | RecommendedList | ScrollyBlock | Table | Timeline | Tweet | Video | VimeoVideo | YoutubeVideo;
972
1034
  interface Pullquote extends Node {
973
1035
  type: "pullquote";
974
1036
  text: string;
@@ -1159,9 +1221,10 @@ export declare namespace ContentTree {
1159
1221
  type TableColumnSettings = {
1160
1222
  hideOnMobile: boolean;
1161
1223
  sortable: boolean;
1162
- sortType: 'text' | 'number' | 'date' | 'currency' | 'percent';
1224
+ sortType?: 'text' | 'number' | 'date' | 'currency' | 'percent';
1163
1225
  };
1164
1226
  type TableLayoutWidth = Extract<LayoutWidth, 'auto' | 'full-grid' | 'inset-left' | 'inset-right' | 'full-bleed'>;
1227
+ type TableChildren = [TableCaption, TableBody, TableFooter?] | [TableBody, TableFooter?] | [TableCaption, TableHeader, TableBody, TableFooter?] | [TableHeader, TableBody, TableFooter?];
1165
1228
  interface TableCaption extends Parent {
1166
1229
  type: 'table-caption';
1167
1230
  children: Phrasing[];
@@ -1173,6 +1236,10 @@ export declare namespace ContentTree {
1173
1236
  rowSpan?: number;
1174
1237
  children: Phrasing[];
1175
1238
  }
1239
+ interface TableHeader extends Parent {
1240
+ type: 'table-header';
1241
+ children: TableRow[];
1242
+ }
1176
1243
  interface TableRow extends Parent {
1177
1244
  type: 'table-row';
1178
1245
  children: TableCell[];
@@ -1192,8 +1259,8 @@ export declare namespace ContentTree {
1192
1259
  layoutWidth: TableLayoutWidth;
1193
1260
  collapseAfterHowManyRows?: number;
1194
1261
  responsiveStyle: 'overflow' | 'flat' | 'scroll';
1195
- children: [TableCaption, TableBody, TableFooter] | [TableCaption, TableBody] | [TableBody, TableFooter] | [TableBody];
1196
1262
  columnSettings: TableColumnSettings[];
1263
+ children: TableChildren;
1197
1264
  }
1198
1265
  type CustomCodeComponentAttributes = {
1199
1266
  [key: string]: string | boolean | undefined;
@@ -1280,6 +1347,32 @@ export declare namespace ContentTree {
1280
1347
  title?: string;
1281
1348
  children: [Card, Card];
1282
1349
  }
1350
+ interface CarouselCard extends Node {
1351
+ type: "carousel-card";
1352
+ image: ImageSet;
1353
+ title?: string;
1354
+ copy: Paragraph[];
1355
+ additionalInfo?: string;
1356
+ }
1357
+ /**
1358
+ * @maxItems 10
1359
+ * @minItems 4
1360
+ * @sparkRepeater true
1361
+ */
1362
+ type CarouselChildren = CarouselCard[];
1363
+ interface CarouselHeading extends Node {
1364
+ type: "carousel-heading";
1365
+ title: string;
1366
+ standfirst?: string;
1367
+ }
1368
+ /**
1369
+ * @sparkGenerateStoryBlock true
1370
+ */
1371
+ interface Carousel extends Parent {
1372
+ type: "carousel";
1373
+ heading?: CarouselHeading;
1374
+ children: CarouselChildren;
1375
+ }
1283
1376
  }
1284
1377
  namespace loose {
1285
1378
  type AssetFormat = "desktop" | "mobile" | "square" | "square-ftedit" | "standard" | "wide" | "standard-inline";
@@ -1378,7 +1471,7 @@ export declare namespace ContentTree {
1378
1471
  type: "blockquote";
1379
1472
  children: (Paragraph | Phrasing)[];
1380
1473
  }
1381
- type StoryBlock = ImageSet | Flourish | BigNumber | CustomCodeComponent | Layout | Pullquote | ScrollyBlock | ClipSet | Table | Recommended | RecommendedList | Tweet | Video | YoutubeVideo | VimeoVideo | AcastPodcast | Timeline | ImagePair | InNumbers | Definition | InfoBox | InfoPair;
1474
+ type StoryBlock = AcastPodcast | BigNumber | Carousel | ClipSet | CustomCodeComponent | Definition | Flourish | ImagePair | ImageSet | InfoBox | InfoPair | InNumbers | Layout | Pullquote | Recommended | RecommendedList | ScrollyBlock | Table | Timeline | Tweet | Video | VimeoVideo | YoutubeVideo;
1382
1475
  interface Pullquote extends Node {
1383
1476
  type: "pullquote";
1384
1477
  text: string;
@@ -1588,9 +1681,10 @@ export declare namespace ContentTree {
1588
1681
  type TableColumnSettings = {
1589
1682
  hideOnMobile: boolean;
1590
1683
  sortable: boolean;
1591
- sortType: 'text' | 'number' | 'date' | 'currency' | 'percent';
1684
+ sortType?: 'text' | 'number' | 'date' | 'currency' | 'percent';
1592
1685
  };
1593
1686
  type TableLayoutWidth = Extract<LayoutWidth, 'auto' | 'full-grid' | 'inset-left' | 'inset-right' | 'full-bleed'>;
1687
+ type TableChildren = [TableCaption, TableBody, TableFooter?] | [TableBody, TableFooter?] | [TableCaption, TableHeader, TableBody, TableFooter?] | [TableHeader, TableBody, TableFooter?];
1594
1688
  interface TableCaption extends Parent {
1595
1689
  type: 'table-caption';
1596
1690
  children: Phrasing[];
@@ -1602,6 +1696,10 @@ export declare namespace ContentTree {
1602
1696
  rowSpan?: number;
1603
1697
  children: Phrasing[];
1604
1698
  }
1699
+ interface TableHeader extends Parent {
1700
+ type: 'table-header';
1701
+ children: TableRow[];
1702
+ }
1605
1703
  interface TableRow extends Parent {
1606
1704
  type: 'table-row';
1607
1705
  children: TableCell[];
@@ -1621,8 +1719,8 @@ export declare namespace ContentTree {
1621
1719
  layoutWidth: TableLayoutWidth;
1622
1720
  collapseAfterHowManyRows?: number;
1623
1721
  responsiveStyle: 'overflow' | 'flat' | 'scroll';
1624
- children: [TableCaption, TableBody, TableFooter] | [TableCaption, TableBody] | [TableBody, TableFooter] | [TableBody];
1625
1722
  columnSettings: TableColumnSettings[];
1723
+ children: TableChildren;
1626
1724
  }
1627
1725
  type CustomCodeComponentAttributes = {
1628
1726
  [key: string]: string | boolean | undefined;
@@ -1717,5 +1815,31 @@ export declare namespace ContentTree {
1717
1815
  title?: string;
1718
1816
  children: [Card, Card];
1719
1817
  }
1818
+ interface CarouselCard extends Node {
1819
+ type: "carousel-card";
1820
+ image: ImageSet;
1821
+ title?: string;
1822
+ copy: Paragraph[];
1823
+ additionalInfo?: string;
1824
+ }
1825
+ /**
1826
+ * @maxItems 10
1827
+ * @minItems 4
1828
+ * @sparkRepeater true
1829
+ */
1830
+ type CarouselChildren = CarouselCard[];
1831
+ interface CarouselHeading extends Node {
1832
+ type: "carousel-heading";
1833
+ title: string;
1834
+ standfirst?: string;
1835
+ }
1836
+ /**
1837
+ * @sparkGenerateStoryBlock true
1838
+ */
1839
+ interface Carousel extends Parent {
1840
+ type: "carousel";
1841
+ heading?: CarouselHeading;
1842
+ children: CarouselChildren;
1843
+ }
1720
1844
  }
1721
1845
  }
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@financial-times/content-tree",
3
3
  "description": "content tree format",
4
- "version": "0.10.0",
4
+ "version": "0.12.0-beta.2",
5
5
  "publishConfig": {
6
6
  "access": "public"
7
7
  },