@chumsinc/sortable-tables 2.0.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/CHANGELOG.md +98 -0
- package/LICENSE +21 -0
- package/README.md +82 -0
- package/babel.config.mjs +13 -0
- package/changelog-template.hbs +45 -0
- package/dist/DataTable.d.ts +6 -0
- package/dist/DataTable.js +15 -0
- package/dist/DataTable.js.map +1 -0
- package/dist/DataTableCell.d.ts +293 -0
- package/dist/DataTableCell.js +17 -0
- package/dist/DataTableCell.js.map +1 -0
- package/dist/DataTableHead.d.ts +6 -0
- package/dist/DataTableHead.js +11 -0
- package/dist/DataTableHead.js.map +1 -0
- package/dist/DataTableRow.d.ts +6 -0
- package/dist/DataTableRow.js +17 -0
- package/dist/DataTableRow.js.map +1 -0
- package/dist/DataTableTBody.d.ts +6 -0
- package/dist/DataTableTBody.js +16 -0
- package/dist/DataTableTBody.js.map +1 -0
- package/dist/DataTableTH.d.ts +6 -0
- package/dist/DataTableTH.js +9 -0
- package/dist/DataTableTH.js.map +1 -0
- package/dist/RowsPerPage.d.ts +7 -0
- package/dist/RowsPerPage.js +16 -0
- package/dist/RowsPerPage.js.map +1 -0
- package/dist/SortableTable.d.ts +6 -0
- package/dist/SortableTable.js +15 -0
- package/dist/SortableTable.js.map +1 -0
- package/dist/SortableTableHead.d.ts +6 -0
- package/dist/SortableTableHead.js +12 -0
- package/dist/SortableTableHead.js.map +1 -0
- package/dist/SortableTableTH.d.ts +6 -0
- package/dist/SortableTableTH.js +48 -0
- package/dist/SortableTableTH.js.map +1 -0
- package/dist/Table.d.ts +5 -0
- package/dist/Table.js +28 -0
- package/dist/Table.js.map +1 -0
- package/dist/TablePagination.d.ts +6 -0
- package/dist/TablePagination.js +13 -0
- package/dist/TablePagination.js.map +1 -0
- package/dist/index.d.ts +10 -0
- package/dist/index.js +10 -0
- package/dist/index.js.map +1 -0
- package/dist/types.d.ts +104 -0
- package/dist/types.js +2 -0
- package/dist/types.js.map +1 -0
- package/dist/utils.d.ts +1 -0
- package/dist/utils.js +2 -0
- package/dist/utils.js.map +1 -0
- package/eslint.config.mjs +14 -0
- package/package.json +91 -0
- package/public/index.html +28 -0
- package/src/DataTable.tsx +47 -0
- package/src/DataTableCell.tsx +28 -0
- package/src/DataTableHead.tsx +27 -0
- package/src/DataTableRow.tsx +38 -0
- package/src/DataTableTBody.tsx +40 -0
- package/src/DataTableTH.tsx +20 -0
- package/src/RowsPerPage.tsx +38 -0
- package/src/SortableTable.tsx +46 -0
- package/src/SortableTableHead.tsx +31 -0
- package/src/SortableTableTH.tsx +77 -0
- package/src/Table.tsx +43 -0
- package/src/TablePagination.tsx +72 -0
- package/src/index.tsx +14 -0
- package/src/types.ts +127 -0
- package/src/utils.ts +1 -0
- package/test/TestTable.tsx +67 -0
- package/test/data.ts +232 -0
- package/test/index.tsx +11 -0
- package/tsconfig.json +29 -0
- package/webpack.common.mjs +72 -0
- package/webpack.dev.mjs +35 -0
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import classNames from "classnames";
|
|
3
|
+
import { noop } from "./utils";
|
|
4
|
+
import DataTableCell from "./DataTableCell";
|
|
5
|
+
function DataTableRow({ className, rowClassName, selected, fields, row, trRef, onClick = noop, ...rest }) {
|
|
6
|
+
const clickHandler = () => {
|
|
7
|
+
return onClick ? onClick() : noop();
|
|
8
|
+
};
|
|
9
|
+
const _className = typeof rowClassName === 'function' ? rowClassName(row) : rowClassName;
|
|
10
|
+
if (!row) {
|
|
11
|
+
return null;
|
|
12
|
+
}
|
|
13
|
+
return (_jsx("tr", { ref: trRef, className: classNames({ 'table-active': selected }, className, _className), onClick: clickHandler, ...rest, children: fields.map((field, index) => (_jsx(DataTableCell, { field: field, row: row }, index))) }));
|
|
14
|
+
}
|
|
15
|
+
DataTableRow.displayName = 'DataTableRow';
|
|
16
|
+
export default DataTableRow;
|
|
17
|
+
//# sourceMappingURL=DataTableRow.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DataTableRow.js","sourceRoot":"","sources":["../src/DataTableRow.tsx"],"names":[],"mappings":";AACA,OAAO,UAAU,MAAM,YAAY,CAAC;AACpC,OAAO,EAAC,IAAI,EAAC,MAAM,SAAS,CAAC;AAE7B,OAAO,aAAa,MAAM,iBAAiB,CAAC;AAG5C,SAAS,YAAY,CAAc,EACmB,SAAS,EACT,YAAY,EACZ,QAAQ,EACR,MAAM,EACN,GAAG,EACH,KAAK,EACL,OAAO,GAAG,IAAI,EACd,GAAG,IAAI,EACY;IACrE,MAAM,YAAY,GAAG,GAAG,EAAE;QACtB,OAAO,OAAO,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;IACxC,CAAC,CAAA;IAED,MAAM,UAAU,GAAG,OAAO,YAAY,KAAK,UAAU,CAAC,CAAC,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC;IACzF,IAAI,CAAC,GAAG,EAAE,CAAC;QACP,OAAO,IAAI,CAAC;IAChB,CAAC;IAED,OAAO,CACH,aAAI,GAAG,EAAE,KAAK,EACV,SAAS,EAAE,UAAU,CAAC,EAAC,cAAc,EAAE,QAAQ,EAAC,EAAE,SAAS,EAAE,UAAU,CAAC,EACxE,OAAO,EAAE,YAAY,KACjB,IAAI,YACP,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC,KAAC,aAAa,IAAa,KAAK,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,IAA7B,KAAK,CAA4B,CAAC,CAAC,GACrF,CACR,CAAA;AACL,CAAC;AAED,YAAY,CAAC,WAAW,GAAG,cAAc,CAAC;AAC1C,eAAe,YAAY,CAAC"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { DataTableTBodyProps } from "./types";
|
|
2
|
+
declare function DataTableTBody<T = unknown>({ fields, data, keyField, rowClassName, renderRow, onSelectRow, selected, children, ...rest }: DataTableTBodyProps<T>): import("react/jsx-runtime").JSX.Element;
|
|
3
|
+
declare namespace DataTableTBody {
|
|
4
|
+
var displayName: string;
|
|
5
|
+
}
|
|
6
|
+
export default DataTableTBody;
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import DataTableRow from "./DataTableRow";
|
|
3
|
+
import { noop } from "./utils";
|
|
4
|
+
function DataTableTBody({ fields, data, keyField, rowClassName, renderRow, onSelectRow = noop, selected = '', children, ...rest }) {
|
|
5
|
+
return (_jsxs("tbody", { ...rest, children: [data.map(row => {
|
|
6
|
+
const keyValue = String(typeof keyField === "function" ? keyField(row) : row[keyField]);
|
|
7
|
+
const isSelected = typeof selected === 'function' ? selected(row) : keyValue === selected;
|
|
8
|
+
if (renderRow) {
|
|
9
|
+
return renderRow(row);
|
|
10
|
+
}
|
|
11
|
+
return (_jsx(DataTableRow, { onClick: () => onSelectRow(row), rowClassName: rowClassName, fields: fields, row: row, selected: isSelected }, keyValue));
|
|
12
|
+
}), children] }));
|
|
13
|
+
}
|
|
14
|
+
DataTableTBody.displayName = 'DataTableTBody';
|
|
15
|
+
export default DataTableTBody;
|
|
16
|
+
//# sourceMappingURL=DataTableTBody.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DataTableTBody.js","sourceRoot":"","sources":["../src/DataTableTBody.tsx"],"names":[],"mappings":";AACA,OAAO,YAAY,MAAM,gBAAgB,CAAC;AAC1C,OAAO,EAAC,IAAI,EAAC,MAAM,SAAS,CAAC;AAK7B,SAAS,cAAc,CAAc,EACT,MAAM,EACN,IAAI,EACJ,QAAQ,EACR,YAAY,EACZ,SAAS,EACT,WAAW,GAAG,IAAI,EAClB,QAAQ,GAAG,EAAE,EACb,QAAQ,EACR,GAAG,IAAI,EACc;IAE7C,OAAO,CACH,oBAAW,IAAI,aACd,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE;gBACZ,MAAM,QAAQ,GAAG,MAAM,CAAC,OAAO,QAAQ,KAAK,UAAU,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC;gBACxF,MAAM,UAAU,GAAG,OAAO,QAAQ,KAAK,UAAU,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,KAAK,QAAQ,CAAC;gBAC1F,IAAI,SAAS,EAAE,CAAC;oBACZ,OAAO,SAAS,CAAC,GAAG,CAAC,CAAC;gBAC1B,CAAC;gBACD,OAAO,CACH,KAAC,YAAY,IAAgB,OAAO,EAAE,GAAG,EAAE,CAAC,WAAW,CAAC,GAAG,CAAC,EAC9C,YAAY,EAAE,YAAY,EAC1B,MAAM,EAAE,MAAM,EACd,GAAG,EAAE,GAAG,EAAE,QAAQ,EAAE,UAAU,IAHzB,QAAQ,CAGoB,CAClD,CAAA;YACL,CAAC,CAAC,EACD,QAAQ,IACD,CACX,CAAA;AACL,CAAC;AACD,cAAc,CAAC,WAAW,GAAG,gBAAgB,CAAC;AAC9C,eAAe,cAAc,CAAA"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { DataTableTHProps } from "./types";
|
|
2
|
+
declare function DataTableTH<T = unknown>({ field, className, children, ...rest }: DataTableTHProps<T>): import("react/jsx-runtime").JSX.Element;
|
|
3
|
+
declare namespace DataTableTH {
|
|
4
|
+
var displayName: string;
|
|
5
|
+
}
|
|
6
|
+
export default DataTableTH;
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import classNames from "classnames";
|
|
3
|
+
function DataTableTH({ field, className, children, ...rest }) {
|
|
4
|
+
const thClassName = classNames({ [`text-${field.align}`]: !!field.align }, className);
|
|
5
|
+
return (_jsx("th", { className: thClassName, scope: "col", ...rest, children: children ?? field.title }));
|
|
6
|
+
}
|
|
7
|
+
DataTableTH.displayName = 'DataTableTH';
|
|
8
|
+
export default DataTableTH;
|
|
9
|
+
//# sourceMappingURL=DataTableTH.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DataTableTH.js","sourceRoot":"","sources":["../src/DataTableTH.tsx"],"names":[],"mappings":";AACA,OAAO,UAAU,MAAM,YAAY,CAAC;AAIpC,SAAS,WAAW,CAAc,EACmB,KAAK,EACL,SAAS,EACT,QAAQ,EACR,GAAG,IAAI,EACW;IACnE,MAAM,WAAW,GAAG,UAAU,CAAC,EAAC,CAAC,QAAQ,KAAK,CAAC,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,KAAK,EAAC,EAAE,SAAS,CAAC,CAAC;IACpF,OAAO,CACH,aAAI,SAAS,EAAE,WAAW,EAAE,KAAK,EAAC,KAAK,KAAK,IAAI,YAC3C,QAAQ,IAAI,KAAK,CAAC,KAAK,GACvB,CACR,CAAA;AACL,CAAC;AACD,WAAW,CAAC,WAAW,GAAG,aAAa,CAAC;AACxC,eAAe,WAAW,CAAC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { RowsPerPageProps } from "./types";
|
|
2
|
+
export declare const defaultRowsPerPageValues: number[];
|
|
3
|
+
declare function RowsPerPage({ value, pageValues, size, label, className, onChange, ...rest }: RowsPerPageProps): import("react/jsx-runtime").JSX.Element;
|
|
4
|
+
declare namespace RowsPerPage {
|
|
5
|
+
var displayName: string;
|
|
6
|
+
}
|
|
7
|
+
export default RowsPerPage;
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { useId } from 'react';
|
|
3
|
+
import classNames from "classnames";
|
|
4
|
+
export const defaultRowsPerPageValues = [10, 25, 50, 100, 250, 500, 1000];
|
|
5
|
+
function RowsPerPage({ value, pageValues = defaultRowsPerPageValues, size, label, className, onChange, ...rest }) {
|
|
6
|
+
const id = useId();
|
|
7
|
+
const changeHandler = (ev) => onChange(Number(ev.target.value));
|
|
8
|
+
const selectClassName = className ?? classNames('form-select', { [`form-select-${size}`]: !!size });
|
|
9
|
+
const inputGroupClassName = classNames('input-group', {
|
|
10
|
+
[`input-group-${size}`]: !!size,
|
|
11
|
+
});
|
|
12
|
+
return (_jsxs("div", { className: inputGroupClassName, children: [_jsx("label", { className: "input-group-text", htmlFor: id, children: label ?? 'Rows' }), _jsx("select", { className: selectClassName, id: id, value: value, onChange: changeHandler, ...rest, children: pageValues.map(value => (_jsx("option", { value: value, children: value }, value))) })] }, value));
|
|
13
|
+
}
|
|
14
|
+
RowsPerPage.displayName = 'RowsPerPage';
|
|
15
|
+
export default RowsPerPage;
|
|
16
|
+
//# sourceMappingURL=RowsPerPage.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"RowsPerPage.js","sourceRoot":"","sources":["../src/RowsPerPage.tsx"],"names":[],"mappings":";AAAA,OAAc,EAAc,KAAK,EAAC,MAAM,OAAO,CAAC;AAChD,OAAO,UAAU,MAAM,YAAY,CAAC;AAGpC,MAAM,CAAC,MAAM,wBAAwB,GAAa,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC;AAGpF,SAAS,WAAW,CAAC,EACI,KAAK,EACL,UAAU,GAAG,wBAAwB,EACrC,IAAI,EACJ,KAAK,EACL,SAAS,EACT,QAAQ,EACR,GAAG,IAAI,EACQ;IACpC,MAAM,EAAE,GAAG,KAAK,EAAE,CAAC;IACnB,MAAM,aAAa,GAAG,CAAC,EAAkC,EAAE,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;IAChG,MAAM,eAAe,GAAG,SAAS,IAAI,UAAU,CAAC,aAAa,EAAE,EAAC,CAAC,eAAe,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC,IAAI,EAAC,CAAC,CAAC;IAClG,MAAM,mBAAmB,GAAG,UAAU,CAAC,aAAa,EAAE;QAClD,CAAC,eAAe,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC,IAAI;KAClC,CAAC,CAAA;IAEF,OAAO,CACH,eAAK,SAAS,EAAE,mBAAmB,aAC/B,gBAAO,SAAS,EAAC,kBAAkB,EAAC,OAAO,EAAE,EAAE,YAAG,KAAK,IAAI,MAAM,GAAS,EAC1E,iBAAQ,SAAS,EAAE,eAAe,EAAE,EAAE,EAAE,EAAE,EAClC,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,aAAa,KAAM,IAAI,YAClD,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CACrB,iBAAoB,KAAK,EAAE,KAAK,YAAG,KAAK,IAA3B,KAAK,CAAgC,CACrD,CAAC,GACG,KAP6B,KAAK,CAQzC,CACT,CAAA;AACL,CAAC;AAED,WAAW,CAAC,WAAW,GAAG,aAAa,CAAC;AACxC,eAAe,WAAW,CAAC"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { SortableTableProps } from "./types";
|
|
2
|
+
declare function SortableTable<T = unknown>({ fields, data, currentSort, onChangeSort, keyField, size, sticky, rowClassName, renderRow, onSelectRow, selected, className, tfoot, children, ...rest }: SortableTableProps<T>): import("react/jsx-runtime").JSX.Element;
|
|
3
|
+
declare namespace SortableTable {
|
|
4
|
+
var displayName: string;
|
|
5
|
+
}
|
|
6
|
+
export default SortableTable;
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import classNames from "classnames";
|
|
3
|
+
import SortableTableHead from "./SortableTableHead";
|
|
4
|
+
import DataTableTBody from "./DataTableTBody";
|
|
5
|
+
import { noop } from "./utils";
|
|
6
|
+
import Table from "./Table";
|
|
7
|
+
function SortableTable({ fields, data, currentSort, onChangeSort, keyField, size = '', sticky, rowClassName, renderRow, onSelectRow = noop, selected = '', className = '', tfoot, children, ...rest }) {
|
|
8
|
+
const tableClassName = classNames('table', className, {
|
|
9
|
+
[`table-${size}`]: !!size,
|
|
10
|
+
});
|
|
11
|
+
return (_jsxs(Table, { className: tableClassName, sticky: sticky, ...rest, children: [_jsx(SortableTableHead, { currentSort: currentSort, fields: fields, onChangeSort: onChangeSort }), !!data.length && (_jsx(DataTableTBody, { fields: fields, data: data, keyField: keyField, rowClassName: rowClassName, renderRow: renderRow, onSelectRow: onSelectRow, selected: selected })), children, tfoot] }));
|
|
12
|
+
}
|
|
13
|
+
SortableTable.displayName = 'SortableTable';
|
|
14
|
+
export default SortableTable;
|
|
15
|
+
//# sourceMappingURL=SortableTable.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SortableTable.js","sourceRoot":"","sources":["../src/SortableTable.tsx"],"names":[],"mappings":";AACA,OAAO,UAAU,MAAM,YAAY,CAAC;AACpC,OAAO,iBAAiB,MAAM,qBAAqB,CAAC;AACpD,OAAO,cAAc,MAAM,kBAAkB,CAAC;AAE9C,OAAO,EAAC,IAAI,EAAC,MAAM,SAAS,CAAC;AAC7B,OAAO,KAAK,MAAM,SAAS,CAAC;AAG5B,SAAS,aAAa,CAAc,EACI,MAAM,EACN,IAAI,EACJ,WAAW,EACX,YAAY,EACZ,QAAQ,EACR,IAAI,GAAG,EAAE,EACT,MAAM,EACN,YAAY,EACZ,SAAS,EACT,WAAW,GAAG,IAAI,EAClB,QAAQ,GAAG,EAAE,EACb,SAAS,GAAG,EAAE,EACd,KAAK,EACL,QAAQ,EACR,GAAG,IAAI,EACa;IACxD,MAAM,cAAc,GAAG,UAAU,CAAC,OAAO,EAAE,SAAS,EAAE;QAClD,CAAC,SAAS,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC,IAAI;KAC5B,CAAC,CAAA;IAEF,OAAO,CACH,MAAC,KAAK,IAAC,SAAS,EAAE,cAAc,EAAE,MAAM,EAAE,MAAM,KAAM,IAAI,aACtD,KAAC,iBAAiB,IAAC,WAAW,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,EAAE,YAAY,EAAE,YAAY,GAAG,EACzF,CAAC,CAAC,IAAI,CAAC,MAAM,IAAI,CACd,KAAC,cAAc,IAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,YAAY,EAAE,YAAY,EAC1E,SAAS,EAAE,SAAS,EACpB,WAAW,EAAE,WAAW,EAAE,QAAQ,EAAE,QAAQ,GAAG,CAClE,EACA,QAAQ,EACR,KAAK,IACF,CACX,CAAA;AACL,CAAC;AAED,aAAa,CAAC,WAAW,GAAG,eAAe,CAAC;AAC5C,eAAe,aAAa,CAAC"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { SortableTableHeadProps } from "./types";
|
|
2
|
+
declare function SortableTableHead<T = unknown>({ currentSort, fields, onChangeSort, }: SortableTableHeadProps<T>): import("react/jsx-runtime").JSX.Element;
|
|
3
|
+
declare namespace SortableTableHead {
|
|
4
|
+
var displayName: string;
|
|
5
|
+
}
|
|
6
|
+
export default SortableTableHead;
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import SortableTableTH from "./SortableTableTH";
|
|
3
|
+
import classNames from "classnames";
|
|
4
|
+
function SortableTableHead({ currentSort, fields, onChangeSort, }) {
|
|
5
|
+
const { field, ascending } = currentSort;
|
|
6
|
+
return (_jsx("thead", { children: _jsx("tr", { children: fields.map((tableField, index) => (_jsx(SortableTableTH, { field: tableField, sorted: field === tableField.field, ascending: ascending, className: classNames(typeof tableField.className === 'function'
|
|
7
|
+
? { [`text-${tableField.align}`]: !!tableField.align }
|
|
8
|
+
: tableField.className), onClick: onChangeSort }, index))) }) }));
|
|
9
|
+
}
|
|
10
|
+
SortableTableHead.displayName = 'SortableTableHead';
|
|
11
|
+
export default SortableTableHead;
|
|
12
|
+
//# sourceMappingURL=SortableTableHead.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SortableTableHead.js","sourceRoot":"","sources":["../src/SortableTableHead.tsx"],"names":[],"mappings":";AACA,OAAO,eAAe,MAAM,mBAAmB,CAAC;AAChD,OAAO,UAAU,MAAM,YAAY,CAAC;AAIpC,SAAS,iBAAiB,CAAc,EACmB,WAAW,EACX,MAAM,EACN,YAAY,GACY;IAC/E,MAAM,EAAC,KAAK,EAAE,SAAS,EAAC,GAAG,WAAW,CAAC;IACvC,OAAO,CACH,0BACA,uBACK,MAAM,CAAC,GAAG,CAAC,CAAC,UAAU,EAAE,KAAK,EAAE,EAAE,CAAC,CAC/B,KAAC,eAAe,IAAgB,KAAK,EAAE,UAAU,EAChC,MAAM,EAAE,KAAK,KAAK,UAAU,CAAC,KAAK,EAAE,SAAS,EAAE,SAAS,EACxD,SAAS,EAAE,UAAU,CACtB,OAAO,UAAU,CAAC,SAAS,KAAK,UAAU;oBACtC,CAAC,CAAC,EAAC,CAAC,QAAQ,UAAU,CAAC,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC,UAAU,CAAC,KAAK,EAAC;oBACpD,CAAC,CAAC,UAAU,CAAC,SAAS,CAC7B,EAAE,OAAO,EAAE,YAAY,IANX,KAAK,CAMS,CAC1C,CAAC,GACD,GACG,CACX,CAAA;AACL,CAAC;AAED,iBAAiB,CAAC,WAAW,GAAG,mBAAmB,CAAC;AACpD,eAAe,iBAAiB,CAAC"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { SortableTableTHProps } from "./types";
|
|
2
|
+
declare function SortableTableTH<T = unknown>({ field, sorted, ascending, className, onClick }: SortableTableTHProps<T>): import("react/jsx-runtime").JSX.Element;
|
|
3
|
+
declare namespace SortableTableTH {
|
|
4
|
+
var displayName: string;
|
|
5
|
+
}
|
|
6
|
+
export default SortableTableTH;
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import classNames from "classnames";
|
|
3
|
+
import DataTableTH from "./DataTableTH";
|
|
4
|
+
import styled from '@emotion/styled';
|
|
5
|
+
const flexJustifyContent = (align) => {
|
|
6
|
+
if (!align) {
|
|
7
|
+
return 'flex-start';
|
|
8
|
+
}
|
|
9
|
+
switch (align) {
|
|
10
|
+
case 'end':
|
|
11
|
+
return 'flex-end';
|
|
12
|
+
default:
|
|
13
|
+
return 'center';
|
|
14
|
+
}
|
|
15
|
+
};
|
|
16
|
+
const FieldTitle = styled.div `
|
|
17
|
+
display: flex;
|
|
18
|
+
width: 100%;
|
|
19
|
+
flex-direction: ${props => props.align === 'end' ? 'row-reverse' : 'row'};
|
|
20
|
+
justify-content: ${props => flexJustifyContent(props.align)};
|
|
21
|
+
.sort-icon {
|
|
22
|
+
flex-grow: ${props => props.align === 'end' ? '1' : '0'};
|
|
23
|
+
opacity: ${props => props.sorted ? 1 : 0};
|
|
24
|
+
}
|
|
25
|
+
&:hover .sort-icon {
|
|
26
|
+
color: ${props => props.sorted ? 'unset' : 'var(--bs-primary)'} ;
|
|
27
|
+
opacity: 0.75;
|
|
28
|
+
transition: opacity 0.2s;
|
|
29
|
+
}
|
|
30
|
+
`;
|
|
31
|
+
function SortableTableTH({ field, sorted, ascending, className, onClick }) {
|
|
32
|
+
if (!field.sortable) {
|
|
33
|
+
return (_jsx(DataTableTH, { field: field, className: className }));
|
|
34
|
+
}
|
|
35
|
+
const { className: _thClassName, ...thProps } = field.thProps ?? {};
|
|
36
|
+
const thClassName = classNames(className, _thClassName, { [`text-${field.align}`]: !!field.align });
|
|
37
|
+
const clickHandler = () => {
|
|
38
|
+
onClick({ field: field.field, ascending: !sorted ? true : !ascending });
|
|
39
|
+
};
|
|
40
|
+
const iconClassName = {
|
|
41
|
+
'bi-arrow-down': ascending,
|
|
42
|
+
'bi-arrow-up': !ascending,
|
|
43
|
+
};
|
|
44
|
+
return (_jsx("th", { ...thProps, className: classNames("sortable", thClassName), scope: "col", onClick: clickHandler, children: _jsxs(FieldTitle, { sorted: sorted, align: field.align, children: [_jsx("div", { className: "field-title", children: field.title }), _jsx("div", { className: classNames('me-1 sort-icon', iconClassName) })] }) }));
|
|
45
|
+
}
|
|
46
|
+
SortableTableTH.displayName = 'SortableTableTH';
|
|
47
|
+
export default SortableTableTH;
|
|
48
|
+
//# sourceMappingURL=SortableTableTH.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SortableTableTH.js","sourceRoot":"","sources":["../src/SortableTableTH.tsx"],"names":[],"mappings":";AACA,OAAO,UAAU,MAAM,YAAY,CAAC;AACpC,OAAO,WAAW,MAAM,eAAe,CAAC;AAExC,OAAO,MAAM,MAAM,iBAAiB,CAAC;AAErC,MAAM,kBAAkB,GAAG,CAAC,KAAmB,EAAE,EAAE;IAC/C,IAAI,CAAC,KAAK,EAAE,CAAC;QACT,OAAO,YAAY,CAAC;IACxB,CAAC;IACD,QAAQ,KAAK,EAAE,CAAC;QACZ,KAAK,KAAK;YACN,OAAO,UAAU,CAAC;QACtB;YACI,OAAO,QAAQ,CAAC;IACxB,CAAC;AACL,CAAC,CAAA;AAMD,MAAM,UAAU,GAAG,MAAM,CAAC,GAAG,CAAiB;;;sBAGxB,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,KAAK,KAAK,KAAK,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,KAAK;uBACrD,KAAK,CAAC,EAAE,CAAC,kBAAkB,CAAC,KAAK,CAAC,KAAK,CAAC;;qBAE1C,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,KAAK,KAAK,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG;mBAC5C,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;;;iBAG/B,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,mBAAmB;;;;CAIrE,CAAA;AAED,SAAS,eAAe,CAAc,EACI,KAAK,EACL,MAAM,EACN,SAAS,EACT,SAAS,EACT,OAAO,EACe;IAC5D,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC;QAClB,OAAO,CAAC,KAAC,WAAW,IAAC,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,SAAS,GAAG,CAAC,CAAA;IAC/D,CAAC;IAED,MAAM,EAAC,SAAS,EAAE,YAAY,EAAE,GAAG,OAAO,EAAC,GAAG,KAAK,CAAC,OAAO,IAAI,EAAE,CAAC;IAClE,MAAM,WAAW,GAAG,UAAU,CAC1B,SAAS,EACT,YAAY,EACZ,EAAC,CAAC,QAAQ,KAAK,CAAC,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,KAAK,EAAC,CAC3C,CAAC;IAEF,MAAM,YAAY,GAAG,GAAG,EAAE;QACtB,OAAO,CAAC,EAAC,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,SAAS,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS,EAAC,CAAC,CAAC;IAC1E,CAAC,CAAA;IAED,MAAM,aAAa,GAAG;QAClB,eAAe,EAAE,SAAS;QAC1B,aAAa,EAAE,CAAC,SAAS;KAC5B,CAAA;IAED,OAAO,CACH,gBAAQ,OAAO,EAAE,SAAS,EAAE,UAAU,CAAC,UAAU,EAAE,WAAW,CAAC,EAAE,KAAK,EAAC,KAAK,EAAC,OAAO,EAAE,YAAY,YAC9F,MAAC,UAAU,IAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,aAC1C,cAAK,SAAS,EAAC,aAAa,YAAE,KAAK,CAAC,KAAK,GAAO,EAChD,cAAK,SAAS,EAAE,UAAU,CAAC,gBAAgB,EAAE,aAAa,CAAC,GAAG,IACrD,GACZ,CACR,CAAA;AACL,CAAC;AAED,eAAe,CAAC,WAAW,GAAG,iBAAiB,CAAC;AAChD,eAAe,eAAe,CAAC"}
|
package/dist/Table.d.ts
ADDED
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import React, { TableHTMLAttributes } from 'react';
|
|
2
|
+
import { DataTableProps } from "./types";
|
|
3
|
+
export type StyledTableProps = TableHTMLAttributes<HTMLTableElement> & Pick<DataTableProps, 'sticky' | 'responsive'>;
|
|
4
|
+
declare const _default: React.ForwardRefExoticComponent<React.TableHTMLAttributes<HTMLTableElement> & Pick<DataTableProps<unknown>, "sticky" | "responsive"> & React.RefAttributes<HTMLTableElement>>;
|
|
5
|
+
export default _default;
|
package/dist/Table.js
ADDED
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import React from 'react';
|
|
3
|
+
import styled from "@emotion/styled";
|
|
4
|
+
import classNames from "classnames";
|
|
5
|
+
const StyledTable = styled.table `
|
|
6
|
+
--table-sticky-top: ${props => props.sticky ? '0' : undefined};
|
|
7
|
+
|
|
8
|
+
thead {
|
|
9
|
+
tr:nth-of-type(1) td,
|
|
10
|
+
tr:nth-of-type(1) th {
|
|
11
|
+
top: var(--table-sticky-top, unset);
|
|
12
|
+
position: ${props => props.sticky ? "sticky" : "unset"};
|
|
13
|
+
z-index: ${props => props.sticky ? 10 : "unset"};
|
|
14
|
+
background: ${props => props.sticky ? "linear-gradient(var(--bs-table-bg) 75%, rgba(var(--bs-secondary-bg-rgb), 0.9))" : "unset"};
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
`;
|
|
18
|
+
export default React.forwardRef(function Table({ sticky, responsive, children, ...rest }, ref) {
|
|
19
|
+
if (responsive) {
|
|
20
|
+
const className = classNames({
|
|
21
|
+
'table-responsive': responsive === true,
|
|
22
|
+
[`table-responsive-${responsive}`]: responsive !== true,
|
|
23
|
+
});
|
|
24
|
+
return (_jsx("div", { className: className, children: _jsx(StyledTable, { ref: ref, ...rest, children: children }) }));
|
|
25
|
+
}
|
|
26
|
+
return (_jsx(StyledTable, { sticky: sticky, ref: ref, ...rest, children: children }));
|
|
27
|
+
});
|
|
28
|
+
//# sourceMappingURL=Table.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Table.js","sourceRoot":"","sources":["../src/Table.tsx"],"names":[],"mappings":";AAAA,OAAO,KAA4B,MAAM,OAAO,CAAC;AACjD,OAAO,MAAM,MAAM,iBAAiB,CAAC;AAErC,OAAO,UAAU,MAAM,YAAY,CAAC;AAIpC,MAAM,WAAW,GAAG,MAAM,CAAC,KAAK,CAAkB;0BACxB,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS;;;;;;wBAMzC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,OAAO;uBAC3C,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO;0BACjC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,gFAAgF,CAAC,CAAC,CAAC,OAAO;;;CAG3I,CAAA;AAED,eAAe,KAAK,CAAC,UAAU,CAC3B,SAAS,KAAK,CAAC,EACI,MAAM,EACN,UAAU,EACV,QAAQ,EACR,GAAG,IAAI,EACV,EAAE,GAAG;IACjB,IAAI,UAAU,EAAE,CAAC;QACb,MAAM,SAAS,GAAG,UAAU,CAAC;YACzB,kBAAkB,EAAE,UAAU,KAAK,IAAI;YACvC,CAAC,oBAAoB,UAAU,EAAE,CAAC,EAAE,UAAU,KAAK,IAAI;SAC1D,CAAC,CAAA;QACF,OAAO,CACH,cAAK,SAAS,EAAE,SAAS,YACrB,KAAC,WAAW,IAAC,GAAG,EAAE,GAAG,KAAM,IAAI,YAAG,QAAQ,GAAe,GACvD,CACT,CAAA;IACL,CAAC;IACD,OAAO,CACH,KAAC,WAAW,IAAC,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,GAAG,KAAM,IAAI,YAAG,QAAQ,GAAe,CAC5E,CAAA;AACL,CAAC,CAAC,CAAA"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { TablePaginationProps } from "./types";
|
|
2
|
+
declare function TablePagination({ page, rowsPerPage, onChangePage, count, size, showFirst, showLast, className, rowsPerPageProps, ...rest }: TablePaginationProps): import("react/jsx-runtime").JSX.Element;
|
|
3
|
+
declare namespace TablePagination {
|
|
4
|
+
var displayname: string;
|
|
5
|
+
}
|
|
6
|
+
export default TablePagination;
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import RowsPerPage from "./RowsPerPage";
|
|
3
|
+
import classNames from "classnames";
|
|
4
|
+
function TablePagination({ page, rowsPerPage, onChangePage, count, size, showFirst, showLast, className, rowsPerPageProps, ...rest }) {
|
|
5
|
+
const first = count === 0 ? 0 : (page * rowsPerPage) + 1;
|
|
6
|
+
const last = Math.min(page * rowsPerPage + rowsPerPage, count);
|
|
7
|
+
const lastPage = rowsPerPage === 0 ? 0 : Math.floor((count - 1) / rowsPerPage);
|
|
8
|
+
const buttonClassName = classNames("btn btn-link", { [`btn-${size}`]: !!size });
|
|
9
|
+
return (_jsxs("div", { className: classNames("row g-3 justify-content-end", className), ...rest, children: [!!rowsPerPageProps && (_jsx("div", { className: "col-auto", children: _jsx(RowsPerPage, { ...rowsPerPageProps, value: rowsPerPage, size: size }) })), _jsx("div", { className: "col-auto", children: _jsxs("div", { className: "row g-3 flex-nowrap align-items-baseline", children: [_jsxs("div", { className: "col-auto", children: [first, "-", last, " of ", count] }), showFirst && (_jsx("div", { className: "col-auto", children: _jsx("button", { className: buttonClassName, disabled: page === 0, onClick: () => onChangePage(0), "aria-label": "First page", children: _jsx("span", { className: "bi-chevron-bar-left", "aria-hidden": "true" }) }) })), _jsx("div", { className: "col-auto", children: _jsx("button", { className: buttonClassName, disabled: page === 0, onClick: () => onChangePage(page - 1), "aria-label": "Previous page", children: _jsx("span", { className: "bi-chevron-left", "aria-hidden": "true" }) }) }), _jsx("div", { className: "col-auto", children: _jsx("button", { className: buttonClassName, disabled: page >= lastPage, onClick: () => onChangePage(page + 1), "aria-label": "Next page", children: _jsx("span", { className: "bi-chevron-right", "aria-hidden": "true" }) }) }), showLast && (_jsx("div", { className: "col-auto", children: _jsx("button", { className: buttonClassName, disabled: page >= lastPage, onClick: () => onChangePage(lastPage), "aria-label": "Last page", children: _jsx("span", { className: "bi-chevron-bar-right", "aria-hidden": "true" }) }) }))] }) })] }));
|
|
10
|
+
}
|
|
11
|
+
TablePagination.displayname = 'TablePagination';
|
|
12
|
+
export default TablePagination;
|
|
13
|
+
//# sourceMappingURL=TablePagination.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TablePagination.js","sourceRoot":"","sources":["../src/TablePagination.tsx"],"names":[],"mappings":";AACA,OAAO,WAAW,MAAM,eAAe,CAAC;AACxC,OAAO,UAAU,MAAM,YAAY,CAAC;AAGpC,SAAS,eAAe,CAAC,EACI,IAAI,EACJ,WAAW,EACX,YAAY,EACZ,KAAK,EACL,IAAI,EACJ,SAAS,EACT,QAAQ,EACR,SAAS,EACT,gBAAgB,EAChB,GAAG,IAAI,EACY;IAE5C,MAAM,KAAK,GAAG,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC;IACzD,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,GAAG,WAAW,GAAG,WAAW,EAAE,KAAK,CAAC,CAAC;IAC/D,MAAM,QAAQ,GAAG,WAAW,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,GAAG,WAAW,CAAC,CAAC;IAE/E,MAAM,eAAe,GAAG,UAAU,CAAC,cAAc,EAAE,EAAC,CAAC,OAAO,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC,IAAI,EAAC,CAAC,CAAC;IAE9E,OAAO,CACH,eAAK,SAAS,EAAE,UAAU,CAAC,6BAA6B,EAAE,SAAS,CAAC,KAAM,IAAI,aACzE,CAAC,CAAC,gBAAgB,IAAI,CACnB,cAAK,SAAS,EAAC,UAAU,YACrB,KAAC,WAAW,OAAK,gBAAgB,EAAE,KAAK,EAAE,WAAW,EAAE,IAAI,EAAE,IAAI,GAAG,GAClE,CACT,EACD,cAAK,SAAS,EAAC,UAAU,YACrB,eAAK,SAAS,EAAC,0CAA0C,aACrD,eAAK,SAAS,EAAC,UAAU,aACpB,KAAK,OAAG,IAAI,UAAM,KAAK,IACtB,EACL,SAAS,IAAI,CACV,cAAK,SAAS,EAAC,UAAU,YACrB,iBAAQ,SAAS,EAAE,eAAe,EAAE,QAAQ,EAAE,IAAI,KAAK,CAAC,EAChD,OAAO,EAAE,GAAG,EAAE,CAAC,YAAY,CAAC,CAAC,CAAC,gBAAa,YAAY,YAC3D,eAAM,SAAS,EAAC,qBAAqB,iBAAa,MAAM,GAAE,GACrD,GACP,CACT,EACD,cAAK,SAAS,EAAC,UAAU,YACrB,iBAAQ,SAAS,EAAE,eAAe,EAAE,QAAQ,EAAE,IAAI,KAAK,CAAC,EAChD,OAAO,EAAE,GAAG,EAAE,CAAC,YAAY,CAAC,IAAI,GAAG,CAAC,CAAC,gBAAa,eAAe,YACrE,eAAM,SAAS,EAAC,iBAAiB,iBAAa,MAAM,GAAE,GACjD,GACP,EACN,cAAK,SAAS,EAAC,UAAU,YACrB,iBAAQ,SAAS,EAAE,eAAe,EAAE,QAAQ,EAAE,IAAI,IAAI,QAAQ,EACtD,OAAO,EAAE,GAAG,EAAE,CAAC,YAAY,CAAC,IAAI,GAAG,CAAC,CAAC,gBAAa,WAAW,YACjE,eAAM,SAAS,EAAC,kBAAkB,iBAAa,MAAM,GAAE,GAClD,GACP,EACL,QAAQ,IAAI,CACT,cAAK,SAAS,EAAC,UAAU,YACrB,iBAAQ,SAAS,EAAE,eAAe,EAAE,QAAQ,EAAE,IAAI,IAAI,QAAQ,EACtD,OAAO,EAAE,GAAG,EAAE,CAAC,YAAY,CAAC,QAAQ,CAAC,gBAAa,WAAW,YACjE,eAAM,SAAS,EAAC,sBAAsB,iBAAa,MAAM,GAAE,GACtD,GACP,CACT,IACC,GACJ,IACJ,CACT,CAAA;AACL,CAAC;AAED,eAAe,CAAC,WAAW,GAAG,iBAAiB,CAAC;AAChD,eAAe,eAAe,CAAA"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
export { default as DataTable } from './DataTable';
|
|
2
|
+
export { default as DataTableRow } from './DataTableRow';
|
|
3
|
+
export { default as DataTableTBody } from './DataTableTBody';
|
|
4
|
+
export { default as DataTableTH } from './DataTableTH';
|
|
5
|
+
export { default as SortableTable } from './SortableTable';
|
|
6
|
+
export { default as SortableTableHead } from './SortableTableHead';
|
|
7
|
+
export { default as SortableTableTH } from './SortableTableTH';
|
|
8
|
+
export { default as RowsPerPage, defaultRowsPerPageValues } from './RowsPerPage';
|
|
9
|
+
export { default as TablePagination } from './TablePagination';
|
|
10
|
+
export type { DataTableHeadProps, DataTableField, DataTableTHProps, DataTableClassNames, DataTableProps, SortableTableField, DataTableRowProps, DataTableTBodyProps, SortableTableTHProps, SortableTableHeadProps, SortProps, SortableTableProps, UISize, UIFlexAlign, TablePaginationProps, RowsPerPageProps } from './types';
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
export { default as DataTable } from './DataTable';
|
|
2
|
+
export { default as DataTableRow } from './DataTableRow';
|
|
3
|
+
export { default as DataTableTBody } from './DataTableTBody';
|
|
4
|
+
export { default as DataTableTH } from './DataTableTH';
|
|
5
|
+
export { default as SortableTable } from './SortableTable';
|
|
6
|
+
export { default as SortableTableHead } from './SortableTableHead';
|
|
7
|
+
export { default as SortableTableTH } from './SortableTableTH';
|
|
8
|
+
export { default as RowsPerPage, defaultRowsPerPageValues } from './RowsPerPage';
|
|
9
|
+
export { default as TablePagination } from './TablePagination';
|
|
10
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAC,OAAO,IAAI,SAAS,EAAC,MAAM,aAAa,CAAC;AACjD,OAAO,EAAC,OAAO,IAAI,YAAY,EAAC,MAAM,gBAAgB,CAAC;AACvD,OAAO,EAAC,OAAO,IAAI,cAAc,EAAC,MAAM,kBAAkB,CAAC;AAC3D,OAAO,EAAC,OAAO,IAAI,WAAW,EAAC,MAAM,eAAe,CAAC;AACrD,OAAO,EAAC,OAAO,IAAI,aAAa,EAAC,MAAM,iBAAiB,CAAC;AACzD,OAAO,EAAC,OAAO,IAAI,iBAAiB,EAAC,MAAM,qBAAqB,CAAC;AACjE,OAAO,EAAC,OAAO,IAAI,eAAe,EAAC,MAAM,mBAAmB,CAAC;AAC7D,OAAO,EAAC,OAAO,IAAI,WAAW,EAAE,wBAAwB,EAAC,MAAM,eAAe,CAAC;AAC/E,OAAO,EAAC,OAAO,IAAI,eAAe,EAAC,MAAM,mBAAmB,CAAC"}
|
package/dist/types.d.ts
ADDED
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
import React, { HTMLAttributes, ReactNode, TableHTMLAttributes } from 'react';
|
|
2
|
+
import classNames from "classnames";
|
|
3
|
+
export interface SortProps<T = unknown> {
|
|
4
|
+
field: keyof T;
|
|
5
|
+
ascending: boolean;
|
|
6
|
+
}
|
|
7
|
+
export type UISize = 'sm' | 'lg' | '';
|
|
8
|
+
export type UITableSize = UISize | 'xs';
|
|
9
|
+
export type DataTableClassNames<T = unknown> = string | classNames.Argument | ((row: T) => (string | classNames.Argument));
|
|
10
|
+
export type UIFlexAlign = 'start' | 'end' | 'center' | 'baseline' | 'stretch';
|
|
11
|
+
export interface DataTableField<T = unknown> {
|
|
12
|
+
id?: number | string;
|
|
13
|
+
field: keyof T;
|
|
14
|
+
title: ReactNode;
|
|
15
|
+
as?: 'td' | 'th';
|
|
16
|
+
align?: 'start' | 'center' | 'end';
|
|
17
|
+
render?: (row: T) => ReactNode;
|
|
18
|
+
className?: DataTableClassNames<T>;
|
|
19
|
+
colSpan?: number;
|
|
20
|
+
thProps?: Omit<DataTableTHProps<T>, 'field'>;
|
|
21
|
+
cellProps?: TableHTMLAttributes<HTMLTableCellElement>;
|
|
22
|
+
}
|
|
23
|
+
export interface SortableTableField<T = unknown> extends DataTableField<T> {
|
|
24
|
+
sortable?: boolean;
|
|
25
|
+
}
|
|
26
|
+
export interface DataTableProps<T = unknown> extends TableHTMLAttributes<HTMLTableElement> {
|
|
27
|
+
fields: DataTableField<T>[];
|
|
28
|
+
data: T[];
|
|
29
|
+
keyField: keyof T | ((row: T) => string | number);
|
|
30
|
+
size?: UITableSize;
|
|
31
|
+
sticky?: boolean;
|
|
32
|
+
responsive?: boolean | "sm" | "md" | "lg" | "xl" | 'xxl';
|
|
33
|
+
rowClassName?: DataTableClassNames<T>;
|
|
34
|
+
renderRow?: (row: T) => React.ReactNode;
|
|
35
|
+
onSelectRow?: (row: T) => T | void;
|
|
36
|
+
selected?: string | number | ((row: T) => boolean);
|
|
37
|
+
tfoot?: React.ReactElement<HTMLTableSectionElement>;
|
|
38
|
+
tableHeadProps?: DataTableHeadProps<T>;
|
|
39
|
+
children?: ReactNode;
|
|
40
|
+
}
|
|
41
|
+
export interface DataTableCellProps<T = unknown> extends Omit<TableHTMLAttributes<HTMLTableCellElement>, 'className'> {
|
|
42
|
+
field: DataTableField<T>;
|
|
43
|
+
row: T;
|
|
44
|
+
as?: 'td' | 'th';
|
|
45
|
+
className?: string | classNames.Argument;
|
|
46
|
+
children?: React.ReactNode;
|
|
47
|
+
}
|
|
48
|
+
export interface DataTableTHProps<T = unknown> extends Omit<DataTableCellProps<T>, 'row'> {
|
|
49
|
+
as?: 'th';
|
|
50
|
+
}
|
|
51
|
+
export interface DataTableHeadProps<T = unknown> extends TableHTMLAttributes<HTMLTableSectionElement> {
|
|
52
|
+
fields: DataTableField<T>[];
|
|
53
|
+
}
|
|
54
|
+
export interface DataTableTBodyProps<T = unknown> extends TableHTMLAttributes<HTMLTableSectionElement> {
|
|
55
|
+
fields: DataTableField<T>[];
|
|
56
|
+
data: T[];
|
|
57
|
+
keyField: keyof T | ((row: T) => string | number);
|
|
58
|
+
rowClassName?: DataTableClassNames<T>;
|
|
59
|
+
renderRow?: (row: T) => React.ReactNode;
|
|
60
|
+
onSelectRow?: (row: T) => T | void;
|
|
61
|
+
selected?: string | number | ((row: T) => boolean);
|
|
62
|
+
children?: ReactNode;
|
|
63
|
+
}
|
|
64
|
+
export interface DataTableRowProps<T = unknown> extends Omit<TableHTMLAttributes<HTMLTableRowElement>, 'onClick'> {
|
|
65
|
+
rowClassName?: string | classNames.Argument | ((row: T) => string | classNames.Argument);
|
|
66
|
+
selected?: boolean;
|
|
67
|
+
fields: DataTableField<T>[];
|
|
68
|
+
row: T;
|
|
69
|
+
trRef?: React.Ref<HTMLTableRowElement>;
|
|
70
|
+
onClick?: (row?: T) => T | void;
|
|
71
|
+
}
|
|
72
|
+
export interface SortableTableProps<T = unknown> extends DataTableProps<T> {
|
|
73
|
+
currentSort: SortProps<T>;
|
|
74
|
+
onChangeSort: (sort: SortProps<T>) => void;
|
|
75
|
+
}
|
|
76
|
+
export interface SortableTableHeadProps<T = unknown> extends DataTableHeadProps<T> {
|
|
77
|
+
currentSort: SortProps<T>;
|
|
78
|
+
fields: SortableTableField<T>[];
|
|
79
|
+
onChangeSort: (sort: SortProps<T>) => void;
|
|
80
|
+
}
|
|
81
|
+
export interface SortableTableTHProps<T = unknown> extends Omit<DataTableTHProps<T>, 'onClick'> {
|
|
82
|
+
field: SortableTableField<T>;
|
|
83
|
+
sorted?: boolean;
|
|
84
|
+
ascending?: boolean;
|
|
85
|
+
onClick: (sort: SortProps<T>) => void;
|
|
86
|
+
}
|
|
87
|
+
export interface RowsPerPageProps extends Omit<HTMLAttributes<HTMLSelectElement>, 'onChange'> {
|
|
88
|
+
value: number;
|
|
89
|
+
pageValues?: number[];
|
|
90
|
+
label?: string;
|
|
91
|
+
size?: UISize;
|
|
92
|
+
className?: string;
|
|
93
|
+
onChange: (value: number) => void;
|
|
94
|
+
}
|
|
95
|
+
export interface TablePaginationProps extends HTMLAttributes<HTMLDivElement> {
|
|
96
|
+
page: number;
|
|
97
|
+
rowsPerPage: number;
|
|
98
|
+
onChangePage: (page: number) => void;
|
|
99
|
+
count: number;
|
|
100
|
+
size?: UISize;
|
|
101
|
+
showFirst?: boolean;
|
|
102
|
+
showLast?: boolean;
|
|
103
|
+
rowsPerPageProps?: Omit<RowsPerPageProps, 'value'>;
|
|
104
|
+
}
|
package/dist/types.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":""}
|
package/dist/utils.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function noop(): void;
|
package/dist/utils.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,IAAI,KAAG,CAAC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import globals from "globals";
|
|
2
|
+
import pluginJs from "@eslint/js";
|
|
3
|
+
import tseslint from "typescript-eslint";
|
|
4
|
+
import pluginReact from "eslint-plugin-react";
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
export default [
|
|
8
|
+
{files: ["**/*.{js,mjs,cjs,ts,jsx,tsx}"]},
|
|
9
|
+
{files: ["**/*.js"], languageOptions: {sourceType: "commonjs"}},
|
|
10
|
+
{languageOptions: { globals: globals.browser }},
|
|
11
|
+
pluginJs.configs.recommended,
|
|
12
|
+
...tseslint.configs.recommended,
|
|
13
|
+
pluginReact.configs.flat.recommended,
|
|
14
|
+
];
|
package/package.json
ADDED
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@chumsinc/sortable-tables",
|
|
3
|
+
"version": "2.0.6",
|
|
4
|
+
"main": "./dist/index.js",
|
|
5
|
+
"source": "./src/index.tsx",
|
|
6
|
+
"types": "./dist/index.d.ts",
|
|
7
|
+
"peerDependencies": {
|
|
8
|
+
"@emotion/styled": "^11.14.0",
|
|
9
|
+
"classnames": "*",
|
|
10
|
+
"react": ">=18.1.0",
|
|
11
|
+
"react-dom": ">=18.1.0"
|
|
12
|
+
},
|
|
13
|
+
"scripts": {
|
|
14
|
+
"clean": "rimraf dist/",
|
|
15
|
+
"compile": "tsc",
|
|
16
|
+
"dev": "webpack serve --config webpack.dev.mjs --progress",
|
|
17
|
+
"build": "npm run clean && npm run compile",
|
|
18
|
+
"version": "auto-changelog -p && git add CHANGELOG.md"
|
|
19
|
+
},
|
|
20
|
+
"browserslist": {
|
|
21
|
+
"production": [
|
|
22
|
+
">0.2%",
|
|
23
|
+
"not dead",
|
|
24
|
+
"not op_mini all"
|
|
25
|
+
],
|
|
26
|
+
"development": [
|
|
27
|
+
"last 1 chrome version",
|
|
28
|
+
"last 1 firefox version",
|
|
29
|
+
"last 1 safari version"
|
|
30
|
+
]
|
|
31
|
+
},
|
|
32
|
+
"devDependencies": {
|
|
33
|
+
"@emotion/styled": "^11.14.0",
|
|
34
|
+
"@eslint/js": "^9.8.0",
|
|
35
|
+
"@types/node": "^22.1.0",
|
|
36
|
+
"@types/numeral": "^2.0.3",
|
|
37
|
+
"@types/react": "^19.0.8",
|
|
38
|
+
"@types/react-dom": "^19.0.3",
|
|
39
|
+
"auto-changelog": "^2.4.0",
|
|
40
|
+
"bootstrap": "^5.3.2",
|
|
41
|
+
"bootstrap-icons": "^1.11.1",
|
|
42
|
+
"classnames": "^2.3.2",
|
|
43
|
+
"css-loader": "^7.1.2",
|
|
44
|
+
"eslint": "^9.8.0",
|
|
45
|
+
"eslint-plugin-react": "^7.35.0",
|
|
46
|
+
"globals": "^15.9.0",
|
|
47
|
+
"react": "^19.0.0",
|
|
48
|
+
"react-dom": "^19.0.0",
|
|
49
|
+
"rimraf": "^6.0.1",
|
|
50
|
+
"sass-loader": "^16.0.0",
|
|
51
|
+
"style-loader": "^4.0.0",
|
|
52
|
+
"terser-webpack-plugin": "^5.3.9",
|
|
53
|
+
"ts-loader": "^9.4.4",
|
|
54
|
+
"typescript": "^5.2.2",
|
|
55
|
+
"typescript-eslint": "^8.0.1",
|
|
56
|
+
"webpack": "^5.88.2",
|
|
57
|
+
"webpack-bundle-analyzer": "^4.9.1",
|
|
58
|
+
"webpack-cli": "^6.0.1",
|
|
59
|
+
"webpack-dev-server": "^5.0.4",
|
|
60
|
+
"webpack-manifest-plugin": "^5.0.0",
|
|
61
|
+
"webpack-merge": "^6.0.1"
|
|
62
|
+
},
|
|
63
|
+
"auto-changelog": {
|
|
64
|
+
"template": "changelog-template.hbs",
|
|
65
|
+
"unreleased": true,
|
|
66
|
+
"commitLimit": false,
|
|
67
|
+
"breakingPattern": "BREAKING CHANGE:"
|
|
68
|
+
},
|
|
69
|
+
"overrides": {
|
|
70
|
+
"eslint": "^9.8.0"
|
|
71
|
+
},
|
|
72
|
+
"description": "A sortable table module package for Chums, Inc.",
|
|
73
|
+
"repository": {
|
|
74
|
+
"type": "git",
|
|
75
|
+
"url": "git+https://github.com/ChumsInc/sortable-tables.git"
|
|
76
|
+
},
|
|
77
|
+
"author": "Steve Montgomery",
|
|
78
|
+
"license": "ISC",
|
|
79
|
+
"bugs": {
|
|
80
|
+
"url": "https://github.com/ChumsInc/sortable-tables/issues"
|
|
81
|
+
},
|
|
82
|
+
"homepage": "https://github.com/ChumsInc/sortable-tables#readme",
|
|
83
|
+
"directories": {
|
|
84
|
+
"test": "test"
|
|
85
|
+
},
|
|
86
|
+
"dependencies": {},
|
|
87
|
+
"keywords": [
|
|
88
|
+
"Bootstrap",
|
|
89
|
+
"Table"
|
|
90
|
+
]
|
|
91
|
+
}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
<!doctype html public "storage">
|
|
2
|
+
<html lang="en-us">
|
|
3
|
+
<head>
|
|
4
|
+
<meta charSet="utf-8"/>
|
|
5
|
+
<title>CHUMS!</title>
|
|
6
|
+
<meta name="description" content="Chums App "/>
|
|
7
|
+
<meta name="viewport" content="width=device-width, initial-scale=1"/>
|
|
8
|
+
<link href="https://fonts.googleapis.com/css2?family=Roboto+Mono:wght@100;300;400;700&family=Roboto:wght@100;300;400;700&display=swap"
|
|
9
|
+
rel="stylesheet">
|
|
10
|
+
<link rel="stylesheet" href="https://intranet.chums.com/node_modules/bootstrap-icons/font/bootstrap-icons.css">
|
|
11
|
+
<link rel="stylesheet" type="text/css"
|
|
12
|
+
href="https://intranet.chums.com/node_modules/bootstrap/dist/css/bootstrap.css">
|
|
13
|
+
|
|
14
|
+
<link rel="stylesheet" type="text/css" href="https://intranet.chums.com/css/intranet.css?v=1494436263">
|
|
15
|
+
<link rel="stylesheet" type="text/css" href="https://intranet.chums.com/css/chums.css">
|
|
16
|
+
<!-- <link rel="stylesheet" href="/public/styles.css"/>-->
|
|
17
|
+
<script src="https://intranet.chums.com/js/preferred-theme.js"></script>
|
|
18
|
+
</head>
|
|
19
|
+
<body>
|
|
20
|
+
<div id="app" class="container-fluid">
|
|
21
|
+
<strong>Loading</strong> the app.
|
|
22
|
+
</div>
|
|
23
|
+
<script src="main.js"></script>
|
|
24
|
+
<!--<script src="/chums.js"></script>-->
|
|
25
|
+
<script src="vendors.js"></script>
|
|
26
|
+
<script src="vendors-react.js"></script>
|
|
27
|
+
</body>
|
|
28
|
+
</html>
|