@justeattakeaway/pie-data-table 0.0.0-snapshot-release-20251014131309 → 0.0.0-snapshot-release-20251111101641
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 +3 -714
- package/dist/index.d.ts +20 -62
- package/dist/index.js +20 -152
- package/dist/react.d.ts +25 -7
- package/dist/react.js +2 -4
- package/package.json +3 -3
- package/src/data-table.scss +2 -61
- package/src/defs.ts +3 -60
- package/src/index.ts +3 -172
- package/dist/PieElement-DgHPBi0_.js +0 -11
- package/dist/defs-react.d.ts +0 -9
- package/dist/defs-react.d.ts.map +0 -1
- package/dist/defs.d.ts +0 -51
- package/dist/defs.d.ts.map +0 -1
- package/dist/index.d.ts.map +0 -1
- package/dist/pie-data-table-body/defs-react.d.ts +0 -3
- package/dist/pie-data-table-body/defs-react.d.ts.map +0 -1
- package/dist/pie-data-table-body/defs.d.ts +0 -2
- package/dist/pie-data-table-body/defs.d.ts.map +0 -1
- package/dist/pie-data-table-body/index.d.ts +0 -17
- package/dist/pie-data-table-body/index.d.ts.map +0 -1
- package/dist/pie-data-table-body/index.js +0 -21
- package/dist/pie-data-table-body/react.d.ts +0 -7
- package/dist/pie-data-table-body/react.d.ts.map +0 -1
- package/dist/pie-data-table-body/react.js +0 -13
- package/dist/pie-data-table-cell/defs-react.d.ts +0 -3
- package/dist/pie-data-table-cell/defs-react.d.ts.map +0 -1
- package/dist/pie-data-table-cell/defs.d.ts +0 -14
- package/dist/pie-data-table-cell/defs.d.ts.map +0 -1
- package/dist/pie-data-table-cell/index.d.ts +0 -27
- package/dist/pie-data-table-cell/index.d.ts.map +0 -1
- package/dist/pie-data-table-cell/index.js +0 -39
- package/dist/pie-data-table-cell/react.d.ts +0 -7
- package/dist/pie-data-table-cell/react.d.ts.map +0 -1
- package/dist/pie-data-table-cell/react.js +0 -16
- package/dist/pie-data-table-contents/defs-react.d.ts +0 -3
- package/dist/pie-data-table-contents/defs-react.d.ts.map +0 -1
- package/dist/pie-data-table-contents/defs.d.ts +0 -2
- package/dist/pie-data-table-contents/defs.d.ts.map +0 -1
- package/dist/pie-data-table-contents/index.d.ts +0 -18
- package/dist/pie-data-table-contents/index.d.ts.map +0 -1
- package/dist/pie-data-table-contents/index.js +0 -24
- package/dist/pie-data-table-contents/react.d.ts +0 -7
- package/dist/pie-data-table-contents/react.d.ts.map +0 -1
- package/dist/pie-data-table-contents/react.js +0 -13
- package/dist/pie-data-table-head/defs-react.d.ts +0 -3
- package/dist/pie-data-table-head/defs-react.d.ts.map +0 -1
- package/dist/pie-data-table-head/defs.d.ts +0 -2
- package/dist/pie-data-table-head/defs.d.ts.map +0 -1
- package/dist/pie-data-table-head/index.d.ts +0 -18
- package/dist/pie-data-table-head/index.d.ts.map +0 -1
- package/dist/pie-data-table-head/index.js +0 -24
- package/dist/pie-data-table-head/react.d.ts +0 -7
- package/dist/pie-data-table-head/react.d.ts.map +0 -1
- package/dist/pie-data-table-head/react.js +0 -13
- package/dist/pie-data-table-head-cell/defs-react.d.ts +0 -3
- package/dist/pie-data-table-head-cell/defs-react.d.ts.map +0 -1
- package/dist/pie-data-table-head-cell/defs.d.ts +0 -14
- package/dist/pie-data-table-head-cell/defs.d.ts.map +0 -1
- package/dist/pie-data-table-head-cell/index.d.ts +0 -27
- package/dist/pie-data-table-head-cell/index.d.ts.map +0 -1
- package/dist/pie-data-table-head-cell/index.js +0 -39
- package/dist/pie-data-table-head-cell/react.d.ts +0 -7
- package/dist/pie-data-table-head-cell/react.d.ts.map +0 -1
- package/dist/pie-data-table-head-cell/react.js +0 -16
- package/dist/pie-data-table-header/defs-react.d.ts +0 -9
- package/dist/pie-data-table-header/defs-react.d.ts.map +0 -1
- package/dist/pie-data-table-header/defs.d.ts +0 -18
- package/dist/pie-data-table-header/defs.d.ts.map +0 -1
- package/dist/pie-data-table-header/index.d.ts +0 -40
- package/dist/pie-data-table-header/index.d.ts.map +0 -1
- package/dist/pie-data-table-header/index.js +0 -80
- package/dist/pie-data-table-header/react.d.ts +0 -7
- package/dist/pie-data-table-header/react.d.ts.map +0 -1
- package/dist/pie-data-table-header/react.js +0 -16
- package/dist/pie-data-table-row/defs-react.d.ts +0 -3
- package/dist/pie-data-table-row/defs-react.d.ts.map +0 -1
- package/dist/pie-data-table-row/defs.d.ts +0 -13
- package/dist/pie-data-table-row/defs.d.ts.map +0 -1
- package/dist/pie-data-table-row/index.d.ts +0 -30
- package/dist/pie-data-table-row/index.d.ts.map +0 -1
- package/dist/pie-data-table-row/index.js +0 -46
- package/dist/pie-data-table-row/react.d.ts +0 -7
- package/dist/pie-data-table-row/react.d.ts.map +0 -1
- package/dist/pie-data-table-row/react.js +0 -15
- package/dist/react.d.ts.map +0 -1
- package/src/pie-data-table-body/data-table-body.scss +0 -3
- package/src/pie-data-table-body/defs-react.ts +0 -3
- package/src/pie-data-table-body/defs.ts +0 -1
- package/src/pie-data-table-body/index.ts +0 -29
- package/src/pie-data-table-body/react.ts +0 -19
- package/src/pie-data-table-cell/data-table-cell.scss +0 -21
- package/src/pie-data-table-cell/defs-react.ts +0 -3
- package/src/pie-data-table-cell/defs.ts +0 -19
- package/src/pie-data-table-cell/index.ts +0 -61
- package/src/pie-data-table-cell/react.ts +0 -19
- package/src/pie-data-table-contents/data-table-contents.scss +0 -4
- package/src/pie-data-table-contents/defs-react.ts +0 -3
- package/src/pie-data-table-contents/defs.ts +0 -1
- package/src/pie-data-table-contents/index.ts +0 -35
- package/src/pie-data-table-contents/react.ts +0 -19
- package/src/pie-data-table-head/data-table-head.scss +0 -8
- package/src/pie-data-table-head/defs-react.ts +0 -3
- package/src/pie-data-table-head/defs.ts +0 -1
- package/src/pie-data-table-head/index.ts +0 -36
- package/src/pie-data-table-head/react.ts +0 -19
- package/src/pie-data-table-head-cell/data-table-head-cell.scss +0 -21
- package/src/pie-data-table-head-cell/defs-react.ts +0 -3
- package/src/pie-data-table-head-cell/defs.ts +0 -19
- package/src/pie-data-table-head-cell/index.ts +0 -59
- package/src/pie-data-table-head-cell/react.ts +0 -19
- package/src/pie-data-table-header/data-table-header.scss +0 -44
- package/src/pie-data-table-header/defs-react.ts +0 -8
- package/src/pie-data-table-header/defs.ts +0 -22
- package/src/pie-data-table-header/index.ts +0 -101
- package/src/pie-data-table-header/react.ts +0 -19
- package/src/pie-data-table-row/data-table-row.scss +0 -12
- package/src/pie-data-table-row/defs-react.ts +0 -3
- package/src/pie-data-table-row/defs.ts +0 -17
- package/src/pie-data-table-row/index.ts +0 -77
- package/src/pie-data-table-row/react.ts +0 -19
package/dist/index.d.ts
CHANGED
|
@@ -1,62 +1,20 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
additionalRows?: DataTableAdditionalRow[];
|
|
22
|
-
/**
|
|
23
|
-
* Maps text alignment values to corresponding CSS classes
|
|
24
|
-
*
|
|
25
|
-
* @param prefix - The prefix for the CSS class
|
|
26
|
-
* @param textAlign - The text alignment value
|
|
27
|
-
* @returns An object with CSS classes as keys and boolean values indicating whether the class should be applied
|
|
28
|
-
*/
|
|
29
|
-
private mapTextAlignClasses;
|
|
30
|
-
/**
|
|
31
|
-
* Renders a header cell for the table
|
|
32
|
-
* @param column - The column definition to render
|
|
33
|
-
*/
|
|
34
|
-
private renderHeaderCell;
|
|
35
|
-
/**
|
|
36
|
-
* Renders the table header
|
|
37
|
-
*/
|
|
38
|
-
private renderTableHeader;
|
|
39
|
-
/**
|
|
40
|
-
* Renders a table cell for the given column and row
|
|
41
|
-
* @param column - The column definition to render
|
|
42
|
-
* @param row - The data object for the current row
|
|
43
|
-
*/
|
|
44
|
-
private renderTableCell;
|
|
45
|
-
/**
|
|
46
|
-
* Renders the table rows
|
|
47
|
-
*/
|
|
48
|
-
private renderTableRows;
|
|
49
|
-
/**
|
|
50
|
-
* Renders the additional rows for the table
|
|
51
|
-
*/
|
|
52
|
-
private renderAdditionalRows;
|
|
53
|
-
private renderHTMLTable;
|
|
54
|
-
render(): import('lit-html').TemplateResult<1>;
|
|
55
|
-
static styles: import('lit').CSSResult;
|
|
56
|
-
}
|
|
57
|
-
declare global {
|
|
58
|
-
interface HTMLElementTagNameMap {
|
|
59
|
-
[componentSelector]: PieDataTable;
|
|
60
|
-
}
|
|
61
|
-
}
|
|
62
|
-
//# sourceMappingURL=index.d.ts.map
|
|
1
|
+
import { CSSResult } from 'lit';
|
|
2
|
+
import { GenericConstructor } from '@justeattakeaway/pie-webc-core';
|
|
3
|
+
import { PieElement } from '@justeattakeaway/pie-webc-core/src/internals/PieElement';
|
|
4
|
+
import { RTLInterface } from '@justeattakeaway/pie-webc-core';
|
|
5
|
+
import { TemplateResult } from 'lit-html';
|
|
6
|
+
|
|
7
|
+
export declare interface DataTableProps {
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
/**
|
|
11
|
+
* @tagname pie-data-table
|
|
12
|
+
*/
|
|
13
|
+
export declare class PieDataTable extends PieDataTable_base implements DataTableProps {
|
|
14
|
+
render(): TemplateResult<1>;
|
|
15
|
+
static styles: CSSResult;
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
declare const PieDataTable_base: GenericConstructor<RTLInterface> & typeof PieElement;
|
|
19
|
+
|
|
20
|
+
export { }
|
package/dist/index.js
CHANGED
|
@@ -1,159 +1,27 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
additionalRows: []
|
|
1
|
+
import { LitElement as b, html as d, unsafeCSS as f } from "lit";
|
|
2
|
+
import { RtlMixin as h, safeCustomElement as v } from "@justeattakeaway/pie-webc-core";
|
|
3
|
+
const e = class e extends b {
|
|
4
|
+
willUpdate() {
|
|
5
|
+
this.getAttribute("v") || this.setAttribute("v", e.v);
|
|
6
|
+
}
|
|
8
7
|
};
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
8
|
+
e.v = "0.1.6";
|
|
9
|
+
let r = e;
|
|
10
|
+
const c = "*,*:after,*:before{box-sizing:inherit}:host{display:block}";
|
|
11
|
+
var u = Object.getOwnPropertyDescriptor, m = (i, l, p, o) => {
|
|
12
|
+
for (var t = o > 1 ? void 0 : o ? u(l, p) : l, s = i.length - 1, n; s >= 0; s--)
|
|
13
|
+
(n = i[s]) && (t = n(t) || t);
|
|
14
|
+
return t;
|
|
13
15
|
};
|
|
14
|
-
let
|
|
15
|
-
constructor() {
|
|
16
|
-
super(...arguments), this.columns = [], this.data = [], this.additionalRows = f.additionalRows;
|
|
17
|
-
}
|
|
18
|
-
/**
|
|
19
|
-
* Maps text alignment values to corresponding CSS classes
|
|
20
|
-
*
|
|
21
|
-
* @param prefix - The prefix for the CSS class
|
|
22
|
-
* @param textAlign - The text alignment value
|
|
23
|
-
* @returns An object with CSS classes as keys and boolean values indicating whether the class should be applied
|
|
24
|
-
*/
|
|
25
|
-
mapTextAlignClasses(t, a) {
|
|
26
|
-
return {
|
|
27
|
-
[`${t}-text-align--left`]: a === "left",
|
|
28
|
-
[`${t}-text-align--right`]: a === "right",
|
|
29
|
-
[`${t}-text-align--center`]: a === "center"
|
|
30
|
-
};
|
|
31
|
-
}
|
|
32
|
-
/**
|
|
33
|
-
* Renders a header cell for the table
|
|
34
|
-
* @param column - The column definition to render
|
|
35
|
-
*/
|
|
36
|
-
renderHeaderCell(t) {
|
|
37
|
-
const { width: a, heading: e, textAlign: d } = t, r = a ? `width: ${a}` : c, s = {
|
|
38
|
-
"c-data-table-head-cell": !0,
|
|
39
|
-
...this.mapTextAlignClasses("c-data-table-head-cell", d)
|
|
40
|
-
};
|
|
41
|
-
return l`
|
|
42
|
-
<th style="${String(r)}" class="${n(s)}">
|
|
43
|
-
${e}
|
|
44
|
-
</th>
|
|
45
|
-
`;
|
|
46
|
-
}
|
|
47
|
-
/**
|
|
48
|
-
* Renders the table header
|
|
49
|
-
*/
|
|
50
|
-
renderTableHeader() {
|
|
51
|
-
return l`
|
|
52
|
-
<thead>
|
|
53
|
-
<tr>
|
|
54
|
-
${this.columns.map((t) => this.renderHeaderCell(t))}
|
|
55
|
-
</tr>
|
|
56
|
-
</thead>
|
|
57
|
-
`;
|
|
58
|
-
}
|
|
59
|
-
/**
|
|
60
|
-
* Renders a table cell for the given column and row
|
|
61
|
-
* @param column - The column definition to render
|
|
62
|
-
* @param row - The data object for the current row
|
|
63
|
-
*/
|
|
64
|
-
renderTableCell(t, a) {
|
|
65
|
-
const e = {
|
|
66
|
-
"c-data-table-cell": !0,
|
|
67
|
-
...this.mapTextAlignClasses("c-data-table-cell", t.textAlign)
|
|
68
|
-
};
|
|
69
|
-
return l`
|
|
70
|
-
<td class="${n(e)}">
|
|
71
|
-
${t.accessor ? a[t.accessor] : ""}
|
|
72
|
-
</td>
|
|
73
|
-
`;
|
|
74
|
-
}
|
|
75
|
-
/**
|
|
76
|
-
* Renders the table rows
|
|
77
|
-
*/
|
|
78
|
-
renderTableRows() {
|
|
79
|
-
return l`
|
|
80
|
-
<tbody>
|
|
81
|
-
${this.data.map((t) => l`
|
|
82
|
-
<tr class="c-data-table-row">
|
|
83
|
-
${this.columns.map((a) => this.renderTableCell(a, t))}
|
|
84
|
-
</tr>
|
|
85
|
-
`)}
|
|
86
|
-
</tbody>
|
|
87
|
-
`;
|
|
88
|
-
}
|
|
89
|
-
/**
|
|
90
|
-
* Renders the additional rows for the table
|
|
91
|
-
*/
|
|
92
|
-
renderAdditionalRows() {
|
|
93
|
-
return l`
|
|
94
|
-
<tfoot>
|
|
95
|
-
${this.additionalRows && this.additionalRows.length > 0 && this.additionalRows.map((t) => {
|
|
96
|
-
const a = {
|
|
97
|
-
"c-data-table-row": !0,
|
|
98
|
-
"c-data-table-row--hidden": !!t.hideRow
|
|
99
|
-
};
|
|
100
|
-
return l`
|
|
101
|
-
<tr class="${n(a)}">
|
|
102
|
-
${t.cells.map((e) => {
|
|
103
|
-
const d = {
|
|
104
|
-
"c-data-table-cell": !0,
|
|
105
|
-
"c-data-table-cell--hidden": !!e.hideCell,
|
|
106
|
-
...this.mapTextAlignClasses("c-data-table-cell", e.textAlign)
|
|
107
|
-
};
|
|
108
|
-
return l`
|
|
109
|
-
<td
|
|
110
|
-
class="${n(d)}"
|
|
111
|
-
colspan=${e.colSpan || 1}
|
|
112
|
-
>
|
|
113
|
-
${e.content}
|
|
114
|
-
</td>
|
|
115
|
-
`;
|
|
116
|
-
})}
|
|
117
|
-
</tr>
|
|
118
|
-
`;
|
|
119
|
-
})}
|
|
120
|
-
</tfoot>
|
|
121
|
-
`;
|
|
122
|
-
}
|
|
123
|
-
renderHTMLTable() {
|
|
124
|
-
return l`
|
|
125
|
-
<table>
|
|
126
|
-
${this.columns.length > 0 ? this.renderTableHeader() : c}
|
|
127
|
-
${this.data.length > 0 ? this.renderTableRows() : c}
|
|
128
|
-
${this.additionalRows && this.additionalRows.length > 0 ? this.renderAdditionalRows() : c}
|
|
129
|
-
</table>
|
|
130
|
-
`;
|
|
131
|
-
}
|
|
16
|
+
let a = class extends h(r) {
|
|
132
17
|
render() {
|
|
133
|
-
return
|
|
134
|
-
<div class="${n({
|
|
135
|
-
"c-data-table": !0
|
|
136
|
-
})}">
|
|
137
|
-
<slot name="table-header"></slot>
|
|
138
|
-
${this.data.length > 0 && this.columns.length > 0 ? this.renderHTMLTable() : l`<slot></slot>`}
|
|
139
|
-
</div>
|
|
140
|
-
`;
|
|
18
|
+
return d`<h1 data-test-id="pie-data-table">Hello world!</h1>`;
|
|
141
19
|
}
|
|
142
20
|
};
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
],
|
|
147
|
-
i([
|
|
148
|
-
h({ type: Array })
|
|
149
|
-
], o.prototype, "data", 2);
|
|
150
|
-
i([
|
|
151
|
-
h({ type: Array })
|
|
152
|
-
], o.prototype, "additionalRows", 2);
|
|
153
|
-
o = i([
|
|
154
|
-
m("pie-data-table")
|
|
155
|
-
], o);
|
|
21
|
+
a.styles = f(c);
|
|
22
|
+
a = m([
|
|
23
|
+
v("pie-data-table")
|
|
24
|
+
], a);
|
|
156
25
|
export {
|
|
157
|
-
|
|
158
|
-
f as defaultProps
|
|
26
|
+
a as PieDataTable
|
|
159
27
|
};
|
package/dist/react.d.ts
CHANGED
|
@@ -1,7 +1,25 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
1
|
+
import { CSSResult } from 'lit';
|
|
2
|
+
import { GenericConstructor } from '@justeattakeaway/pie-webc-core';
|
|
3
|
+
import { PieElement } from '@justeattakeaway/pie-webc-core/src/internals/PieElement';
|
|
4
|
+
import * as React_2 from 'react';
|
|
5
|
+
import { RTLInterface } from '@justeattakeaway/pie-webc-core';
|
|
6
|
+
import { TemplateResult } from 'lit-html';
|
|
7
|
+
|
|
8
|
+
export declare interface DataTableProps {
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
export declare const PieDataTable: React_2.ForwardRefExoticComponent<React_2.PropsWithoutRef<DataTableProps> & React_2.RefAttributes<PieDataTable_2> & ReactBaseType>;
|
|
12
|
+
|
|
13
|
+
/**
|
|
14
|
+
* @tagname pie-data-table
|
|
15
|
+
*/
|
|
16
|
+
declare class PieDataTable_2 extends PieDataTable_base implements DataTableProps {
|
|
17
|
+
render(): TemplateResult<1>;
|
|
18
|
+
static styles: CSSResult;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
declare const PieDataTable_base: GenericConstructor<RTLInterface> & typeof PieElement;
|
|
22
|
+
|
|
23
|
+
declare type ReactBaseType = React_2.HTMLAttributes<HTMLElement>;
|
|
24
|
+
|
|
25
|
+
export { }
|
package/dist/react.js
CHANGED
|
@@ -1,15 +1,13 @@
|
|
|
1
1
|
import * as a from "react";
|
|
2
2
|
import { createComponent as e } from "@lit/react";
|
|
3
3
|
import { PieDataTable as t } from "./index.js";
|
|
4
|
-
import { defaultProps as s } from "./index.js";
|
|
5
4
|
const o = e({
|
|
6
5
|
displayName: "PieDataTable",
|
|
7
6
|
elementClass: t,
|
|
8
7
|
react: a,
|
|
9
8
|
tagName: "pie-data-table",
|
|
10
9
|
events: {}
|
|
11
|
-
}),
|
|
10
|
+
}), l = o;
|
|
12
11
|
export {
|
|
13
|
-
|
|
14
|
-
s as defaultProps
|
|
12
|
+
l as PieDataTable
|
|
15
13
|
};
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@justeattakeaway/pie-data-table",
|
|
3
3
|
"description": "PIE Design System Data Table built using Web Components",
|
|
4
|
-
"version": "0.0.0-snapshot-release-
|
|
4
|
+
"version": "0.0.0-snapshot-release-20251111101641",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/index.js",
|
|
7
7
|
"module": "dist/index.js",
|
|
@@ -37,12 +37,12 @@
|
|
|
37
37
|
"devDependencies": {
|
|
38
38
|
"@custom-elements-manifest/analyzer": "0.9.0",
|
|
39
39
|
"@justeattakeaway/pie-components-config": "0.21.0",
|
|
40
|
-
"@justeattakeaway/pie-css": "0.
|
|
40
|
+
"@justeattakeaway/pie-css": "0.0.0-snapshot-release-20251111101641",
|
|
41
41
|
"@justeattakeaway/pie-monorepo-utils": "0.7.0",
|
|
42
42
|
"cem-plugin-module-file-extensions": "0.0.5"
|
|
43
43
|
},
|
|
44
44
|
"dependencies": {
|
|
45
|
-
"@justeattakeaway/pie-webc-core": "
|
|
45
|
+
"@justeattakeaway/pie-webc-core": "0.0.0-snapshot-release-20251111101641"
|
|
46
46
|
},
|
|
47
47
|
"volta": {
|
|
48
48
|
"extends": "../../../package.json"
|
package/src/data-table.scss
CHANGED
|
@@ -1,66 +1,7 @@
|
|
|
1
1
|
@use '@justeattakeaway/pie-css/scss' as p;
|
|
2
2
|
|
|
3
3
|
:host {
|
|
4
|
+
// Note: For consistency sake, the recommended display should be either
|
|
5
|
+
// "block" or "inline-block", otherwise it can be ommited for floating elements
|
|
4
6
|
display: block;
|
|
5
7
|
}
|
|
6
|
-
|
|
7
|
-
.c-data-table {
|
|
8
|
-
--data-table-background-color: var(--dt-color-container-default);
|
|
9
|
-
--data-table-background-hover-or-active: var(--dt-color-container-subtle);
|
|
10
|
-
--data-table-border-color: var(--dt-color-border-default);
|
|
11
|
-
--data-table-border-radius: var(--dt-radius-rounded-c);
|
|
12
|
-
--data-table-text-color: var(--dt-color-content-default);
|
|
13
|
-
|
|
14
|
-
background-color: var(--data-table-background-color);
|
|
15
|
-
border: 1px solid var(--data-table-border-color);
|
|
16
|
-
border-radius: var(--data-table-border-radius);
|
|
17
|
-
color: var(--data-table-text-color);
|
|
18
|
-
|
|
19
|
-
width: 100%;
|
|
20
|
-
overflow: hidden;
|
|
21
|
-
|
|
22
|
-
table {
|
|
23
|
-
border-spacing: 0;
|
|
24
|
-
width: 100%;
|
|
25
|
-
}
|
|
26
|
-
|
|
27
|
-
tbody {
|
|
28
|
-
overflow: auto;
|
|
29
|
-
}
|
|
30
|
-
|
|
31
|
-
tbody tr:hover {
|
|
32
|
-
background-color: var(--data-table-background-hover-or-active);
|
|
33
|
-
}
|
|
34
|
-
}
|
|
35
|
-
|
|
36
|
-
.c-data-table-head-cell {
|
|
37
|
-
background-color: transparent;
|
|
38
|
-
font-weight: var(--dt-font-weight-bold);
|
|
39
|
-
color: var(--data-table-header-color);
|
|
40
|
-
text-align: left;
|
|
41
|
-
}
|
|
42
|
-
|
|
43
|
-
.c-data-table-head-cell-text-align--left,
|
|
44
|
-
.c-data-table-cell-text-align--left {
|
|
45
|
-
text-align: left;
|
|
46
|
-
}
|
|
47
|
-
|
|
48
|
-
.c-data-table-head-cell-text-align--right,
|
|
49
|
-
.c-data-table-cell-text-align--right {
|
|
50
|
-
text-align: right;
|
|
51
|
-
}
|
|
52
|
-
|
|
53
|
-
.c-data-table-head-cell-text-align--center,
|
|
54
|
-
.c-data-table-cell-text-align--center {
|
|
55
|
-
text-align: center;
|
|
56
|
-
}
|
|
57
|
-
|
|
58
|
-
.c-data-table-cell, .c-data-table-head-cell {
|
|
59
|
-
padding: var(--dt-spacing-d);
|
|
60
|
-
border-bottom: 1px solid var(--data-table-border-color);
|
|
61
|
-
}
|
|
62
|
-
|
|
63
|
-
.c-data-table-cell--hidden,
|
|
64
|
-
.c-data-table-row--hidden {
|
|
65
|
-
display: none;
|
|
66
|
-
}
|
package/src/defs.ts
CHANGED
|
@@ -1,60 +1,3 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
export interface Column {
|
|
6
|
-
/**
|
|
7
|
-
* Unique identifier for the column
|
|
8
|
-
* */
|
|
9
|
-
id: string;
|
|
10
|
-
/**
|
|
11
|
-
* Optional property to specify the display name for the column heading
|
|
12
|
-
* */
|
|
13
|
-
heading: string;
|
|
14
|
-
/**
|
|
15
|
-
* Optional property to specify the text alignment of the column
|
|
16
|
-
* */
|
|
17
|
-
textAlign?: TextAlign;
|
|
18
|
-
|
|
19
|
-
/**
|
|
20
|
-
* Optional property to specify the width of the column
|
|
21
|
-
* */
|
|
22
|
-
width?: string;
|
|
23
|
-
/**
|
|
24
|
-
* Optional property to specify the key in the data object to display in this column
|
|
25
|
-
* */
|
|
26
|
-
accessor?: string;
|
|
27
|
-
}
|
|
28
|
-
|
|
29
|
-
export type AdditionalCell = {
|
|
30
|
-
content: string | number;
|
|
31
|
-
textAlign?: TextAlign;
|
|
32
|
-
colSpan?: number;
|
|
33
|
-
hideCell?: boolean;
|
|
34
|
-
};
|
|
35
|
-
|
|
36
|
-
export type DataTableAdditionalRow = {
|
|
37
|
-
cells: AdditionalCell[];
|
|
38
|
-
hideRow?: boolean;
|
|
39
|
-
};
|
|
40
|
-
|
|
41
|
-
export interface DataTableProps {
|
|
42
|
-
/**
|
|
43
|
-
* Array of column definitions
|
|
44
|
-
*/
|
|
45
|
-
columns?: Column[];
|
|
46
|
-
|
|
47
|
-
/**
|
|
48
|
-
* Array of data objects to display
|
|
49
|
-
*/
|
|
50
|
-
data?: Record<string, unknown>[];
|
|
51
|
-
|
|
52
|
-
/**
|
|
53
|
-
* Arbitrary additional rows to display at the bottom of the table
|
|
54
|
-
*/
|
|
55
|
-
additionalRows?: DataTableAdditionalRow[];
|
|
56
|
-
}
|
|
57
|
-
|
|
58
|
-
export const defaultProps: ComponentDefaultProps<DataTableProps, keyof Omit<DataTableProps, 'columns' | 'data' >> = {
|
|
59
|
-
additionalRows: [],
|
|
60
|
-
};
|
|
1
|
+
// TODO - please remove the eslint disable comment below when you add props to this interface
|
|
2
|
+
// eslint-disable-next-line @typescript-eslint/no-empty-interface
|
|
3
|
+
export interface DataTableProps {}
|
package/src/index.ts
CHANGED
|
@@ -1,23 +1,9 @@
|
|
|
1
|
-
import { html,
|
|
2
|
-
import { property } from 'lit/decorators.js';
|
|
1
|
+
import { html, unsafeCSS } from 'lit';
|
|
3
2
|
import { PieElement } from '@justeattakeaway/pie-webc-core/src/internals/PieElement';
|
|
4
3
|
import { RtlMixin, safeCustomElement } from '@justeattakeaway/pie-webc-core';
|
|
5
|
-
import { classMap } from 'lit/directives/class-map.js';
|
|
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
4
|
|
|
14
5
|
import styles from './data-table.scss?inline';
|
|
15
|
-
import {
|
|
16
|
-
type DataTableProps,
|
|
17
|
-
type Column,
|
|
18
|
-
type DataTableAdditionalRow,
|
|
19
|
-
defaultProps,
|
|
20
|
-
} from './defs';
|
|
6
|
+
import { type DataTableProps } from './defs';
|
|
21
7
|
|
|
22
8
|
// Valid values available to consumers
|
|
23
9
|
export * from './defs';
|
|
@@ -29,163 +15,8 @@ const componentSelector = 'pie-data-table';
|
|
|
29
15
|
*/
|
|
30
16
|
@safeCustomElement('pie-data-table')
|
|
31
17
|
export class PieDataTable extends RtlMixin(PieElement) implements DataTableProps {
|
|
32
|
-
/**
|
|
33
|
-
* Array of column definitions
|
|
34
|
-
*/
|
|
35
|
-
@property({ type: Array })
|
|
36
|
-
public columns: Column[] = [];
|
|
37
|
-
|
|
38
|
-
/**
|
|
39
|
-
* Array of data objects to display
|
|
40
|
-
*/
|
|
41
|
-
@property({ type: Array })
|
|
42
|
-
public data: Record<string, unknown>[] = [];
|
|
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
|
-
|
|
65
|
-
/**
|
|
66
|
-
* Renders a header cell for the table
|
|
67
|
-
* @param column - The column definition to render
|
|
68
|
-
*/
|
|
69
|
-
private renderHeaderCell (column: Column) {
|
|
70
|
-
const { width, heading, textAlign } = column;
|
|
71
|
-
const style = width ? `width: ${width}` : nothing;
|
|
72
|
-
const classes = {
|
|
73
|
-
'c-data-table-head-cell': true,
|
|
74
|
-
...this.mapTextAlignClasses('c-data-table-head-cell', textAlign),
|
|
75
|
-
};
|
|
76
|
-
|
|
77
|
-
return html`
|
|
78
|
-
<th style="${String(style)}" class="${classMap(classes)}">
|
|
79
|
-
${heading}
|
|
80
|
-
</th>
|
|
81
|
-
`;
|
|
82
|
-
}
|
|
83
|
-
|
|
84
|
-
/**
|
|
85
|
-
* Renders the table header
|
|
86
|
-
*/
|
|
87
|
-
private renderTableHeader () {
|
|
88
|
-
return html`
|
|
89
|
-
<thead>
|
|
90
|
-
<tr>
|
|
91
|
-
${this.columns.map((column) => this.renderHeaderCell(column))}
|
|
92
|
-
</tr>
|
|
93
|
-
</thead>
|
|
94
|
-
`;
|
|
95
|
-
}
|
|
96
|
-
|
|
97
|
-
/**
|
|
98
|
-
* Renders a table cell for the given column and row
|
|
99
|
-
* @param column - The column definition to render
|
|
100
|
-
* @param row - The data object for the current row
|
|
101
|
-
*/
|
|
102
|
-
private renderTableCell (column: Column, row: Record<string, unknown>) {
|
|
103
|
-
const classes = {
|
|
104
|
-
'c-data-table-cell': true,
|
|
105
|
-
...this.mapTextAlignClasses('c-data-table-cell', column.textAlign),
|
|
106
|
-
};
|
|
107
|
-
|
|
108
|
-
return html`
|
|
109
|
-
<td class="${classMap(classes)}">
|
|
110
|
-
${column.accessor ? row[column.accessor] : ''}
|
|
111
|
-
</td>
|
|
112
|
-
`;
|
|
113
|
-
}
|
|
114
|
-
|
|
115
|
-
/**
|
|
116
|
-
* Renders the table rows
|
|
117
|
-
*/
|
|
118
|
-
private renderTableRows () {
|
|
119
|
-
return html`
|
|
120
|
-
<tbody>
|
|
121
|
-
${this.data.map((row) => html`
|
|
122
|
-
<tr class="c-data-table-row">
|
|
123
|
-
${this.columns.map((column) => this.renderTableCell(column, row))}
|
|
124
|
-
</tr>
|
|
125
|
-
`)}
|
|
126
|
-
</tbody>
|
|
127
|
-
`;
|
|
128
|
-
}
|
|
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
|
-
|
|
178
18
|
render () {
|
|
179
|
-
|
|
180
|
-
'c-data-table': true,
|
|
181
|
-
};
|
|
182
|
-
|
|
183
|
-
return html`
|
|
184
|
-
<div class="${classMap(classes)}">
|
|
185
|
-
<slot name="table-header"></slot>
|
|
186
|
-
${this.data.length > 0 && this.columns.length > 0 ? this.renderHTMLTable() : html`<slot></slot>`}
|
|
187
|
-
</div>
|
|
188
|
-
`;
|
|
19
|
+
return html`<h1 data-test-id="pie-data-table">Hello world!</h1>`;
|
|
189
20
|
}
|
|
190
21
|
|
|
191
22
|
// Renders a `CSSResult` generated from SCSS by Vite
|