diff --git a/COMPONENT_INDEX.md b/COMPONENT_INDEX.md index 78306b87..2d95134a 100644 --- a/COMPONENT_INDEX.md +++ b/COMPONENT_INDEX.md @@ -926,31 +926,33 @@ None. ### Types ```ts -export type DataTableKey = string; +export type DataTableKey = Exclude; export type DataTableValue = any; -export interface DataTableEmptyHeader { - key: DataTableKey; +export interface DataTableEmptyHeader { + key: DataTableKey; empty: boolean; - display?: (item: DataTableValue, row: DataTableRow) => DataTableValue; + display?: (item: DataTableValue, row: Row) => DataTableValue; sort?: false | ((a: DataTableValue, b: DataTableValue) => number); columnMenu?: boolean; width?: string; minWidth?: string; } -export interface DataTableNonEmptyHeader { - key: DataTableKey; +export interface DataTableNonEmptyHeader { + key: DataTableKey; value: DataTableValue; - display?: (item: DataTableValue, row: DataTableRow) => DataTableValue; + display?: (item: DataTableValue, row: Row) => DataTableValue; sort?: false | ((a: DataTableValue, b: DataTableValue) => number); columnMenu?: boolean; width?: string; minWidth?: string; } -export type DataTableHeader = DataTableNonEmptyHeader | DataTableEmptyHeader; +export type DataTableHeader = + | DataTableNonEmptyHeader + | DataTableEmptyHeader; export interface DataTableRow { id: any; @@ -959,8 +961,8 @@ export interface DataTableRow { export type DataTableRowId = any; -export interface DataTableCell { - key: DataTableKey; +export interface DataTableCell { + key: DataTableKey; value: DataTableValue; display?: (item: DataTableValue, row: DataTableRow) => DataTableValue; } @@ -975,9 +977,9 @@ export interface DataTableCell { | expandedRowIds | No | let | Yes | ReadonlyArray | [] | Specify the row ids to be expanded | | expandable | No | let | Yes | boolean | false | Set to `true` for the expandable variant
Automatically set to `true` if `batchExpansion` is `true` | | sortDirection | No | let | Yes | "none" | "ascending" | "descending" | "none" | Specify the sort direction | -| sortKey | No | let | Yes | DataTableKey | null | Specify the header key to sort by | -| headers | No | let | No | ReadonlyArray | [] | Specify the data table headers | -| rows | No | let | No | ReadonlyArray | [] | Specify the rows the data table should render
keys defined in `headers` are used for the row ids | +| sortKey | No | let | Yes | DataTableKey | null | Specify the header key to sort by | +| headers | No | let | No | ReadonlyArray> | [] | Specify the data table headers | +| rows | No | let | No | ReadonlyArray | [] | Specify the rows the data table should render
keys defined in `headers` are used for the row ids | | size | No | let | No | "compact" | "short" | "medium" | "tall" | undefined | Set the size of the data table | | title | No | let | No | string | "" | Specify the title of the data table | | description | No | let | No | string | "" | Specify the description of the data table | @@ -995,29 +997,29 @@ export interface DataTableCell { ### Slots -| Slot name | Default | Props | Fallback | -| :----------- | :------ | :--------------------------------------------------------------------------------------------- | :----------------------------------------------------------------------- | -| -- | Yes | -- | -- | -| cell | No | { row: DataTableRow; cell: DataTableCell; rowIndex: number; cellIndex: number; } | {cell.display ? cell.display(cell.value, row) : cell.value} | -| cell-header | No | { header: DataTableNonEmptyHeader; } | {header.value} | -| description | No | -- | {description} | -| expanded-row | No | { row: DataTableRow; } | -- | -| title | No | -- | {title} | +| Slot name | Default | Props | Fallback | +| :----------- | :------ | :----------------------------------------------------------------------------------------- | :----------------------------------------------------------------------- | +| -- | Yes | -- | -- | +| cell | No | { row: Row; cell: DataTableCell; rowIndex: number; cellIndex: number; } | {cell.display ? cell.display(cell.value, row) : cell.value} | +| cell-header | No | { header: DataTableNonEmptyHeader; } | {header.value} | +| description | No | -- | {description} | +| expanded-row | No | { row: Row; } | -- | +| title | No | -- | {title} | ### Events -| Event name | Type | Detail | -| :------------------- | :--------- | :------------------------------------------------------------------------------------------------------ | -| click | dispatched | { header?: DataTableHeader; row?: DataTableRow; cell?: DataTableCell; } | -| click:header--expand | dispatched | { expanded: boolean; } | -| click:header | dispatched | { header: DataTableHeader; sortDirection?: "ascending" | "descending" | "none" } | -| click:header--select | dispatched | { indeterminate: boolean; selected: boolean; } | -| click:row | dispatched | DataTableRow | -| mouseenter:row | dispatched | DataTableRow | -| mouseleave:row | dispatched | DataTableRow | -| click:row--expand | dispatched | { expanded: boolean; row: DataTableRow; } | -| click:row--select | dispatched | { selected: boolean; row: DataTableRow; } | -| click:cell | dispatched | DataTableCell | +| Event name | Type | Detail | +| :------------------- | :--------- | :----------------------------------------------------------------------------------------------------------- | +| click | dispatched | { header?: DataTableHeader; row?: Row; cell?: DataTableCell; } | +| click:header--expand | dispatched | { expanded: boolean; } | +| click:header | dispatched | { header: DataTableHeader; sortDirection?: "ascending" | "descending" | "none" } | +| click:header--select | dispatched | { indeterminate: boolean; selected: boolean; } | +| click:row | dispatched | Row | +| mouseenter:row | dispatched | Row | +| mouseleave:row | dispatched | Row | +| click:row--expand | dispatched | { expanded: boolean; row: Row; } | +| click:row--select | dispatched | { selected: boolean; row: Row; } | +| click:cell | dispatched | DataTableCell | ## `DataTableSkeleton` diff --git a/docs/src/COMPONENT_API.json b/docs/src/COMPONENT_API.json index 0f8d88fd..0ea1b3e9 100644 --- a/docs/src/COMPONENT_API.json +++ b/docs/src/COMPONENT_API.json @@ -2381,7 +2381,7 @@ "name": "headers", "kind": "let", "description": "Specify the data table headers", - "type": "ReadonlyArray", + "type": "ReadonlyArray>", "value": "[]", "isFunction": false, "isFunctionDeclaration": false, @@ -2393,7 +2393,7 @@ "name": "rows", "kind": "let", "description": "Specify the rows the data table should render\nkeys defined in `headers` are used for the row ids", - "type": "ReadonlyArray", + "type": "ReadonlyArray", "value": "[]", "isFunction": false, "isFunctionDeclaration": false, @@ -2464,7 +2464,7 @@ "name": "sortKey", "kind": "let", "description": "Specify the header key to sort by", - "type": "DataTableKey", + "type": "DataTableKey", "value": "null", "isFunction": false, "isFunctionDeclaration": false, @@ -2648,7 +2648,7 @@ "name": "cell", "default": false, "fallback": "{cell.display ? cell.display(cell.value, row) : cell.value}", - "slot_props": "{ row: DataTableRow; cell: DataTableCell; rowIndex: number; cellIndex: number; }" + "slot_props": "{ row: Row; cell: DataTableCell; rowIndex: number; cellIndex: number; }" }, { "name": "cell-header", @@ -2665,7 +2665,7 @@ { "name": "expanded-row", "default": false, - "slot_props": "{ row: DataTableRow; }" + "slot_props": "{ row: Row; }" }, { "name": "title", @@ -2678,7 +2678,7 @@ { "type": "dispatched", "name": "click", - "detail": "{ header?: DataTableHeader; row?: DataTableRow; cell?: DataTableCell; }" + "detail": "{ header?: DataTableHeader; row?: Row; cell?: DataTableCell; }" }, { "type": "dispatched", @@ -2688,45 +2688,37 @@ { "type": "dispatched", "name": "click:header", - "detail": "{ header: DataTableHeader; sortDirection?: \"ascending\" | \"descending\" | \"none\" }" + "detail": "{ header: DataTableHeader; sortDirection?: \"ascending\" | \"descending\" | \"none\" }" }, { "type": "dispatched", "name": "click:header--select", "detail": "{ indeterminate: boolean; selected: boolean; }" }, - { "type": "dispatched", "name": "click:row", "detail": "DataTableRow" }, - { - "type": "dispatched", - "name": "mouseenter:row", - "detail": "DataTableRow" - }, - { - "type": "dispatched", - "name": "mouseleave:row", - "detail": "DataTableRow" - }, + { "type": "dispatched", "name": "click:row", "detail": "Row" }, + { "type": "dispatched", "name": "mouseenter:row", "detail": "Row" }, + { "type": "dispatched", "name": "mouseleave:row", "detail": "Row" }, { "type": "dispatched", "name": "click:row--expand", - "detail": "{ expanded: boolean; row: DataTableRow; }" + "detail": "{ expanded: boolean; row: Row; }" }, { "type": "dispatched", "name": "click:row--select", - "detail": "{ selected: boolean; row: DataTableRow; }" + "detail": "{ selected: boolean; row: Row; }" }, { "type": "dispatched", "name": "click:cell", - "detail": "DataTableCell" + "detail": "DataTableCell" } ], "typedefs": [ { - "type": "string", - "name": "DataTableKey", - "ts": "type DataTableKey = string" + "type": "Exclude", + "name": "DataTableKey", + "ts": "type DataTableKey = Exclude" }, { "type": "any", @@ -2734,19 +2726,19 @@ "ts": "type DataTableValue = any" }, { - "type": "{ key: DataTableKey; empty: boolean; display?: (item: DataTableValue, row: DataTableRow) => DataTableValue; sort?: false | ((a: DataTableValue, b: DataTableValue) => number); columnMenu?: boolean; width?: string; minWidth?: string; }", - "name": "DataTableEmptyHeader", - "ts": "interface DataTableEmptyHeader { key: DataTableKey; empty: boolean; display?: (item: DataTableValue, row: DataTableRow) => DataTableValue; sort?: false | ((a: DataTableValue, b: DataTableValue) => number); columnMenu?: boolean; width?: string; minWidth?: string; }" + "type": "{ key: DataTableKey; empty: boolean; display?: (item: DataTableValue, row: Row) => DataTableValue; sort?: false | ((a: DataTableValue, b: DataTableValue) => number); columnMenu?: boolean; width?: string; minWidth?: string; }", + "name": "DataTableEmptyHeader", + "ts": "interface DataTableEmptyHeader { key: DataTableKey; empty: boolean; display?: (item: DataTableValue, row: Row) => DataTableValue; sort?: false | ((a: DataTableValue, b: DataTableValue) => number); columnMenu?: boolean; width?: string; minWidth?: string; }" }, { - "type": "{ key: DataTableKey; value: DataTableValue; display?: (item: DataTableValue, row: DataTableRow) => DataTableValue; sort?: false | ((a: DataTableValue, b: DataTableValue) => number); columnMenu?: boolean; width?: string; minWidth?: string; }", - "name": "DataTableNonEmptyHeader", - "ts": "interface DataTableNonEmptyHeader { key: DataTableKey; value: DataTableValue; display?: (item: DataTableValue, row: DataTableRow) => DataTableValue; sort?: false | ((a: DataTableValue, b: DataTableValue) => number); columnMenu?: boolean; width?: string; minWidth?: string; }" + "type": "{ key: DataTableKey; value: DataTableValue; display?: (item: DataTableValue, row: Row) => DataTableValue; sort?: false | ((a: DataTableValue, b: DataTableValue) => number); columnMenu?: boolean; width?: string; minWidth?: string; }", + "name": "DataTableNonEmptyHeader", + "ts": "interface DataTableNonEmptyHeader { key: DataTableKey; value: DataTableValue; display?: (item: DataTableValue, row: Row) => DataTableValue; sort?: false | ((a: DataTableValue, b: DataTableValue) => number); columnMenu?: boolean; width?: string; minWidth?: string; }" }, { - "type": "DataTableNonEmptyHeader | DataTableEmptyHeader", - "name": "DataTableHeader", - "ts": "type DataTableHeader = DataTableNonEmptyHeader | DataTableEmptyHeader" + "type": "DataTableNonEmptyHeader | DataTableEmptyHeader", + "name": "DataTableHeader", + "ts": "type DataTableHeader = DataTableNonEmptyHeader | DataTableEmptyHeader" }, { "type": "{ id: any; [key: string]: DataTableValue; }", @@ -2759,12 +2751,12 @@ "ts": "type DataTableRowId = any" }, { - "type": "{ key: DataTableKey; value: DataTableValue; display?: (item: DataTableValue, row: DataTableRow) => DataTableValue; }", - "name": "DataTableCell", - "ts": "interface DataTableCell { key: DataTableKey; value: DataTableValue; display?: (item: DataTableValue, row: DataTableRow) => DataTableValue; }" + "type": "{ key: DataTableKey; value: DataTableValue; display?: (item: DataTableValue, row: DataTableRow) => DataTableValue; }", + "name": "DataTableCell", + "ts": "interface DataTableCell { key: DataTableKey; value: DataTableValue; display?: (item: DataTableValue, row: DataTableRow) => DataTableValue; }" } ], - "generics": null, + "generics": ["Row", "Row extends DataTableRow = DataTableRow"], "rest_props": { "type": "Element", "name": "div" } }, { diff --git a/types/DataTable/DataTable.svelte.d.ts b/types/DataTable/DataTable.svelte.d.ts index dc30a09d..f8109317 100644 --- a/types/DataTable/DataTable.svelte.d.ts +++ b/types/DataTable/DataTable.svelte.d.ts @@ -1,33 +1,31 @@ import type { SvelteComponentTyped } from "svelte"; import type { SvelteHTMLElements } from "svelte/elements"; -export type DataTableKey = string; +export type DataTableKey = Exclude; export type DataTableValue = any; -export interface DataTableEmptyHeader { - key: keyof Row; +export interface DataTableEmptyHeader { + key: DataTableKey; empty: boolean; - display?: (item: DataTableValue, row: DataTableRow) => DataTableValue; + display?: (item: DataTableValue, row: Row) => DataTableValue; sort?: false | ((a: DataTableValue, b: DataTableValue) => number); columnMenu?: boolean; width?: string; minWidth?: string; } -export interface DataTableNonEmptyHeader< - Row extends DataTableRow = DataTableRow -> { - key: keyof Row; +export interface DataTableNonEmptyHeader { + key: DataTableKey; value: DataTableValue; - display?: (item: DataTableValue, row: DataTableRow) => DataTableValue; + display?: (item: DataTableValue, row: Row) => DataTableValue; sort?: false | ((a: DataTableValue, b: DataTableValue) => number); columnMenu?: boolean; width?: string; minWidth?: string; } -export type DataTableHeader = +export type DataTableHeader = | DataTableNonEmptyHeader | DataTableEmptyHeader; @@ -38,15 +36,15 @@ export interface DataTableRow { export type DataTableRowId = any; -export interface DataTableCell { - key: keyof Row; +export interface DataTableCell { + key: DataTableKey; value: DataTableValue; display?: (item: DataTableValue, row: DataTableRow) => DataTableValue; } type $RestProps = SvelteHTMLElements["div"]; -type $Props = { +type $Props = { /** * Specify the data table headers * @default [] @@ -94,7 +92,7 @@ type $Props = { * Specify the header key to sort by * @default null */ - sortKey?: DataTableKey; + sortKey?: DataTableKey; /** * Specify the sort direction @@ -185,7 +183,8 @@ type $Props = { [key: `data-${string}`]: any; }; -export type DataTableProps = Omit<$RestProps, keyof $Props> & $Props; +export type DataTableProps = Omit<$RestProps, keyof $Props> & + $Props; export default class DataTable< Row extends DataTableRow = DataTableRow @@ -209,21 +208,15 @@ export default class DataTable< ["click:row"]: CustomEvent; ["mouseenter:row"]: CustomEvent; ["mouseleave:row"]: CustomEvent; - ["click:row--expand"]: CustomEvent<{ - expanded: boolean; - row: Row; - }>; - ["click:row--select"]: CustomEvent<{ - selected: boolean; - row: Row; - }>; - ["click:cell"]: CustomEvent; + ["click:row--expand"]: CustomEvent<{ expanded: boolean; row: Row }>; + ["click:row--select"]: CustomEvent<{ selected: boolean; row: Row }>; + ["click:cell"]: CustomEvent>; }, { default: {}; cell: { - row: DataTableRow; - cell: DataTableCell; + row: Row; + cell: DataTableCell; rowIndex: number; cellIndex: number; };