@paroicms/react-ui 0.5.4 → 0.5.6
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/dist/DataTable.d.ts +13 -3
- package/dist/DataTable.js +2 -10
- package/dist/index.d.ts +0 -1
- package/dist/index.js +0 -1
- package/package.json +1 -1
- package/styles/Button.css +6 -1
- package/styles/DataTable.css +9 -9
- package/styles/Dialog.css +1 -1
- package/styles/InputText.css +1 -0
- package/styles/PasswordInput.css +1 -0
- package/styles/Select.css +2 -0
- package/styles/theme/field.css +1 -0
- package/styles/theme/index.css +1 -1
- package/styles/theme/{margins.css → utilities.css} +63 -36
- package/dist/Column.d.ts +0 -14
- package/dist/Column.js +0 -7
package/dist/DataTable.d.ts
CHANGED
|
@@ -1,12 +1,22 @@
|
|
|
1
1
|
import "../styles/DataTable.css";
|
|
2
|
-
import {
|
|
2
|
+
import type { CSSProperties, ReactNode } from "react";
|
|
3
|
+
export interface DataTableColumn<T = unknown> {
|
|
4
|
+
field?: keyof T & string;
|
|
5
|
+
header?: string;
|
|
6
|
+
body?: (rowData: T) => ReactNode;
|
|
7
|
+
style?: CSSProperties;
|
|
8
|
+
sortable?: boolean;
|
|
9
|
+
thClassName?: string;
|
|
10
|
+
tdClassName?: string;
|
|
11
|
+
}
|
|
3
12
|
export interface DataTableProps<T> {
|
|
4
13
|
value: T[];
|
|
5
14
|
dataKey: keyof T & string;
|
|
15
|
+
columns: DataTableColumn<T>[];
|
|
6
16
|
size?: "small" | "normal";
|
|
7
17
|
loading?: boolean;
|
|
8
|
-
children: ReactNode;
|
|
9
18
|
className?: string;
|
|
19
|
+
tableClassName?: string;
|
|
10
20
|
emptyMessage?: string;
|
|
11
21
|
paginator?: boolean;
|
|
12
22
|
rows?: number;
|
|
@@ -27,4 +37,4 @@ export interface DataTableProps<T> {
|
|
|
27
37
|
rowClassName?: (row: T) => string | undefined;
|
|
28
38
|
totalLabel?: string;
|
|
29
39
|
}
|
|
30
|
-
export declare function DataTable<T extends object>({ value, dataKey, size, loading,
|
|
40
|
+
export declare function DataTable<T extends object>({ value, dataKey, columns, size, loading, className, tableClassName, emptyMessage, paginator, rows, totalRecords, first, onPage, rowsPerPageOptions, sortField, sortOrder, onSort, onRowClick, rowClassName, totalLabel, }: DataTableProps<T>): import("react/jsx-runtime").JSX.Element;
|
package/dist/DataTable.js
CHANGED
|
@@ -2,17 +2,9 @@ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
|
2
2
|
import "../styles/DataTable.css";
|
|
3
3
|
import { clsx } from "clsx";
|
|
4
4
|
import { ArrowDown, ArrowUp, ChevronLeft, ChevronRight, ChevronsUpDown } from "lucide-react";
|
|
5
|
-
import { Children, isValidElement } from "react";
|
|
6
5
|
import { Select } from "./Select.js";
|
|
7
6
|
import { Spinner } from "./Spinner.js";
|
|
8
|
-
export function DataTable({ value, dataKey, size, loading,
|
|
9
|
-
// Extract column definitions from children
|
|
10
|
-
const columns = [];
|
|
11
|
-
Children.forEach(children, (child) => {
|
|
12
|
-
if (isValidElement(child) && child.props) {
|
|
13
|
-
columns.push(child.props);
|
|
14
|
-
}
|
|
15
|
-
});
|
|
7
|
+
export function DataTable({ value, dataKey, columns, size, loading, className, tableClassName, emptyMessage = "No data available", paginator, rows = 10, totalRecords, first = 0, onPage, rowsPerPageOptions, sortField, sortOrder, onSort, onRowClick, rowClassName, totalLabel, }) {
|
|
16
8
|
const total = totalRecords ?? value.length;
|
|
17
9
|
const pageCount = Math.ceil(total / rows);
|
|
18
10
|
const currentPage = Math.floor(first / rows) + 1;
|
|
@@ -22,5 +14,5 @@ export function DataTable({ value, dataKey, size, loading, children, className,
|
|
|
22
14
|
const newOrder = sortField === field && sortOrder === 1 ? -1 : 1;
|
|
23
15
|
onSort({ field, order: newOrder });
|
|
24
16
|
};
|
|
25
|
-
return (_jsxs("div", { className: clsx("PaDataTable
|
|
17
|
+
return (_jsxs("div", { className: clsx("PaDataTable", { loading }, className), children: [loading && (_jsx("div", { className: "PaDataTable-overlay", children: _jsx(Spinner, {}) })), _jsx("div", { className: "PaDataTable-scrollable", children: _jsxs("table", { className: clsx("PaDataTable-table", size, tableClassName), children: [_jsx("thead", { className: "PaDataTable-header", children: _jsx("tr", { children: columns.map((col, i) => (_jsx("th", { className: clsx("PaDataTable-headerCell", col.sortable && "sortable", col.thClassName), style: col.style, onClick: col.sortable ? () => handleSort(col.field) : undefined, tabIndex: 0, children: _jsxs("span", { className: "PaDataTable-headerContent", children: [col.header, col.sortable && (_jsx("span", { className: "PaDataTable-sortIcon", children: col.field === sortField ? (sortOrder === 1 ? (_jsx(ArrowDown, { size: 14 })) : (_jsx(ArrowUp, { size: 14 }))) : (_jsx(ChevronsUpDown, { size: 14 })) }))] }) }, col.field ?? i))) }) }), _jsx("tbody", { children: value.length === 0 ? (_jsx("tr", { className: "PaDataTable-emptyRow", children: _jsx("td", { colSpan: columns.length, className: "PaDataTable-emptyCell", children: emptyMessage }) })) : (value.map((row) => (_jsx("tr", { className: clsx("PaDataTable-row", onRowClick && "clickable", rowClassName?.(row)), onClick: onRowClick ? (e) => onRowClick(row, e) : undefined, children: columns.map((col, i) => (_jsx("td", { className: clsx("PaDataTable-cell", col.tdClassName), style: col.style, children: col.body ? col.body(row) : col.field ? String(row[col.field] ?? "") : null }, col.field ?? i))) }, String(row[dataKey]))))) })] }) }), paginator && onPage && pageCount > 1 && (_jsxs("div", { className: "PaDataTable-footer", children: [_jsxs("span", { className: "PaDataTable-totalCount", children: [total, " ", totalLabel ?? "items"] }), _jsxs("div", { className: "PaDataTable-pagination", children: [_jsx("button", { type: "button", className: "PaDataTable-paginationBtn", disabled: currentPage <= 1, onClick: () => onPage({ first: first - rows, rows }), children: _jsx(ChevronLeft, { size: 16 }) }), _jsxs("span", { className: "PaDataTable-paginationText", children: ["Page ", currentPage, " of ", pageCount] }), _jsx("button", { type: "button", className: "PaDataTable-paginationBtn", disabled: currentPage >= pageCount, onClick: () => onPage({ first: first + rows, rows }), children: _jsx(ChevronRight, { size: 16 }) }), rowsPerPageOptions && rowsPerPageOptions.length > 0 && (_jsx(Select, { className: "PaDataTable-rowsPerPage", value: String(rows), options: rowsPerPageOptions.map((n) => ({ label: String(n), value: String(n) })), onChange: (val) => onPage({ first: 0, rows: Number(val) }) }))] })] }))] }));
|
|
26
18
|
}
|
package/dist/index.d.ts
CHANGED
package/dist/index.js
CHANGED
package/package.json
CHANGED
package/styles/Button.css
CHANGED
|
@@ -13,12 +13,17 @@
|
|
|
13
13
|
font-weight: var(--font-medium);
|
|
14
14
|
line-height: 1;
|
|
15
15
|
white-space: nowrap;
|
|
16
|
-
text-decoration: none;
|
|
17
16
|
cursor: pointer;
|
|
18
17
|
border: none;
|
|
19
18
|
border-radius: var(--radius);
|
|
20
19
|
transition: all var(--transition);
|
|
21
20
|
|
|
21
|
+
&,
|
|
22
|
+
&:visited,
|
|
23
|
+
&:hover {
|
|
24
|
+
text-decoration: none;
|
|
25
|
+
}
|
|
26
|
+
|
|
22
27
|
&:focus-visible {
|
|
23
28
|
outline: 2px solid var(--color-primary);
|
|
24
29
|
outline-offset: 2px;
|
package/styles/DataTable.css
CHANGED
|
@@ -2,6 +2,14 @@
|
|
|
2
2
|
Data Table
|
|
3
3
|
======================================== */
|
|
4
4
|
.PaDataTable {
|
|
5
|
+
position: relative;
|
|
6
|
+
|
|
7
|
+
&.loading {
|
|
8
|
+
min-height: 100px;
|
|
9
|
+
}
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
.PaDataTable-table {
|
|
5
13
|
overflow: hidden;
|
|
6
14
|
border-spacing: 0;
|
|
7
15
|
border-collapse: separate;
|
|
@@ -17,6 +25,7 @@
|
|
|
17
25
|
padding: var(--space-3) var(--space-4);
|
|
18
26
|
font-size: var(--text-xs);
|
|
19
27
|
font-weight: var(--font-semibold);
|
|
28
|
+
vertical-align: middle;
|
|
20
29
|
color: var(--color-text-muted);
|
|
21
30
|
text-align: left;
|
|
22
31
|
text-transform: uppercase;
|
|
@@ -81,15 +90,6 @@
|
|
|
81
90
|
white-space: nowrap;
|
|
82
91
|
}
|
|
83
92
|
|
|
84
|
-
/* DataTable Wrapper & Loading */
|
|
85
|
-
.PaDataTable-wrapper {
|
|
86
|
-
position: relative;
|
|
87
|
-
|
|
88
|
-
&.loading {
|
|
89
|
-
min-height: 100px;
|
|
90
|
-
}
|
|
91
|
-
}
|
|
92
|
-
|
|
93
93
|
.PaDataTable-overlay {
|
|
94
94
|
position: absolute;
|
|
95
95
|
inset: 0;
|
package/styles/Dialog.css
CHANGED
package/styles/InputText.css
CHANGED
package/styles/PasswordInput.css
CHANGED
package/styles/Select.css
CHANGED
package/styles/theme/field.css
CHANGED
package/styles/theme/index.css
CHANGED
|
@@ -1,119 +1,146 @@
|
|
|
1
|
+
.PaButtonBar {
|
|
2
|
+
display: flex;
|
|
3
|
+
flex-wrap: wrap;
|
|
4
|
+
gap: 8px;
|
|
5
|
+
|
|
6
|
+
&.alignRight {
|
|
7
|
+
justify-content: end;
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
&.spaceBetween {
|
|
11
|
+
justify-content: space-between;
|
|
12
|
+
width: 100%;
|
|
13
|
+
|
|
14
|
+
@media (max-width: 400px) {
|
|
15
|
+
justify-content: center;
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
.PaFullW {
|
|
21
|
+
width: 100% !important;
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
.PaFullH {
|
|
25
|
+
height: 100% !important;
|
|
26
|
+
}
|
|
27
|
+
|
|
1
28
|
/* ========================================
|
|
2
29
|
Margin Utilities
|
|
3
30
|
======================================== */
|
|
4
31
|
|
|
5
32
|
/* Margin Top */
|
|
6
|
-
.
|
|
33
|
+
.PaMt1 {
|
|
7
34
|
margin-top: var(--space-1);
|
|
8
35
|
}
|
|
9
|
-
.
|
|
36
|
+
.PaMt2 {
|
|
10
37
|
margin-top: var(--space-2);
|
|
11
38
|
}
|
|
12
|
-
.
|
|
39
|
+
.PaMt3 {
|
|
13
40
|
margin-top: var(--space-3);
|
|
14
41
|
}
|
|
15
|
-
.
|
|
42
|
+
.PaMt4 {
|
|
16
43
|
margin-top: var(--space-4);
|
|
17
44
|
}
|
|
18
|
-
.
|
|
45
|
+
.PaMt5 {
|
|
19
46
|
margin-top: var(--space-5);
|
|
20
47
|
}
|
|
21
|
-
.
|
|
48
|
+
.PaMt6 {
|
|
22
49
|
margin-top: var(--space-6);
|
|
23
50
|
}
|
|
24
|
-
.
|
|
51
|
+
.PaMt8 {
|
|
25
52
|
margin-top: var(--space-8);
|
|
26
53
|
}
|
|
27
|
-
.
|
|
54
|
+
.PaMt10 {
|
|
28
55
|
margin-top: var(--space-10);
|
|
29
56
|
}
|
|
30
|
-
.
|
|
57
|
+
.PaMt12 {
|
|
31
58
|
margin-top: var(--space-12);
|
|
32
59
|
}
|
|
33
60
|
|
|
34
61
|
/* Margin Bottom */
|
|
35
|
-
.
|
|
62
|
+
.PaMb1 {
|
|
36
63
|
margin-bottom: var(--space-1);
|
|
37
64
|
}
|
|
38
|
-
.
|
|
65
|
+
.PaMb2 {
|
|
39
66
|
margin-bottom: var(--space-2);
|
|
40
67
|
}
|
|
41
|
-
.
|
|
68
|
+
.PaMb3 {
|
|
42
69
|
margin-bottom: var(--space-3);
|
|
43
70
|
}
|
|
44
|
-
.
|
|
71
|
+
.PaMb4 {
|
|
45
72
|
margin-bottom: var(--space-4);
|
|
46
73
|
}
|
|
47
|
-
.
|
|
74
|
+
.PaMb5 {
|
|
48
75
|
margin-bottom: var(--space-5);
|
|
49
76
|
}
|
|
50
|
-
.
|
|
77
|
+
.PaMb6 {
|
|
51
78
|
margin-bottom: var(--space-6);
|
|
52
79
|
}
|
|
53
|
-
.
|
|
80
|
+
.PaMb8 {
|
|
54
81
|
margin-bottom: var(--space-8);
|
|
55
82
|
}
|
|
56
|
-
.
|
|
83
|
+
.PaMb10 {
|
|
57
84
|
margin-bottom: var(--space-10);
|
|
58
85
|
}
|
|
59
|
-
.
|
|
86
|
+
.PaMb12 {
|
|
60
87
|
margin-bottom: var(--space-12);
|
|
61
88
|
}
|
|
62
89
|
|
|
63
90
|
/* Margin Left */
|
|
64
|
-
.
|
|
91
|
+
.PaMl1 {
|
|
65
92
|
margin-left: var(--space-1);
|
|
66
93
|
}
|
|
67
|
-
.
|
|
94
|
+
.PaMl2 {
|
|
68
95
|
margin-left: var(--space-2);
|
|
69
96
|
}
|
|
70
|
-
.
|
|
97
|
+
.PaMl3 {
|
|
71
98
|
margin-left: var(--space-3);
|
|
72
99
|
}
|
|
73
|
-
.
|
|
100
|
+
.PaMl4 {
|
|
74
101
|
margin-left: var(--space-4);
|
|
75
102
|
}
|
|
76
|
-
.
|
|
103
|
+
.PaMl5 {
|
|
77
104
|
margin-left: var(--space-5);
|
|
78
105
|
}
|
|
79
|
-
.
|
|
106
|
+
.PaMl6 {
|
|
80
107
|
margin-left: var(--space-6);
|
|
81
108
|
}
|
|
82
|
-
.
|
|
109
|
+
.PaMl8 {
|
|
83
110
|
margin-left: var(--space-8);
|
|
84
111
|
}
|
|
85
|
-
.
|
|
112
|
+
.PaMl10 {
|
|
86
113
|
margin-left: var(--space-10);
|
|
87
114
|
}
|
|
88
|
-
.
|
|
115
|
+
.PaMl12 {
|
|
89
116
|
margin-left: var(--space-12);
|
|
90
117
|
}
|
|
91
118
|
|
|
92
119
|
/* Margin Right */
|
|
93
|
-
.
|
|
120
|
+
.PaMr1 {
|
|
94
121
|
margin-right: var(--space-1);
|
|
95
122
|
}
|
|
96
|
-
.
|
|
123
|
+
.PaMr2 {
|
|
97
124
|
margin-right: var(--space-2);
|
|
98
125
|
}
|
|
99
|
-
.
|
|
126
|
+
.PaMr3 {
|
|
100
127
|
margin-right: var(--space-3);
|
|
101
128
|
}
|
|
102
|
-
.
|
|
129
|
+
.PaMr4 {
|
|
103
130
|
margin-right: var(--space-4);
|
|
104
131
|
}
|
|
105
|
-
.
|
|
132
|
+
.PaMr5 {
|
|
106
133
|
margin-right: var(--space-5);
|
|
107
134
|
}
|
|
108
|
-
.
|
|
135
|
+
.PaMr6 {
|
|
109
136
|
margin-right: var(--space-6);
|
|
110
137
|
}
|
|
111
|
-
.
|
|
138
|
+
.PaMr8 {
|
|
112
139
|
margin-right: var(--space-8);
|
|
113
140
|
}
|
|
114
|
-
.
|
|
141
|
+
.PaMr10 {
|
|
115
142
|
margin-right: var(--space-10);
|
|
116
143
|
}
|
|
117
|
-
.
|
|
144
|
+
.PaMr12 {
|
|
118
145
|
margin-right: var(--space-12);
|
|
119
146
|
}
|
package/dist/Column.d.ts
DELETED
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
import type { CSSProperties, ReactNode } from "react";
|
|
2
|
-
export interface ColumnProps<T = unknown> {
|
|
3
|
-
field?: keyof T & string;
|
|
4
|
-
header?: string;
|
|
5
|
-
body?: (rowData: T) => ReactNode;
|
|
6
|
-
style?: CSSProperties;
|
|
7
|
-
sortable?: boolean;
|
|
8
|
-
bodyClassName?: string;
|
|
9
|
-
}
|
|
10
|
-
/**
|
|
11
|
-
* Render-less component for column definition.
|
|
12
|
-
* Used for configuration only - does not render anything.
|
|
13
|
-
*/
|
|
14
|
-
export declare function Column<T>(_props: ColumnProps<T>): null;
|