Skip to content

Commit 1e08482

Browse files
committed
feat: support TableHeader and make sortType optional
1 parent 1e271e9 commit 1e08482

File tree

5 files changed

+311
-175
lines changed

5 files changed

+311
-175
lines changed

README.md

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -673,9 +673,15 @@ interface LayoutImage extends Node {
673673
type TableColumnSettings = {
674674
hideOnMobile: boolean
675675
sortable: boolean
676-
sortType: 'text' | 'number' | 'date' | 'currency' | 'percent'
676+
sortType?: 'text' | 'number' | 'date' | 'currency' | 'percent'
677677
}
678678

679+
type TableChildren =
680+
| [TableCaption, TableBody, TableFooter?]
681+
| [TableBody, TableFooter?]
682+
| [TableCaption, TableHeader, TableBody, TableFooter?]
683+
| [TableHeader, TableBody, TableFooter?]
684+
679685
interface TableCaption extends Parent {
680686
type: 'table-caption'
681687
children: Phrasing[]
@@ -689,6 +695,11 @@ interface TableCell extends Parent {
689695
children: Phrasing[]
690696
}
691697

698+
interface TableHeader extends Parent {
699+
type: 'table-header'
700+
children: TableRow[]
701+
}
702+
692703
interface TableRow extends Parent {
693704
type: 'table-row'
694705
children: TableCell[]
@@ -716,8 +727,8 @@ interface Table extends Parent {
716727
| 'full-bleed'
717728
collapseAfterHowManyRows?: number
718729
responsiveStyle: 'overflow' | 'flat' | 'scroll'
719-
children: [TableCaption, TableBody, TableFooter] | [TableCaption, TableBody] | [TableBody, TableFooter] | [TableBody]
720730
columnSettings: TableColumnSettings[]
731+
children: TableChildren
721732
}
722733
```
723734

content-tree.d.ts

Lines changed: 28 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -219,8 +219,9 @@ export declare namespace ContentTree {
219219
type TableColumnSettings = {
220220
hideOnMobile: boolean;
221221
sortable: boolean;
222-
sortType: 'text' | 'number' | 'date' | 'currency' | 'percent';
222+
sortType?: 'text' | 'number' | 'date' | 'currency' | 'percent';
223223
};
224+
type TableChildren = [TableCaption, TableBody, TableFooter?] | [TableBody, TableFooter?] | [TableCaption, TableHeader, TableBody, TableFooter?] | [TableHeader, TableBody, TableFooter?];
224225
interface TableCaption extends Parent {
225226
type: 'table-caption';
226227
children: Phrasing[];
@@ -232,6 +233,10 @@ export declare namespace ContentTree {
232233
rowSpan?: number;
233234
children: Phrasing[];
234235
}
236+
interface TableHeader extends Parent {
237+
type: 'table-header';
238+
children: TableRow[];
239+
}
235240
interface TableRow extends Parent {
236241
type: 'table-row';
237242
children: TableCell[];
@@ -251,8 +256,8 @@ export declare namespace ContentTree {
251256
layoutWidth: 'auto' | 'full-grid' | 'inset-left' | 'inset-right' | 'full-bleed';
252257
collapseAfterHowManyRows?: number;
253258
responsiveStyle: 'overflow' | 'flat' | 'scroll';
254-
children: [TableCaption, TableBody, TableFooter] | [TableCaption, TableBody] | [TableBody, TableFooter] | [TableBody];
255259
columnSettings: TableColumnSettings[];
260+
children: TableChildren;
256261
}
257262
type CustomCodeComponentAttributes = {
258263
[key: string]: string | boolean | undefined;
@@ -494,8 +499,9 @@ export declare namespace ContentTree {
494499
type TableColumnSettings = {
495500
hideOnMobile: boolean;
496501
sortable: boolean;
497-
sortType: 'text' | 'number' | 'date' | 'currency' | 'percent';
502+
sortType?: 'text' | 'number' | 'date' | 'currency' | 'percent';
498503
};
504+
type TableChildren = [TableCaption, TableBody, TableFooter?] | [TableBody, TableFooter?] | [TableCaption, TableHeader, TableBody, TableFooter?] | [TableHeader, TableBody, TableFooter?];
499505
interface TableCaption extends Parent {
500506
type: 'table-caption';
501507
children: Phrasing[];
@@ -507,6 +513,10 @@ export declare namespace ContentTree {
507513
rowSpan?: number;
508514
children: Phrasing[];
509515
}
516+
interface TableHeader extends Parent {
517+
type: 'table-header';
518+
children: TableRow[];
519+
}
510520
interface TableRow extends Parent {
511521
type: 'table-row';
512522
children: TableCell[];
@@ -526,8 +536,8 @@ export declare namespace ContentTree {
526536
layoutWidth: 'auto' | 'full-grid' | 'inset-left' | 'inset-right' | 'full-bleed';
527537
collapseAfterHowManyRows?: number;
528538
responsiveStyle: 'overflow' | 'flat' | 'scroll';
529-
children: [TableCaption, TableBody, TableFooter] | [TableCaption, TableBody] | [TableBody, TableFooter] | [TableBody];
530539
columnSettings: TableColumnSettings[];
540+
children: TableChildren;
531541
}
532542
type CustomCodeComponentAttributes = {
533543
[key: string]: string | boolean | undefined;
@@ -763,8 +773,9 @@ export declare namespace ContentTree {
763773
type TableColumnSettings = {
764774
hideOnMobile: boolean;
765775
sortable: boolean;
766-
sortType: 'text' | 'number' | 'date' | 'currency' | 'percent';
776+
sortType?: 'text' | 'number' | 'date' | 'currency' | 'percent';
767777
};
778+
type TableChildren = [TableCaption, TableBody, TableFooter?] | [TableBody, TableFooter?] | [TableCaption, TableHeader, TableBody, TableFooter?] | [TableHeader, TableBody, TableFooter?];
768779
interface TableCaption extends Parent {
769780
type: 'table-caption';
770781
children: Phrasing[];
@@ -776,6 +787,10 @@ export declare namespace ContentTree {
776787
rowSpan?: number;
777788
children: Phrasing[];
778789
}
790+
interface TableHeader extends Parent {
791+
type: 'table-header';
792+
children: TableRow[];
793+
}
779794
interface TableRow extends Parent {
780795
type: 'table-row';
781796
children: TableCell[];
@@ -795,8 +810,8 @@ export declare namespace ContentTree {
795810
layoutWidth: 'auto' | 'full-grid' | 'inset-left' | 'inset-right' | 'full-bleed';
796811
collapseAfterHowManyRows?: number;
797812
responsiveStyle: 'overflow' | 'flat' | 'scroll';
798-
children: [TableCaption, TableBody, TableFooter] | [TableCaption, TableBody] | [TableBody, TableFooter] | [TableBody];
799813
columnSettings: TableColumnSettings[];
814+
children: TableChildren;
800815
}
801816
type CustomCodeComponentAttributes = {
802817
[key: string]: string | boolean | undefined;
@@ -1031,8 +1046,9 @@ export declare namespace ContentTree {
10311046
type TableColumnSettings = {
10321047
hideOnMobile: boolean;
10331048
sortable: boolean;
1034-
sortType: 'text' | 'number' | 'date' | 'currency' | 'percent';
1049+
sortType?: 'text' | 'number' | 'date' | 'currency' | 'percent';
10351050
};
1051+
type TableChildren = [TableCaption, TableBody, TableFooter?] | [TableBody, TableFooter?] | [TableCaption, TableHeader, TableBody, TableFooter?] | [TableHeader, TableBody, TableFooter?];
10361052
interface TableCaption extends Parent {
10371053
type: 'table-caption';
10381054
children: Phrasing[];
@@ -1044,6 +1060,10 @@ export declare namespace ContentTree {
10441060
rowSpan?: number;
10451061
children: Phrasing[];
10461062
}
1063+
interface TableHeader extends Parent {
1064+
type: 'table-header';
1065+
children: TableRow[];
1066+
}
10471067
interface TableRow extends Parent {
10481068
type: 'table-row';
10491069
children: TableCell[];
@@ -1063,8 +1083,8 @@ export declare namespace ContentTree {
10631083
layoutWidth: 'auto' | 'full-grid' | 'inset-left' | 'inset-right' | 'full-bleed';
10641084
collapseAfterHowManyRows?: number;
10651085
responsiveStyle: 'overflow' | 'flat' | 'scroll';
1066-
children: [TableCaption, TableBody, TableFooter] | [TableCaption, TableBody] | [TableBody, TableFooter] | [TableBody];
10671086
columnSettings: TableColumnSettings[];
1087+
children: TableChildren;
10681088
}
10691089
type CustomCodeComponentAttributes = {
10701090
[key: string]: string | boolean | undefined;

schemas/body-tree.schema.json

Lines changed: 90 additions & 55 deletions
Original file line numberDiff line numberDiff line change
@@ -795,60 +795,7 @@
795795
"additionalProperties": false,
796796
"properties": {
797797
"children": {
798-
"anyOf": [
799-
{
800-
"items": [
801-
{
802-
"$ref": "#/definitions/ContentTree.transit.TableCaption"
803-
},
804-
{
805-
"$ref": "#/definitions/ContentTree.transit.TableBody"
806-
},
807-
{
808-
"$ref": "#/definitions/ContentTree.transit.TableFooter"
809-
}
810-
],
811-
"maxItems": 3,
812-
"minItems": 3,
813-
"type": "array"
814-
},
815-
{
816-
"items": [
817-
{
818-
"$ref": "#/definitions/ContentTree.transit.TableCaption"
819-
},
820-
{
821-
"$ref": "#/definitions/ContentTree.transit.TableBody"
822-
}
823-
],
824-
"maxItems": 2,
825-
"minItems": 2,
826-
"type": "array"
827-
},
828-
{
829-
"items": [
830-
{
831-
"$ref": "#/definitions/ContentTree.transit.TableBody"
832-
},
833-
{
834-
"$ref": "#/definitions/ContentTree.transit.TableFooter"
835-
}
836-
],
837-
"maxItems": 2,
838-
"minItems": 2,
839-
"type": "array"
840-
},
841-
{
842-
"items": [
843-
{
844-
"$ref": "#/definitions/ContentTree.transit.TableBody"
845-
}
846-
],
847-
"maxItems": 1,
848-
"minItems": 1,
849-
"type": "array"
850-
}
851-
]
798+
"$ref": "#/definitions/ContentTree.transit.TableChildren"
852799
},
853800
"collapseAfterHowManyRows": {
854801
"type": "number"
@@ -876,7 +823,6 @@
876823
},
877824
"required": [
878825
"hideOnMobile",
879-
"sortType",
880826
"sortable"
881827
],
882828
"type": "object"
@@ -996,6 +942,74 @@
996942
],
997943
"type": "object"
998944
},
945+
"ContentTree.transit.TableChildren": {
946+
"anyOf": [
947+
{
948+
"items": [
949+
{
950+
"$ref": "#/definitions/ContentTree.transit.TableCaption"
951+
},
952+
{
953+
"$ref": "#/definitions/ContentTree.transit.TableBody"
954+
},
955+
{
956+
"$ref": "#/definitions/ContentTree.transit.TableFooter"
957+
}
958+
],
959+
"maxItems": 3,
960+
"minItems": 2,
961+
"type": "array"
962+
},
963+
{
964+
"items": [
965+
{
966+
"$ref": "#/definitions/ContentTree.transit.TableBody"
967+
},
968+
{
969+
"$ref": "#/definitions/ContentTree.transit.TableFooter"
970+
}
971+
],
972+
"maxItems": 2,
973+
"minItems": 1,
974+
"type": "array"
975+
},
976+
{
977+
"items": [
978+
{
979+
"$ref": "#/definitions/ContentTree.transit.TableCaption"
980+
},
981+
{
982+
"$ref": "#/definitions/ContentTree.transit.TableHeader"
983+
},
984+
{
985+
"$ref": "#/definitions/ContentTree.transit.TableBody"
986+
},
987+
{
988+
"$ref": "#/definitions/ContentTree.transit.TableFooter"
989+
}
990+
],
991+
"maxItems": 4,
992+
"minItems": 3,
993+
"type": "array"
994+
},
995+
{
996+
"items": [
997+
{
998+
"$ref": "#/definitions/ContentTree.transit.TableHeader"
999+
},
1000+
{
1001+
"$ref": "#/definitions/ContentTree.transit.TableBody"
1002+
},
1003+
{
1004+
"$ref": "#/definitions/ContentTree.transit.TableFooter"
1005+
}
1006+
],
1007+
"maxItems": 3,
1008+
"minItems": 2,
1009+
"type": "array"
1010+
}
1011+
]
1012+
},
9991013
"ContentTree.transit.TableFooter": {
10001014
"additionalProperties": false,
10011015
"properties": {
@@ -1017,6 +1031,27 @@
10171031
],
10181032
"type": "object"
10191033
},
1034+
"ContentTree.transit.TableHeader": {
1035+
"additionalProperties": false,
1036+
"properties": {
1037+
"children": {
1038+
"items": {
1039+
"$ref": "#/definitions/ContentTree.transit.TableRow"
1040+
},
1041+
"type": "array"
1042+
},
1043+
"data": {},
1044+
"type": {
1045+
"const": "table-header",
1046+
"type": "string"
1047+
}
1048+
},
1049+
"required": [
1050+
"children",
1051+
"type"
1052+
],
1053+
"type": "object"
1054+
},
10201055
"ContentTree.transit.TableRow": {
10211056
"additionalProperties": false,
10221057
"properties": {

0 commit comments

Comments
 (0)