@chumsinc/sortable-tables 2.0.14 → 2.1.1

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.
Files changed (67) hide show
  1. package/CHANGELOG.md +24 -1
  2. package/dist/DataTable.d.ts +1 -1
  3. package/dist/DataTableCell.d.ts +3 -3
  4. package/dist/DataTableHead.d.ts +1 -1
  5. package/dist/DataTableRow.d.ts +1 -1
  6. package/dist/DataTableTBody.d.ts +1 -1
  7. package/dist/DataTableTH.d.ts +1 -1
  8. package/dist/RowsPerPage.d.ts +1 -1
  9. package/dist/SortableTable.d.ts +1 -1
  10. package/dist/SortableTableHead.d.ts +1 -1
  11. package/dist/SortableTableTH.d.ts +1 -1
  12. package/dist/Table.d.ts +2 -2
  13. package/dist/TablePagination.d.ts +1 -1
  14. package/dist/index.cjs.js +28 -0
  15. package/dist/index.cjs.js.map +1 -0
  16. package/dist/index.es.js +388 -0
  17. package/dist/index.es.js.map +1 -0
  18. package/dist/types.d.ts +5 -5
  19. package/eslint.config.mjs +22 -13
  20. package/{public/index.html → index.html} +2 -5
  21. package/package.json +25 -19
  22. package/src/DataTable.tsx +1 -1
  23. package/src/DataTableCell.tsx +1 -1
  24. package/src/DataTableHead.tsx +1 -1
  25. package/src/DataTableRow.tsx +1 -1
  26. package/src/DataTableTBody.tsx +1 -1
  27. package/src/DataTableTH.tsx +1 -1
  28. package/src/RowsPerPage.tsx +1 -1
  29. package/src/SortableTable.tsx +1 -1
  30. package/src/SortableTableHead.tsx +1 -1
  31. package/src/SortableTableTH.tsx +1 -1
  32. package/src/Table.tsx +1 -1
  33. package/src/TablePagination.tsx +1 -1
  34. package/src/types.ts +17 -17
  35. package/tsconfig.json +8 -6
  36. package/vite.config.ts +33 -0
  37. package/babel.config.mjs +0 -13
  38. package/dist/DataTable.js +0 -14
  39. package/dist/DataTable.js.map +0 -1
  40. package/dist/DataTableCell.js +0 -17
  41. package/dist/DataTableCell.js.map +0 -1
  42. package/dist/DataTableHead.js +0 -11
  43. package/dist/DataTableHead.js.map +0 -1
  44. package/dist/DataTableRow.js +0 -16
  45. package/dist/DataTableRow.js.map +0 -1
  46. package/dist/DataTableTBody.js +0 -15
  47. package/dist/DataTableTBody.js.map +0 -1
  48. package/dist/DataTableTH.js +0 -9
  49. package/dist/DataTableTH.js.map +0 -1
  50. package/dist/RowsPerPage.js +0 -16
  51. package/dist/RowsPerPage.js.map +0 -1
  52. package/dist/SortableTable.js +0 -14
  53. package/dist/SortableTable.js.map +0 -1
  54. package/dist/SortableTableHead.js +0 -12
  55. package/dist/SortableTableHead.js.map +0 -1
  56. package/dist/SortableTableTH.js +0 -48
  57. package/dist/SortableTableTH.js.map +0 -1
  58. package/dist/Table.js +0 -28
  59. package/dist/Table.js.map +0 -1
  60. package/dist/TablePagination.js +0 -13
  61. package/dist/TablePagination.js.map +0 -1
  62. package/dist/index.js +0 -10
  63. package/dist/index.js.map +0 -1
  64. package/dist/types.js +0 -2
  65. package/dist/types.js.map +0 -1
  66. package/webpack.common.mjs +0 -72
  67. package/webpack.dev.mjs +0 -35
package/CHANGELOG.md CHANGED
@@ -7,7 +7,30 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
7
7
 
8
8
  Generated by [`auto-changelog`](https://github.com/CookPete/auto-changelog).
9
9
 
10
- #### [v2.0.14](https://github.com/ChumsInc/sortable-tables/compare/v2.0.13...v2.0.14)
10
+ #### [v2.1.1](https://github.com/ChumsInc/sortable-tables/compare/v2.1.0...v2.1.1)
11
+
12
+ > 2025-11-04
13
+
14
+
15
+
16
+
17
+ ### Commits
18
+
19
+ - [`be79047`](https://github.com/ChumsInc/sortable-tables/commit/be79047541456eee2006706438b55aa61aed4fc1) chore: update types and dependencies
20
+
21
+ #### [v2.1.0](https://github.com/ChumsInc/sortable-tables/compare/v2.0.14...v2.1.0) - 2025-11-03
22
+
23
+ > 2025-11-03
24
+
25
+
26
+
27
+
28
+ ### Commits
29
+
30
+ - [`7b2a057`](https://github.com/ChumsInc/sortable-tables/commit/7b2a057454d2b46affe2cccfce060c7812065a23) migrate to vite library build
31
+ - [`ae562e9`](https://github.com/ChumsInc/sortable-tables/commit/ae562e9c631b94c367f87ff5df70e849ee0405a2) migrate to vite library build
32
+
33
+ #### [v2.0.14](https://github.com/ChumsInc/sortable-tables/compare/v2.0.13...v2.0.14) - 2025-08-06
11
34
 
12
35
  > 2025-08-06
13
36
 
@@ -1,4 +1,4 @@
1
- import { DataTableProps } from "./types";
1
+ import { DataTableProps } from './types';
2
2
  declare function DataTable<T = unknown>({ fields, data, keyField, size, sticky, responsive, rowClassName, renderRow, onSelectRow, selected, className, tfoot, children, tableHeadProps, ...rest }: DataTableProps<T>): import("react/jsx-runtime").JSX.Element;
3
3
  declare namespace DataTable {
4
4
  var displayName: string;
@@ -1,5 +1,5 @@
1
- import React, { ReactNode } from 'react';
2
- import { DataTableCellProps } from "./types";
1
+ import { default as React, ReactNode } from 'react';
2
+ import { DataTableCellProps } from './types';
3
3
  export default function DataTableCell<T = unknown>({ field, row, className, as, ...rest }: DataTableCellProps<T>): React.DetailedReactHTMLElement<{
4
4
  children?: ReactNode | undefined;
5
5
  align?: "left" | "center" | "right" | undefined;
@@ -57,7 +57,7 @@ export default function DataTableCell<T = unknown>({ field, row, className, as,
57
57
  results?: number | undefined;
58
58
  security?: string | undefined;
59
59
  unselectable?: "on" | "off" | undefined;
60
- popover?: "" | "auto" | "manual" | undefined;
60
+ popover?: "" | "auto" | "manual" | "hint" | undefined;
61
61
  popoverTargetAction?: "toggle" | "show" | "hide" | undefined;
62
62
  popoverTarget?: string | undefined;
63
63
  inert?: boolean | undefined;
@@ -1,4 +1,4 @@
1
- import { DataTableHeadProps } from "./types";
1
+ import { DataTableHeadProps } from './types';
2
2
  declare function DataTableHead<T = unknown>({ fields, ...rest }: DataTableHeadProps<T>): import("react/jsx-runtime").JSX.Element;
3
3
  declare namespace DataTableHead {
4
4
  var displayName: string;
@@ -1,4 +1,4 @@
1
- import { DataTableRowProps } from "./types";
1
+ import { DataTableRowProps } from './types';
2
2
  declare function DataTableRow<T = unknown>({ className, rowClassName, selected, fields, row, trRef, onClick, ...rest }: DataTableRowProps<T>): import("react/jsx-runtime").JSX.Element | null;
3
3
  declare namespace DataTableRow {
4
4
  var displayName: string;
@@ -1,4 +1,4 @@
1
- import { DataTableTBodyProps } from "./types";
1
+ import { DataTableTBodyProps } from './types';
2
2
  declare function DataTableTBody<T = unknown>({ fields, data, keyField, rowClassName, renderRow, onSelectRow, selected, children, ...rest }: DataTableTBodyProps<T>): import("react/jsx-runtime").JSX.Element;
3
3
  declare namespace DataTableTBody {
4
4
  var displayName: string;
@@ -1,4 +1,4 @@
1
- import { DataTableTHProps } from "./types";
1
+ import { DataTableTHProps } from './types';
2
2
  declare function DataTableTH<T = unknown>({ field, className, children, ...rest }: DataTableTHProps<T>): import("react/jsx-runtime").JSX.Element;
3
3
  declare namespace DataTableTH {
4
4
  var displayName: string;
@@ -1,4 +1,4 @@
1
- import { RowsPerPageProps } from "./types";
1
+ import { RowsPerPageProps } from './types';
2
2
  export declare const defaultRowsPerPageValues: number[];
3
3
  declare function RowsPerPage({ value, pageValues, size, label, className, onChange, ...rest }: RowsPerPageProps): import("react/jsx-runtime").JSX.Element;
4
4
  declare namespace RowsPerPage {
@@ -1,4 +1,4 @@
1
- import { SortableTableProps } from "./types";
1
+ import { SortableTableProps } from './types';
2
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
3
  declare namespace SortableTable {
4
4
  var displayName: string;
@@ -1,4 +1,4 @@
1
- import { SortableTableHeadProps } from "./types";
1
+ import { SortableTableHeadProps } from './types';
2
2
  declare function SortableTableHead<T = unknown>({ currentSort, fields, onChangeSort, }: SortableTableHeadProps<T>): import("react/jsx-runtime").JSX.Element;
3
3
  declare namespace SortableTableHead {
4
4
  var displayName: string;
@@ -1,4 +1,4 @@
1
- import { SortableTableTHProps } from "./types";
1
+ import { SortableTableTHProps } from './types';
2
2
  declare function SortableTableTH<T = unknown>({ field, sorted, ascending, className, onClick }: SortableTableTHProps<T>): import("react/jsx-runtime").JSX.Element;
3
3
  declare namespace SortableTableTH {
4
4
  var displayName: string;
package/dist/Table.d.ts CHANGED
@@ -1,5 +1,5 @@
1
- import React, { TableHTMLAttributes } from 'react';
2
- import { DataTableProps } from "./types";
1
+ import { default as React, TableHTMLAttributes } from 'react';
2
+ import { DataTableProps } from './types';
3
3
  export type StyledTableProps = TableHTMLAttributes<HTMLTableElement> & Pick<DataTableProps, 'sticky' | 'responsive'>;
4
4
  declare const _default: React.ForwardRefExoticComponent<React.TableHTMLAttributes<HTMLTableElement> & Pick<DataTableProps<unknown>, "sticky" | "responsive"> & React.RefAttributes<HTMLTableElement>>;
5
5
  export default _default;
@@ -1,4 +1,4 @@
1
- import { TablePaginationProps } from "./types";
1
+ import { TablePaginationProps } from './types';
2
2
  declare function TablePagination({ page, rowsPerPage, onChangePage, count, size, showFirst, showLast, className, rowsPerPageProps, ...rest }: TablePaginationProps): import("react/jsx-runtime").JSX.Element;
3
3
  declare namespace TablePagination {
4
4
  var displayname: string;
@@ -0,0 +1,28 @@
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const t=require("react/jsx-runtime"),b=require("classnames"),T=require("react"),C=require("@emotion/styled");function N({field:a,className:s,children:e,...n}){const l=b({[`text-${a.align}`]:!!a.align},s);return t.jsx("th",{className:l,scope:"col",...n,children:e??a.title})}N.displayName="DataTableTH";function S({fields:a,...s}){return t.jsx("thead",{...s,children:t.jsx("tr",{children:a.map((e,n)=>t.jsx(N,{...e.thProps,field:e,className:b(typeof e.className=="function"?{[`text-${e.align}`]:!!e.align}:e.className)},e.id??n))})})}S.displayName="DataTableHead";function w({field:a,row:s,className:e,as:n,...l}){const c=b({[`text-${a.align}`]:!!a.align},e,typeof a.className=="function"?a.className(s):a.className);return T.createElement(n??a.as??"td",{className:c,scope:(n??a.as)==="th"?"row":void 0,colSpan:a.colSpan,...a.cellProps,...l},s[a.field]===void 0&&!a.render?null:typeof a.render=="function"?a.render(s):s[a.field])}function f({className:a,rowClassName:s,selected:e,fields:n,row:l,trRef:c,onClick:r,...i}){const d=m=>{r?.(l,m)},o=typeof s=="function"?s(l):s;return l?t.jsx("tr",{ref:c,className:b({"table-active":e},a,o),onClick:d,...i,children:n.map((m,u)=>t.jsx(w,{field:m,row:l},u))}):null}f.displayName="DataTableRow";function p({fields:a,data:s,keyField:e,rowClassName:n,renderRow:l,onSelectRow:c,selected:r="",children:i,...d}){return t.jsxs("tbody",{...d,children:[s.map(o=>{const m=String(typeof e=="function"?e(o):o[e]),u=typeof r=="function"?r(o):m===r;return l?l(o):t.jsx(f,{onClick:c,rowClassName:n,fields:a,row:o,selected:u},m)}),i]})}p.displayName="DataTableTBody";const k=C.table`
2
+ --table-sticky-top: ${a=>a.sticky?"0":void 0};
3
+
4
+ thead {
5
+ tr:nth-of-type(1) td,
6
+ tr:nth-of-type(1) th {
7
+ top: var(--table-sticky-top, unset);
8
+ position: ${a=>a.sticky?"sticky":"unset"};
9
+ z-index: ${a=>a.sticky?10:"unset"};
10
+ background: ${a=>a.sticky?"linear-gradient(var(--bs-table-bg) 75%, rgba(var(--bs-secondary-bg-rgb), 0.9))":"unset"};
11
+ }
12
+ }
13
+ `,D=T.forwardRef(function({sticky:s,responsive:e,children:n,className:l,...c},r){if(e){const i=b(l,{"table-responsive":e===!0,[`table-responsive-${e}`]:e!==!0});return t.jsx("div",{className:i,children:t.jsx(k,{ref:r,...c,children:n})})}return t.jsx(k,{className:l,sticky:s,ref:r,...c,children:n})});function H({fields:a,data:s,keyField:e,size:n="",sticky:l,responsive:c,rowClassName:r,renderRow:i,onSelectRow:d,selected:o="",className:m="",tfoot:u,children:h,tableHeadProps:x,...j}){const y=b("table",m,{[`table-${n}`]:!!n});return t.jsxs(D,{sticky:l,responsive:c,className:y,...j,children:[t.jsx(S,{...x,fields:a}),!!s.length&&t.jsx(p,{fields:a,data:s,keyField:e,rowClassName:r,renderRow:i,onSelectRow:d,selected:o}),h,u]})}H.displayName="DataTable";const B=a=>{if(!a)return"flex-start";switch(a){case"end":return"flex-end";default:return"center"}},M=C.div`
14
+ display: flex;
15
+ width: 100%;
16
+ flex-direction: ${a=>a.align==="end"?"row-reverse":"row"};
17
+ justify-content: ${a=>B(a.align)};
18
+ .sort-icon {
19
+ flex-grow: ${a=>a.align==="end"?"1":"0"};
20
+ opacity: ${a=>a.sorted?1:0};
21
+ }
22
+ &:hover .sort-icon {
23
+ color: ${a=>a.sorted?"unset":"var(--bs-primary)"} ;
24
+ opacity: 0.75;
25
+ transition: opacity 0.2s;
26
+ }
27
+ `;function g({field:a,sorted:s,ascending:e,className:n,onClick:l}){if(!a.sortable)return t.jsx(N,{field:a,className:n});const{className:c,...r}=a.thProps??{},i=b(n,c,{[`text-${a.align}`]:!!a.align}),d=()=>{l({field:a.field,ascending:s?!e:!0})},o={"bi-arrow-down":e,"bi-arrow-up":!e};return t.jsx("th",{...r,className:b("sortable",i),scope:"col",onClick:d,children:t.jsxs(M,{sorted:s,align:a.align,children:[t.jsx("div",{className:"field-title",children:a.title}),t.jsx("div",{className:b("me-1 sort-icon",o)})]})})}g.displayName="SortableTableTH";function v({currentSort:a,fields:s,onChangeSort:e}){const{field:n,ascending:l}=a;return t.jsx("thead",{children:t.jsx("tr",{children:s.map((c,r)=>t.jsx(g,{field:c,sorted:n===c.field,ascending:l,className:b(typeof c.className=="function"?{[`text-${c.align}`]:!!c.align}:c.className),onClick:e},r))})})}v.displayName="SortableTableHead";function R({fields:a,data:s,currentSort:e,onChangeSort:n,keyField:l,size:c="",sticky:r,rowClassName:i,renderRow:d,onSelectRow:o,selected:m="",className:u="",tfoot:h,children:x,...j}){const y=b("table",u,{[`table-${c}`]:!!c});return t.jsxs(D,{className:y,sticky:r,...j,children:[t.jsx(v,{currentSort:e,fields:a,onChangeSort:n}),!!s.length&&t.jsx(p,{fields:a,data:s,keyField:l,rowClassName:i,renderRow:d,onSelectRow:o,selected:m}),x,h]})}R.displayName="SortableTable";const q=[10,25,50,100,250,500,1e3];function $({value:a,pageValues:s=q,size:e,label:n,className:l,onChange:c,...r}){const i=T.useId(),d=u=>c(Number(u.target.value)),o=l??b("form-select",{[`form-select-${e}`]:!!e}),m=b("input-group",{[`input-group-${e}`]:!!e});return t.jsxs("div",{className:m,children:[t.jsx("label",{className:"input-group-text",htmlFor:i,children:n??"Rows"}),t.jsx("select",{className:o,id:i,value:a,onChange:d,...r,children:s.map(u=>t.jsx("option",{value:u,children:u},u))})]},a)}$.displayName="RowsPerPage";function P({page:a,rowsPerPage:s,onChangePage:e,count:n,size:l,showFirst:c,showLast:r,className:i,rowsPerPageProps:d,...o}){const m=n===0?0:a*s+1,u=Math.min(a*s+s,n),h=s===0?0:Math.floor((n-1)/s),x=b("btn btn-link",{[`btn-${l}`]:!!l});return t.jsxs("div",{className:b("row g-3 justify-content-end",i),...o,children:[!!d&&t.jsx("div",{className:"col-auto",children:t.jsx($,{...d,value:s,size:l})}),t.jsx("div",{className:"col-auto",children:t.jsxs("div",{className:"row g-3 flex-nowrap align-items-baseline",children:[t.jsxs("div",{className:"col-auto",children:[m,"-",u," of ",n]}),c&&t.jsx("div",{className:"col-auto",children:t.jsx("button",{className:x,disabled:a===0,onClick:()=>e(0),"aria-label":"First page",children:t.jsx("span",{className:"bi-chevron-bar-left","aria-hidden":"true"})})}),t.jsx("div",{className:"col-auto",children:t.jsx("button",{className:x,disabled:a===0,onClick:()=>e(a-1),"aria-label":"Previous page",children:t.jsx("span",{className:"bi-chevron-left","aria-hidden":"true"})})}),t.jsx("div",{className:"col-auto",children:t.jsx("button",{className:x,disabled:a>=h,onClick:()=>e(a+1),"aria-label":"Next page",children:t.jsx("span",{className:"bi-chevron-right","aria-hidden":"true"})})}),r&&t.jsx("div",{className:"col-auto",children:t.jsx("button",{className:x,disabled:a>=h,onClick:()=>e(h),"aria-label":"Last page",children:t.jsx("span",{className:"bi-chevron-bar-right","aria-hidden":"true"})})})]})})]})}P.displayname="TablePagination";exports.DataTable=H;exports.DataTableRow=f;exports.DataTableTBody=p;exports.DataTableTH=N;exports.RowsPerPage=$;exports.SortableTable=R;exports.SortableTableHead=v;exports.SortableTableTH=g;exports.TablePagination=P;exports.defaultRowsPerPageValues=q;
28
+ //# sourceMappingURL=index.cjs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.cjs.js","sources":["../src/DataTableTH.tsx","../src/DataTableHead.tsx","../src/DataTableCell.tsx","../src/DataTableRow.tsx","../src/DataTableTBody.tsx","../src/Table.tsx","../src/DataTable.tsx","../src/SortableTableTH.tsx","../src/SortableTableHead.tsx","../src/SortableTable.tsx","../src/RowsPerPage.tsx","../src/TablePagination.tsx"],"sourcesContent":["import React from \"react\";\r\nimport classNames from \"classnames\";\r\nimport type {DataTableTHProps} from \"./types\";\r\n\r\n\r\nfunction DataTableTH<T = unknown>({\r\n field,\r\n className,\r\n children,\r\n ...rest\r\n }: DataTableTHProps<T>) {\r\n const thClassName = classNames({[`text-${field.align}`]: !!field.align}, className);\r\n return (\r\n <th className={thClassName} scope=\"col\" {...rest}>\r\n {children ?? field.title}\r\n </th>\r\n )\r\n}\r\nDataTableTH.displayName = 'DataTableTH';\r\nexport default DataTableTH;\r\n","import React from \"react\";\r\nimport DataTableTH from \"./DataTableTH\";\r\nimport classNames from \"classnames\";\r\nimport type {DataTableHeadProps} from \"./types\";\r\n\r\n\r\nfunction DataTableHead<T = unknown>({fields, ...rest}: DataTableHeadProps<T>) {\r\n return (\r\n <thead {...rest}>\r\n <tr>\r\n {fields.map((field, index) => (\r\n <DataTableTH key={field.id ?? index}\r\n {...field.thProps}\r\n field={field}\r\n className={classNames(\r\n typeof field.className === 'function'\r\n ? {[`text-${field.align}`]: !!field.align}\r\n : field.className\r\n )}/>\r\n ))}\r\n </tr>\r\n </thead>\r\n )\r\n}\r\n\r\nDataTableHead.displayName = 'DataTableHead';\r\nexport default DataTableHead;\r\n","import React, {ReactNode} from 'react';\nimport type {DataTableCellProps} from \"./types\";\nimport classNames from \"classnames\";\n\nexport default function DataTableCell<T = unknown>({field, row, className, as, ...rest}:DataTableCellProps<T>) {\n const cellClassName = classNames(\n {[`text-${field.align}`]: !!field.align},\n className,\n typeof field.className === 'function' ? field.className(row) : field.className\n );\n return React.createElement(\n (as ?? field.as) ?? 'td',\n {\n className: cellClassName,\n scope: (as ?? field.as) === 'th' ? 'row' : undefined,\n colSpan: field.colSpan,\n ...field.cellProps,\n ...rest\n },\n (row[field.field] === undefined && !field.render)\n ? null\n : (\n typeof field.render === 'function'\n ? field.render(row)\n : row[field.field] as ReactNode\n )\n )\n}\n","import React, {MouseEvent} from 'react';\r\nimport classNames from \"classnames\";\r\nimport type {DataTableRowProps} from \"./types\";\r\nimport DataTableCell from \"./DataTableCell\";\r\n\r\n\r\nfunction DataTableRow<T = unknown>({\r\n className,\r\n rowClassName,\r\n selected,\r\n fields,\r\n row,\r\n trRef,\r\n onClick,\r\n ...rest\r\n }: DataTableRowProps<T>) {\r\n const clickHandler = (ev: MouseEvent<HTMLTableRowElement>) => {\r\n onClick?.(row, ev)\r\n }\r\n\r\n const _className = typeof rowClassName === 'function' ? rowClassName(row) : rowClassName;\r\n if (!row) {\r\n return null;\r\n }\r\n\r\n return (\r\n <tr ref={trRef}\r\n className={classNames({'table-active': selected}, className, _className)}\r\n onClick={clickHandler}\r\n {...rest}>\r\n {fields.map((field, index) => (<DataTableCell key={index} field={field} row={row}/>))}\r\n </tr>\r\n )\r\n}\r\n\r\nDataTableRow.displayName = 'DataTableRow';\r\nexport default DataTableRow;\r\n","import React from 'react';\r\nimport DataTableRow from \"./DataTableRow\";\r\nimport type {DataTableTBodyProps} from \"./types\";\r\n\r\n\r\nfunction DataTableTBody<T = unknown>({\r\n fields,\r\n data,\r\n keyField,\r\n rowClassName,\r\n renderRow,\r\n onSelectRow,\r\n selected = '',\r\n children,\r\n ...rest\r\n }: DataTableTBodyProps<T>) {\r\n return (\r\n <tbody {...rest}>\r\n {data.map(row => {\r\n const keyValue = String(typeof keyField === \"function\" ? keyField(row) : row[keyField]);\r\n const isSelected = typeof selected === 'function' ? selected(row) : keyValue === selected;\r\n if (renderRow) {\r\n return renderRow(row);\r\n }\r\n return (\r\n <DataTableRow key={keyValue} onClick={onSelectRow}\r\n rowClassName={rowClassName}\r\n fields={fields}\r\n row={row} selected={isSelected}/>\r\n )\r\n })}\r\n {children}\r\n </tbody>\r\n )\r\n}\r\n\r\nDataTableTBody.displayName = 'DataTableTBody';\r\nexport default DataTableTBody\r\n","import React, {TableHTMLAttributes} from 'react';\nimport styled from \"@emotion/styled\";\nimport type {DataTableProps} from \"./types\";\nimport classNames from \"classnames\";\n\nexport type StyledTableProps = TableHTMLAttributes<HTMLTableElement> & Pick<DataTableProps, 'sticky' | 'responsive'>\n\nconst StyledTable = styled.table<StyledTableProps>`\n --table-sticky-top: ${props => props.sticky ? '0' : undefined};\n\n thead {\n tr:nth-of-type(1) td,\n tr:nth-of-type(1) th {\n top: var(--table-sticky-top, unset);\n position: ${props => props.sticky ? \"sticky\" : \"unset\"};\n z-index: ${props => props.sticky ? 10 : \"unset\"};\n background: ${props => props.sticky ? \"linear-gradient(var(--bs-table-bg) 75%, rgba(var(--bs-secondary-bg-rgb), 0.9))\" : \"unset\"};\n }\n }\n`\n\nexport default React.forwardRef<HTMLTableElement, StyledTableProps>(\n function Table({\n sticky,\n responsive,\n children,\n className,\n ...rest\n }, ref) {\n if (responsive) {\n const _className = classNames(className, {\n 'table-responsive': responsive === true,\n [`table-responsive-${responsive}`]: responsive !== true,\n })\n return (\n <div className={_className}>\n <StyledTable ref={ref} {...rest}>{children}</StyledTable>\n </div>\n )\n }\n return (\n <StyledTable className={className} sticky={sticky} ref={ref} {...rest}>{children}</StyledTable>\n )\n })\n","import React from 'react';\r\nimport classNames from \"classnames\";\r\nimport DataTableHead from \"./DataTableHead\";\r\nimport DataTableTBody from \"./DataTableTBody\";\r\nimport type {DataTableProps} from \"./types\";\r\nimport Table from \"./Table\";\r\n\r\n\r\nfunction DataTable<T = unknown>({\r\n fields,\r\n data,\r\n keyField,\r\n size = '',\r\n sticky,\r\n responsive,\r\n rowClassName,\r\n renderRow,\r\n onSelectRow,\r\n selected = '',\r\n className = '',\r\n tfoot,\r\n children,\r\n tableHeadProps,\r\n ...rest\r\n }: DataTableProps<T>) {\r\n\r\n const tableClassName = classNames('table', className, {\r\n [`table-${size}`]: !!size,\r\n })\r\n\r\n return (\r\n <Table sticky={sticky} responsive={responsive} className={tableClassName} {...rest}>\r\n <DataTableHead {...tableHeadProps} fields={fields}/>\r\n {!!data.length && (\r\n <DataTableTBody fields={fields} data={data} keyField={keyField} rowClassName={rowClassName}\r\n renderRow={renderRow}\r\n onSelectRow={onSelectRow} selected={selected}/>\r\n )}\r\n {children}\r\n {tfoot}\r\n </Table>\r\n )\r\n}\r\n\r\nDataTable.displayName = 'DataTable';\r\nexport default DataTable;\r\n","import React from \"react\";\r\nimport classNames from \"classnames\";\r\nimport DataTableTH from \"./DataTableTH\";\r\nimport type {SortableTableTHProps, UIFlexAlign} from \"./types\";\r\nimport styled from '@emotion/styled';\r\n\r\nconst flexJustifyContent = (align?: UIFlexAlign) => {\r\n if (!align) {\r\n return 'flex-start';\r\n }\r\n switch (align) {\r\n case 'end':\r\n return 'flex-end';\r\n default:\r\n return 'center';\r\n }\r\n}\r\n\r\ntype FieldTitleProps = {\r\n sorted?: boolean;\r\n align?: UIFlexAlign;\r\n};\r\nconst FieldTitle = styled.div<FieldTitleProps>`\r\n display: flex;\r\n width: 100%;\r\n flex-direction: ${props => props.align === 'end' ? 'row-reverse' : 'row'};\r\n justify-content: ${props => flexJustifyContent(props.align)};\r\n .sort-icon {\r\n flex-grow: ${props => props.align === 'end' ? '1' : '0'};\r\n opacity: ${props => props.sorted ? 1 : 0};\r\n }\r\n &:hover .sort-icon {\r\n color: ${props => props.sorted ? 'unset' : 'var(--bs-primary)'} ;\r\n opacity: 0.75;\r\n transition: opacity 0.2s;\r\n }\r\n`\r\n\r\nfunction SortableTableTH<T = unknown>({\r\n field,\r\n sorted,\r\n ascending,\r\n className,\r\n onClick\r\n }: SortableTableTHProps<T>) {\r\n if (!field.sortable) {\r\n return (<DataTableTH field={field} className={className}/>)\r\n }\r\n\r\n const {className: _thClassName, ...thProps} = field.thProps ?? {};\r\n const thClassName = classNames(\r\n className,\r\n _thClassName,\r\n {[`text-${field.align}`]: !!field.align}\r\n );\r\n\r\n const clickHandler = () => {\r\n onClick({field: field.field, ascending: !sorted ? true : !ascending});\r\n }\r\n\r\n const iconClassName = {\r\n 'bi-arrow-down': ascending,\r\n 'bi-arrow-up': !ascending,\r\n }\r\n\r\n return (\r\n <th {...thProps} className={classNames(\"sortable\", thClassName)} scope=\"col\" onClick={clickHandler}>\r\n <FieldTitle sorted={sorted} align={field.align}>\r\n <div className=\"field-title\">{field.title}</div>\r\n <div className={classNames('me-1 sort-icon', iconClassName)}/>\r\n </FieldTitle>\r\n </th>\r\n )\r\n}\r\n\r\nSortableTableTH.displayName = 'SortableTableTH';\r\nexport default SortableTableTH;\r\n","import React from \"react\";\r\nimport SortableTableTH from \"./SortableTableTH\";\r\nimport classNames from \"classnames\";\r\nimport type {SortableTableHeadProps} from \"./types\";\r\n\r\n\r\nfunction SortableTableHead<T = unknown>({\r\n currentSort,\r\n fields,\r\n onChangeSort,\r\n }: SortableTableHeadProps<T>) {\r\n const {field, ascending} = currentSort;\r\n return (\r\n <thead>\r\n <tr>\r\n {fields.map((tableField, index) => (\r\n <SortableTableTH<T> key={index} field={tableField}\r\n sorted={field === tableField.field} ascending={ascending}\r\n className={classNames(\r\n typeof tableField.className === 'function'\r\n ? {[`text-${tableField.align}`]: !!tableField.align}\r\n : tableField.className\r\n )} onClick={onChangeSort}/>\r\n ))}\r\n </tr>\r\n </thead>\r\n )\r\n}\r\n\r\nSortableTableHead.displayName = 'SortableTableHead';\r\nexport default SortableTableHead;\r\n","import React from 'react';\r\nimport classNames from \"classnames\";\r\nimport SortableTableHead from \"./SortableTableHead\";\r\nimport DataTableTBody from \"./DataTableTBody\";\r\nimport type {SortableTableProps} from \"./types\";\r\nimport Table from \"./Table\";\r\n\r\n\r\nfunction SortableTable<T = unknown>({\r\n fields,\r\n data,\r\n currentSort,\r\n onChangeSort,\r\n keyField,\r\n size = '',\r\n sticky,\r\n rowClassName,\r\n renderRow,\r\n onSelectRow,\r\n selected = '',\r\n className = '',\r\n tfoot,\r\n children,\r\n ...rest\r\n }: SortableTableProps<T>) {\r\n const tableClassName = classNames('table', className, {\r\n [`table-${size}`]: !!size,\r\n })\r\n\r\n return (\r\n <Table className={tableClassName} sticky={sticky} {...rest}>\r\n <SortableTableHead currentSort={currentSort} fields={fields} onChangeSort={onChangeSort}/>\r\n {!!data.length && (\r\n <DataTableTBody fields={fields} data={data} keyField={keyField} rowClassName={rowClassName}\r\n renderRow={renderRow}\r\n onSelectRow={onSelectRow} selected={selected}/>\r\n )}\r\n {children}\r\n {tfoot}\r\n </Table>\r\n )\r\n}\r\n\r\nSortableTable.displayName = 'SortableTable';\r\nexport default SortableTable;\r\n","import React, {ChangeEvent, useId} from 'react';\r\nimport classNames from \"classnames\";\r\nimport type {RowsPerPageProps} from \"./types\";\r\n\r\nexport const defaultRowsPerPageValues: number[] = [10, 25, 50, 100, 250, 500, 1000];\r\n\r\n\r\nfunction RowsPerPage({\r\n value,\r\n pageValues = defaultRowsPerPageValues,\r\n size,\r\n label,\r\n className,\r\n onChange,\r\n ...rest\r\n }: RowsPerPageProps) {\r\n const id = useId();\r\n const changeHandler = (ev: ChangeEvent<HTMLSelectElement>) => onChange(Number(ev.target.value));\r\n const selectClassName = className ?? classNames('form-select', {[`form-select-${size}`]: !!size});\r\n const inputGroupClassName = classNames('input-group', {\r\n [`input-group-${size}`]: !!size,\r\n })\r\n\r\n return (\r\n <div className={inputGroupClassName} key={value}>\r\n <label className=\"input-group-text\" htmlFor={id}>{label ?? 'Rows'}</label>\r\n <select className={selectClassName} id={id}\r\n value={value} onChange={changeHandler} {...rest}>\r\n {pageValues.map(value => (\r\n <option key={value} value={value}>{value}</option>\r\n ))}\r\n </select>\r\n </div>\r\n )\r\n}\r\n\r\nRowsPerPage.displayName = 'RowsPerPage';\r\nexport default RowsPerPage;\r\n","import React from 'react';\r\nimport RowsPerPage from \"./RowsPerPage\";\r\nimport classNames from \"classnames\";\r\nimport type {TablePaginationProps} from \"./types\";\r\n\r\nfunction TablePagination({\r\n page,\r\n rowsPerPage,\r\n onChangePage,\r\n count,\r\n size,\r\n showFirst,\r\n showLast,\r\n className,\r\n rowsPerPageProps,\r\n ...rest\r\n }: TablePaginationProps) {\r\n\r\n const first = count === 0 ? 0 : (page * rowsPerPage) + 1;\r\n const last = Math.min(page * rowsPerPage + rowsPerPage, count);\r\n const lastPage = rowsPerPage === 0 ? 0 : Math.floor((count - 1) / rowsPerPage);\r\n\r\n const buttonClassName = classNames(\"btn btn-link\", {[`btn-${size}`]: !!size});\r\n\r\n return (\r\n <div className={classNames(\"row g-3 justify-content-end\", className)} {...rest}>\r\n {!!rowsPerPageProps && (\r\n <div className=\"col-auto\">\r\n <RowsPerPage {...rowsPerPageProps} value={rowsPerPage} size={size}/>\r\n </div>\r\n )}\r\n <div className=\"col-auto\">\r\n <div className=\"row g-3 flex-nowrap align-items-baseline\">\r\n <div className=\"col-auto\">\r\n {first}-{last} of {count}\r\n </div>\r\n {showFirst && (\r\n <div className=\"col-auto\">\r\n <button className={buttonClassName} disabled={page === 0}\r\n onClick={() => onChangePage(0)} aria-label=\"First page\">\r\n <span className=\"bi-chevron-bar-left\" aria-hidden=\"true\"/>\r\n </button>\r\n </div>\r\n )}\r\n <div className=\"col-auto\">\r\n <button className={buttonClassName} disabled={page === 0}\r\n onClick={() => onChangePage(page - 1)} aria-label=\"Previous page\">\r\n <span className=\"bi-chevron-left\" aria-hidden=\"true\"/>\r\n </button>\r\n </div>\r\n <div className=\"col-auto\">\r\n <button className={buttonClassName} disabled={page >= lastPage}\r\n onClick={() => onChangePage(page + 1)} aria-label=\"Next page\">\r\n <span className=\"bi-chevron-right\" aria-hidden=\"true\"/>\r\n </button>\r\n </div>\r\n {showLast && (\r\n <div className=\"col-auto\">\r\n <button className={buttonClassName} disabled={page >= lastPage}\r\n onClick={() => onChangePage(lastPage)} aria-label=\"Last page\">\r\n <span className=\"bi-chevron-bar-right\" aria-hidden=\"true\"/>\r\n </button>\r\n </div>\r\n )}\r\n </div>\r\n </div>\r\n </div>\r\n )\r\n}\r\n\r\nTablePagination.displayname = 'TablePagination';\r\nexport default TablePagination\r\n"],"names":["DataTableTH","field","className","children","rest","thClassName","classNames","jsx","DataTableHead","fields","index","DataTableCell","row","as","cellClassName","React","DataTableRow","rowClassName","selected","trRef","onClick","clickHandler","ev","_className","DataTableTBody","data","keyField","renderRow","onSelectRow","jsxs","keyValue","isSelected","StyledTable","styled","props","Table","sticky","responsive","ref","DataTable","size","tfoot","tableHeadProps","tableClassName","flexJustifyContent","align","FieldTitle","SortableTableTH","sorted","ascending","_thClassName","thProps","iconClassName","SortableTableHead","currentSort","onChangeSort","tableField","SortableTable","defaultRowsPerPageValues","RowsPerPage","value","pageValues","label","onChange","id","useId","changeHandler","selectClassName","inputGroupClassName","TablePagination","page","rowsPerPage","onChangePage","count","showFirst","showLast","rowsPerPageProps","first","last","lastPage","buttonClassName"],"mappings":"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"}
@@ -0,0 +1,388 @@
1
+ import { jsx as e, jsxs as N } from "react/jsx-runtime";
2
+ import u from "classnames";
3
+ import $, { useId as j } from "react";
4
+ import k from "@emotion/styled";
5
+ function T({
6
+ field: a,
7
+ className: n,
8
+ children: t,
9
+ ...l
10
+ }) {
11
+ const s = u({ [`text-${a.align}`]: !!a.align }, n);
12
+ return /* @__PURE__ */ e("th", { className: s, scope: "col", ...l, children: t ?? a.title });
13
+ }
14
+ T.displayName = "DataTableTH";
15
+ function x({ fields: a, ...n }) {
16
+ return /* @__PURE__ */ e("thead", { ...n, children: /* @__PURE__ */ e("tr", { children: a.map((t, l) => /* @__PURE__ */ e(
17
+ T,
18
+ {
19
+ ...t.thProps,
20
+ field: t,
21
+ className: u(
22
+ typeof t.className == "function" ? { [`text-${t.align}`]: !!t.align } : t.className
23
+ )
24
+ },
25
+ t.id ?? l
26
+ )) }) });
27
+ }
28
+ x.displayName = "DataTableHead";
29
+ function _({ field: a, row: n, className: t, as: l, ...s }) {
30
+ const c = u(
31
+ { [`text-${a.align}`]: !!a.align },
32
+ t,
33
+ typeof a.className == "function" ? a.className(n) : a.className
34
+ );
35
+ return $.createElement(
36
+ l ?? a.as ?? "td",
37
+ {
38
+ className: c,
39
+ scope: (l ?? a.as) === "th" ? "row" : void 0,
40
+ colSpan: a.colSpan,
41
+ ...a.cellProps,
42
+ ...s
43
+ },
44
+ n[a.field] === void 0 && !a.render ? null : typeof a.render == "function" ? a.render(n) : n[a.field]
45
+ );
46
+ }
47
+ function C({
48
+ className: a,
49
+ rowClassName: n,
50
+ selected: t,
51
+ fields: l,
52
+ row: s,
53
+ trRef: c,
54
+ onClick: r,
55
+ ...i
56
+ }) {
57
+ const m = (b) => {
58
+ r?.(s, b);
59
+ }, o = typeof n == "function" ? n(s) : n;
60
+ return s ? /* @__PURE__ */ e(
61
+ "tr",
62
+ {
63
+ ref: c,
64
+ className: u({ "table-active": t }, a, o),
65
+ onClick: m,
66
+ ...i,
67
+ children: l.map((b, d) => /* @__PURE__ */ e(_, { field: b, row: s }, d))
68
+ }
69
+ ) : null;
70
+ }
71
+ C.displayName = "DataTableRow";
72
+ function v({
73
+ fields: a,
74
+ data: n,
75
+ keyField: t,
76
+ rowClassName: l,
77
+ renderRow: s,
78
+ onSelectRow: c,
79
+ selected: r = "",
80
+ children: i,
81
+ ...m
82
+ }) {
83
+ return /* @__PURE__ */ N("tbody", { ...m, children: [
84
+ n.map((o) => {
85
+ const b = String(typeof t == "function" ? t(o) : o[t]), d = typeof r == "function" ? r(o) : b === r;
86
+ return s ? s(o) : /* @__PURE__ */ e(
87
+ C,
88
+ {
89
+ onClick: c,
90
+ rowClassName: l,
91
+ fields: a,
92
+ row: o,
93
+ selected: d
94
+ },
95
+ b
96
+ );
97
+ }),
98
+ i
99
+ ] });
100
+ }
101
+ v.displayName = "DataTableTBody";
102
+ const g = k.table`
103
+ --table-sticky-top: ${(a) => a.sticky ? "0" : void 0};
104
+
105
+ thead {
106
+ tr:nth-of-type(1) td,
107
+ tr:nth-of-type(1) th {
108
+ top: var(--table-sticky-top, unset);
109
+ position: ${(a) => a.sticky ? "sticky" : "unset"};
110
+ z-index: ${(a) => a.sticky ? 10 : "unset"};
111
+ background: ${(a) => a.sticky ? "linear-gradient(var(--bs-table-bg) 75%, rgba(var(--bs-secondary-bg-rgb), 0.9))" : "unset"};
112
+ }
113
+ }
114
+ `, D = $.forwardRef(
115
+ function({
116
+ sticky: n,
117
+ responsive: t,
118
+ children: l,
119
+ className: s,
120
+ ...c
121
+ }, r) {
122
+ if (t) {
123
+ const i = u(s, {
124
+ "table-responsive": t === !0,
125
+ [`table-responsive-${t}`]: t !== !0
126
+ });
127
+ return /* @__PURE__ */ e("div", { className: i, children: /* @__PURE__ */ e(g, { ref: r, ...c, children: l }) });
128
+ }
129
+ return /* @__PURE__ */ e(g, { className: s, sticky: n, ref: r, ...c, children: l });
130
+ }
131
+ );
132
+ function B({
133
+ fields: a,
134
+ data: n,
135
+ keyField: t,
136
+ size: l = "",
137
+ sticky: s,
138
+ responsive: c,
139
+ rowClassName: r,
140
+ renderRow: i,
141
+ onSelectRow: m,
142
+ selected: o = "",
143
+ className: b = "",
144
+ tfoot: d,
145
+ children: p,
146
+ tableHeadProps: h,
147
+ ...y
148
+ }) {
149
+ const f = u("table", b, {
150
+ [`table-${l}`]: !!l
151
+ });
152
+ return /* @__PURE__ */ N(D, { sticky: s, responsive: c, className: f, ...y, children: [
153
+ /* @__PURE__ */ e(x, { ...h, fields: a }),
154
+ !!n.length && /* @__PURE__ */ e(
155
+ v,
156
+ {
157
+ fields: a,
158
+ data: n,
159
+ keyField: t,
160
+ rowClassName: r,
161
+ renderRow: i,
162
+ onSelectRow: m,
163
+ selected: o
164
+ }
165
+ ),
166
+ p,
167
+ d
168
+ ] });
169
+ }
170
+ B.displayName = "DataTable";
171
+ const M = (a) => {
172
+ if (!a)
173
+ return "flex-start";
174
+ switch (a) {
175
+ case "end":
176
+ return "flex-end";
177
+ default:
178
+ return "center";
179
+ }
180
+ }, V = k.div`
181
+ display: flex;
182
+ width: 100%;
183
+ flex-direction: ${(a) => a.align === "end" ? "row-reverse" : "row"};
184
+ justify-content: ${(a) => M(a.align)};
185
+ .sort-icon {
186
+ flex-grow: ${(a) => a.align === "end" ? "1" : "0"};
187
+ opacity: ${(a) => a.sorted ? 1 : 0};
188
+ }
189
+ &:hover .sort-icon {
190
+ color: ${(a) => a.sorted ? "unset" : "var(--bs-primary)"} ;
191
+ opacity: 0.75;
192
+ transition: opacity 0.2s;
193
+ }
194
+ `;
195
+ function H({
196
+ field: a,
197
+ sorted: n,
198
+ ascending: t,
199
+ className: l,
200
+ onClick: s
201
+ }) {
202
+ if (!a.sortable)
203
+ return /* @__PURE__ */ e(T, { field: a, className: l });
204
+ const { className: c, ...r } = a.thProps ?? {}, i = u(
205
+ l,
206
+ c,
207
+ { [`text-${a.align}`]: !!a.align }
208
+ ), m = () => {
209
+ s({ field: a.field, ascending: n ? !t : !0 });
210
+ }, o = {
211
+ "bi-arrow-down": t,
212
+ "bi-arrow-up": !t
213
+ };
214
+ return /* @__PURE__ */ e("th", { ...r, className: u("sortable", i), scope: "col", onClick: m, children: /* @__PURE__ */ N(V, { sorted: n, align: a.align, children: [
215
+ /* @__PURE__ */ e("div", { className: "field-title", children: a.title }),
216
+ /* @__PURE__ */ e("div", { className: u("me-1 sort-icon", o) })
217
+ ] }) });
218
+ }
219
+ H.displayName = "SortableTableTH";
220
+ function S({
221
+ currentSort: a,
222
+ fields: n,
223
+ onChangeSort: t
224
+ }) {
225
+ const { field: l, ascending: s } = a;
226
+ return /* @__PURE__ */ e("thead", { children: /* @__PURE__ */ e("tr", { children: n.map((c, r) => /* @__PURE__ */ e(
227
+ H,
228
+ {
229
+ field: c,
230
+ sorted: l === c.field,
231
+ ascending: s,
232
+ className: u(
233
+ typeof c.className == "function" ? { [`text-${c.align}`]: !!c.align } : c.className
234
+ ),
235
+ onClick: t
236
+ },
237
+ r
238
+ )) }) });
239
+ }
240
+ S.displayName = "SortableTableHead";
241
+ function E({
242
+ fields: a,
243
+ data: n,
244
+ currentSort: t,
245
+ onChangeSort: l,
246
+ keyField: s,
247
+ size: c = "",
248
+ sticky: r,
249
+ rowClassName: i,
250
+ renderRow: m,
251
+ onSelectRow: o,
252
+ selected: b = "",
253
+ className: d = "",
254
+ tfoot: p,
255
+ children: h,
256
+ ...y
257
+ }) {
258
+ const f = u("table", d, {
259
+ [`table-${c}`]: !!c
260
+ });
261
+ return /* @__PURE__ */ N(D, { className: f, sticky: r, ...y, children: [
262
+ /* @__PURE__ */ e(S, { currentSort: t, fields: a, onChangeSort: l }),
263
+ !!n.length && /* @__PURE__ */ e(
264
+ v,
265
+ {
266
+ fields: a,
267
+ data: n,
268
+ keyField: s,
269
+ rowClassName: i,
270
+ renderRow: m,
271
+ onSelectRow: o,
272
+ selected: b
273
+ }
274
+ ),
275
+ h,
276
+ p
277
+ ] });
278
+ }
279
+ E.displayName = "SortableTable";
280
+ const G = [10, 25, 50, 100, 250, 500, 1e3];
281
+ function R({
282
+ value: a,
283
+ pageValues: n = G,
284
+ size: t,
285
+ label: l,
286
+ className: s,
287
+ onChange: c,
288
+ ...r
289
+ }) {
290
+ const i = j(), m = (d) => c(Number(d.target.value)), o = s ?? u("form-select", { [`form-select-${t}`]: !!t }), b = u("input-group", {
291
+ [`input-group-${t}`]: !!t
292
+ });
293
+ return /* @__PURE__ */ N("div", { className: b, children: [
294
+ /* @__PURE__ */ e("label", { className: "input-group-text", htmlFor: i, children: l ?? "Rows" }),
295
+ /* @__PURE__ */ e(
296
+ "select",
297
+ {
298
+ className: o,
299
+ id: i,
300
+ value: a,
301
+ onChange: m,
302
+ ...r,
303
+ children: n.map((d) => /* @__PURE__ */ e("option", { value: d, children: d }, d))
304
+ }
305
+ )
306
+ ] }, a);
307
+ }
308
+ R.displayName = "RowsPerPage";
309
+ function I({
310
+ page: a,
311
+ rowsPerPage: n,
312
+ onChangePage: t,
313
+ count: l,
314
+ size: s,
315
+ showFirst: c,
316
+ showLast: r,
317
+ className: i,
318
+ rowsPerPageProps: m,
319
+ ...o
320
+ }) {
321
+ const b = l === 0 ? 0 : a * n + 1, d = Math.min(a * n + n, l), p = n === 0 ? 0 : Math.floor((l - 1) / n), h = u("btn btn-link", { [`btn-${s}`]: !!s });
322
+ return /* @__PURE__ */ N("div", { className: u("row g-3 justify-content-end", i), ...o, children: [
323
+ !!m && /* @__PURE__ */ e("div", { className: "col-auto", children: /* @__PURE__ */ e(R, { ...m, value: n, size: s }) }),
324
+ /* @__PURE__ */ e("div", { className: "col-auto", children: /* @__PURE__ */ N("div", { className: "row g-3 flex-nowrap align-items-baseline", children: [
325
+ /* @__PURE__ */ N("div", { className: "col-auto", children: [
326
+ b,
327
+ "-",
328
+ d,
329
+ " of ",
330
+ l
331
+ ] }),
332
+ c && /* @__PURE__ */ e("div", { className: "col-auto", children: /* @__PURE__ */ e(
333
+ "button",
334
+ {
335
+ className: h,
336
+ disabled: a === 0,
337
+ onClick: () => t(0),
338
+ "aria-label": "First page",
339
+ children: /* @__PURE__ */ e("span", { className: "bi-chevron-bar-left", "aria-hidden": "true" })
340
+ }
341
+ ) }),
342
+ /* @__PURE__ */ e("div", { className: "col-auto", children: /* @__PURE__ */ e(
343
+ "button",
344
+ {
345
+ className: h,
346
+ disabled: a === 0,
347
+ onClick: () => t(a - 1),
348
+ "aria-label": "Previous page",
349
+ children: /* @__PURE__ */ e("span", { className: "bi-chevron-left", "aria-hidden": "true" })
350
+ }
351
+ ) }),
352
+ /* @__PURE__ */ e("div", { className: "col-auto", children: /* @__PURE__ */ e(
353
+ "button",
354
+ {
355
+ className: h,
356
+ disabled: a >= p,
357
+ onClick: () => t(a + 1),
358
+ "aria-label": "Next page",
359
+ children: /* @__PURE__ */ e("span", { className: "bi-chevron-right", "aria-hidden": "true" })
360
+ }
361
+ ) }),
362
+ r && /* @__PURE__ */ e("div", { className: "col-auto", children: /* @__PURE__ */ e(
363
+ "button",
364
+ {
365
+ className: h,
366
+ disabled: a >= p,
367
+ onClick: () => t(p),
368
+ "aria-label": "Last page",
369
+ children: /* @__PURE__ */ e("span", { className: "bi-chevron-bar-right", "aria-hidden": "true" })
370
+ }
371
+ ) })
372
+ ] }) })
373
+ ] });
374
+ }
375
+ I.displayname = "TablePagination";
376
+ export {
377
+ B as DataTable,
378
+ C as DataTableRow,
379
+ v as DataTableTBody,
380
+ T as DataTableTH,
381
+ R as RowsPerPage,
382
+ E as SortableTable,
383
+ S as SortableTableHead,
384
+ H as SortableTableTH,
385
+ I as TablePagination,
386
+ G as defaultRowsPerPageValues
387
+ };
388
+ //# sourceMappingURL=index.es.js.map