@kanunilabs/datagrid-react 1.0.0

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/LICENSE ADDED
@@ -0,0 +1,55 @@
1
+ KanuniLabs Community License
2
+ Version 1.0
3
+
4
+ Copyright (c) 2024-present KanuniLabs. All rights reserved.
5
+
6
+ This package (the "Software") is made available free of charge, but it is
7
+ proprietary software and is NOT open source. By installing or using the
8
+ Software you agree to these terms.
9
+
10
+ 1. LICENSE GRANT
11
+ KanuniLabs grants you a worldwide, royalty-free, non-exclusive license to:
12
+ (a) install and use the Software as a dependency of your applications,
13
+ including commercial applications; and
14
+ (b) reproduce and distribute the Software solely as an incorporated,
15
+ compiled part of such applications.
16
+
17
+ 2. RESTRICTIONS
18
+ You may NOT:
19
+ (a) modify, adapt, translate, or create derivative works of the Software;
20
+ (b) decompile, disassemble, deobfuscate, or otherwise attempt to derive
21
+ the source code of the Software, except, and only to the extent,
22
+ applicable law expressly permits notwithstanding this limitation;
23
+ (c) distribute, publish, sublicense, sell, rent, or lease the Software on
24
+ its own, or as part of any toolkit, component, library, or product
25
+ that competes with KanuniLabs products;
26
+ (d) remove, obscure, or alter any copyright, trademark, or other
27
+ proprietary notice.
28
+
29
+ 3. OWNERSHIP
30
+ The Software is licensed, not sold. KanuniLabs retains all right, title,
31
+ and interest in and to the Software, including all intellectual property
32
+ rights. No rights are granted except as expressly stated herein.
33
+
34
+ 4. ENTERPRISE FEATURES
35
+ Certain features require a separate paid license
36
+ (@kanunilabs/pivotgrid-react-enterprise). This license grants no right to
37
+ those features.
38
+
39
+ 5. NO WARRANTY
40
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
41
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
42
+ FITNESS FOR A PARTICULAR PURPOSE, AND NONINFRINGEMENT.
43
+
44
+ 6. LIMITATION OF LIABILITY
45
+ IN NO EVENT SHALL KANUNILABS BE LIABLE FOR ANY CLAIM, DAMAGES, OR OTHER
46
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT, OR OTHERWISE, ARISING
47
+ FROM OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
48
+ THE SOFTWARE.
49
+
50
+ 7. TERMINATION
51
+ This license terminates automatically if you breach any term. Upon
52
+ termination you must cease all use and distribution of the Software.
53
+
54
+ For commercial licensing, source access, or other arrangements, contact
55
+ licensing@kanunilabs.com.
package/README.md ADDED
@@ -0,0 +1,246 @@
1
+ <p align="center">
2
+ <a href="https://www.kanunilabs.com"><img src="https://www.kanunilabs.com/logo.png" width="84" alt="KanuniLabs" /></a>
3
+ </p>
4
+
5
+ <h1 align="center">KanuniLabs DataGrid for React</h1>
6
+
7
+ <p align="center">
8
+ A high-performance React data grid with a Web Worker pipeline —<br />
9
+ sort, filter and scroll a million rows without freezing the UI.
10
+ </p>
11
+
12
+ <p align="center">
13
+ <a href="https://www.kanunilabs.com">Website</a> ·
14
+ <a href="https://www.kanunilabs.com/playground/datagrid">Live Demo</a> ·
15
+ <a href="https://www.kanunilabs.com/docs/datagrid">Documentation</a> ·
16
+ <a href="https://www.kanunilabs.com/pricing">Pricing</a> ·
17
+ <a href="https://www.kanunilabs.com/contact">Support</a>
18
+ </p>
19
+
20
+ <p align="center">
21
+ <a href="https://www.npmjs.com/package/@kanunilabs/datagrid-react"><img src="https://img.shields.io/npm/v/%40kanunilabs%2Fdatagrid-react.svg?label=npm" alt="npm version" /></a>
22
+ <img src="https://img.shields.io/badge/TypeScript-included-3178c6.svg" alt="TypeScript types included" />
23
+ <img src="https://img.shields.io/badge/dependencies-react%20only-2ea44f.svg" alt="No runtime dependencies beyond React" />
24
+ <img src="https://img.shields.io/badge/license-Community%20(free)-2ea44f.svg" alt="KanuniLabs Community License" />
25
+ </p>
26
+
27
+ <p align="center">
28
+ <a href="https://www.kanunilabs.com/playground/datagrid">
29
+ <img src="https://www.kanunilabs.com/npm/datagrid-react.png" alt="KanuniLabs DataGrid for React — a million rows with banded headers, filter row, sparklines, pinned rows and column-aligned totals" width="100%" />
30
+ </a>
31
+ </p>
32
+
33
+ <p align="center">
34
+ <a href="https://www.kanunilabs.com/playground/datagrid">Try it live</a> — a million rows in your browser. No signup, no install.
35
+ </p>
36
+
37
+ ## Why KanuniLabs DataGrid?
38
+
39
+ - **Worker-backed pipeline** — above ~20,000 rows, filtering and sorting move off the main thread automatically. Columns are encoded once into typed arrays and transferred (zero-copy); a later sort or filter reuses them instead of re-encoding.
40
+ - **Measured, not claimed** — at **1,000,000 rows** on one machine: numeric sort **90 ms**, text sort **108 ms**, two-column sort **192 ms**, equality filter **19 ms**, free-text search **58 ms**. Reproduce it yourself with the bench in the repo; the [performance notes](https://www.kanunilabs.com/docs/datagrid/performance) explain the technique behind each number.
41
+ - **Row _and_ column virtualization** — only the visible window is in the DOM. A 100,000-row grid keeps ~25 rows mounted; columns scrolled out of view are replaced by a spacer, not rendered.
42
+ - **Local or server-side** — hand it an array and everything runs in the browser, or implement a `DataSource` and filtering, sorting, paging, distinct values and totals all execute on your server while the grid stays the same component. (The server-side model is [Enterprise](#enterprise-edition).)
43
+ - **Pinned columns that cannot drift** — pinned columns are sticky cells inside a *single* scroll container. There is no second table to keep in sync, so the header and body cannot fall out of alignment.
44
+ - **Sorting & filtering** — multi-column sort, a per-column filter row with operator prefixes (`>=100`), and an Excel-style header filter popup with a searchable value list.
45
+ - **Grouping** — group by a column with expand/collapse and counts; drag columns into the group panel to regroup. (Nested grouping, per-group totals and footer column totals are [Enterprise](#enterprise-edition).)
46
+ - **Selection & keyboard** — row selection keyed by row identity, so it survives sorting and filtering. Full WAI-ARIA grid keyboard model: arrows, <kbd>Page↑/↓</kbd>, <kbd>Home</kbd>/<kbd>End</kbd>, <kbd>Space</kbd> to toggle, <kbd>Shift</kbd>+arrows to extend, <kbd>Ctrl</kbd>+<kbd>A</kbd>, <kbd>Ctrl</kbd>+<kbd>C</kbd>.
47
+ - **CSV export & import** — RFC 4180 with a UTF-8 BOM so Excel opens it correctly; import sniffs the delimiter and infers types. (Excel and PDF export are [Enterprise](#enterprise-edition).)
48
+ - **Accessible** — `role="grid"` with `aria-rowindex`/`aria-colindex`, virtual focus via `aria-activedescendant`, live-region announcements, and a single tab stop for the whole header.
49
+ - **TypeScript-first & dependency-free** — complete type definitions; React is the only runtime peer.
50
+
51
+ ## Quick start
52
+
53
+ ```bash
54
+ npm install @kanunilabs/datagrid-react
55
+ ```
56
+
57
+ `@kanunilabs/datagrid-core` (the engine) is installed automatically.
58
+
59
+ ```tsx
60
+ import { DataGrid, type ReactGridColumnDef } from '@kanunilabs/datagrid-react';
61
+ import '@kanunilabs/datagrid-react/styles.css';
62
+
63
+ interface Sale {
64
+ id: number;
65
+ product: string;
66
+ region: string;
67
+ revenue: number;
68
+ }
69
+
70
+ const columns: ReactGridColumnDef<Sale>[] = [
71
+ { field: 'id', headerName: 'ID', dataType: 'number', width: 80, pin: 'left' },
72
+ { field: 'product', headerName: 'Product', width: 220 },
73
+ { field: 'region', headerName: 'Region', width: 140 },
74
+ {
75
+ field: 'revenue',
76
+ headerName: 'Revenue',
77
+ dataType: 'number',
78
+ width: 140,
79
+ valueFormatter: (v) => `$${Number(v).toLocaleString()}`,
80
+ },
81
+ ];
82
+
83
+ export default function App() {
84
+ return (
85
+ <DataGrid<Sale>
86
+ gridId="sales"
87
+ dataSource={rows}
88
+ rowKey="id"
89
+ columns={columns}
90
+ selection={{ mode: 'multiple', checkboxColumn: true }}
91
+ sorting={{ multi: true }}
92
+ filterRow
93
+ headerFilter
94
+ toolbar
95
+ style={{ height: 600 }}
96
+ />
97
+ );
98
+ }
99
+ ```
100
+
101
+ `rowKey` is required: selection, focus and live updates are keyed by row identity, which is what lets them survive sorting and filtering.
102
+
103
+ ## The Web Worker: nothing to configure
104
+
105
+ Filtering and sorting run off the main thread above 20,000 rows. The worker is compiled into the package and started from a Blob URL, so there is no file to copy, no bundler recipe, and nothing to import — Vite, webpack, Next.js and Parcel all just work.
106
+
107
+ Set `worker={{ enabled: false }}` to stay on the main thread entirely, or `worker={{ threshold: 50_000 }}` to change when the offload kicks in.
108
+
109
+ **Strict Content-Security-Policy.** A Blob worker needs `worker-src 'self' blob:`. If your CSP forbids it, either allow it or serve the worker as a file instead:
110
+
111
+ ```tsx
112
+ import workerUrl from '@kanunilabs/datagrid-core/dist/datagrid.worker.js?url';
113
+
114
+ <DataGrid worker={{ url: workerUrl }} /* ... */ />
115
+ ```
116
+
117
+ The same escape hatch is there if you would rather serve the worker from a CDN so it caches separately from your app bundle. `datagrid.worker.js` ships in the package either way.
118
+
119
+ ## Excel export (optional)
120
+
121
+ CSV export needs nothing extra. For `.xlsx`, install the optional peer:
122
+
123
+ ```bash
124
+ npm i exceljs
125
+ ```
126
+
127
+ Without it, CSV export still works and the Excel path reports an actionable error instead of failing at import time.
128
+
129
+ ## Theming
130
+
131
+ Six packaged themes, each in a light and a dark palette at three densities:
132
+
133
+ ```tsx
134
+ <DataGrid theme="quartz" density="compact" dark={isDark} … />
135
+ ```
136
+
137
+ `quartz` (minimal chrome) · `balham` (dense, fully ruled) · `material` (tall, elevated) · `alpine` (airy, framed) · `kanuni` and `kanuni-midnight` (the house themes).
138
+
139
+ **Omit `theme` and nothing changes** — the packaged look is the default, not one of the six. Switching is a class swap on the grid root, so it repaints without re-rendering a cell.
140
+
141
+ A **palette** is a second, independent axis — it changes the colours and leaves the theme's structure alone:
142
+
143
+ ```tsx
144
+ <DataGrid theme="balham" palette="nord" … />
145
+ ```
146
+
147
+ `nord` · `dracula` · `solarized` · `gruvbox` · `catppuccin` · `tokyo-night`, each in light and dark. The two multiply: Balham's dense ruled grid in Nord's arctic blues, or Material's tall airy one in the same blues.
148
+
149
+ `density` moves the whole vertical rhythm together, not just the type: row and header height, cell padding, control sizes, toolbar and pager padding.
150
+
151
+ Every colour, metric, shadow and border the stylesheet draws with is a `--dg-*` custom property, so your own theme is written the same way ours are:
152
+
153
+ ```css
154
+ .my-grid-theme {
155
+ --dg-surface: #fffdf8;
156
+ --dg-primary: #8a6d2f;
157
+ --dg-on-primary: #ffffff; /* what sits ON the accent — set it, don't inherit */
158
+ --dg-cell-border: none; /* a whole shorthand, so a rule can be dropped */
159
+ }
160
+ ```
161
+
162
+ Full token list and the caveats (portalled popups, row height and the virtualizer) are in the [theming guide](https://www.kanunilabs.com/docs/datagrid/theming).
163
+
164
+ ## Enterprise edition
165
+
166
+ Community is a complete grid: a million rows, sorting, filtering, selection,
167
+ pagination, grouping, themes, twelve languages and CSV export. Nothing here is
168
+ a trial and nothing expires.
169
+
170
+ `@kanunilabs/datagrid-react-enterprise` starts where you **change** the data and
171
+ where you **take it out** — editing, range selection and the fill handle,
172
+ server-side data, Excel and PDF export, charts. `EnterpriseDataGrid` is a
173
+ drop-in replacement for `DataGrid`: same props, plus those.
174
+
175
+ ```bash
176
+ # Ships from our private registry; a license includes the credentials.
177
+ npm i @kanunilabs/datagrid-react-enterprise
178
+ ```
179
+
180
+ ```tsx
181
+ import { EnterpriseDataGrid, LicenseManager } from '@kanunilabs/datagrid-react-enterprise';
182
+
183
+ LicenseManager.setLicenseKey('KLAB1....');
184
+
185
+ <EnterpriseDataGrid dataSource={rows} rowKey="id" columns={columns} editing={{ mode: 'cell' }} />
186
+ ```
187
+
188
+ Without a key the grid still runs — watermarked, not crippled — so an
189
+ evaluation or a stale staging key never takes an application down.
190
+
191
+ **One license opens both products**, DataGrid and
192
+ [PivotGrid](https://www.npmjs.com/package/@kanunilabs/pivotgrid-react).
193
+
194
+ - [Enterprise & licensing](https://www.kanunilabs.com/docs/datagrid/enterprise)
195
+ - [Private registry access](https://www.kanunilabs.com/docs/datagrid/registry)
196
+ - [Pricing](https://www.kanunilabs.com/pricing)
197
+
198
+ ## Feature overview
199
+
200
+ | | Community (this package) | Enterprise |
201
+ |---|:---:|:---:|
202
+ | Virtualized rows + columns · 1M rows | ✅ | ✅ |
203
+ | Worker offload + columnar encoding | ✅ | ✅ |
204
+ | Sorting · resize · reorder · pinning · bands | ✅ | ✅ |
205
+ | Filter row · header filter popup · search | ✅ | ✅ |
206
+ | Row/cell selection · checkbox · focused row | ✅ | ✅ |
207
+ | Keyboard navigation + WAI-ARIA grid | ✅ | ✅ |
208
+ | Grouping (one level) + group panel | ✅ | ✅ |
209
+ | Pagination · infinite scroll · toolbar · column chooser | ✅ | ✅ |
210
+ | 6 themes × 6 palettes · dark mode · 12 locales | ✅ | ✅ |
211
+ | 55 events + imperative controller API | ✅ | ✅ |
212
+ | Saved views · tooltips · row numbers · print | ✅ | ✅ |
213
+ | **CSV** export & import | ✅ | ✅ |
214
+ | **Editing** — cell, batch, row, form + validation | — | ✅ |
215
+ | Range selection · fill handle · cut & paste | — | ✅ |
216
+ | Multi-level grouping · group totals · footer totals | — | ✅ |
217
+ | Master-detail · tree data | — | ✅ |
218
+ | **Server-side data** (filter/sort/page/totals remote) | — | ✅ |
219
+ | **Excel** & **PDF** export (styled, paginated) | — | ✅ |
220
+ | Chart panel · sparklines · cross-filter | — | ✅ |
221
+ | Nested filter builder · import wizard | — | ✅ |
222
+ | Side bar · status bar | — | ✅ |
223
+
224
+ Full breakdown, with a link to the guide for each line:
225
+ [Enterprise & licensing](https://www.kanunilabs.com/docs/datagrid/enterprise).
226
+
227
+ ## Documentation
228
+
229
+ - [Getting started](https://www.kanunilabs.com/docs/datagrid)
230
+ - [Installation](https://www.kanunilabs.com/docs/datagrid/installation)
231
+ - [Features](https://www.kanunilabs.com/docs/datagrid/features)
232
+ - [Theming](https://www.kanunilabs.com/docs/datagrid/theming)
233
+ - [Performance](https://www.kanunilabs.com/docs/datagrid/performance)
234
+ - [Live playground](https://www.kanunilabs.com/playground/datagrid)
235
+
236
+ ## Missing a feature? Tell us
237
+
238
+ This grid is actively developed and shaped by the people using it. If something is missing, awkward, or broken, we want to hear about it — feature requests and bug reports go to the same place and get read by the people who write the code:
239
+
240
+ **[Send us your feedback →](https://www.kanunilabs.com/contact)**
241
+
242
+ ## License
243
+
244
+ Free to use under the KanuniLabs Community License (proprietary, source not distributed). See the `LICENSE` file in the package.
245
+
246
+ © KanuniLabs · [kanunilabs.com](https://www.kanunilabs.com)
package/dist/index.cjs ADDED
@@ -0,0 +1,2 @@
1
+ 'use strict';var react=require('react'),datagridCore=require('@kanunilabs/datagrid-core'),reactDom=require('react-dom'),jsxRuntime=require('react/jsx-runtime');var ni=["contentReady","viewportChanged","columnStateChanged","sortChanged","filterChanged","selectionChanged","focusChanged","summariesChanged"];function $n(t){let[e,n]=react.useState(()=>new datagridCore.DataGridController(t));react.useEffect(()=>{if(e.isDisposed()){n(new datagridCore.DataGridController(t));return}return ()=>e.dispose()},[e]);let o=react.useRef(0),l=react.useCallback(I=>{let R=()=>{o.current++,I();},k=ni.map(G=>e.events.on(G,R));return ()=>k.forEach(G=>G())},[e]),i=react.useCallback(()=>o.current,[]);react.useSyncExternalStore(l,i,i);let{dataSource:d,columns:m}=t,b=react.useRef(true);react.useEffect(()=>{if(b.current){b.current=false;return}Array.isArray(d)&&e.setData(d);},[e,d]);let f=react.useRef(true);react.useEffect(()=>{if(f.current){f.current=false;return}e.setColumns(m);},[e,m]);let p=t.pagination?.enabled??false;react.useEffect(()=>{e.setPaginationEnabled(p);},[e,p]);let g=t.rowHeight,y=react.useRef(true);react.useEffect(()=>{if(y.current){y.current=false;return}g!==void 0&&e.setRowHeight(g);},[e,g]);let w=t.grouping?.groupBy??null,v=JSON.stringify(w==null?[]:typeof w=="string"?[w]:w),N=react.useRef(true);return react.useEffect(()=>{if(N.current){N.current=false;return}e.groupBy(JSON.parse(v));},[e,v]),{controller:e,rows:e.getRows(),window:e.getVirtualWindow(),layout:e.getColumnLayout(),sort:e.getSort(),rowHeight:e.getRowHeight(),visibleCount:e.getVisibleCount(),totalCount:e.getTotalCount()}}var tn=0,Wn=5e3;function ri(t){if(t===void 0||t===false)return null;let e=t===true?{}:t;return {always:e.always??false,maxRows:e.maxRows??Wn}}function ai(t,e){return t<=e}function Vn(t,e){let n=ri(e),o=n!==null,l=n?.always??false,i=n?.maxRows??Wn,[d,m]=react.useState(false),b=react.useCallback(()=>m(true),[]),f=react.useCallback(()=>m(false),[]);react.useEffect(()=>{if(!o||l||typeof window>"u"||typeof window.addEventListener!="function")return;let g=()=>{let w=t.getRows().length;if(!ai(w,i)){t.isDebugMode()&&console.warn(`[datagrid] print layout skipped: ${w} rows exceeds maxRows (${i}). Printing the visible rows instead \u2014 use exportPdf() for the whole result.`);return}reactDom.flushSync(()=>m(true));},y=()=>reactDom.flushSync(()=>m(false));return window.addEventListener("beforeprint",g),window.addEventListener("afterprint",y),()=>{window.removeEventListener("beforeprint",g),window.removeEventListener("afterprint",y);}},[o,l,i,t]);let p=l||d;return react.useEffect(()=>{if(!p||typeof document>"u")return;let g=document.documentElement;return tn++,g.classList.add("kanuni-datagrid-printing"),()=>{tn--,tn<=0&&(tn=0,g.classList.remove("kanuni-datagrid-printing"));}},[p]),{active:p,begin:b,end:f}}var nn=new Map,zn=new Set;function cr(t,e){let n=nn.get(t);return n?[...n].filter(o=>o!==e):[]}function Un(t,e,n){let o=react.useRef(null);return react.useEffect(()=>{if(!e)return;let i={controller:t,scroller:()=>n.current};o.current=i;let d=nn.get(e)??new Set;d.add(i),nn.set(e,d);let m=t.events.on("columnStateChanged",()=>{if(zn.has(e))return;let b=cr(e,i);if(b.length===0)return;let f=t.getColumnStates();zn.add(e);try{for(let p of b)p.controller.applyColumnStates(f);}finally{zn.delete(e);}});return ()=>{m(),d.delete(i),d.size===0&&nn.delete(e),o.current=null;}},[t,e,n]),{syncScroll:react.useCallback(i=>{let d=o.current;if(!e||!d)return;let m=cr(e,d);if(m.length!==0)for(let b of m){let f=b.scroller();f&&f.scrollLeft!==i&&(f.scrollLeft=i);}},[e])}}function on(t,e,n){return t==="left"?e:t==="center"?n.left+e:n.left+n.center+e}function pr(t,e){let{start:n,end:o}=e.columns,l=t.centerOffsets,i=l[n]??0,d=(l[o]??0)-i,m=Math.max(0,t.centerWidth-i-d),b=i,f=t.center.slice(n,o),p=Array.from({length:f.length},(w,v)=>n+v),g=t.stickyIndices.filter(w=>w<n);if(g.length>0){let w=g.map(v=>t.center[v]);b-=w.reduce((v,N)=>v+N.state.width,0),f=[...w,...f],p=[...g,...p];}let y=new Map;for(let w of t.stickyIndices){let v=t.centerStickyOffsets[w];v!==null&&y.set(t.center[w].state.id,v);}return {centerColumns:f,centerIndices:p,leadingSpacer:Math.max(0,b),trailingSpacer:m,rowStart:e.rows.start,rowEnd:e.rows.end,stickyInsets:y}}function mr(t){let e=[];for(let n=0;n<t.length;n++){let o=t[n];o&&o.kind!=="data"&&e.push(n);}return e.length>0?e:null}function fr(t,e,n=0){if(!e)return n+t+1;let o=0,l=e.length;for(;o<l;){let i=o+l>>1;e[i]<t?o=i+1:l=i;}return n+t-o+1}var wr=react.createContext(datagridCore.getGridDictionary("en"));function Yn({locale:t,messages:e,children:n}){let o=react.useMemo(()=>datagridCore.getGridDictionary(t,e),[t,e]);return jsxRuntime.jsx(wr.Provider,{value:o,children:n})}function J(){return react.useContext(wr)}function _e(t,e){let n=t;for(let[o,l]of Object.entries(e))n=n.replace(`{${o}}`,String(l));return n}var rn=ht(datagridCore.getGridDictionary("en"));function ht(t){return {sum:t.summarySum,avg:t.summaryAvg,min:t.summaryMin,max:t.summaryMax,count:t.summaryCount,countDistinct:t.summaryDistinct,custom:t.summaryCustom}}function ot(t,e=rn){return t.label??e[t.type]}var fi=new Set(["sum","avg","min","max"]);function rt(t,e,n){if(t.valueFormatter)return t.valueFormatter(e??null);if(e==null)return "\u2014";if(!fi.has(t.type))return e.toLocaleString();if(n?.dataType==="date"){let o=new Date(e);return n.valueFormatter?n.valueFormatter(o,{}):o.toLocaleDateString()}return n?.valueFormatter?n.valueFormatter(e,{}):String(Math.round(e*100)/100)}function qn(t){switch(t){case "number":return ["sum","avg","min","max","count","countDistinct"];case "date":return ["min","max","count","countDistinct"];default:return ["count","countDistinct"]}}var ln=36,sn=28,bt=60,xi=[["rowNumberColumn",bt],["detailColumn",sn],["checkboxColumn",ln]];function Zn(t,e,n=false){return Be({checkboxColumn:t,detailColumn:e,rowNumberColumn:n}).total}function Be(t){let e=new Map,n=new Map,o=0,l=0;for(let[i,d]of xi)t[i]&&(e.set(i,o),n.set(i,++l),o+=d);return {total:o,count:l,inset:i=>e.get(i)??0,colIndex:i=>n.get(i)??1}}function Xn(t){return t?t.kind==="draw"?" kanuni-datagrid-cell--span":" kanuni-datagrid-cell--span-covered":""}function Jn(t,e,n){return t?t.kind==="covered"?e?n():null:jsxRuntime.jsx("div",{className:"kanuni-datagrid-span-box",style:{height:t.height},children:n()}):n()}function jn(t,e){let n=t??(e==="number"?"right":"left");return n==="right"?"kanuni-datagrid-cell kanuni-datagrid-cell--number":n==="center"?"kanuni-datagrid-cell kanuni-datagrid-cell--center":"kanuni-datagrid-cell"}function an(t,e){if(e===""||t==="")return t;let n=t.toLowerCase(),o=n.indexOf(e);if(o===-1)return t;let l=[],i=0,d=0;for(;o!==-1;)o>i&&l.push(t.slice(i,o)),l.push(jsxRuntime.jsx("mark",{className:"kanuni-datagrid-highlight",children:t.slice(o,o+e.length)},d++)),i=o+e.length,o=n.indexOf(e,i);return i<t.length&&l.push(t.slice(i)),l}function vi(t,e,n,o=""){if(t.renderCell)return t.renderCell({value:e,row:n.data,node:n,column:t});let l=datagridCore.lookupLabel(t,e);if(l!==null)return an(l,o);if(t.valueFormatter){let i=t.valueFormatter(e,n.data);return typeof i=="string"?an(i,o):i}return t.dateFormat&&t.dataType==="date"?an(datagridCore.formatDateValue(e,t.dateFormat),o):e==null?"":an(String(e),o)}function Ti({gridId:t,node:e,index:n,layout:o,columnModel:l,centerColumns:i,centerIndices:d,stickyInsets:m,leadingSpacer:b,trailingSpacer:f,striped:p,selected:g,focusedColumnId:y,rowFocused:w=false,renderRow:v,checkboxColumn:N,rowNumberColumn:I=false,rowNumber:R=null,getNote:k,getSpan:G,headerRowCount:L,onRowClick:F,onRowMouseDown:B,onRowDoubleClick:h,onToggleSelect:P,onCellMouseDown:D,onRowContextMenu:Y,searchNeedle:u="",onToggleGroup:T,summaryDefs:H,detailColumn:W=false,detailExpanded:Q=false,onToggleDetail:se,onToggleTreeRow:Ue,renderDetail:ve,renderEditForm:ue,renderCellContent:he,getCellClassName:ye,onCellPointerDown:Te,onCellPointerEnter:Ge,onCellDoubleClick:Me,rowDrag:ne,dropSide:$e=null,height:We}){let re=J();if(datagridCore.isDetailRow(e))return jsxRuntime.jsx("div",{className:"kanuni-datagrid-row kanuni-datagrid-detail-row",role:"row","aria-rowindex":n+1+L,"data-row-key":String(e.key),"data-detail-for":String(e.parentKey),style:{height:e.height},children:jsxRuntime.jsx("div",{className:"kanuni-datagrid-detail-cell",role:"gridcell","aria-colindex":1,children:ve?.(e.data)})});if(datagridCore.isEditFormRow(e))return jsxRuntime.jsx("div",{className:"kanuni-datagrid-row kanuni-datagrid-editform-row",role:"row","aria-rowindex":n+1+L,"data-row-key":String(e.key),"data-editform-for":e.parentKey===null?"":String(e.parentKey),style:{height:e.height},children:jsxRuntime.jsx("div",{className:"kanuni-datagrid-editform-cell",role:"gridcell","aria-colindex":1,children:e.parentKey===null?null:ue?.(e.parentKey,e.data)})});if(datagridCore.isFillerRow(e))return null;if(datagridCore.isGroupRow(e)){let S=l.getDef(e.columnId)?.headerName??e.columnId,U=e.aggregates??null;return jsxRuntime.jsx("div",{className:`kanuni-datagrid-row kanuni-datagrid-group-row kanuni-datagrid-group-row--level-${e.level}${y?" kanuni-datagrid-group-row--focused":""}`,role:"row","aria-rowindex":n+1+L,"aria-expanded":e.expanded,"aria-level":e.level+1,"data-row-key":String(e.key),"data-group-key":String(e.key),"data-group-level":e.level,onClick:()=>T?.(String(e.key)),children:jsxRuntime.jsxs("div",{className:"kanuni-datagrid-group-cell",role:"gridcell","aria-colindex":1,id:`${t}-cell-${String(e.key)}-__group`,style:e.level>0?{paddingLeft:8+e.level*18}:void 0,children:[jsxRuntime.jsx("span",{className:"kanuni-datagrid-group-twisty","aria-hidden":"true",children:e.expanded?"\u25BE":"\u25B8"}),jsxRuntime.jsxs("span",{className:"kanuni-datagrid-group-caption",children:[S,":"]}),jsxRuntime.jsx("span",{className:"kanuni-datagrid-group-label",children:e.label===""?"(Blanks)":e.label}),jsxRuntime.jsxs("span",{className:"kanuni-datagrid-group-count",children:["(",e.count,")"]}),U&&H?.map(_=>jsxRuntime.jsxs("span",{className:"kanuni-datagrid-group-aggregate",children:[jsxRuntime.jsxs("span",{className:"kanuni-datagrid-group-aggregate-label",children:[ot(_)," ",l.getDef(_.columnId)?.headerName??_.columnId,":"]})," ",rt(_,U[datagridCore.summaryKey(_.columnId,_.type)],l.getDef(_.columnId))]},datagridCore.summaryKey(_.columnId,_.type)))]})})}let ce=[],pe=Be({rowNumberColumn:I,detailColumn:W,checkboxColumn:N}),Oe=pe.count,de=(S,U)=>({node:e,columnId:S,rowIndex:n,columnIndex:U,value:l.getCellValue(e.data,S)}),s=(S,U)=>{let _=()=>de(S,U);return {role:"gridcell",id:`${t}-cell-${String(e.key)}-${S}`,"aria-colindex":Oe+U+1,"data-column-id":S,onMouseDown:X=>{D?.(e,S),Te?.(_(),X);},onMouseEnter:Ge?X=>Ge(_(),X):void 0,onDoubleClick:Me?()=>Me(_()):void 0}},C=e.kind==="data"?e.tree:void 0,M=C?(o.left[0]??o.center[0]??o.right[0])?.state.id??null:null,z=(S,U,_)=>{if(he){let r=he(de(U,_));if(r!==void 0)return r}let X=vi(S,l.getCellValue(e.data,U),e,u);return C&&U===M?jsxRuntime.jsxs("span",{className:C.ancestorOnly?"kanuni-datagrid-tree-cell kanuni-datagrid-tree-cell--ancestor":"kanuni-datagrid-tree-cell",style:{paddingInlineStart:C.depth*16},children:[C.hasChildren?jsxRuntime.jsx("button",{type:"button",className:"kanuni-datagrid-tree-toggle","data-tree-toggle":"","aria-expanded":C.expanded,"aria-label":C.expanded?re.collapseDetails:re.expandDetails,onClick:r=>{r.stopPropagation(),Ue?.(e.key);},children:C.expanded?"\u25BE":"\u25B8"}):jsxRuntime.jsx("span",{className:"kanuni-datagrid-tree-toggle kanuni-datagrid-tree-toggle--leaf"}),X]}):X},E=(S,U)=>{if(!ye)return "";let _=ye(de(S,U));return _?` ${_}`:""},oe=S=>!k||e.kind!=="data"?"":k(e.key,S,e.data)?" kanuni-datagrid-cell--noted":"",me=S=>G&&e.kind==="data"?G(n,S):null,ae=(S,U)=>{let _=S.autoHeight?" kanuni-datagrid-cell--wrap":"";return S.cellClassName?_+ke(S,U):_},ke=(S,U)=>{let _=S.cellClassName;if(!_)return "";if(typeof _=="string")return ` ${_}`;let X=e.data,r=_({value:l.getCellValue(X,U),row:X,node:e,column:S});return r?` ${r}`:""};if(I){let S=e.kind==="data"&&R!==null;ce.push(jsxRuntime.jsx("div",{role:"gridcell","aria-colindex":pe.colIndex("rowNumberColumn"),className:"kanuni-datagrid-cell kanuni-datagrid-cell--number kanuni-datagrid-cell--pinned kanuni-datagrid-rownum-cell",style:{width:bt,insetInlineStart:pe.inset("rowNumberColumn")},children:S?R:""},"__rownum"));}W&&ce.push(jsxRuntime.jsx("div",{role:"gridcell","aria-colindex":pe.colIndex("detailColumn"),className:"kanuni-datagrid-cell kanuni-datagrid-cell--center kanuni-datagrid-cell--pinned kanuni-datagrid-detail-toggle-cell",style:{width:sn,insetInlineStart:pe.inset("detailColumn")},children:jsxRuntime.jsx("button",{type:"button",className:"kanuni-datagrid-detail-toggle",tabIndex:-1,"aria-expanded":Q,"aria-label":Q?re.collapseDetails:re.expandDetails,onClick:S=>{S.stopPropagation(),se?.(e.key);},children:Q?"\u25BE":"\u25B8"})},"__detail")),N&&ce.push(jsxRuntime.jsx("div",{role:"gridcell","aria-colindex":pe.colIndex("checkboxColumn"),className:"kanuni-datagrid-cell kanuni-datagrid-cell--center kanuni-datagrid-cell--pinned kanuni-datagrid-select-cell",style:{width:ln,insetInlineStart:pe.inset("checkboxColumn")},onMouseDown:S=>S.stopPropagation(),onClick:S=>{S.target.tagName!=="INPUT"&&(S.stopPropagation(),P?.(e));},children:jsxRuntime.jsx("input",{type:"checkbox",checked:g,tabIndex:-1,"aria-label":_e(re.selectRowAria,{row:String(e.key)}),onChange:()=>P?.(e),onClick:S=>S.stopPropagation(),onMouseDown:S=>S.stopPropagation()})},"__select"));let te=pe.total,A=S=>y===S?" kanuni-datagrid-cell--focused":"",Le={left:o.left.length,center:o.center.length};return o.left.forEach((S,U)=>{let _=S.def,X=U===o.left.length-1,r=S.state.id,le=on("left",U,Le);ce.push(jsxRuntime.jsx("div",{...s(r,le),className:`${jn(_.align,_.dataType)} kanuni-datagrid-cell--pinned${X?" kanuni-datagrid-pin-edge-left":""}${A(r)}${ae(_,r)}${E(r,le)}${oe(r)}${Xn(me(r))}`,style:{width:S.state.width,insetInlineStart:o.leftOffsets[U]+te},children:Jn(me(r),y===r,()=>z(_,r,le))},r));}),b>0&&ce.push(jsxRuntime.jsx("div",{className:"kanuni-datagrid-spacer",style:{width:b}},"__lead")),i.forEach((S,U)=>{let _=S.def,X=S.state.id,r=on("center",d?.[U]??U,Le),le=m?.get(X),kt=le===void 0?"":" kanuni-datagrid-cell--pinned kanuni-datagrid-cell--sticky";ce.push(jsxRuntime.jsx("div",{...s(X,r),className:`${jn(_.align,_.dataType)}${kt}${A(X)}${ae(_,X)}${E(X,r)}${oe(X)}${Xn(me(X))}`,style:le===void 0?{width:S.state.width}:{width:S.state.width,insetInlineStart:le+te},children:Jn(me(X),y===X,()=>z(_,X,r))},X));}),f>0&&ce.push(jsxRuntime.jsx("div",{className:"kanuni-datagrid-spacer",style:{width:f}},"__trail")),o.right.forEach((S,U)=>{let _=S.def,X=U===0,r=S.state.id,le=on("right",U,Le);ce.push(jsxRuntime.jsx("div",{...s(r,le),className:`${jn(_.align,_.dataType)} kanuni-datagrid-cell--pinned${X?" kanuni-datagrid-pin-edge-right":""}${A(r)}${ae(_,r)}${E(r,le)}${oe(r)}${Xn(me(r))}`,style:{width:S.state.width,insetInlineEnd:o.rightOffsets[U]},children:Jn(me(r),y===r,()=>z(_,r,le))},r));}),jsxRuntime.jsxs("div",{className:`kanuni-datagrid-row${p&&n%2===1?" kanuni-datagrid-row--odd":""}${g?" kanuni-datagrid-row--selected":""}${w?" kanuni-datagrid-row--focused":""}${$e?` kanuni-datagrid-row--drop-${$e}`:""}`,role:"row","aria-rowindex":n+1+L,"aria-selected":g,"data-row-key":String(e.key),style:We===void 0?void 0:{height:We},draggable:ne?.draggable?true:void 0,onDragStart:ne?S=>ne.onDragStart(e,S):void 0,onDragEnd:ne?()=>ne.onDragEnd():void 0,onDragOver:ne?S=>ne.onDragOver(e,S):void 0,onDrop:ne?S=>ne.onDrop(e,S):void 0,onMouseDown:B?S=>B(e,S):void 0,onClick:F?S=>F(e,n,S):void 0,onDoubleClick:h?S=>h(e,n,S):void 0,onContextMenu:Y?S=>Y(e,n,S):void 0,children:[ne&&jsxRuntime.jsx("span",{className:"kanuni-datagrid-row-grip","data-testid":"dg-row-grip","aria-hidden":"true",title:re.dragToReorder,onMouseEnter:()=>ne.setDraggable(true),onMouseLeave:()=>ne.setDraggable(false),children:jsxRuntime.jsx("svg",{width:"10",height:"14",viewBox:"0 0 10 14",focusable:"false",children:jsxRuntime.jsxs("g",{fill:"currentColor",children:[jsxRuntime.jsx("circle",{cx:"3",cy:"3",r:"1.2"}),jsxRuntime.jsx("circle",{cx:"7",cy:"3",r:"1.2"}),jsxRuntime.jsx("circle",{cx:"3",cy:"7",r:"1.2"}),jsxRuntime.jsx("circle",{cx:"7",cy:"7",r:"1.2"}),jsxRuntime.jsx("circle",{cx:"3",cy:"11",r:"1.2"}),jsxRuntime.jsx("circle",{cx:"7",cy:"11",r:"1.2"})]})})}),v?v({row:e.data,node:e,rowIndex:n,selected:g,focused:w}):ce]})}var Mt=react.memo(Ti);var yt=26;function Qn(t,e){return datagridCore.computeHeaderBands(t,e)}function eo(t,e=""){return `kanuni-datagrid-band-cell${t.spacer?" kanuni-datagrid-band-cell--spacer":""}${e}`}function to(t,e){let n=jsxRuntime.jsx("span",{className:"kanuni-datagrid-band-label",children:t.label});if(!e||t.spacer||t.columnIds.length===0)return n;let o=e.pathOf(t.columnIds[0]).slice(0,t.level+1);if(o.length!==t.level+1||!e.collapsible(o))return n;let l=e.collapsed(o);return jsxRuntime.jsxs(jsxRuntime.Fragment,{children:[jsxRuntime.jsx("button",{type:"button",className:"kanuni-datagrid-band-toggle","aria-expanded":!l,"aria-label":l?e.labels.expand:e.labels.collapse,title:l?e.labels.expand:e.labels.collapse,onClick:i=>{i.stopPropagation(),e.onToggle(o);},children:l?"\u25B8":"\u25BE"}),n]})}function Gi({layout:t,centerColumns:e,leadingSpacer:n,trailingSpacer:o,depth:l,checkboxColumn:i=false,detailColumn:d=false,rowNumberColumn:m=false,rowHeight:b=yt,bandFold:f}){if(l<=0)return null;let p=Be({rowNumberColumn:m,detailColumn:d,checkboxColumn:i}).total,g=Qn(t.left,l),y=Qn(e,l),w=Qn(t.right,l),v=(N,I,R)=>{let k=R;for(let G=0;G<I;G++)k+=N[G].width;return k};return jsxRuntime.jsx(jsxRuntime.Fragment,{children:Array.from({length:l},(N,I)=>jsxRuntime.jsxs("div",{className:"kanuni-datagrid-band-row",role:"row","aria-rowindex":I+1,style:{width:t.totalWidth+p,height:b,top:I*b},children:[p>0&&jsxRuntime.jsx("div",{className:"kanuni-datagrid-band-cell kanuni-datagrid-band-cell--spacer kanuni-datagrid-band-cell--pinned",style:{width:p,insetInlineStart:0},"aria-hidden":"true"}),(g[I]??[]).map((R,k)=>jsxRuntime.jsx("div",{className:eo(R,` kanuni-datagrid-band-cell--pinned${k===(g[I]?.length??0)-1?" kanuni-datagrid-pin-edge-left":""}`),role:R.spacer?"presentation":"columnheader","aria-colspan":R.spacer?void 0:R.columnIds.length,style:{width:R.width,insetInlineStart:v(g[I]??[],k,p)},title:R.spacer?void 0:R.label,children:to(R,f)},R.columnIds[0])),n>0&&jsxRuntime.jsx("div",{className:"kanuni-datagrid-spacer",style:{width:n}}),(y[I]??[]).map(R=>jsxRuntime.jsx("div",{className:eo(R),role:R.spacer?"presentation":"columnheader","aria-colspan":R.spacer?void 0:R.columnIds.length,style:{width:R.width},title:R.spacer?void 0:R.label,children:to(R,f)},R.columnIds[0])),o>0&&jsxRuntime.jsx("div",{className:"kanuni-datagrid-spacer",style:{width:o}}),(w[I]??[]).map((R,k)=>{let G=w[I]??[],L=0;for(let F=k+1;F<G.length;F++)L+=G[F].width;return jsxRuntime.jsx("div",{className:eo(R,` kanuni-datagrid-band-cell--pinned${k===0?" kanuni-datagrid-pin-edge-right":""}`),role:R.spacer?"presentation":"columnheader","aria-colspan":R.spacer?void 0:R.columnIds.length,style:{width:R.width,insetInlineEnd:L},title:R.spacer?void 0:R.label,children:to(R,f)},R.columnIds[0])})]},I))})}var no=react.memo(Gi);var Ei=()=>jsxRuntime.jsx("svg",{width:"11",height:"11",viewBox:"0 0 16 16","aria-hidden":"true",focusable:"false",children:jsxRuntime.jsx("path",{d:"M1.5 2.5h13L9.5 8.6v4.3l-3 1.6V8.6L1.5 2.5Z",fill:"currentColor",stroke:"currentColor",strokeWidth:"0.6",strokeLinejoin:"round"})});function Ni(t,e){return t.renderHeader?t.renderHeader({column:t}):t.headerName??t.field??e}function Pi({bandOffset:t=0,stickyInsets:e,layout:n,centerColumns:o,leadingSpacer:l,trailingSpacer:i,sort:d,sortable:m,onSort:b,headerFilter:f=false,filteredColumns:p,onOpenFilter:g,filterIconMode:y="hover",checkboxColumn:w=false,detailColumn:v=false,rowNumberColumn:N=false,rowNumberHeader:I="#",selectAllState:R="none",onToggleSelectAll:k,draggable:G=false,reorderable:L=false,onReorder:F,resizable:B=false,onResize:h,onAutoFit:P,onHeaderContextMenu:D}){let Y=J(),u=Be({rowNumberColumn:N,detailColumn:v,checkboxColumn:w}),T=new Map(d.map((s,C)=>[s.columnId,{direction:s.direction,order:C}])),H=new Set(p??[]),W=[...n.left.map(s=>s.state.id),...o.map(s=>s.state.id),...n.right.map(s=>s.state.id)],[Q,se]=react.useState(null),Ue=Q&&W.includes(Q)?Q:W[0],ve=s=>{se(s),document.querySelector(`[data-column-id="${s}"].kanuni-datagrid-header-cell`)?.focus();},ue=s=>{let C=W.indexOf(Ue),M=Math.min(W.length-1,Math.max(0,C+s));M!==C&&ve(W[M]);},he=react.useRef(null),ye=react.useRef(false),[Te,Ge]=react.useState(null),Me=W,ne=s=>[...n.left,...n.center,...n.right].find(C=>C.state.id===s)?.state.pinned??null,$e=(s,C)=>(ye.current?s>C.left+C.width/2:s<C.left+C.width/2)?"before":"after",We=(s,C)=>{let M=he.current;if(!L||!M||M===s||ne(M)!==ne(s))return;C.preventDefault(),C.dataTransfer.dropEffect="move";let z=$e(C.clientX,C.currentTarget.getBoundingClientRect());Ge(E=>E?.id===s&&E.side===z?E:{id:s,side:z});},re=(s,C)=>{let M=he.current;if(Ge(null),!L||!M||M===s||ne(M)!==ne(s))return;if(C.preventDefault(),C.stopPropagation(),$e(C.clientX,C.currentTarget.getBoundingClientRect())==="before")F?.(M,s);else {let E=Me[Me.indexOf(s)+1];F?.(M,E===M?Me[Me.indexOf(s)+2]:E);}he.current=null;},[ce,pe]=react.useState(null),Oe=(s,C)=>{if(!B)return;C.preventDefault(),C.stopPropagation();let M=C.currentTarget,z=C.clientX,E=s.state.width,oe=ye.current?-1:1,me=s.state.id;pe(me),M.setPointerCapture(C.pointerId);let ae=E,ke=false,te=Le=>{ke=true,ae=E+(Le.clientX-z)*oe,h?.(me,ae,false);},A=()=>{M.releasePointerCapture?.(C.pointerId),M.removeEventListener("pointermove",te),M.removeEventListener("pointerup",A),M.removeEventListener("pointercancel",A),ke&&h?.(me,ae,true),pe(null);};M.addEventListener("pointermove",te),M.addEventListener("pointerup",A),M.addEventListener("pointercancel",A);},de=(s,C,M)=>{let z=s.def,E=s.state.id,oe=m&&z.sortable!==false,me=f&&z.filterable!==false,ae=T.get(E),ke=G&&z.groupable!==false||L&&z.reorderable!==false,te=Te?.id===E?Te.side:null;return jsxRuntime.jsxs("div",{className:`kanuni-datagrid-header-cell${C}${oe?" kanuni-datagrid-header-cell--sortable":""}${te?` kanuni-datagrid-header-cell--drop-${te}`:""}${ce===E?" kanuni-datagrid-header-cell--resizing":""}`,style:M,role:"columnheader","aria-sort":ae?ae.direction==="asc"?"ascending":"descending":"none","data-column-id":E,tabIndex:E===Ue?0:-1,onFocus:()=>se(E),draggable:ke&&ce===null,onDragStart:A=>{A.dataTransfer.setData("text/x-kanuni-column",E),A.dataTransfer.effectAllowed="move",he.current=E,ye.current=getComputedStyle(A.currentTarget).direction==="rtl";},onDragEnd:()=>{he.current=null,Ge(null);},onDragOver:L?A=>We(E,A):void 0,onDragLeave:L?()=>Ge(A=>A?.id===E?null:A):void 0,onDrop:L?A=>re(E,A):void 0,onContextMenu:D?A=>D(E,A):void 0,onClick:oe?A=>b(E,A.shiftKey):void 0,onKeyDown:A=>{A.key==="ArrowRight"?(A.preventDefault(),ue(1)):A.key==="ArrowLeft"?(A.preventDefault(),ue(-1)):A.key==="Home"?(A.preventDefault(),ve(W[0])):A.key==="End"?(A.preventDefault(),ve(W[W.length-1])):me&&A.altKey&&A.key==="ArrowDown"?(A.preventDefault(),g?.(E,A.currentTarget)):oe&&(A.key==="Enter"||A.key===" ")&&(A.preventDefault(),b(E,A.shiftKey));},children:[jsxRuntime.jsx("span",{className:"kanuni-datagrid-header-label",children:Ni(z,E)}),ae&&jsxRuntime.jsx("span",{className:"kanuni-datagrid-sort-indicator","aria-hidden":"true",children:ae.direction==="asc"?"\u25B2":"\u25BC"}),ae&&d.length>1&&jsxRuntime.jsx("span",{className:"kanuni-datagrid-sort-order","aria-hidden":"true",children:ae.order+1}),f&&z.filterable!==false&&jsxRuntime.jsx("button",{type:"button",className:`kanuni-datagrid-filter-button${H.has(E)?" kanuni-datagrid-filter-button--active":""}${y==="always"?" kanuni-datagrid-filter-button--pinned":""}`,"aria-label":_e(Y.filterColumnAria,{column:z.headerName??E}),"aria-haspopup":"dialog","data-filter-button":E,tabIndex:-1,onClick:A=>{A.stopPropagation(),g?.(E,A.currentTarget);},children:jsxRuntime.jsx(Ei,{})}),B&&z.resizable!==false&&jsxRuntime.jsx("span",{className:"kanuni-datagrid-resize-handle","data-resize-handle":E,role:"presentation",onPointerDown:A=>Oe(s,A),onDoubleClick:A=>{A.stopPropagation(),P?.(E);},onClick:A=>A.stopPropagation()})]},E)};return jsxRuntime.jsxs("div",{className:"kanuni-datagrid-header",role:"row","aria-rowindex":Math.round(t/yt)+1,style:{width:n.totalWidth+u.total,top:t||void 0},children:[N&&jsxRuntime.jsx("div",{className:"kanuni-datagrid-header-cell kanuni-datagrid-header-cell--pinned kanuni-datagrid-rownum-cell",role:"columnheader","aria-colindex":u.colIndex("rowNumberColumn"),"aria-label":Y.rowNumberAria,style:{width:bt,insetInlineStart:u.inset("rowNumberColumn")},children:I??""}),v&&jsxRuntime.jsx("div",{className:"kanuni-datagrid-header-cell kanuni-datagrid-header-cell--pinned kanuni-datagrid-detail-toggle-cell",role:"columnheader","aria-colindex":u.colIndex("detailColumn"),"aria-label":Y.detailsAria,style:{width:sn,insetInlineStart:u.inset("detailColumn")}}),w&&jsxRuntime.jsx("div",{className:"kanuni-datagrid-header-cell kanuni-datagrid-header-cell--pinned kanuni-datagrid-select-cell",role:"columnheader","aria-colindex":u.colIndex("checkboxColumn"),style:{width:ln,insetInlineStart:u.inset("checkboxColumn")},children:jsxRuntime.jsx("input",{type:"checkbox",checked:R==="all",ref:s=>{s&&(s.indeterminate=R==="some");},"aria-label":Y.selectAllRows,onChange:()=>k?.()})}),n.left.map((s,C)=>de(s,` kanuni-datagrid-header-cell--pinned${C===n.left.length-1?" kanuni-datagrid-pin-edge-left":""}`,{width:s.state.width,insetInlineStart:n.leftOffsets[C]+u.total})),l>0&&jsxRuntime.jsx("div",{className:"kanuni-datagrid-spacer",style:{width:l}}),o.map(s=>{let C=e?.get(s.state.id);return C===void 0?de(s,"",{width:s.state.width}):de(s," kanuni-datagrid-header-cell--pinned kanuni-datagrid-cell--sticky",{width:s.state.width,insetInlineStart:C+u.total})}),i>0&&jsxRuntime.jsx("div",{className:"kanuni-datagrid-spacer",style:{width:i}}),n.right.map((s,C)=>de(s,` kanuni-datagrid-header-cell--pinned${C===0?" kanuni-datagrid-pin-edge-right":""}`,{width:s.state.width,insetInlineEnd:n.rightOffsets[C]}))]})}var ro=react.memo(Pi);var Li=[">=","<=","<>",">","<","="];function dn(t,e,n){let o=e.trim();if(o==="")return null;for(let l of Li)if(o.startsWith(l)){let i=o.slice(l.length).trim();if(i==="")return null;let d=n==="number"?Number(i):Number.NaN;return {columnId:t,operator:l,value:Number.isNaN(d)?i:d}}if(n==="number"){let l=Number(o);return Number.isNaN(l)?{columnId:t,operator:"contains",value:o}:{columnId:t,operator:"=",value:l}}if(n==="boolean"){let l=o.toLowerCase();return l==="true"||l==="false"?{columnId:t,operator:"=",value:l==="true"}:{columnId:t,operator:"contains",value:o}}return n==="date"?{columnId:t,operator:"contains",value:o}:{columnId:t,operator:"contains",value:o}}function ao(t,e,n){if(!e||datagridCore.isFilterGroup(e))return null;let o=e.value;if(o==null||typeof o=="object")return null;let l=e.operator==="contains"||e.operator==="="&&n!==void 0?String(o):`${e.operator}${String(o)}`,i=dn(t,l,n);return !i||datagridCore.isFilterGroup(i)||i.operator!==e.operator||i.value!==o?null:l}function io(t,e,n=[]){let o=null,l=new Set,i=d=>{if(l.has(d)||(l.add(d),e.isPending(d)))return;let m=e.textFor(d);if(m===null)return;let b=t[d]??"";b!==m&&(b===""&&m===""||(o??={...t},o[d]=m));};for(let d of Object.keys(t))i(d);for(let d of n)i(d);return o??t}function Ii({bandOffset:t=0,stickyInsets:e,layout:n,centerColumns:o,leadingSpacer:l,trailingSpacer:i,values:d,checkboxColumn:m=false,detailColumn:b=false,rowNumberColumn:f=false,placeholder:p,onChange:g,onCommit:y}){let w=J(),v=Be({rowNumberColumn:f,detailColumn:b,checkboxColumn:m}),N=p??w.filterPlaceholder,I=(R,k,G)=>{let L=R.state.id,F=R.def.filterable!==false;return jsxRuntime.jsx("div",{className:`kanuni-datagrid-filter-cell${k}`,style:G,"data-column-id":L,children:F&&jsxRuntime.jsx("input",{className:"kanuni-datagrid-filter-input",type:"text",value:d[L]??"",placeholder:N,"aria-label":_e(w.filterColumnAria,{column:R.def.headerName??L}),"data-filter-for":L,onChange:B=>g(L,B.target.value),onKeyDown:B=>{B.key==="Enter"&&y?.(L,B.target.value);},onBlur:B=>y?.(L,B.target.value)})},L)};return jsxRuntime.jsxs("div",{className:"kanuni-datagrid-filter-row",role:"row","aria-rowindex":2,style:{width:n.totalWidth+v.total,"--dg-band-offset":`${t}px`},children:[v.total>0&&jsxRuntime.jsx("div",{className:"kanuni-datagrid-filter-cell kanuni-datagrid-filter-cell--pinned",style:{width:v.total,insetInlineStart:0}}),n.left.map((R,k)=>I(R,` kanuni-datagrid-filter-cell--pinned${k===n.left.length-1?" kanuni-datagrid-pin-edge-left":""}`,{width:R.state.width,insetInlineStart:n.leftOffsets[k]+v.total})),l>0&&jsxRuntime.jsx("div",{className:"kanuni-datagrid-spacer",style:{width:l}}),o.map(R=>{let k=e?.get(R.state.id);return k===void 0?I(R,"",{width:R.state.width}):I(R," kanuni-datagrid-filter-cell--pinned kanuni-datagrid-cell--sticky",{width:R.state.width,insetInlineStart:k+v.total})}),i>0&&jsxRuntime.jsx("div",{className:"kanuni-datagrid-spacer",style:{width:i}}),n.right.map((R,k)=>I(R,` kanuni-datagrid-filter-cell--pinned${k===0?" kanuni-datagrid-pin-edge-right":""}`,{width:R.state.width,insetInlineEnd:n.rightOffsets[k]}))]})}var lo=react.memo(Ii);var so={compact:24,normal:28,comfortable:36},Ai=["quartz","balham","material","alpine","kanuni","kanuni-midnight"],uo={quartz:{compact:26,normal:36,comfortable:44},balham:{compact:20,normal:25,comfortable:32},material:{compact:32,normal:40,comfortable:52},alpine:{compact:26,normal:34,comfortable:42},kanuni:{compact:24,normal:32,comfortable:40},"kanuni-midnight":{compact:24,normal:32,comfortable:40}},Oi=["nord","dracula","solarized","gruvbox","catppuccin","tokyo-night"];function It(t,e,n){let o="";return t&&(o+=` kanuni-datagrid-theme-${t}`),n&&(o+=` kanuni-datagrid-palette-${n}`),e&&(o+=` kanuni-datagrid-density-${e}`),o}var vr=react.createContext("");function co({theme:t,density:e,palette:n,children:o}){let l=react.useMemo(()=>It(t,e,n),[t,e,n]);return jsxRuntime.jsx(vr.Provider,{value:l,children:o})}function po(){return react.useContext(vr)}function He({children:t,dark:e=false}){let[n,o]=react.useState(null),l=po();return react.useEffect(()=>{let i=document.createElement("div");return i.className=`kanuni-datagrid-root kanuni-datagrid-portal${e?" kanuni-datagrid-dark":""}${l}`,document.body.appendChild(i),o(i),()=>{i.remove();}},[e,l]),n?reactDom.createPortal(t,n):null}function Ht({anchor:t,onClose:e,margin:n=8,autoFocus:o=false}){let l=react.useRef(null),[i,d]=react.useState(t),m=react.useCallback(b=>{if(l.current=b,!b)return;let f=b.getBoundingClientRect(),p=t.top+f.height+n>window.innerHeight,g=t.top-f.height-n*2,y=p&&g>n?g:t.top;d({left:Math.max(n,Math.min(t.left,window.innerWidth-f.width-n)),top:Math.max(n,Math.min(y,window.innerHeight-f.height-n))}),o&&b.focus();},[t.left,t.top,n,o]);return react.useEffect(()=>{let b=g=>{let y=l.current;y&&!y.contains(g.target)&&e();},f=g=>{g.key==="Escape"&&e();},p=g=>{let y=l.current,w=g.target;y&&w instanceof Node&&y.contains(w)||e();};return document.addEventListener("mousedown",b),document.addEventListener("keydown",f),window.addEventListener("scroll",p,true),()=>{document.removeEventListener("mousedown",b),document.removeEventListener("keydown",f),window.removeEventListener("scroll",p,true);}},[e]),{position:i,ref:m,elementRef:l}}var pn=25,At=new Map,Tr=200,Ji=200,kr=8;function ji(t){let e=J();return react.useMemo(()=>({search:e.search,selectAll:e.filterSelectAll,clear:e.clear,apply:e.apply,cancel:e.cancel,blank:e.filterBlank,noMatch:e.filterNoMatch,loading:e.filterLoading,truncated:e.filterTruncated,...t}),[e,t])}var Zi=react.memo(function({label:e,display:n,index:o,active:l,checked:i,onToggle:d,onFocus:m}){return jsxRuntime.jsxs("div",{role:"option","aria-selected":i,tabIndex:0,className:`kanuni-datagrid-filter-item${l?" kanuni-datagrid-filter-item--active":""}`,"data-value":e,"data-index":o,onFocus:()=>m(o),onClick:()=>d(e),children:[jsxRuntime.jsx("input",{type:"checkbox",readOnly:true,checked:i,tabIndex:-1}),jsxRuntime.jsx("span",{children:n})]})});function go({gridId:t,columnId:e,headerLabel:n,entries:o,initialSelected:l,anchor:i,loading:d=false,dark:m,onApply:b,onClose:f,truncated:p=false,onSearch:g,labels:y}){let w=ji(y),[v,N]=react.useState(""),[I,R]=react.useState(0),[k,G]=react.useState(()=>new Set(l??o.map(s=>s.label))),[L,F]=react.useState(false),B=react.useRef(null),h=react.useRef(null),[P,D]=react.useState(0),[Y,u]=react.useState(240),T=`${t??""}:${e}`,H=At.get(T),W=react.useRef(H?.scrollTop??null),[Q,se]=react.useState(H&&H.width&&H.height?{width:H.width,height:H.height}:null),Ue=react.useCallback(s=>{B.current=s,s?.focus();},[]),ve=react.useRef(null),ue=react.useMemo(()=>{let s=v.trim().toLowerCase();if(!s||p)return o;let C=ve.current;(!C||C.entries!==o)&&(C={entries:o,lowered:o.map(z=>z.label.toLowerCase()),needle:"",result:[]},ve.current=C);let M=C.needle!==""&&s.includes(C.needle)?C.result.filter(z=>z.label.toLowerCase().includes(s)):o.filter((z,E)=>C.lowered[E].includes(s));return C.needle=s,C.result=M,M},[o,v,p]);react.useEffect(()=>{if(!g)return;let s=setTimeout(()=>g(v),150);return ()=>clearTimeout(s)},[v,g]),react.useEffect(()=>{L||l||G(new Set(o.map(s=>s.label)));},[o,L,l]);let he=react.useCallback(s=>{h.current=s,s&&u(s.clientHeight||240);},[]);react.useEffect(()=>{let s=h.current;!s||W.current===null||d||s.scrollHeight<=s.clientHeight||(s.scrollTop=W.current,W.current=null,D(s.scrollTop));});let ye=react.useMemo(()=>{let s=ue.length,C=Math.max(0,Math.floor(P/pn)-kr),M=Math.ceil(Y/pn)+kr*2,z=Math.min(C,Math.max(0,s-1)),E=Math.min(s,z+M);return {start:z,end:E,count:s,rows:ue.slice(z,E)}},[ue,P,Y]),Te=Ht({anchor:i,onClose:f}),[Ge,Me]=react.useState(null),ne=(Ge??Te.position.left)+(Q?.width??260)+48<window.innerWidth?"right":"left",$e=s=>{s.preventDefault(),s.stopPropagation();let C=Te.elementRef.current;if(!C)return;let M=C.getBoundingClientRect(),z=ne,E={x:s.clientX,y:s.clientY,w:M.width,h:M.height,left:M.left},oe=null,me=ke=>{let te=ke.clientX-E.x,A=ke.clientY-E.y,Le=window.innerHeight-M.top-12,S=Math.min(Le,Math.max(Ji,E.h+A));if(z==="right"){let U=window.innerWidth-E.left-12;oe={width:Math.min(U,Math.max(Tr,E.w+te)),height:S},se(oe);}else {let U=E.left+E.w,_=U-12,X=Math.min(_,Math.max(Tr,E.w-te));oe={width:X,height:S},se(oe),Me(U-X);}h.current&&u(h.current.clientHeight);},ae=()=>{if(window.removeEventListener("pointermove",me),window.removeEventListener("pointerup",ae),oe){let ke=At.get(T);At.set(T,{scrollTop:ke?.scrollTop??h.current?.scrollTop??0,width:Math.round(oe.width),height:Math.round(oe.height)});}};window.addEventListener("pointermove",me),window.addEventListener("pointerup",ae);},We=react.useCallback(s=>{F(true),G(C=>{let M=new Set(C);return M.has(s)?M.delete(s):M.add(s),M});},[]),re=react.useCallback(s=>R(s),[]),ce=()=>{if(d)return;if(k.size===o.length){b(null);return}let s=o.filter(E=>k.has(E.label)),C=s.some(E=>E.value===null||E.value===void 0),M=s.filter(E=>E.value!==null&&E.value!==void 0),z;M.length===0?z={columnId:e,operator:"isnull"}:C?z={logic:"or",nodes:[{columnId:e,operator:"in",value:M.map(E=>E.value)},{columnId:e,operator:"isnull"}]}:z={columnId:e,operator:"in",value:M.map(E=>E.value)},b(z);},pe=s=>{let C=Math.max(0,Math.min(ue.length-1,s));R(C);let M=Te.elementRef.current?.querySelector(`.kanuni-datagrid-filter-item[data-index="${C}"]`);M?.focus(),M?.scrollIntoView({block:"nearest"});},Oe=s=>s.key.length===1&&!s.ctrlKey&&!s.metaKey&&!s.altKey,de=s=>{let C=s.target===B.current;if(s.key==="Backspace"&&!C){s.preventDefault(),B.current?.focus(),N(M=>M.slice(0,-1)),R(0);return}if(s.key==="ArrowDown"){s.preventDefault(),pe(C?0:I+1);return}if(s.key==="ArrowUp"){s.preventDefault(),pe(C?ue.length-1:I-1);return}if(!C&&(s.key==="Home"||s.key==="End")){s.preventDefault(),pe(s.key==="Home"?0:ue.length-1);return}if(s.key===" "&&!C){s.preventDefault();let M=ue[I];M&&We(M.label);return}if(s.key==="Enter"){s.preventDefault(),ce();return}!C&&Oe(s)&&s.key!==" "&&(s.preventDefault(),B.current?.focus(),N(M=>M+s.key),R(0));};return jsxRuntime.jsx(He,{dark:m,children:jsxRuntime.jsxs("div",{ref:Te.ref,className:"kanuni-datagrid-filter-popup",style:{left:Ge??Te.position.left,top:Te.position.top,...Q?{width:Q.width,height:Q.height,maxHeight:"none"}:null},role:"dialog","aria-label":`${n} filter`,onKeyDown:de,children:[jsxRuntime.jsx("div",{className:`kanuni-datagrid-popup-resize kanuni-datagrid-popup-resize--${ne}`,"data-testid":"dg-filter-resize",onPointerDown:$e}),jsxRuntime.jsx("input",{ref:Ue,className:"kanuni-datagrid-filter-search",type:"search",placeholder:w.search,value:v,onChange:s=>{N(s.target.value),R(0);},"data-testid":"dg-filter-search"}),p&&jsxRuntime.jsx("p",{className:"kanuni-datagrid-filter-truncated","data-testid":"dg-filter-truncated",children:w.truncated}),jsxRuntime.jsxs("div",{className:"kanuni-datagrid-filter-actions",children:[jsxRuntime.jsx("button",{type:"button",onClick:()=>{F(true),G(new Set(o.map(s=>s.label)));},children:w.selectAll}),jsxRuntime.jsx("button",{type:"button",onClick:()=>{F(true),G(new Set);},children:w.clear})]}),jsxRuntime.jsxs("div",{ref:he,className:"kanuni-datagrid-filter-list",role:"listbox","aria-multiselectable":"true","aria-busy":d||void 0,"aria-setsize":ue.length,onScroll:s=>{let C=s.target.scrollTop;D(C),W.current=null;let M=At.get(T);At.set(T,{...M,scrollTop:C});},children:[d&&jsxRuntime.jsx("div",{className:"kanuni-datagrid-filter-empty",children:w.loading}),!d&&ue.length===0&&jsxRuntime.jsx("div",{className:"kanuni-datagrid-filter-empty",children:w.noMatch}),ye.count>0&&jsxRuntime.jsx("div",{style:{height:ue.length*pn,position:"relative"},children:jsxRuntime.jsx("div",{style:{transform:`translateY(${ye.start*pn}px)`},children:ye.rows.map((s,C)=>{let M=ye.start+C;return jsxRuntime.jsx(Zi,{label:s.label,display:s.label===""?w.blank:s.label,index:M,active:M===I,checked:k.has(s.label),onToggle:We,onFocus:re},s.label)})})})]}),jsxRuntime.jsxs("div",{className:"kanuni-datagrid-filter-footer",children:[jsxRuntime.jsx("button",{type:"button",onClick:f,children:w.cancel}),jsxRuntime.jsx("button",{type:"button",className:"kanuni-datagrid-filter-primary",onClick:ce,disabled:d,"data-testid":"dg-filter-apply",children:w.apply})]})]})})}var wo="text/x-kanuni-column";function tl({columns:t,levels:e,onSetLevels:n,maxLevels:o=1,onExpandAll:l,onCollapseAll:i,emptyText:d}){let m=J(),b=d??m.groupPanelHint,[f,p]=react.useState(false),g=react.useRef(null),[y,w]=react.useState(null),v=h=>t.find(D=>D.state.id===h)?.def.headerName??h,N=h=>{if(!h||e.includes(h))return;let P=e.length>=o?e.slice(0,o-1):[...e];n([...P,h]);},I=h=>n(e.filter(P=>P!==h)),R=(h,P)=>{let D=e.filter(u=>u!==h),Y=Math.max(0,Math.min(D.length,P));n([...D.slice(0,Y),h,...D.slice(Y)]);},k=(h,P)=>{let D=h+P;D<0||D>=e.length||R(e[h],D);},G=(h,P)=>h<P.top+P.height/2?"before":"after",L=(h,P)=>{P.preventDefault(),P.stopPropagation();let D=G(P.clientY,P.currentTarget.getBoundingClientRect());w(null),p(false);let Y=g.current;if(g.current=null,Y){R(Y,D==="before"?h:h+1);return}let u=P.dataTransfer.getData(wo);if(!u||e.includes(u))return;if(e.length>=o){N(u);return}let T=D==="before"?h:h+1;n([...e.slice(0,T),u,...e.slice(T)]);},F=(h,P,D)=>{let Y=D.ctrlKey||D.metaKey;Y&&(D.key==="ArrowUp"||D.key==="ArrowLeft")?(D.preventDefault(),k(h,-1)):Y&&(D.key==="ArrowDown"||D.key==="ArrowRight")?(D.preventDefault(),k(h,1)):(D.key==="Delete"||D.key==="Backspace")&&(D.preventDefault(),I(P));},B=t.filter(h=>!e.includes(h.state.id));return jsxRuntime.jsxs("div",{className:`kanuni-datagrid-group-panel${f?" kanuni-datagrid-group-panel--over":""}`,onDragOver:h=>{h.preventDefault(),p(true);},onDragLeave:()=>p(false),onDrop:h=>{if(h.preventDefault(),p(false),w(null),g.current){g.current=null;return}N(h.dataTransfer.getData(wo));},children:[e.length>0?jsxRuntime.jsx("div",{className:"kanuni-datagrid-group-levels",children:e.map((h,P)=>jsxRuntime.jsx("div",{className:`kanuni-datagrid-group-level${y?.index===P?` kanuni-datagrid-group-level--drop-${y.side}`:""}`,style:{"--dg-group-level":P},"data-group-level":P,onDragOver:D=>{D.preventDefault(),D.stopPropagation();let Y=G(D.clientY,D.currentTarget.getBoundingClientRect());w(u=>u?.index===P&&u.side===Y?u:{index:P,side:Y});},onDragLeave:()=>w(D=>D?.index===P?null:D),onDrop:D=>L(P,D),children:jsxRuntime.jsxs("span",{className:"kanuni-datagrid-group-chip",draggable:o>1&&e.length>1,tabIndex:0,role:"button","aria-label":`${_e(m.groupLevelAria,{n:P+1})}: ${v(h)}`,onDragStart:D=>{g.current=h,D.dataTransfer.effectAllowed="move",D.dataTransfer.setData(wo,h);},onDragEnd:()=>{g.current=null,w(null);},onKeyDown:D=>F(P,h,D),children:[o>1&&jsxRuntime.jsx("span",{className:"kanuni-datagrid-group-chip-level",children:P+1}),v(h),jsxRuntime.jsx("button",{type:"button","aria-label":_e(m.groupRemoveAria,{column:v(h)}),onClick:()=>I(h),children:"\xD7"})]})},h))}):jsxRuntime.jsx("span",{className:"kanuni-datagrid-group-panel-hint",children:b}),jsxRuntime.jsxs("div",{className:"kanuni-datagrid-group-panel-actions",children:[e.length>0&&jsxRuntime.jsxs(jsxRuntime.Fragment,{children:[jsxRuntime.jsx("button",{type:"button",onClick:l,children:"Expand all"}),jsxRuntime.jsx("button",{type:"button",onClick:i,children:"Collapse all"})]}),jsxRuntime.jsxs("label",{className:"kanuni-datagrid-group-select",children:[jsxRuntime.jsx("span",{className:"kanuni-datagrid-sr-only",children:o>1?m.groupAddLevel:m.groupByColumn}),o>1?jsxRuntime.jsxs("select",{value:"",disabled:B.length===0,onChange:h=>N(h.target.value),children:[jsxRuntime.jsx("option",{value:"",children:m.groupAddLevelButton}),B.map(h=>jsxRuntime.jsx("option",{value:h.state.id,children:h.def.headerName??h.state.id},h.state.id))]}):jsxRuntime.jsxs("select",{value:e[0]??"",onChange:h=>n(h.target.value?[h.target.value]:[]),children:[jsxRuntime.jsx("option",{value:"",children:m.groupNoGrouping}),t.map(h=>jsxRuntime.jsx("option",{value:h.state.id,children:h.def.headerName??h.state.id},h.state.id))]})]})]})]})}var ho=react.memo(tl);function al({layout:t,centerColumns:e,leadingSpacer:n,trailingSpacer:o,defs:l,values:i,checkboxColumn:d=false,detailColumn:m=false,rowNumberColumn:b=false,onPickSummary:f,emptyHint:p="",position:g="bottom",bandOffset:y=0,headerRowsBetween:w=0}){let v=J(),N=ht(v),I=new Map(l.map(G=>[G.columnId,G])),R=Be({rowNumberColumn:b,detailColumn:m,checkboxColumn:d}).total,k=(G,L,F)=>{let B=G.state.id,h=I.get(B),P=h?i[datagridCore.summaryKey(h.columnId,h.type)]:void 0,D=G.def.dataType==="number";return jsxRuntime.jsx("div",{className:`kanuni-datagrid-footer-cell${L}${D?" kanuni-datagrid-footer-cell--number":""}${h?" kanuni-datagrid-footer-cell--active":""}`,style:F,role:"gridcell","data-column-id":B,"data-summary-type":h?.type??"",title:h?`${ot(h,N)} \u2014 ${G.def.headerName??B}`:void 0,onContextMenu:f?Y=>f(B,Y):void 0,onClick:f?Y=>f(B,Y):void 0,children:h?jsxRuntime.jsx("span",{className:"kanuni-datagrid-footer-value",children:rt(h,P,G.def)}):jsxRuntime.jsx("span",{className:"kanuni-datagrid-footer-hint",children:p})},B)};return jsxRuntime.jsxs("div",{className:`kanuni-datagrid-footer-row kanuni-datagrid-footer-row--${g}`,role:"row","aria-label":v.columnTotalsAria,style:{width:t.totalWidth+R,"--dg-band-offset":`${y}px`,"--dg-pinned-gap":String(w)},children:[R>0&&jsxRuntime.jsx("div",{className:"kanuni-datagrid-footer-cell kanuni-datagrid-footer-cell--pinned",style:{width:R,insetInlineStart:0}}),t.left.map((G,L)=>k(G,` kanuni-datagrid-footer-cell--pinned${L===t.left.length-1?" kanuni-datagrid-pin-edge-left":""}`,{width:G.state.width,insetInlineStart:t.leftOffsets[L]+R})),n>0&&jsxRuntime.jsx("div",{className:"kanuni-datagrid-spacer",style:{width:n}}),e.map(G=>k(G,"",{width:G.state.width})),o>0&&jsxRuntime.jsx("div",{className:"kanuni-datagrid-spacer",style:{width:o}}),t.right.map((G,L)=>k(G,` kanuni-datagrid-footer-cell--pinned${L===0?" kanuni-datagrid-pin-edge-right":""}`,{width:G.state.width,insetInlineEnd:t.rightOffsets[L]}))]})}var mn=react.memo(al);function sl(t,e){return `__dg_pinned_${t}_${e}`}function dl({gridId:t,side:e,rows:n,layout:o,columnModel:l,centerColumns:i,centerIndices:d,stickyInsets:m,leadingSpacer:b,trailingSpacer:f,checkboxColumn:p=false,detailColumn:g=false,rowNumberColumn:y=false,rowHeight:w,bandOffset:v=0,headerRowsBetween:N,ariaRowBase:I}){return n.length===0?null:jsxRuntime.jsx("div",{className:`kanuni-datagrid-pinned-rows kanuni-datagrid-pinned-rows--${e}`,role:"rowgroup",style:{width:o.totalWidth||"100%","--dg-band-offset":`${v}px`,"--dg-pinned-gap":String(N)},children:n.map((R,k)=>{let G={kind:"data",key:sl(e,k),sourceIndex:-1,data:R};return jsxRuntime.jsx(Mt,{gridId:t,node:G,index:k,layout:o,columnModel:l,centerColumns:i,centerIndices:d,stickyInsets:m,leadingSpacer:b,trailingSpacer:f,striped:false,selected:false,focusedColumnId:null,checkboxColumn:p,detailColumn:g,rowNumberColumn:y,rowNumber:null,headerRowCount:I,height:w},G.key)})})}var fn=react.memo(dl);async function Ft(t,e){try{let n=e==="csv"?await t.exportToCsv():e==="excel"?await t.exportToExcel():e==="excel-selected"?await t.exportToExcel({selectedOnly:!0}):await t.exportToPdf();return datagridCore.downloadBlob(n.blob,n.fileName),{completed:!0}}catch(n){return n instanceof datagridCore.ExportAbortedError?{completed:false}:{completed:false,error:n instanceof Error?n.message:String(n)}}}function it({anchor:t,onClose:e,children:n,dark:o,className:l="",label:i,role:d="dialog"}){let m=Ht({anchor:t,onClose:e});return jsxRuntime.jsx(He,{dark:o,children:jsxRuntime.jsx("div",{ref:m.ref,className:`kanuni-datagrid-filter-popup ${l}`.trim(),style:{left:m.position.left,top:m.position.top},role:d,"aria-label":i,children:n})})}function fl(t){let e=J();return react.useMemo(()=>({search:e.toolbarSearch,csv:e.exportCsv,excel:e.exportExcel,excelSelected:e.exportExcelSelected,pdf:e.exportPdf,columns:e.columns,exporting:e.exporting,exportMenu:e.exportMenu,...t}),[e,t])}var gl=()=>jsxRuntime.jsx("svg",{width:"14",height:"14",viewBox:"0 0 16 16","aria-hidden":"true",focusable:"false",children:jsxRuntime.jsx("path",{d:"M8 1v8m0 0L5 6m3 3 3-3M2 11v2a2 2 0 0 0 2 2h8a2 2 0 0 0 2-2v-2",fill:"none",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round",strokeLinejoin:"round"})});function wl({controller:t,search:e=true,exportCsv:n=true,exportExcel:o=false,exportPdf:l=false,columnChooser:i=true,dark:d,onOpenColumnChooser:m,itemsBefore:b,itemsAfter:f,searchDebounce:p=200,labels:g}){let y=fl(g),[w,v]=react.useState(t.getSearchText()),[N,I]=react.useState(null),[R,k]=react.useState(null),[G,L]=react.useState(null);react.useEffect(()=>{let P=setTimeout(()=>t.setSearchText(w),p);return ()=>clearTimeout(P)},[t,w,p]);let[F,B]=react.useState(()=>t.getSelectedCount());react.useEffect(()=>(B(t.getSelectedCount()),t.events.on("selectionChanged",()=>B(t.getSelectedCount()))),[t]);let h=async P=>{I(P),L(null);let D=await Ft(t,P);D.error?L(D.error):k(null),I(null);};return jsxRuntime.jsxs("div",{className:"kanuni-datagrid-toolbar",children:[b,e&&jsxRuntime.jsx("input",{type:"search",className:"kanuni-datagrid-toolbar-search",placeholder:y.search,value:w,"aria-label":y.search,"data-testid":"dg-toolbar-search",onChange:P=>v(P.target.value)}),jsxRuntime.jsx("div",{className:"kanuni-datagrid-toolbar-spacer"}),i&&jsxRuntime.jsx("button",{type:"button","aria-haspopup":"dialog","data-testid":"dg-column-chooser",onClick:P=>{let D=P.currentTarget.getBoundingClientRect();m?.({left:D.left,top:D.bottom+2});},children:y.columns}),(n||o||l)&&jsxRuntime.jsx("button",{type:"button",className:"kanuni-datagrid-toolbar-icon-button","aria-haspopup":"menu","aria-label":y.exportMenu,title:y.exportMenu,disabled:N!==null,"data-testid":"dg-export-menu",onClick:P=>{let D=P.currentTarget.getBoundingClientRect();k(R?null:{left:D.right-190,top:D.bottom+2});},children:N?jsxRuntime.jsx("span",{className:"kanuni-datagrid-toolbar-busy"}):jsxRuntime.jsx(gl,{})}),R&&jsxRuntime.jsxs(it,{anchor:R,onClose:()=>k(null),dark:d,role:"menu",label:y.exportMenu,className:"kanuni-datagrid-export-menu",children:[n&&jsxRuntime.jsx("button",{type:"button",role:"menuitem",className:"kanuni-datagrid-menu-item",disabled:N!==null,"data-testid":"dg-export-csv",onClick:()=>h("csv"),children:N==="csv"?y.exporting:y.csv}),o&&jsxRuntime.jsx("button",{type:"button",role:"menuitem",className:"kanuni-datagrid-menu-item",disabled:N!==null,"data-testid":"dg-export-excel",onClick:()=>h("excel"),children:N==="excel"?y.exporting:y.excel}),o&&jsxRuntime.jsx("button",{type:"button",role:"menuitem",className:"kanuni-datagrid-menu-item",disabled:N!==null||F===0,"data-testid":"dg-export-excel-selected",onClick:()=>h("excel-selected"),children:N==="excel-selected"?y.exporting:y.excelSelected}),l&&jsxRuntime.jsx("button",{type:"button",role:"menuitem",className:"kanuni-datagrid-menu-item",disabled:N!==null,"data-testid":"dg-export-pdf",onClick:()=>h("pdf"),children:N==="pdf"?y.exporting:y.pdf})]}),f,G&&jsxRuntime.jsx("span",{className:"kanuni-datagrid-toolbar-error",role:"alert",children:G})]})}var bo=react.memo(wl);function bl(t){let e=J();return react.useMemo(()=>({title:e.hiddenColumns,empty:e.noHiddenColumns,showAll:e.showAll,ok:e.ok,...t}),[e,t])}function yo({controller:t,columns:e,anchor:n,onClose:o,dark:l,labels:i}){let d=bl(i),m=e.filter(b=>!b.visible);return jsxRuntime.jsxs(it,{anchor:n,onClose:o,dark:l,label:d.title,className:"kanuni-datagrid-column-chooser",children:[jsxRuntime.jsxs("div",{className:"kanuni-datagrid-filter-list",children:[m.length===0&&jsxRuntime.jsx("div",{className:"kanuni-datagrid-chooser-empty",children:d.empty}),m.map(b=>{let f=t.getColumnModel().getDef(b.id);return jsxRuntime.jsxs("label",{className:"kanuni-datagrid-filter-item",children:[jsxRuntime.jsx("input",{type:"checkbox",checked:false,"data-column-toggle":b.id,onChange:()=>t.setColumnVisible(b.id,true)}),jsxRuntime.jsx("span",{children:f?.headerName??b.id})]},b.id)})]}),m.length>0&&jsxRuntime.jsxs("div",{className:"kanuni-datagrid-filter-footer",children:[jsxRuntime.jsx("button",{type:"button",onClick:()=>m.forEach(b=>t.setColumnVisible(b.id,true)),children:d.showAll}),jsxRuntime.jsx("button",{type:"button",className:"kanuni-datagrid-filter-primary",onClick:o,children:d.ok})]})]})}function Cl(t){let e=J();return react.useMemo(()=>({first:e.pagerFirst,previous:e.pagerPrevious,next:e.pagerNext,last:e.pagerLast,page:e.pagerPage,of:e.pagerOf,rowsPerPage:e.pagerRowsPerPage,...t}),[e,t])}function xl({page:t,pageCount:e,pageSize:n,pageSizes:o=[25,50,100,250],totalRows:l,onPage:i,onNext:d,onPrevious:m,onPageSize:b,labels:f}){let p=Cl(f),g=t<=0,y=t>=e-1,w=l===0?0:t*n+1,v=Math.min(l,(t+1)*n);return jsxRuntime.jsxs("div",{className:"kanuni-datagrid-pager",role:"navigation","aria-label":"Pagination",children:[jsxRuntime.jsxs("label",{className:"kanuni-datagrid-pager-size",children:[jsxRuntime.jsx("span",{children:p.rowsPerPage}),jsxRuntime.jsx("select",{value:n,"data-testid":"dg-page-size",onChange:N=>b(Number(N.target.value)),children:o.map(N=>jsxRuntime.jsx("option",{value:N,children:N},N))})]}),jsxRuntime.jsxs("span",{className:"kanuni-datagrid-pager-range","data-testid":"dg-page-range",children:[w.toLocaleString(),"\u2013",v.toLocaleString()," ",p.of," ",l.toLocaleString()]}),jsxRuntime.jsxs("div",{className:"kanuni-datagrid-pager-buttons",children:[jsxRuntime.jsx("button",{type:"button","aria-label":p.first,disabled:g,onClick:()=>i(0),children:"\xAB"}),jsxRuntime.jsx("button",{type:"button","aria-label":p.previous,disabled:g,"data-testid":"dg-page-prev",onClick:m,children:"\u2039"}),jsxRuntime.jsxs("span",{className:"kanuni-datagrid-pager-current","data-testid":"dg-page-current",children:[p.page," ",t+1," ",p.of," ",e]}),jsxRuntime.jsx("button",{type:"button","aria-label":p.next,disabled:y,"data-testid":"dg-page-next",onClick:d,children:"\u203A"}),jsxRuntime.jsx("button",{type:"button","aria-label":p.last,disabled:y,onClick:()=>i(e-1),children:"\xBB"})]})]})}var Ro=react.memo(xl);function Sl(t){let e=J();return react.useMemo(()=>({clear:e.filterRemove,toggle:e.filterToggle,builder:e.filterEditBuilder,empty:e.filterNone,...t}),[e,t])}function El({controller:t,onOpenBuilder:e,alwaysVisible:n=false,describeOptions:o,labels:l}){let i=Sl(l),[,d]=react.useState(0);react.useEffect(()=>t.events.on("filterChanged",()=>d(p=>p+1)),[t]);let m=t.getEffectiveFilter(),b=t.isFilterEnabled(),f=datagridCore.describeFilter(m,t.getColumnModel(),o);return !m&&!n?null:jsxRuntime.jsxs("div",{className:`kanuni-datagrid-filter-panel${b?"":" kanuni-datagrid-filter-panel--suspended"}`,"data-testid":"dg-filter-panel",role:"group","aria-label":i.toggle,children:[jsxRuntime.jsx("button",{type:"button",className:"kanuni-datagrid-filter-panel-clear",title:i.clear,"aria-label":i.clear,disabled:!m,"data-testid":"dg-filter-panel-clear",onClick:()=>{t.setFilter(null),t.clearColumnFilters(),t.setFilterEnabled(true);},children:"\xD7"}),jsxRuntime.jsx("input",{type:"checkbox",className:"kanuni-datagrid-filter-panel-toggle",checked:b,disabled:!m,title:i.toggle,"aria-label":i.toggle,"data-testid":"dg-filter-panel-toggle",onChange:p=>t.setFilterEnabled(p.target.checked)}),jsxRuntime.jsx("span",{className:"kanuni-datagrid-filter-panel-text",title:f??void 0,"data-testid":"dg-filter-panel-text",children:f??i.empty}),e&&jsxRuntime.jsx("button",{type:"button",className:"kanuni-datagrid-filter-panel-builder",title:i.builder,"aria-label":i.builder,"data-testid":"dg-filter-panel-builder",onClick:e,children:"\u25BE"})]})}var Co=react.memo(El);var hn=t=>!t.separator&&!t.disabled;function bn({x:t,y:e,items:n,context:o,onClose:l,dark:i=false,label:d}){let m=J(),b=react.useRef(null),[f,p]=react.useState({left:t,top:e}),[g,y]=react.useState(()=>n.findIndex(hn)),[w,v]=react.useState(null),[N,I]=react.useState(null),R=react.useRef(null),[k,G]=react.useState(null);react.useEffect(()=>I(null),[w]);let L=react.useCallback((u,T)=>{if(v(u),u===null||!T)return;let H=T.getBoundingClientRect();G({left:H.left,right:H.right,top:H.top});},[]),F=u=>b.current?.querySelector(`[data-item-index="${u}"]`)??null,B=react.useCallback(u=>{if(R.current=u,!u||!k)return;let T=8,H=u.getBoundingClientRect(),W=Math.max(T,Math.min(k.top-4,window.innerHeight-H.height-T)),se=k.right+H.width+T<=window.innerWidth?k.right:Math.max(T,k.left-H.width);I({left:se,top:W});},[k]),h=react.useCallback(u=>{if(b.current=u,!u)return;let T=u.getBoundingClientRect(),H=8;p({left:Math.max(H,Math.min(t,window.innerWidth-T.width-H)),top:Math.max(H,Math.min(e,window.innerHeight-T.height-H))}),u.focus();},[t,e]);react.useEffect(()=>{let u=H=>{let W=H.target;R.current?.contains(W)||b.current&&!b.current.contains(W)&&l();},T=()=>l();return document.addEventListener("mousedown",u),window.addEventListener("scroll",T,true),()=>{document.removeEventListener("mousedown",u),window.removeEventListener("scroll",T,true);}},[l]);let P=(u,T)=>{let H=n.length;for(let W=1;W<=H;W++){let Q=(u+T*W+H*H)%H;if(hn(n[Q]))return Q}return u},D=u=>{let T=n[u];if(!(!T||!hn(T))){if(T.items?.length){L(u,F(u));return}T.onSelect?.(o),l();}},Y=u=>{switch(u.key){case "ArrowDown":y(T=>P(T,1));break;case "ArrowUp":y(T=>P(T,-1));break;case "Home":y(n.findIndex(hn));break;case "End":y(P(0,-1));break;case "ArrowRight":if(n[g]?.items?.length)L(g,F(g));else return;break;case "ArrowLeft":if(w!==null)L(null);else return;break;case "Enter":case " ":D(g);break;case "Escape":l();break;case "Tab":l();return;default:return}u.preventDefault(),u.stopPropagation();};return jsxRuntime.jsxs(He,{dark:i,children:[jsxRuntime.jsx("div",{ref:h,className:"kanuni-datagrid-context-menu",role:"menu","aria-label":d??m.rowActions,tabIndex:-1,style:{left:f.left,top:f.top},onKeyDown:Y,children:n.map((u,T)=>u.separator?jsxRuntime.jsx("div",{className:"kanuni-datagrid-menu-separator",role:"separator"},u.id??`sep-${T}`):jsxRuntime.jsx("div",{className:"kanuni-datagrid-menu-row",children:jsxRuntime.jsxs("button",{type:"button",role:"menuitem",className:`kanuni-datagrid-menu-item${T===g?" kanuni-datagrid-menu-item--active":""}`,disabled:u.disabled,"data-item-index":T,"aria-haspopup":u.items?.length?"menu":void 0,"aria-expanded":u.items?.length?w===T:void 0,onMouseEnter:H=>{y(T),L(u.items?.length?T:null,H.currentTarget);},onClick:()=>D(T),children:[u.icon&&jsxRuntime.jsx("span",{className:"kanuni-datagrid-menu-icon",children:u.icon}),jsxRuntime.jsx("span",{className:"kanuni-datagrid-menu-label",children:u.label}),u.shortcut&&jsxRuntime.jsx("span",{className:"kanuni-datagrid-menu-shortcut",children:u.shortcut}),u.items?.length?jsxRuntime.jsx("span",{className:"kanuni-datagrid-menu-caret",children:"\u203A"}):null]})},u.id??T))}),w!==null&&n[w]?.items?.length?jsxRuntime.jsx("div",{ref:B,className:"kanuni-datagrid-context-menu kanuni-datagrid-submenu",style:N?{left:N.left,top:N.top}:{left:0,top:0,visibility:"hidden"},role:"menu",children:n[w].items.map((u,T)=>u.separator?jsxRuntime.jsx("div",{className:"kanuni-datagrid-menu-separator",role:"separator"},u.id??`sub-sep-${T}`):jsxRuntime.jsxs("button",{type:"button",role:"menuitem",className:"kanuni-datagrid-menu-item",disabled:u.disabled,onClick:()=>{u.onSelect?.(o),l();},children:[u.icon&&jsxRuntime.jsx("span",{className:"kanuni-datagrid-menu-icon",children:u.icon}),jsxRuntime.jsx("span",{className:"kanuni-datagrid-menu-label",children:u.label})]},u.id??T))}):null]})}var Pl=typeof navigator<"u"&&/Mac|iPhone|iPad|iPod/.test(navigator.platform??""),To=Pl?"\u2318":"Ctrl+",Lr=`${To}C`,Ml=`${To}X`,Ll=`${To}V`;function Ct(t,e={}){let n=t.getClipboardText(e);t.notifyClipboardGesture("copy",n?n.split(`
2
+ `).length:0,()=>!n||!navigator.clipboard?.writeText?false:(Ir(n),true));}function Ir(t){navigator.clipboard?.writeText(t).catch(()=>{});}function Il(t){let e=t.getColumnModel();return t.getVisualColumnIds().some(n=>{let o=e.getDef(n)?.band;return typeof o=="string"?o!=="":Array.isArray(o)&&o.length>0})}function Hl(t){return t===false?[]:Array.isArray(t)?t:["csv","excel","excel-selected","pdf"]}var Al={csv:"exportCsv",excel:"exportExcel","excel-selected":"exportExcelSelected",pdf:"exportPdf"};function ko(t,e,n,o,l){if(n===false)return [];let i=n===true||n===void 0?{}:n,d=[];i.copy!==false&&d.push({id:"__dg-copy",label:e.menuCopy,shortcut:Lr,onSelect:()=>Ct(t)}),i.copyWithHeaders!==false&&d.push({id:"__dg-copy-headers",label:e.menuCopyWithHeaders,onSelect:()=>Ct(t,{includeHeaders:true})}),i.copyWithGroupHeaders!==false&&Il(t)&&d.push({id:"__dg-copy-group-headers",label:e.menuCopyWithGroupHeaders,onSelect:()=>Ct(t,{includeGroupHeaders:true})});let m=Hl(i.export);if(m.length>0){let b=t.getSelectedCount()===0;d.push({id:"__dg-export",label:e.menuExport,items:m.map(f=>({id:`__dg-export-${f}`,label:e[Al[f]],disabled:f==="excel-selected"&&b,onSelect:()=>{Ft(t,f).then(p=>{p.error&&l?.(p.error);});}}))});}return d.length>0&&o&&d.unshift({id:"__dg-sep-builtin",separator:true}),d}function Hr(t,e){if(t.scrollHeight<1e6)return null;let n=t.scrollTop;t.scrollTop=1e8;let o=t.scrollTop;if(t.scrollTop=n,o<=0)return null;let l=e.getVirtualWindow().rows.totalHeight-t.clientHeight;return o>=l-4?null:(e.setMaxScrollOffset(o),o)}function Go({anchor:t,value:e,dark:n,onCommit:o,onCancel:l}){let i=J(),[d,m]=react.useState(e),b=react.useRef(null);react.useEffect(()=>{let p=b.current;p&&(p.focus(),p.select());},[]);let f=()=>{let p=d.trim();o(p===""?null:p);};return jsxRuntime.jsxs(it,{anchor:t,onClose:l,dark:n,label:i.noteEditorAria,className:"kanuni-datagrid-note-editor",children:[jsxRuntime.jsx("textarea",{ref:b,className:"kanuni-datagrid-note-input",value:d,rows:4,"aria-label":i.noteEditorAria,placeholder:i.notePlaceholder,onChange:p=>m(p.target.value),onKeyDown:p=>{p.key==="Enter"&&(p.ctrlKey||p.metaKey)&&(p.preventDefault(),f()),p.key==="Escape"&&(p.preventDefault(),l());}}),jsxRuntime.jsxs("div",{className:"kanuni-datagrid-note-actions",children:[jsxRuntime.jsx("button",{type:"button",className:"kanuni-datagrid-note-cancel",onClick:l,children:i.cancel}),jsxRuntime.jsx("button",{type:"button",className:"kanuni-datagrid-note-save",onClick:f,children:i.save})]})]})}function Kl(t){let e=J();return react.useMemo(()=>({busy:e.busy,loading:e.busyLoading,encoding:e.busyEncoding,filtering:e.busyFiltering,sorting:e.busySorting,computing:e.busyComputing,grouping:e.busyGrouping,aggregating:e.busyAggregating,projecting:e.busyProjecting,exporting:e.busyExporting,cancel:e.cancel,...t}),[e,t])}var $l=new Set(["filtering","sorting","computing","encoding","exporting"]);function Eo({controller:t,delay:e=300,labels:n,cancellable:o=true,forced:l=false}){let[i,d]=react.useState(()=>t.getBusy()),[m,b]=react.useState(false);react.useEffect(()=>(d(t.getBusy()),t.events.on("busyChanged",v=>d(v))),[t]);let f=i.busy&&i.background!==true;react.useEffect(()=>{if(!f){b(false);return}let v=setTimeout(()=>b(true),e);return ()=>clearTimeout(v)},[f,e]);let p=Kl(n);if(!l&&(!m||!f))return null;let g=i.phase?p[i.phase]:p.busy,y=i.progress===null?null:Math.max(0,Math.min(100,i.progress)),w=o&&i.phase!==null&&$l.has(i.phase)&&i.cancellable!==false;return jsxRuntime.jsx("div",{className:"kanuni-datagrid-loading-overlay",role:"status","aria-live":"polite","data-testid":"dg-loading-overlay","data-phase":i.phase??"busy","data-blocking":i.phase==="exporting"?"true":void 0,"aria-busy":"true",children:jsxRuntime.jsxs("div",{className:"kanuni-datagrid-loading-card",children:[jsxRuntime.jsx("span",{className:"kanuni-datagrid-loading-spinner","aria-hidden":"true"}),jsxRuntime.jsx("span",{className:"kanuni-datagrid-loading-label",children:g}),y!==null&&jsxRuntime.jsxs("div",{className:"kanuni-datagrid-loading-progress",role:"progressbar","aria-valuenow":Math.round(y),"aria-valuemin":0,"aria-valuemax":100,children:[jsxRuntime.jsx("div",{className:"kanuni-datagrid-loading-track",children:jsxRuntime.jsx("div",{className:"kanuni-datagrid-loading-fill",style:{width:`${y}%`}})}),jsxRuntime.jsxs("span",{className:"kanuni-datagrid-loading-percent",children:[Math.round(y),"%"]})]}),w&&jsxRuntime.jsx("button",{type:"button",className:"kanuni-datagrid-loading-cancel",onClick:()=>t.cancel(),"data-testid":"dg-loading-cancel",children:p.cancel})]})})}var _r=null;function Wl(){return typeof document>"u"?null:(_r??=document.createElement("canvas"),_r.getContext("2d"))}function Br(t){let e=getComputedStyle(t);return `${e.fontStyle} ${e.fontWeight} ${e.fontSize} ${e.fontFamily}`}function yn(t,e){let n=Wl();if(!n)return null;let o=typeof CSS<"u"&&CSS.escape?CSS.escape(e):e.replace(/"/g,'\\"'),l=t.querySelector(`.kanuni-datagrid-header-cell[data-column-id="${o}"]`),i=t.querySelectorAll(`.kanuni-datagrid-cell[data-column-id="${o}"]`);if(!l&&i.length===0)return null;let d=0;if(l){let m=l.querySelector(".kanuni-datagrid-header-label")??l;n.font=Br(m),d=n.measureText(m.textContent??"").width+44;}if(i.length>0){n.font=Br(i[0]);for(let m=0;m<i.length;m++){let b=i[m].textContent??"";if(b==="")continue;let f=n.measureText(b).width+20;f>d&&(d=f);}}return d===0?null:Math.round(Math.min(640,Math.max(48,d)))}function No(t,e){let n=react.useRef(e);n.current=e;let o=!!e?.enabled,l=e?.storageKey,i=e?.type;react.useEffect(()=>{if(o)return datagridCore.attachStateStoring(t,{...n.current,enabled:true})},[t,o,l,i]);}var Rn="application/x-kanuni-row";function Mo(t,e){let n=!!e?.enabled,o=e?.group??null,l=e?.allowReordering??true,i=e?.allowDropInsert??o!==null,[d,m]=react.useState(false),[b,f]=react.useState(null),p=react.useRef(null),g=react.useRef(false),y=react.useRef(null),w=react.useRef(null),v=react.useRef(e);v.current=e;let N=react.useCallback(u=>t.getRowByKey(u),[t]),I=(u,T)=>{let H=T.getBoundingClientRect();return u.clientY<H.top+H.height/2?"before":"after"},R=react.useCallback((u,T)=>{if(!datagridCore.isDataRow(u))return;w.current=u.key,y.current=u.key,g.current=false,p.current=null;let H={gridId:t.gridId,group:o,rowKey:u.key,row:u.data};T.dataTransfer.setData(Rn,JSON.stringify(H)),T.dataTransfer.setData("text/plain",String(u.key)),T.dataTransfer.effectAllowed="move",t.notifyRowDrag("enter",{rowKey:u.key}),T.stopPropagation();},[t,o]),k=react.useCallback(()=>{let u=y.current;u!==null&&t.notifyRowDragEnd({rowKey:u,dropped:g.current,overKey:p.current?.key??null,position:p.current?.side??null}),g.current=false,p.current=null,y.current=null,w.current=null,f(null),m(false);},[t]),G=react.useCallback(u=>u.dataTransfer.types.includes(Rn)?w.current!==null?l:i&&o!==null:false,[l,i,o]),L=react.useCallback((u,T)=>{if(!datagridCore.isDataRow(u)||!G(T))return;if(T.preventDefault(),T.dataTransfer.dropEffect="move",w.current===u.key){p.current=null,f(null);return}let H=I(T,T.currentTarget),W=p.current?.key!==u.key||p.current.side!==H;p.current={key:u.key,side:H},f(Q=>Q?.key===u.key&&Q.side===H?Q:{key:u.key,side:H}),W&&w.current!==null&&t.notifyRowDrag("move",{rowKey:w.current,overKey:u.key,position:H});},[G,t]),F=react.useCallback((u,T,H)=>{let W=null;try{let se=u.dataTransfer.getData(Rn);W=se?JSON.parse(se):null;}catch{W=null;}if(!W)return;if(W.gridId===t.gridId){if(!l)return;let se=v.current?.onReorder;if(se){se({dragKey:W.rowKey,targetKey:T,position:H,row:N(W.rowKey)});return}t.moveRow(W.rowKey,T,H);return}!i||o===null||W.group!==o||v.current?.onAdd?.({row:W.row,rowKey:W.rowKey,otherGridId:W.gridId,targetKey:T,position:H});},[t,l,i,o,N]),B=react.useCallback((u,T)=>{if(f(null),!datagridCore.isDataRow(u)||!G(T))return;T.preventDefault(),T.stopPropagation();let H=I(T,T.currentTarget);g.current=true,p.current={key:u.key,side:H},F(T,u.key,H),w.current=null;},[G,F]),h=react.useCallback(u=>{G(u)&&(u.preventDefault(),u.dataTransfer.dropEffect="move");},[G]),P=react.useCallback(u=>{f(null),G(u)&&(u.preventDefault(),g.current=true,p.current=null,F(u,null,"after"),w.current=null);},[G,F]),D=react.useCallback(u=>{let T=u.relatedTarget;T&&u.currentTarget.contains(T)||w.current!==null&&(p.current=null,f(null),t.notifyRowDrag("leave",{rowKey:w.current}));},[t]);return {handlers:n?{draggable:d,setDraggable:m,onDragStart:R,onDragEnd:k,onDragOver:L,onDrop:B}:void 0,dropAt:n?b:null,bodyHandlers:n?{onDragOver:h,onDrop:P,onDragLeave:D}:void 0}}var Jl=400;function $r(t){return t.scrollWidth>t.clientWidth+1||t.scrollHeight>t.clientHeight+1}function Wr(t){return (t.textContent??"").trim()}function jl(t){let{def:e,node:n,value:o,clipped:l,note:i}=t;if(i)return i;if(e&&n){if(typeof e.tooltip=="function"){let d=e.tooltip({value:o,row:n.data,node:n,column:e});return d||null}if(typeof e.tooltip=="string")return e.tooltip||null;if(e.tooltipField){let d=n.data[e.tooltipField];return d==null||d===""?null:String(d)}}return l&&l.length>0?l:null}function Lo({rootRef:t,columnModel:e,getRowNode:n,getNote:o,config:l}){let i=l?.enabled!==false,d=l?.delay??Jl,m=l?.showOnTruncation!==false,[b,f]=react.useState(null),p=react.useRef({columnModel:e,getRowNode:n,getNote:o,showOnTruncation:m,delay:d});return p.current={columnModel:e,getRowNode:n,getNote:o,showOnTruncation:m,delay:d},react.useEffect(()=>{if(!i){f(null);return}let g=t.current;if(!g)return;let y=null,w=null,v=()=>{y!==null&&(clearTimeout(y),y=null),w=null,f(null);},N=(G,L)=>{let{columnModel:F,getRowNode:B,getNote:h,showOnTruncation:P}=p.current,D=F.getDef(L),Y=G.closest("[data-row-key]")?.dataset.rowKey,u=Y===void 0?void 0:B(Y);return jl({def:D,node:u,value:u?F.getCellValue(u.data,L):void 0,clipped:P&&$r(G)?Wr(G):null,note:u&&h?h(u.key,L,u.data):null})},I=(G,L)=>{let F=p.current.columnModel.getDef(G);if(F?.headerTooltip)return F.headerTooltip;if(!p.current.showOnTruncation)return null;let B=L.querySelector(".kanuni-datagrid-header-label")??L;if(!$r(B))return null;let h=Wr(B);return h.length>0?h:null},R=G=>{let F=G.target?.closest("[data-column-id]")??null;if(F===w||(v(),!F||!g.contains(F)))return;let B=F.dataset.columnId;if(!B)return;let h=F.classList.contains("kanuni-datagrid-header-cell");!h&&!F.closest("[data-row-key]")||(w=F,y=setTimeout(()=>{if(y=null,w!==F||!F.isConnected)return;let P=h?I(B,F):N(F,B);if(!P)return;let D=F.getBoundingClientRect();f({text:P,anchor:{top:D.top,left:D.left,width:D.width,height:D.height}});},p.current.delay));},k=G=>{let L=G.relatedTarget;w&&L&&w.contains(L)||v();};return g.addEventListener("mouseover",R),g.addEventListener("mouseout",k),g.addEventListener("mousedown",v),g.addEventListener("keydown",v),g.addEventListener("scroll",v,true),window.addEventListener("blur",v),()=>{v(),g.removeEventListener("mouseover",R),g.removeEventListener("mouseout",k),g.removeEventListener("mousedown",v),g.removeEventListener("keydown",v),g.removeEventListener("scroll",v,true),window.removeEventListener("blur",v);}},[i,t]),i?b:null}var zr=6,vt=8;function Io({state:t,dark:e}){let[n,o]=react.useState(null),[l,i]=react.useState(null),{text:d,anchor:m}=t;return react.useLayoutEffect(()=>{if(!n)return;let{width:b,height:f}=n.getBoundingClientRect(),p=document.documentElement.clientWidth,g=document.documentElement.clientHeight,y=m.top+m.height+zr,w=m.top-f-zr,N=y+f+vt<=g||w<vt?y:w,I=Math.min(Math.max(vt,m.left),Math.max(vt,p-b-vt));i({top:Math.min(N,g-f-vt),left:I});},[n,d,m]),jsxRuntime.jsx(He,{dark:e,children:jsxRuntime.jsx("div",{ref:o,className:"kanuni-datagrid-tooltip",role:"tooltip",style:l?{top:l.top,left:l.left}:{top:0,left:0,visibility:"hidden"},children:d})})}function Cn(t){return {sortAsc:t.sortAsc,sortDesc:t.sortDesc,clearSort:t.clearSort,groupBy:t.groupByColumn,ungroup:t.ungroupColumn,showGroupPanel:t.showGroupPanel,hideGroupPanel:t.hideGroupPanel,showFooter:t.showFooter,hideFooter:t.hideFooter,showGroupFooters:t.showGroupFooters,hideGroupFooters:t.hideGroupFooters,hideColumn:t.hideColumn,fieldChooser:t.fieldChooser,bestFit:t.bestFit,bestFitAll:t.bestFitAll,fixedPosition:t.fixedPosition,pinLeft:t.pinLeft,pinRight:t.pinRight,pinSticky:t.pinSticky,unpin:t.unpin,moveLeft:t.moveLeft,moveRight:t.moveRight}}var Yr=Cn(datagridCore.getGridDictionary("en"));function Ho(t,e){let n={...Yr,...e.labels},{controller:o,maxGroupLevels:l}=e,i=t.columnId,d=o.getColumnModel().getDef(i),m=o.getSort(),b=m.find(k=>k.columnId===i),f=o.getGroupLevels(),p=f.includes(i),g=d?.sortable!==false,y=o.getColumnStates().find(k=>k.id===i)?.pinned??null,w=d?.groupable!==false,v=[{id:"sort-asc",label:n.sortAsc,disabled:!g||b?.direction==="asc",onSelect:()=>o.setSort([{columnId:i,direction:"asc"}])},{id:"sort-desc",label:n.sortDesc,disabled:!g||b?.direction==="desc",onSelect:()=>o.setSort([{columnId:i,direction:"desc"}])},{id:"sort-clear",label:n.clearSort,disabled:!b,onSelect:()=>o.setSort(m.filter(k=>k.columnId!==i))},{id:"sep-1",separator:true},{id:"group",label:p?n.ungroup:n.groupBy,disabled:!w,onSelect:()=>{p?o.groupBy(f.filter(k=>k!==i)):o.groupBy([...f,i].slice(-l));}},{id:"group-panel",label:e.groupPanelVisible?n.hideGroupPanel:n.showGroupPanel,onSelect:e.onToggleGroupPanel}];e.groupFootersAvailable&&v.push({id:"group-footers",label:e.groupFootersVisible?n.hideGroupFooters:n.showGroupFooters,onSelect:e.onToggleGroupFooters}),v.push({id:"footer",label:e.footerVisible?n.hideFooter:n.showFooter,onSelect:e.onToggleFooter},{id:"sep-2",separator:true},{id:"hide-column",label:n.hideColumn,disabled:o.getColumnStates().filter(k=>k.visible).length<=1,onSelect:()=>o.setColumnVisible(i,false)},{id:"field-chooser",label:n.fieldChooser,onSelect:e.onOpenFieldChooser},{id:"sep-3",separator:true},{id:"best-fit",label:n.bestFit,disabled:d?.resizable===false,onSelect:()=>e.onBestFit(i)},{id:"best-fit-all",label:n.bestFitAll,onSelect:e.onBestFitAll});let N=o.getColumnStates().filter(k=>k.visible&&k.pinned===y).map(k=>k.id),I=N.indexOf(i),R=d?.reorderable!==false&&I>=0;return v.push({id:"sep-4",separator:true},{id:"move-left",label:n.moveLeft,disabled:!R||I<=0,onSelect:()=>o.moveColumn(i,N[I-1])},{id:"move-right",label:n.moveRight,disabled:!R||I<0||I>=N.length-1,onSelect:()=>o.moveColumn(i,N[I+2])},{id:"fixed-position",label:n.fixedPosition,items:[{id:"pin-left",label:n.pinLeft,disabled:y==="left",onSelect:()=>o.setColumnPinned(i,"left")},{id:"pin-right",label:n.pinRight,disabled:y==="right",onSelect:()=>o.setColumnPinned(i,"right")},{id:"pin-sticky",label:n.pinSticky,disabled:y==="sticky",onSelect:()=>o.setColumnPinned(i,"sticky")}]},{id:"unpin",label:n.unpin,disabled:y===null,onSelect:()=>o.setColumnPinned(i,null)}),v}var xn=typeof window<"u"?react.useLayoutEffect:react.useEffect,jr=1e8,vn=null;function Qr(){if(vn!==null)return vn;if(typeof document>"u"||!document.body)return null;let t=document.createElement("div");t.setAttribute("aria-hidden","true"),t.style.cssText="position:fixed;top:0;left:-9999px;width:80px;height:80px;overflow:auto;visibility:hidden;pointer-events:none;";let e=document.createElement("div");e.style.cssText="width:1px;",e.style.height=`${jr}px`,t.appendChild(e),document.body.appendChild(t),t.scrollTop=jr;let n=t.scrollTop;return _o=e.offsetHeight>0?e.offsetHeight:null,t.remove(),n>0&&(vn=n),vn}var _o=null;function cs(){return _o===null&&Qr(),_o}function Ao(t){return Math.abs(t)}function Zr(t,e){return getComputedStyle(e).direction==="rtl"?-t:t}function Tn(t,e){if(e)return t;if(t.dataSource!=null&&!Array.isArray(t.dataSource))throw new Error("[datagrid] a server-side DataSource is an Enterprise feature. Pass an array to DataGrid, or import EnterpriseDataGrid from @kanunilabs/datagrid-react-enterprise.");if(t.summaries){t.debugMode&&console.warn("[datagrid] footer column totals are an Enterprise feature \u2014 import EnterpriseDataGrid from @kanunilabs/datagrid-react-enterprise to use them.");let d={...t};return delete d.summaries,Tn(d,e)}if(t.columns?.some(d=>d.spanRows)){t.debugMode&&console.warn("[datagrid] cell span/merge (spanRows) is an Enterprise feature \u2014 import EnterpriseDataGrid from @kanunilabs/datagrid-react-enterprise to use it.");let d={...t,columns:t.columns.map(m=>m.spanRows?{...m,spanRows:void 0}:m)};return Tn(d,e)}if(t.tree){t.debugMode&&console.warn("[datagrid] tree data is an Enterprise feature \u2014 import EnterpriseDataGrid from @kanunilabs/datagrid-react-enterprise to use it.");let d={...t};return delete d.tree,Tn(d,e)}if(!t.grouping)return t.masterDetail?Oo(t):t;let{groupBy:n,groupSummaries:o}=t.grouping,l=n==null?[]:typeof n=="string"?[n]:n;if(l.length<=1&&!o)return t.masterDetail?Oo(t):t;t.debugMode&&console.warn("[datagrid] multi-level grouping and group summaries are Enterprise features \u2014 import EnterpriseDataGrid from @kanunilabs/datagrid-react-enterprise to use them.");let i={...t,grouping:{...t.grouping,groupBy:l.slice(0,1),groupSummaries:false}};return t.masterDetail?Oo(i):i}function Oo(t){t.debugMode&&console.warn("[datagrid] master-detail is an Enterprise feature \u2014 import EnterpriseDataGrid from @kanunilabs/datagrid-react-enterprise to use it.");let e={...t};return delete e.masterDetail,e}function ps(t){return jsxRuntime.jsx(Yn,{locale:t.locale,messages:t.messages,children:jsxRuntime.jsx(co,{theme:t.theme,density:t.density,palette:t.palette,children:jsxRuntime.jsx(ms,{...t})})})}function ms(t){let e=J(),{className:n,style:o,dark:l=false,theme:i,palette:d,striped:m=true,emptyText:b,sortable:f=true,filterRow:p=false,headerFilter:g=false,filterIconMode:y="hover",columnReorder:w=true,columnResize:v=true,loadingOverlay:N=true,announcements:I=true,groupPanel:R=false,showRowCount:k=false,toolbar:G=false,toolbarExcel:L=false,toolbarPdf:F=false,filterPanel:B=false,filterPanelLabels:h,onOpenFilterBuilder:P,toolbarItemsBefore:D,toolbarItemsAfter:Y,renderRow:u,stateStoring:T,headerMenu:H=true,focusedRow:W=false,focusedRowKey:Q,onFocusedRowChanged:se,footer:Ue,footerMenu:ve=true,onRowClick:ue,onRowActivate:he,onReady:ye,renderCellContent:Te,getCellClassName:Ge,renderOverlay:Me,onCellPointerDown:ne,onCellPointerEnter:$e,onCellDoubleClick:We,enterpriseEdition:re=false,renderDetail:ce,renderEditForm:pe,density:Oe,rowMenu:de,cellMenu:s,autoColumns:C,rowDrag:M,tooltip:z,pinnedTopRows:E,pinnedBottomRows:oe,footerPosition:me="bottom",autoSizeStrategy:ae="none",highlightSearch:ke=true,...te}=t,A=react.useMemo(()=>{let a=te.columns;if(a&&a.length>0)return a;let c=te.dataSource;if(!Array.isArray(c)||c.length===0)return a??[];let x=typeof C=="object"?C:void 0;return C===false?a??[]:datagridCore.inferColumns(c,x)},[te.columns,te.dataSource,C]),Le={...te,columns:A},S=i?uo[i][Oe??"normal"]:Oe?so[Oe]:datagridCore.DEFAULT_ROW_HEIGHT,U=Le.rowHeight===void 0?{...Le,rowHeight:S}:Le,_=re?Number.POSITIVE_INFINITY:1,X=Tn(U,re),{controller:r,rows:le,window:kt,layout:fe,sort:Vt,rowHeight:zt,visibleCount:Ye}=$n(X),Bo=Vn(r,t.printLayout),Dn=Bo.active?{...kt,rows:{...kt.rows,start:0,end:le.length,offsetY:0,totalHeight:0}}:kt,Dt=react.useMemo(()=>A.some(a=>a.autoHeight===true),[A]),Ko=g&&r.canListDistinctValues();g&&!Ko&&te.debugMode&&console.warn("[datagrid] headerFilter needs a column's distinct values. This grid is remote and its DataSource does not implement `loadDistinctValues` \u2014 implement it, or use `filterRow`.");let Ve=react.useRef(null);xn(()=>{r.setEnterpriseEdition(re);},[r,re]),react.useEffect(()=>{ye?.(r);},[r,ye]),xn(()=>{let a=Qr();a!==null&&a<datagridCore.DEFAULT_MAX_SCROLL_OFFSET&&r.setMaxScrollOffset(a);let c=cs();c!==null&&r.setMaxCanvasHeight(c);},[r]),xn(()=>{let a=Ve.current;if(!a)return;let c=()=>{r.setViewportSize(a.clientWidth,a.clientHeight),a.style.setProperty("--dg-viewport-width",`${a.clientWidth}px`);let q=a.querySelector(".kanuni-datagrid-rows"),K=a.querySelector(".kanuni-datagrid-canvas");if(q&&K){let $=q.getBoundingClientRect(),ee=K.getBoundingClientRect();r.setChromeOffsets($.top-ee.top,ee.bottom-$.bottom);}Hr(a,r);};if(c(),typeof ResizeObserver>"u")return;let x=new ResizeObserver(c);x.observe(a);let O=a.querySelector(".kanuni-datagrid-canvas");return O&&x.observe(O),()=>x.disconnect()},[r]),xn(()=>{if(!Dt)return;let a=Ve.current?.querySelector(".kanuni-datagrid-viewport");if(!a)return;let c=r.getVirtualWindow(),x=r.getRows(),O=new Map(r.getMeasuredRowHeights()),q=false;for(let K=c.rows.start;K<c.rows.end;K++){let $=x[K];if(!$||$.kind!=="data")continue;let ee=a.querySelector(`[data-row-key="${CSS.escape(String($.key))}"]`);if(!ee)continue;let ie=ee.getBoundingClientRect().height;ie>0&&O.get($.key)!==ie&&(O.set($.key,ie),q=true);}q&&r.setMeasuredRowHeights(O);}),react.useEffect(()=>{if(Dt)return r.events.on("columnStateChanged",()=>{r.clearMeasuredRowHeights();})},[r,Dt]),react.useEffect(()=>r.events.on("scrollRequested",a=>{let c=Ve.current;if(!c)return;a.scrollTop!==void 0&&(c.scrollTop=a.scrollTop),a.scrollLeft!==void 0&&(c.scrollLeft=Zr(a.scrollLeft,c)),r.setScroll(c.scrollTop,Ao(c.scrollLeft));let x=a.scrollTop;x===void 0||Math.abs(c.scrollTop-x)<=1||setTimeout(()=>{let O=Ve.current;!O||Math.abs(O.scrollTop-x)<=1||(O.scrollTop=x,r.setScroll(O.scrollTop,Ao(O.scrollLeft)));},0);}),[r]);let $o=Un(r,t.alignedGrids,Ve),na=react.useCallback(a=>{let c=a.currentTarget;r.setScroll(c.scrollTop,Ao(c.scrollLeft)),$o.syncScroll(c.scrollLeft);},[r,$o]),oa=react.useCallback((a,c)=>r.toggleSort(a,c),[r]);No(r,T);let dt=Mo(r,M);react.useEffect(()=>{Q!=null&&r.getFocusedRowKey()!==Q&&r.focusRow(Q);},[r,Q]),react.useEffect(()=>{if(se)return r.events.on("focusedRowChanged",a=>se({rowKey:a.rowKey,row:a.row}))},[r,se]);let qe=react.useRef(null),[Gn,ra]=react.useState(null);react.useEffect(()=>r.events.on("overlayChanged",a=>{ra(a.manual?a.overlay:null);}),[r]);let aa=react.useCallback(a=>{let c=r.getDataRowNode(a);if(c)return c;if(a==="")return;let x=Number(a);return Number.isNaN(x)?void 0:r.getDataRowNode(x)},[r]),Re=re?t.notes:void 0;!re&&t.notes&&t.debugMode&&console.warn("[datagrid] cell notes are an Enterprise feature \u2014 import EnterpriseDataGrid from @kanunilabs/datagrid-react-enterprise to use them.");let Ut=!!Re?.onChange&&Re.menu!==false,Yt=react.useCallback((a,c,x)=>Re?Re.get({rowKey:a,columnId:c,row:x})??null:null,[Re]),Wo=Lo({rootRef:qe,columnModel:r.getColumnModel(),getRowNode:aa,getNote:Re?Yt:void 0,config:z}),[ia,la]=react.useState(0);react.useEffect(()=>{let a=new Set,c=[r.events.on("cellsFlashed",({rowKeys:x,columnIds:O,duration:q})=>{let K=qe.current;if(!K)return;let $=x.length?x.map(Ce=>`[data-row-key="${CSS.escape(String(Ce))}"]`).join(","):".kanuni-datagrid-row",ee=O.length?O.map(Ce=>`[data-column-id="${CSS.escape(Ce)}"]`).join(","):"[data-column-id]",ie=[];K.querySelectorAll($).forEach(Ce=>{Ce.querySelectorAll(ee).forEach(gt=>ie.push(gt));});for(let Ce of ie)Ce.classList.remove("kanuni-datagrid-cell--flash");K.offsetWidth;for(let Ce of ie)Ce.classList.add("kanuni-datagrid-cell--flash");let Fe=setTimeout(()=>{for(let Ce of ie)Ce.classList.remove("kanuni-datagrid-cell--flash");a.delete(Fe);},q);a.add(Fe);}),r.events.on("cellsRefreshed",({revision:x})=>la(x))];return ()=>{c.forEach(x=>x()),a.forEach(clearTimeout);}},[r]);let sa=react.useCallback((a,c)=>r.moveColumn(a,c),[r]),da=react.useCallback((a,c,x)=>r.setColumnWidth(a,c,x??true),[r]),Sn=react.useCallback(a=>{if(!qe.current)return;let c=yn(qe.current,a);c!==null&&r.setColumnWidth(a,c);},[r]),qt=react.useCallback(()=>{let a=qe.current;if(a)for(let c of r.getColumnStates()){if(!c.visible)continue;let x=yn(a,c.id);x!==null&&r.setColumnWidth(c.id,x);}},[r]),En=react.useRef(false);react.useEffect(()=>{if(ae!=="none"){if(ae==="fitGrid"){let a=()=>r.sizeColumnsToFit();return a(),r.events.on("gridSizeChanged",a)}return En.current=false,r.events.on("firstDataRendered",()=>{En.current||(En.current=true,qt());})}},[r,ae,qt]);let[ua,Vo]=react.useState({}),zo=t.filterDebounce??(r.isRemote()?200:0),Nn=react.useRef(false),Xt=react.useCallback((a,c)=>{let x=r.getColumnModel().getDataType(a);Nn.current=true;try{r.setColumnFilter(a,dn(a,c,x),datagridCore.FILTER_PART_ROW);}finally{Nn.current=false;}},[r]),Xe=react.useMemo(()=>datagridCore.createDebouncedCommit(zo),[zo]);react.useEffect(()=>()=>Xe.cancelAll(),[Xe]);let ca=react.useCallback((a,c)=>{Vo(x=>({...x,[a]:c})),Xe.schedule(a,()=>Xt(a,c));},[Xt,Xe]),pa=react.useCallback((a,c)=>{Xe.cancel(a),Xt(a,c);},[Xt,Xe]);react.useEffect(()=>r.events.on("filterChanged",()=>{if(Nn.current)return;let a=r.getColumnModel();Vo(c=>io(c,{isPending:x=>Xe.isPending(x),textFor:x=>{let O=r.getColumnFilter(x,datagridCore.FILTER_PART_ROW);return O?ao(x,O,a.getDataType(x)):""}},a.getOrder()));}),[r,Xe]);let[ge,Ze]=react.useState(null),Jt=react.useRef(0),ma=react.useCallback((a,c)=>{let x=c.getBoundingClientRect(),O=r.getColumnModel().getDef(a),q={left:x.left,top:x.bottom+2},K=O?.headerName??a,$=r.getColumnFilter(a,datagridCore.FILTER_PART_SET)??r.getColumnFilter(a,datagridCore.FILTER_PART_DEFAULT);if(!r.isRemote()){let ie=++Jt.current;Ze({columnId:a,label:K,entries:[],selected:null,anchor:q,loading:true}),r.getDistinctValueSetAsync(a).then(({entries:Fe,truncated:Ce})=>{Jt.current===ie&&Ze(gt=>gt&&gt.columnId===a?{...gt,entries:Fe,truncated:Ce,capped:Ce,selected:datagridCore.selectedLabelsFromFilter($,Fe),loading:false}:gt);});return}let ee=++Jt.current;Ze({columnId:a,label:K,entries:[],selected:null,anchor:q,loading:true}),r.getDistinctValuesAsync(a).then(ie=>{Jt.current===ee&&Ze(Fe=>Fe&&Fe.columnId===a?{...Fe,entries:ie,selected:datagridCore.selectedLabelsFromFilter($,ie),loading:false}:Fe);});},[r]),fa=react.useCallback(a=>{ge&&(r.setColumnFilter(ge.columnId,a,datagridCore.FILTER_PART_SET),Ze(null));},[r,ge]),ga=Object.keys(r.getColumnStates().reduce((a,c)=>(r.getColumnFilter(c.id)&&(a[c.id]=true),a),{})),Pn=r.getSelectionMode(),Ie=Pn!=="none"&&(te.selection?.checkboxColumn??false),wa=react.useCallback((a,c)=>{r.handleRowClick(a.key,{ctrlKey:c.ctrlKey,metaKey:c.metaKey,shiftKey:c.shiftKey});},[r]),ha=react.useCallback((a,c)=>r.focusCell(a.key,c),[r]),ba=react.useCallback(a=>r.toggleRow(a.key),[r]),[Gt,Uo]=react.useState(null),ya=react.useCallback(()=>Uo(null),[]),[St,Mn]=react.useState(null),Yo=react.useCallback((a,c)=>{let O=(qe.current?.querySelector(`[data-row-key="${CSS.escape(String(a))}"] [data-column-id="${CSS.escape(c)}"]`)??qe.current)?.getBoundingClientRect();return {left:O?.left??0,top:(O?.bottom??0)+2}},[]),Ra=react.useCallback(a=>{let c=St;Mn(null),!(!c||!Re?.onChange)&&Re.onChange({rowKey:c.rowKey,columnId:c.columnId,row:c.row,text:a});},[St,Re]),qo=react.useCallback((a,c)=>{if(!Re?.onChange||Re.menu===false)return [];let x=a.columnId;if(!x)return [];let O=r.getRowKey(a.row),q=Yt(O,x,a.row),K=()=>Mn({rowKey:O,columnId:x,row:a.row,text:q??"",anchor:Yo(O,x)}),$=[];return c&&$.push({separator:true,id:"__note-sep"}),$.push({id:"__note-edit",label:q?e.editNote:e.addNote,onSelect:K}),q&&$.push({id:"__note-delete",label:e.deleteNote,onSelect:()=>Re.onChange?.({rowKey:O,columnId:x,row:a.row,text:null})}),$},[Re,r,Yt,Yo,e]),[jt,Ln]=react.useState(null),Xo=react.useRef({x:0,y:0}),Jo=react.useCallback(a=>ko(r,e,s,a,c=>{Ln({message:c,...Xo.current}),console.error("[datagrid] export failed:",c);}),[r,e,s]),Zt=react.useCallback((a,c,x,O,q)=>{if(x.kind!=="data")return;let K={row:x.data,node:x,rowIndex:O,columnId:q,selectedKeys:r.getSelectedKeys()},$=(typeof de=="function"?de(K):de)??[],ee=qo(K,$.length>0),ie=[...$,...ee,...Jo($.length+ee.length>0)];ie.length!==0&&(Xo.current={x:a,y:c},Ln(null),Uo({x:a,y:c,items:ie,context:K}));},[de,r,qo,Jo]),jo=react.useCallback(a=>a?.target?.closest("[data-column-id]")?.dataset.columnId??null,[]),ut=react.useCallback((a,c,x,O,q)=>{let K=O??-1;a&&r.notifyRow(a,x,K);let $=jo(q);$!==null&&r.notifyCell(c,x,K,$);},[r,jo]),Ca=react.useCallback((a,c,x)=>{ue?.(a),ut("rowClicked","cellClicked",a,c,x);},[ue,ut]),xa=react.useCallback((a,c,x)=>{he?.(a),ut("rowDoubleClicked","cellDoubleClicked",a,c,x);},[he,ut]),va=react.useCallback((a,c,x)=>{if(ut(null,"cellContextMenu",a,c,x),!de&&!Ut&&s===false||a.kind!=="data")return;x.preventDefault(),r.isRowSelected(a.key)||r.handleRowClick(a.key,{});let O=x.target.closest("[data-column-id]")?.dataset.columnId??null;Zt(x.clientX,x.clientY,a,c,O);},[de,Ut,s,r,Zt,ut]),[Ta,ka]=react.useState(null),[Da,Ga]=react.useState(null),[In,Sa]=react.useState(()=>te.grouping?.groupSummaries??false),[ct,Hn]=react.useState(null),[Zo,An]=react.useState(null),Ea=react.useCallback(()=>{r.getSelectedCount()>0?r.clearSelection():r.selectAll();},[r]),Na=Ye>0&&r.getSelectedCount()>=Ye?"all":r.getSelectedCount()>0?"some":"none",Pa=react.useCallback(a=>{let c=a.target;if(c.tagName==="INPUT"||c.tagName==="TEXTAREA"||c.isContentEditable)return;if((de||Ut||s!==false)&&(a.key==="ContextMenu"||a.key==="F10"&&a.shiftKey)){let q=r.getFocus(),K=q?le.findIndex(ee=>ee.key===q.rowKey):-1,$=K>=0?le[K]:void 0;if($){let ie=Ve.current?.querySelector(`[data-row-key="${CSS.escape(String($.key))}"]`)?.getBoundingClientRect();Zt(ie?ie.left+16:0,ie?ie.bottom:0,$,K,q?.columnId??null),a.preventDefault();}return}let x=datagridCore.resolveGridCommand({key:a.key,ctrlKey:a.ctrlKey,metaKey:a.metaKey,shiftKey:a.shiftKey,altKey:a.altKey});if(!x)return;if(x.type==="copy"){Ct(r);return}if(x.type==="activate"){let q=r.getFocus(),K=q?le.find($=>$.key===q.rowKey):void 0;K&&he?.(K),x.preventDefault&&a.preventDefault();return}r.executeCommand(x),x.preventDefault&&a.preventDefault();let O=r.getFocusIndices();if(O&&Ve.current){let K=r.getColumnLayout().center.findIndex(ee=>ee.state.id===r.getFocus()?.columnId),$=r.ensureVisible(O.rowIndex,K===-1?void 0:K);if($){let ee=Ve.current;$.scrollTop!==void 0&&(ee.scrollTop=$.scrollTop),$.scrollLeft!==void 0&&(ee.scrollLeft=Zr($.scrollLeft,ee)),r.setScroll(ee.scrollTop,ee.scrollLeft);}}},[r,le,he,de,Ut,s,Zt]),pt=react.useMemo(()=>datagridCore.bandDepth([...fe.left,...fe.center,...fe.right]),[fe]),Et=yt,On=(p?2:1)+pt,Qo=E?.length??0,Ma=oe?.length??0,Fn=On+Qo,Qt=Ta??te.grouping?.panel??R,La=r.getGroupLevels(),Ia=react.useCallback(a=>r.groupBy(a.slice(0,_)),[r,_]),Ha=react.useCallback(a=>r.toggleGroup(a),[r]),Aa=r.getColumnModel().runtime().filter(a=>a.state.visible&&a.def.groupable!==false),Se=r.hasMasterDetail()&&!!ce,we=t.rowNumbers??false,Oa=we&&r.isPaginated()?r.getPage()*r.getPageSize():0;react.useEffect(()=>{r.setLeadWidth(Zn(Ie,Se,we));},[r,Ie,Se,we]);let Fa=react.useCallback(a=>r.toggleDetail(a),[r]),_a=react.useCallback(a=>r.toggleTreeRow(a),[r]),er=r.getSummaryDefs(),Ba=r.getSummaries(),mt=Da??Ue??er.length>0,en=mt&&me==="top",tr=p?2:1,Ka=X.grouping?.groupSummaries&&In?te.summaries:void 0,nr=react.useCallback(()=>{Sa(a=>(r.setGroupSummaries(!a),!a));},[r]),$a=react.useCallback((a,c)=>{if(!ve)return;c.preventDefault();let x=r.getColumnModel().getDef(a),O=r.getColumnSummary(a),q={columnId:a,headerName:x?.headerName??x?.field??a},K=[{id:"none",label:e.noTotal,disabled:O===null,onSelect:()=>r.setColumnSummary(a,null)},{id:"sep",separator:true},...qn(x?.dataType).map($=>({id:$,label:rn[$],disabled:O?.type===$,onSelect:()=>r.setColumnSummary(a,$)}))];Hn({x:c.clientX,y:c.clientY,items:K,context:q});},[r,ve]),Wa=react.useCallback((a,c)=>{if(H===false)return;c.preventDefault();let x=r.getColumnModel().getDef(a),O={columnId:a,headerName:x?.headerName??x?.field??a},q=Ho(O,{controller:r,groupPanelVisible:Qt,footerVisible:mt,groupFootersAvailable:re,groupFootersVisible:In,onToggleGroupPanel:()=>ka(!Qt),onToggleFooter:()=>Ga(!mt),onToggleGroupFooters:nr,onOpenFieldChooser:()=>An({left:c.clientX,top:c.clientY}),onBestFit:Sn,onBestFitAll:qt,maxGroupLevels:_,labels:Cn(e)}),K=typeof H=="function"?H(O,q):q;!K||K.length===0||Hn({x:c.clientX,y:c.clientY,items:K,context:O});},[H,r,Qt,mt,re,In,nr,Sn,qt,_,e]),ft=r.getFocus(),Va=ft?`${t.gridId}-cell-${String(ft.rowKey)}-${ft.columnId}`:void 0,_n=r.getSelectedCount(),za=react.useMemo(()=>{let a=[`${Ye} rows`];return Vt.length>0&&a.push(`sorted by ${Vt.map(c=>`${r.getColumnModel().getDef(c.columnId)?.headerName??c.columnId} ${c.direction}ending`).join(", ")}`),_n>0&&a.push(`${_n} selected`),a.join(", ")},[r,Ye,Vt,_n]),{centerColumns:Qe,centerIndices:Bn,stickyInsets:Nt,leadingSpacer:et,trailingSpacer:tt,rowStart:Ua,rowEnd:or}=pr(fe,Dn),Kn=r.getColumnModel(),nt=Ua,Ya=a=>{if(Dt)return;let c=r.getRowHeightAt(a);return c===zt?void 0:c},qa=Array.from(le.slice(nt,or)),Xa=react.useMemo(()=>!we||r.getGroupLevels().length===0&&!r.hasMasterDetail()?null:mr(le),[we,r,le]),Ja=r.hasCellSpans(),rr=react.useRef({start:0,end:0});rr.current={start:nt,end:or-1};let ja=react.useCallback((a,c)=>{let x=r.getCellSpans(c);if(x.length===0)return null;let{start:O,end:q}=rr.current,K=datagridCore.spanRoleAt(x,a,O,q);if(!K)return null;if(K.role==="covered")return {kind:"covered"};let $=r.getRowOffset(K.drawStart);return {kind:"draw",height:r.getRowOffset(K.drawEnd)+r.getRowHeightAt(K.drawEnd)-$,offset:0}},[r]),Za=ke?r.getSearchText().trim().toLowerCase():"",Qa={pathOf:a=>datagridCore.bandPath(r.getColumnModel().getDef(a)),collapsible:a=>r.isBandCollapsible(a),collapsed:a=>r.isBandCollapsed(a),onToggle:a=>r.toggleBand(a),labels:{expand:e.expandDetails,collapse:e.collapseDetails}},ar={layout:fe,centerColumns:Qe,leadingSpacer:et,trailingSpacer:tt,defs:er,values:Ba,checkboxColumn:Ie,detailColumn:Se,rowNumberColumn:we,onPickSummary:ve?$a:void 0,emptyHint:ve?"\xB7":""};return jsxRuntime.jsxs("div",{className:`kanuni-datagrid-root${l?" kanuni-datagrid-dark":""}${Bo.active?" kanuni-datagrid-print":""}${It(i,Oe,d)}${n?` ${n}`:""}`,style:{"--dg-row-height":`${zt}px`,"--dg-grip-inset":we?`${bt}px`:"0px",...o},dir:datagridCore.isRtlLocale(t.locale)?"rtl":void 0,"data-grid-id":t.gridId,"data-theme":i,"data-palette":d,"data-auto-height":Dt?"":void 0,ref:qe,children:[G&&jsxRuntime.jsx(bo,{controller:r,dark:l,columnChooser:t.toolbarColumnChooser??true,exportExcel:re&&L,exportPdf:re&&F,itemsBefore:D,itemsAfter:Y,onOpenColumnChooser:a=>An(c=>c?null:a)}),Qt&&jsxRuntime.jsx(ho,{columns:Aa,levels:La,onSetLevels:Ia,maxLevels:_,onExpandAll:()=>r.expandAllGroups(),onCollapseAll:()=>r.collapseAllGroups()}),jsxRuntime.jsx("div",{className:"kanuni-datagrid-scroller",ref:Ve,onScroll:na,onKeyDown:Pa,tabIndex:0,role:"grid","aria-rowcount":Ye+On+Qo+Ma,"aria-colcount":fe.left.length+fe.center.length+fe.right.length+(Ie?1:0)+(Se?1:0)+(we?1:0),"aria-multiselectable":Pn==="multiple"||void 0,"aria-activedescendant":Va,"aria-label":t.gridId,children:jsxRuntime.jsxs("div",{className:"kanuni-datagrid-canvas",style:{width:(fe.totalWidth||0)+Zn(Ie,Se,we)||"100%"},role:"rowgroup",children:[jsxRuntime.jsx(no,{layout:fe,centerColumns:Qe,leadingSpacer:et,trailingSpacer:tt,depth:pt,checkboxColumn:Ie,detailColumn:Se,rowNumberColumn:we,rowHeight:Et,bandFold:Qa}),jsxRuntime.jsx(ro,{bandOffset:pt*Et,stickyInsets:Nt,layout:fe,centerColumns:Qe,leadingSpacer:et,trailingSpacer:tt,sort:Vt,sortable:f,onSort:oa,headerFilter:Ko,filteredColumns:ga,onOpenFilter:ma,filterIconMode:y,checkboxColumn:Ie,detailColumn:Se,rowNumberColumn:we,selectAllState:Na,onToggleSelectAll:Ea,draggable:R,reorderable:w,onReorder:sa,resizable:v,onResize:da,onAutoFit:Sn,onHeaderContextMenu:H===false?void 0:Wa}),p&&jsxRuntime.jsx(lo,{bandOffset:pt*Et,stickyInsets:Nt,layout:fe,centerColumns:Qe,leadingSpacer:et,trailingSpacer:tt,values:ua,checkboxColumn:Ie,detailColumn:Se,rowNumberColumn:we,onChange:ca,onCommit:pa}),en&&jsxRuntime.jsx(mn,{...ar,position:"top",bandOffset:pt*Et,headerRowsBetween:tr}),E&&E.length>0&&jsxRuntime.jsx(fn,{gridId:t.gridId,side:"top",rows:E,layout:fe,columnModel:Kn,centerColumns:Qe,centerIndices:Bn,stickyInsets:Nt,leadingSpacer:et,trailingSpacer:tt,checkboxColumn:Ie,detailColumn:Se,rowNumberColumn:we,rowHeight:zt,bandOffset:pt*Et,headerRowsBetween:tr+(en?1:0),ariaRowBase:On}),jsxRuntime.jsxs("div",{className:"kanuni-datagrid-rows",style:{position:"relative",height:Dn.rows.totalHeight},onDragOver:dt.bodyHandlers?.onDragOver,onDrop:dt.bodyHandlers?.onDrop,onDragLeave:dt.bodyHandlers?.onDragLeave,children:[jsxRuntime.jsx("div",{className:"kanuni-datagrid-viewport",style:{transform:`translateY(${Dn.rows.offsetY}px)`},children:qa.map((a,c)=>a?jsxRuntime.jsx(Mt,{gridId:t.gridId,node:a,index:nt+c,layout:fe,columnModel:Kn,centerColumns:Qe,centerIndices:Bn,stickyInsets:Nt,leadingSpacer:et,trailingSpacer:tt,striped:m,selected:r.isRowSelected(a.key),focusedColumnId:ft?.rowKey===a.key?ft.columnId:null,rowFocused:W&&ft?.rowKey===a.key,rowDrag:dt.handlers,dropSide:dt.dropAt?.key===a.key?dt.dropAt.side:null,renderRow:u,checkboxColumn:Ie,rowNumberColumn:we,getSpan:Ja?ja:void 0,getNote:Re?Yt:void 0,rowNumber:we?fr(nt+c,Xa,Oa):null,headerRowCount:Fn,onRowClick:Ca,onRowMouseDown:Pn==="none"?void 0:wa,onRowDoubleClick:xa,onToggleSelect:ba,onCellMouseDown:ha,onRowContextMenu:va,onToggleGroup:Ha,onToggleTreeRow:_a,revision:ia,searchNeedle:Za,summaryDefs:Ka,detailColumn:Se,detailExpanded:Se&&r.isDetailExpanded(a.key),onToggleDetail:Fa,renderDetail:ce,renderEditForm:pe,height:Ya(nt+c),renderCellContent:Te,getCellClassName:Ge,onCellPointerDown:ne,onCellPointerEnter:$e,onCellDoubleClick:We},String(a.key)):jsxRuntime.jsx("div",{className:"kanuni-datagrid-row kanuni-datagrid-row--loading",role:"row","aria-rowindex":nt+c+1+Fn,"aria-busy":"true",children:jsxRuntime.jsx("div",{className:"kanuni-datagrid-cell kanuni-datagrid-loading-cell",role:"gridcell","aria-colindex":1,children:jsxRuntime.jsx("span",{className:"kanuni-datagrid-loading-bar"})})},`__loading-${nt+c}`))}),Me?.()]}),oe&&oe.length>0&&jsxRuntime.jsx(fn,{gridId:t.gridId,side:"bottom",rows:oe,layout:fe,columnModel:Kn,centerColumns:Qe,centerIndices:Bn,stickyInsets:Nt,leadingSpacer:et,trailingSpacer:tt,checkboxColumn:Ie,detailColumn:Se,rowNumberColumn:we,rowHeight:zt,headerRowsBetween:mt&&!en?1:0,ariaRowBase:Fn+Ye}),mt&&!en&&jsxRuntime.jsx(mn,{...ar,position:"bottom"})]})}),(Gn==="noRows"||Gn===null&&Ye===0)&&jsxRuntime.jsx("div",{className:"kanuni-datagrid-empty",children:b??e.noData}),B&&jsxRuntime.jsx(Co,{controller:r,alwaysVisible:B==="always",onOpenBuilder:P,describeOptions:h}),N!==false&&jsxRuntime.jsx(Eo,{controller:r,delay:typeof N=="number"?N:void 0,forced:Gn==="loading"}),r.isPaginated()&&jsxRuntime.jsx(Ro,{page:r.getPage(),pageCount:r.getPageCount(),pageSize:r.getPageSize(),pageSizes:te.pagination?.pageSizes,totalRows:Ye,onPage:a=>r.setPage(a),onNext:()=>r.nextPage(),onPrevious:()=>r.previousPage(),onPageSize:a=>r.setPageSize(a)}),I&&jsxRuntime.jsx("div",{className:"kanuni-datagrid-sr-only",role:"status","aria-live":"polite","aria-atomic":"true",children:za}),St&&jsxRuntime.jsx(Go,{anchor:St.anchor,value:St.text,dark:l,onCommit:Ra,onCancel:()=>Mn(null)}),Gt&&jsxRuntime.jsx(bn,{x:Gt.x,y:Gt.y,items:Gt.items,context:Gt.context,dark:l,onClose:ya}),jt&&jsxRuntime.jsx(He,{dark:l,children:jsxRuntime.jsx("button",{type:"button",role:"alert",className:"kanuni-datagrid-toolbar-error kanuni-datagrid-menu-error",style:{left:jt.x,top:jt.y},onClick:()=>Ln(null),children:jt.message})}),ct&&jsxRuntime.jsx(bn,{x:ct.x,y:ct.y,items:ct.items,context:ct.context,dark:l,label:`${ct.context.headerName} column`,onClose:()=>Hn(null)}),Wo&&jsxRuntime.jsx(Io,{state:Wo,dark:l}),Zo&&jsxRuntime.jsx(yo,{controller:r,columns:r.getColumnStates(),anchor:Zo,dark:l,onClose:()=>An(null)}),ge&&jsxRuntime.jsx(go,{gridId:t.gridId,columnId:ge.columnId,headerLabel:ge.label,entries:ge.entries,initialSelected:ge.selected,anchor:ge.anchor,loading:ge.loading,truncated:ge.truncated,onSearch:ge.capped&&!r.isRemote()?a=>{let{entries:c,truncated:x}=r.searchDistinctValues(ge.columnId,a);Ze(O=>O&&O.columnId===ge.columnId?{...O,entries:c,truncated:x}:O);}:void 0,dark:l,onApply:fa,onClose:()=>Ze(null)},`${ge.columnId}:${ge.loading?"loading":"ready"}`)]})}function gs({defs:t,values:e,columnModel:n,rowCount:o,rowCountLabel:l}){let i=J(),d=ht(i);return t.length===0&&o===void 0?null:jsxRuntime.jsxs("div",{className:"kanuni-datagrid-summary-bar",role:"status","aria-label":i.summaryAria,children:[o!==void 0&&jsxRuntime.jsxs("span",{className:"kanuni-datagrid-summary-item",children:[jsxRuntime.jsx("strong",{children:o.toLocaleString()})," ",l??i.summaryRows]}),t.map(m=>{let b=e[datagridCore.summaryKey(m.columnId,m.type)],f=n.getDef(m.columnId),p=rt(m,b,f);return jsxRuntime.jsxs("span",{className:"kanuni-datagrid-summary-item",children:[jsxRuntime.jsxs("span",{className:"kanuni-datagrid-summary-label",children:[ot(m,d)," ",f?.headerName??m.columnId,":"]}),jsxRuntime.jsx("strong",{children:p})]},datagridCore.summaryKey(m.columnId,m.type))})]})}var ws=react.memo(gs);function ys(t,e){let[n,o]=react.useState(null);return react.useEffect(()=>{if(!t||!e){o(null);return}let l=e.source??"view",i=false,d=0,m=false,b=false,f=null,p=()=>{let w=++d;t.computeChartData(e).then(v=>{!i&&w===d&&o(v);},()=>{});},g=(w=false)=>{b||=w,!m&&(m=true,queueMicrotask(()=>{if(m=false,i)return;let v=t.chartBasis(l);!b&&v===f||(b=false,f=v,p());}));};f=t.chartBasis(l),p();let y=[t.events.on("contentReady",()=>g()),t.events.on("rowsChanged",()=>g()),t.events.on("dataUpdated",()=>g()),...l==="selection"?[t.events.on("selectionChanged",()=>g(true))]:[]];return ()=>{i=true,d++,y.forEach(w=>w());}},[t,e]),n}Object.defineProperty(exports,"ClientRowModel",{enumerable:true,get:function(){return datagridCore.ClientRowModel}});Object.defineProperty(exports,"ColumnModel",{enumerable:true,get:function(){return datagridCore.ColumnModel}});Object.defineProperty(exports,"DEFAULT_ROW_HEIGHT",{enumerable:true,get:function(){return datagridCore.DEFAULT_ROW_HEIGHT}});Object.defineProperty(exports,"DataGridController",{enumerable:true,get:function(){return datagridCore.DataGridController}});Object.defineProperty(exports,"GridStateStore",{enumerable:true,get:function(){return datagridCore.GridStateStore}});Object.defineProperty(exports,"VirtualWindowEngine",{enumerable:true,get:function(){return datagridCore.VirtualWindowEngine}});Object.defineProperty(exports,"andFilters",{enumerable:true,get:function(){return datagridCore.andFilters}});Object.defineProperty(exports,"attachStateStoring",{enumerable:true,get:function(){return datagridCore.attachStateStoring}});Object.defineProperty(exports,"bandDepth",{enumerable:true,get:function(){return datagridCore.bandDepth}});Object.defineProperty(exports,"bandPath",{enumerable:true,get:function(){return datagridCore.bandPath}});Object.defineProperty(exports,"computeColumnLayout",{enumerable:true,get:function(){return datagridCore.computeColumnLayout}});Object.defineProperty(exports,"computeHeaderBands",{enumerable:true,get:function(){return datagridCore.computeHeaderBands}});Object.defineProperty(exports,"createRestDataSource",{enumerable:true,get:function(){return datagridCore.createRestDataSource}});Object.defineProperty(exports,"describeFilter",{enumerable:true,get:function(){return datagridCore.describeFilter}});Object.defineProperty(exports,"downloadBlob",{enumerable:true,get:function(){return datagridCore.downloadBlob}});Object.defineProperty(exports,"humanizeField",{enumerable:true,get:function(){return datagridCore.humanizeField}});Object.defineProperty(exports,"importCsv",{enumerable:true,get:function(){return datagridCore.importCsv}});Object.defineProperty(exports,"inferColumns",{enumerable:true,get:function(){return datagridCore.inferColumns}});Object.defineProperty(exports,"isDataRow",{enumerable:true,get:function(){return datagridCore.isDataRow}});Object.defineProperty(exports,"isDataSource",{enumerable:true,get:function(){return datagridCore.isDataSource}});Object.defineProperty(exports,"isFilterGroup",{enumerable:true,get:function(){return datagridCore.isFilterGroup}});Object.defineProperty(exports,"isGroupRow",{enumerable:true,get:function(){return datagridCore.isGroupRow}});Object.defineProperty(exports,"lookupLabel",{enumerable:true,get:function(){return datagridCore.lookupLabel}});Object.defineProperty(exports,"moveRowInArray",{enumerable:true,get:function(){return datagridCore.moveRowInArray}});Object.defineProperty(exports,"parseCsv",{enumerable:true,get:function(){return datagridCore.parseCsv}});Object.defineProperty(exports,"sniffDelimiter",{enumerable:true,get:function(){return datagridCore.sniffDelimiter}});Object.defineProperty(exports,"summaryKey",{enumerable:true,get:function(){return datagridCore.summaryKey}});exports.BAND_ROW_HEIGHT=yt;exports.DEFAULT_HEADER_MENU_LABELS=Yr;exports.DENSITY_ROW_HEIGHT=so;exports.DataGrid=ps;exports.GRID_PALETTES=Oi;exports.GRID_THEMES=Ai;exports.GridColumnChooser=yo;exports.GridContextMenu=bn;exports.GridFilterPanel=Co;exports.GridFilterRow=lo;exports.GridFooterRow=mn;exports.GridGroupPanel=ho;exports.GridHeader=ro;exports.GridHeaderBands=no;exports.GridHeaderFilterPopup=go;exports.GridLoadingOverlay=Eo;exports.GridNoteEditor=Go;exports.GridPager=Ro;exports.GridPinnedRows=fn;exports.GridPopupPanel=it;exports.GridPortal=He;exports.GridRow=Mt;exports.GridSummaryBar=ws;exports.GridSurfaceProvider=co;exports.GridTextProvider=Yn;exports.GridToolbar=bo;exports.GridTooltip=Io;exports.PRINT_MAX_ROWS=Wn;exports.ROW_DRAG_MIME=Rn;exports.SHORTCUT_COPY=Lr;exports.SHORTCUT_CUT=Ml;exports.SHORTCUT_PASTE=Ll;exports.SUMMARY_TYPE_LABEL=rn;exports.THEME_ROW_HEIGHT=uo;exports.allowedSummaryTypes=qn;exports.buildCellMenuItems=ko;exports.buildHeaderMenu=Ho;exports.copyToClipboard=Ct;exports.fillText=_e;exports.filterInputFromNode=ao;exports.formatSummaryValue=rt;exports.headerMenuLabels=Cn;exports.measureBestFitWidth=yn;exports.parseFilterInput=dn;exports.reconcileFilterInputs=io;exports.runGridExport=Ft;exports.summaryLabel=ot;exports.summaryTypeLabels=ht;exports.themeClassName=It;exports.useAlignedGrids=Un;exports.useAnchoredPopup=Ht;exports.useCellTooltip=Lo;exports.useDataGrid=$n;exports.useGridChartData=ys;exports.useGridSurfaceClass=po;exports.useGridText=J;exports.usePrintLayout=Vn;exports.useRowDrag=Mo;exports.useStateStoring=No;exports.writeClipboardText=Ir;