@justeattakeaway/pie-data-table 0.0.0-snapshot-release-20250818121553 → 0.0.0-snapshot-release-20251010234024
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/custom-elements.json +748 -259
- package/dist/{PieElement-Y2VnHR4y.js → PieElement-DgHPBi0_.js} +1 -1
- package/dist/defs.d.ts +19 -3
- package/dist/defs.d.ts.map +1 -1
- package/dist/index.d.ts +18 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +98 -46
- package/dist/pie-data-table-body/defs-react.d.ts +3 -0
- package/dist/pie-data-table-body/defs-react.d.ts.map +1 -0
- package/dist/pie-data-table-body/defs.d.ts +2 -0
- package/dist/pie-data-table-body/defs.d.ts.map +1 -0
- package/dist/pie-data-table-body/index.d.ts +17 -0
- package/dist/pie-data-table-body/index.d.ts.map +1 -0
- package/dist/pie-data-table-body/index.js +21 -0
- package/dist/pie-data-table-body/react.d.ts +7 -0
- package/dist/pie-data-table-body/react.d.ts.map +1 -0
- package/dist/pie-data-table-body/react.js +13 -0
- package/dist/pie-data-table-cell/defs-react.d.ts +3 -0
- package/dist/pie-data-table-cell/defs-react.d.ts.map +1 -0
- package/dist/pie-data-table-cell/defs.d.ts +14 -0
- package/dist/pie-data-table-cell/defs.d.ts.map +1 -0
- package/dist/pie-data-table-cell/index.d.ts +27 -0
- package/dist/pie-data-table-cell/index.d.ts.map +1 -0
- package/dist/pie-data-table-cell/index.js +39 -0
- package/dist/pie-data-table-cell/react.d.ts +7 -0
- package/dist/pie-data-table-cell/react.d.ts.map +1 -0
- package/dist/pie-data-table-cell/react.js +16 -0
- package/dist/pie-data-table-contents/defs-react.d.ts +3 -0
- package/dist/pie-data-table-contents/defs-react.d.ts.map +1 -0
- package/dist/pie-data-table-contents/defs.d.ts +2 -0
- package/dist/pie-data-table-contents/defs.d.ts.map +1 -0
- package/dist/pie-data-table-contents/index.d.ts +18 -0
- package/dist/pie-data-table-contents/index.d.ts.map +1 -0
- package/dist/pie-data-table-contents/index.js +24 -0
- package/dist/pie-data-table-contents/react.d.ts +7 -0
- package/dist/pie-data-table-contents/react.d.ts.map +1 -0
- package/dist/pie-data-table-contents/react.js +13 -0
- package/dist/pie-data-table-head/defs-react.d.ts +3 -0
- package/dist/pie-data-table-head/defs-react.d.ts.map +1 -0
- package/dist/pie-data-table-head/defs.d.ts +2 -0
- package/dist/pie-data-table-head/defs.d.ts.map +1 -0
- package/dist/pie-data-table-head/index.d.ts +18 -0
- package/dist/pie-data-table-head/index.d.ts.map +1 -0
- package/dist/pie-data-table-head/index.js +24 -0
- package/dist/pie-data-table-head/react.d.ts +7 -0
- package/dist/pie-data-table-head/react.d.ts.map +1 -0
- package/dist/pie-data-table-head/react.js +13 -0
- package/dist/pie-data-table-head-cell/defs-react.d.ts +3 -0
- package/dist/pie-data-table-head-cell/defs-react.d.ts.map +1 -0
- package/dist/pie-data-table-head-cell/defs.d.ts +14 -0
- package/dist/pie-data-table-head-cell/defs.d.ts.map +1 -0
- package/dist/pie-data-table-head-cell/index.d.ts +27 -0
- package/dist/pie-data-table-head-cell/index.d.ts.map +1 -0
- package/dist/pie-data-table-head-cell/index.js +39 -0
- package/dist/pie-data-table-head-cell/react.d.ts +7 -0
- package/dist/pie-data-table-head-cell/react.d.ts.map +1 -0
- package/dist/pie-data-table-head-cell/react.js +16 -0
- package/dist/pie-data-table-header/index.d.ts.map +1 -1
- package/dist/pie-data-table-header/index.js +2 -1
- package/dist/pie-data-table-row/defs-react.d.ts +3 -0
- package/dist/pie-data-table-row/defs-react.d.ts.map +1 -0
- package/dist/pie-data-table-row/defs.d.ts +13 -0
- package/dist/pie-data-table-row/defs.d.ts.map +1 -0
- package/dist/pie-data-table-row/index.d.ts +30 -0
- package/dist/pie-data-table-row/index.d.ts.map +1 -0
- package/dist/pie-data-table-row/index.js +46 -0
- package/dist/pie-data-table-row/react.d.ts +7 -0
- package/dist/pie-data-table-row/react.d.ts.map +1 -0
- package/dist/pie-data-table-row/react.js +15 -0
- package/package.json +7 -4
- package/src/data-table.scss +11 -17
- package/src/defs.ts +24 -6
- package/src/index.ts +83 -12
- package/src/pie-data-table-body/data-table-body.scss +3 -0
- package/src/pie-data-table-body/defs-react.ts +3 -0
- package/src/pie-data-table-body/defs.ts +1 -0
- package/src/pie-data-table-body/index.ts +29 -0
- package/src/pie-data-table-body/react.ts +19 -0
- package/src/pie-data-table-cell/data-table-cell.scss +21 -0
- package/src/pie-data-table-cell/defs-react.ts +3 -0
- package/src/pie-data-table-cell/defs.ts +19 -0
- package/src/pie-data-table-cell/index.ts +61 -0
- package/src/pie-data-table-cell/react.ts +19 -0
- package/src/pie-data-table-contents/data-table-contents.scss +4 -0
- package/src/pie-data-table-contents/defs-react.ts +3 -0
- package/src/pie-data-table-contents/defs.ts +1 -0
- package/src/pie-data-table-contents/index.ts +35 -0
- package/src/pie-data-table-contents/react.ts +19 -0
- package/src/pie-data-table-head/data-table-head.scss +8 -0
- package/src/pie-data-table-head/defs-react.ts +3 -0
- package/src/pie-data-table-head/defs.ts +1 -0
- package/src/pie-data-table-head/index.ts +36 -0
- package/src/pie-data-table-head/react.ts +19 -0
- package/src/pie-data-table-head-cell/data-table-head-cell.scss +21 -0
- package/src/pie-data-table-head-cell/defs-react.ts +3 -0
- package/src/pie-data-table-head-cell/defs.ts +19 -0
- package/src/pie-data-table-head-cell/index.ts +59 -0
- package/src/pie-data-table-head-cell/react.ts +19 -0
- package/src/pie-data-table-header/index.ts +1 -0
- package/src/pie-data-table-row/data-table-row.scss +12 -0
- package/src/pie-data-table-row/defs-react.ts +3 -0
- package/src/pie-data-table-row/defs.ts +17 -0
- package/src/pie-data-table-row/index.ts +77 -0
- package/src/pie-data-table-row/react.ts +19 -0
package/src/index.ts
CHANGED
|
@@ -4,10 +4,19 @@ import { PieElement } from '@justeattakeaway/pie-webc-core/src/internals/PieElem
|
|
|
4
4
|
import { RtlMixin, safeCustomElement } from '@justeattakeaway/pie-webc-core';
|
|
5
5
|
import { classMap } from 'lit/directives/class-map.js';
|
|
6
6
|
|
|
7
|
+
// import '@justeattakeaway/pie-data-table-contents';
|
|
8
|
+
// import '@justeattakeaway/pie-data-table-head';
|
|
9
|
+
// import '@justeattakeaway/pie-data-table-head-cell';
|
|
10
|
+
// import '@justeattakeaway/pie-data-table-body';
|
|
11
|
+
// import '@justeattakeaway/pie-data-table-row';
|
|
12
|
+
// import '@justeattakeaway/pie-data-table-cell';
|
|
13
|
+
|
|
7
14
|
import styles from './data-table.scss?inline';
|
|
8
15
|
import {
|
|
9
16
|
type DataTableProps,
|
|
10
17
|
type Column,
|
|
18
|
+
type DataTableAdditionalRow,
|
|
19
|
+
defaultProps,
|
|
11
20
|
} from './defs';
|
|
12
21
|
|
|
13
22
|
// Valid values available to consumers
|
|
@@ -32,6 +41,27 @@ export class PieDataTable extends RtlMixin(PieElement) implements DataTableProps
|
|
|
32
41
|
@property({ type: Array })
|
|
33
42
|
public data: Record<string, unknown>[] = [];
|
|
34
43
|
|
|
44
|
+
/**
|
|
45
|
+
* Arbitrary additional rows to display at the bottom of the table
|
|
46
|
+
*/
|
|
47
|
+
@property({ type: Array })
|
|
48
|
+
public additionalRows?: DataTableAdditionalRow[] = defaultProps.additionalRows;
|
|
49
|
+
|
|
50
|
+
/**
|
|
51
|
+
* Maps text alignment values to corresponding CSS classes
|
|
52
|
+
*
|
|
53
|
+
* @param prefix - The prefix for the CSS class
|
|
54
|
+
* @param textAlign - The text alignment value
|
|
55
|
+
* @returns An object with CSS classes as keys and boolean values indicating whether the class should be applied
|
|
56
|
+
*/
|
|
57
|
+
private mapTextAlignClasses (prefix: string, textAlign?: string) {
|
|
58
|
+
return {
|
|
59
|
+
[`${prefix}-text-align--left`]: textAlign === 'left',
|
|
60
|
+
[`${prefix}-text-align--right`]: textAlign === 'right',
|
|
61
|
+
[`${prefix}-text-align--center`]: textAlign === 'center',
|
|
62
|
+
};
|
|
63
|
+
}
|
|
64
|
+
|
|
35
65
|
/**
|
|
36
66
|
* Renders a header cell for the table
|
|
37
67
|
* @param column - The column definition to render
|
|
@@ -40,14 +70,12 @@ export class PieDataTable extends RtlMixin(PieElement) implements DataTableProps
|
|
|
40
70
|
const { width, heading, textAlign } = column;
|
|
41
71
|
const style = width ? `width: ${width}` : nothing;
|
|
42
72
|
const classes = {
|
|
43
|
-
'c-data-table-
|
|
44
|
-
'c-data-table-
|
|
45
|
-
'c-data-table-header-text-align--right': textAlign === 'right',
|
|
46
|
-
'c-data-table-header-text-align--center': textAlign === 'center',
|
|
73
|
+
'c-data-table-head-cell': true,
|
|
74
|
+
...this.mapTextAlignClasses('c-data-table-head-cell', textAlign),
|
|
47
75
|
};
|
|
48
76
|
|
|
49
77
|
return html`
|
|
50
|
-
<th style="${style}" class="${classMap(classes)}">
|
|
78
|
+
<th style="${String(style)}" class="${classMap(classes)}">
|
|
51
79
|
${heading}
|
|
52
80
|
</th>
|
|
53
81
|
`;
|
|
@@ -74,9 +102,7 @@ export class PieDataTable extends RtlMixin(PieElement) implements DataTableProps
|
|
|
74
102
|
private renderTableCell (column: Column, row: Record<string, unknown>) {
|
|
75
103
|
const classes = {
|
|
76
104
|
'c-data-table-cell': true,
|
|
77
|
-
'c-data-table-cell
|
|
78
|
-
'c-data-table-cell-text-align--right': column.textAlign === 'right',
|
|
79
|
-
'c-data-table-cell-text-align--center': column.textAlign === 'center',
|
|
105
|
+
...this.mapTextAlignClasses('c-data-table-cell', column.textAlign),
|
|
80
106
|
};
|
|
81
107
|
|
|
82
108
|
return html`
|
|
@@ -101,6 +127,54 @@ export class PieDataTable extends RtlMixin(PieElement) implements DataTableProps
|
|
|
101
127
|
`;
|
|
102
128
|
}
|
|
103
129
|
|
|
130
|
+
/**
|
|
131
|
+
* Renders the additional rows for the table
|
|
132
|
+
*/
|
|
133
|
+
private renderAdditionalRows () {
|
|
134
|
+
/* eslint-disable indent */
|
|
135
|
+
return html`
|
|
136
|
+
<tfoot>
|
|
137
|
+
${this.additionalRows && this.additionalRows.length > 0 && this.additionalRows.map((row) => {
|
|
138
|
+
const rowClasses = {
|
|
139
|
+
'c-data-table-row': true,
|
|
140
|
+
'c-data-table-row--hidden': !!row.hideRow,
|
|
141
|
+
};
|
|
142
|
+
return html`
|
|
143
|
+
<tr class="${classMap(rowClasses)}">
|
|
144
|
+
${row.cells.map((cell) => {
|
|
145
|
+
const cellClasses = {
|
|
146
|
+
'c-data-table-cell': true,
|
|
147
|
+
'c-data-table-cell--hidden': !!cell.hideCell,
|
|
148
|
+
...this.mapTextAlignClasses('c-data-table-cell', cell.textAlign),
|
|
149
|
+
};
|
|
150
|
+
|
|
151
|
+
return html`
|
|
152
|
+
<td
|
|
153
|
+
class="${classMap(cellClasses)}"
|
|
154
|
+
colspan=${cell.colSpan || 1}
|
|
155
|
+
>
|
|
156
|
+
${cell.content}
|
|
157
|
+
</td>
|
|
158
|
+
`;
|
|
159
|
+
})}
|
|
160
|
+
</tr>
|
|
161
|
+
`;
|
|
162
|
+
})}
|
|
163
|
+
</tfoot>
|
|
164
|
+
`;
|
|
165
|
+
/* eslint-enable indent */
|
|
166
|
+
}
|
|
167
|
+
|
|
168
|
+
private renderHTMLTable () {
|
|
169
|
+
return html`
|
|
170
|
+
<table>
|
|
171
|
+
${this.columns.length > 0 ? this.renderTableHeader() : nothing}
|
|
172
|
+
${this.data.length > 0 ? this.renderTableRows() : nothing}
|
|
173
|
+
${this.additionalRows && this.additionalRows.length > 0 ? this.renderAdditionalRows() : nothing}
|
|
174
|
+
</table>
|
|
175
|
+
`;
|
|
176
|
+
}
|
|
177
|
+
|
|
104
178
|
render () {
|
|
105
179
|
const classes = {
|
|
106
180
|
'c-data-table': true,
|
|
@@ -109,10 +183,7 @@ export class PieDataTable extends RtlMixin(PieElement) implements DataTableProps
|
|
|
109
183
|
return html`
|
|
110
184
|
<div class="${classMap(classes)}">
|
|
111
185
|
<slot name="table-header"></slot>
|
|
112
|
-
|
|
113
|
-
${this.columns.length > 0 ? this.renderTableHeader() : nothing}
|
|
114
|
-
${this.data.length > 0 ? this.renderTableRows() : nothing}
|
|
115
|
-
</table>
|
|
186
|
+
${this.data.length > 0 && this.columns.length > 0 ? this.renderHTMLTable() : html`<slot></slot>`}
|
|
116
187
|
</div>
|
|
117
188
|
`;
|
|
118
189
|
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export type DataTableBodyProps = Partial<HTMLTableSectionElement>;
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { html, unsafeCSS } from 'lit';
|
|
2
|
+
import { PieElement } from '@justeattakeaway/pie-webc-core/src/internals/PieElement';
|
|
3
|
+
import { safeCustomElement } from '@justeattakeaway/pie-webc-core';
|
|
4
|
+
|
|
5
|
+
import styles from './data-table-body.scss?inline';
|
|
6
|
+
import { type DataTableBodyProps } from './defs';
|
|
7
|
+
|
|
8
|
+
export * from './defs';
|
|
9
|
+
|
|
10
|
+
const componentSelector = 'pie-data-table-body';
|
|
11
|
+
|
|
12
|
+
/**
|
|
13
|
+
* @tagname pie-data-table-body
|
|
14
|
+
*/
|
|
15
|
+
@safeCustomElement('pie-data-table-body')
|
|
16
|
+
export class PieDataTableBody extends PieElement implements DataTableBodyProps {
|
|
17
|
+
render () {
|
|
18
|
+
return html`<slot></slot>`;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
// Renders a `CSSResult` generated from SCSS by Vite
|
|
22
|
+
static styles = unsafeCSS(styles);
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
declare global {
|
|
26
|
+
interface HTMLElementTagNameMap {
|
|
27
|
+
[componentSelector]: PieDataTableBody;
|
|
28
|
+
}
|
|
29
|
+
}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import * as React from 'react';
|
|
2
|
+
import { createComponent } from '@lit/react';
|
|
3
|
+
import { PieDataTableBody as PieDataTableBodyLit } from './index';
|
|
4
|
+
import { type DataTableBodyProps } from './defs';
|
|
5
|
+
|
|
6
|
+
export * from './defs';
|
|
7
|
+
|
|
8
|
+
const PieDataTableBodyReact = createComponent({
|
|
9
|
+
displayName: 'PieDataTableBody',
|
|
10
|
+
elementClass: PieDataTableBodyLit,
|
|
11
|
+
react: React,
|
|
12
|
+
tagName: 'pie-data-table-body',
|
|
13
|
+
events: {},
|
|
14
|
+
});
|
|
15
|
+
|
|
16
|
+
type ReactBaseType = React.HTMLAttributes<HTMLElement>
|
|
17
|
+
|
|
18
|
+
export const PieDataTableBody = PieDataTableBodyReact as React.ForwardRefExoticComponent<React.PropsWithoutRef<DataTableBodyProps>
|
|
19
|
+
& React.RefAttributes<PieDataTableBodyLit> & ReactBaseType>;
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
:host {
|
|
2
|
+
padding: var(--dt-spacing-d);
|
|
3
|
+
border-bottom: 1px solid var(--data-table-border-color);
|
|
4
|
+
display: table-cell;
|
|
5
|
+
}
|
|
6
|
+
|
|
7
|
+
:host([textAlign="right"]) {
|
|
8
|
+
text-align: right;
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
:host([textAlign="center"]) {
|
|
12
|
+
text-align: center;
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
:host([textAlign="left"]) {
|
|
16
|
+
text-align: left;
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
:host([isHidden]) {
|
|
20
|
+
display: none;
|
|
21
|
+
}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { type ComponentDefaultProps } from '@justeattakeaway/pie-webc-core';
|
|
2
|
+
|
|
3
|
+
export const dataTableCellTextAlign = ['left', 'right', 'center'] as const;
|
|
4
|
+
|
|
5
|
+
export interface DataTableCellProps {
|
|
6
|
+
/**
|
|
7
|
+
* Text alignment for the cell content
|
|
8
|
+
*/
|
|
9
|
+
textAlign?: typeof dataTableCellTextAlign[number];
|
|
10
|
+
/**
|
|
11
|
+
* Whether the cell is hidden
|
|
12
|
+
*/
|
|
13
|
+
isHidden?: boolean;
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
export const defaultProps: ComponentDefaultProps<DataTableCellProps, 'textAlign' | 'isHidden'> = {
|
|
17
|
+
textAlign: 'left',
|
|
18
|
+
isHidden: false,
|
|
19
|
+
};
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
import { html, nothing, unsafeCSS } from 'lit';
|
|
2
|
+
import { property } from 'lit/decorators.js';
|
|
3
|
+
import { PieElement } from '@justeattakeaway/pie-webc-core/src/internals/PieElement';
|
|
4
|
+
import { safeCustomElement, validPropertyValues } from '@justeattakeaway/pie-webc-core';
|
|
5
|
+
|
|
6
|
+
import styles from './data-table-cell.scss?inline';
|
|
7
|
+
import {
|
|
8
|
+
type DataTableCellProps,
|
|
9
|
+
dataTableCellTextAlign,
|
|
10
|
+
defaultProps,
|
|
11
|
+
} from './defs';
|
|
12
|
+
|
|
13
|
+
export * from './defs';
|
|
14
|
+
|
|
15
|
+
const componentSelector = 'pie-data-table-cell';
|
|
16
|
+
|
|
17
|
+
/**
|
|
18
|
+
* @tagname pie-data-table-cell
|
|
19
|
+
*/
|
|
20
|
+
@safeCustomElement('pie-data-table-cell')
|
|
21
|
+
export class PieDataTableCell extends PieElement implements DataTableCellProps {
|
|
22
|
+
/**
|
|
23
|
+
* Text alignment for the cell content
|
|
24
|
+
*/
|
|
25
|
+
@property({ type: String })
|
|
26
|
+
@validPropertyValues(componentSelector, dataTableCellTextAlign, defaultProps.textAlign)
|
|
27
|
+
public textAlign?: DataTableCellProps['textAlign'];
|
|
28
|
+
|
|
29
|
+
/**
|
|
30
|
+
* Whether the cell is hidden
|
|
31
|
+
*/
|
|
32
|
+
@property({ type: Boolean })
|
|
33
|
+
public isHidden?: DataTableCellProps['isHidden'];
|
|
34
|
+
|
|
35
|
+
connectedCallback () {
|
|
36
|
+
if (!this.hasAttribute('role')) {
|
|
37
|
+
this.setAttribute('role', 'cell');
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
super.connectedCallback();
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
render () {
|
|
44
|
+
const { isHidden } = this;
|
|
45
|
+
|
|
46
|
+
if (isHidden) {
|
|
47
|
+
return nothing;
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
return html`<slot></slot>`;
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
// Renders a `CSSResult` generated from SCSS by Vite
|
|
54
|
+
static styles = unsafeCSS(styles);
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
declare global {
|
|
58
|
+
interface HTMLElementTagNameMap {
|
|
59
|
+
[componentSelector]: PieDataTableCell;
|
|
60
|
+
}
|
|
61
|
+
}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import * as React from 'react';
|
|
2
|
+
import { createComponent } from '@lit/react';
|
|
3
|
+
import { PieDataTableCell as PieDataTableCellLit } from './index';
|
|
4
|
+
import { type DataTableCellProps } from './defs';
|
|
5
|
+
|
|
6
|
+
export * from './defs';
|
|
7
|
+
|
|
8
|
+
const PieDataTableCellReact = createComponent({
|
|
9
|
+
displayName: 'PieDataTableCell',
|
|
10
|
+
elementClass: PieDataTableCellLit,
|
|
11
|
+
react: React,
|
|
12
|
+
tagName: 'pie-data-table-cell',
|
|
13
|
+
events: {},
|
|
14
|
+
});
|
|
15
|
+
|
|
16
|
+
type ReactBaseType = React.HTMLAttributes<HTMLElement>
|
|
17
|
+
|
|
18
|
+
export const PieDataTableCell = PieDataTableCellReact as React.ForwardRefExoticComponent<React.PropsWithoutRef<DataTableCellProps>
|
|
19
|
+
& React.RefAttributes<PieDataTableCellLit> & ReactBaseType>;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export type DataTableContentsProps = Partial<HTMLTableElement>;
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { html, unsafeCSS } from 'lit';
|
|
2
|
+
import { PieElement } from '@justeattakeaway/pie-webc-core/src/internals/PieElement';
|
|
3
|
+
import { safeCustomElement } from '@justeattakeaway/pie-webc-core';
|
|
4
|
+
|
|
5
|
+
import styles from './data-table-contents.scss?inline';
|
|
6
|
+
import { type DataTableContentsProps } from './defs';
|
|
7
|
+
|
|
8
|
+
export * from './defs';
|
|
9
|
+
|
|
10
|
+
const componentSelector = 'pie-data-table-contents';
|
|
11
|
+
|
|
12
|
+
/**
|
|
13
|
+
* @tagname pie-data-table-contents
|
|
14
|
+
*/
|
|
15
|
+
@safeCustomElement('pie-data-table-contents')
|
|
16
|
+
export class PieDataTableContents extends PieElement implements DataTableContentsProps {
|
|
17
|
+
connectedCallback () {
|
|
18
|
+
if (!this.hasAttribute('role')) {
|
|
19
|
+
this.setAttribute('role', 'table');
|
|
20
|
+
}
|
|
21
|
+
super.connectedCallback();
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
render () {
|
|
25
|
+
return html`<slot></slot>`;
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
static styles = unsafeCSS(styles);
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
declare global {
|
|
32
|
+
interface HTMLElementTagNameMap {
|
|
33
|
+
[componentSelector]: PieDataTableContents;
|
|
34
|
+
}
|
|
35
|
+
}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import * as React from 'react';
|
|
2
|
+
import { createComponent } from '@lit/react';
|
|
3
|
+
import { PieDataTableContents as PieDataTableContentsLit } from './index';
|
|
4
|
+
import { type DataTableContentsProps } from './defs';
|
|
5
|
+
|
|
6
|
+
export * from './defs';
|
|
7
|
+
|
|
8
|
+
const PieDataTableContentsReact = createComponent({
|
|
9
|
+
displayName: 'PieDataTableContents',
|
|
10
|
+
elementClass: PieDataTableContentsLit,
|
|
11
|
+
react: React,
|
|
12
|
+
tagName: 'pie-data-table-contents',
|
|
13
|
+
events: {},
|
|
14
|
+
});
|
|
15
|
+
|
|
16
|
+
type ReactBaseType = React.HTMLAttributes<HTMLElement>
|
|
17
|
+
|
|
18
|
+
export const PieDataTableContents = PieDataTableContentsReact as React.ForwardRefExoticComponent<React.PropsWithoutRef<DataTableContentsProps>
|
|
19
|
+
& React.RefAttributes<PieDataTableContentsLit> & ReactBaseType>;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export type DataTableHeadProps = Partial<HTMLTableSectionElement>;
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { html, unsafeCSS } from 'lit';
|
|
2
|
+
import { PieElement } from '@justeattakeaway/pie-webc-core/src/internals/PieElement';
|
|
3
|
+
import { safeCustomElement } from '@justeattakeaway/pie-webc-core';
|
|
4
|
+
|
|
5
|
+
import styles from './data-table-head.scss?inline';
|
|
6
|
+
import { type DataTableHeadProps } from './defs';
|
|
7
|
+
|
|
8
|
+
export * from './defs';
|
|
9
|
+
|
|
10
|
+
const componentSelector = 'pie-data-table-head';
|
|
11
|
+
|
|
12
|
+
/**
|
|
13
|
+
* @tagname pie-data-table-head
|
|
14
|
+
*/
|
|
15
|
+
@safeCustomElement('pie-data-table-head')
|
|
16
|
+
export class PieDataTableHead extends PieElement implements DataTableHeadProps {
|
|
17
|
+
connectedCallback () {
|
|
18
|
+
if (!this.hasAttribute('role')) {
|
|
19
|
+
this.setAttribute('role', 'rowgroup');
|
|
20
|
+
}
|
|
21
|
+
super.connectedCallback();
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
render () {
|
|
25
|
+
return html`<slot></slot>`;
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
static styles = unsafeCSS(styles);
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
declare global {
|
|
32
|
+
interface HTMLElementTagNameMap {
|
|
33
|
+
[componentSelector]: PieDataTableHead;
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import * as React from 'react';
|
|
2
|
+
import { createComponent } from '@lit/react';
|
|
3
|
+
import { PieDataTableHead as PieDataTableHeadLit } from './index';
|
|
4
|
+
import { type DataTableHeadProps } from './defs';
|
|
5
|
+
|
|
6
|
+
export * from './defs';
|
|
7
|
+
|
|
8
|
+
const PieDataTableHeadReact = createComponent({
|
|
9
|
+
displayName: 'PieDataTableHead',
|
|
10
|
+
elementClass: PieDataTableHeadLit,
|
|
11
|
+
react: React,
|
|
12
|
+
tagName: 'pie-data-table-head',
|
|
13
|
+
events: {},
|
|
14
|
+
});
|
|
15
|
+
|
|
16
|
+
type ReactBaseType = React.HTMLAttributes<HTMLElement>
|
|
17
|
+
|
|
18
|
+
export const PieDataTableHead = PieDataTableHeadReact as React.ForwardRefExoticComponent<React.PropsWithoutRef<DataTableHeadProps>
|
|
19
|
+
& React.RefAttributes<PieDataTableHeadLit> & ReactBaseType>;
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
:host {
|
|
2
|
+
padding: var(--dt-spacing-d);
|
|
3
|
+
border-bottom: 1px solid var(--data-table-border-color);
|
|
4
|
+
display: table-cell;
|
|
5
|
+
}
|
|
6
|
+
|
|
7
|
+
:host([textAlign="right"]) {
|
|
8
|
+
text-align: right;
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
:host([textAlign="center"]) {
|
|
12
|
+
text-align: center;
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
:host([textAlign="left"]) {
|
|
16
|
+
text-align: left;
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
:host([isHidden]) {
|
|
20
|
+
display: none;
|
|
21
|
+
}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { type ComponentDefaultProps } from '@justeattakeaway/pie-webc-core';
|
|
2
|
+
|
|
3
|
+
export const dataTableHeadCellTextAlign = ['left', 'right', 'center'] as const;
|
|
4
|
+
|
|
5
|
+
export interface DataTableHeadCellProps {
|
|
6
|
+
/**
|
|
7
|
+
* Text alignment for the cell content
|
|
8
|
+
*/
|
|
9
|
+
textAlign?: typeof dataTableHeadCellTextAlign[number];
|
|
10
|
+
/**
|
|
11
|
+
* Whether the cell is hidden
|
|
12
|
+
*/
|
|
13
|
+
isHidden?: boolean;
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
export const defaultProps: ComponentDefaultProps<DataTableHeadCellProps, 'textAlign' | 'isHidden'> = {
|
|
17
|
+
textAlign: 'left',
|
|
18
|
+
isHidden: false,
|
|
19
|
+
};
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
import { html, nothing, unsafeCSS } from 'lit';
|
|
2
|
+
import { property } from 'lit/decorators.js';
|
|
3
|
+
import { PieElement } from '@justeattakeaway/pie-webc-core/src/internals/PieElement';
|
|
4
|
+
import { safeCustomElement, validPropertyValues } from '@justeattakeaway/pie-webc-core';
|
|
5
|
+
|
|
6
|
+
import styles from './data-table-head-cell.scss?inline';
|
|
7
|
+
import {
|
|
8
|
+
type DataTableHeadCellProps,
|
|
9
|
+
dataTableHeadCellTextAlign,
|
|
10
|
+
defaultProps,
|
|
11
|
+
} from './defs';
|
|
12
|
+
|
|
13
|
+
export * from './defs';
|
|
14
|
+
|
|
15
|
+
const componentSelector = 'pie-data-table-head-cell';
|
|
16
|
+
|
|
17
|
+
/**
|
|
18
|
+
* @tagname pie-data-table-head-cell
|
|
19
|
+
*/
|
|
20
|
+
@safeCustomElement('pie-data-table-head-cell')
|
|
21
|
+
export class PieDataTableHeadCell extends PieElement implements DataTableHeadCellProps {
|
|
22
|
+
/**
|
|
23
|
+
* Text alignment for the cell content
|
|
24
|
+
*/
|
|
25
|
+
@property({ type: String })
|
|
26
|
+
@validPropertyValues(componentSelector, dataTableHeadCellTextAlign, defaultProps.textAlign)
|
|
27
|
+
public textAlign?: DataTableHeadCellProps['textAlign'];
|
|
28
|
+
|
|
29
|
+
/**
|
|
30
|
+
* Whether the cell is hidden
|
|
31
|
+
*/
|
|
32
|
+
@property({ type: Boolean })
|
|
33
|
+
public isHidden?: DataTableHeadCellProps['isHidden'];
|
|
34
|
+
|
|
35
|
+
connectedCallback () {
|
|
36
|
+
if (!this.hasAttribute('role')) {
|
|
37
|
+
this.setAttribute('role', 'columnheader');
|
|
38
|
+
}
|
|
39
|
+
super.connectedCallback();
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
render () {
|
|
43
|
+
const { isHidden } = this;
|
|
44
|
+
|
|
45
|
+
if (isHidden) {
|
|
46
|
+
return nothing;
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
return html`<slot></slot>`;
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
static styles = unsafeCSS(styles);
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
declare global {
|
|
56
|
+
interface HTMLElementTagNameMap {
|
|
57
|
+
[componentSelector]: PieDataTableHeadCell;
|
|
58
|
+
}
|
|
59
|
+
}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import * as React from 'react';
|
|
2
|
+
import { createComponent } from '@lit/react';
|
|
3
|
+
import { PieDataTableHeadCell as PieDataTableHeadCellLit } from './index';
|
|
4
|
+
import { type DataTableHeadCellProps } from './defs';
|
|
5
|
+
|
|
6
|
+
export * from './defs';
|
|
7
|
+
|
|
8
|
+
const PieDataTableHeadCellReact = createComponent({
|
|
9
|
+
displayName: 'PieDataTableHeadCell',
|
|
10
|
+
elementClass: PieDataTableHeadCellLit,
|
|
11
|
+
react: React,
|
|
12
|
+
tagName: 'pie-data-table-head-cell',
|
|
13
|
+
events: {},
|
|
14
|
+
});
|
|
15
|
+
|
|
16
|
+
type ReactBaseType = React.HTMLAttributes<HTMLElement>
|
|
17
|
+
|
|
18
|
+
export const PieDataTableHeadCell = PieDataTableHeadCellReact as React.ForwardRefExoticComponent<React.PropsWithoutRef<DataTableHeadCellProps>
|
|
19
|
+
& React.RefAttributes<PieDataTableHeadCellLit> & ReactBaseType>;
|
|
@@ -76,6 +76,7 @@ export class PieDataTableHeader extends PieElement implements DataTableHeaderPro
|
|
|
76
76
|
<header class="${classMap(classes)}">
|
|
77
77
|
<div class="c-data-table-header-title-wrapper">
|
|
78
78
|
${title ? html`<span class="c-data-table-header-title">${title}</span>` : nothing}
|
|
79
|
+
|
|
79
80
|
${subtitle ? html`<span class="c-data-table-header-subtitle">${subtitle}</span>` : nothing}
|
|
80
81
|
</div>
|
|
81
82
|
${this.hasActionButtons ? html`
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
:host {
|
|
2
|
+
display: table-row;
|
|
3
|
+
border-bottom: 1px solid var(--data-table-border-color);
|
|
4
|
+
|
|
5
|
+
::slotted(pie-data-table-cell) {
|
|
6
|
+
background-color: var(--data-table-background-hover-or-active, transparent);
|
|
7
|
+
}
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
:host([isSelected]) {
|
|
11
|
+
background-color: var(--dt-color-container-subtle);
|
|
12
|
+
}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { type ComponentDefaultProps } from '@justeattakeaway/pie-webc-core';
|
|
2
|
+
|
|
3
|
+
export interface DataTableRowProps extends Partial<HTMLTableRowElement> {
|
|
4
|
+
/**
|
|
5
|
+
* Whether the row is currently selected
|
|
6
|
+
*/
|
|
7
|
+
isSelected?: boolean;
|
|
8
|
+
/**
|
|
9
|
+
* Whether the row is hidden
|
|
10
|
+
*/
|
|
11
|
+
isHidden?: boolean;
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
export const defaultProps: ComponentDefaultProps<DataTableRowProps, 'isSelected' | 'isHidden'> = {
|
|
15
|
+
isSelected: false,
|
|
16
|
+
isHidden: false,
|
|
17
|
+
};
|