@pravinrd/awesome-grid 0.2.9 → 0.2.11
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/README.md +22 -0
- package/dist-lib/index.cjs +6 -6
- package/dist-lib/index.js +648 -625
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -26,6 +26,7 @@ export default function App() {
|
|
|
26
26
|
return (
|
|
27
27
|
<AwesomeGrid
|
|
28
28
|
apiEndpoint="/api/orders"
|
|
29
|
+
storageKey="orders-grid"
|
|
29
30
|
rowKey="id"
|
|
30
31
|
theme="light"
|
|
31
32
|
currency="USD"
|
|
@@ -162,5 +163,26 @@ The component expects a JSON response with `data` and `columns`.
|
|
|
162
163
|
import { AwesomeGrid } from "@pravinrd/awesome-grid";
|
|
163
164
|
```
|
|
164
165
|
|
|
166
|
+
## Styling
|
|
167
|
+
AwesomeGrid ships with a bundled stylesheet. Import it once in your app:
|
|
168
|
+
```js
|
|
169
|
+
import "@pravinrd/awesome-grid/style.css";
|
|
170
|
+
```
|
|
171
|
+
|
|
172
|
+
## Personalization Persistence (IndexedDB)
|
|
173
|
+
AwesomeGrid stores personalization in IndexedDB (not LocalStorage) so settings survive refreshes:
|
|
174
|
+
- Theme
|
|
175
|
+
- Column order + visibility
|
|
176
|
+
- Grouping selections
|
|
177
|
+
- Aggregate columns
|
|
178
|
+
- Column widths
|
|
179
|
+
|
|
180
|
+
Use a unique `storageKey` per grid instance if you render multiple grids on the same page:
|
|
181
|
+
```jsx
|
|
182
|
+
<AwesomeGrid apiEndpoint="/api/orders" rowKey="id" storageKey="orders-grid" />
|
|
183
|
+
<AwesomeGrid apiEndpoint="/api/customers" rowKey="id" storageKey="customers-grid" />
|
|
184
|
+
```
|
|
185
|
+
|
|
186
|
+
|
|
165
187
|
## License
|
|
166
188
|
MIT
|
package/dist-lib/index.cjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const l=require("react"),
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const l=require("react"),Dt="_container_dihwe_1",Pt="_themeLight_dihwe_10",Bt="_themeDark_dihwe_29",Lt="_themePurple_dihwe_48",It="_headerRow_dihwe_67",$t="_flexRow_dihwe_76",Wt="_toolbarGroup_dihwe_82",Ft="_dropdown_dihwe_86",zt="_buttonBase_dihwe_90",Gt="_buttonPrimary_dihwe_101",Vt="_buttonDanger_dihwe_111",Ut="_buttonMuted_dihwe_121",Ht="_dropdownToggle_dihwe_142",Yt="_dropdownMenu_dihwe_147",qt="_dropdownMenuOpen_dihwe_163",Jt="_menuItemButton_dihwe_167",Xt="_labelMuted_dihwe_185",Kt="_selectSmall_dihwe_190",Zt="_selectAuto_dihwe_199",Qt="_switchRow_dihwe_203",er="_groupingSummary_dihwe_210",tr="_relative_dihwe_217",rr="_overlay_dihwe_221",nr="_overlayInner_dihwe_229",or="_spinner_dihwe_236",sr="_tableWrap_dihwe_252",ar="_tableWrapAll_dihwe_256",lr="_table_dihwe_252",ir="_tableHead_dihwe_278",cr="_thCellTop_dihwe_282",ur="_thCellFilter_dihwe_290",dr="_thInner_dihwe_297",mr="_resizeHandle_dihwe_303",hr="_sortButton_dihwe_328",pr="_iconMuted_dihwe_338",fr="_inlineGroup_dihwe_342",gr="_input_dihwe_350",yr="_rowInteractive_dihwe_362",wr="_groupRow_dihwe_375",br="_groupRowAnimated_dihwe_382",_r="_groupChildRow_dihwe_386",vr="_groupToggle_dihwe_390",xr="_groupMeta_dihwe_430",kr="_checkbox_dihwe_438",jr="_tfoot_dihwe_447",Sr="_textCenter_dihwe_455",Nr="_paginationWrap_dihwe_459",Cr="_pagination_dihwe_459",Rr="_pageButton_dihwe_473",Er="_pageButtonActive_dihwe_488",Tr="_backdrop_dihwe_494",Or="_drawer_dihwe_500",Ar="_drawerTitle_dihwe_515",Mr="_drawerSection_dihwe_521",Dr="_drawerSubtitle_dihwe_527",Pr="_sectionToggle_dihwe_534",Br="_sectionBody_dihwe_547",Lr="_drawerRow_dihwe_551",Ir="_spacerAuto_dihwe_558",$r="_srOnly_dihwe_570",s={container:Dt,themeLight:Pt,themeDark:Bt,themePurple:Lt,headerRow:It,flexRow:$t,toolbarGroup:Wt,dropdown:Ft,buttonBase:zt,buttonPrimary:Gt,buttonDanger:Vt,buttonMuted:Ut,dropdownToggle:Ht,dropdownMenu:Yt,dropdownMenuOpen:qt,menuItemButton:Jt,labelMuted:Xt,selectSmall:Kt,selectAuto:Zt,switchRow:Qt,groupingSummary:er,relative:tr,overlay:rr,overlayInner:nr,spinner:or,tableWrap:sr,tableWrapAll:ar,table:lr,tableHead:ir,thCellTop:cr,thCellFilter:ur,thInner:dr,resizeHandle:mr,sortButton:hr,iconMuted:pr,inlineGroup:fr,input:gr,rowInteractive:yr,groupRow:wr,groupRowAnimated:br,groupChildRow:_r,groupToggle:vr,groupMeta:xr,checkbox:kr,tfoot:jr,textCenter:Sr,paginationWrap:Nr,pagination:Cr,pageButton:Rr,pageButtonActive:Er,backdrop:Tr,drawer:Or,drawerTitle:Ar,drawerSection:Mr,drawerSubtitle:Dr,sectionToggle:Pr,sectionBody:Br,drawerRow:Lr,spacerAuto:Ir,srOnly:$r};var Le={exports:{}},Ce={};/**
|
|
2
2
|
* @license React
|
|
3
3
|
* react-jsx-runtime.production.js
|
|
4
4
|
*
|
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
*
|
|
7
7
|
* This source code is licensed under the MIT license found in the
|
|
8
8
|
* LICENSE file in the root directory of this source tree.
|
|
9
|
-
*/var ct;function
|
|
9
|
+
*/var ct;function Wr(){if(ct)return Ce;ct=1;var f=Symbol.for("react.transitional.element"),w=Symbol.for("react.fragment");function p(k,j,N){var C=null;if(N!==void 0&&(C=""+N),j.key!==void 0&&(C=""+j.key),"key"in j){N={};for(var L in j)L!=="key"&&(N[L]=j[L])}else N=j;return j=N.ref,{$$typeof:f,type:k,key:C,ref:j!==void 0?j:null,props:N}}return Ce.Fragment=w,Ce.jsx=p,Ce.jsxs=p,Ce}var Re={};/**
|
|
10
10
|
* @license React
|
|
11
11
|
* react-jsx-runtime.development.js
|
|
12
12
|
*
|
|
@@ -14,11 +14,11 @@
|
|
|
14
14
|
*
|
|
15
15
|
* This source code is licensed under the MIT license found in the
|
|
16
16
|
* LICENSE file in the root directory of this source tree.
|
|
17
|
-
*/var ut;function Fr(){return ut||(ut=1,process.env.NODE_ENV!=="production"&&(function(){function
|
|
17
|
+
*/var ut;function Fr(){return ut||(ut=1,process.env.NODE_ENV!=="production"&&(function(){function f(o){if(o==null)return null;if(typeof o=="function")return o.$$typeof===ve?null:o.displayName||o.name||null;if(typeof o=="string")return o;switch(o){case we:return"Fragment";case We:return"Profiler";case se:return"StrictMode";case Q:return"Suspense";case be:return"SuspenseList";case U:return"Activity"}if(typeof o=="object")switch(typeof o.tag=="number"&&console.error("Received an unexpected object in getComponentNameFromType(). This is likely a bug in React. Please file an issue."),o.$$typeof){case oe:return"Portal";case Fe:return o.displayName||"Context";case y:return(o._context.displayName||"Context")+".Consumer";case V:var c=o.render;return o=o.displayName,o||(o=c.displayName||c.name||"",o=o!==""?"ForwardRef("+o+")":"ForwardRef"),o;case _e:return c=o.displayName||null,c!==null?c:f(o.type)||"Memo";case F:c=o._payload,o=o._init;try{return f(o(c))}catch{}}return null}function w(o){return""+o}function p(o){try{w(o);var c=!1}catch{c=!0}if(c){c=console;var g=c.error,_=typeof Symbol=="function"&&Symbol.toStringTag&&o[Symbol.toStringTag]||o.constructor.name||"Object";return g.call(c,"The provided key is an unsupported type %s. This value must be coerced to a string before using it here.",_),w(o)}}function k(o){if(o===we)return"<>";if(typeof o=="object"&&o!==null&&o.$$typeof===F)return"<...>";try{var c=f(o);return c?"<"+c+">":"<...>"}catch{return"<...>"}}function j(){var o=xe.A;return o===null?null:o.getOwner()}function N(){return Error("react-stack-top-frame")}function C(o){if(S.call(o,"key")){var c=Object.getOwnPropertyDescriptor(o,"key").get;if(c&&c.isReactWarning)return!1}return o.key!==void 0}function L(o,c){function g(){je||(je=!0,console.error("%s: `key` is not a prop. Trying to access it will result in `undefined` being returned. If you need to access the same value within the child component, you should pass it as a different prop. (https://react.dev/link/special-props)",c))}g.isReactWarning=!0,Object.defineProperty(o,"key",{get:g,configurable:!0})}function ge(){var o=f(this.type);return O[o]||(O[o]=!0,console.error("Accessing element.ref was removed in React 19. ref is now a regular prop. It will be removed from the JSX Element type in a future release.")),o=this.props.ref,o!==void 0?o:null}function ye(o,c,g,_,z,ie){var b=g.ref;return o={$$typeof:Te,type:o,key:c,props:g,_owner:_},(b!==void 0?b:null)!==null?Object.defineProperty(o,"ref",{enumerable:!1,get:ge}):Object.defineProperty(o,"ref",{enumerable:!1,value:null}),o._store={},Object.defineProperty(o._store,"validated",{configurable:!1,enumerable:!1,writable:!0,value:0}),Object.defineProperty(o,"_debugInfo",{configurable:!1,enumerable:!1,writable:!0,value:null}),Object.defineProperty(o,"_debugStack",{configurable:!1,enumerable:!1,writable:!0,value:z}),Object.defineProperty(o,"_debugTask",{configurable:!1,enumerable:!1,writable:!0,value:ie}),Object.freeze&&(Object.freeze(o.props),Object.freeze(o)),o}function K(o,c,g,_,z,ie){var b=c.children;if(b!==void 0)if(_)if(ze(b)){for(_=0;_<b.length;_++)Z(b[_]);Object.freeze&&Object.freeze(b)}else console.error("React.jsx: Static children should always be an array. You are likely explicitly calling React.jsxs or React.jsxDEV. Use the Babel transform instead.");else Z(b);if(S.call(c,"key")){b=f(o);var Y=Object.keys(c).filter(function(I){return I!=="key"});_=0<Y.length?"{key: someKey, "+Y.join(": ..., ")+": ...}":"{key: someKey}",le[b+_]||(Y=0<Y.length?"{"+Y.join(": ..., ")+": ...}":"{}",console.error(`A props object containing a "key" prop is being spread into JSX:
|
|
18
18
|
let props = %s;
|
|
19
19
|
<%s {...props} />
|
|
20
20
|
React keys must be passed directly to JSX without using spread:
|
|
21
21
|
let props = %s;
|
|
22
|
-
<%s key={someKey} {...props} />`,_,y,H,y),ae[y+_]=!0)}if(y=null,f!==void 0&&(h(f),y=""+f),C(c)&&(h(c.key),y=""+c.key),"key"in c){f={};for(var ie in c)ie!=="key"&&(f[ie]=c[ie])}else f=c;return y&&B(f,typeof n=="function"?n.displayName||n.name||"Unknown":n),ge(n,y,f,j(),z,le)}function K(n){re(n)?n._store&&(n._store.validated=1):typeof n=="object"&&n!==null&&n.$$typeof===W&&(n._payload.status==="fulfilled"?re(n._payload.value)&&n._payload.value._store&&(n._payload.value._store.validated=1):n._store&&(n._store.validated=1))}function re(n){return typeof n=="object"&&n!==null&&n.$$typeof===Ee}var V=l,Ee=Symbol.for("react.transitional.element"),ne=Symbol.for("react.portal"),we=Symbol.for("react.fragment"),oe=Symbol.for("react.strict_mode"),Fe=Symbol.for("react.profiler"),w=Symbol.for("react.consumer"),We=Symbol.for("react.context"),G=Symbol.for("react.forward_ref"),Z=Symbol.for("react.suspense"),be=Symbol.for("react.suspense_list"),ye=Symbol.for("react.memo"),W=Symbol.for("react.lazy"),U=Symbol.for("react.activity"),_e=Symbol.for("react.client.reference"),xe=V.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE,S=Object.prototype.hasOwnProperty,ze=Array.isArray,ve=console.createTask?console.createTask:function(){return null};V={react_stack_bottom_frame:function(n){return n()}};var ke,A={},Q=V.react_stack_bottom_frame.bind(V,N)(),se=ve(k(N)),ae={};Ce.Fragment=we,Ce.jsx=function(n,c,f){var _=1e4>xe.recentlyCreatedOwnerStacks++;return J(n,c,f,!1,_?Error("react-stack-top-frame"):Q,_?ve(k(n)):se)},Ce.jsxs=function(n,c,f){var _=1e4>xe.recentlyCreatedOwnerStacks++;return J(n,c,f,!0,_?Error("react-stack-top-frame"):Q,_?ve(k(n)):se)}})()),Ce}var dt;function Wr(){return dt||(dt=1,process.env.NODE_ENV==="production"?Be.exports=$r():Be.exports=Fr()),Be.exports}var r=Wr();const T=(...m)=>m.filter(Boolean).join(" ");function ht({label:m,children:b}){const[h,k]=l.useState(!1),j=l.useRef(null);return l.useEffect(()=>{const N=C=>{j.current&&!j.current.contains(C.target)&&k(!1)};return document.addEventListener("mousedown",N),()=>document.removeEventListener("mousedown",N)},[]),r.jsxs("div",{className:s.dropdown,ref:j,children:[r.jsx("button",{className:T(s.buttonBase,s.buttonPrimary,s.dropdownToggle),type:"button","aria-haspopup":"menu","aria-expanded":h,onClick:()=>k(!h),children:m}),r.jsx("ul",{className:T(s.dropdownMenu,h&&s.dropdownMenuOpen),role:"menu",onClick:()=>k(!1),children:b})]})}const Ye=(m,b="14px system-ui")=>{const k=(Ye.canvas||(Ye.canvas=document.createElement("canvas"))).getContext("2d");return k.font=b,k.measureText(m).width},Re=m=>m.toLowerCase().replace(/[_\s]+(.)?/g,(b,h)=>h?h.toUpperCase():"").replace(/^(.)/,b=>b.toLowerCase()),zr=m=>{if(!m||typeof m!="object")return m;const b={};return Object.keys(m).forEach(h=>{b[Re(h)]=m[h]}),b},q=0,Ie=38,pt=10,Gr=[],$e=80,Ur="awesome-grid",me="preferences",mt=()=>new Promise((m,b)=>{const h=indexedDB.open(Ur,1);h.onupgradeneeded=()=>{const k=h.result;k.objectStoreNames.contains(me)||k.createObjectStore(me)},h.onsuccess=()=>m(h.result),h.onerror=()=>b(h.error)}),Vr=async m=>{if(typeof indexedDB>"u")return null;const b=await mt();return new Promise((h,k)=>{const C=b.transaction(me,"readonly").objectStore(me).get(m);C.onsuccess=()=>h(C.result||null),C.onerror=()=>k(C.error)}).finally(()=>b.close())},Hr=async(m,b)=>{if(typeof indexedDB>"u")return;const h=await mt();return new Promise((k,j)=>{const B=h.transaction(me,"readwrite").objectStore(me).put(b,m);B.onsuccess=()=>k(),B.onerror=()=>j(B.error)}).finally(()=>h.close())};function Yr({apiEndpoint:m,rowKey:b,theme:h="light",storageKey:k,computedColumns:j=Gr,currency:N="INR",dateFormat:C={locale:"en-US",options:{year:"numeric",month:"2-digit",day:"2-digit"}},dateSeparator:B="/",pageSizeOptions:fe=[50,100,500,1e3,0],defaultPageSize:ge}){const J=l.useRef(!1),K=l.useRef(!1),re=l.useRef(!1),V=l.useRef(!1),Ee=50,[ne,we]=l.useState(!0),[oe,Fe]=l.useState([]),[w,We]=l.useState([]),[G,Z]=l.useState([]),[be,ye]=l.useState(!1),[W,U]=l.useState(1),_e=Array.isArray(fe)&&fe.length>0?fe:[50,100,500,1e3,0],xe=ge!==void 0&&_e.includes(ge)?ge:_e[0]||50,[S,ze]=l.useState(xe),[ve,ke]=l.useState(!1),[A,Q]=l.useState([]),[se,ae]=l.useState({}),[n,c]=l.useState([]),[f,_]=l.useState(()=>{const e=String(h||"light").toLowerCase();return e==="dark"||e==="purple"?e:"light"}),[z,le]=l.useState({groupBy:!1,aggregates:!1}),[y,H]=l.useState({}),ie=l.useDeferredValue(y),[I,ft]=l.useState({key:null,direction:"asc"}),[ee,je]=l.useState([]),[Te,Ae]=l.useState({}),[gt,M]=l.useTransition(),qe=l.useRef(null),[wt,bt]=l.useState(0),Oe=l.useRef(null),[Xe,Je]=l.useState(0),[Ke,yt]=l.useState(0),ce=l.useRef(null),[_t,Ze]=l.useState(()=>typeof window>"u"||typeof window.matchMedia!="function"?!1:window.matchMedia("(max-width: 767.98px)").matches),Ge=String(N||"INR").toUpperCase()==="USD"?"USD":"INR",Qe=Ge==="USD"?"en-US":"en-IN",et=C?.locale||"en-US",tt=l.useMemo(()=>C?.options||{year:"numeric",month:"2-digit",day:"2-digit"},[C]),Me=k||m||"awesome-grid";l.useEffect(()=>{S>100&&ye(!0)},[S]),l.useEffect(()=>{let e=!0;const t=new AbortController;return(async()=>{try{ye(!0);const o=new URLSearchParams({page:String(W),pageSize:String(S)}),a=await fetch(`${m}?${o.toString()}`,{signal:t.signal});if(!a.ok)throw new Error(`Request failed: ${a.status} ${a.statusText}`);const i=await a.json();if(!e)return;const g=(Array.isArray(i?.data)?i.data:[]).map(d=>zr(d)),x=i?.columns||[],v=j.filter(d=>d&&d.key&&typeof d.formula=="function").map(d=>({key:Re(d.key),label:d.label||d.key,formula:d.formula})),u=x.map(d=>{const E=typeof d=="string"?d:d.key;return{key:Re(E),label:d.label||E.replace(/_/g," ").replace(/\b\w/g,F=>F.toUpperCase())}}),R=[...u,...v.filter(d=>!u.some(E=>E.key===d.key)).map(({key:d,label:E})=>({key:d,label:E}))],O=g.map(d=>{const E={...d};return v.forEach(F=>{try{E[F.key]=F.formula(d)}catch(pe){E[F.key]="",console.error(`Failed computed column formula for '${F.key}'`,pe)}}),E});if(Fe(O),We(R),!J.current&&!V.current){const d=R.map(E=>E.key);Z(d),je(d),J.current=!0}}catch(o){if(o?.name==="AbortError")return;console.error("Failed to load grid data",o)}finally{e&&ye(!1)}})(),()=>{e=!1,t.abort()}},[m,W,S,j]),l.useEffect(()=>{if(w.length>0&&G.length===0&&!V.current){const e=w.map(t=>t.key);Z(e),je(e),J.current=!0}},[w,G]),l.useEffect(()=>{if(!w.length)return;const e=w.map(t=>t.key);je(t=>{const o=t.filter(i=>e.includes(i)),a=e.filter(i=>!o.includes(i));return[...o,...a]}),Z(t=>{if(!t.length)return e;const o=t.filter(i=>e.includes(i)),a=e.filter(i=>!o.includes(i));return[...o,...a]})},[w]),l.useEffect(()=>{if(!w.length)return;const e=new Set(w.map(t=>t.key));Q(t=>t.filter(o=>e.has(o)))},[w]),l.useEffect(()=>{const e=()=>U(1);return window.addEventListener("refreshTable",e),()=>window.removeEventListener("refreshTable",e)},[]),l.useEffect(()=>{let e=!1;return K.current=!1,re.current=!1,V.current=!1,(async()=>{try{const t=await Vr(Me);if(e)return;if(t&&typeof t=="object")if(V.current=!0,Array.isArray(t.columnOrder)&&(je(t.columnOrder),J.current=!0),Array.isArray(t.visibleColumns)&&Z(t.visibleColumns),Array.isArray(t.groupByColumns)&&Q(t.groupByColumns),Array.isArray(t.totalColumns)&&(c(t.totalColumns),K.current=!0),t.columnWidthOverrides&&typeof t.columnWidthOverrides=="object"&&Ae(t.columnWidthOverrides),t.selectedTheme==="light"||t.selectedTheme==="dark"||t.selectedTheme==="purple")_(t.selectedTheme);else{const o=String(h||"light").toLowerCase();_(o==="dark"||o==="purple"?o:"light")}else{const o=String(h||"light").toLowerCase();_(o==="dark"||o==="purple"?o:"light")}}catch(t){console.error("Failed to load preferences",t)}finally{e||(re.current=!0)}})(),()=>{e=!0}},[Me,h]),l.useEffect(()=>{if(!re.current)return;Hr(Me,{columnOrder:ee,visibleColumns:G,groupByColumns:A,totalColumns:n,selectedTheme:f,columnWidthOverrides:Te}).catch(t=>{console.error("Failed to save preferences",t)})},[Me,ee,G,A,n,f,Te]);const te=(e,t)=>e[t]??"",ue=l.useCallback(e=>{const t=Number(e);return Number.isNaN(t)?"":new Intl.NumberFormat(Qe,{style:"currency",currency:Ge,maximumFractionDigits:2}).format(t)},[Qe,Ge]),xt=l.useCallback(e=>{const t=new Date(e);return Number.isNaN(t.getTime())?e??"":new Intl.DateTimeFormat(et,tt).formatToParts(t).filter(a=>a.type==="year"||a.type==="month"||a.type==="day").map(a=>a.value).join(B)},[et,tt,B]),Y=l.useCallback(e=>{const t=oe[0]?.[e];return t==null?"text":isNaN(Number(t))?isNaN(Date.parse(t))?"text":"date":"number"},[oe]),rt=e=>{const t=new Date(e);return Number.isNaN(t.getTime())?null:`${t.getFullYear()}-${String(t.getMonth()+1).padStart(2,"0")}-${String(t.getDate()).padStart(2,"0")}`},De=l.useMemo(()=>w.filter(e=>Y(e.key)==="number"),[w,Y]);l.useEffect(()=>{if(!w.length)return;const e=De.map(t=>t.key);if(!e.length){c([]);return}c(t=>{const o=new Set(e);return K.current?t.filter(a=>o.has(a)):(K.current=!0,e)})},[w.length,De]);const Se=(e,t)=>{M(()=>{H(o=>({...o,[e]:{...o[e],...t}})),U(1)})},vt=()=>{M(()=>{H({}),U(1)})},Ue=l.useMemo(()=>oe.filter(e=>Object.entries(ie).every(([t,o])=>{if(!(o?.value!==void 0&&o?.value!==null&&String(o.value).trim()!==""))return!0;const i=te(e,t);if(o.type==="number"){const p=Number(i),g=Number(o.value),x=o.op||"=";return Number.isNaN(p)||Number.isNaN(g)?!0:x==="="?p===g:x===">"?p>g:x==="<"?p<g:x==="!="?p!==g:!0}if(o.type==="date"){const p=rt(i),g=rt(o.value),x=o.op||"=";return!p||!g?!0:x==="="?p===g:x===">"?p>g:x==="<"?p<g:x==="!="?p!==g:!0}return String(i).toLowerCase().includes(String(o.value).toLowerCase())})),[oe,ie]),kt=e=>{M(()=>{ft(t=>({key:e,direction:t.key===e&&t.direction==="asc"?"desc":"asc"}))})},D=l.useMemo(()=>{if(!I.key)return Ue;const e=Y(I.key);return[...Ue].sort((t,o)=>{const a=te(t,I.key),i=te(o,I.key),p=e==="date"?new Date(a).getTime():isNaN(Number(a))?a:Number(a),g=e==="date"?new Date(i).getTime():isNaN(Number(i))?i:Number(i);return p<g?I.direction==="asc"?-1:1:p>g?I.direction==="asc"?1:-1:0})},[Ue,I,Y]),Pe=l.useMemo(()=>{if(!ne)return null;const e={};return w.forEach(t=>{Y(t.key)==="number"&&n.includes(t.key)&&(e[t.key]=D.reduce((o,a)=>o+Number(a[t.key]||0),0))}),e},[ne,D,w,Y,n]),Le=S===q?D.length:Math.min(S,Ee),Ve=S===q?1:Math.ceil(D.length/Le),X=l.useMemo(()=>{if(S===q)return D;const e=(W-1)*Le;return D.slice(e,e+Le)},[D,W,S,Le]),P=A.length>0,$=!P&&S===q&&!_t,jt=e=>{M(()=>{Q(t=>t.includes(e)?t.filter(o=>o!==e):[...t,e]),ae({}),U(1)})},St=e=>{ae(t=>({...t,[e]:!t[e]}))},Nt=e=>{M(()=>{c(t=>t.includes(e)?t.filter(o=>o!==e):[...t,e])})},nt=l.useCallback(e=>{const t={};return n.forEach(o=>{const a=e.map(v=>Number(v[o])).filter(v=>!Number.isNaN(v));if(!a.length)return;const i=a.reduce((v,u)=>v+u,0),p=Math.min(...a),g=Math.max(...a),x=i/a.length;t[o]={count:a.length,sum:i,avg:x,min:p,max:g}}),t},[n]),He=l.useMemo(()=>{if(!P)return[];const e=[],t=D,o=(a,i,p)=>{const g=A[i],x=new Map;a.forEach(v=>{const u=te(v,g),R=u==null||u===""?"(Blank)":String(u);x.has(R)||x.set(R,[]),x.get(R).push(v)}),Array.from(x.entries()).forEach(([v,u],R)=>{const O=`${p}${g}:${v}:${R}`;if(e.push({type:"group",id:O,groupKey:g,groupValue:v,level:i,count:u.length,aggregates:nt(u)}),!se[O]){if(i<A.length-1){o(u,i+1,`${O}|`);return}u.forEach((d,E)=>{const F=d[Re(b)]??d[b]??E;e.push({type:"row",id:`${O}|row:${F}:${E}`,row:d})})}})};return o(t,0,""),e},[P,D,A,se,nt,b]),Ct=l.useCallback(e=>{$&&Je(e.currentTarget.scrollTop)},[$]);l.useLayoutEffect(()=>{if(!$)return;const e=Oe.current;if(!e)return;const t=()=>yt(e.clientHeight||0);return t(),window.addEventListener("resize",t),()=>window.removeEventListener("resize",t)},[$]),l.useEffect(()=>{Je(0),Oe.current&&(Oe.current.scrollTop=0)},[$,D.length]);const de=l.useMemo(()=>{if(!$)return{start:0,end:X.length,rows:X,topSpacer:0,bottomSpacer:0};const e=X.length,t=Math.ceil((Ke||1)/Ie),o=Math.max(0,Math.floor(Xe/Ie)-pt),a=Math.min(e,o+t+pt*2);return{start:o,end:a,rows:X.slice(o,a),topSpacer:o*Ie,bottomSpacer:Math.max(0,(e-a)*Ie)}},[$,X,Xe,Ke]),ot=l.useCallback(e=>Object.entries(e||{}).map(([t,o])=>`${w.find(i=>i.key===t)?.label||t}: Σ ${ue(o.sum)} | Avg ${ue(o.avg)} | Min ${ue(o.min)} | Max ${ue(o.max)}`),[w,ue]),Rt=()=>{try{const e=L.filter(u=>G.includes(u.key)),t=u=>{const O=String(u??"").replace(/"/g,'""');return/[",\n\r]/.test(O)?`"${O}"`:O},o=P?He.map(u=>{if(u.type==="group"){const d=w.find(pe=>pe.key===u.groupKey)?.label||u.groupKey,E=ot(u.aggregates).join(" || "),F={};return e.forEach((pe,it)=>{if(it===0){F[pe.key]=`GROUP ${d}: ${u.groupValue} (${u.count})`;return}F[pe.key]=it===1?E:""}),F}const R={},O=u.row;return e.forEach(d=>{R[d.key]=te(O,d.key)}),R}):D.map(u=>{const R={};return e.forEach(O=>{R[O.key]=te(u,O.key)}),R}),a=e.map(u=>t(u.label)).join(","),i=o.map(u=>e.map(R=>t(u[R.key])).join(",")).join(`\r
|
|
23
|
-
`),
|
|
24
|
-
${i}`,g=new Blob([p],{type:"text/csv;charset=utf-8;"}),x=URL.createObjectURL(g),v=document.createElement("a");v.href=x,v.download="TableData.csv",document.body.appendChild(v),v.click(),document.body.removeChild(v),URL.revokeObjectURL(x)}catch(e){console.error("Failed to export CSV",e)}},st=(e,t)=>{e.dataTransfer.setData("colKey",t)},at=(e,t)=>{const o=e.dataTransfer.getData("colKey");!o||o===t||M(()=>{je(a=>{const i=[...a],p=i.indexOf(o),g=i.indexOf(t);return i.splice(p,1),i.splice(g,0,o),i})})},lt=e=>e.preventDefault(),L=l.useMemo(()=>ee.map(e=>w.find(t=>t.key===e)).filter(e=>e&&G.includes(e.key)),[w,ee,G]),he=l.useMemo(()=>{const a="14px system-ui",i={};return L.forEach(p=>{const g=Ye(p.label,a),x=Math.min(320,Math.max($e,g+32+48));i[p.key]=Math.max($e,Te[p.key]??x)}),i},[L,Te]);l.useEffect(()=>{if(!w.length)return;const e=new Set(w.map(t=>t.key));Ae(t=>{const o={};return Object.entries(t).forEach(([a,i])=>{e.has(a)&&(o[a]=i)}),o})},[w]);const Et=(e,t)=>{if(e.preventDefault(),e.stopPropagation(),e.button!==void 0&&e.button!==0)return;const o=e.clientX,a=he[t]||$e;ce.current={key:t,startX:o,startWidth:a},document.body.style.cursor="col-resize";const i=g=>{if(!ce.current)return;const x=g.clientX-ce.current.startX,v=Math.max($e,ce.current.startWidth+x);Ae(u=>({...u,[ce.current.key]:v}))},p=()=>{ce.current=null,document.body.style.cursor="",window.removeEventListener("pointermove",i),window.removeEventListener("pointerup",p)};window.addEventListener("pointermove",i),window.addEventListener("pointerup",p)},Tt=(e,t)=>{e.preventDefault(),e.stopPropagation(),Ae(o=>{const a={...o};return delete a[t],a})},At=be||gt,Ot=f==="dark"?s.themeDark:f==="purple"?s.themePurple:s.themeLight;return l.useLayoutEffect(()=>{const e=()=>{bt(qe.current?.offsetHeight||0)};return e(),window.addEventListener("resize",e),()=>window.removeEventListener("resize",e)},[L.length]),l.useEffect(()=>{if(typeof window>"u"||typeof window.matchMedia!="function")return;const e=window.matchMedia("(max-width: 767.98px)"),t=o=>Ze(o.matches);return Ze(e.matches),e.addEventListener("change",t),()=>e.removeEventListener("change",t)},[]),r.jsxs("div",{className:T(s.container,Ot),children:[r.jsxs("div",{className:s.headerRow,children:[r.jsxs("div",{className:T(s.flexRow,s.toolbarGroup),children:[r.jsx("label",{className:s.labelMuted,children:"Rows:"}),r.jsx("select",{className:T(s.selectSmall,s.selectAuto),value:S,onChange:e=>M(()=>{ze(Number(e.target.value)),U(1)}),children:_e.map(e=>r.jsx("option",{value:e,children:e===q?"All":e},e))}),r.jsxs("div",{className:s.switchRow,children:[r.jsx("input",{className:s.checkbox,type:"checkbox",checked:ne,onChange:e=>M(()=>we(e.target.checked))}),r.jsx("label",{className:s.labelMuted,children:"Show Totals"})]}),r.jsxs("div",{className:s.groupingSummary,children:[r.jsxs("span",{className:s.labelMuted,children:["Group By:"," ",A.length?A.map(e=>w.find(t=>t.key===e)?.label||e).join(" > "):"None"]}),A.length>0&&r.jsx("button",{className:T(s.buttonBase,s.buttonMuted),onClick:()=>{M(()=>{Q([]),ae({})})},children:"Clear Groups"})]})]}),r.jsxs("div",{className:T(s.flexRow,s.toolbarGroup),children:[r.jsxs("button",{className:T(s.buttonBase,s.buttonDanger),disabled:!Object.values(y).some(e=>e?.value),onClick:vt,children:["✕"," ","Clear Filters"]}),r.jsx(ht,{label:r.jsxs(r.Fragment,{children:["⬇"," Export"]}),children:r.jsx("li",{children:r.jsx("button",{className:s.menuItemButton,onClick:Rt,children:"Export to CSV"})})}),r.jsxs("button",{className:T(s.buttonBase,s.buttonMuted),onClick:()=>ke(!0),children:["☰"," ","Columns"]}),r.jsxs(ht,{label:r.jsxs(r.Fragment,{children:["▣"," Theme"]}),children:[r.jsx("li",{children:r.jsxs("button",{className:s.menuItemButton,onClick:()=>_("light"),children:[f==="light"?"✓ ":"","Light"]})}),r.jsx("li",{children:r.jsxs("button",{className:s.menuItemButton,onClick:()=>_("dark"),children:[f==="dark"?"✓ ":"","Dark"]})}),r.jsx("li",{children:r.jsxs("button",{className:s.menuItemButton,onClick:()=>_("purple"),children:[f==="purple"?"✓ ":"","Purple"]})})]})]})]}),r.jsxs("div",{className:s.relative,children:[r.jsx("div",{className:s.srOnly,"aria-live":"polite",children:be?"Loading table data":"Table updated"}),At&&r.jsx("div",{className:s.overlay,children:r.jsxs("div",{className:s.overlayInner,style:{top:"15%"},children:[r.jsx("div",{className:s.spinner,role:"status"}),r.jsx("div",{className:s.labelMuted,children:be?"Loading data...":"Updating..."})]})}),r.jsx("div",{className:T(s.tableWrap,S===q&&s.tableWrapAll),ref:Oe,style:S===q?{maxHeight:"70vh",overflowY:"auto"}:{},onScroll:Ct,children:r.jsxs("table",{className:s.table,style:{tableLayout:"fixed"},role:"grid","aria-rowcount":P?He.length:X.length,"aria-colcount":L.length,children:[r.jsxs("thead",{className:s.tableHead,children:[r.jsx("tr",{ref:qe,children:L.map(e=>{const t=I.key===e.key,o=t?I.direction==="asc"?"↑":"↓":"⇅";return r.jsxs("th",{scope:"col","aria-sort":t?I.direction==="asc"?"ascending":"descending":"none",draggable:!0,onDragStart:a=>st(a,e.key),onDragOver:lt,onDrop:a=>at(a,e.key),style:{width:he[e.key]},className:s.thCellTop,children:[r.jsx("div",{className:s.thInner,children:r.jsxs("button",{type:"button",className:s.sortButton,"aria-label":`Sort by ${e.label}`,onClick:()=>kt(e.key),children:[e.label,r.jsxs("span",{className:s.iconMuted,children:[" ",o]})]})}),r.jsx("span",{className:s.resizeHandle,role:"separator","aria-orientation":"vertical","aria-label":`Resize ${e.label} column`,tabIndex:0,onPointerDown:a=>Et(a,e.key),onDoubleClick:a=>Tt(a,e.key)})]},e.key)})}),r.jsx("tr",{children:L.map(e=>r.jsx("th",{style:{top:wt},className:s.thCellFilter,children:Y(e.key)==="number"?r.jsxs("div",{className:s.inlineGroup,children:[r.jsxs("select",{className:T(s.selectSmall,s.selectAuto),value:y[e.key]?.op||"=",onChange:t=>Se(e.key,{type:"number",op:t.target.value}),children:[r.jsx("option",{value:"=",children:"="}),r.jsx("option",{value:">",children:">"}),r.jsx("option",{value:"<",children:"<"}),r.jsx("option",{value:"!=",children:"!="})]}),r.jsx("input",{type:"number",className:s.input,value:y[e.key]?.value||"",onChange:t=>Se(e.key,{type:"number",value:t.target.value})})]}):Y(e.key)==="date"?r.jsxs("div",{className:s.inlineGroup,children:[r.jsxs("select",{className:T(s.selectSmall,s.selectAuto),value:y[e.key]?.op||"=",onChange:t=>Se(e.key,{type:"date",op:t.target.value}),children:[r.jsx("option",{value:"=",children:"="}),r.jsx("option",{value:">",children:">"}),r.jsx("option",{value:"<",children:"<"}),r.jsx("option",{value:"!=",children:"!="})]}),r.jsx("input",{type:"date",className:s.input,value:y[e.key]?.value||"",onChange:t=>Se(e.key,{type:"date",value:t.target.value})})]}):r.jsx("input",{type:"text",className:s.input,placeholder:"Filter...",value:y[e.key]?.value||"",onChange:t=>Se(e.key,{type:"text",value:t.target.value})})},e.key))})]}),r.jsxs("tbody",{children:[$&&de.topSpacer>0&&r.jsx("tr",{"aria-hidden":"true",children:r.jsx("td",{colSpan:L.length,style:{height:`${de.topSpacer}px`,padding:0}})}),(P?He:$?de.rows:X).map(e=>{if(P&&e.type==="group"){const o=w.find(p=>p.key===e.groupKey)?.label||e.groupKey,a=!!se[e.id],i=ot(e.aggregates).join(" || ");return r.jsx("tr",{className:T(s.groupRow,s.groupRowAnimated),children:r.jsx("td",{colSpan:L.length,children:r.jsxs("button",{type:"button",className:s.groupToggle,onClick:()=>St(e.id),children:[r.jsxs("span",{style:{paddingLeft:`${e.level*18}px`},children:[a?"▶":"▼"," ",o,": ",e.groupValue," (",e.count,")"]}),i&&r.jsxs("span",{className:s.groupMeta,children:[" ",i]})]})})},e.id)}const t=P?e.row:e;return r.jsx("tr",{className:T(s.rowInteractive,P&&s.groupChildRow),tabIndex:0,children:L.map(o=>{const a=te(t,o.key);return typeof a=="boolean"?r.jsx("td",{"data-label":o.label,style:{width:he[o.key]},children:r.jsx("input",{type:"checkbox",checked:a,disabled:!0,className:s.checkbox})},o.key):Y(o.key)==="date"?r.jsx("td",{"data-label":o.label,style:{width:he[o.key]},children:xt(a)},o.key):r.jsx("td",{"data-label":o.label,style:{width:he[o.key]},children:a},o.key)})},P?e.id:t[Re(b)]??t[b])}),$&&de.bottomSpacer>0&&r.jsx("tr",{"aria-hidden":"true",children:r.jsx("td",{colSpan:L.length,style:{height:`${de.bottomSpacer}px`,padding:0}})})]}),ne&&Pe&&Object.keys(Pe).length>0&&r.jsxs("tfoot",{className:s.tfoot,children:[r.jsx("tr",{children:r.jsx("td",{colSpan:L.length,className:s.textCenter,children:"Totals"})}),r.jsx("tr",{children:L.map(e=>r.jsx("td",{"data-label":e.label,style:{width:he[e.key]},children:Pe[e.key]!==void 0?ue(Pe[e.key]):""},e.key))})]})]})})]}),!P&&S!==q&&Ve>1&&r.jsx("div",{className:s.paginationWrap,children:r.jsxs("ul",{className:s.pagination,children:[r.jsx("li",{children:r.jsx("button",{className:s.pageButton,disabled:W===1,onClick:()=>M(()=>U(e=>e-1)),children:"Prev"})}),Array.from({length:Ve},(e,t)=>r.jsx("li",{children:r.jsx("button",{className:T(s.pageButton,W===t+1&&s.pageButtonActive),onClick:()=>M(()=>U(t+1)),children:t+1})},t)),r.jsx("li",{children:r.jsx("button",{className:s.pageButton,disabled:W===Ve,onClick:()=>M(()=>U(e=>e+1)),children:"Next"})})]})}),!P&&S===q&&r.jsxs("div",{className:s.labelMuted,children:["Showing"," ",($?de.end:X.length).toLocaleString()," of"," ",D.length.toLocaleString()," rows",$?" (virtualized)":""]}),P&&r.jsxs("div",{className:s.labelMuted,children:["Grouped view: ",D.length.toLocaleString()," rows across"," ",A.length," level",A.length>1?"s":""]}),ve&&r.jsxs(r.Fragment,{children:[r.jsx("div",{className:s.backdrop,onClick:()=>ke(!1)}),r.jsxs("div",{className:s.drawer,children:[r.jsx("h6",{className:s.drawerTitle,children:"Column Settings"}),r.jsx("h6",{className:s.drawerSubtitle,children:"Visible Columns"}),ee.map(e=>{const t=w.find(o=>o.key===e);return t?r.jsxs("div",{className:s.drawerRow,draggable:!0,onDragStart:o=>st(o,t.key),onDragOver:lt,onDrop:o=>at(o,t.key),children:[r.jsx("input",{type:"checkbox",className:s.checkbox,checked:G.includes(t.key),onChange:()=>M(()=>Z(o=>o.includes(t.key)?o.filter(a=>a!==t.key):[...o,t.key]))}),r.jsx("label",{children:t.label}),r.jsx("span",{className:T(s.spacerAuto,s.iconMuted),children:"⋮"})]},t.key):null}),r.jsxs("div",{className:s.drawerSection,children:[r.jsxs("button",{type:"button",className:s.sectionToggle,"aria-expanded":z.groupBy,onClick:()=>le(e=>({...e,groupBy:!e.groupBy})),children:[r.jsx("span",{children:"Group By Columns"}),r.jsx("span",{className:s.iconMuted,children:z.groupBy?"▲":"▼"})]}),z.groupBy&&r.jsx("div",{className:s.sectionBody,children:ee.map(e=>{const t=w.find(o=>o.key===e);return t?r.jsxs("div",{className:s.drawerRow,children:[r.jsx("input",{type:"checkbox",className:s.checkbox,checked:A.includes(t.key),onChange:()=>jt(t.key)}),r.jsx("label",{children:t.label})]},`group-${t.key}`):null})})]}),r.jsxs("div",{className:s.drawerSection,children:[r.jsxs("button",{type:"button",className:s.sectionToggle,"aria-expanded":z.aggregates,onClick:()=>le(e=>({...e,aggregates:!e.aggregates})),children:[r.jsx("span",{children:"Show Total/Aggregate For"}),r.jsx("span",{className:s.iconMuted,children:z.aggregates?"▲":"▼"})]}),z.aggregates&&r.jsxs("div",{className:s.sectionBody,children:[De.length===0&&r.jsx("div",{className:s.labelMuted,children:"No numeric columns available."}),ee.map(e=>{const t=De.find(o=>o.key===e);return t?r.jsxs("div",{className:s.drawerRow,children:[r.jsx("input",{type:"checkbox",className:s.checkbox,checked:n.includes(t.key),onChange:()=>Nt(t.key)}),r.jsx("label",{children:t.label})]},`total-${t.key}`):null})]})]})]})]})]})}exports.AwesomeGrid=Yr;
|
|
22
|
+
<%s key={someKey} {...props} />`,_,b,Y,b),le[b+_]=!0)}if(b=null,g!==void 0&&(p(g),b=""+g),C(c)&&(p(c.key),b=""+c.key),"key"in c){g={};for(var ce in c)ce!=="key"&&(g[ce]=c[ce])}else g=c;return b&&L(g,typeof o=="function"?o.displayName||o.name||"Unknown":o),ye(o,b,g,j(),z,ie)}function Z(o){ne(o)?o._store&&(o._store.validated=1):typeof o=="object"&&o!==null&&o.$$typeof===F&&(o._payload.status==="fulfilled"?ne(o._payload.value)&&o._payload.value._store&&(o._payload.value._store.validated=1):o._store&&(o._store.validated=1))}function ne(o){return typeof o=="object"&&o!==null&&o.$$typeof===Te}var H=l,Te=Symbol.for("react.transitional.element"),oe=Symbol.for("react.portal"),we=Symbol.for("react.fragment"),se=Symbol.for("react.strict_mode"),We=Symbol.for("react.profiler"),y=Symbol.for("react.consumer"),Fe=Symbol.for("react.context"),V=Symbol.for("react.forward_ref"),Q=Symbol.for("react.suspense"),be=Symbol.for("react.suspense_list"),_e=Symbol.for("react.memo"),F=Symbol.for("react.lazy"),U=Symbol.for("react.activity"),ve=Symbol.for("react.client.reference"),xe=H.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE,S=Object.prototype.hasOwnProperty,ze=Array.isArray,ke=console.createTask?console.createTask:function(){return null};H={react_stack_bottom_frame:function(o){return o()}};var je,O={},ee=H.react_stack_bottom_frame.bind(H,N)(),ae=ke(k(N)),le={};Re.Fragment=we,Re.jsx=function(o,c,g){var _=1e4>xe.recentlyCreatedOwnerStacks++;return K(o,c,g,!1,_?Error("react-stack-top-frame"):ee,_?ke(k(o)):ae)},Re.jsxs=function(o,c,g){var _=1e4>xe.recentlyCreatedOwnerStacks++;return K(o,c,g,!0,_?Error("react-stack-top-frame"):ee,_?ke(k(o)):ae)}})()),Re}var dt;function zr(){return dt||(dt=1,process.env.NODE_ENV==="production"?Le.exports=Wr():Le.exports=Fr()),Le.exports}var r=zr();const T=(...f)=>f.filter(Boolean).join(" ");function mt({label:f,children:w}){const[p,k]=l.useState(!1),j=l.useRef(null);return l.useEffect(()=>{const N=C=>{j.current&&!j.current.contains(C.target)&&k(!1)};return document.addEventListener("mousedown",N),()=>document.removeEventListener("mousedown",N)},[]),r.jsxs("div",{className:s.dropdown,ref:j,children:[r.jsx("button",{className:T(s.buttonBase,s.buttonPrimary,s.dropdownToggle),type:"button","aria-haspopup":"menu","aria-expanded":p,onClick:()=>k(!p),children:f}),r.jsx("ul",{className:T(s.dropdownMenu,p&&s.dropdownMenuOpen),role:"menu",onClick:()=>k(!1),children:w})]})}const Ye=(f,w="14px system-ui")=>{const k=(Ye.canvas||(Ye.canvas=document.createElement("canvas"))).getContext("2d");return k.font=w,k.measureText(f).width},Ee=f=>f.toLowerCase().replace(/[_\s]+(.)?/g,(w,p)=>p?p.toUpperCase():"").replace(/^(.)/,w=>w.toLowerCase()),Gr=f=>{if(!f||typeof f!="object")return f;const w={};return Object.keys(f).forEach(p=>{w[Ee(p)]=f[p]}),w},J=0,Ie=38,ht=10,Vr=[],$e=80,Ur="awesome-grid",fe="preferences",ft=()=>new Promise((f,w)=>{const p=indexedDB.open(Ur,1);p.onupgradeneeded=()=>{const k=p.result;k.objectStoreNames.contains(fe)||k.createObjectStore(fe)},p.onsuccess=()=>f(p.result),p.onerror=()=>w(p.error)}),Hr=async f=>{if(typeof indexedDB>"u")return null;const w=await ft();return new Promise((p,k)=>{const C=w.transaction(fe,"readonly").objectStore(fe).get(f);C.onsuccess=()=>p(C.result||null),C.onerror=()=>k(C.error)}).finally(()=>w.close())},pt=async(f,w)=>{if(typeof indexedDB>"u")return;const p=await ft();return new Promise((k,j)=>{const L=p.transaction(fe,"readwrite").objectStore(fe).put(w,f);L.onsuccess=()=>k(),L.onerror=()=>j(L.error)}).finally(()=>p.close())};function Yr({apiEndpoint:f,rowKey:w,theme:p="light",storageKey:k,computedColumns:j=Vr,currency:N="INR",dateFormat:C={locale:"en-US",options:{year:"numeric",month:"2-digit",day:"2-digit"}},dateSeparator:L="/",pageSizeOptions:ge=[50,100,500,1e3,0],defaultPageSize:ye}){const K=l.useRef(!1),Z=l.useRef(!1),ne=l.useRef(!1),H=l.useRef(!1),Te=50,[oe,we]=l.useState(!0),[se,We]=l.useState([]),[y,Fe]=l.useState([]),[V,Q]=l.useState([]),[be,_e]=l.useState(!1),[F,U]=l.useState(1),ve=Array.isArray(ge)&&ge.length>0?ge:[50,100,500,1e3,0],xe=ye!==void 0&&ve.includes(ye)?ye:ve[0]||50,[S,ze]=l.useState(xe),[ke,je]=l.useState(!1),[O,ee]=l.useState([]),[ae,le]=l.useState({}),[o,c]=l.useState([]),[g,_]=l.useState(()=>{const e=String(p||"light").toLowerCase();return e==="dark"||e==="purple"?e:"light"}),[z,ie]=l.useState({groupBy:!1,aggregates:!1}),[b,Y]=l.useState({}),ce=l.useDeferredValue(b),[I,gt]=l.useState({key:null,direction:"asc"}),[te,Se]=l.useState([]),[Oe,Ae]=l.useState({}),[yt,M]=l.useTransition(),qe=l.useRef(null),[wt,bt]=l.useState(0),Me=l.useRef(null),[Je,Xe]=l.useState(0),[Ke,_t]=l.useState(0),ue=l.useRef(null),[vt,Ze]=l.useState(()=>typeof window>"u"||typeof window.matchMedia!="function"?!1:window.matchMedia("(max-width: 767.98px)").matches),Ge=String(N||"INR").toUpperCase()==="USD"?"USD":"INR",Qe=Ge==="USD"?"en-US":"en-IN",et=C?.locale||"en-US",tt=l.useMemo(()=>C?.options||{year:"numeric",month:"2-digit",day:"2-digit"},[C]),G=k||f||"awesome-grid";l.useEffect(()=>{S>100&&_e(!0)},[S]),l.useEffect(()=>{let e=!0;const t=new AbortController;return(async()=>{try{_e(!0);const n=new URLSearchParams({page:String(F),pageSize:String(S)}),a=await fetch(`${f}?${n.toString()}`,{signal:t.signal});if(!a.ok)throw new Error(`Request failed: ${a.status} ${a.statusText}`);const i=await a.json();if(!e)return;const d=(Array.isArray(i?.data)?i.data:[]).map(h=>Gr(h)),v=i?.columns||[],x=j.filter(h=>h&&h.key&&typeof h.formula=="function").map(h=>({key:Ee(h.key),label:h.label||h.key,formula:h.formula})),m=v.map(h=>{const E=typeof h=="string"?h:h.key;return{key:Ee(E),label:h.label||E.replace(/_/g," ").replace(/\b\w/g,W=>W.toUpperCase())}}),R=[...m,...x.filter(h=>!m.some(E=>E.key===h.key)).map(({key:h,label:E})=>({key:h,label:E}))],A=d.map(h=>{const E={...h};return x.forEach(W=>{try{E[W.key]=W.formula(h)}catch(pe){E[W.key]="",console.error(`Failed computed column formula for '${W.key}'`,pe)}}),E});if(We(A),Fe(R),!K.current&&!H.current){const h=R.map(E=>E.key);Q(h),Se(h),K.current=!0}}catch(n){if(n?.name==="AbortError")return;console.error("Failed to load grid data",n)}finally{e&&_e(!1)}})(),()=>{e=!1,t.abort()}},[f,F,S,j]),l.useEffect(()=>{if(y.length>0&&V.length===0&&!H.current){const e=y.map(t=>t.key);Q(e),Se(e),K.current=!0}},[y,V]),l.useEffect(()=>{if(!y.length)return;const e=y.map(t=>t.key);Se(t=>{const n=t.filter(i=>e.includes(i)),a=e.filter(i=>!n.includes(i));return[...n,...a]}),Q(t=>{if(!t.length)return e;const n=t.filter(i=>e.includes(i)),a=e.filter(i=>!n.includes(i));return[...n,...a]})},[y]),l.useEffect(()=>{if(!y.length)return;const e=new Set(y.map(t=>t.key));ee(t=>t.filter(n=>e.has(n)))},[y]),l.useEffect(()=>{const e=()=>U(1);return window.addEventListener("refreshTable",e),()=>window.removeEventListener("refreshTable",e)},[]),l.useEffect(()=>{let e=!1;return Z.current=!1,ne.current=!1,H.current=!1,(async()=>{try{let t=await Hr(G);if(!t&&typeof localStorage<"u"){const n={columnOrder:`columnOrder_${G}`,visibleColumns:`visibleColumns_${G}`,groupByColumns:`groupByColumns_${G}`,totalColumns:`totalColumns_${G}`,selectedTheme:`theme_${G}`,columnWidthOverrides:`columnWidths_${G}`},a=Object.fromEntries(Object.entries(n).map(([u,d])=>[u,localStorage.getItem(d)]));if(Object.values(a).some(u=>u!==null)){const u={columnOrder:a.columnOrder?JSON.parse(a.columnOrder):void 0,visibleColumns:a.visibleColumns?JSON.parse(a.visibleColumns):void 0,groupByColumns:a.groupByColumns?JSON.parse(a.groupByColumns):void 0,totalColumns:a.totalColumns?JSON.parse(a.totalColumns):void 0,selectedTheme:a.selectedTheme||void 0,columnWidthOverrides:a.columnWidthOverrides?JSON.parse(a.columnWidthOverrides):void 0};await pt(G,u),t=u,Object.values(n).forEach(d=>localStorage.removeItem(d))}}if(e)return;if(t&&typeof t=="object")if(H.current=!0,Array.isArray(t.columnOrder)&&(Se(t.columnOrder),K.current=!0),Array.isArray(t.visibleColumns)&&Q(t.visibleColumns),Array.isArray(t.groupByColumns)&&ee(t.groupByColumns),Array.isArray(t.totalColumns)&&(c(t.totalColumns),Z.current=!0),t.columnWidthOverrides&&typeof t.columnWidthOverrides=="object"&&Ae(t.columnWidthOverrides),t.selectedTheme==="light"||t.selectedTheme==="dark"||t.selectedTheme==="purple")_(t.selectedTheme);else{const n=String(p||"light").toLowerCase();_(n==="dark"||n==="purple"?n:"light")}else{const n=String(p||"light").toLowerCase();_(n==="dark"||n==="purple"?n:"light")}}catch(t){console.error("Failed to load preferences",t)}finally{e||(ne.current=!0)}})(),()=>{e=!0}},[G,p]),l.useEffect(()=>{if(!ne.current)return;pt(G,{columnOrder:te,visibleColumns:V,groupByColumns:O,totalColumns:o,selectedTheme:g,columnWidthOverrides:Oe}).catch(t=>{console.error("Failed to save preferences",t)})},[G,te,V,O,o,g,Oe]);const re=(e,t)=>e[t]??"",de=l.useCallback(e=>{const t=Number(e);return Number.isNaN(t)?"":new Intl.NumberFormat(Qe,{style:"currency",currency:Ge,maximumFractionDigits:2}).format(t)},[Qe,Ge]),xt=l.useCallback(e=>{const t=new Date(e);return Number.isNaN(t.getTime())?e??"":new Intl.DateTimeFormat(et,tt).formatToParts(t).filter(a=>a.type==="year"||a.type==="month"||a.type==="day").map(a=>a.value).join(L)},[et,tt,L]),q=l.useCallback(e=>{const t=se[0]?.[e];return t==null?"text":isNaN(Number(t))?isNaN(Date.parse(t))?"text":"date":"number"},[se]),rt=e=>{const t=new Date(e);return Number.isNaN(t.getTime())?null:`${t.getFullYear()}-${String(t.getMonth()+1).padStart(2,"0")}-${String(t.getDate()).padStart(2,"0")}`},De=l.useMemo(()=>y.filter(e=>q(e.key)==="number"),[y,q]);l.useEffect(()=>{if(!y.length)return;const e=De.map(t=>t.key);if(!e.length){c([]);return}c(t=>{const n=new Set(e);return Z.current?t.filter(a=>n.has(a)):(Z.current=!0,e)})},[y.length,De]);const Ne=(e,t)=>{M(()=>{Y(n=>({...n,[e]:{...n[e],...t}})),U(1)})},kt=()=>{M(()=>{Y({}),U(1)})},Ve=l.useMemo(()=>se.filter(e=>Object.entries(ce).every(([t,n])=>{if(!(n?.value!==void 0&&n?.value!==null&&String(n.value).trim()!==""))return!0;const i=re(e,t);if(n.type==="number"){const u=Number(i),d=Number(n.value),v=n.op||"=";return Number.isNaN(u)||Number.isNaN(d)?!0:v==="="?u===d:v===">"?u>d:v==="<"?u<d:v==="!="?u!==d:!0}if(n.type==="date"){const u=rt(i),d=rt(n.value),v=n.op||"=";return!u||!d?!0:v==="="?u===d:v===">"?u>d:v==="<"?u<d:v==="!="?u!==d:!0}return String(i).toLowerCase().includes(String(n.value).toLowerCase())})),[se,ce]),jt=e=>{M(()=>{gt(t=>({key:e,direction:t.key===e&&t.direction==="asc"?"desc":"asc"}))})},D=l.useMemo(()=>{if(!I.key)return Ve;const e=q(I.key);return[...Ve].sort((t,n)=>{const a=re(t,I.key),i=re(n,I.key),u=e==="date"?new Date(a).getTime():isNaN(Number(a))?a:Number(a),d=e==="date"?new Date(i).getTime():isNaN(Number(i))?i:Number(i);return u<d?I.direction==="asc"?-1:1:u>d?I.direction==="asc"?1:-1:0})},[Ve,I,q]),Pe=l.useMemo(()=>{if(!oe)return null;const e={};return y.forEach(t=>{q(t.key)==="number"&&o.includes(t.key)&&(e[t.key]=D.reduce((n,a)=>n+Number(a[t.key]||0),0))}),e},[oe,D,y,q,o]),Be=S===J?D.length:Math.min(S,Te),Ue=S===J?1:Math.ceil(D.length/Be),X=l.useMemo(()=>{if(S===J)return D;const e=(F-1)*Be;return D.slice(e,e+Be)},[D,F,S,Be]),P=O.length>0,$=!P&&S===J&&!vt,St=e=>{M(()=>{ee(t=>t.includes(e)?t.filter(n=>n!==e):[...t,e]),le({}),U(1)})},Nt=e=>{le(t=>({...t,[e]:!t[e]}))},Ct=e=>{M(()=>{c(t=>t.includes(e)?t.filter(n=>n!==e):[...t,e])})},nt=l.useCallback(e=>{const t={};return o.forEach(n=>{const a=e.map(x=>Number(x[n])).filter(x=>!Number.isNaN(x));if(!a.length)return;const i=a.reduce((x,m)=>x+m,0),u=Math.min(...a),d=Math.max(...a),v=i/a.length;t[n]={count:a.length,sum:i,avg:v,min:u,max:d}}),t},[o]),He=l.useMemo(()=>{if(!P)return[];const e=[],t=D,n=(a,i,u)=>{const d=O[i],v=new Map;a.forEach(x=>{const m=re(x,d),R=m==null||m===""?"(Blank)":String(m);v.has(R)||v.set(R,[]),v.get(R).push(x)}),Array.from(v.entries()).forEach(([x,m],R)=>{const A=`${u}${d}:${x}:${R}`;if(e.push({type:"group",id:A,groupKey:d,groupValue:x,level:i,count:m.length,aggregates:nt(m)}),!ae[A]){if(i<O.length-1){n(m,i+1,`${A}|`);return}m.forEach((h,E)=>{const W=h[Ee(w)]??h[w]??E;e.push({type:"row",id:`${A}|row:${W}:${E}`,row:h})})}})};return n(t,0,""),e},[P,D,O,ae,nt,w]),Rt=l.useCallback(e=>{$&&Xe(e.currentTarget.scrollTop)},[$]);l.useLayoutEffect(()=>{if(!$)return;const e=Me.current;if(!e)return;const t=()=>_t(e.clientHeight||0);return t(),window.addEventListener("resize",t),()=>window.removeEventListener("resize",t)},[$]),l.useEffect(()=>{Xe(0),Me.current&&(Me.current.scrollTop=0)},[$,D.length]);const me=l.useMemo(()=>{if(!$)return{start:0,end:X.length,rows:X,topSpacer:0,bottomSpacer:0};const e=X.length,t=Math.ceil((Ke||1)/Ie),n=Math.max(0,Math.floor(Je/Ie)-ht),a=Math.min(e,n+t+ht*2);return{start:n,end:a,rows:X.slice(n,a),topSpacer:n*Ie,bottomSpacer:Math.max(0,(e-a)*Ie)}},[$,X,Je,Ke]),ot=l.useCallback(e=>Object.entries(e||{}).map(([t,n])=>`${y.find(i=>i.key===t)?.label||t}: Σ ${de(n.sum)} | Avg ${de(n.avg)} | Min ${de(n.min)} | Max ${de(n.max)}`),[y,de]),Et=()=>{try{const e=B.filter(m=>V.includes(m.key)),t=m=>{const A=String(m??"").replace(/"/g,'""');return/[",\n\r]/.test(A)?`"${A}"`:A},n=P?He.map(m=>{if(m.type==="group"){const h=y.find(pe=>pe.key===m.groupKey)?.label||m.groupKey,E=ot(m.aggregates).join(" || "),W={};return e.forEach((pe,it)=>{if(it===0){W[pe.key]=`GROUP ${h}: ${m.groupValue} (${m.count})`;return}W[pe.key]=it===1?E:""}),W}const R={},A=m.row;return e.forEach(h=>{R[h.key]=re(A,h.key)}),R}):D.map(m=>{const R={};return e.forEach(A=>{R[A.key]=re(m,A.key)}),R}),a=e.map(m=>t(m.label)).join(","),i=n.map(m=>e.map(R=>t(m[R.key])).join(",")).join(`\r
|
|
23
|
+
`),u=`\uFEFF${a}\r
|
|
24
|
+
${i}`,d=new Blob([u],{type:"text/csv;charset=utf-8;"}),v=URL.createObjectURL(d),x=document.createElement("a");x.href=v,x.download="TableData.csv",document.body.appendChild(x),x.click(),document.body.removeChild(x),URL.revokeObjectURL(v)}catch(e){console.error("Failed to export CSV",e)}},st=(e,t)=>{e.dataTransfer.setData("colKey",t)},at=(e,t)=>{const n=e.dataTransfer.getData("colKey");!n||n===t||M(()=>{Se(a=>{const i=[...a],u=i.indexOf(n),d=i.indexOf(t);return i.splice(u,1),i.splice(d,0,n),i})})},lt=e=>e.preventDefault(),B=l.useMemo(()=>te.map(e=>y.find(t=>t.key===e)).filter(e=>e&&V.includes(e.key)),[y,te,V]),he=l.useMemo(()=>{const a="14px system-ui",i={};return B.forEach(u=>{const d=Ye(u.label,a),v=Math.min(320,Math.max($e,d+32+48));i[u.key]=Math.max($e,Oe[u.key]??v)}),i},[B,Oe]);l.useEffect(()=>{if(!y.length)return;const e=new Set(y.map(t=>t.key));Ae(t=>{const n={};return Object.entries(t).forEach(([a,i])=>{e.has(a)&&(n[a]=i)}),n})},[y]);const Tt=(e,t)=>{if(e.preventDefault(),e.stopPropagation(),e.button!==void 0&&e.button!==0)return;const n=e.clientX,a=he[t]||$e;ue.current={key:t,startX:n,startWidth:a},document.body.style.cursor="col-resize";const i=d=>{if(!ue.current)return;const v=d.clientX-ue.current.startX,x=Math.max($e,ue.current.startWidth+v);Ae(m=>({...m,[ue.current.key]:x}))},u=()=>{ue.current=null,document.body.style.cursor="",window.removeEventListener("pointermove",i),window.removeEventListener("pointerup",u)};window.addEventListener("pointermove",i),window.addEventListener("pointerup",u)},Ot=(e,t)=>{e.preventDefault(),e.stopPropagation(),Ae(n=>{const a={...n};return delete a[t],a})},At=be||yt,Mt=g==="dark"?s.themeDark:g==="purple"?s.themePurple:s.themeLight;return l.useLayoutEffect(()=>{const e=()=>{bt(qe.current?.offsetHeight||0)};return e(),window.addEventListener("resize",e),()=>window.removeEventListener("resize",e)},[B.length]),l.useEffect(()=>{if(typeof window>"u"||typeof window.matchMedia!="function")return;const e=window.matchMedia("(max-width: 767.98px)"),t=n=>Ze(n.matches);return Ze(e.matches),e.addEventListener("change",t),()=>e.removeEventListener("change",t)},[]),r.jsxs("div",{className:T(s.container,Mt),children:[r.jsxs("div",{className:s.headerRow,children:[r.jsxs("div",{className:T(s.flexRow,s.toolbarGroup),children:[r.jsx("label",{className:s.labelMuted,children:"Rows:"}),r.jsx("select",{className:T(s.selectSmall,s.selectAuto),value:S,onChange:e=>M(()=>{ze(Number(e.target.value)),U(1)}),children:ve.map(e=>r.jsx("option",{value:e,children:e===J?"All":e},e))}),r.jsxs("div",{className:s.switchRow,children:[r.jsx("input",{className:s.checkbox,type:"checkbox",checked:oe,onChange:e=>M(()=>we(e.target.checked))}),r.jsx("label",{className:s.labelMuted,children:"Show Totals"})]}),r.jsxs("div",{className:s.groupingSummary,children:[r.jsxs("span",{className:s.labelMuted,children:["Group By:"," ",O.length?O.map(e=>y.find(t=>t.key===e)?.label||e).join(" > "):"None"]}),O.length>0&&r.jsx("button",{className:T(s.buttonBase,s.buttonMuted),onClick:()=>{M(()=>{ee([]),le({})})},children:"Clear Groups"})]})]}),r.jsxs("div",{className:T(s.flexRow,s.toolbarGroup),children:[r.jsxs("button",{className:T(s.buttonBase,s.buttonDanger),disabled:!Object.values(b).some(e=>e?.value),onClick:kt,children:["✕"," ","Clear Filters"]}),r.jsx(mt,{label:r.jsxs(r.Fragment,{children:["⬇"," Export"]}),children:r.jsx("li",{children:r.jsx("button",{className:s.menuItemButton,onClick:Et,children:"Export to CSV"})})}),r.jsxs("button",{className:T(s.buttonBase,s.buttonMuted),onClick:()=>je(!0),children:["☰"," ","Columns"]}),r.jsxs(mt,{label:r.jsxs(r.Fragment,{children:["▣"," Theme"]}),children:[r.jsx("li",{children:r.jsxs("button",{className:s.menuItemButton,onClick:()=>_("light"),children:[g==="light"?"✓ ":"","Light"]})}),r.jsx("li",{children:r.jsxs("button",{className:s.menuItemButton,onClick:()=>_("dark"),children:[g==="dark"?"✓ ":"","Dark"]})}),r.jsx("li",{children:r.jsxs("button",{className:s.menuItemButton,onClick:()=>_("purple"),children:[g==="purple"?"✓ ":"","Purple"]})})]})]})]}),r.jsxs("div",{className:s.relative,children:[r.jsx("div",{className:s.srOnly,"aria-live":"polite",children:be?"Loading table data":"Table updated"}),At&&r.jsx("div",{className:s.overlay,children:r.jsxs("div",{className:s.overlayInner,style:{top:"15%"},children:[r.jsx("div",{className:s.spinner,role:"status"}),r.jsx("div",{className:s.labelMuted,children:be?"Loading data...":"Updating..."})]})}),r.jsx("div",{className:T(s.tableWrap,S===J&&s.tableWrapAll),ref:Me,style:S===J?{maxHeight:"70vh",overflowY:"auto"}:{},onScroll:Rt,children:r.jsxs("table",{className:s.table,style:{tableLayout:"fixed"},role:"grid","aria-rowcount":P?He.length:X.length,"aria-colcount":B.length,children:[r.jsxs("thead",{className:s.tableHead,children:[r.jsx("tr",{ref:qe,children:B.map(e=>{const t=I.key===e.key,n=t?I.direction==="asc"?"↑":"↓":"⇅";return r.jsxs("th",{scope:"col","aria-sort":t?I.direction==="asc"?"ascending":"descending":"none",draggable:!0,onDragStart:a=>st(a,e.key),onDragOver:lt,onDrop:a=>at(a,e.key),style:{width:he[e.key]},className:s.thCellTop,children:[r.jsx("div",{className:s.thInner,children:r.jsxs("button",{type:"button",className:s.sortButton,"aria-label":`Sort by ${e.label}`,onClick:()=>jt(e.key),children:[e.label,r.jsxs("span",{className:s.iconMuted,children:[" ",n]})]})}),r.jsx("span",{className:s.resizeHandle,role:"separator","aria-orientation":"vertical","aria-label":`Resize ${e.label} column`,tabIndex:0,onPointerDown:a=>Tt(a,e.key),onDoubleClick:a=>Ot(a,e.key)})]},e.key)})}),r.jsx("tr",{children:B.map(e=>r.jsx("th",{style:{top:wt},className:s.thCellFilter,children:q(e.key)==="number"?r.jsxs("div",{className:s.inlineGroup,children:[r.jsxs("select",{className:T(s.selectSmall,s.selectAuto),value:b[e.key]?.op||"=",onChange:t=>Ne(e.key,{type:"number",op:t.target.value}),children:[r.jsx("option",{value:"=",children:"="}),r.jsx("option",{value:">",children:">"}),r.jsx("option",{value:"<",children:"<"}),r.jsx("option",{value:"!=",children:"!="})]}),r.jsx("input",{type:"number",className:s.input,value:b[e.key]?.value||"",onChange:t=>Ne(e.key,{type:"number",value:t.target.value})})]}):q(e.key)==="date"?r.jsxs("div",{className:s.inlineGroup,children:[r.jsxs("select",{className:T(s.selectSmall,s.selectAuto),value:b[e.key]?.op||"=",onChange:t=>Ne(e.key,{type:"date",op:t.target.value}),children:[r.jsx("option",{value:"=",children:"="}),r.jsx("option",{value:">",children:">"}),r.jsx("option",{value:"<",children:"<"}),r.jsx("option",{value:"!=",children:"!="})]}),r.jsx("input",{type:"date",className:s.input,value:b[e.key]?.value||"",onChange:t=>Ne(e.key,{type:"date",value:t.target.value})})]}):r.jsx("input",{type:"text",className:s.input,placeholder:"Filter...",value:b[e.key]?.value||"",onChange:t=>Ne(e.key,{type:"text",value:t.target.value})})},e.key))})]}),r.jsxs("tbody",{children:[$&&me.topSpacer>0&&r.jsx("tr",{"aria-hidden":"true",children:r.jsx("td",{colSpan:B.length,style:{height:`${me.topSpacer}px`,padding:0}})}),(P?He:$?me.rows:X).map(e=>{if(P&&e.type==="group"){const n=y.find(u=>u.key===e.groupKey)?.label||e.groupKey,a=!!ae[e.id],i=ot(e.aggregates).join(" || ");return r.jsx("tr",{className:T(s.groupRow,s.groupRowAnimated),children:r.jsx("td",{colSpan:B.length,children:r.jsxs("button",{type:"button",className:s.groupToggle,onClick:()=>Nt(e.id),children:[r.jsxs("span",{style:{paddingLeft:`${e.level*18}px`},children:[a?"▶":"▼"," ",n,": ",e.groupValue," (",e.count,")"]}),i&&r.jsxs("span",{className:s.groupMeta,children:[" ",i]})]})})},e.id)}const t=P?e.row:e;return r.jsx("tr",{className:T(s.rowInteractive,P&&s.groupChildRow),tabIndex:0,children:B.map(n=>{const a=re(t,n.key);return typeof a=="boolean"?r.jsx("td",{"data-label":n.label,style:{width:he[n.key]},children:r.jsx("input",{type:"checkbox",checked:a,disabled:!0,className:s.checkbox})},n.key):q(n.key)==="date"?r.jsx("td",{"data-label":n.label,style:{width:he[n.key]},children:xt(a)},n.key):r.jsx("td",{"data-label":n.label,style:{width:he[n.key]},children:a},n.key)})},P?e.id:t[Ee(w)]??t[w])}),$&&me.bottomSpacer>0&&r.jsx("tr",{"aria-hidden":"true",children:r.jsx("td",{colSpan:B.length,style:{height:`${me.bottomSpacer}px`,padding:0}})})]}),oe&&Pe&&Object.keys(Pe).length>0&&r.jsxs("tfoot",{className:s.tfoot,children:[r.jsx("tr",{children:r.jsx("td",{colSpan:B.length,className:s.textCenter,children:"Totals"})}),r.jsx("tr",{children:B.map(e=>r.jsx("td",{"data-label":e.label,style:{width:he[e.key]},children:Pe[e.key]!==void 0?de(Pe[e.key]):""},e.key))})]})]})})]}),!P&&S!==J&&Ue>1&&r.jsx("div",{className:s.paginationWrap,children:r.jsxs("ul",{className:s.pagination,children:[r.jsx("li",{children:r.jsx("button",{className:s.pageButton,disabled:F===1,onClick:()=>M(()=>U(e=>e-1)),children:"Prev"})}),Array.from({length:Ue},(e,t)=>r.jsx("li",{children:r.jsx("button",{className:T(s.pageButton,F===t+1&&s.pageButtonActive),onClick:()=>M(()=>U(t+1)),children:t+1})},t)),r.jsx("li",{children:r.jsx("button",{className:s.pageButton,disabled:F===Ue,onClick:()=>M(()=>U(e=>e+1)),children:"Next"})})]})}),!P&&S===J&&r.jsxs("div",{className:s.labelMuted,children:["Showing"," ",($?me.end:X.length).toLocaleString()," of"," ",D.length.toLocaleString()," rows",$?" (virtualized)":""]}),P&&r.jsxs("div",{className:s.labelMuted,children:["Grouped view: ",D.length.toLocaleString()," rows across"," ",O.length," level",O.length>1?"s":""]}),ke&&r.jsxs(r.Fragment,{children:[r.jsx("div",{className:s.backdrop,onClick:()=>je(!1)}),r.jsxs("div",{className:s.drawer,children:[r.jsx("h6",{className:s.drawerTitle,children:"Column Settings"}),r.jsx("h6",{className:s.drawerSubtitle,children:"Visible Columns"}),te.map(e=>{const t=y.find(n=>n.key===e);return t?r.jsxs("div",{className:s.drawerRow,draggable:!0,onDragStart:n=>st(n,t.key),onDragOver:lt,onDrop:n=>at(n,t.key),children:[r.jsx("input",{type:"checkbox",className:s.checkbox,checked:V.includes(t.key),onChange:()=>M(()=>Q(n=>n.includes(t.key)?n.filter(a=>a!==t.key):[...n,t.key]))}),r.jsx("label",{children:t.label}),r.jsx("span",{className:T(s.spacerAuto,s.iconMuted),children:"⋮"})]},t.key):null}),r.jsxs("div",{className:s.drawerSection,children:[r.jsxs("button",{type:"button",className:s.sectionToggle,"aria-expanded":z.groupBy,onClick:()=>ie(e=>({...e,groupBy:!e.groupBy})),children:[r.jsx("span",{children:"Group By Columns"}),r.jsx("span",{className:s.iconMuted,children:z.groupBy?"▲":"▼"})]}),z.groupBy&&r.jsx("div",{className:s.sectionBody,children:te.map(e=>{const t=y.find(n=>n.key===e);return t?r.jsxs("div",{className:s.drawerRow,children:[r.jsx("input",{type:"checkbox",className:s.checkbox,checked:O.includes(t.key),onChange:()=>St(t.key)}),r.jsx("label",{children:t.label})]},`group-${t.key}`):null})})]}),r.jsxs("div",{className:s.drawerSection,children:[r.jsxs("button",{type:"button",className:s.sectionToggle,"aria-expanded":z.aggregates,onClick:()=>ie(e=>({...e,aggregates:!e.aggregates})),children:[r.jsx("span",{children:"Show Total/Aggregate For"}),r.jsx("span",{className:s.iconMuted,children:z.aggregates?"▲":"▼"})]}),z.aggregates&&r.jsxs("div",{className:s.sectionBody,children:[De.length===0&&r.jsx("div",{className:s.labelMuted,children:"No numeric columns available."}),te.map(e=>{const t=De.find(n=>n.key===e);return t?r.jsxs("div",{className:s.drawerRow,children:[r.jsx("input",{type:"checkbox",className:s.checkbox,checked:o.includes(t.key),onChange:()=>Ct(t.key)}),r.jsx("label",{children:t.label})]},`total-${t.key}`):null})]})]})]})]})]})}exports.AwesomeGrid=Yr;
|