Skip to content

Commit 8486094

Browse files
committed
feat: support TableHeader and make sortType optional
1 parent b71779d commit 8486094

File tree

5 files changed

+310
-175
lines changed

5 files changed

+310
-175
lines changed

README.md

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -679,7 +679,7 @@ interface LayoutImage extends Node {
679679
type TableColumnSettings = {
680680
hideOnMobile: boolean
681681
sortable: boolean
682-
sortType: 'text' | 'number' | 'date' | 'currency' | 'percent'
682+
sortType?: 'text' | 'number' | 'date' | 'currency' | 'percent'
683683
}
684684

685685
type TableLayoutWidth = Extract<LayoutWidth,
@@ -689,6 +689,11 @@ type TableLayoutWidth = Extract<LayoutWidth,
689689
| 'inset-right'
690690
| 'full-bleed'>
691691

692+
type TableChildren =
693+
| [TableCaption, TableBody, TableFooter?]
694+
| [TableBody, TableFooter?]
695+
| [TableCaption, TableHeader, TableBody, TableFooter?]
696+
| [TableHeader, TableBody, TableFooter?]
692697

693698
interface TableCaption extends Parent {
694699
type: 'table-caption'
@@ -703,6 +708,11 @@ interface TableCell extends Parent {
703708
children: Phrasing[]
704709
}
705710

711+
interface TableHeader extends Parent {
712+
type: 'table-header'
713+
children: TableRow[]
714+
}
715+
706716
interface TableRow extends Parent {
707717
type: 'table-row'
708718
children: TableCell[]
@@ -725,8 +735,8 @@ interface Table extends Parent {
725735
layoutWidth: TableLayoutWidth
726736
collapseAfterHowManyRows?: number
727737
responsiveStyle: 'overflow' | 'flat' | 'scroll'
728-
children: [TableCaption, TableBody, TableFooter] | [TableCaption, TableBody] | [TableBody, TableFooter] | [TableBody]
729738
columnSettings: TableColumnSettings[]
739+
children: TableChildren
730740
}
731741
```
732742

content-tree.d.ts

Lines changed: 28 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -223,9 +223,10 @@ export declare namespace ContentTree {
223223
type TableColumnSettings = {
224224
hideOnMobile: boolean;
225225
sortable: boolean;
226-
sortType: 'text' | 'number' | 'date' | 'currency' | 'percent';
226+
sortType?: 'text' | 'number' | 'date' | 'currency' | 'percent';
227227
};
228228
type TableLayoutWidth = Extract<LayoutWidth, 'auto' | 'full-grid' | 'inset-left' | 'inset-right' | 'full-bleed'>;
229+
type TableChildren = [TableCaption, TableBody, TableFooter?] | [TableBody, TableFooter?] | [TableCaption, TableHeader, TableBody, TableFooter?] | [TableHeader, TableBody, TableFooter?];
229230
interface TableCaption extends Parent {
230231
type: 'table-caption';
231232
children: Phrasing[];
@@ -237,6 +238,10 @@ export declare namespace ContentTree {
237238
rowSpan?: number;
238239
children: Phrasing[];
239240
}
241+
interface TableHeader extends Parent {
242+
type: 'table-header';
243+
children: TableRow[];
244+
}
240245
interface TableRow extends Parent {
241246
type: 'table-row';
242247
children: TableCell[];
@@ -256,8 +261,8 @@ export declare namespace ContentTree {
256261
layoutWidth: TableLayoutWidth;
257262
collapseAfterHowManyRows?: number;
258263
responsiveStyle: 'overflow' | 'flat' | 'scroll';
259-
children: [TableCaption, TableBody, TableFooter] | [TableCaption, TableBody] | [TableBody, TableFooter] | [TableBody];
260264
columnSettings: TableColumnSettings[];
265+
children: TableChildren;
261266
}
262267
type CustomCodeComponentAttributes = {
263268
[key: string]: string | boolean | undefined;
@@ -503,9 +508,10 @@ export declare namespace ContentTree {
503508
type TableColumnSettings = {
504509
hideOnMobile: boolean;
505510
sortable: boolean;
506-
sortType: 'text' | 'number' | 'date' | 'currency' | 'percent';
511+
sortType?: 'text' | 'number' | 'date' | 'currency' | 'percent';
507512
};
508513
type TableLayoutWidth = Extract<LayoutWidth, 'auto' | 'full-grid' | 'inset-left' | 'inset-right' | 'full-bleed'>;
514+
type TableChildren = [TableCaption, TableBody, TableFooter?] | [TableBody, TableFooter?] | [TableCaption, TableHeader, TableBody, TableFooter?] | [TableHeader, TableBody, TableFooter?];
509515
interface TableCaption extends Parent {
510516
type: 'table-caption';
511517
children: Phrasing[];
@@ -517,6 +523,10 @@ export declare namespace ContentTree {
517523
rowSpan?: number;
518524
children: Phrasing[];
519525
}
526+
interface TableHeader extends Parent {
527+
type: 'table-header';
528+
children: TableRow[];
529+
}
520530
interface TableRow extends Parent {
521531
type: 'table-row';
522532
children: TableCell[];
@@ -536,8 +546,8 @@ export declare namespace ContentTree {
536546
layoutWidth: TableLayoutWidth;
537547
collapseAfterHowManyRows?: number;
538548
responsiveStyle: 'overflow' | 'flat' | 'scroll';
539-
children: [TableCaption, TableBody, TableFooter] | [TableCaption, TableBody] | [TableBody, TableFooter] | [TableBody];
540549
columnSettings: TableColumnSettings[];
550+
children: TableChildren;
541551
}
542552
type CustomCodeComponentAttributes = {
543553
[key: string]: string | boolean | undefined;
@@ -777,9 +787,10 @@ export declare namespace ContentTree {
777787
type TableColumnSettings = {
778788
hideOnMobile: boolean;
779789
sortable: boolean;
780-
sortType: 'text' | 'number' | 'date' | 'currency' | 'percent';
790+
sortType?: 'text' | 'number' | 'date' | 'currency' | 'percent';
781791
};
782792
type TableLayoutWidth = Extract<LayoutWidth, 'auto' | 'full-grid' | 'inset-left' | 'inset-right' | 'full-bleed'>;
793+
type TableChildren = [TableCaption, TableBody, TableFooter?] | [TableBody, TableFooter?] | [TableCaption, TableHeader, TableBody, TableFooter?] | [TableHeader, TableBody, TableFooter?];
783794
interface TableCaption extends Parent {
784795
type: 'table-caption';
785796
children: Phrasing[];
@@ -791,6 +802,10 @@ export declare namespace ContentTree {
791802
rowSpan?: number;
792803
children: Phrasing[];
793804
}
805+
interface TableHeader extends Parent {
806+
type: 'table-header';
807+
children: TableRow[];
808+
}
794809
interface TableRow extends Parent {
795810
type: 'table-row';
796811
children: TableCell[];
@@ -810,8 +825,8 @@ export declare namespace ContentTree {
810825
layoutWidth: TableLayoutWidth;
811826
collapseAfterHowManyRows?: number;
812827
responsiveStyle: 'overflow' | 'flat' | 'scroll';
813-
children: [TableCaption, TableBody, TableFooter] | [TableCaption, TableBody] | [TableBody, TableFooter] | [TableBody];
814828
columnSettings: TableColumnSettings[];
829+
children: TableChildren;
815830
}
816831
type CustomCodeComponentAttributes = {
817832
[key: string]: string | boolean | undefined;
@@ -1050,9 +1065,10 @@ export declare namespace ContentTree {
10501065
type TableColumnSettings = {
10511066
hideOnMobile: boolean;
10521067
sortable: boolean;
1053-
sortType: 'text' | 'number' | 'date' | 'currency' | 'percent';
1068+
sortType?: 'text' | 'number' | 'date' | 'currency' | 'percent';
10541069
};
10551070
type TableLayoutWidth = Extract<LayoutWidth, 'auto' | 'full-grid' | 'inset-left' | 'inset-right' | 'full-bleed'>;
1071+
type TableChildren = [TableCaption, TableBody, TableFooter?] | [TableBody, TableFooter?] | [TableCaption, TableHeader, TableBody, TableFooter?] | [TableHeader, TableBody, TableFooter?];
10561072
interface TableCaption extends Parent {
10571073
type: 'table-caption';
10581074
children: Phrasing[];
@@ -1064,6 +1080,10 @@ export declare namespace ContentTree {
10641080
rowSpan?: number;
10651081
children: Phrasing[];
10661082
}
1083+
interface TableHeader extends Parent {
1084+
type: 'table-header';
1085+
children: TableRow[];
1086+
}
10671087
interface TableRow extends Parent {
10681088
type: 'table-row';
10691089
children: TableCell[];
@@ -1083,8 +1103,8 @@ export declare namespace ContentTree {
10831103
layoutWidth: TableLayoutWidth;
10841104
collapseAfterHowManyRows?: number;
10851105
responsiveStyle: 'overflow' | 'flat' | 'scroll';
1086-
children: [TableCaption, TableBody, TableFooter] | [TableCaption, TableBody] | [TableBody, TableFooter] | [TableBody];
10871106
columnSettings: TableColumnSettings[];
1107+
children: TableChildren;
10881108
}
10891109
type CustomCodeComponentAttributes = {
10901110
[key: string]: string | boolean | undefined;

schemas/body-tree.schema.json

Lines changed: 90 additions & 55 deletions
Original file line numberDiff line numberDiff line change
@@ -811,60 +811,7 @@
811811
"additionalProperties": false,
812812
"properties": {
813813
"children": {
814-
"anyOf": [
815-
{
816-
"items": [
817-
{
818-
"$ref": "#/definitions/ContentTree.transit.TableCaption"
819-
},
820-
{
821-
"$ref": "#/definitions/ContentTree.transit.TableBody"
822-
},
823-
{
824-
"$ref": "#/definitions/ContentTree.transit.TableFooter"
825-
}
826-
],
827-
"maxItems": 3,
828-
"minItems": 3,
829-
"type": "array"
830-
},
831-
{
832-
"items": [
833-
{
834-
"$ref": "#/definitions/ContentTree.transit.TableCaption"
835-
},
836-
{
837-
"$ref": "#/definitions/ContentTree.transit.TableBody"
838-
}
839-
],
840-
"maxItems": 2,
841-
"minItems": 2,
842-
"type": "array"
843-
},
844-
{
845-
"items": [
846-
{
847-
"$ref": "#/definitions/ContentTree.transit.TableBody"
848-
},
849-
{
850-
"$ref": "#/definitions/ContentTree.transit.TableFooter"
851-
}
852-
],
853-
"maxItems": 2,
854-
"minItems": 2,
855-
"type": "array"
856-
},
857-
{
858-
"items": [
859-
{
860-
"$ref": "#/definitions/ContentTree.transit.TableBody"
861-
}
862-
],
863-
"maxItems": 1,
864-
"minItems": 1,
865-
"type": "array"
866-
}
867-
]
814+
"$ref": "#/definitions/ContentTree.transit.TableChildren"
868815
},
869816
"collapseAfterHowManyRows": {
870817
"type": "number"
@@ -892,7 +839,6 @@
892839
},
893840
"required": [
894841
"hideOnMobile",
895-
"sortType",
896842
"sortable"
897843
],
898844
"type": "object"
@@ -1005,6 +951,74 @@
1005951
],
1006952
"type": "object"
1007953
},
954+
"ContentTree.transit.TableChildren": {
955+
"anyOf": [
956+
{
957+
"items": [
958+
{
959+
"$ref": "#/definitions/ContentTree.transit.TableCaption"
960+
},
961+
{
962+
"$ref": "#/definitions/ContentTree.transit.TableBody"
963+
},
964+
{
965+
"$ref": "#/definitions/ContentTree.transit.TableFooter"
966+
}
967+
],
968+
"maxItems": 3,
969+
"minItems": 2,
970+
"type": "array"
971+
},
972+
{
973+
"items": [
974+
{
975+
"$ref": "#/definitions/ContentTree.transit.TableBody"
976+
},
977+
{
978+
"$ref": "#/definitions/ContentTree.transit.TableFooter"
979+
}
980+
],
981+
"maxItems": 2,
982+
"minItems": 1,
983+
"type": "array"
984+
},
985+
{
986+
"items": [
987+
{
988+
"$ref": "#/definitions/ContentTree.transit.TableCaption"
989+
},
990+
{
991+
"$ref": "#/definitions/ContentTree.transit.TableHeader"
992+
},
993+
{
994+
"$ref": "#/definitions/ContentTree.transit.TableBody"
995+
},
996+
{
997+
"$ref": "#/definitions/ContentTree.transit.TableFooter"
998+
}
999+
],
1000+
"maxItems": 4,
1001+
"minItems": 3,
1002+
"type": "array"
1003+
},
1004+
{
1005+
"items": [
1006+
{
1007+
"$ref": "#/definitions/ContentTree.transit.TableHeader"
1008+
},
1009+
{
1010+
"$ref": "#/definitions/ContentTree.transit.TableBody"
1011+
},
1012+
{
1013+
"$ref": "#/definitions/ContentTree.transit.TableFooter"
1014+
}
1015+
],
1016+
"maxItems": 3,
1017+
"minItems": 2,
1018+
"type": "array"
1019+
}
1020+
]
1021+
},
10081022
"ContentTree.transit.TableFooter": {
10091023
"additionalProperties": false,
10101024
"properties": {
@@ -1026,6 +1040,27 @@
10261040
],
10271041
"type": "object"
10281042
},
1043+
"ContentTree.transit.TableHeader": {
1044+
"additionalProperties": false,
1045+
"properties": {
1046+
"children": {
1047+
"items": {
1048+
"$ref": "#/definitions/ContentTree.transit.TableRow"
1049+
},
1050+
"type": "array"
1051+
},
1052+
"data": {},
1053+
"type": {
1054+
"const": "table-header",
1055+
"type": "string"
1056+
}
1057+
},
1058+
"required": [
1059+
"children",
1060+
"type"
1061+
],
1062+
"type": "object"
1063+
},
10291064
"ContentTree.transit.TableLayoutWidth": {
10301065
"enum": [
10311066
"auto",

0 commit comments

Comments
 (0)