@chumsinc/sortable-tables 3.0.1 → 3.0.2

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 CHANGED
@@ -7,7 +7,18 @@ 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
- #### [v3.0.1](https://github.com/ChumsInc/sortable-tables/compare/v3.0.0...v3.0.1)
10
+ #### [v3.0.2](https://github.com/ChumsInc/sortable-tables/compare/v3.0.1...v3.0.2)
11
+
12
+ > 2026-01-19
13
+
14
+
15
+
16
+
17
+ ### Commits
18
+
19
+ - [`257cd6b`](https://github.com/ChumsInc/sortable-tables/commit/257cd6b3413045f481b4bf3cc689e07a2835bfa3) chore: update source mappings for index.es.js
20
+
21
+ #### [v3.0.1](https://github.com/ChumsInc/sortable-tables/compare/v3.0.0...v3.0.1) - 2026-01-19
11
22
 
12
23
  > 2026-01-19
13
24
 
package/dist/index.cjs.js CHANGED
@@ -1,4 +1,4 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const n=require("react/jsx-runtime"),m=require("react"),R=require("@emotion/styled"),f=m.createContext(null);function y({children:e,initialFields:t=[],initialSort:a=null}){const[s,l]=m.useState(t),[r,i]=m.useState(a),c=m.useCallback(x=>{l(x)},[]),o=m.useCallback(x=>{i(x)},[]),u=m.useCallback((x,p)=>{const N=s.map(j=>j.id===x?{...j,...p}:j);l(N)},[s]),d=m.useCallback(x=>s.find(p=>p.id===x),[s]),b=m.useMemo(()=>({fields:s,setFields:c,sort:r,setSort:o,getField:d,updateField:u}),[s,c,r,o,u,d]);return n.jsx(f.Provider,{value:b,children:e})}y.displayName="DataTableProvider";function E(e){var t,a,s="";if(typeof e=="string"||typeof e=="number")s+=e;else if(typeof e=="object")if(Array.isArray(e)){var l=e.length;for(t=0;t<l;t++)e[t]&&(a=E(e[t]))&&(s&&(s+=" "),s+=a)}else for(a in e)e[a]&&(s&&(s+=" "),s+=a);return s}function h(){for(var e,t,a=0,s="",l=arguments.length;a<l;a++)(e=arguments[a])&&(t=E(e))&&(s&&(s+=" "),s+=t);return s}const F=R.table`
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const n=require("react/jsx-runtime"),p=require("react"),E=require("@emotion/styled"),f=p.createContext(null);function y({children:e,initialFields:a=[],initialSort:t=null}){const[s,l]=p.useState(a),[r,c]=p.useState(t),u=p.useCallback(m=>{l(m)},[]),o=p.useCallback(m=>{c(m)},[]),d=p.useCallback((m,h)=>{const N=s.map(j=>j.id===m?{...j,...h}:j);l(N)},[s]),i=p.useCallback(m=>s.find(h=>h.id===m),[s]),b=p.useMemo(()=>({fields:s,setFields:u,sort:r,setSort:o,getField:i,updateField:d}),[s,u,r,o,d,i]);return n.jsx(f.Provider,{value:b,children:e})}y.displayName="DataTableProvider";function M(e){var a,t,s="";if(typeof e=="string"||typeof e=="number")s+=e;else if(typeof e=="object")if(Array.isArray(e)){var l=e.length;for(a=0;a<l;a++)e[a]&&(t=M(e[a]))&&(s&&(s+=" "),s+=t)}else for(t in e)e[t]&&(s&&(s+=" "),s+=t);return s}function x(){for(var e,a,t=0,s="",l=arguments.length;t<l;t++)(e=arguments[t])&&(a=M(e))&&(s&&(s+=" "),s+=a);return s}const F=E.table`
2
2
  --table-sticky-top: ${e=>e.sticky?"0":void 0};
3
3
 
4
4
  thead {
@@ -10,11 +10,11 @@
10
10
  background: ${e=>e.sticky?"linear-gradient(var(--bs-table-bg) 75%, rgba(var(--bs-secondary-bg-rgb), 0.9))":"unset"};
11
11
  }
12
12
  }
13
- `;function M({sticky:e,responsive:t,children:a,className:s,ref:l,...r}){if(t){const i=h(s,{"table-responsive":t===!0,[`table-responsive-${t}`]:t!==!0});return n.jsx("div",{className:i,children:n.jsx(F,{ref:l,...r,children:a})})}return n.jsx(F,{className:s,sticky:e,ref:l,...r,children:a})}function v({field:e,className:t,children:a,...s}){if(e.visible===!1)return null;const l=h({[`text-${e.align}`]:!!e.align},t);return n.jsx("th",{className:l,scope:"col",...s,children:a??e.title})}v.displayName="DataTableTH";function T(){const e=m.useContext(f);if(!e)throw new Error("useTableContext must be used within a DataTableProvider");return[e.fields,e.setFields]}function q({...e}){const[t]=T();return n.jsx("thead",{...e,children:n.jsx("tr",{children:t.map((a,s)=>n.jsx(v,{...a.thProps,field:a,className:h(typeof a.className=="function"?{[`text-${a.align}`]:!!a.align}:a.className)},String(a.id??s)))})})}q.displayName="DataTableHead";function D({className:e,size:t,responsive:a,sticky:s,data:l,keyField:r,rowClassName:i,renderRow:c,onSelectRow:o,selected:u,tableHeadProps:d,children:b,tfoot:x,...p}){const N=h("table",e,{[`table-${t}`]:!!t});return n.jsxs(M,{sticky:s,responsive:a,className:N,...p,children:[n.jsx(C,{}),n.jsx(q,{...d}),!!l.length&&n.jsx(S,{data:l,keyField:r,rowClassName:i,renderRow:c,onSelectRow:o,selected:u}),b,x]})}D.displayName="DataTable";function B({fields:e,...t}){return n.jsx(y,{initialFields:e,children:n.jsx(D,{...t})})}B.displayName="StandaloneDataTable";function W({field:e,row:t,className:a,as:s,...l}){if(e.visible===!1)return null;const r=h({[`text-${e.align}`]:!!e.align},a,typeof e.className=="function"?e.className(t):e.className);return m.createElement(s??e.as??"td",{className:r,scope:(s??e.as)==="th"?"row":void 0,colSpan:e.colSpan,...e.cellProps,...l},t[e.field]===void 0&&!e.render?null:typeof e.render=="function"?e.render(t):t[e.field])}W.displayName="DataTableCell";function k({className:e,rowClassName:t,selected:a,row:s,trRef:l,onClick:r,...i}){const[c]=T(),o=d=>{r?.(s,d)},u=typeof t=="function"?t(s):t;return s?n.jsx("tr",{ref:l,className:h({"table-active":a},e,u),onClick:o,...i,children:c.map((d,b)=>n.jsx(W,{field:d,row:s},String(d?.id??b)))}):null}k.displayName="DataTableRow";function S({data:e,keyField:t,rowClassName:a,renderRow:s,onSelectRow:l,selected:r="",children:i,...c}){return n.jsxs("tbody",{...c,children:[e.map(o=>{const u=String(typeof t=="function"?t(o):o[t]),d=typeof r=="function"?r(o):u===r;return s?s(o):n.jsx(k,{onClick:l,rowClassName:a,row:o,selected:d},u)}),i]})}S.displayName="DataTableTBody";function g(){const e=m.useContext(f);if(!e)throw new Error("useTableSort must be used within a DataTableProvider");return[e.sort,e.setSort]}const G=e=>e?e==="end"?"flex-end":"center":"flex-start",I=R.div`
13
+ `;function _({sticky:e,responsive:a,children:t,className:s,ref:l,...r}){if(a){const c=x(s,{"table-responsive":a===!0,[`table-responsive-${a}`]:a!==!0});return n.jsx("div",{className:c,children:n.jsx(F,{ref:l,...r,children:t})})}return n.jsx(F,{className:s,sticky:e,ref:l,...r,children:t})}function v({field:e,className:a,children:t,...s}){if(e.visible===!1)return null;const l=x({[`text-${e.align}`]:!!e.align},a);return n.jsx("th",{className:l,scope:"col",...s,children:t??e.title})}v.displayName="DataTableTH";function T(){const e=p.useContext(f);if(!e)throw new Error("useTableContext must be used within a DataTableProvider");return[e.fields,e.setFields]}function q({...e}){const[a]=T();return n.jsx("thead",{...e,children:n.jsx("tr",{children:a.map((t,s)=>n.jsx(v,{...t.thProps,field:t,className:x(typeof t.className=="function"?{[`text-${t.align}`]:!!t.align}:t.className)},String(t.id??s)))})})}q.displayName="DataTableHead";function D({className:e,size:a,responsive:t,sticky:s,data:l,keyField:r,rowClassName:c,renderRow:u,onSelectRow:o,selected:d,tableHeadProps:i,children:b,tfoot:m,...h}){const N=x("table",e,{[`table-${a}`]:!!a});return n.jsxs(_,{sticky:s,responsive:t,className:N,...h,children:[n.jsx(C,{}),n.jsx(q,{...i}),!!l.length&&n.jsx(S,{data:l,keyField:r,rowClassName:c,renderRow:u,onSelectRow:o,selected:d}),b,m]})}D.displayName="DataTable";function B({fields:e,...a}){return n.jsx(y,{initialFields:e,children:n.jsx(D,{...a})})}B.displayName="StandaloneDataTable";function k({field:e,row:a,className:t,as:s,...l}){if(e.visible===!1)return null;const r=x({[`text-${e.align}`]:!!e.align},t,typeof e.className=="function"?e.className(a):e.className);return p.createElement(s??e.as??"td",{className:r,scope:(s??e.as)==="th"?"row":void 0,colSpan:e.colSpan,...e.cellProps,...l},a[e.field]===void 0&&!e.render?null:typeof e.render=="function"?e.render(a):a[e.field])}k.displayName="DataTableCell";function $({className:e,rowClassName:a,selected:t,row:s,trRef:l,onClick:r,...c}){const[u]=T(),o=i=>{r?.(s,i)},d=typeof a=="function"?a(s):a;return s?n.jsx("tr",{ref:l,className:x({"table-active":t},e,d),onClick:o,...c,children:u.map((i,b)=>n.jsx(k,{field:i,row:s},String(i?.id??b)))}):null}$.displayName="DataTableRow";function W({fields:e,className:a,rowClassName:t,selected:s,row:l,trRef:r,onClick:c,...u}){const o=i=>{c?.(l,i)},d=typeof t=="function"?t(l):t;return l?n.jsx("tr",{ref:r,className:x({"table-active":s},a,d),onClick:o,...u,children:e.map((i,b)=>n.jsx(k,{field:i,row:l},String(i?.id??b)))}):null}W.displayName="StandaloneDataTableRow";function S({data:e,keyField:a,rowClassName:t,renderRow:s,onSelectRow:l,selected:r="",children:c,...u}){return n.jsxs("tbody",{...u,children:[e.map(o=>{const d=String(typeof a=="function"?a(o):o[a]),i=typeof r=="function"?r(o):d===r;return s?s(o):n.jsx($,{onClick:l,rowClassName:t,row:o,selected:i},d)}),c]})}S.displayName="DataTableTBody";function g(){const e=p.useContext(f);if(!e)throw new Error("useTableSort must be used within a DataTableProvider");return[e.sort,e.setSort]}const I=e=>e?e==="end"?"flex-end":"center":"flex-start",J=E.div`
14
14
  display: flex;
15
15
  width: 100%;
16
16
  flex-direction: ${e=>e.align==="end"?"row-reverse":"row"};
17
- justify-content: ${e=>G(e.align)};
17
+ justify-content: ${e=>I(e.align)};
18
18
 
19
19
  .sort-icon {
20
20
  flex-grow: ${e=>e.align==="end"?"1":"0"};
@@ -26,5 +26,5 @@
26
26
  opacity: 0.75;
27
27
  transition: opacity 0.2s;
28
28
  }
29
- `;function $({field:e,sorted:t,ascending:a,className:s,onClick:l}){if(e.visible===!1)return null;if(!e.sortable)return n.jsx(v,{field:e,className:s});const{className:r,...i}=e.thProps??{},c=h(s,r,{[`text-${e.align}`]:!!e.align}),o=()=>{l({field:e.field,ascending:t?!a:!0})},u={"bi-arrow-down":a,"bi-arrow-up":!a};return n.jsx("th",{...i,className:h("sortable",c),scope:"col",onClick:o,children:n.jsxs(I,{sorted:t,align:e.align,children:[n.jsx("div",{className:"field-title",children:e.title}),n.jsx("div",{className:h("me-1 sort-icon",u)})]})})}$.displayName="SortableTableTH";function H({onChangeSort:e}){const[t]=T(),[a]=g();return n.jsx("thead",{children:n.jsx("tr",{children:t.map((s,l)=>n.jsx($,{field:s,sorted:a?.field===s.field,ascending:a?.ascending,className:h(typeof s.className=="function"?{[`text-${s.align}`]:!!s.align}:s.className),onClick:e},l))})})}H.displayName="SortableTableHead";function _({onChangeSort:e}){const[t]=T(),[a]=g();return n.jsx(H,{fields:t,currentSort:a,onChangeSort:e})}_.displayName="SortableTableHeadWrapper";function w({className:e,size:t,responsive:a,sticky:s,data:l,keyField:r,rowClassName:i,renderRow:c,onSelectRow:o,selected:u,tableHeadProps:d,children:b,tfoot:x,onChangeSort:p,...N}){const j=h("table",e,{[`table-${t}`]:!!t});return n.jsxs(M,{className:j,responsive:a,sticky:s,...N,children:[n.jsx(C,{}),n.jsx(_,{onChangeSort:p,...d}),!!l.length&&n.jsx(S,{data:l,keyField:r,rowClassName:i,renderRow:c,onSelectRow:o,selected:u}),b,x]})}w.displayName="SortableTable";function J({nextSort:e}){const[,t]=g();return m.useEffect(()=>{console.log("setNextSort",e),t(e)},[e,t]),null}function A({fields:e,currentSort:t,...a}){return n.jsxs(y,{initialFields:e,initialSort:t,children:[n.jsx(J,{nextSort:t}),n.jsx(w,{...a})]})}A.displayName="StandaloneSortableTable";const L=[10,25,50,100,250,500,1e3];function P({value:e,pageValues:t=L,size:a,label:s,className:l,onChange:r,...i}){const c=m.useId(),o=b=>r(Number(b.target.value)),u=l??h("form-select",{[`form-select-${a}`]:!!a}),d=h("input-group",{[`input-group-${a}`]:!!a});return n.jsxs("div",{className:d,children:[n.jsx("label",{className:"input-group-text",htmlFor:c,children:s??"Rows"}),n.jsx("select",{className:u,id:c,value:e,onChange:o,...i,children:t.map(b=>n.jsx("option",{value:b,children:b},b))})]},e)}P.displayName="RowsPerPage";function V({page:e,rowsPerPage:t,onChangePage:a,count:s,size:l,showFirst:r,showLast:i,className:c,rowsPerPageProps:o,...u}){const d=s===0?0:e*t+1,b=Math.min(e*t+t,s),x=t===0?0:Math.floor((s-1)/t),p=h("btn btn-link",{[`btn-${l}`]:!!l});return n.jsxs("div",{className:h("row g-3 justify-content-end",c),...u,children:[!!o&&n.jsx("div",{className:"col-auto",children:n.jsx(P,{...o,value:t,size:l})}),n.jsx("div",{className:"col-auto",children:n.jsxs("div",{className:"row g-3 flex-nowrap align-items-baseline",children:[n.jsxs("div",{className:"col-auto",children:[d,"-",b," of ",s]}),r&&n.jsx("div",{className:"col-auto",children:n.jsx("button",{className:p,disabled:e===0,onClick:()=>a(0),"aria-label":"First page",children:n.jsx("span",{className:"bi-chevron-bar-left","aria-hidden":"true"})})}),n.jsx("div",{className:"col-auto",children:n.jsx("button",{className:p,disabled:e===0,onClick:()=>a(e-1),"aria-label":"Previous page",children:n.jsx("span",{className:"bi-chevron-left","aria-hidden":"true"})})}),n.jsx("div",{className:"col-auto",children:n.jsx("button",{className:p,disabled:e>=x,onClick:()=>a(e+1),"aria-label":"Next page",children:n.jsx("span",{className:"bi-chevron-right","aria-hidden":"true"})})}),i&&n.jsx("div",{className:"col-auto",children:n.jsx("button",{className:p,disabled:e>=x,onClick:()=>a(x),"aria-label":"Last page",children:n.jsx("span",{className:"bi-chevron-bar-right","aria-hidden":"true"})})})]})})]})}V.displayname="TablePagination";function C(){const[e]=T();return n.jsx("colgroup",{children:e.filter(t=>t.visible!==!1).map((t,a)=>n.jsx("col",{className:t.colClassName,span:t.colSpan??1},a))})}C.displayName="DataTableCols";function O(e){const t=m.useContext(f);if(!t)throw new Error("useField must be used within a DataTableProvider");return[t.fields.find(a=>a.id===e)??null,t.updateField]}function K(){const e=m.useContext(f);if(!e)throw new Error("useTableContext must be used within a DataTableProvider");return e}exports.DataTable=B;exports.DataTableCols=C;exports.DataTableContext=f;exports.DataTableProvider=y;exports.DataTableRow=k;exports.DataTableTBody=S;exports.DataTableTH=v;exports.DataTableWithContext=D;exports.RowsPerPage=P;exports.SortableTable=w;exports.SortableTableHead=H;exports.SortableTableTH=$;exports.StandaloneSortableTable=A;exports.TablePagination=V;exports.useField=O;exports.useTableContext=K;exports.useTableFields=T;exports.useTableSort=g;
29
+ `;function H({field:e,sorted:a,ascending:t,className:s,onClick:l}){if(e.visible===!1)return null;if(!e.sortable)return n.jsx(v,{field:e,className:s});const{className:r,...c}=e.thProps??{},u=x(s,r,{[`text-${e.align}`]:!!e.align}),o=()=>{l({field:e.field,ascending:a?!t:!0})},d={"bi-arrow-down":t,"bi-arrow-up":!t};return n.jsx("th",{...c,className:x("sortable",u),scope:"col",onClick:o,children:n.jsxs(J,{sorted:a,align:e.align,children:[n.jsx("div",{className:"field-title",children:e.title}),n.jsx("div",{className:x("me-1 sort-icon",d)})]})})}H.displayName="SortableTableTH";function w({onChangeSort:e}){const[a]=T(),[t]=g();return n.jsx("thead",{children:n.jsx("tr",{children:a.map((s,l)=>n.jsx(H,{field:s,sorted:t?.field===s.field,ascending:t?.ascending,className:x(typeof s.className=="function"?{[`text-${s.align}`]:!!s.align}:s.className),onClick:e},l))})})}w.displayName="SortableTableHead";function A({onChangeSort:e}){const[a]=T(),[t]=g();return n.jsx(w,{fields:a,currentSort:t,onChangeSort:e})}A.displayName="SortableTableHeadWrapper";function P({className:e,size:a,responsive:t,sticky:s,data:l,keyField:r,rowClassName:c,renderRow:u,onSelectRow:o,selected:d,tableHeadProps:i,children:b,tfoot:m,onChangeSort:h,...N}){const j=x("table",e,{[`table-${a}`]:!!a});return n.jsxs(_,{className:j,responsive:t,sticky:s,...N,children:[n.jsx(C,{}),n.jsx(A,{onChangeSort:h,...i}),!!l.length&&n.jsx(S,{data:l,keyField:r,rowClassName:c,renderRow:u,onSelectRow:o,selected:d}),b,m]})}P.displayName="SortableTable";function L({nextSort:e}){const[,a]=g();return p.useEffect(()=>{console.log("setNextSort",e),a(e)},[e,a]),null}function V({fields:e,currentSort:a,...t}){return n.jsxs(y,{initialFields:e,initialSort:a,children:[n.jsx(L,{nextSort:a}),n.jsx(P,{...t})]})}V.displayName="StandaloneSortableTable";const O=[10,25,50,100,250,500,1e3];function R({value:e,pageValues:a=O,size:t,label:s,className:l,onChange:r,...c}){const u=p.useId(),o=b=>r(Number(b.target.value)),d=l??x("form-select",{[`form-select-${t}`]:!!t}),i=x("input-group",{[`input-group-${t}`]:!!t});return n.jsxs("div",{className:i,children:[n.jsx("label",{className:"input-group-text",htmlFor:u,children:s??"Rows"}),n.jsx("select",{className:d,id:u,value:e,onChange:o,...c,children:a.map(b=>n.jsx("option",{value:b,children:b},b))})]},e)}R.displayName="RowsPerPage";function G({page:e,rowsPerPage:a,onChangePage:t,count:s,size:l,showFirst:r,showLast:c,className:u,rowsPerPageProps:o,...d}){const i=s===0?0:e*a+1,b=Math.min(e*a+a,s),m=a===0?0:Math.floor((s-1)/a),h=x("btn btn-link",{[`btn-${l}`]:!!l});return n.jsxs("div",{className:x("row g-3 justify-content-end",u),...d,children:[!!o&&n.jsx("div",{className:"col-auto",children:n.jsx(R,{...o,value:a,size:l})}),n.jsx("div",{className:"col-auto",children:n.jsxs("div",{className:"row g-3 flex-nowrap align-items-baseline",children:[n.jsxs("div",{className:"col-auto",children:[i,"-",b," of ",s]}),r&&n.jsx("div",{className:"col-auto",children:n.jsx("button",{className:h,disabled:e===0,onClick:()=>t(0),"aria-label":"First page",children:n.jsx("span",{className:"bi-chevron-bar-left","aria-hidden":"true"})})}),n.jsx("div",{className:"col-auto",children:n.jsx("button",{className:h,disabled:e===0,onClick:()=>t(e-1),"aria-label":"Previous page",children:n.jsx("span",{className:"bi-chevron-left","aria-hidden":"true"})})}),n.jsx("div",{className:"col-auto",children:n.jsx("button",{className:h,disabled:e>=m,onClick:()=>t(e+1),"aria-label":"Next page",children:n.jsx("span",{className:"bi-chevron-right","aria-hidden":"true"})})}),c&&n.jsx("div",{className:"col-auto",children:n.jsx("button",{className:h,disabled:e>=m,onClick:()=>t(m),"aria-label":"Last page",children:n.jsx("span",{className:"bi-chevron-bar-right","aria-hidden":"true"})})})]})})]})}G.displayname="TablePagination";function C(){const[e]=T();return n.jsx("colgroup",{children:e.filter(a=>a.visible!==!1).map((a,t)=>n.jsx("col",{className:a.colClassName,span:a.colSpan??1},t))})}C.displayName="DataTableCols";function K(e){const a=p.useContext(f);if(!a)throw new Error("useField must be used within a DataTableProvider");return[a.fields.find(t=>t.id===e)??null,a.updateField]}function Q(){const e=p.useContext(f);if(!e)throw new Error("useTableContext must be used within a DataTableProvider");return e}exports.DataTable=B;exports.DataTableCols=C;exports.DataTableContext=f;exports.DataTableProvider=y;exports.DataTableRow=$;exports.DataTableTBody=S;exports.DataTableTH=v;exports.DataTableWithContext=D;exports.RowsPerPage=R;exports.SortableTable=P;exports.SortableTableHead=w;exports.SortableTableTH=H;exports.StandaloneDataTableRow=W;exports.StandaloneSortableTable=V;exports.TablePagination=G;exports.useField=K;exports.useTableContext=Q;exports.useTableFields=T;exports.useTableSort=g;
30
30
  //# sourceMappingURL=index.cjs.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.cjs.js","sources":["../src/DataTableContext.ts","../src/DataTableProvider.tsx","../node_modules/clsx/dist/clsx.mjs","../src/Table.tsx","../src/DataTableTH.tsx","../src/useTableFields.ts","../src/DataTableHead.tsx","../src/DataTable.tsx","../src/StandaloneDataTable.tsx","../src/DataTableCell.tsx","../src/DataTableRow.tsx","../src/DataTableTBody.tsx","../src/useTableSort.ts","../src/SortableTableTH.tsx","../src/SortableTableHead.tsx","../src/SortableTableHeadWrapper.tsx","../src/SortableTable.tsx","../src/StandaloneSortHelper.tsx","../src/StandaloneSortableTable.tsx","../src/RowsPerPage.tsx","../src/TablePagination.tsx","../src/DataTableCols.tsx","../src/useField.ts","../src/useTableContext.ts"],"sourcesContent":["import {createContext} from \"react\";\r\nimport type {DataTableField, SortProps} from \"./types\";\r\n\r\nexport interface TableContextData<T = unknown> {\r\n fields: DataTableField<T>[];\r\n setFields: (next: DataTableField<T>[] | ((prev: DataTableField<T>[]) => DataTableField<T>[])) => void;\r\n sort: SortProps<T>|null;\r\n setSort: (next: SortProps<T> | null | ((prev:SortProps<T>|null) => SortProps<T>|null )) => void;\r\n getField: (key: string | number) => DataTableField<T> | undefined;\r\n updateField: (key: string | number, arg: Partial<DataTableField<T>>) => void;\r\n}\r\n\r\nexport const DataTableContext = createContext<TableContextData<unknown> | null>(null)\r\n","import {type ReactNode, useCallback, useMemo, useState} from \"react\";\r\nimport type {DataTableField, SortProps} from \"./types\";\r\nimport {DataTableContext, type TableContextData} from \"./DataTableContext\";\r\n\r\nexport interface TableProviderProps<T = unknown> {\r\n initialFields: DataTableField<T>[];\r\n initialSort?: SortProps<T>|null;\r\n children: ReactNode;\r\n}\r\n\r\nexport default function DataTableProvider<T = unknown>({\r\n children,\r\n initialFields = [],\r\n initialSort = null,\r\n }: TableProviderProps<T>) {\r\n const [fields, setFieldsState] = useState<DataTableField<T>[]>(initialFields);\r\n const [sort, setProviderSort] = useState<SortProps<T> | null>(initialSort);\r\n\r\n const setFields = useCallback(\r\n (fields: DataTableField<T>[] | ((prev: DataTableField<T>[]) => DataTableField<T>[])) => {\r\n setFieldsState(fields)\r\n }, []);\r\n\r\n const setSort = useCallback(\r\n (sort: SortProps<T> | null | ((sort:SortProps<T>|null) => SortProps<T> | null)) => {\r\n setProviderSort(sort)\r\n }, [])\r\n\r\n\r\n const updateField = useCallback((key: string | number, arg: Partial<DataTableField<T>>) => {\r\n const nextState = fields.map(field => {\r\n if (field.id === key) {\r\n return {...field, ...arg}\r\n }\r\n return field;\r\n });\r\n setFieldsState(nextState);\r\n }, [fields])\r\n\r\n const getField = useCallback((key: string | number) => fields.find(field => field.id === key), [fields]);\r\n\r\n\r\n const value = useMemo<TableContextData<T>>(\r\n () => ({\r\n fields,\r\n setFields,\r\n sort,\r\n setSort,\r\n getField,\r\n updateField\r\n }),\r\n [fields, setFields, sort, setSort, updateField, getField]\r\n )\r\n\r\n return (\r\n <DataTableContext.Provider value={value as unknown as TableContextData<unknown>}>\r\n {children}\r\n </DataTableContext.Provider>\r\n )\r\n}\r\nDataTableProvider.displayName = 'DataTableProvider';\r\n\r\n","function r(e){var t,f,n=\"\";if(\"string\"==typeof e||\"number\"==typeof e)n+=e;else if(\"object\"==typeof e)if(Array.isArray(e)){var o=e.length;for(t=0;t<o;t++)e[t]&&(f=r(e[t]))&&(n&&(n+=\" \"),n+=f)}else for(f in e)e[f]&&(n&&(n+=\" \"),n+=f);return n}export function clsx(){for(var e,t,f=0,n=\"\",o=arguments.length;f<o;f++)(e=arguments[f])&&(t=r(e))&&(n&&(n+=\" \"),n+=t);return n}export default clsx;","import React, {type RefObject, type TableHTMLAttributes} from 'react';\r\nimport styled from \"@emotion/styled\";\r\nimport type {DataTableProps} from \"./types\";\r\nimport clsx from \"clsx\";\r\n\r\nexport interface StyledTableProps extends TableHTMLAttributes<HTMLTableElement>, Pick<DataTableProps, 'sticky' | 'responsive'> {\r\n ref?: RefObject<HTMLTableElement>;\r\n}\r\n\r\nconst StyledTable = styled.table<StyledTableProps>`\r\n --table-sticky-top: ${props => props.sticky ? '0' : undefined};\r\n\r\n thead {\r\n tr:nth-of-type(1) td,\r\n tr:nth-of-type(1) th {\r\n top: var(--table-sticky-top, unset);\r\n position: ${props => props.sticky ? \"sticky\" : \"unset\"};\r\n z-index: ${props => props.sticky ? 10 : \"unset\"};\r\n background: ${props => props.sticky ? \"linear-gradient(var(--bs-table-bg) 75%, rgba(var(--bs-secondary-bg-rgb), 0.9))\" : \"unset\"};\r\n }\r\n }\r\n`\r\n\r\n\r\nexport default function Table({\r\n sticky,\r\n responsive,\r\n children,\r\n className,\r\n ref,\r\n ...rest\r\n }: StyledTableProps) {\r\n if (responsive) {\r\n const _className = clsx(className, {\r\n 'table-responsive': responsive === true,\r\n [`table-responsive-${responsive}`]: responsive !== true,\r\n })\r\n return (\r\n <div className={_className}>\r\n <StyledTable ref={ref} {...rest}>{children}</StyledTable>\r\n </div>\r\n )\r\n }\r\n\r\n return (\r\n <StyledTable className={className} sticky={sticky} ref={ref} {...rest}>{children}</StyledTable>\r\n )\r\n}\r\n\r\n","import React from \"react\";\r\nimport type {DataTableTHProps} from \"./types\";\r\nimport clsx from \"clsx\";\r\n\r\n\r\nexport default function DataTableTH<T = unknown>({\r\n field,\r\n className,\r\n children,\r\n ...rest\r\n }: DataTableTHProps<T>) {\r\n if (field.visible === false) {\r\n return null;\r\n }\r\n const thClassName = clsx({[`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\n","import {useContext} from \"react\";\r\nimport {DataTableContext, type TableContextData} from \"./DataTableContext\";\r\n\r\n/**\r\n * Returns a tuple containing the fields and a function to update them.\r\n * @returns [fields, setFields]\r\n */\r\nexport function useTableFields<T = unknown>(): [\r\n fields: TableContextData<T>['fields'],\r\n setFields: TableContextData<T>['setFields']\r\n] {\r\n const context = useContext(DataTableContext) as TableContextData<T>;\r\n if (!context) {\r\n throw new Error('useTableContext must be used within a DataTableProvider');\r\n }\r\n return [\r\n context.fields,\r\n context.setFields\r\n ];\r\n}\r\n","import React, {type TableHTMLAttributes} from \"react\";\r\nimport DataTableTH from \"./DataTableTH\";\r\nimport clsx from \"clsx\";\r\nimport {useTableFields} from \"./useTableFields\";\r\n\r\n\r\nexport default function DataTableHead<T = unknown>({...rest}: TableHTMLAttributes<HTMLTableSectionElement>) {\r\n const [fields] = useTableFields<T>()\r\n return (\r\n <thead {...rest}>\r\n <tr>\r\n {fields\r\n .map((field, index) => (\r\n <DataTableTH key={String(field.id ?? index)}\r\n {...field.thProps}\r\n field={field}\r\n className={clsx(\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\nDataTableHead.displayName = 'DataTableHead';\r\n","import type {DataTableProps} from \"./types\";\r\nimport clsx from \"clsx\";\r\nimport Table from \"./Table\";\r\nimport {DataTableCols, DataTableTBody} from \"./index\";\r\nimport DataTableHead from \"./DataTableHead\";\r\n\r\nexport default function DataTable<T = unknown>({\r\n className,\r\n size,\r\n responsive,\r\n sticky,\r\n data,\r\n keyField,\r\n rowClassName,\r\n renderRow,\r\n onSelectRow,\r\n selected,\r\n tableHeadProps,\r\n children,\r\n tfoot,\r\n ...rest\r\n }: Omit<DataTableProps<T>, 'fields'>) {\r\n const tableClassName = clsx('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 <DataTableCols/>\r\n <DataTableHead {...tableHeadProps}/>\r\n {!!data.length && (\r\n <DataTableTBody 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\nDataTable.displayName = 'DataTable';\r\n","import type {DataTableProps} from \"./types\";\r\nimport DataTableProvider from \"./DataTableProvider\";\r\nimport DataTable from \"./DataTable\";\r\n\r\n\r\nexport default function StandaloneDataTable<T = unknown>({\r\n fields,\r\n ...rest\r\n }: DataTableProps<T>) {\r\n return (\r\n <DataTableProvider initialFields={fields}>\r\n <DataTable {...rest}/>\r\n </DataTableProvider>\r\n )\r\n}\r\nStandaloneDataTable.displayName = 'StandaloneDataTable';\r\n","import {createElement, type ReactNode} from 'react';\r\nimport type {DataTableCellProps} from \"./types\";\r\nimport clsx from \"clsx\";\r\n\r\n\r\nexport default function DataTableCell<T = unknown>({field, row, className, as, ...rest}: DataTableCellProps<T>) {\r\n if (field.visible === false) {\r\n return null;\r\n }\r\n const cellClassName = clsx(\r\n {[`text-${field.align}`]: !!field.align},\r\n className,\r\n typeof field.className === 'function' ? field.className(row) : field.className\r\n );\r\n return createElement(\r\n (as ?? field.as) ?? 'td',\r\n {\r\n className: cellClassName,\r\n scope: (as ?? field.as) === 'th' ? 'row' : undefined,\r\n colSpan: field.colSpan,\r\n ...field.cellProps,\r\n ...rest\r\n },\r\n (row[field.field] === undefined && !field.render)\r\n ? null\r\n : (\r\n typeof field.render === 'function'\r\n ? field.render(row)\r\n : row[field.field] as ReactNode\r\n )\r\n )\r\n}\r\nDataTableCell.displayName = 'DataTableCell';\r\n","import React, {type MouseEvent} from 'react';\r\nimport type {DataTableRowProps} from \"./types\";\r\nimport DataTableCell from \"./DataTableCell\";\r\nimport clsx from \"clsx\";\r\nimport {useTableFields} from \"./useTableFields\";\r\n\r\n\r\nexport default function DataTableRow<T = unknown>({\r\n className,\r\n rowClassName,\r\n selected,\r\n row,\r\n trRef,\r\n onClick,\r\n ...rest\r\n }: DataTableRowProps<T>) {\r\n const [fields] = useTableFields<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={clsx({'table-active': selected}, className, _className)}\r\n onClick={clickHandler}\r\n {...rest}>\r\n {fields\r\n .map((field, index) => (\r\n <DataTableCell key={String(field?.id ?? index)} field={field} row={row}/>\r\n ))}\r\n </tr>\r\n )\r\n}\r\nDataTableRow.displayName = 'DataTableRow';\r\n","import React from 'react';\r\nimport DataTableRow from \"./DataTableRow\";\r\nimport type {DataTableTBodyProps} from \"./types\";\r\n\r\n\r\nexport default function DataTableTBody<T = unknown>({\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 row={row} selected={isSelected}/>\r\n )\r\n })}\r\n {children}\r\n </tbody>\r\n )\r\n}\r\nDataTableTBody.displayName = 'DataTableTBody';\r\n","import {useContext} from \"react\";\r\nimport {DataTableContext, type TableContextData} from \"./DataTableContext\";\r\n\r\n/**\r\n * Returns a tuple containing the currentSort and a function to update the sort.\r\n * @returns [sort, setSort]\r\n */\r\nexport function useTableSort<T = unknown>(): [\r\n sort: TableContextData<T>['sort'],\r\n setSort: TableContextData<T>['setSort']\r\n] {\r\n const context = useContext(DataTableContext) as TableContextData<T>;\r\n if (!context) {\r\n throw new Error('useTableSort must be used within a DataTableProvider');\r\n }\r\n return [\r\n context.sort,\r\n context.setSort\r\n ];\r\n}\r\n","import React from \"react\";\r\nimport DataTableTH from \"./DataTableTH\";\r\nimport type {SortableTableTHProps, UIFlexAlign} from \"./types\";\r\nimport styled from '@emotion/styled';\r\nimport clsx from \"clsx\";\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\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\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\nexport default function 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.visible === false) {\r\n return null;\r\n }\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 = clsx(\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={clsx(\"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={clsx('me-1 sort-icon', iconClassName)}/>\r\n </FieldTitle>\r\n </th>\r\n )\r\n}\r\nSortableTableTH.displayName = 'SortableTableTH';\r\n","import React from \"react\";\r\nimport SortableTableTH from \"./SortableTableTH\";\r\nimport type {SortableTableHeadProps} from \"./types\";\r\nimport clsx from \"clsx\";\r\nimport {useTableFields} from \"./useTableFields\";\r\nimport {useTableSort} from \"./useTableSort\";\r\n\r\nexport default function SortableTableHead<T = unknown>({\r\n onChangeSort,\r\n }: SortableTableHeadProps<T>) {\r\n const [fields] = useTableFields<T>()\r\n const [sort] = useTableSort<T>();\r\n return (\r\n <thead>\r\n <tr>\r\n {fields\r\n .map((tableField, index) => (\r\n <SortableTableTH<T> key={index} field={tableField}\r\n sorted={sort?.field === tableField.field} ascending={sort?.ascending}\r\n className={clsx(\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\n\r\n","import {useTableFields} from \"./useTableFields\";\r\nimport {useTableSort} from \"./useTableSort\";\r\nimport SortableTableHead from \"./SortableTableHead\";\r\nimport type {SortProps} from \"./types\";\r\n\r\nexport interface SortableTableHeadWrapperProps<T = unknown> {\r\n onChangeSort: (sort: SortProps<T>) => void;\r\n}\r\n\r\nexport default function SortableTableHeadWrapper<T = unknown>({\r\n onChangeSort,\r\n }: SortableTableHeadWrapperProps<T>) {\r\n const [fields] = useTableFields<T>()\r\n const [sort] = useTableSort<T>();\r\n\r\n return (\r\n <SortableTableHead fields={fields} currentSort={sort} onChangeSort={onChangeSort} />\r\n )\r\n}\r\nSortableTableHeadWrapper.displayName = 'SortableTableHeadWrapper';\r\n","import type {SortableTableProps} from \"./types\";\r\nimport clsx from \"clsx\";\r\nimport Table from \"./Table\";\r\nimport {DataTableCols, DataTableTBody} from \"./index\";\r\nimport React from \"react\";\r\nimport SortableTableHeadWrapper from \"./SortableTableHeadWrapper\";\r\n\r\nexport default function SortableTable<T = unknown>({\r\n className,\r\n size,\r\n responsive,\r\n sticky,\r\n data,\r\n keyField,\r\n rowClassName,\r\n renderRow,\r\n onSelectRow,\r\n selected,\r\n tableHeadProps,\r\n children,\r\n tfoot,\r\n onChangeSort,\r\n ...rest\r\n }: Omit<SortableTableProps<T>, 'fields' | 'currentSort'>) {\r\n const tableClassName = clsx('table', className, {\r\n [`table-${size}`]: !!size,\r\n })\r\n\r\n return (\r\n <Table className={tableClassName} responsive={responsive} sticky={sticky} {...rest}>\r\n <DataTableCols/>\r\n <SortableTableHeadWrapper onChangeSort={onChangeSort} {...tableHeadProps}/>\r\n {!!data.length && (\r\n <DataTableTBody 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\nSortableTable.displayName = 'SortableTable';\r\n","import type {SortProps} from \"./types\";\r\nimport {useTableSort} from \"./useTableSort\";\r\nimport {useEffect} from \"react\";\r\n\r\nexport interface StandaloneSortHelperProps<T = unknown> {\r\n nextSort: SortProps<T>\r\n}\r\nexport function StandaloneSortHelper<T = unknown>({nextSort}:StandaloneSortHelperProps<T>) {\r\n const [, setNextSort] = useTableSort<T>();\r\n useEffect(() => {\r\n console.log('setNextSort', nextSort);\r\n setNextSort(nextSort);\r\n }, [nextSort, setNextSort]);\r\n return null;\r\n}\r\n","import React from 'react';\r\nimport type {SortableTableProps} from \"./types\";\r\nimport DataTableProvider from \"./DataTableProvider\";\r\nimport SortableTable from \"./SortableTable\";\r\nimport {StandaloneSortHelper} from \"./StandaloneSortHelper\";\r\n\r\n\r\nexport default function StandaloneSortableTable<T = unknown>({\r\n fields,\r\n currentSort,\r\n ...rest\r\n }: SortableTableProps<T>) {\r\n return (\r\n <DataTableProvider initialFields={fields} initialSort={currentSort}>\r\n <StandaloneSortHelper nextSort={currentSort} />\r\n <SortableTable {...rest}/>\r\n </DataTableProvider>\r\n )\r\n}\r\n\r\nStandaloneSortableTable.displayName = 'StandaloneSortableTable';\r\n","import React, {type ChangeEvent, useId} from 'react';\r\nimport type {RowsPerPageProps} from \"./types\";\r\nimport clsx from \"clsx\";\r\n\r\nconst defaultRowsPerPageValues: number[] = [10, 25, 50, 100, 250, 500, 1000];\r\n\r\nexport default function 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 ?? clsx('form-select', {[`form-select-${size}`]: !!size});\r\n const inputGroupClassName = clsx('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\nRowsPerPage.displayName = 'RowsPerPage';\r\n","import React from 'react';\r\nimport RowsPerPage from \"./RowsPerPage\";\r\nimport type {TablePaginationProps} from \"./types\";\r\nimport clsx from \"clsx\";\r\n\r\nexport default function 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 = clsx(\"btn btn-link\", {[`btn-${size}`]: !!size});\r\n\r\n return (\r\n <div className={clsx(\"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\nTablePagination.displayname = 'TablePagination';\r\n","import {useTableFields} from \"./useTableFields\";\r\n\r\nexport default function DataTableCols<T = unknown>() {\r\n const [fields] = useTableFields<T>()\r\n return (\r\n <colgroup>\r\n {fields\r\n .filter(field => field.visible !== false)\r\n .map((field, index) => (\r\n <col key={index}\r\n className={field.colClassName}\r\n span={field.colSpan ?? 1}/>\r\n ))}\r\n </colgroup>\r\n )\r\n}\r\nDataTableCols.displayName = 'DataTableCols';\r\n\r\n","import type {DataTableField} from \"./types\";\r\nimport {useContext} from \"react\";\r\nimport {DataTableContext, type TableContextData} from \"./DataTableContext\";\r\n\r\nexport type UseFieldArg<T = unknown> = keyof T & ((string | number) & {})\r\nexport function useField<T = unknown>(key: UseFieldArg<T>): [\r\n field:DataTableField<T>|null,\r\n updateField: (key: string|number, arg: Partial<DataTableField<T>>) => void\r\n] {\r\n const context = useContext(DataTableContext) as TableContextData<T>;\r\n if (!context) {\r\n throw new Error('useField must be used within a DataTableProvider');\r\n }\r\n\r\n return [\r\n context.fields.find(field => field.id === key) ?? null,\r\n context.updateField,\r\n ]\r\n}\r\n","import {useContext} from \"react\";\r\nimport {DataTableContext, type TableContextData} from \"./DataTableContext\";\r\n\r\nexport function useTableContext<T = unknown>():TableContextData<T> {\r\n const context = useContext(DataTableContext) as TableContextData<T>;\r\n if (!context) {\r\n throw new Error('useTableContext must be used within a DataTableProvider');\r\n }\r\n return context;\r\n}\r\n"],"names":["DataTableContext","createContext","DataTableProvider","children","initialFields","initialSort","fields","setFieldsState","useState","sort","setProviderSort","setFields","useCallback","setSort","updateField","key","arg","nextState","field","getField","value","useMemo","jsx","r","f","n","o","clsx","StyledTable","styled","props","Table","sticky","responsive","className","ref","rest","_className","DataTableTH","thClassName","useTableFields","context","useContext","DataTableHead","index","DataTable","size","data","keyField","rowClassName","renderRow","onSelectRow","selected","tableHeadProps","tfoot","tableClassName","DataTableCols","DataTableTBody","StandaloneDataTable","DataTableCell","row","as","cellClassName","createElement","DataTableRow","trRef","onClick","clickHandler","ev","jsxs","keyValue","isSelected","useTableSort","flexJustifyContent","align","FieldTitle","SortableTableTH","sorted","ascending","_thClassName","thProps","iconClassName","SortableTableHead","onChangeSort","tableField","SortableTableHeadWrapper","SortableTable","StandaloneSortHelper","nextSort","setNextSort","useEffect","StandaloneSortableTable","currentSort","defaultRowsPerPageValues","RowsPerPage","pageValues","label","onChange","id","useId","changeHandler","selectClassName","inputGroupClassName","TablePagination","page","rowsPerPage","onChangePage","count","showFirst","showLast","rowsPerPageProps","first","last","lastPage","buttonClassName","useField","useTableContext"],"mappings":"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","x_google_ignoreList":[2]}
1
+ {"version":3,"file":"index.cjs.js","sources":["../src/DataTableContext.ts","../src/DataTableProvider.tsx","../node_modules/clsx/dist/clsx.mjs","../src/Table.tsx","../src/DataTableTH.tsx","../src/useTableFields.ts","../src/DataTableHead.tsx","../src/DataTable.tsx","../src/StandaloneDataTable.tsx","../src/DataTableCell.tsx","../src/DataTableRow.tsx","../src/StandaloneDataTableRow.tsx","../src/DataTableTBody.tsx","../src/useTableSort.ts","../src/SortableTableTH.tsx","../src/SortableTableHead.tsx","../src/SortableTableHeadWrapper.tsx","../src/SortableTable.tsx","../src/StandaloneSortHelper.tsx","../src/StandaloneSortableTable.tsx","../src/RowsPerPage.tsx","../src/TablePagination.tsx","../src/DataTableCols.tsx","../src/useField.ts","../src/useTableContext.ts"],"sourcesContent":["import {createContext} from \"react\";\r\nimport type {DataTableField, SortProps} from \"./types\";\r\n\r\nexport interface TableContextData<T = unknown> {\r\n fields: DataTableField<T>[];\r\n setFields: (next: DataTableField<T>[] | ((prev: DataTableField<T>[]) => DataTableField<T>[])) => void;\r\n sort: SortProps<T>|null;\r\n setSort: (next: SortProps<T> | null | ((prev:SortProps<T>|null) => SortProps<T>|null )) => void;\r\n getField: (key: string | number) => DataTableField<T> | undefined;\r\n updateField: (key: string | number, arg: Partial<DataTableField<T>>) => void;\r\n}\r\n\r\nexport const DataTableContext = createContext<TableContextData<unknown> | null>(null)\r\n","import {type ReactNode, useCallback, useMemo, useState} from \"react\";\r\nimport type {DataTableField, SortProps} from \"./types\";\r\nimport {DataTableContext, type TableContextData} from \"./DataTableContext\";\r\n\r\nexport interface TableProviderProps<T = unknown> {\r\n initialFields: DataTableField<T>[];\r\n initialSort?: SortProps<T>|null;\r\n children: ReactNode;\r\n}\r\n\r\nexport default function DataTableProvider<T = unknown>({\r\n children,\r\n initialFields = [],\r\n initialSort = null,\r\n }: TableProviderProps<T>) {\r\n const [fields, setFieldsState] = useState<DataTableField<T>[]>(initialFields);\r\n const [sort, setProviderSort] = useState<SortProps<T> | null>(initialSort);\r\n\r\n const setFields = useCallback(\r\n (fields: DataTableField<T>[] | ((prev: DataTableField<T>[]) => DataTableField<T>[])) => {\r\n setFieldsState(fields)\r\n }, []);\r\n\r\n const setSort = useCallback(\r\n (sort: SortProps<T> | null | ((sort:SortProps<T>|null) => SortProps<T> | null)) => {\r\n setProviderSort(sort)\r\n }, [])\r\n\r\n\r\n const updateField = useCallback((key: string | number, arg: Partial<DataTableField<T>>) => {\r\n const nextState = fields.map(field => {\r\n if (field.id === key) {\r\n return {...field, ...arg}\r\n }\r\n return field;\r\n });\r\n setFieldsState(nextState);\r\n }, [fields])\r\n\r\n const getField = useCallback((key: string | number) => fields.find(field => field.id === key), [fields]);\r\n\r\n\r\n const value = useMemo<TableContextData<T>>(\r\n () => ({\r\n fields,\r\n setFields,\r\n sort,\r\n setSort,\r\n getField,\r\n updateField\r\n }),\r\n [fields, setFields, sort, setSort, updateField, getField]\r\n )\r\n\r\n return (\r\n <DataTableContext.Provider value={value as unknown as TableContextData<unknown>}>\r\n {children}\r\n </DataTableContext.Provider>\r\n )\r\n}\r\nDataTableProvider.displayName = 'DataTableProvider';\r\n\r\n","function r(e){var t,f,n=\"\";if(\"string\"==typeof e||\"number\"==typeof e)n+=e;else if(\"object\"==typeof e)if(Array.isArray(e)){var o=e.length;for(t=0;t<o;t++)e[t]&&(f=r(e[t]))&&(n&&(n+=\" \"),n+=f)}else for(f in e)e[f]&&(n&&(n+=\" \"),n+=f);return n}export function clsx(){for(var e,t,f=0,n=\"\",o=arguments.length;f<o;f++)(e=arguments[f])&&(t=r(e))&&(n&&(n+=\" \"),n+=t);return n}export default clsx;","import React, {type RefObject, type TableHTMLAttributes} from 'react';\r\nimport styled from \"@emotion/styled\";\r\nimport type {DataTableProps} from \"./types\";\r\nimport clsx from \"clsx\";\r\n\r\nexport interface StyledTableProps extends TableHTMLAttributes<HTMLTableElement>, Pick<DataTableProps, 'sticky' | 'responsive'> {\r\n ref?: RefObject<HTMLTableElement>;\r\n}\r\n\r\nconst StyledTable = styled.table<StyledTableProps>`\r\n --table-sticky-top: ${props => props.sticky ? '0' : undefined};\r\n\r\n thead {\r\n tr:nth-of-type(1) td,\r\n tr:nth-of-type(1) th {\r\n top: var(--table-sticky-top, unset);\r\n position: ${props => props.sticky ? \"sticky\" : \"unset\"};\r\n z-index: ${props => props.sticky ? 10 : \"unset\"};\r\n background: ${props => props.sticky ? \"linear-gradient(var(--bs-table-bg) 75%, rgba(var(--bs-secondary-bg-rgb), 0.9))\" : \"unset\"};\r\n }\r\n }\r\n`\r\n\r\n\r\nexport default function Table({\r\n sticky,\r\n responsive,\r\n children,\r\n className,\r\n ref,\r\n ...rest\r\n }: StyledTableProps) {\r\n if (responsive) {\r\n const _className = clsx(className, {\r\n 'table-responsive': responsive === true,\r\n [`table-responsive-${responsive}`]: responsive !== true,\r\n })\r\n return (\r\n <div className={_className}>\r\n <StyledTable ref={ref} {...rest}>{children}</StyledTable>\r\n </div>\r\n )\r\n }\r\n\r\n return (\r\n <StyledTable className={className} sticky={sticky} ref={ref} {...rest}>{children}</StyledTable>\r\n )\r\n}\r\n\r\n","import React from \"react\";\r\nimport type {DataTableTHProps} from \"./types\";\r\nimport clsx from \"clsx\";\r\n\r\n\r\nexport default function DataTableTH<T = unknown>({\r\n field,\r\n className,\r\n children,\r\n ...rest\r\n }: DataTableTHProps<T>) {\r\n if (field.visible === false) {\r\n return null;\r\n }\r\n const thClassName = clsx({[`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\n","import {useContext} from \"react\";\r\nimport {DataTableContext, type TableContextData} from \"./DataTableContext\";\r\n\r\n/**\r\n * Returns a tuple containing the fields and a function to update them.\r\n * @returns [fields, setFields]\r\n */\r\nexport function useTableFields<T = unknown>(): [\r\n fields: TableContextData<T>['fields'],\r\n setFields: TableContextData<T>['setFields']\r\n] {\r\n const context = useContext(DataTableContext) as TableContextData<T>;\r\n if (!context) {\r\n throw new Error('useTableContext must be used within a DataTableProvider');\r\n }\r\n return [\r\n context.fields,\r\n context.setFields\r\n ];\r\n}\r\n","import React, {type TableHTMLAttributes} from \"react\";\r\nimport DataTableTH from \"./DataTableTH\";\r\nimport clsx from \"clsx\";\r\nimport {useTableFields} from \"./useTableFields\";\r\n\r\n\r\nexport default function DataTableHead<T = unknown>({...rest}: TableHTMLAttributes<HTMLTableSectionElement>) {\r\n const [fields] = useTableFields<T>()\r\n return (\r\n <thead {...rest}>\r\n <tr>\r\n {fields\r\n .map((field, index) => (\r\n <DataTableTH key={String(field.id ?? index)}\r\n {...field.thProps}\r\n field={field}\r\n className={clsx(\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\nDataTableHead.displayName = 'DataTableHead';\r\n","import type {DataTableProps} from \"./types\";\r\nimport clsx from \"clsx\";\r\nimport Table from \"./Table\";\r\nimport {DataTableCols, DataTableTBody} from \"./index\";\r\nimport DataTableHead from \"./DataTableHead\";\r\n\r\nexport default function DataTable<T = unknown>({\r\n className,\r\n size,\r\n responsive,\r\n sticky,\r\n data,\r\n keyField,\r\n rowClassName,\r\n renderRow,\r\n onSelectRow,\r\n selected,\r\n tableHeadProps,\r\n children,\r\n tfoot,\r\n ...rest\r\n }: Omit<DataTableProps<T>, 'fields'>) {\r\n const tableClassName = clsx('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 <DataTableCols/>\r\n <DataTableHead {...tableHeadProps}/>\r\n {!!data.length && (\r\n <DataTableTBody 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\nDataTable.displayName = 'DataTable';\r\n","import type {DataTableProps} from \"./types\";\r\nimport DataTableProvider from \"./DataTableProvider\";\r\nimport DataTable from \"./DataTable\";\r\n\r\n\r\nexport default function StandaloneDataTable<T = unknown>({\r\n fields,\r\n ...rest\r\n }: DataTableProps<T>) {\r\n return (\r\n <DataTableProvider initialFields={fields}>\r\n <DataTable {...rest}/>\r\n </DataTableProvider>\r\n )\r\n}\r\nStandaloneDataTable.displayName = 'StandaloneDataTable';\r\n","import {createElement, type ReactNode} from 'react';\r\nimport type {DataTableCellProps} from \"./types\";\r\nimport clsx from \"clsx\";\r\n\r\n\r\nexport default function DataTableCell<T = unknown>({field, row, className, as, ...rest}: DataTableCellProps<T>) {\r\n if (field.visible === false) {\r\n return null;\r\n }\r\n const cellClassName = clsx(\r\n {[`text-${field.align}`]: !!field.align},\r\n className,\r\n typeof field.className === 'function' ? field.className(row) : field.className\r\n );\r\n return createElement(\r\n (as ?? field.as) ?? 'td',\r\n {\r\n className: cellClassName,\r\n scope: (as ?? field.as) === 'th' ? 'row' : undefined,\r\n colSpan: field.colSpan,\r\n ...field.cellProps,\r\n ...rest\r\n },\r\n (row[field.field] === undefined && !field.render)\r\n ? null\r\n : (\r\n typeof field.render === 'function'\r\n ? field.render(row)\r\n : row[field.field] as ReactNode\r\n )\r\n )\r\n}\r\nDataTableCell.displayName = 'DataTableCell';\r\n","import React, {type MouseEvent} from 'react';\r\nimport type {DataTableRowProps} from \"./types\";\r\nimport DataTableCell from \"./DataTableCell\";\r\nimport clsx from \"clsx\";\r\nimport {useTableFields} from \"./useTableFields\";\r\n\r\n\r\nexport default function DataTableRow<T = unknown>({\r\n className,\r\n rowClassName,\r\n selected,\r\n row,\r\n trRef,\r\n onClick,\r\n ...rest\r\n }: DataTableRowProps<T>) {\r\n const [fields] = useTableFields<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={clsx({'table-active': selected}, className, _className)}\r\n onClick={clickHandler}\r\n {...rest}>\r\n {fields\r\n .map((field, index) => (\r\n <DataTableCell key={String(field?.id ?? index)} field={field} row={row}/>\r\n ))}\r\n </tr>\r\n )\r\n}\r\nDataTableRow.displayName = 'DataTableRow';\r\n","import React, {type MouseEvent} from 'react';\r\nimport type {DataTableField, DataTableRowProps} from \"./types\";\r\nimport DataTableCell from \"./DataTableCell\";\r\nimport clsx from \"clsx\";\r\nimport {useTableFields} from \"./useTableFields\";\r\n\r\nexport interface StandaloneDataTableRowProps<T = unknown> extends DataTableRowProps<T> {\r\n fields: DataTableField<T>[]\r\n}\r\n\r\nexport default function StandaloneDataTableRow<T = unknown>({\r\n fields,\r\n className,\r\n rowClassName,\r\n selected,\r\n row,\r\n trRef,\r\n onClick,\r\n ...rest\r\n }: StandaloneDataTableRowProps<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={clsx({'table-active': selected}, className, _className)}\r\n onClick={clickHandler}\r\n {...rest}>\r\n {fields\r\n .map((field, index) => (\r\n <DataTableCell key={String(field?.id ?? index)} field={field} row={row}/>\r\n ))}\r\n </tr>\r\n )\r\n}\r\nStandaloneDataTableRow.displayName = 'StandaloneDataTableRow';\r\n","import React from 'react';\r\nimport DataTableRow from \"./DataTableRow\";\r\nimport type {DataTableTBodyProps} from \"./types\";\r\n\r\n\r\nexport default function DataTableTBody<T = unknown>({\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 row={row} selected={isSelected}/>\r\n )\r\n })}\r\n {children}\r\n </tbody>\r\n )\r\n}\r\nDataTableTBody.displayName = 'DataTableTBody';\r\n","import {useContext} from \"react\";\r\nimport {DataTableContext, type TableContextData} from \"./DataTableContext\";\r\n\r\n/**\r\n * Returns a tuple containing the currentSort and a function to update the sort.\r\n * @returns [sort, setSort]\r\n */\r\nexport function useTableSort<T = unknown>(): [\r\n sort: TableContextData<T>['sort'],\r\n setSort: TableContextData<T>['setSort']\r\n] {\r\n const context = useContext(DataTableContext) as TableContextData<T>;\r\n if (!context) {\r\n throw new Error('useTableSort must be used within a DataTableProvider');\r\n }\r\n return [\r\n context.sort,\r\n context.setSort\r\n ];\r\n}\r\n","import React from \"react\";\r\nimport DataTableTH from \"./DataTableTH\";\r\nimport type {SortableTableTHProps, UIFlexAlign} from \"./types\";\r\nimport styled from '@emotion/styled';\r\nimport clsx from \"clsx\";\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\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\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\nexport default function 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.visible === false) {\r\n return null;\r\n }\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 = clsx(\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={clsx(\"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={clsx('me-1 sort-icon', iconClassName)}/>\r\n </FieldTitle>\r\n </th>\r\n )\r\n}\r\nSortableTableTH.displayName = 'SortableTableTH';\r\n","import React from \"react\";\r\nimport SortableTableTH from \"./SortableTableTH\";\r\nimport type {SortableTableHeadProps} from \"./types\";\r\nimport clsx from \"clsx\";\r\nimport {useTableFields} from \"./useTableFields\";\r\nimport {useTableSort} from \"./useTableSort\";\r\n\r\nexport default function SortableTableHead<T = unknown>({\r\n onChangeSort,\r\n }: SortableTableHeadProps<T>) {\r\n const [fields] = useTableFields<T>()\r\n const [sort] = useTableSort<T>();\r\n return (\r\n <thead>\r\n <tr>\r\n {fields\r\n .map((tableField, index) => (\r\n <SortableTableTH<T> key={index} field={tableField}\r\n sorted={sort?.field === tableField.field} ascending={sort?.ascending}\r\n className={clsx(\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\n\r\n","import {useTableFields} from \"./useTableFields\";\r\nimport {useTableSort} from \"./useTableSort\";\r\nimport SortableTableHead from \"./SortableTableHead\";\r\nimport type {SortProps} from \"./types\";\r\n\r\nexport interface SortableTableHeadWrapperProps<T = unknown> {\r\n onChangeSort: (sort: SortProps<T>) => void;\r\n}\r\n\r\nexport default function SortableTableHeadWrapper<T = unknown>({\r\n onChangeSort,\r\n }: SortableTableHeadWrapperProps<T>) {\r\n const [fields] = useTableFields<T>()\r\n const [sort] = useTableSort<T>();\r\n\r\n return (\r\n <SortableTableHead fields={fields} currentSort={sort} onChangeSort={onChangeSort} />\r\n )\r\n}\r\nSortableTableHeadWrapper.displayName = 'SortableTableHeadWrapper';\r\n","import type {SortableTableProps} from \"./types\";\r\nimport clsx from \"clsx\";\r\nimport Table from \"./Table\";\r\nimport {DataTableCols, DataTableTBody} from \"./index\";\r\nimport React from \"react\";\r\nimport SortableTableHeadWrapper from \"./SortableTableHeadWrapper\";\r\n\r\nexport default function SortableTable<T = unknown>({\r\n className,\r\n size,\r\n responsive,\r\n sticky,\r\n data,\r\n keyField,\r\n rowClassName,\r\n renderRow,\r\n onSelectRow,\r\n selected,\r\n tableHeadProps,\r\n children,\r\n tfoot,\r\n onChangeSort,\r\n ...rest\r\n }: Omit<SortableTableProps<T>, 'fields' | 'currentSort'>) {\r\n const tableClassName = clsx('table', className, {\r\n [`table-${size}`]: !!size,\r\n })\r\n\r\n return (\r\n <Table className={tableClassName} responsive={responsive} sticky={sticky} {...rest}>\r\n <DataTableCols/>\r\n <SortableTableHeadWrapper onChangeSort={onChangeSort} {...tableHeadProps}/>\r\n {!!data.length && (\r\n <DataTableTBody 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\nSortableTable.displayName = 'SortableTable';\r\n","import type {SortProps} from \"./types\";\r\nimport {useTableSort} from \"./useTableSort\";\r\nimport {useEffect} from \"react\";\r\n\r\nexport interface StandaloneSortHelperProps<T = unknown> {\r\n nextSort: SortProps<T>\r\n}\r\nexport function StandaloneSortHelper<T = unknown>({nextSort}:StandaloneSortHelperProps<T>) {\r\n const [, setNextSort] = useTableSort<T>();\r\n useEffect(() => {\r\n console.log('setNextSort', nextSort);\r\n setNextSort(nextSort);\r\n }, [nextSort, setNextSort]);\r\n return null;\r\n}\r\n","import React from 'react';\r\nimport type {SortableTableProps} from \"./types\";\r\nimport DataTableProvider from \"./DataTableProvider\";\r\nimport SortableTable from \"./SortableTable\";\r\nimport {StandaloneSortHelper} from \"./StandaloneSortHelper\";\r\n\r\n\r\nexport default function StandaloneSortableTable<T = unknown>({\r\n fields,\r\n currentSort,\r\n ...rest\r\n }: SortableTableProps<T>) {\r\n return (\r\n <DataTableProvider initialFields={fields} initialSort={currentSort}>\r\n <StandaloneSortHelper nextSort={currentSort} />\r\n <SortableTable {...rest}/>\r\n </DataTableProvider>\r\n )\r\n}\r\n\r\nStandaloneSortableTable.displayName = 'StandaloneSortableTable';\r\n","import React, {type ChangeEvent, useId} from 'react';\r\nimport type {RowsPerPageProps} from \"./types\";\r\nimport clsx from \"clsx\";\r\n\r\nconst defaultRowsPerPageValues: number[] = [10, 25, 50, 100, 250, 500, 1000];\r\n\r\nexport default function 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 ?? clsx('form-select', {[`form-select-${size}`]: !!size});\r\n const inputGroupClassName = clsx('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\nRowsPerPage.displayName = 'RowsPerPage';\r\n","import React from 'react';\r\nimport RowsPerPage from \"./RowsPerPage\";\r\nimport type {TablePaginationProps} from \"./types\";\r\nimport clsx from \"clsx\";\r\n\r\nexport default function 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 = clsx(\"btn btn-link\", {[`btn-${size}`]: !!size});\r\n\r\n return (\r\n <div className={clsx(\"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\nTablePagination.displayname = 'TablePagination';\r\n","import {useTableFields} from \"./useTableFields\";\r\n\r\nexport default function DataTableCols<T = unknown>() {\r\n const [fields] = useTableFields<T>()\r\n return (\r\n <colgroup>\r\n {fields\r\n .filter(field => field.visible !== false)\r\n .map((field, index) => (\r\n <col key={index}\r\n className={field.colClassName}\r\n span={field.colSpan ?? 1}/>\r\n ))}\r\n </colgroup>\r\n )\r\n}\r\nDataTableCols.displayName = 'DataTableCols';\r\n\r\n","import type {DataTableField} from \"./types\";\r\nimport {useContext} from \"react\";\r\nimport {DataTableContext, type TableContextData} from \"./DataTableContext\";\r\n\r\nexport type UseFieldArg<T = unknown> = keyof T & ((string | number) & {})\r\nexport function useField<T = unknown>(key: UseFieldArg<T>): [\r\n field:DataTableField<T>|null,\r\n updateField: (key: string|number, arg: Partial<DataTableField<T>>) => void\r\n] {\r\n const context = useContext(DataTableContext) as TableContextData<T>;\r\n if (!context) {\r\n throw new Error('useField must be used within a DataTableProvider');\r\n }\r\n\r\n return [\r\n context.fields.find(field => field.id === key) ?? null,\r\n context.updateField,\r\n ]\r\n}\r\n","import {useContext} from \"react\";\r\nimport {DataTableContext, type TableContextData} from \"./DataTableContext\";\r\n\r\nexport function useTableContext<T = unknown>():TableContextData<T> {\r\n const context = useContext(DataTableContext) as TableContextData<T>;\r\n if (!context) {\r\n throw new Error('useTableContext must be used within a DataTableProvider');\r\n }\r\n return context;\r\n}\r\n"],"names":["DataTableContext","createContext","DataTableProvider","children","initialFields","initialSort","fields","setFieldsState","useState","sort","setProviderSort","setFields","useCallback","setSort","updateField","key","arg","nextState","field","getField","value","useMemo","jsx","r","t","f","n","o","clsx","StyledTable","styled","props","Table","sticky","responsive","className","ref","rest","_className","DataTableTH","thClassName","useTableFields","context","useContext","DataTableHead","index","DataTable","size","data","keyField","rowClassName","renderRow","onSelectRow","selected","tableHeadProps","tfoot","tableClassName","DataTableCols","DataTableTBody","StandaloneDataTable","DataTableCell","row","as","cellClassName","createElement","DataTableRow","trRef","onClick","clickHandler","ev","StandaloneDataTableRow","jsxs","keyValue","isSelected","useTableSort","flexJustifyContent","align","FieldTitle","SortableTableTH","sorted","ascending","_thClassName","thProps","iconClassName","SortableTableHead","onChangeSort","tableField","SortableTableHeadWrapper","SortableTable","StandaloneSortHelper","nextSort","setNextSort","useEffect","StandaloneSortableTable","currentSort","defaultRowsPerPageValues","RowsPerPage","pageValues","label","onChange","id","useId","changeHandler","selectClassName","inputGroupClassName","TablePagination","page","rowsPerPage","onChangePage","count","showFirst","showLast","rowsPerPageProps","first","last","lastPage","buttonClassName","useField","useTableContext"],"mappings":"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","x_google_ignoreList":[2]}
package/dist/index.d.ts CHANGED
@@ -1,5 +1,6 @@
1
1
  export { default as DataTable } from './StandaloneDataTable';
2
2
  export { default as DataTableRow } from './DataTableRow';
3
+ export { default as StandaloneDataTableRow } from './StandaloneDataTableRow';
3
4
  export { default as DataTableTBody } from './DataTableTBody';
4
5
  export { default as DataTableTH } from './DataTableTH';
5
6
  export { default as StandaloneSortableTable } from './StandaloneSortableTable';
@@ -17,4 +18,5 @@ export { useTableSort } from './useTableSort';
17
18
  export { useTableContext } from './useTableContext';
18
19
  export { DataTableContext, type TableContextData } from './DataTableContext';
19
20
  export type { TableProviderProps } from './DataTableProvider';
21
+ export type { StandaloneDataTableRowProps } from './StandaloneDataTableRow';
20
22
  export type { SortProps, DataTableField, SortableTableField, DataTableColProps, DataTableCellProps, DataTableRowProps, DataTableTBodyProps, DataTableClassNames, DataTableProps, DataTableTHProps, RowsPerPageProps, SortableTableTHProps, SortableTableHeadProps, SortableTableProps, TablePaginationProps, UITableSize, UISize, UIFlexAlign } from './types';
package/dist/index.es.js CHANGED
@@ -1,35 +1,35 @@
1
- import { jsx as l, jsxs as f } from "react/jsx-runtime";
2
- import { createContext as I, useState as H, useCallback as g, useMemo as J, useContext as S, createElement as L, useEffect as q, useId as K } from "react";
3
- import F from "@emotion/styled";
1
+ import { jsx as l, jsxs as h } from "react/jsx-runtime";
2
+ import { createContext as I, useState as w, useCallback as g, useMemo as J, useContext as S, createElement as L, useEffect as q, useId as K } from "react";
3
+ import R from "@emotion/styled";
4
4
  const y = I(null);
5
5
  function x({
6
6
  children: t,
7
7
  initialFields: a = [],
8
8
  initialSort: e = null
9
9
  }) {
10
- const [n, s] = H(a), [r, i] = H(e), c = g(
11
- (m) => {
12
- s(m);
10
+ const [n, s] = w(a), [r, c] = w(e), u = g(
11
+ (p) => {
12
+ s(p);
13
13
  },
14
14
  []
15
- ), o = g(
16
- (m) => {
17
- i(m);
15
+ ), i = g(
16
+ (p) => {
17
+ c(p);
18
18
  },
19
19
  []
20
- ), u = g((m, h) => {
21
- const N = n.map((T) => T.id === m ? { ...T, ...h } : T);
20
+ ), d = g((p, f) => {
21
+ const N = n.map((T) => T.id === p ? { ...T, ...f } : T);
22
22
  s(N);
23
- }, [n]), d = g((m) => n.find((h) => h.id === m), [n]), b = J(
23
+ }, [n]), o = g((p) => n.find((f) => f.id === p), [n]), b = J(
24
24
  () => ({
25
25
  fields: n,
26
- setFields: c,
26
+ setFields: u,
27
27
  sort: r,
28
- setSort: o,
29
- getField: d,
30
- updateField: u
28
+ setSort: i,
29
+ getField: o,
30
+ updateField: d
31
31
  }),
32
- [n, c, r, o, u, d]
32
+ [n, u, r, i, d, o]
33
33
  );
34
34
  return /* @__PURE__ */ l(y.Provider, { value: b, children: t });
35
35
  }
@@ -43,11 +43,11 @@ function E(t) {
43
43
  } else for (e in t) t[e] && (n && (n += " "), n += e);
44
44
  return n;
45
45
  }
46
- function p() {
46
+ function m() {
47
47
  for (var t, a, e = 0, n = "", s = arguments.length; e < s; e++) (t = arguments[e]) && (a = E(t)) && (n && (n += " "), n += a);
48
48
  return n;
49
49
  }
50
- const w = F.table`
50
+ const F = R.table`
51
51
  --table-sticky-top: ${(t) => t.sticky ? "0" : void 0};
52
52
 
53
53
  thead {
@@ -69,13 +69,13 @@ function P({
69
69
  ...r
70
70
  }) {
71
71
  if (a) {
72
- const i = p(n, {
72
+ const c = m(n, {
73
73
  "table-responsive": a === !0,
74
74
  [`table-responsive-${a}`]: a !== !0
75
75
  });
76
- return /* @__PURE__ */ l("div", { className: i, children: /* @__PURE__ */ l(w, { ref: s, ...r, children: e }) });
76
+ return /* @__PURE__ */ l("div", { className: c, children: /* @__PURE__ */ l(F, { ref: s, ...r, children: e }) });
77
77
  }
78
- return /* @__PURE__ */ l(w, { className: n, sticky: t, ref: s, ...r, children: e });
78
+ return /* @__PURE__ */ l(F, { className: n, sticky: t, ref: s, ...r, children: e });
79
79
  }
80
80
  function C({
81
81
  field: t,
@@ -85,7 +85,7 @@ function C({
85
85
  }) {
86
86
  if (t.visible === !1)
87
87
  return null;
88
- const s = p({ [`text-${t.align}`]: !!t.align }, a);
88
+ const s = m({ [`text-${t.align}`]: !!t.align }, a);
89
89
  return /* @__PURE__ */ l("th", { className: s, scope: "col", ...n, children: e ?? t.title });
90
90
  }
91
91
  C.displayName = "DataTableTH";
@@ -105,7 +105,7 @@ function j({ ...t }) {
105
105
  {
106
106
  ...e.thProps,
107
107
  field: e,
108
- className: p(
108
+ className: m(
109
109
  typeof e.className == "function" ? { [`text-${e.align}`]: !!e.align } : e.className
110
110
  )
111
111
  },
@@ -113,55 +113,55 @@ function j({ ...t }) {
113
113
  )) }) });
114
114
  }
115
115
  j.displayName = "DataTableHead";
116
- function R({
116
+ function _({
117
117
  className: t,
118
118
  size: a,
119
119
  responsive: e,
120
120
  sticky: n,
121
121
  data: s,
122
122
  keyField: r,
123
- rowClassName: i,
124
- renderRow: c,
125
- onSelectRow: o,
126
- selected: u,
127
- tableHeadProps: d,
123
+ rowClassName: c,
124
+ renderRow: u,
125
+ onSelectRow: i,
126
+ selected: d,
127
+ tableHeadProps: o,
128
128
  children: b,
129
- tfoot: m,
130
- ...h
129
+ tfoot: p,
130
+ ...f
131
131
  }) {
132
- const N = p("table", t, {
132
+ const N = m("table", t, {
133
133
  [`table-${a}`]: !!a
134
134
  });
135
- return /* @__PURE__ */ f(P, { sticky: n, responsive: e, className: N, ...h, children: [
136
- /* @__PURE__ */ l(k, {}),
137
- /* @__PURE__ */ l(j, { ...d }),
135
+ return /* @__PURE__ */ h(P, { sticky: n, responsive: e, className: N, ...f, children: [
136
+ /* @__PURE__ */ l(H, {}),
137
+ /* @__PURE__ */ l(j, { ...o }),
138
138
  !!s.length && /* @__PURE__ */ l(
139
- D,
139
+ k,
140
140
  {
141
141
  data: s,
142
142
  keyField: r,
143
- rowClassName: i,
144
- renderRow: c,
145
- onSelectRow: o,
146
- selected: u
143
+ rowClassName: c,
144
+ renderRow: u,
145
+ onSelectRow: i,
146
+ selected: d
147
147
  }
148
148
  ),
149
149
  b,
150
- m
150
+ p
151
151
  ] });
152
152
  }
153
- R.displayName = "DataTable";
153
+ _.displayName = "DataTable";
154
154
  function O({
155
155
  fields: t,
156
156
  ...a
157
157
  }) {
158
- return /* @__PURE__ */ l(x, { initialFields: t, children: /* @__PURE__ */ l(R, { ...a }) });
158
+ return /* @__PURE__ */ l(x, { initialFields: t, children: /* @__PURE__ */ l(_, { ...a }) });
159
159
  }
160
160
  O.displayName = "StandaloneDataTable";
161
- function M({ field: t, row: a, className: e, as: n, ...s }) {
161
+ function D({ field: t, row: a, className: e, as: n, ...s }) {
162
162
  if (t.visible === !1)
163
163
  return null;
164
- const r = p(
164
+ const r = m(
165
165
  { [`text-${t.align}`]: !!t.align },
166
166
  e,
167
167
  typeof t.className == "function" ? t.className(a) : t.className
@@ -178,59 +178,84 @@ function M({ field: t, row: a, className: e, as: n, ...s }) {
178
178
  a[t.field] === void 0 && !t.render ? null : typeof t.render == "function" ? t.render(a) : a[t.field]
179
179
  );
180
180
  }
181
- M.displayName = "DataTableCell";
182
- function W({
181
+ D.displayName = "DataTableCell";
182
+ function M({
183
183
  className: t,
184
184
  rowClassName: a,
185
185
  selected: e,
186
186
  row: n,
187
187
  trRef: s,
188
188
  onClick: r,
189
- ...i
189
+ ...c
190
190
  }) {
191
- const [c] = v(), o = (d) => {
192
- r?.(n, d);
193
- }, u = typeof a == "function" ? a(n) : a;
191
+ const [u] = v(), i = (o) => {
192
+ r?.(n, o);
193
+ }, d = typeof a == "function" ? a(n) : a;
194
194
  return n ? /* @__PURE__ */ l(
195
195
  "tr",
196
196
  {
197
197
  ref: s,
198
- className: p({ "table-active": e }, t, u),
199
- onClick: o,
200
- ...i,
201
- children: c.map((d, b) => /* @__PURE__ */ l(M, { field: d, row: n }, String(d?.id ?? b)))
198
+ className: m({ "table-active": e }, t, d),
199
+ onClick: i,
200
+ ...c,
201
+ children: u.map((o, b) => /* @__PURE__ */ l(D, { field: o, row: n }, String(o?.id ?? b)))
202
202
  }
203
203
  ) : null;
204
204
  }
205
- W.displayName = "DataTableRow";
206
- function D({
205
+ M.displayName = "DataTableRow";
206
+ function Q({
207
+ fields: t,
208
+ className: a,
209
+ rowClassName: e,
210
+ selected: n,
211
+ row: s,
212
+ trRef: r,
213
+ onClick: c,
214
+ ...u
215
+ }) {
216
+ const i = (o) => {
217
+ c?.(s, o);
218
+ }, d = typeof e == "function" ? e(s) : e;
219
+ return s ? /* @__PURE__ */ l(
220
+ "tr",
221
+ {
222
+ ref: r,
223
+ className: m({ "table-active": n }, a, d),
224
+ onClick: i,
225
+ ...u,
226
+ children: t.map((o, b) => /* @__PURE__ */ l(D, { field: o, row: s }, String(o?.id ?? b)))
227
+ }
228
+ ) : null;
229
+ }
230
+ Q.displayName = "StandaloneDataTableRow";
231
+ function k({
207
232
  data: t,
208
233
  keyField: a,
209
234
  rowClassName: e,
210
235
  renderRow: n,
211
236
  onSelectRow: s,
212
237
  selected: r = "",
213
- children: i,
214
- ...c
238
+ children: c,
239
+ ...u
215
240
  }) {
216
- return /* @__PURE__ */ f("tbody", { ...c, children: [
217
- t.map((o) => {
218
- const u = String(typeof a == "function" ? a(o) : o[a]), d = typeof r == "function" ? r(o) : u === r;
219
- return n ? n(o) : /* @__PURE__ */ l(
220
- W,
241
+ return /* @__PURE__ */ h("tbody", { ...u, children: [
242
+ t.map((i) => {
243
+ const d = String(typeof a == "function" ? a(i) : i[a]), o = typeof r == "function" ? r(i) : d === r;
244
+ return n ? n(i) : /* @__PURE__ */ l(
245
+ M,
221
246
  {
222
247
  onClick: s,
223
248
  rowClassName: e,
224
- row: o,
225
- selected: d
249
+ row: i,
250
+ selected: o
226
251
  },
227
- u
252
+ d
228
253
  );
229
254
  }),
230
- i
255
+ c
231
256
  ] });
232
257
  }
233
- D.displayName = "DataTableTBody";
258
+ k.displayName = "DataTableTBody";
234
259
  function $() {
235
260
  const t = S(y);
236
261
  if (!t)
@@ -240,11 +265,11 @@ function $() {
240
265
  t.setSort
241
266
  ];
242
267
  }
243
- const Q = (t) => t ? t === "end" ? "flex-end" : "center" : "flex-start", U = F.div`
268
+ const U = (t) => t ? t === "end" ? "flex-end" : "center" : "flex-start", X = R.div`
244
269
  display: flex;
245
270
  width: 100%;
246
271
  flex-direction: ${(t) => t.align === "end" ? "row-reverse" : "row"};
247
- justify-content: ${(t) => Q(t.align)};
272
+ justify-content: ${(t) => U(t.align)};
248
273
 
249
274
  .sort-icon {
250
275
  flex-grow: ${(t) => t.align === "end" ? "1" : "0"};
@@ -257,7 +282,7 @@ const Q = (t) => t ? t === "end" ? "flex-end" : "center" : "flex-start", U = F.d
257
282
  transition: opacity 0.2s;
258
283
  }
259
284
  `;
260
- function _({
285
+ function W({
261
286
  field: t,
262
287
  sorted: a,
263
288
  ascending: e,
@@ -268,33 +293,33 @@ function _({
268
293
  return null;
269
294
  if (!t.sortable)
270
295
  return /* @__PURE__ */ l(C, { field: t, className: n });
271
- const { className: r, ...i } = t.thProps ?? {}, c = p(
296
+ const { className: r, ...c } = t.thProps ?? {}, u = m(
272
297
  n,
273
298
  r,
274
299
  { [`text-${t.align}`]: !!t.align }
275
- ), o = () => {
300
+ ), i = () => {
276
301
  s({ field: t.field, ascending: a ? !e : !0 });
277
- }, u = {
302
+ }, d = {
278
303
  "bi-arrow-down": e,
279
304
  "bi-arrow-up": !e
280
305
  };
281
- return /* @__PURE__ */ l("th", { ...i, className: p("sortable", c), scope: "col", onClick: o, children: /* @__PURE__ */ f(U, { sorted: a, align: t.align, children: [
306
+ return /* @__PURE__ */ l("th", { ...c, className: m("sortable", u), scope: "col", onClick: i, children: /* @__PURE__ */ h(X, { sorted: a, align: t.align, children: [
282
307
  /* @__PURE__ */ l("div", { className: "field-title", children: t.title }),
283
- /* @__PURE__ */ l("div", { className: p("me-1 sort-icon", u) })
308
+ /* @__PURE__ */ l("div", { className: m("me-1 sort-icon", d) })
284
309
  ] }) });
285
310
  }
286
- _.displayName = "SortableTableTH";
311
+ W.displayName = "SortableTableTH";
287
312
  function A({
288
313
  onChangeSort: t
289
314
  }) {
290
315
  const [a] = v(), [e] = $();
291
316
  return /* @__PURE__ */ l("thead", { children: /* @__PURE__ */ l("tr", { children: a.map((n, s) => /* @__PURE__ */ l(
292
- _,
317
+ W,
293
318
  {
294
319
  field: n,
295
320
  sorted: e?.field === n.field,
296
321
  ascending: e?.ascending,
297
- className: p(
322
+ className: m(
298
323
  typeof n.className == "function" ? { [`text-${n.align}`]: !!n.align } : n.className
299
324
  ),
300
325
  onClick: t
@@ -317,102 +342,102 @@ function V({
317
342
  sticky: n,
318
343
  data: s,
319
344
  keyField: r,
320
- rowClassName: i,
321
- renderRow: c,
322
- onSelectRow: o,
323
- selected: u,
324
- tableHeadProps: d,
345
+ rowClassName: c,
346
+ renderRow: u,
347
+ onSelectRow: i,
348
+ selected: d,
349
+ tableHeadProps: o,
325
350
  children: b,
326
- tfoot: m,
327
- onChangeSort: h,
351
+ tfoot: p,
352
+ onChangeSort: f,
328
353
  ...N
329
354
  }) {
330
- const T = p("table", t, {
355
+ const T = m("table", t, {
331
356
  [`table-${a}`]: !!a
332
357
  });
333
- return /* @__PURE__ */ f(P, { className: T, responsive: e, sticky: n, ...N, children: [
334
- /* @__PURE__ */ l(k, {}),
335
- /* @__PURE__ */ l(B, { onChangeSort: h, ...d }),
358
+ return /* @__PURE__ */ h(P, { className: T, responsive: e, sticky: n, ...N, children: [
359
+ /* @__PURE__ */ l(H, {}),
360
+ /* @__PURE__ */ l(B, { onChangeSort: f, ...o }),
336
361
  !!s.length && /* @__PURE__ */ l(
337
- D,
362
+ k,
338
363
  {
339
364
  data: s,
340
365
  keyField: r,
341
- rowClassName: i,
342
- renderRow: c,
343
- onSelectRow: o,
344
- selected: u
366
+ rowClassName: c,
367
+ renderRow: u,
368
+ onSelectRow: i,
369
+ selected: d
345
370
  }
346
371
  ),
347
372
  b,
348
- m
373
+ p
349
374
  ] });
350
375
  }
351
376
  V.displayName = "SortableTable";
352
- function X({ nextSort: t }) {
377
+ function Y({ nextSort: t }) {
353
378
  const [, a] = $();
354
379
  return q(() => {
355
380
  console.log("setNextSort", t), a(t);
356
381
  }, [t, a]), null;
357
382
  }
358
- function Y({
383
+ function Z({
359
384
  fields: t,
360
385
  currentSort: a,
361
386
  ...e
362
387
  }) {
363
- return /* @__PURE__ */ f(x, { initialFields: t, initialSort: a, children: [
364
- /* @__PURE__ */ l(X, { nextSort: a }),
388
+ return /* @__PURE__ */ h(x, { initialFields: t, initialSort: a, children: [
389
+ /* @__PURE__ */ l(Y, { nextSort: a }),
365
390
  /* @__PURE__ */ l(V, { ...e })
366
391
  ] });
367
392
  }
368
- Y.displayName = "StandaloneSortableTable";
369
- const Z = [10, 25, 50, 100, 250, 500, 1e3];
393
+ Z.displayName = "StandaloneSortableTable";
394
+ const z = [10, 25, 50, 100, 250, 500, 1e3];
370
395
  function G({
371
396
  value: t,
372
- pageValues: a = Z,
397
+ pageValues: a = z,
373
398
  size: e,
374
399
  label: n,
375
400
  className: s,
376
401
  onChange: r,
377
- ...i
402
+ ...c
378
403
  }) {
379
- const c = K(), o = (b) => r(Number(b.target.value)), u = s ?? p("form-select", { [`form-select-${e}`]: !!e }), d = p("input-group", {
404
+ const u = K(), i = (b) => r(Number(b.target.value)), d = s ?? m("form-select", { [`form-select-${e}`]: !!e }), o = m("input-group", {
380
405
  [`input-group-${e}`]: !!e
381
406
  });
382
- return /* @__PURE__ */ f("div", { className: d, children: [
383
- /* @__PURE__ */ l("label", { className: "input-group-text", htmlFor: c, children: n ?? "Rows" }),
407
+ return /* @__PURE__ */ h("div", { className: o, children: [
408
+ /* @__PURE__ */ l("label", { className: "input-group-text", htmlFor: u, children: n ?? "Rows" }),
384
409
  /* @__PURE__ */ l(
385
410
  "select",
386
411
  {
387
- className: u,
388
- id: c,
412
+ className: d,
413
+ id: u,
389
414
  value: t,
390
- onChange: o,
391
- ...i,
415
+ onChange: i,
416
+ ...c,
392
417
  children: a.map((b) => /* @__PURE__ */ l("option", { value: b, children: b }, b))
393
418
  }
394
419
  )
395
420
  ] }, t);
396
421
  }
397
422
  G.displayName = "RowsPerPage";
398
- function z({
423
+ function tt({
399
424
  page: t,
400
425
  rowsPerPage: a,
401
426
  onChangePage: e,
402
427
  count: n,
403
428
  size: s,
404
429
  showFirst: r,
405
- showLast: i,
406
- className: c,
407
- rowsPerPageProps: o,
408
- ...u
430
+ showLast: c,
431
+ className: u,
432
+ rowsPerPageProps: i,
433
+ ...d
409
434
  }) {
410
- const d = n === 0 ? 0 : t * a + 1, b = Math.min(t * a + a, n), m = a === 0 ? 0 : Math.floor((n - 1) / a), h = p("btn btn-link", { [`btn-${s}`]: !!s });
411
- return /* @__PURE__ */ f("div", { className: p("row g-3 justify-content-end", c), ...u, children: [
412
- !!o && /* @__PURE__ */ l("div", { className: "col-auto", children: /* @__PURE__ */ l(G, { ...o, value: a, size: s }) }),
413
- /* @__PURE__ */ l("div", { className: "col-auto", children: /* @__PURE__ */ f("div", { className: "row g-3 flex-nowrap align-items-baseline", children: [
414
- /* @__PURE__ */ f("div", { className: "col-auto", children: [
415
- d,
435
+ const o = n === 0 ? 0 : t * a + 1, b = Math.min(t * a + a, n), p = a === 0 ? 0 : Math.floor((n - 1) / a), f = m("btn btn-link", { [`btn-${s}`]: !!s });
436
+ return /* @__PURE__ */ h("div", { className: m("row g-3 justify-content-end", u), ...d, children: [
437
+ !!i && /* @__PURE__ */ l("div", { className: "col-auto", children: /* @__PURE__ */ l(G, { ...i, value: a, size: s }) }),
438
+ /* @__PURE__ */ l("div", { className: "col-auto", children: /* @__PURE__ */ h("div", { className: "row g-3 flex-nowrap align-items-baseline", children: [
439
+ /* @__PURE__ */ h("div", { className: "col-auto", children: [
440
+ o,
416
441
  "-",
417
442
  b,
418
443
  " of ",
@@ -421,7 +446,7 @@ function z({
421
446
  r && /* @__PURE__ */ l("div", { className: "col-auto", children: /* @__PURE__ */ l(
422
447
  "button",
423
448
  {
424
- className: h,
449
+ className: f,
425
450
  disabled: t === 0,
426
451
  onClick: () => e(0),
427
452
  "aria-label": "First page",
@@ -431,7 +456,7 @@ function z({
431
456
  /* @__PURE__ */ l("div", { className: "col-auto", children: /* @__PURE__ */ l(
432
457
  "button",
433
458
  {
434
- className: h,
459
+ className: f,
435
460
  disabled: t === 0,
436
461
  onClick: () => e(t - 1),
437
462
  "aria-label": "Previous page",
@@ -441,19 +466,19 @@ function z({
441
466
  /* @__PURE__ */ l("div", { className: "col-auto", children: /* @__PURE__ */ l(
442
467
  "button",
443
468
  {
444
- className: h,
445
- disabled: t >= m,
469
+ className: f,
470
+ disabled: t >= p,
446
471
  onClick: () => e(t + 1),
447
472
  "aria-label": "Next page",
448
473
  children: /* @__PURE__ */ l("span", { className: "bi-chevron-right", "aria-hidden": "true" })
449
474
  }
450
475
  ) }),
451
- i && /* @__PURE__ */ l("div", { className: "col-auto", children: /* @__PURE__ */ l(
476
+ c && /* @__PURE__ */ l("div", { className: "col-auto", children: /* @__PURE__ */ l(
452
477
  "button",
453
478
  {
454
- className: h,
455
- disabled: t >= m,
456
- onClick: () => e(m),
479
+ className: f,
480
+ disabled: t >= p,
481
+ onClick: () => e(p),
457
482
  "aria-label": "Last page",
458
483
  children: /* @__PURE__ */ l("span", { className: "bi-chevron-bar-right", "aria-hidden": "true" })
459
484
  }
@@ -461,8 +486,8 @@ function z({
461
486
  ] }) })
462
487
  ] });
463
488
  }
464
- z.displayname = "TablePagination";
465
- function k() {
489
+ tt.displayname = "TablePagination";
490
+ function H() {
466
491
  const [t] = v();
467
492
  return /* @__PURE__ */ l("colgroup", { children: t.filter((a) => a.visible !== !1).map((a, e) => /* @__PURE__ */ l(
468
493
  "col",
@@ -473,8 +498,8 @@ function k() {
473
498
  e
474
499
  )) });
475
500
  }
476
- k.displayName = "DataTableCols";
477
- function nt(t) {
501
+ H.displayName = "DataTableCols";
502
+ function lt(t) {
478
503
  const a = S(y);
479
504
  if (!a)
480
505
  throw new Error("useField must be used within a DataTableProvider");
@@ -483,7 +508,7 @@ function nt(t) {
483
508
  a.updateField
484
509
  ];
485
510
  }
486
- function lt() {
511
+ function st() {
487
512
  const t = S(y);
488
513
  if (!t)
489
514
  throw new Error("useTableContext must be used within a DataTableProvider");
@@ -491,21 +516,22 @@ function lt() {
491
516
  }
492
517
  export {
493
518
  O as DataTable,
494
- k as DataTableCols,
519
+ H as DataTableCols,
495
520
  y as DataTableContext,
496
521
  x as DataTableProvider,
497
- W as DataTableRow,
498
- D as DataTableTBody,
522
+ M as DataTableRow,
523
+ k as DataTableTBody,
499
524
  C as DataTableTH,
500
- R as DataTableWithContext,
525
+ _ as DataTableWithContext,
501
526
  G as RowsPerPage,
502
527
  V as SortableTable,
503
528
  A as SortableTableHead,
504
- _ as SortableTableTH,
505
- Y as StandaloneSortableTable,
506
- z as TablePagination,
507
- nt as useField,
508
- lt as useTableContext,
529
+ W as SortableTableTH,
530
+ Q as StandaloneDataTableRow,
531
+ Z as StandaloneSortableTable,
532
+ tt as TablePagination,
533
+ lt as useField,
534
+ st as useTableContext,
509
535
  v as useTableFields,
510
536
  $ as useTableSort
511
537
  };
@@ -1 +1 @@
1
- {"version":3,"file":"index.es.js","sources":["../src/DataTableContext.ts","../src/DataTableProvider.tsx","../node_modules/clsx/dist/clsx.mjs","../src/Table.tsx","../src/DataTableTH.tsx","../src/useTableFields.ts","../src/DataTableHead.tsx","../src/DataTable.tsx","../src/StandaloneDataTable.tsx","../src/DataTableCell.tsx","../src/DataTableRow.tsx","../src/DataTableTBody.tsx","../src/useTableSort.ts","../src/SortableTableTH.tsx","../src/SortableTableHead.tsx","../src/SortableTableHeadWrapper.tsx","../src/SortableTable.tsx","../src/StandaloneSortHelper.tsx","../src/StandaloneSortableTable.tsx","../src/RowsPerPage.tsx","../src/TablePagination.tsx","../src/DataTableCols.tsx","../src/useField.ts","../src/useTableContext.ts"],"sourcesContent":["import {createContext} from \"react\";\r\nimport type {DataTableField, SortProps} from \"./types\";\r\n\r\nexport interface TableContextData<T = unknown> {\r\n fields: DataTableField<T>[];\r\n setFields: (next: DataTableField<T>[] | ((prev: DataTableField<T>[]) => DataTableField<T>[])) => void;\r\n sort: SortProps<T>|null;\r\n setSort: (next: SortProps<T> | null | ((prev:SortProps<T>|null) => SortProps<T>|null )) => void;\r\n getField: (key: string | number) => DataTableField<T> | undefined;\r\n updateField: (key: string | number, arg: Partial<DataTableField<T>>) => void;\r\n}\r\n\r\nexport const DataTableContext = createContext<TableContextData<unknown> | null>(null)\r\n","import {type ReactNode, useCallback, useMemo, useState} from \"react\";\r\nimport type {DataTableField, SortProps} from \"./types\";\r\nimport {DataTableContext, type TableContextData} from \"./DataTableContext\";\r\n\r\nexport interface TableProviderProps<T = unknown> {\r\n initialFields: DataTableField<T>[];\r\n initialSort?: SortProps<T>|null;\r\n children: ReactNode;\r\n}\r\n\r\nexport default function DataTableProvider<T = unknown>({\r\n children,\r\n initialFields = [],\r\n initialSort = null,\r\n }: TableProviderProps<T>) {\r\n const [fields, setFieldsState] = useState<DataTableField<T>[]>(initialFields);\r\n const [sort, setProviderSort] = useState<SortProps<T> | null>(initialSort);\r\n\r\n const setFields = useCallback(\r\n (fields: DataTableField<T>[] | ((prev: DataTableField<T>[]) => DataTableField<T>[])) => {\r\n setFieldsState(fields)\r\n }, []);\r\n\r\n const setSort = useCallback(\r\n (sort: SortProps<T> | null | ((sort:SortProps<T>|null) => SortProps<T> | null)) => {\r\n setProviderSort(sort)\r\n }, [])\r\n\r\n\r\n const updateField = useCallback((key: string | number, arg: Partial<DataTableField<T>>) => {\r\n const nextState = fields.map(field => {\r\n if (field.id === key) {\r\n return {...field, ...arg}\r\n }\r\n return field;\r\n });\r\n setFieldsState(nextState);\r\n }, [fields])\r\n\r\n const getField = useCallback((key: string | number) => fields.find(field => field.id === key), [fields]);\r\n\r\n\r\n const value = useMemo<TableContextData<T>>(\r\n () => ({\r\n fields,\r\n setFields,\r\n sort,\r\n setSort,\r\n getField,\r\n updateField\r\n }),\r\n [fields, setFields, sort, setSort, updateField, getField]\r\n )\r\n\r\n return (\r\n <DataTableContext.Provider value={value as unknown as TableContextData<unknown>}>\r\n {children}\r\n </DataTableContext.Provider>\r\n )\r\n}\r\nDataTableProvider.displayName = 'DataTableProvider';\r\n\r\n","function r(e){var t,f,n=\"\";if(\"string\"==typeof e||\"number\"==typeof e)n+=e;else if(\"object\"==typeof e)if(Array.isArray(e)){var o=e.length;for(t=0;t<o;t++)e[t]&&(f=r(e[t]))&&(n&&(n+=\" \"),n+=f)}else for(f in e)e[f]&&(n&&(n+=\" \"),n+=f);return n}export function clsx(){for(var e,t,f=0,n=\"\",o=arguments.length;f<o;f++)(e=arguments[f])&&(t=r(e))&&(n&&(n+=\" \"),n+=t);return n}export default clsx;","import React, {type RefObject, type TableHTMLAttributes} from 'react';\r\nimport styled from \"@emotion/styled\";\r\nimport type {DataTableProps} from \"./types\";\r\nimport clsx from \"clsx\";\r\n\r\nexport interface StyledTableProps extends TableHTMLAttributes<HTMLTableElement>, Pick<DataTableProps, 'sticky' | 'responsive'> {\r\n ref?: RefObject<HTMLTableElement>;\r\n}\r\n\r\nconst StyledTable = styled.table<StyledTableProps>`\r\n --table-sticky-top: ${props => props.sticky ? '0' : undefined};\r\n\r\n thead {\r\n tr:nth-of-type(1) td,\r\n tr:nth-of-type(1) th {\r\n top: var(--table-sticky-top, unset);\r\n position: ${props => props.sticky ? \"sticky\" : \"unset\"};\r\n z-index: ${props => props.sticky ? 10 : \"unset\"};\r\n background: ${props => props.sticky ? \"linear-gradient(var(--bs-table-bg) 75%, rgba(var(--bs-secondary-bg-rgb), 0.9))\" : \"unset\"};\r\n }\r\n }\r\n`\r\n\r\n\r\nexport default function Table({\r\n sticky,\r\n responsive,\r\n children,\r\n className,\r\n ref,\r\n ...rest\r\n }: StyledTableProps) {\r\n if (responsive) {\r\n const _className = clsx(className, {\r\n 'table-responsive': responsive === true,\r\n [`table-responsive-${responsive}`]: responsive !== true,\r\n })\r\n return (\r\n <div className={_className}>\r\n <StyledTable ref={ref} {...rest}>{children}</StyledTable>\r\n </div>\r\n )\r\n }\r\n\r\n return (\r\n <StyledTable className={className} sticky={sticky} ref={ref} {...rest}>{children}</StyledTable>\r\n )\r\n}\r\n\r\n","import React from \"react\";\r\nimport type {DataTableTHProps} from \"./types\";\r\nimport clsx from \"clsx\";\r\n\r\n\r\nexport default function DataTableTH<T = unknown>({\r\n field,\r\n className,\r\n children,\r\n ...rest\r\n }: DataTableTHProps<T>) {\r\n if (field.visible === false) {\r\n return null;\r\n }\r\n const thClassName = clsx({[`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\n","import {useContext} from \"react\";\r\nimport {DataTableContext, type TableContextData} from \"./DataTableContext\";\r\n\r\n/**\r\n * Returns a tuple containing the fields and a function to update them.\r\n * @returns [fields, setFields]\r\n */\r\nexport function useTableFields<T = unknown>(): [\r\n fields: TableContextData<T>['fields'],\r\n setFields: TableContextData<T>['setFields']\r\n] {\r\n const context = useContext(DataTableContext) as TableContextData<T>;\r\n if (!context) {\r\n throw new Error('useTableContext must be used within a DataTableProvider');\r\n }\r\n return [\r\n context.fields,\r\n context.setFields\r\n ];\r\n}\r\n","import React, {type TableHTMLAttributes} from \"react\";\r\nimport DataTableTH from \"./DataTableTH\";\r\nimport clsx from \"clsx\";\r\nimport {useTableFields} from \"./useTableFields\";\r\n\r\n\r\nexport default function DataTableHead<T = unknown>({...rest}: TableHTMLAttributes<HTMLTableSectionElement>) {\r\n const [fields] = useTableFields<T>()\r\n return (\r\n <thead {...rest}>\r\n <tr>\r\n {fields\r\n .map((field, index) => (\r\n <DataTableTH key={String(field.id ?? index)}\r\n {...field.thProps}\r\n field={field}\r\n className={clsx(\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\nDataTableHead.displayName = 'DataTableHead';\r\n","import type {DataTableProps} from \"./types\";\r\nimport clsx from \"clsx\";\r\nimport Table from \"./Table\";\r\nimport {DataTableCols, DataTableTBody} from \"./index\";\r\nimport DataTableHead from \"./DataTableHead\";\r\n\r\nexport default function DataTable<T = unknown>({\r\n className,\r\n size,\r\n responsive,\r\n sticky,\r\n data,\r\n keyField,\r\n rowClassName,\r\n renderRow,\r\n onSelectRow,\r\n selected,\r\n tableHeadProps,\r\n children,\r\n tfoot,\r\n ...rest\r\n }: Omit<DataTableProps<T>, 'fields'>) {\r\n const tableClassName = clsx('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 <DataTableCols/>\r\n <DataTableHead {...tableHeadProps}/>\r\n {!!data.length && (\r\n <DataTableTBody 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\nDataTable.displayName = 'DataTable';\r\n","import type {DataTableProps} from \"./types\";\r\nimport DataTableProvider from \"./DataTableProvider\";\r\nimport DataTable from \"./DataTable\";\r\n\r\n\r\nexport default function StandaloneDataTable<T = unknown>({\r\n fields,\r\n ...rest\r\n }: DataTableProps<T>) {\r\n return (\r\n <DataTableProvider initialFields={fields}>\r\n <DataTable {...rest}/>\r\n </DataTableProvider>\r\n )\r\n}\r\nStandaloneDataTable.displayName = 'StandaloneDataTable';\r\n","import {createElement, type ReactNode} from 'react';\r\nimport type {DataTableCellProps} from \"./types\";\r\nimport clsx from \"clsx\";\r\n\r\n\r\nexport default function DataTableCell<T = unknown>({field, row, className, as, ...rest}: DataTableCellProps<T>) {\r\n if (field.visible === false) {\r\n return null;\r\n }\r\n const cellClassName = clsx(\r\n {[`text-${field.align}`]: !!field.align},\r\n className,\r\n typeof field.className === 'function' ? field.className(row) : field.className\r\n );\r\n return createElement(\r\n (as ?? field.as) ?? 'td',\r\n {\r\n className: cellClassName,\r\n scope: (as ?? field.as) === 'th' ? 'row' : undefined,\r\n colSpan: field.colSpan,\r\n ...field.cellProps,\r\n ...rest\r\n },\r\n (row[field.field] === undefined && !field.render)\r\n ? null\r\n : (\r\n typeof field.render === 'function'\r\n ? field.render(row)\r\n : row[field.field] as ReactNode\r\n )\r\n )\r\n}\r\nDataTableCell.displayName = 'DataTableCell';\r\n","import React, {type MouseEvent} from 'react';\r\nimport type {DataTableRowProps} from \"./types\";\r\nimport DataTableCell from \"./DataTableCell\";\r\nimport clsx from \"clsx\";\r\nimport {useTableFields} from \"./useTableFields\";\r\n\r\n\r\nexport default function DataTableRow<T = unknown>({\r\n className,\r\n rowClassName,\r\n selected,\r\n row,\r\n trRef,\r\n onClick,\r\n ...rest\r\n }: DataTableRowProps<T>) {\r\n const [fields] = useTableFields<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={clsx({'table-active': selected}, className, _className)}\r\n onClick={clickHandler}\r\n {...rest}>\r\n {fields\r\n .map((field, index) => (\r\n <DataTableCell key={String(field?.id ?? index)} field={field} row={row}/>\r\n ))}\r\n </tr>\r\n )\r\n}\r\nDataTableRow.displayName = 'DataTableRow';\r\n","import React from 'react';\r\nimport DataTableRow from \"./DataTableRow\";\r\nimport type {DataTableTBodyProps} from \"./types\";\r\n\r\n\r\nexport default function DataTableTBody<T = unknown>({\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 row={row} selected={isSelected}/>\r\n )\r\n })}\r\n {children}\r\n </tbody>\r\n )\r\n}\r\nDataTableTBody.displayName = 'DataTableTBody';\r\n","import {useContext} from \"react\";\r\nimport {DataTableContext, type TableContextData} from \"./DataTableContext\";\r\n\r\n/**\r\n * Returns a tuple containing the currentSort and a function to update the sort.\r\n * @returns [sort, setSort]\r\n */\r\nexport function useTableSort<T = unknown>(): [\r\n sort: TableContextData<T>['sort'],\r\n setSort: TableContextData<T>['setSort']\r\n] {\r\n const context = useContext(DataTableContext) as TableContextData<T>;\r\n if (!context) {\r\n throw new Error('useTableSort must be used within a DataTableProvider');\r\n }\r\n return [\r\n context.sort,\r\n context.setSort\r\n ];\r\n}\r\n","import React from \"react\";\r\nimport DataTableTH from \"./DataTableTH\";\r\nimport type {SortableTableTHProps, UIFlexAlign} from \"./types\";\r\nimport styled from '@emotion/styled';\r\nimport clsx from \"clsx\";\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\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\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\nexport default function 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.visible === false) {\r\n return null;\r\n }\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 = clsx(\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={clsx(\"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={clsx('me-1 sort-icon', iconClassName)}/>\r\n </FieldTitle>\r\n </th>\r\n )\r\n}\r\nSortableTableTH.displayName = 'SortableTableTH';\r\n","import React from \"react\";\r\nimport SortableTableTH from \"./SortableTableTH\";\r\nimport type {SortableTableHeadProps} from \"./types\";\r\nimport clsx from \"clsx\";\r\nimport {useTableFields} from \"./useTableFields\";\r\nimport {useTableSort} from \"./useTableSort\";\r\n\r\nexport default function SortableTableHead<T = unknown>({\r\n onChangeSort,\r\n }: SortableTableHeadProps<T>) {\r\n const [fields] = useTableFields<T>()\r\n const [sort] = useTableSort<T>();\r\n return (\r\n <thead>\r\n <tr>\r\n {fields\r\n .map((tableField, index) => (\r\n <SortableTableTH<T> key={index} field={tableField}\r\n sorted={sort?.field === tableField.field} ascending={sort?.ascending}\r\n className={clsx(\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\n\r\n","import {useTableFields} from \"./useTableFields\";\r\nimport {useTableSort} from \"./useTableSort\";\r\nimport SortableTableHead from \"./SortableTableHead\";\r\nimport type {SortProps} from \"./types\";\r\n\r\nexport interface SortableTableHeadWrapperProps<T = unknown> {\r\n onChangeSort: (sort: SortProps<T>) => void;\r\n}\r\n\r\nexport default function SortableTableHeadWrapper<T = unknown>({\r\n onChangeSort,\r\n }: SortableTableHeadWrapperProps<T>) {\r\n const [fields] = useTableFields<T>()\r\n const [sort] = useTableSort<T>();\r\n\r\n return (\r\n <SortableTableHead fields={fields} currentSort={sort} onChangeSort={onChangeSort} />\r\n )\r\n}\r\nSortableTableHeadWrapper.displayName = 'SortableTableHeadWrapper';\r\n","import type {SortableTableProps} from \"./types\";\r\nimport clsx from \"clsx\";\r\nimport Table from \"./Table\";\r\nimport {DataTableCols, DataTableTBody} from \"./index\";\r\nimport React from \"react\";\r\nimport SortableTableHeadWrapper from \"./SortableTableHeadWrapper\";\r\n\r\nexport default function SortableTable<T = unknown>({\r\n className,\r\n size,\r\n responsive,\r\n sticky,\r\n data,\r\n keyField,\r\n rowClassName,\r\n renderRow,\r\n onSelectRow,\r\n selected,\r\n tableHeadProps,\r\n children,\r\n tfoot,\r\n onChangeSort,\r\n ...rest\r\n }: Omit<SortableTableProps<T>, 'fields' | 'currentSort'>) {\r\n const tableClassName = clsx('table', className, {\r\n [`table-${size}`]: !!size,\r\n })\r\n\r\n return (\r\n <Table className={tableClassName} responsive={responsive} sticky={sticky} {...rest}>\r\n <DataTableCols/>\r\n <SortableTableHeadWrapper onChangeSort={onChangeSort} {...tableHeadProps}/>\r\n {!!data.length && (\r\n <DataTableTBody 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\nSortableTable.displayName = 'SortableTable';\r\n","import type {SortProps} from \"./types\";\r\nimport {useTableSort} from \"./useTableSort\";\r\nimport {useEffect} from \"react\";\r\n\r\nexport interface StandaloneSortHelperProps<T = unknown> {\r\n nextSort: SortProps<T>\r\n}\r\nexport function StandaloneSortHelper<T = unknown>({nextSort}:StandaloneSortHelperProps<T>) {\r\n const [, setNextSort] = useTableSort<T>();\r\n useEffect(() => {\r\n console.log('setNextSort', nextSort);\r\n setNextSort(nextSort);\r\n }, [nextSort, setNextSort]);\r\n return null;\r\n}\r\n","import React from 'react';\r\nimport type {SortableTableProps} from \"./types\";\r\nimport DataTableProvider from \"./DataTableProvider\";\r\nimport SortableTable from \"./SortableTable\";\r\nimport {StandaloneSortHelper} from \"./StandaloneSortHelper\";\r\n\r\n\r\nexport default function StandaloneSortableTable<T = unknown>({\r\n fields,\r\n currentSort,\r\n ...rest\r\n }: SortableTableProps<T>) {\r\n return (\r\n <DataTableProvider initialFields={fields} initialSort={currentSort}>\r\n <StandaloneSortHelper nextSort={currentSort} />\r\n <SortableTable {...rest}/>\r\n </DataTableProvider>\r\n )\r\n}\r\n\r\nStandaloneSortableTable.displayName = 'StandaloneSortableTable';\r\n","import React, {type ChangeEvent, useId} from 'react';\r\nimport type {RowsPerPageProps} from \"./types\";\r\nimport clsx from \"clsx\";\r\n\r\nconst defaultRowsPerPageValues: number[] = [10, 25, 50, 100, 250, 500, 1000];\r\n\r\nexport default function 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 ?? clsx('form-select', {[`form-select-${size}`]: !!size});\r\n const inputGroupClassName = clsx('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\nRowsPerPage.displayName = 'RowsPerPage';\r\n","import React from 'react';\r\nimport RowsPerPage from \"./RowsPerPage\";\r\nimport type {TablePaginationProps} from \"./types\";\r\nimport clsx from \"clsx\";\r\n\r\nexport default function 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 = clsx(\"btn btn-link\", {[`btn-${size}`]: !!size});\r\n\r\n return (\r\n <div className={clsx(\"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\nTablePagination.displayname = 'TablePagination';\r\n","import {useTableFields} from \"./useTableFields\";\r\n\r\nexport default function DataTableCols<T = unknown>() {\r\n const [fields] = useTableFields<T>()\r\n return (\r\n <colgroup>\r\n {fields\r\n .filter(field => field.visible !== false)\r\n .map((field, index) => (\r\n <col key={index}\r\n className={field.colClassName}\r\n span={field.colSpan ?? 1}/>\r\n ))}\r\n </colgroup>\r\n )\r\n}\r\nDataTableCols.displayName = 'DataTableCols';\r\n\r\n","import type {DataTableField} from \"./types\";\r\nimport {useContext} from \"react\";\r\nimport {DataTableContext, type TableContextData} from \"./DataTableContext\";\r\n\r\nexport type UseFieldArg<T = unknown> = keyof T & ((string | number) & {})\r\nexport function useField<T = unknown>(key: UseFieldArg<T>): [\r\n field:DataTableField<T>|null,\r\n updateField: (key: string|number, arg: Partial<DataTableField<T>>) => void\r\n] {\r\n const context = useContext(DataTableContext) as TableContextData<T>;\r\n if (!context) {\r\n throw new Error('useField must be used within a DataTableProvider');\r\n }\r\n\r\n return [\r\n context.fields.find(field => field.id === key) ?? null,\r\n context.updateField,\r\n ]\r\n}\r\n","import {useContext} from \"react\";\r\nimport {DataTableContext, type TableContextData} from \"./DataTableContext\";\r\n\r\nexport function useTableContext<T = unknown>():TableContextData<T> {\r\n const context = useContext(DataTableContext) as TableContextData<T>;\r\n if (!context) {\r\n throw new Error('useTableContext must be used within a DataTableProvider');\r\n }\r\n return context;\r\n}\r\n"],"names":["DataTableContext","createContext","DataTableProvider","children","initialFields","initialSort","fields","setFieldsState","useState","sort","setProviderSort","setFields","useCallback","setSort","updateField","key","arg","nextState","field","getField","value","useMemo","jsx","r","e","t","f","o","clsx","StyledTable","styled","props","Table","sticky","responsive","className","ref","rest","_className","DataTableTH","thClassName","useTableFields","context","useContext","DataTableHead","index","DataTable","size","data","keyField","rowClassName","renderRow","onSelectRow","selected","tableHeadProps","tfoot","tableClassName","DataTableCols","DataTableTBody","StandaloneDataTable","DataTableCell","row","as","cellClassName","createElement","DataTableRow","trRef","onClick","clickHandler","ev","jsxs","keyValue","isSelected","useTableSort","flexJustifyContent","align","FieldTitle","SortableTableTH","sorted","ascending","_thClassName","thProps","iconClassName","SortableTableHead","onChangeSort","tableField","SortableTableHeadWrapper","SortableTable","StandaloneSortHelper","nextSort","setNextSort","useEffect","StandaloneSortableTable","currentSort","defaultRowsPerPageValues","RowsPerPage","pageValues","label","onChange","id","useId","changeHandler","selectClassName","inputGroupClassName","TablePagination","page","rowsPerPage","onChangePage","count","showFirst","showLast","rowsPerPageProps","first","last","lastPage","buttonClassName","useField","useTableContext"],"mappings":"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","x_google_ignoreList":[2]}
1
+ {"version":3,"file":"index.es.js","sources":["../src/DataTableContext.ts","../src/DataTableProvider.tsx","../node_modules/clsx/dist/clsx.mjs","../src/Table.tsx","../src/DataTableTH.tsx","../src/useTableFields.ts","../src/DataTableHead.tsx","../src/DataTable.tsx","../src/StandaloneDataTable.tsx","../src/DataTableCell.tsx","../src/DataTableRow.tsx","../src/StandaloneDataTableRow.tsx","../src/DataTableTBody.tsx","../src/useTableSort.ts","../src/SortableTableTH.tsx","../src/SortableTableHead.tsx","../src/SortableTableHeadWrapper.tsx","../src/SortableTable.tsx","../src/StandaloneSortHelper.tsx","../src/StandaloneSortableTable.tsx","../src/RowsPerPage.tsx","../src/TablePagination.tsx","../src/DataTableCols.tsx","../src/useField.ts","../src/useTableContext.ts"],"sourcesContent":["import {createContext} from \"react\";\r\nimport type {DataTableField, SortProps} from \"./types\";\r\n\r\nexport interface TableContextData<T = unknown> {\r\n fields: DataTableField<T>[];\r\n setFields: (next: DataTableField<T>[] | ((prev: DataTableField<T>[]) => DataTableField<T>[])) => void;\r\n sort: SortProps<T>|null;\r\n setSort: (next: SortProps<T> | null | ((prev:SortProps<T>|null) => SortProps<T>|null )) => void;\r\n getField: (key: string | number) => DataTableField<T> | undefined;\r\n updateField: (key: string | number, arg: Partial<DataTableField<T>>) => void;\r\n}\r\n\r\nexport const DataTableContext = createContext<TableContextData<unknown> | null>(null)\r\n","import {type ReactNode, useCallback, useMemo, useState} from \"react\";\r\nimport type {DataTableField, SortProps} from \"./types\";\r\nimport {DataTableContext, type TableContextData} from \"./DataTableContext\";\r\n\r\nexport interface TableProviderProps<T = unknown> {\r\n initialFields: DataTableField<T>[];\r\n initialSort?: SortProps<T>|null;\r\n children: ReactNode;\r\n}\r\n\r\nexport default function DataTableProvider<T = unknown>({\r\n children,\r\n initialFields = [],\r\n initialSort = null,\r\n }: TableProviderProps<T>) {\r\n const [fields, setFieldsState] = useState<DataTableField<T>[]>(initialFields);\r\n const [sort, setProviderSort] = useState<SortProps<T> | null>(initialSort);\r\n\r\n const setFields = useCallback(\r\n (fields: DataTableField<T>[] | ((prev: DataTableField<T>[]) => DataTableField<T>[])) => {\r\n setFieldsState(fields)\r\n }, []);\r\n\r\n const setSort = useCallback(\r\n (sort: SortProps<T> | null | ((sort:SortProps<T>|null) => SortProps<T> | null)) => {\r\n setProviderSort(sort)\r\n }, [])\r\n\r\n\r\n const updateField = useCallback((key: string | number, arg: Partial<DataTableField<T>>) => {\r\n const nextState = fields.map(field => {\r\n if (field.id === key) {\r\n return {...field, ...arg}\r\n }\r\n return field;\r\n });\r\n setFieldsState(nextState);\r\n }, [fields])\r\n\r\n const getField = useCallback((key: string | number) => fields.find(field => field.id === key), [fields]);\r\n\r\n\r\n const value = useMemo<TableContextData<T>>(\r\n () => ({\r\n fields,\r\n setFields,\r\n sort,\r\n setSort,\r\n getField,\r\n updateField\r\n }),\r\n [fields, setFields, sort, setSort, updateField, getField]\r\n )\r\n\r\n return (\r\n <DataTableContext.Provider value={value as unknown as TableContextData<unknown>}>\r\n {children}\r\n </DataTableContext.Provider>\r\n )\r\n}\r\nDataTableProvider.displayName = 'DataTableProvider';\r\n\r\n","function r(e){var t,f,n=\"\";if(\"string\"==typeof e||\"number\"==typeof e)n+=e;else if(\"object\"==typeof e)if(Array.isArray(e)){var o=e.length;for(t=0;t<o;t++)e[t]&&(f=r(e[t]))&&(n&&(n+=\" \"),n+=f)}else for(f in e)e[f]&&(n&&(n+=\" \"),n+=f);return n}export function clsx(){for(var e,t,f=0,n=\"\",o=arguments.length;f<o;f++)(e=arguments[f])&&(t=r(e))&&(n&&(n+=\" \"),n+=t);return n}export default clsx;","import React, {type RefObject, type TableHTMLAttributes} from 'react';\r\nimport styled from \"@emotion/styled\";\r\nimport type {DataTableProps} from \"./types\";\r\nimport clsx from \"clsx\";\r\n\r\nexport interface StyledTableProps extends TableHTMLAttributes<HTMLTableElement>, Pick<DataTableProps, 'sticky' | 'responsive'> {\r\n ref?: RefObject<HTMLTableElement>;\r\n}\r\n\r\nconst StyledTable = styled.table<StyledTableProps>`\r\n --table-sticky-top: ${props => props.sticky ? '0' : undefined};\r\n\r\n thead {\r\n tr:nth-of-type(1) td,\r\n tr:nth-of-type(1) th {\r\n top: var(--table-sticky-top, unset);\r\n position: ${props => props.sticky ? \"sticky\" : \"unset\"};\r\n z-index: ${props => props.sticky ? 10 : \"unset\"};\r\n background: ${props => props.sticky ? \"linear-gradient(var(--bs-table-bg) 75%, rgba(var(--bs-secondary-bg-rgb), 0.9))\" : \"unset\"};\r\n }\r\n }\r\n`\r\n\r\n\r\nexport default function Table({\r\n sticky,\r\n responsive,\r\n children,\r\n className,\r\n ref,\r\n ...rest\r\n }: StyledTableProps) {\r\n if (responsive) {\r\n const _className = clsx(className, {\r\n 'table-responsive': responsive === true,\r\n [`table-responsive-${responsive}`]: responsive !== true,\r\n })\r\n return (\r\n <div className={_className}>\r\n <StyledTable ref={ref} {...rest}>{children}</StyledTable>\r\n </div>\r\n )\r\n }\r\n\r\n return (\r\n <StyledTable className={className} sticky={sticky} ref={ref} {...rest}>{children}</StyledTable>\r\n )\r\n}\r\n\r\n","import React from \"react\";\r\nimport type {DataTableTHProps} from \"./types\";\r\nimport clsx from \"clsx\";\r\n\r\n\r\nexport default function DataTableTH<T = unknown>({\r\n field,\r\n className,\r\n children,\r\n ...rest\r\n }: DataTableTHProps<T>) {\r\n if (field.visible === false) {\r\n return null;\r\n }\r\n const thClassName = clsx({[`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\n","import {useContext} from \"react\";\r\nimport {DataTableContext, type TableContextData} from \"./DataTableContext\";\r\n\r\n/**\r\n * Returns a tuple containing the fields and a function to update them.\r\n * @returns [fields, setFields]\r\n */\r\nexport function useTableFields<T = unknown>(): [\r\n fields: TableContextData<T>['fields'],\r\n setFields: TableContextData<T>['setFields']\r\n] {\r\n const context = useContext(DataTableContext) as TableContextData<T>;\r\n if (!context) {\r\n throw new Error('useTableContext must be used within a DataTableProvider');\r\n }\r\n return [\r\n context.fields,\r\n context.setFields\r\n ];\r\n}\r\n","import React, {type TableHTMLAttributes} from \"react\";\r\nimport DataTableTH from \"./DataTableTH\";\r\nimport clsx from \"clsx\";\r\nimport {useTableFields} from \"./useTableFields\";\r\n\r\n\r\nexport default function DataTableHead<T = unknown>({...rest}: TableHTMLAttributes<HTMLTableSectionElement>) {\r\n const [fields] = useTableFields<T>()\r\n return (\r\n <thead {...rest}>\r\n <tr>\r\n {fields\r\n .map((field, index) => (\r\n <DataTableTH key={String(field.id ?? index)}\r\n {...field.thProps}\r\n field={field}\r\n className={clsx(\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\nDataTableHead.displayName = 'DataTableHead';\r\n","import type {DataTableProps} from \"./types\";\r\nimport clsx from \"clsx\";\r\nimport Table from \"./Table\";\r\nimport {DataTableCols, DataTableTBody} from \"./index\";\r\nimport DataTableHead from \"./DataTableHead\";\r\n\r\nexport default function DataTable<T = unknown>({\r\n className,\r\n size,\r\n responsive,\r\n sticky,\r\n data,\r\n keyField,\r\n rowClassName,\r\n renderRow,\r\n onSelectRow,\r\n selected,\r\n tableHeadProps,\r\n children,\r\n tfoot,\r\n ...rest\r\n }: Omit<DataTableProps<T>, 'fields'>) {\r\n const tableClassName = clsx('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 <DataTableCols/>\r\n <DataTableHead {...tableHeadProps}/>\r\n {!!data.length && (\r\n <DataTableTBody 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\nDataTable.displayName = 'DataTable';\r\n","import type {DataTableProps} from \"./types\";\r\nimport DataTableProvider from \"./DataTableProvider\";\r\nimport DataTable from \"./DataTable\";\r\n\r\n\r\nexport default function StandaloneDataTable<T = unknown>({\r\n fields,\r\n ...rest\r\n }: DataTableProps<T>) {\r\n return (\r\n <DataTableProvider initialFields={fields}>\r\n <DataTable {...rest}/>\r\n </DataTableProvider>\r\n )\r\n}\r\nStandaloneDataTable.displayName = 'StandaloneDataTable';\r\n","import {createElement, type ReactNode} from 'react';\r\nimport type {DataTableCellProps} from \"./types\";\r\nimport clsx from \"clsx\";\r\n\r\n\r\nexport default function DataTableCell<T = unknown>({field, row, className, as, ...rest}: DataTableCellProps<T>) {\r\n if (field.visible === false) {\r\n return null;\r\n }\r\n const cellClassName = clsx(\r\n {[`text-${field.align}`]: !!field.align},\r\n className,\r\n typeof field.className === 'function' ? field.className(row) : field.className\r\n );\r\n return createElement(\r\n (as ?? field.as) ?? 'td',\r\n {\r\n className: cellClassName,\r\n scope: (as ?? field.as) === 'th' ? 'row' : undefined,\r\n colSpan: field.colSpan,\r\n ...field.cellProps,\r\n ...rest\r\n },\r\n (row[field.field] === undefined && !field.render)\r\n ? null\r\n : (\r\n typeof field.render === 'function'\r\n ? field.render(row)\r\n : row[field.field] as ReactNode\r\n )\r\n )\r\n}\r\nDataTableCell.displayName = 'DataTableCell';\r\n","import React, {type MouseEvent} from 'react';\r\nimport type {DataTableRowProps} from \"./types\";\r\nimport DataTableCell from \"./DataTableCell\";\r\nimport clsx from \"clsx\";\r\nimport {useTableFields} from \"./useTableFields\";\r\n\r\n\r\nexport default function DataTableRow<T = unknown>({\r\n className,\r\n rowClassName,\r\n selected,\r\n row,\r\n trRef,\r\n onClick,\r\n ...rest\r\n }: DataTableRowProps<T>) {\r\n const [fields] = useTableFields<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={clsx({'table-active': selected}, className, _className)}\r\n onClick={clickHandler}\r\n {...rest}>\r\n {fields\r\n .map((field, index) => (\r\n <DataTableCell key={String(field?.id ?? index)} field={field} row={row}/>\r\n ))}\r\n </tr>\r\n )\r\n}\r\nDataTableRow.displayName = 'DataTableRow';\r\n","import React, {type MouseEvent} from 'react';\r\nimport type {DataTableField, DataTableRowProps} from \"./types\";\r\nimport DataTableCell from \"./DataTableCell\";\r\nimport clsx from \"clsx\";\r\nimport {useTableFields} from \"./useTableFields\";\r\n\r\nexport interface StandaloneDataTableRowProps<T = unknown> extends DataTableRowProps<T> {\r\n fields: DataTableField<T>[]\r\n}\r\n\r\nexport default function StandaloneDataTableRow<T = unknown>({\r\n fields,\r\n className,\r\n rowClassName,\r\n selected,\r\n row,\r\n trRef,\r\n onClick,\r\n ...rest\r\n }: StandaloneDataTableRowProps<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={clsx({'table-active': selected}, className, _className)}\r\n onClick={clickHandler}\r\n {...rest}>\r\n {fields\r\n .map((field, index) => (\r\n <DataTableCell key={String(field?.id ?? index)} field={field} row={row}/>\r\n ))}\r\n </tr>\r\n )\r\n}\r\nStandaloneDataTableRow.displayName = 'StandaloneDataTableRow';\r\n","import React from 'react';\r\nimport DataTableRow from \"./DataTableRow\";\r\nimport type {DataTableTBodyProps} from \"./types\";\r\n\r\n\r\nexport default function DataTableTBody<T = unknown>({\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 row={row} selected={isSelected}/>\r\n )\r\n })}\r\n {children}\r\n </tbody>\r\n )\r\n}\r\nDataTableTBody.displayName = 'DataTableTBody';\r\n","import {useContext} from \"react\";\r\nimport {DataTableContext, type TableContextData} from \"./DataTableContext\";\r\n\r\n/**\r\n * Returns a tuple containing the currentSort and a function to update the sort.\r\n * @returns [sort, setSort]\r\n */\r\nexport function useTableSort<T = unknown>(): [\r\n sort: TableContextData<T>['sort'],\r\n setSort: TableContextData<T>['setSort']\r\n] {\r\n const context = useContext(DataTableContext) as TableContextData<T>;\r\n if (!context) {\r\n throw new Error('useTableSort must be used within a DataTableProvider');\r\n }\r\n return [\r\n context.sort,\r\n context.setSort\r\n ];\r\n}\r\n","import React from \"react\";\r\nimport DataTableTH from \"./DataTableTH\";\r\nimport type {SortableTableTHProps, UIFlexAlign} from \"./types\";\r\nimport styled from '@emotion/styled';\r\nimport clsx from \"clsx\";\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\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\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\nexport default function 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.visible === false) {\r\n return null;\r\n }\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 = clsx(\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={clsx(\"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={clsx('me-1 sort-icon', iconClassName)}/>\r\n </FieldTitle>\r\n </th>\r\n )\r\n}\r\nSortableTableTH.displayName = 'SortableTableTH';\r\n","import React from \"react\";\r\nimport SortableTableTH from \"./SortableTableTH\";\r\nimport type {SortableTableHeadProps} from \"./types\";\r\nimport clsx from \"clsx\";\r\nimport {useTableFields} from \"./useTableFields\";\r\nimport {useTableSort} from \"./useTableSort\";\r\n\r\nexport default function SortableTableHead<T = unknown>({\r\n onChangeSort,\r\n }: SortableTableHeadProps<T>) {\r\n const [fields] = useTableFields<T>()\r\n const [sort] = useTableSort<T>();\r\n return (\r\n <thead>\r\n <tr>\r\n {fields\r\n .map((tableField, index) => (\r\n <SortableTableTH<T> key={index} field={tableField}\r\n sorted={sort?.field === tableField.field} ascending={sort?.ascending}\r\n className={clsx(\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\n\r\n","import {useTableFields} from \"./useTableFields\";\r\nimport {useTableSort} from \"./useTableSort\";\r\nimport SortableTableHead from \"./SortableTableHead\";\r\nimport type {SortProps} from \"./types\";\r\n\r\nexport interface SortableTableHeadWrapperProps<T = unknown> {\r\n onChangeSort: (sort: SortProps<T>) => void;\r\n}\r\n\r\nexport default function SortableTableHeadWrapper<T = unknown>({\r\n onChangeSort,\r\n }: SortableTableHeadWrapperProps<T>) {\r\n const [fields] = useTableFields<T>()\r\n const [sort] = useTableSort<T>();\r\n\r\n return (\r\n <SortableTableHead fields={fields} currentSort={sort} onChangeSort={onChangeSort} />\r\n )\r\n}\r\nSortableTableHeadWrapper.displayName = 'SortableTableHeadWrapper';\r\n","import type {SortableTableProps} from \"./types\";\r\nimport clsx from \"clsx\";\r\nimport Table from \"./Table\";\r\nimport {DataTableCols, DataTableTBody} from \"./index\";\r\nimport React from \"react\";\r\nimport SortableTableHeadWrapper from \"./SortableTableHeadWrapper\";\r\n\r\nexport default function SortableTable<T = unknown>({\r\n className,\r\n size,\r\n responsive,\r\n sticky,\r\n data,\r\n keyField,\r\n rowClassName,\r\n renderRow,\r\n onSelectRow,\r\n selected,\r\n tableHeadProps,\r\n children,\r\n tfoot,\r\n onChangeSort,\r\n ...rest\r\n }: Omit<SortableTableProps<T>, 'fields' | 'currentSort'>) {\r\n const tableClassName = clsx('table', className, {\r\n [`table-${size}`]: !!size,\r\n })\r\n\r\n return (\r\n <Table className={tableClassName} responsive={responsive} sticky={sticky} {...rest}>\r\n <DataTableCols/>\r\n <SortableTableHeadWrapper onChangeSort={onChangeSort} {...tableHeadProps}/>\r\n {!!data.length && (\r\n <DataTableTBody 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\nSortableTable.displayName = 'SortableTable';\r\n","import type {SortProps} from \"./types\";\r\nimport {useTableSort} from \"./useTableSort\";\r\nimport {useEffect} from \"react\";\r\n\r\nexport interface StandaloneSortHelperProps<T = unknown> {\r\n nextSort: SortProps<T>\r\n}\r\nexport function StandaloneSortHelper<T = unknown>({nextSort}:StandaloneSortHelperProps<T>) {\r\n const [, setNextSort] = useTableSort<T>();\r\n useEffect(() => {\r\n console.log('setNextSort', nextSort);\r\n setNextSort(nextSort);\r\n }, [nextSort, setNextSort]);\r\n return null;\r\n}\r\n","import React from 'react';\r\nimport type {SortableTableProps} from \"./types\";\r\nimport DataTableProvider from \"./DataTableProvider\";\r\nimport SortableTable from \"./SortableTable\";\r\nimport {StandaloneSortHelper} from \"./StandaloneSortHelper\";\r\n\r\n\r\nexport default function StandaloneSortableTable<T = unknown>({\r\n fields,\r\n currentSort,\r\n ...rest\r\n }: SortableTableProps<T>) {\r\n return (\r\n <DataTableProvider initialFields={fields} initialSort={currentSort}>\r\n <StandaloneSortHelper nextSort={currentSort} />\r\n <SortableTable {...rest}/>\r\n </DataTableProvider>\r\n )\r\n}\r\n\r\nStandaloneSortableTable.displayName = 'StandaloneSortableTable';\r\n","import React, {type ChangeEvent, useId} from 'react';\r\nimport type {RowsPerPageProps} from \"./types\";\r\nimport clsx from \"clsx\";\r\n\r\nconst defaultRowsPerPageValues: number[] = [10, 25, 50, 100, 250, 500, 1000];\r\n\r\nexport default function 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 ?? clsx('form-select', {[`form-select-${size}`]: !!size});\r\n const inputGroupClassName = clsx('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\nRowsPerPage.displayName = 'RowsPerPage';\r\n","import React from 'react';\r\nimport RowsPerPage from \"./RowsPerPage\";\r\nimport type {TablePaginationProps} from \"./types\";\r\nimport clsx from \"clsx\";\r\n\r\nexport default function 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 = clsx(\"btn btn-link\", {[`btn-${size}`]: !!size});\r\n\r\n return (\r\n <div className={clsx(\"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\nTablePagination.displayname = 'TablePagination';\r\n","import {useTableFields} from \"./useTableFields\";\r\n\r\nexport default function DataTableCols<T = unknown>() {\r\n const [fields] = useTableFields<T>()\r\n return (\r\n <colgroup>\r\n {fields\r\n .filter(field => field.visible !== false)\r\n .map((field, index) => (\r\n <col key={index}\r\n className={field.colClassName}\r\n span={field.colSpan ?? 1}/>\r\n ))}\r\n </colgroup>\r\n )\r\n}\r\nDataTableCols.displayName = 'DataTableCols';\r\n\r\n","import type {DataTableField} from \"./types\";\r\nimport {useContext} from \"react\";\r\nimport {DataTableContext, type TableContextData} from \"./DataTableContext\";\r\n\r\nexport type UseFieldArg<T = unknown> = keyof T & ((string | number) & {})\r\nexport function useField<T = unknown>(key: UseFieldArg<T>): [\r\n field:DataTableField<T>|null,\r\n updateField: (key: string|number, arg: Partial<DataTableField<T>>) => void\r\n] {\r\n const context = useContext(DataTableContext) as TableContextData<T>;\r\n if (!context) {\r\n throw new Error('useField must be used within a DataTableProvider');\r\n }\r\n\r\n return [\r\n context.fields.find(field => field.id === key) ?? null,\r\n context.updateField,\r\n ]\r\n}\r\n","import {useContext} from \"react\";\r\nimport {DataTableContext, type TableContextData} from \"./DataTableContext\";\r\n\r\nexport function useTableContext<T = unknown>():TableContextData<T> {\r\n const context = useContext(DataTableContext) as TableContextData<T>;\r\n if (!context) {\r\n throw new Error('useTableContext must be used within a DataTableProvider');\r\n }\r\n return context;\r\n}\r\n"],"names":["DataTableContext","createContext","DataTableProvider","children","initialFields","initialSort","fields","setFieldsState","useState","sort","setProviderSort","setFields","useCallback","setSort","updateField","key","arg","nextState","field","getField","value","useMemo","jsx","r","e","t","f","o","clsx","StyledTable","styled","props","Table","sticky","responsive","className","ref","rest","_className","DataTableTH","thClassName","useTableFields","context","useContext","DataTableHead","index","DataTable","size","data","keyField","rowClassName","renderRow","onSelectRow","selected","tableHeadProps","tfoot","tableClassName","DataTableCols","DataTableTBody","StandaloneDataTable","DataTableCell","row","as","cellClassName","createElement","DataTableRow","trRef","onClick","clickHandler","ev","StandaloneDataTableRow","jsxs","keyValue","isSelected","useTableSort","flexJustifyContent","align","FieldTitle","SortableTableTH","sorted","ascending","_thClassName","thProps","iconClassName","SortableTableHead","onChangeSort","tableField","SortableTableHeadWrapper","SortableTable","StandaloneSortHelper","nextSort","setNextSort","useEffect","StandaloneSortableTable","currentSort","defaultRowsPerPageValues","RowsPerPage","pageValues","label","onChange","id","useId","changeHandler","selectClassName","inputGroupClassName","TablePagination","page","rowsPerPage","onChangePage","count","showFirst","showLast","rowsPerPageProps","first","last","lastPage","buttonClassName","useField","useTableContext"],"mappings":"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","x_google_ignoreList":[2]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@chumsinc/sortable-tables",
3
- "version": "3.0.1",
3
+ "version": "3.0.2",
4
4
  "type": "module",
5
5
  "source": "./src/index.tsx",
6
6
  "main": "./dist/index.umd.js",
package/src/index.tsx CHANGED
@@ -3,6 +3,7 @@
3
3
 
4
4
  export {default as DataTable} from './StandaloneDataTable';
5
5
  export {default as DataTableRow} from './DataTableRow';
6
+ export {default as StandaloneDataTableRow} from './StandaloneDataTableRow';
6
7
  export {default as DataTableTBody} from './DataTableTBody';
7
8
  export {default as DataTableTH} from './DataTableTH';
8
9
  export {default as StandaloneSortableTable} from './StandaloneSortableTable';
@@ -20,6 +21,7 @@ export {useTableSort} from './useTableSort'
20
21
  export {useTableContext} from './useTableContext'
21
22
  export {DataTableContext, type TableContextData} from './DataTableContext'
22
23
  export type {TableProviderProps} from './DataTableProvider'
24
+ export type {StandaloneDataTableRowProps} from './StandaloneDataTableRow'
23
25
  export type {
24
26
  SortProps,
25
27
  DataTableField,