diff --git a/SPEC.md b/SPEC.md index a94836f..5e8bbee 100644 --- a/SPEC.md +++ b/SPEC.md @@ -768,7 +768,7 @@ interface LayoutImage extends Node { type TableColumnSettings = { hideOnMobile: boolean sortable: boolean - sortType: 'text' | 'number' | 'date' | 'currency' | 'percent' + sortType?: 'text' | 'number' | 'date' | 'currency' | 'percent' } type TableLayoutWidth = Extract +type TableChildren = + | [TableCaption, TableBody, TableFooter?] + | [TableBody, TableFooter?] + | [TableCaption, TableHeader, TableBody, TableFooter?] + | [TableHeader, TableBody, TableFooter?] interface TableCaption extends Parent { type: 'table-caption' @@ -792,6 +797,11 @@ interface TableCell extends Parent { children: Phrasing[] } +interface TableHeader extends Parent { + type: 'table-header' + children: TableRow[] +} + interface TableRow extends Parent { type: 'table-row' children: TableCell[] @@ -814,8 +824,8 @@ interface Table extends Parent { layoutWidth: TableLayoutWidth collapseAfterHowManyRows?: number responsiveStyle: 'overflow' | 'flat' | 'scroll' - children: [TableCaption, TableBody, TableFooter] | [TableCaption, TableBody] | [TableBody, TableFooter] | [TableBody] columnSettings: TableColumnSettings[] + children: TableChildren } ``` diff --git a/content-tree.d.ts b/content-tree.d.ts index b0a985c..b558411 100644 --- a/content-tree.d.ts +++ b/content-tree.d.ts @@ -293,9 +293,10 @@ export declare namespace ContentTree { type TableColumnSettings = { hideOnMobile: boolean; sortable: boolean; - sortType: 'text' | 'number' | 'date' | 'currency' | 'percent'; + sortType?: 'text' | 'number' | 'date' | 'currency' | 'percent'; }; type TableLayoutWidth = Extract; + type TableChildren = [TableCaption, TableBody, TableFooter?] | [TableBody, TableFooter?] | [TableCaption, TableHeader, TableBody, TableFooter?] | [TableHeader, TableBody, TableFooter?]; interface TableCaption extends Parent { type: 'table-caption'; children: Phrasing[]; @@ -307,6 +308,10 @@ export declare namespace ContentTree { rowSpan?: number; children: Phrasing[]; } + interface TableHeader extends Parent { + type: 'table-header'; + children: TableRow[]; + } interface TableRow extends Parent { type: 'table-row'; children: TableCell[]; @@ -326,8 +331,8 @@ export declare namespace ContentTree { layoutWidth: TableLayoutWidth; collapseAfterHowManyRows?: number; responsiveStyle: 'overflow' | 'flat' | 'scroll'; - children: [TableCaption, TableBody, TableFooter] | [TableCaption, TableBody] | [TableBody, TableFooter] | [TableBody]; columnSettings: TableColumnSettings[]; + children: TableChildren; } type CustomCodeComponentAttributes = { [key: string]: string | boolean | undefined; @@ -717,9 +722,10 @@ export declare namespace ContentTree { type TableColumnSettings = { hideOnMobile: boolean; sortable: boolean; - sortType: 'text' | 'number' | 'date' | 'currency' | 'percent'; + sortType?: 'text' | 'number' | 'date' | 'currency' | 'percent'; }; type TableLayoutWidth = Extract; + type TableChildren = [TableCaption, TableBody, TableFooter?] | [TableBody, TableFooter?] | [TableCaption, TableHeader, TableBody, TableFooter?] | [TableHeader, TableBody, TableFooter?]; interface TableCaption extends Parent { type: 'table-caption'; children: Phrasing[]; @@ -731,6 +737,10 @@ export declare namespace ContentTree { rowSpan?: number; children: Phrasing[]; } + interface TableHeader extends Parent { + type: 'table-header'; + children: TableRow[]; + } interface TableRow extends Parent { type: 'table-row'; children: TableCell[]; @@ -750,8 +760,8 @@ export declare namespace ContentTree { layoutWidth: TableLayoutWidth; collapseAfterHowManyRows?: number; responsiveStyle: 'overflow' | 'flat' | 'scroll'; - children: [TableCaption, TableBody, TableFooter] | [TableCaption, TableBody] | [TableBody, TableFooter] | [TableBody]; columnSettings: TableColumnSettings[]; + children: TableChildren; } type CustomCodeComponentAttributes = { [key: string]: string | boolean | undefined; @@ -1123,9 +1133,10 @@ export declare namespace ContentTree { type TableColumnSettings = { hideOnMobile: boolean; sortable: boolean; - sortType: 'text' | 'number' | 'date' | 'currency' | 'percent'; + sortType?: 'text' | 'number' | 'date' | 'currency' | 'percent'; }; type TableLayoutWidth = Extract; + type TableChildren = [TableCaption, TableBody, TableFooter?] | [TableBody, TableFooter?] | [TableCaption, TableHeader, TableBody, TableFooter?] | [TableHeader, TableBody, TableFooter?]; interface TableCaption extends Parent { type: 'table-caption'; children: Phrasing[]; @@ -1137,6 +1148,10 @@ export declare namespace ContentTree { rowSpan?: number; children: Phrasing[]; } + interface TableHeader extends Parent { + type: 'table-header'; + children: TableRow[]; + } interface TableRow extends Parent { type: 'table-row'; children: TableCell[]; @@ -1156,8 +1171,8 @@ export declare namespace ContentTree { layoutWidth: TableLayoutWidth; collapseAfterHowManyRows?: number; responsiveStyle: 'overflow' | 'flat' | 'scroll'; - children: [TableCaption, TableBody, TableFooter] | [TableCaption, TableBody] | [TableBody, TableFooter] | [TableBody]; columnSettings: TableColumnSettings[]; + children: TableChildren; } type CustomCodeComponentAttributes = { [key: string]: string | boolean | undefined; @@ -1540,9 +1555,10 @@ export declare namespace ContentTree { type TableColumnSettings = { hideOnMobile: boolean; sortable: boolean; - sortType: 'text' | 'number' | 'date' | 'currency' | 'percent'; + sortType?: 'text' | 'number' | 'date' | 'currency' | 'percent'; }; type TableLayoutWidth = Extract; + type TableChildren = [TableCaption, TableBody, TableFooter?] | [TableBody, TableFooter?] | [TableCaption, TableHeader, TableBody, TableFooter?] | [TableHeader, TableBody, TableFooter?]; interface TableCaption extends Parent { type: 'table-caption'; children: Phrasing[]; @@ -1554,6 +1570,10 @@ export declare namespace ContentTree { rowSpan?: number; children: Phrasing[]; } + interface TableHeader extends Parent { + type: 'table-header'; + children: TableRow[]; + } interface TableRow extends Parent { type: 'table-row'; children: TableCell[]; @@ -1573,8 +1593,8 @@ export declare namespace ContentTree { layoutWidth: TableLayoutWidth; collapseAfterHowManyRows?: number; responsiveStyle: 'overflow' | 'flat' | 'scroll'; - children: [TableCaption, TableBody, TableFooter] | [TableCaption, TableBody] | [TableBody, TableFooter] | [TableBody]; columnSettings: TableColumnSettings[]; + children: TableChildren; } type CustomCodeComponentAttributes = { [key: string]: string | boolean | undefined; diff --git a/schemas/body-tree.schema.json b/schemas/body-tree.schema.json index e4ed281..c5a65c5 100644 --- a/schemas/body-tree.schema.json +++ b/schemas/body-tree.schema.json @@ -1164,60 +1164,7 @@ "additionalProperties": false, "properties": { "children": { - "anyOf": [ - { - "items": [ - { - "$ref": "#/definitions/ContentTree.transit.TableCaption" - }, - { - "$ref": "#/definitions/ContentTree.transit.TableBody" - }, - { - "$ref": "#/definitions/ContentTree.transit.TableFooter" - } - ], - "maxItems": 3, - "minItems": 3, - "type": "array" - }, - { - "items": [ - { - "$ref": "#/definitions/ContentTree.transit.TableCaption" - }, - { - "$ref": "#/definitions/ContentTree.transit.TableBody" - } - ], - "maxItems": 2, - "minItems": 2, - "type": "array" - }, - { - "items": [ - { - "$ref": "#/definitions/ContentTree.transit.TableBody" - }, - { - "$ref": "#/definitions/ContentTree.transit.TableFooter" - } - ], - "maxItems": 2, - "minItems": 2, - "type": "array" - }, - { - "items": [ - { - "$ref": "#/definitions/ContentTree.transit.TableBody" - } - ], - "maxItems": 1, - "minItems": 1, - "type": "array" - } - ] + "$ref": "#/definitions/ContentTree.transit.TableChildren" }, "collapseAfterHowManyRows": { "type": "number" @@ -1245,7 +1192,6 @@ }, "required": [ "hideOnMobile", - "sortType", "sortable" ], "type": "object" @@ -1358,6 +1304,74 @@ ], "type": "object" }, + "ContentTree.transit.TableChildren": { + "anyOf": [ + { + "items": [ + { + "$ref": "#/definitions/ContentTree.transit.TableCaption" + }, + { + "$ref": "#/definitions/ContentTree.transit.TableBody" + }, + { + "$ref": "#/definitions/ContentTree.transit.TableFooter" + } + ], + "maxItems": 3, + "minItems": 2, + "type": "array" + }, + { + "items": [ + { + "$ref": "#/definitions/ContentTree.transit.TableBody" + }, + { + "$ref": "#/definitions/ContentTree.transit.TableFooter" + } + ], + "maxItems": 2, + "minItems": 1, + "type": "array" + }, + { + "items": [ + { + "$ref": "#/definitions/ContentTree.transit.TableCaption" + }, + { + "$ref": "#/definitions/ContentTree.transit.TableHeader" + }, + { + "$ref": "#/definitions/ContentTree.transit.TableBody" + }, + { + "$ref": "#/definitions/ContentTree.transit.TableFooter" + } + ], + "maxItems": 4, + "minItems": 3, + "type": "array" + }, + { + "items": [ + { + "$ref": "#/definitions/ContentTree.transit.TableHeader" + }, + { + "$ref": "#/definitions/ContentTree.transit.TableBody" + }, + { + "$ref": "#/definitions/ContentTree.transit.TableFooter" + } + ], + "maxItems": 3, + "minItems": 2, + "type": "array" + } + ] + }, "ContentTree.transit.TableFooter": { "additionalProperties": false, "properties": { @@ -1379,6 +1393,27 @@ ], "type": "object" }, + "ContentTree.transit.TableHeader": { + "additionalProperties": false, + "properties": { + "children": { + "items": { + "$ref": "#/definitions/ContentTree.transit.TableRow" + }, + "type": "array" + }, + "data": {}, + "type": { + "const": "table-header", + "type": "string" + } + }, + "required": [ + "children", + "type" + ], + "type": "object" + }, "ContentTree.transit.TableLayoutWidth": { "enum": [ "auto", diff --git a/schemas/content-tree.schema.json b/schemas/content-tree.schema.json index 0f998d8..e1a233a 100644 --- a/schemas/content-tree.schema.json +++ b/schemas/content-tree.schema.json @@ -1984,60 +1984,7 @@ "additionalProperties": false, "properties": { "children": { - "anyOf": [ - { - "items": [ - { - "$ref": "#/definitions/ContentTree.full.TableCaption" - }, - { - "$ref": "#/definitions/ContentTree.full.TableBody" - }, - { - "$ref": "#/definitions/ContentTree.full.TableFooter" - } - ], - "maxItems": 3, - "minItems": 3, - "type": "array" - }, - { - "items": [ - { - "$ref": "#/definitions/ContentTree.full.TableCaption" - }, - { - "$ref": "#/definitions/ContentTree.full.TableBody" - } - ], - "maxItems": 2, - "minItems": 2, - "type": "array" - }, - { - "items": [ - { - "$ref": "#/definitions/ContentTree.full.TableBody" - }, - { - "$ref": "#/definitions/ContentTree.full.TableFooter" - } - ], - "maxItems": 2, - "minItems": 2, - "type": "array" - }, - { - "items": [ - { - "$ref": "#/definitions/ContentTree.full.TableBody" - } - ], - "maxItems": 1, - "minItems": 1, - "type": "array" - } - ] + "$ref": "#/definitions/ContentTree.full.TableChildren" }, "collapseAfterHowManyRows": { "type": "number" @@ -2065,7 +2012,6 @@ }, "required": [ "hideOnMobile", - "sortType", "sortable" ], "type": "object" @@ -2178,6 +2124,74 @@ ], "type": "object" }, + "ContentTree.full.TableChildren": { + "anyOf": [ + { + "items": [ + { + "$ref": "#/definitions/ContentTree.full.TableCaption" + }, + { + "$ref": "#/definitions/ContentTree.full.TableBody" + }, + { + "$ref": "#/definitions/ContentTree.full.TableFooter" + } + ], + "maxItems": 3, + "minItems": 2, + "type": "array" + }, + { + "items": [ + { + "$ref": "#/definitions/ContentTree.full.TableBody" + }, + { + "$ref": "#/definitions/ContentTree.full.TableFooter" + } + ], + "maxItems": 2, + "minItems": 1, + "type": "array" + }, + { + "items": [ + { + "$ref": "#/definitions/ContentTree.full.TableCaption" + }, + { + "$ref": "#/definitions/ContentTree.full.TableHeader" + }, + { + "$ref": "#/definitions/ContentTree.full.TableBody" + }, + { + "$ref": "#/definitions/ContentTree.full.TableFooter" + } + ], + "maxItems": 4, + "minItems": 3, + "type": "array" + }, + { + "items": [ + { + "$ref": "#/definitions/ContentTree.full.TableHeader" + }, + { + "$ref": "#/definitions/ContentTree.full.TableBody" + }, + { + "$ref": "#/definitions/ContentTree.full.TableFooter" + } + ], + "maxItems": 3, + "minItems": 2, + "type": "array" + } + ] + }, "ContentTree.full.TableFooter": { "additionalProperties": false, "properties": { @@ -2199,6 +2213,27 @@ ], "type": "object" }, + "ContentTree.full.TableHeader": { + "additionalProperties": false, + "properties": { + "children": { + "items": { + "$ref": "#/definitions/ContentTree.full.TableRow" + }, + "type": "array" + }, + "data": {}, + "type": { + "const": "table-header", + "type": "string" + } + }, + "required": [ + "children", + "type" + ], + "type": "object" + }, "ContentTree.full.TableLayoutWidth": { "enum": [ "auto", diff --git a/schemas/transit-tree.schema.json b/schemas/transit-tree.schema.json index f719a9c..a95e8a4 100644 --- a/schemas/transit-tree.schema.json +++ b/schemas/transit-tree.schema.json @@ -1189,60 +1189,7 @@ "additionalProperties": false, "properties": { "children": { - "anyOf": [ - { - "items": [ - { - "$ref": "#/definitions/ContentTree.transit.TableCaption" - }, - { - "$ref": "#/definitions/ContentTree.transit.TableBody" - }, - { - "$ref": "#/definitions/ContentTree.transit.TableFooter" - } - ], - "maxItems": 3, - "minItems": 3, - "type": "array" - }, - { - "items": [ - { - "$ref": "#/definitions/ContentTree.transit.TableCaption" - }, - { - "$ref": "#/definitions/ContentTree.transit.TableBody" - } - ], - "maxItems": 2, - "minItems": 2, - "type": "array" - }, - { - "items": [ - { - "$ref": "#/definitions/ContentTree.transit.TableBody" - }, - { - "$ref": "#/definitions/ContentTree.transit.TableFooter" - } - ], - "maxItems": 2, - "minItems": 2, - "type": "array" - }, - { - "items": [ - { - "$ref": "#/definitions/ContentTree.transit.TableBody" - } - ], - "maxItems": 1, - "minItems": 1, - "type": "array" - } - ] + "$ref": "#/definitions/ContentTree.transit.TableChildren" }, "collapseAfterHowManyRows": { "type": "number" @@ -1270,7 +1217,6 @@ }, "required": [ "hideOnMobile", - "sortType", "sortable" ], "type": "object" @@ -1383,6 +1329,74 @@ ], "type": "object" }, + "ContentTree.transit.TableChildren": { + "anyOf": [ + { + "items": [ + { + "$ref": "#/definitions/ContentTree.transit.TableCaption" + }, + { + "$ref": "#/definitions/ContentTree.transit.TableBody" + }, + { + "$ref": "#/definitions/ContentTree.transit.TableFooter" + } + ], + "maxItems": 3, + "minItems": 2, + "type": "array" + }, + { + "items": [ + { + "$ref": "#/definitions/ContentTree.transit.TableBody" + }, + { + "$ref": "#/definitions/ContentTree.transit.TableFooter" + } + ], + "maxItems": 2, + "minItems": 1, + "type": "array" + }, + { + "items": [ + { + "$ref": "#/definitions/ContentTree.transit.TableCaption" + }, + { + "$ref": "#/definitions/ContentTree.transit.TableHeader" + }, + { + "$ref": "#/definitions/ContentTree.transit.TableBody" + }, + { + "$ref": "#/definitions/ContentTree.transit.TableFooter" + } + ], + "maxItems": 4, + "minItems": 3, + "type": "array" + }, + { + "items": [ + { + "$ref": "#/definitions/ContentTree.transit.TableHeader" + }, + { + "$ref": "#/definitions/ContentTree.transit.TableBody" + }, + { + "$ref": "#/definitions/ContentTree.transit.TableFooter" + } + ], + "maxItems": 3, + "minItems": 2, + "type": "array" + } + ] + }, "ContentTree.transit.TableFooter": { "additionalProperties": false, "properties": { @@ -1404,6 +1418,27 @@ ], "type": "object" }, + "ContentTree.transit.TableHeader": { + "additionalProperties": false, + "properties": { + "children": { + "items": { + "$ref": "#/definitions/ContentTree.transit.TableRow" + }, + "type": "array" + }, + "data": {}, + "type": { + "const": "table-header", + "type": "string" + } + }, + "required": [ + "children", + "type" + ], + "type": "object" + }, "ContentTree.transit.TableLayoutWidth": { "enum": [ "auto",