@ethanhann/mantine-dataview 0.2.0 → 0.3.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/README.md +191 -15
- package/dist/components/DataCards/DataCards.d.ts +3 -1
- package/dist/components/DataTable/DataTable.d.ts +5 -1
- package/dist/components/DataToolbar/DataToolbar.d.ts +8 -1
- package/dist/components/DataToolbar/ViewSwitcher.d.ts +8 -2
- package/dist/components/DataToolbar/index.d.ts +1 -0
- package/dist/components/DataView/DataView.d.ts +3 -1
- package/dist/components/DataView/context.d.ts +1 -0
- package/dist/core/useRowTransition.d.ts +8 -0
- package/dist/index.cjs +3 -3
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.ts +2 -2
- package/dist/index.js +479 -410
- package/dist/index.js.map +1 -1
- package/dist/mantine-dataview.css +2 -0
- package/dist/types/options.d.ts +3 -1
- package/dist/types/request.d.ts +4 -0
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -18,13 +18,16 @@ Built on [Mantine](https://mantine.dev) v9 and [TanStack Table](https://tanstack
|
|
|
18
18
|
- Column data types (`text`, `number`, `currency`, `date`, `boolean`) with automatic Intl-based formatting.
|
|
19
19
|
- Seven filter variants with smart controls: `SegmentedControl` for booleans, `RangeSlider` for bounded numbers,
|
|
20
20
|
`DatePickerInput` for dates.
|
|
21
|
-
- Custom filter components
|
|
21
|
+
- Custom filter components. Bring your own UI per column.
|
|
22
22
|
- Column pinning (left/right) with sticky positioning.
|
|
23
23
|
- CSV export with optional formatted output.
|
|
24
24
|
- Router-agnostic URL state sync with a default History-API adapter.
|
|
25
25
|
- Cross-page row selection + a shared bulk-action bar.
|
|
26
26
|
- Column-meta card composition (`title`/`subtitle`/`media`/`badge`/`meta`) + a `renderCard` escape hatch.
|
|
27
27
|
- Responsive: force-to-cards below a breakpoint, filters collapse to a bottom drawer on mobile.
|
|
28
|
+
- Faceted search with server-provided counts on filter options and range buckets with dynamic totals.
|
|
29
|
+
- External parameters (`params`) for scope selectors, toggles, and other non-column filters.
|
|
30
|
+
- Controls automatically disabled while data is loading (opt-out with `disableWhileLoading`).
|
|
28
31
|
- Loading / empty / filtered-empty / error states, consistent across both views.
|
|
29
32
|
- Dark mode support via Mantine's color scheme system.
|
|
30
33
|
- Strongly typed end to end; ships its own `.d.ts`. No icon dependency.
|
|
@@ -169,10 +172,54 @@ Or use the standalone components directly for full control:
|
|
|
169
172
|
<DataPagination view={view}/>
|
|
170
173
|
```
|
|
171
174
|
|
|
175
|
+
### Toolbar sections
|
|
176
|
+
|
|
177
|
+
Inject controls into the toolbar without rebuilding it from scratch using `leftSection`
|
|
178
|
+
and `rightSection`:
|
|
179
|
+
|
|
180
|
+
```tsx
|
|
181
|
+
<DataView.Toolbar
|
|
182
|
+
leftSection={<Text fw={600}>Users</Text>}
|
|
183
|
+
rightSection={
|
|
184
|
+
<Group gap="xs">
|
|
185
|
+
<Button size="xs" onClick={() => view.exportCsv()}>Export</Button>
|
|
186
|
+
<Button size="xs" onClick={() => view.refetch()}>Refresh</Button>
|
|
187
|
+
</Group>
|
|
188
|
+
}
|
|
189
|
+
/>
|
|
190
|
+
```
|
|
191
|
+
|
|
192
|
+
- `leftSection` renders before the search input (start of the left group).
|
|
193
|
+
- `rightSection` renders after the view switcher (end of the right group).
|
|
194
|
+
|
|
195
|
+
Both sections are disabled during loading along with the other toolbar controls.
|
|
196
|
+
|
|
197
|
+
### View switcher
|
|
198
|
+
|
|
199
|
+
The `ViewSwitcher` is exported for standalone use with customizable labels:
|
|
200
|
+
|
|
201
|
+
```tsx
|
|
202
|
+
import { ViewSwitcher } from "@ethanhann/mantine-dataview";
|
|
203
|
+
|
|
204
|
+
// Default
|
|
205
|
+
<ViewSwitcher view={view} />
|
|
206
|
+
|
|
207
|
+
// Custom labels (text or icons)
|
|
208
|
+
<ViewSwitcher view={view} tableLabel="List" cardsLabel="Grid" />
|
|
209
|
+
<ViewSwitcher view={view} tableLabel={<IconList />} cardsLabel={<IconGrid />} />
|
|
210
|
+
```
|
|
211
|
+
|
|
212
|
+
Or drive the view programmatically:
|
|
213
|
+
|
|
214
|
+
```tsx
|
|
215
|
+
view.setView("cards"); // switch to cards
|
|
216
|
+
view.view; // current view: "table" | "cards"
|
|
217
|
+
```
|
|
218
|
+
|
|
172
219
|
## Controlled (bring your own data layer)
|
|
173
220
|
|
|
174
|
-
`useDataViewFetcher` is a thin convenience wrapper. The core, `useDataView`, is fully controlled
|
|
175
|
-
|
|
221
|
+
`useDataViewFetcher` is a thin convenience wrapper. The core, `useDataView`, is fully controlled.
|
|
222
|
+
You supply `rows`/`rowCount`/`status` and respond to `onRequestChange`:
|
|
176
223
|
|
|
177
224
|
```tsx
|
|
178
225
|
const [resp, setResp] = useState({rows: [], rowCount: 0});
|
|
@@ -198,21 +245,50 @@ const view = useDataView<User>({
|
|
|
198
245
|
|
|
199
246
|
The request is emitted immediately for pagination/sorting and debounced for search/filters.
|
|
200
247
|
|
|
248
|
+
### External parameters
|
|
249
|
+
|
|
250
|
+
Pass arbitrary parameters that aren't tied to a column. They're included in every
|
|
251
|
+
`DataViewRequest`, trigger a refetch when they change, and reset pagination to page 1:
|
|
252
|
+
|
|
253
|
+
```tsx
|
|
254
|
+
const [tenantId, setTenantId] = useState("acme");
|
|
255
|
+
const [showArchived, setShowArchived] = useState(false);
|
|
256
|
+
|
|
257
|
+
const view = useDataViewFetcher<User>({
|
|
258
|
+
columns,
|
|
259
|
+
getRowId,
|
|
260
|
+
fetcher: async (request) => {
|
|
261
|
+
// request.params = { tenantId: "acme", showArchived: false }
|
|
262
|
+
const res = await api.list(request);
|
|
263
|
+
return {rows: res.items, rowCount: res.total};
|
|
264
|
+
},
|
|
265
|
+
params: {tenantId, showArchived},
|
|
266
|
+
});
|
|
267
|
+
|
|
268
|
+
// Render your own controls...
|
|
269
|
+
<Select data={tenants} value={tenantId} onChange={setTenantId}/>
|
|
270
|
+
<Switch checked={showArchived} onChange={(e) => setShowArchived(e.currentTarget.checked)}/>
|
|
271
|
+
```
|
|
272
|
+
|
|
273
|
+
Values are typed as `FilterParam` (`string | number | boolean | null | string[] | number[]`).
|
|
274
|
+
|
|
201
275
|
### Refetching on external changes
|
|
202
276
|
|
|
203
|
-
|
|
204
|
-
|
|
277
|
+
For cases where external state affects the fetcher but isn't a named parameter (e.g. it's
|
|
278
|
+
baked into the closure), use `deps` to trigger a refetch:
|
|
205
279
|
|
|
206
280
|
```tsx
|
|
207
281
|
const view = useDataViewFetcher<User>({
|
|
208
282
|
columns,
|
|
209
283
|
getRowId,
|
|
210
284
|
fetcher,
|
|
211
|
-
deps: [selectedTenantId
|
|
285
|
+
deps: [selectedTenantId],
|
|
212
286
|
});
|
|
213
287
|
```
|
|
214
288
|
|
|
215
289
|
When any value in `deps` changes, the current request is re-emitted to the fetcher.
|
|
290
|
+
Prefer `params` when the server needs to see the values; use `deps` when they're already
|
|
291
|
+
in the fetcher closure.
|
|
216
292
|
|
|
217
293
|
### Manual refresh
|
|
218
294
|
|
|
@@ -230,7 +306,7 @@ error retry button uses.
|
|
|
230
306
|
Set `dataType` on a column's meta to enable automatic value formatting. When no explicit
|
|
231
307
|
`cell` renderer is provided, the library formats values using `Intl.NumberFormat` or
|
|
232
308
|
`Intl.DateTimeFormat` based on the data type. Raw values are preserved for server requests,
|
|
233
|
-
sorting, and filtering
|
|
309
|
+
sorting, and filtering. Formatting is display-only.
|
|
234
310
|
|
|
235
311
|
```tsx
|
|
236
312
|
col.accessor("price", {
|
|
@@ -254,9 +330,9 @@ col.accessor("createdAt", {
|
|
|
254
330
|
|
|
255
331
|
### Format overrides (three levels)
|
|
256
332
|
|
|
257
|
-
1. **Library defaults
|
|
258
|
-
2. **Table-scoped
|
|
259
|
-
3. **Column-scoped
|
|
333
|
+
1. **Library defaults**, the built-in formatters per data type (above).
|
|
334
|
+
2. **Table-scoped**, `formatDefaults` on the hook options, keyed by data type.
|
|
335
|
+
3. **Column-scoped**, `format` on `ColumnMeta`, overrides everything for that column.
|
|
260
336
|
|
|
261
337
|
```tsx
|
|
262
338
|
const view = useDataViewFetcher({
|
|
@@ -315,7 +391,7 @@ col.accessor("avatar", {header: "Avatar", enableSorting: false});
|
|
|
315
391
|
|
|
316
392
|
## Custom headers
|
|
317
393
|
|
|
318
|
-
Column headers support the same render function pattern as cells
|
|
394
|
+
Column headers support the same render function pattern as cells. Pass a component or
|
|
319
395
|
function to the `header` property:
|
|
320
396
|
|
|
321
397
|
```tsx
|
|
@@ -399,7 +475,7 @@ Define filters declaratively on column meta. Seven variants are built in:
|
|
|
399
475
|
| `dateRange` | `DatePickerInput` (range) | Two-date calendar picker |
|
|
400
476
|
|
|
401
477
|
```tsx
|
|
402
|
-
// Boolean
|
|
478
|
+
// Boolean, renders as a segmented control
|
|
403
479
|
meta: {
|
|
404
480
|
filter: {
|
|
405
481
|
variant: "boolean"
|
|
@@ -477,7 +553,7 @@ import {FilterControl} from "@ethanhann/mantine-dataview";
|
|
|
477
553
|
|
|
478
554
|
### Programmatic filter control
|
|
479
555
|
|
|
480
|
-
Reset all filters or clear a specific column from anywhere
|
|
556
|
+
Reset all filters or clear a specific column from anywhere, no need to be inside the toolbar:
|
|
481
557
|
|
|
482
558
|
```tsx
|
|
483
559
|
// Reset all filters
|
|
@@ -494,6 +570,73 @@ Reset all filters or clear a specific column from anywhere — no need to be ins
|
|
|
494
570
|
- **Mobile** (below `sm` breakpoint): always collapsed into a bottom drawer.
|
|
495
571
|
- A "Reset filters" button appears automatically when any filter is active.
|
|
496
572
|
|
|
573
|
+
## Faceted search
|
|
574
|
+
|
|
575
|
+
When the server returns `facets` in the response, filter controls automatically adapt to show
|
|
576
|
+
dynamic counts, disable zero-result options, and render clickable range buckets.
|
|
577
|
+
|
|
578
|
+
### Server response with facets
|
|
579
|
+
|
|
580
|
+
```tsx
|
|
581
|
+
fetcher: async (request) => {
|
|
582
|
+
const res = await api.list(request);
|
|
583
|
+
return {
|
|
584
|
+
rows: res.items,
|
|
585
|
+
rowCount: res.total,
|
|
586
|
+
facets: {
|
|
587
|
+
size: {
|
|
588
|
+
type: "values",
|
|
589
|
+
values: [
|
|
590
|
+
{ value: "S", label: "Small", count: 12 },
|
|
591
|
+
{ value: "M", label: "Medium", count: 34 },
|
|
592
|
+
{ value: "L", label: "Large", count: 0 },
|
|
593
|
+
],
|
|
594
|
+
},
|
|
595
|
+
price: {
|
|
596
|
+
type: "ranges",
|
|
597
|
+
ranges: [
|
|
598
|
+
{ label: "Under $25", from: 0, to: 25, count: 15 },
|
|
599
|
+
{ label: "$25-$50", from: 25, to: 50, count: 28 },
|
|
600
|
+
{ label: "$50+", from: 50, to: 999, count: 7 },
|
|
601
|
+
],
|
|
602
|
+
min: 5,
|
|
603
|
+
max: 249,
|
|
604
|
+
},
|
|
605
|
+
},
|
|
606
|
+
};
|
|
607
|
+
};
|
|
608
|
+
```
|
|
609
|
+
|
|
610
|
+
### How controls adapt
|
|
611
|
+
|
|
612
|
+
| Filter type | Without facets | With value facets | With range facets |
|
|
613
|
+
|------------|---------------|-------------------|-------------------|
|
|
614
|
+
| Select | Static options | Options with counts, zero-count dimmed | - |
|
|
615
|
+
| Boolean | All / Yes / No | All / Yes (12) / No (3) | - |
|
|
616
|
+
| Number range | Slider or inputs | Slider (bounds from facet) | Clickable range buckets + slider |
|
|
617
|
+
| Date range | Date picker | Date picker | Clickable range buckets + picker |
|
|
618
|
+
|
|
619
|
+
Facets are optional and backward compatible. Facet data updates on every fetch, creating the
|
|
620
|
+
classic faceted search loop where filtering one dimension updates counts on all others.
|
|
621
|
+
|
|
622
|
+
### Facet types
|
|
623
|
+
|
|
624
|
+
```ts
|
|
625
|
+
// Discrete values - for select, multiselect, boolean filters
|
|
626
|
+
type ValueFacet = {
|
|
627
|
+
type: "values";
|
|
628
|
+
values: { value: string; label?: string; count: number }[];
|
|
629
|
+
};
|
|
630
|
+
|
|
631
|
+
// Bucketed ranges - for numberRange, dateRange filters
|
|
632
|
+
type RangeFacet = {
|
|
633
|
+
type: "ranges";
|
|
634
|
+
ranges: { label: string; from: number | string; to: number | string; count: number }[];
|
|
635
|
+
min?: number | string;
|
|
636
|
+
max?: number | string;
|
|
637
|
+
};
|
|
638
|
+
```
|
|
639
|
+
|
|
497
640
|
## Card composition
|
|
498
641
|
|
|
499
642
|
In card view, each visible column is placed by its `meta.card.role`:
|
|
@@ -594,7 +737,7 @@ Override loading, empty, and error states:
|
|
|
594
737
|
/>
|
|
595
738
|
```
|
|
596
739
|
|
|
597
|
-
A filtered-empty state is handled automatically
|
|
740
|
+
A filtered-empty state is handled automatically. It shows a "clear filters" action so
|
|
598
741
|
users can reset without manually removing each filter.
|
|
599
742
|
|
|
600
743
|
## URL state sync
|
|
@@ -700,17 +843,50 @@ When `forceCardsBelow` is set and the viewport is below that breakpoint:
|
|
|
700
843
|
- The view switcher is disabled (or hidden entirely with `lockSwitcherOnMobile`).
|
|
701
844
|
- Filters always open in a bottom drawer on mobile.
|
|
702
845
|
|
|
846
|
+
## Loading behavior
|
|
847
|
+
|
|
848
|
+
By default, filter controls, sort controls, and column visibility/pinning menus are disabled
|
|
849
|
+
while data is loading. Sort headers in the table also become non-interactive, with a dimmed
|
|
850
|
+
appearance showing the current sort state. The search input stays enabled so users can keep
|
|
851
|
+
typing during debounced search.
|
|
852
|
+
|
|
853
|
+
Opt out per component:
|
|
854
|
+
|
|
855
|
+
```tsx
|
|
856
|
+
<DataTable view={view} disableWhileLoading={false} />
|
|
857
|
+
<DataToolbar view={view} disableWhileLoading={false} />
|
|
858
|
+
```
|
|
859
|
+
|
|
860
|
+
### Animated row transitions
|
|
861
|
+
|
|
862
|
+
Instead of skeleton loading, rows can animate in and out with CSS transitions. New rows
|
|
863
|
+
fade and slide in, removed rows fade out, and unchanged rows stay in place:
|
|
864
|
+
|
|
865
|
+
```tsx
|
|
866
|
+
<DataView view={view} animateRows />
|
|
867
|
+
```
|
|
868
|
+
|
|
869
|
+
When `animateRows` is enabled:
|
|
870
|
+
- Previous rows stay visible while new data loads (no skeleton flash).
|
|
871
|
+
- New rows enter with a slide-down fade-in animation (200ms).
|
|
872
|
+
- Removed rows fade out (150ms) before being removed from the DOM.
|
|
873
|
+
- Works in both table and card views.
|
|
874
|
+
|
|
875
|
+
This is opt-in. The default behavior (skeleton loading) is unchanged.
|
|
876
|
+
|
|
703
877
|
## API overview
|
|
704
878
|
|
|
705
879
|
| Export | Purpose |
|
|
706
880
|
|----------------------------------------------------------------------|-----------------------------------------------|
|
|
707
|
-
| `useDataView` | Headless core
|
|
881
|
+
| `useDataView` | Headless core, owns all feature state |
|
|
708
882
|
| `useDataViewFetcher` | Convenience wrapper that manages the fetch |
|
|
709
883
|
| `DataView` (+ `.Toolbar` / `.BulkActions` / `.Body` / `.Pagination`) | Orchestrator + compound parts |
|
|
710
884
|
| `DataTable`, `DataCards` | The two presentations (usable standalone) |
|
|
711
885
|
| `DataToolbar`, `DataPagination`, `DataBulkActions` | Standalone affordances |
|
|
712
886
|
| `FilterControl` | Individual filter control (place anywhere) |
|
|
887
|
+
| `ViewSwitcher` | Table/Cards toggle (customizable labels) |
|
|
713
888
|
| `exportCsv` | Standalone CSV export utility |
|
|
889
|
+
| `col` | Fluent column builder factory |
|
|
714
890
|
| `createColumnHelper`, `composeCardLayout`, `resolveColumnLabel` | Column helpers |
|
|
715
891
|
| `@ethanhann/mantine-dataview/url` | `windowHistoryAdapter` + serializer utilities |
|
|
716
892
|
|
|
@@ -20,5 +20,7 @@ export interface DataCardsProps<TData> extends Omit<SimpleGridProps, "children">
|
|
|
20
20
|
enableSelection?: boolean;
|
|
21
21
|
/** Skeleton cards shown while loading. It defaults to the current page size, capped at 6. */
|
|
22
22
|
loadingCardCount?: number;
|
|
23
|
+
/** Animate card enter/exit instead of showing skeletons. Default: false. */
|
|
24
|
+
animateRows?: boolean;
|
|
23
25
|
}
|
|
24
|
-
export declare function DataCards<TData>({ view, slots, renderCard, fallbackRole, enableSelection, loadingCardCount, cols, ...gridProps }: DataCardsProps<TData>): string | number | bigint | boolean | Iterable<ReactNode> | Promise<string | number | bigint | boolean | import('react').ReactPortal | import('react').ReactElement<unknown, string | import('react').JSXElementConstructor<any>> | Iterable<ReactNode> | null | undefined> | import("react").JSX.Element | null | undefined;
|
|
26
|
+
export declare function DataCards<TData>({ view, slots, renderCard, fallbackRole, enableSelection, loadingCardCount, animateRows, cols, ...gridProps }: DataCardsProps<TData>): string | number | bigint | boolean | Iterable<ReactNode> | Promise<string | number | bigint | boolean | import('react').ReactPortal | import('react').ReactElement<unknown, string | import('react').JSXElementConstructor<any>> | Iterable<ReactNode> | null | undefined> | import("react").JSX.Element | null | undefined;
|
|
@@ -9,5 +9,9 @@ export interface DataTableProps<TData> extends Omit<TableProps, "data" | "childr
|
|
|
9
9
|
enableSelection?: boolean;
|
|
10
10
|
/** Skeleton rows shown while loading. It defaults to the current page size, capped at 8. */
|
|
11
11
|
loadingRowCount?: number;
|
|
12
|
+
/** Disable sorting interactions while data is loading. Default: true. */
|
|
13
|
+
disableWhileLoading?: boolean;
|
|
14
|
+
/** Animate row enter/exit instead of showing skeletons. Default: false. */
|
|
15
|
+
animateRows?: boolean;
|
|
12
16
|
}
|
|
13
|
-
export declare function DataTable<TData>({ view, slots, enableSelection, loadingRowCount, ...tableProps }: DataTableProps<TData>): import("react").JSX.Element;
|
|
17
|
+
export declare function DataTable<TData>({ view, slots, enableSelection, loadingRowCount, disableWhileLoading, animateRows, ...tableProps }: DataTableProps<TData>): import("react").JSX.Element;
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { GroupProps } from '@mantine/core';
|
|
2
|
+
import { ReactNode } from 'react';
|
|
2
3
|
import { UseDataViewReturn } from '../../types/options';
|
|
3
4
|
export interface DataToolbarProps<TData> extends Omit<GroupProps, "children"> {
|
|
4
5
|
/** The `useDataView` instance to drive. */
|
|
@@ -12,5 +13,11 @@ export interface DataToolbarProps<TData> extends Omit<GroupProps, "children"> {
|
|
|
12
13
|
showSort?: boolean;
|
|
13
14
|
showVisibility?: boolean;
|
|
14
15
|
showViewSwitcher?: boolean;
|
|
16
|
+
/** Disable search, filter, and sort controls while data is loading. Default: true. */
|
|
17
|
+
disableWhileLoading?: boolean;
|
|
18
|
+
/** Content injected at the start of the left control group (before search). */
|
|
19
|
+
leftSection?: ReactNode;
|
|
20
|
+
/** Content injected at the end of the right control group (after view switcher). */
|
|
21
|
+
rightSection?: ReactNode;
|
|
15
22
|
}
|
|
16
|
-
export declare function DataToolbar<TData>({ view, searchPlaceholder, filterInlineThreshold, lockSwitcherOnMobile, showSearch, showFilters, showSort, showVisibility, showViewSwitcher, ...groupProps }: DataToolbarProps<TData>): import("react").JSX.Element;
|
|
23
|
+
export declare function DataToolbar<TData>({ view, searchPlaceholder, filterInlineThreshold, lockSwitcherOnMobile, showSearch, showFilters, showSort, showVisibility, showViewSwitcher, disableWhileLoading, leftSection, rightSection, ...groupProps }: DataToolbarProps<TData>): import("react").JSX.Element;
|
|
@@ -1,5 +1,11 @@
|
|
|
1
|
+
import { ReactNode } from 'react';
|
|
1
2
|
import { UseDataViewReturn } from '../../types/options';
|
|
2
|
-
export
|
|
3
|
+
export interface ViewSwitcherProps<TData> {
|
|
3
4
|
view: UseDataViewReturn<TData>;
|
|
4
5
|
lockSwitcherOnMobile?: boolean;
|
|
5
|
-
|
|
6
|
+
/** Custom label for the table option. Default: "Table". */
|
|
7
|
+
tableLabel?: ReactNode;
|
|
8
|
+
/** Custom label for the cards option. Default: "Cards". */
|
|
9
|
+
cardsLabel?: ReactNode;
|
|
10
|
+
}
|
|
11
|
+
export declare function ViewSwitcher<TData>({ view, lockSwitcherOnMobile, tableLabel, cardsLabel, }: ViewSwitcherProps<TData>): import("react").JSX.Element | null;
|
|
@@ -14,10 +14,12 @@ export interface DataViewProps<TData> extends Omit<StackProps, "children"> {
|
|
|
14
14
|
renderCard?: DataCardsProps<TData>["renderCard"];
|
|
15
15
|
fallbackRole?: DataCardsProps<TData>["fallbackRole"];
|
|
16
16
|
lockSwitcherOnMobile?: boolean;
|
|
17
|
+
/** Animate row enter/exit instead of showing skeletons. Default: false. */
|
|
18
|
+
animateRows?: boolean;
|
|
17
19
|
/** Custom composition. It defaults to Toolbar, BulkActions, Body, and Pagination. */
|
|
18
20
|
children?: ReactNode;
|
|
19
21
|
}
|
|
20
|
-
export declare function DataView<TData>({ view, slots, renderCard, fallbackRole, lockSwitcherOnMobile, children, ...stackProps }: DataViewProps<TData>): import("react").JSX.Element;
|
|
22
|
+
export declare function DataView<TData>({ view, slots, renderCard, fallbackRole, lockSwitcherOnMobile, animateRows, children, ...stackProps }: DataViewProps<TData>): import("react").JSX.Element;
|
|
21
23
|
export declare namespace DataView {
|
|
22
24
|
var Toolbar: typeof DataViewToolbar;
|
|
23
25
|
var BulkActions: typeof DataViewBulkActions;
|
|
@@ -8,6 +8,7 @@ export interface DataViewContextValue<TData> {
|
|
|
8
8
|
renderCard?: DataCardsProps<TData>["renderCard"];
|
|
9
9
|
fallbackRole?: ComposeCardOptions["fallbackRole"];
|
|
10
10
|
lockSwitcherOnMobile?: boolean;
|
|
11
|
+
animateRows?: boolean;
|
|
11
12
|
}
|
|
12
13
|
export declare const DataViewProvider: import('react').Provider<DataViewContextValue<unknown> | null>;
|
|
13
14
|
export declare function useDataViewContext<TData>(): DataViewContextValue<TData>;
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { Row } from '@tanstack/react-table';
|
|
2
|
+
export interface RowTransitionResult<TData> {
|
|
3
|
+
rows: Row<TData>[];
|
|
4
|
+
entering: Set<string>;
|
|
5
|
+
/** Increments each time the row set or order changes. Use as a CSS animation key. */
|
|
6
|
+
generation: number;
|
|
7
|
+
}
|
|
8
|
+
export declare function useRowTransition<TData>(currentRows: Row<TData>[], enabled: boolean): RowTransitionResult<TData>;
|
package/dist/index.cjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("./serializer-CGmBq-Jz.cjs");let t=require("@tanstack/react-table"),n=require("@mantine/core"),r=require("react/jsx-runtime"),i=require("react"),a=require("@mantine/hooks"),o=require("@mantine/dates");require("@mantine/dates/styles.css");function s({view:e,slots:t,...i}){let{selection:a}=e;return a.count===0?null:(0,r.jsx)(n.Paper,{withBorder:!0,p:`xs`,radius:`sm`,role:`region`,"aria-label":`Bulk actions`,...i,children:(0,r.jsxs)(n.Group,{justify:`space-between`,wrap:`wrap`,gap:`sm`,children:[(0,r.jsxs)(n.Group,{gap:`sm`,children:[(0,r.jsxs)(n.Text,{size:`sm`,fw:500,children:[a.count,` selected`]}),(0,r.jsx)(n.Button,{variant:`subtle`,size:`xs`,onClick:a.clear,children:`Clear`})]}),t?.BulkActions&&(0,r.jsx)(n.Group,{gap:`xs`,children:t.BulkActions(a)})]})})}function c(e){let{meta:t,header:n}=e.columnDef;return t?.label?t.label:typeof n==`string`?n:e.id}function l(e,t,n){return t?t===`hidden`?null:t:e.accessorFn==null||n===`hidden`?null:n}function u(e,t={}){let n=t.fallbackRole??`meta`,r={title:[],subtitle:[],media:[],badge:[],meta:[]};e.getVisibleLeafColumns().forEach((e,t)=>{let i=e.columnDef.meta?.card,a=l(e,i?.role,n);a&&r[a].push({order:i?.order??t,index:t,field:{id:e.id,column:e,label:c(e),showLabel:i?.showLabel??a===`meta`}})});let i=e=>e.sort((e,t)=>e.order-t.order||e.index-t.index).map(e=>e.field);return{title:i(r.title),subtitle:i(r.subtitle),media:i(r.media),badge:i(r.badge),meta:i(r.meta)}}function d(e){e.resetColumnFilters(),e.setGlobalFilter(``)}function f({view:e,slots:t}){return t?.ErrorState?(0,r.jsx)(r.Fragment,{children:t.ErrorState({error:e.error,retry:e.refetch})}):(0,r.jsxs)(n.Stack,{align:`center`,gap:`xs`,children:[(0,r.jsx)(n.Text,{c:`red`,children:`Something went wrong.`}),(0,r.jsx)(n.Button,{variant:`light`,size:`xs`,onClick:e.refetch,children:`Retry`})]})}function p({view:e,slots:t}){let i=e.renderStatus.phase===`empty-filtered`,a=()=>d(e.table);return t?.Empty?(0,r.jsx)(r.Fragment,{children:t.Empty({filtered:i,clearFilters:a})}):i?(0,r.jsxs)(n.Stack,{align:`center`,gap:`xs`,children:[(0,r.jsx)(n.Text,{c:`dimmed`,children:`No matches.`}),(0,r.jsx)(n.Button,{variant:`subtle`,size:`xs`,onClick:a,children:`Clear filters`})]}):(0,r.jsx)(n.Text,{c:`dimmed`,children:`No results.`})}var m={base:1,sm:2,lg:3};function h({view:e,slots:t,renderCard:i,fallbackRole:a,enableSelection:o,loadingCardCount:s,cols:c=m,...l}){let{table:d,renderStatus:h}=e,v=o??d.options.enableRowSelection!==!1,y=s??Math.min(e.state.pagination.pageSize,6),b={cols:c,...l};switch(h.phase){case`loading`:return t?.LoadingCards?t.LoadingCards():(0,r.jsx)(n.SimpleGrid,{...b,children:Array.from({length:y},(e,t)=>(0,r.jsx)(n.Card,{withBorder:!0,padding:`md`,children:(0,r.jsxs)(n.Stack,{gap:`xs`,children:[(0,r.jsx)(n.Skeleton,{height:20,width:`60%`}),(0,r.jsx)(n.Skeleton,{height:12,width:`40%`}),(0,r.jsx)(n.Skeleton,{height:12})]})},t))});case`error`:return(0,r.jsx)(n.Center,{p:`xl`,children:(0,r.jsx)(f,{view:e,slots:t})});case`empty`:case`empty-filtered`:return(0,r.jsx)(n.Center,{p:`xl`,children:(0,r.jsx)(p,{view:e,slots:t})});default:{let e=u(d,{fallbackRole:a});return(0,r.jsx)(n.SimpleGrid,{...b,children:d.getRowModel().rows.map(a=>{let o=a.getIsSelected(),s={row:a,data:a.original,selected:o,toggleSelected:()=>a.toggleSelected()};if(i)return(0,r.jsx)(g,{children:i(s)},a.id);let c=(0,r.jsx)(_,{row:a,layout:e,selectionEnabled:v});return t?.Card?(0,r.jsx)(g,{children:t.Card({...s,children:c})},a.id):(0,r.jsx)(n.Card,{withBorder:!0,padding:`lg`,pos:`relative`,"data-selected":o||void 0,children:c},a.id)})})}}}function g({children:e}){return(0,r.jsx)(r.Fragment,{children:e})}function _({row:e,layout:a,selectionEnabled:o}){let s=new Map(e.getAllCells().map(e=>[e.column.id,e])),c=e=>{let n=s.get(e.id);return n?(0,t.flexRender)(n.column.columnDef.cell,n.getContext()):null};return(0,r.jsxs)(r.Fragment,{children:[o&&(0,r.jsx)(n.Checkbox,{"aria-label":`Select card`,checked:e.getIsSelected(),disabled:!e.getCanSelect(),onChange:e.getToggleSelectedHandler(),style:{position:`absolute`,top:8,right:8,zIndex:1}}),a.media.length>0&&(0,r.jsx)(n.Card.Section,{mb:`xs`,children:a.media.map(e=>(0,r.jsx)(n.Box,{children:c(e)},e.id))}),(0,r.jsxs)(n.Stack,{gap:`md`,children:[(a.title.length>0||a.subtitle.length>0)&&(0,r.jsxs)(n.Stack,{gap:4,children:[a.title.map(e=>(0,r.jsx)(n.Text,{fw:600,size:`lg`,lh:1.2,pr:o?28:0,children:c(e)},e.id)),a.subtitle.map(e=>(0,r.jsx)(n.Text,{size:`sm`,c:`dimmed`,children:c(e)},e.id))]}),a.badge.length>0&&(0,r.jsx)(n.Group,{gap:`xs`,children:a.badge.map(e=>(0,r.jsx)(i.Fragment,{children:c(e)},e.id))}),a.meta.length>0&&(0,r.jsx)(n.Stack,{gap:4,children:a.meta.map(e=>(0,r.jsxs)(n.Group,{justify:`space-between`,gap:`xs`,wrap:`nowrap`,children:[e.showLabel&&(0,r.jsx)(n.Text,{size:`sm`,c:`dimmed`,children:e.label}),(0,r.jsx)(n.Text,{size:`sm`,children:c(e)})]},e.id))})]})]})}function v({view:e,pageSizeOptions:t,showPageSize:i=!0,showRange:a=!0,pageSizeLabel:o=`Rows per page`,...s}){let{table:c}=e,{pageIndex:l,pageSize:u}=e.state.pagination,d=c.getRowCount(),f=c.getPageCount(),p=t??e.pageSizeOptions,m=d===0?0:l*u+1,h=Math.min((l+1)*u,d);return(0,r.jsxs)(n.Group,{justify:`space-between`,wrap:`wrap`,gap:`sm`,...s,children:[(0,r.jsxs)(n.Group,{gap:`sm`,wrap:`wrap`,children:[i&&(0,r.jsx)(n.Select,{"aria-label":o,data:p.map(String),value:String(u),onChange:e=>e&&c.setPageSize(Number(e)),w:80,comboboxProps:{withinPortal:!0}}),a&&(0,r.jsxs)(n.Text,{size:`sm`,c:`dimmed`,children:[m,`–`,h,` of `,d]})]}),(0,r.jsx)(n.Pagination,{value:l+1,total:Math.max(f,1),onChange:e=>c.setPageIndex(e-1),getControlProps:e=>({"aria-label":`${e} page`})})]})}function y({direction:e}){return(0,r.jsxs)(`svg`,{width:`14`,height:`14`,viewBox:`0 0 24 24`,fill:`none`,"aria-hidden":`true`,focusable:`false`,style:{flexShrink:0},children:[(0,r.jsx)(`title`,{children:`sort`}),(0,r.jsx)(`path`,{d:`M8 10l4-4 4 4`,stroke:`currentColor`,strokeWidth:`2`,strokeLinecap:`round`,strokeLinejoin:`round`,opacity:e===`asc`?1:.35}),(0,r.jsx)(`path`,{d:`M8 14l4 4 4-4`,stroke:`currentColor`,strokeWidth:`2`,strokeLinecap:`round`,strokeLinejoin:`round`,opacity:e===`desc`?1:.35})]})}function b({d:e,title:t}){return(0,r.jsxs)(`svg`,{width:`16`,height:`16`,viewBox:`0 0 24 24`,fill:`none`,stroke:`currentColor`,strokeWidth:`2`,strokeLinecap:`round`,strokeLinejoin:`round`,"aria-hidden":`true`,focusable:`false`,style:{flexShrink:0},children:[(0,r.jsx)(`title`,{children:t}),(0,r.jsx)(`path`,{d:e})]})}function x(){return(0,r.jsx)(b,{title:`search`,d:`M21 21l-4.3-4.3M11 19a8 8 0 110-16 8 8 0 010 16z`})}function S(){return(0,r.jsx)(b,{title:`filter`,d:`M3 5h18M7 12h10M10 19h4`})}function ee(){return(0,r.jsx)(b,{title:`open`,d:`M6 9l6 6 6-6`})}function C(){return(0,r.jsx)(b,{title:`close`,d:`M18 6L6 18M6 6l12 12`})}function w(){return(0,r.jsx)(b,{title:`pin left`,d:`M4 4v16M9 8h8M9 12h6M9 16h8`})}function T(){return(0,r.jsx)(b,{title:`pin right`,d:`M20 4v16M7 8h8M9 12h6M7 16h8`})}function E(e){let t=e.getIsPinned();if(t)return{position:`sticky`,[t]:t===`left`?e.getStart(`left`):e.getAfter(`right`),zIndex:1,backgroundColor:`var(--mantine-color-body)`}}function D({view:e,slots:i,enableSelection:a,loadingRowCount:o,...s}){let{table:c,renderStatus:l}=e,u=c.getVisibleLeafColumns(),d=a??c.options.enableRowSelection!==!1,m=u.length+ +!!d,h=o??Math.min(e.state.pagination.pageSize,8),g=()=>{switch(l.phase){case`loading`:return i?.LoadingTable?i.LoadingTable():(0,r.jsx)(n.Table.Tbody,{children:Array.from({length:h},(e,t)=>(0,r.jsxs)(n.Table.Tr,{children:[d&&(0,r.jsx)(n.Table.Td,{children:(0,r.jsx)(n.Skeleton,{height:16,width:16})}),u.map(e=>(0,r.jsx)(n.Table.Td,{children:(0,r.jsx)(n.Skeleton,{height:12})},e.id))]},t))});case`error`:return(0,r.jsx)(k,{colSpan:m,children:(0,r.jsx)(f,{view:e,slots:i})});case`empty`:case`empty-filtered`:return(0,r.jsx)(k,{colSpan:m,children:(0,r.jsx)(p,{view:e,slots:i})});default:return(0,r.jsx)(n.Table.Tbody,{children:c.getRowModel().rows.map(e=>{let a=(0,r.jsxs)(r.Fragment,{children:[d&&(0,r.jsx)(n.Table.Td,{children:(0,r.jsx)(n.Checkbox,{"aria-label":`Select row`,checked:e.getIsSelected(),disabled:!e.getCanSelect(),indeterminate:e.getIsSomeSelected(),onChange:e.getToggleSelectedHandler()})}),e.getVisibleCells().map(e=>{let i=e.column.columnDef.meta?.align;return(0,r.jsx)(n.Table.Td,{style:{...E(e.column),...i?{textAlign:i}:void 0},children:(0,t.flexRender)(e.column.columnDef.cell,e.getContext())},e.id)})]});return i?.Row?(0,r.jsx)(O,{children:i.Row({row:e,cells:a})},e.id):(0,r.jsx)(n.Table.Tr,{"data-selected":e.getIsSelected()||void 0,children:a},e.id)})})}};return(0,r.jsx)(`div`,{style:c.getIsSomeColumnsPinned()?{overflowX:`auto`}:void 0,children:(0,r.jsxs)(n.Table,{layout:`fixed`,...s,children:[(0,r.jsx)(n.Table.Thead,{children:c.getHeaderGroups().map(e=>(0,r.jsxs)(n.Table.Tr,{children:[d&&(0,r.jsx)(n.Table.Th,{style:{width:40},children:(0,r.jsx)(n.Checkbox,{"aria-label":`Select all rows on this page`,checked:c.getIsAllPageRowsSelected(),indeterminate:c.getIsSomePageRowsSelected()&&!c.getIsAllPageRowsSelected(),onChange:c.getToggleAllPageRowsSelectedHandler()})}),e.headers.map(e=>(0,r.jsx)(te,{header:e},e.id))]},e.id))}),g()]})})}function O({children:e}){return(0,r.jsx)(r.Fragment,{children:e})}function k({colSpan:e,children:t}){return(0,r.jsx)(n.Table.Tbody,{children:(0,r.jsx)(n.Table.Tr,{children:(0,r.jsx)(n.Table.Td,{colSpan:e,children:(0,r.jsx)(n.Center,{p:`xl`,children:t})})})})}function te({header:e}){let{column:i}=e,a=i.columnDef.meta?.align,o=i.getIsSorted(),s=i.getSortIndex(),c=s>0,l=e.isPlaceholder?null:(0,t.flexRender)(i.columnDef.header,e.getContext());return(0,r.jsx)(n.Table.Th,{style:{...E(i),...a?{textAlign:a}:void 0},"aria-sort":o===`asc`?`ascending`:o===`desc`?`descending`:void 0,children:i.getCanSort()?(0,r.jsxs)(n.UnstyledButton,{onClick:i.getToggleSortingHandler(),style:{display:`inline-flex`,alignItems:`center`,gap:4,font:`inherit`},children:[l,(0,r.jsx)(y,{direction:o}),c&&(0,r.jsx)(`span`,{role:`note`,style:{fontSize:`0.7em`,opacity:.6},"aria-label":`Sort priority ${s+1}`,children:s+1})]}):l})}var A=`(max-width: 0px)`;function j(e){let t=/^([\d.]+)(\D*)$/.exec(e.trim());if(!t)return`(max-width: ${e})`;let n=Number(t[1]),r=t[2]||`px`;return`(max-width: ${n-(r===`em`||r===`rem`?.01:.1)}${r})`}function ne(e){let t=(0,n.useMantineTheme)(),r=e?.forceCardsBelow,i=r?t.breakpoints[r]:void 0,o=(0,a.useMediaQuery)(i?j(i):A,!1);return!!i&&!!o}var M={text:e=>e==null?``:String(e),number:e=>e==null?``:new Intl.NumberFormat().format(Number(e)),currency:e=>e==null?``:new Intl.NumberFormat(void 0,{style:`currency`,currency:`USD`}).format(Number(e)),date:e=>{if(e==null)return``;let t=e instanceof Date?e:new Date(String(e));return Number.isNaN(t.getTime())?String(e):new Intl.DateTimeFormat().format(t)},boolean:e=>e==null?``:e?`Yes`:`No`};function N(e,t){if(e===`number`||e===`currency`){let n=new Intl.NumberFormat(void 0,e===`currency`?{style:`currency`,...t}:t);return e=>e==null?``:n.format(Number(e))}if(e===`date`){let e=new Intl.DateTimeFormat(void 0,t);return t=>{if(t==null)return``;let n=t instanceof Date?t:new Date(String(t));return Number.isNaN(n.getTime())?String(t):e.format(n)}}return M[e]}function P(e,t,n){let r=t??n?.[e];return r?typeof r==`function`?r:N(e,r):M[e]}function F({facet:e,value:t,onChange:i}){let a=Array.isArray(t)?t:null;return(0,r.jsx)(n.Stack,{gap:4,children:e.ranges.map(e=>{let t=a!=null&&a[0]===e.from&&a[1]===e.to;return(0,r.jsx)(n.UnstyledButton,{onClick:()=>i(t?void 0:[e.from,e.to]),style:{padding:`4px 8px`,borderRadius:4,background:t?`var(--mantine-color-blue-light)`:void 0},children:(0,r.jsxs)(n.Group,{gap:`xs`,justify:`space-between`,wrap:`nowrap`,children:[(0,r.jsx)(n.Text,{size:`sm`,children:e.label}),(0,r.jsx)(n.Badge,{size:`sm`,variant:`light`,color:e.count===0?`gray`:`blue`,children:e.count})]})},e.label)})})}function I({label:e,onClear:t}){return(0,r.jsxs)(n.Group,{justify:`space-between`,wrap:`nowrap`,children:[(0,r.jsx)(n.Text,{size:`sm`,fw:500,children:e}),(0,r.jsx)(n.Anchor,{component:`button`,type:`button`,size:`xs`,c:`dimmed`,onClick:t,children:`clear`})]})}function L(e){return e?typeof e==`string`?e:e.toISOString().split(`T`)[0]??null:null}function R(e){return Array.isArray(e)?[e[0],e[1]]:[null,null]}function z(e,t){return e.values.length>0?e.values.map(e=>({value:e.value,label:`${e.label??e.value} (${e.count})`,disabled:e.count===0})):t??[]}function B({column:e,facet:t}){let i=e.columnDef.meta?.filter;if(!i)return null;let a=c(e),s=i.placeholder??a,l=e.getFilterValue(),u=t=>e.setFilterValue(t);if(i.component){let t=i.component;return(0,r.jsx)(n.Input.Wrapper,{label:a,children:(0,r.jsx)(t,{value:l,onChange:u,column:e})})}let d=t?.type===`values`?t:void 0,f=t?.type===`ranges`?t:void 0;switch(i.variant){case`select`:return(0,r.jsx)(n.Select,{label:a,placeholder:s,clearable:!0,data:d?z(d,i.options):i.options??[],value:l??null,onChange:e=>u(e??void 0)});case`multiselect`:return(0,r.jsx)(n.MultiSelect,{label:a,placeholder:s,data:d?z(d,i.options):i.options??[],value:l??[],onChange:e=>u(e.length>0?e:void 0)});case`boolean`:{let e=l==null?`all`:l?`yes`:`no`,t=d?.values.find(e=>e.value===`true`),i=d?.values.find(e=>e.value===`false`),o=t?`Yes (${t.count})`:`Yes`,s=i?`No (${i.count})`:`No`;return(0,r.jsx)(n.Input.Wrapper,{label:a,children:(0,r.jsx)(n.SegmentedControl,{fullWidth:!0,size:`xs`,data:[{value:`all`,label:`All`},{value:`yes`,label:o},{value:`no`,label:s}],value:e,onChange:e=>{u(e===`all`?void 0:e===`yes`)}})})}case`numberRange`:{let[t,o]=R(l),s=i.min??f?.min,c=i.max??f?.max,d=s!=null&&c!=null,p=l!=null,m=f?(0,r.jsx)(F,{facet:f,value:l,onChange:u}):null,h=p?(0,r.jsx)(I,{label:a,onClear:()=>u(void 0)}):a;if(d){let l=[t??s,o??c],d=e.columnDef.meta?.dataType,f=d?P(d,e.columnDef.meta?.format,void 0):e=>String(e);return(0,r.jsx)(n.Input.Wrapper,{label:h,children:(0,r.jsxs)(n.Stack,{gap:`xs`,children:[m,(0,r.jsx)(n.RangeSlider,{min:s,max:c,step:i.step??1,value:l,onChange:([e,t])=>{u(e===s&&t===c?void 0:[e,t])},label:e=>f(e),minRange:i.step??1,"aria-label":a})]})})}if(m)return(0,r.jsx)(n.Input.Wrapper,{label:h,children:m});let g=e=>u(e[0]==null&&e[1]==null?void 0:e),_=e=>e===``||e==null?null:Number(e);return(0,r.jsx)(n.Input.Wrapper,{label:a,children:(0,r.jsxs)(n.Group,{gap:4,wrap:`nowrap`,children:[(0,r.jsx)(n.NumberInput,{"aria-label":`${a} minimum`,placeholder:`Min`,value:t??``,onChange:e=>g([_(e),o]),w:90}),(0,r.jsx)(n.NumberInput,{"aria-label":`${a} maximum`,placeholder:`Max`,value:o??``,onChange:e=>g([t,_(e)]),w:90})]})})}case`date`:return(0,r.jsx)(o.DatePickerInput,{label:a,placeholder:s,clearable:!0,popoverProps:{withinPortal:!1},value:l?new Date(l):null,onChange:e=>u(L(e)??void 0)});case`dateRange`:{let[e,t]=R(l),i=[e?new Date(e):null,t?new Date(t):null],c=l==null?a:(0,r.jsx)(I,{label:a,onClear:()=>u(void 0)});return(0,r.jsx)(n.Input.Wrapper,{label:c,children:(0,r.jsxs)(n.Stack,{gap:`xs`,children:[f&&(0,r.jsx)(F,{facet:f,value:l,onChange:u}),(0,r.jsx)(o.DatePickerInput,{type:`range`,popoverProps:{withinPortal:!1},placeholder:s,clearable:!0,value:i,onChange:([e,t])=>{let n=L(e),r=L(t);u(n==null&&r==null?void 0:[n,r])}})]})})}default:return(0,r.jsx)(n.TextInput,{label:a,placeholder:s,value:l??``,onChange:e=>u(e.currentTarget.value||void 0)})}}function V({view:e}){return e.state.columnFilters.length>0?(0,r.jsx)(n.Button,{variant:`subtle`,size:`compact-sm`,color:`gray`,leftSection:(0,r.jsx)(C,{}),onClick:()=>e.table.resetColumnFilters(),children:`Reset filters`}):null}function H(e){return e>0?`Filters (${e})`:`Filters`}function U({view:e,controls:t}){return(0,r.jsxs)(n.Stack,{gap:`sm`,style:{minWidth:240},children:[t,(0,r.jsx)(n.Group,{justify:`flex-end`,children:(0,r.jsx)(V,{view:e})})]})}function W({view:e,inlineThreshold:t}){let i=e.filterableColumns,o=(0,a.useMediaQuery)(j((0,n.useMantineTheme)().breakpoints.sm),!1),[s,{open:c,close:l}]=(0,a.useDisclosure)(!1);if(i.length===0)return null;let u=i.map(t=>(0,r.jsx)(B,{column:t,facet:e.facets[t.id]},t.id)),d=e.state.columnFilters.length;return o?(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(n.Button,{variant:`default`,leftSection:(0,r.jsx)(S,{}),onClick:c,children:H(d)}),(0,r.jsx)(n.Drawer,{opened:s,onClose:l,title:`Filters`,position:`bottom`,size:`auto`,children:(0,r.jsx)(U,{view:e,controls:u})})]}):i.length<=t?(0,r.jsxs)(r.Fragment,{children:[u,(0,r.jsx)(V,{view:e})]}):(0,r.jsxs)(n.Popover,{position:`bottom-start`,closeOnClickOutside:!1,children:[(0,r.jsx)(n.Popover.Target,{children:(0,r.jsx)(n.Button,{variant:`default`,leftSection:(0,r.jsx)(S,{}),children:H(d)})}),(0,r.jsx)(n.Popover.Dropdown,{children:(0,r.jsx)(U,{view:e,controls:u})})]})}function re({view:e}){let{sortableColumns:t,state:i,table:a}=e,o=i.sorting[0];return(0,r.jsxs)(n.Group,{gap:4,wrap:`nowrap`,children:[(0,r.jsx)(n.Select,{"aria-label":`Sort by`,placeholder:`Sort by`,clearable:!0,data:t.map(e=>({value:e.id,label:c(e)})),value:o?.id??null,onChange:e=>a.setSorting(e?[{id:e,desc:o?.desc??!1}]:[])}),(0,r.jsx)(n.ActionIcon,{"aria-label":`Toggle sort direction`,variant:`default`,size:`lg`,disabled:!o,onClick:()=>o&&a.setSorting([{id:o.id,desc:!o.desc}]),children:(0,r.jsx)(y,{direction:o?o.desc?`desc`:`asc`:!1})})]})}function ie({view:e,lockSwitcherOnMobile:t}){return e.isMobileForced&&t?null:(0,r.jsx)(n.SegmentedControl,{"aria-label":`View`,value:e.view,disabled:e.isMobileForced,onChange:t=>{(t===`table`||t===`cards`)&&e.setView(t)},data:[{value:`table`,label:`Table`},{value:`cards`,label:`Cards`}]})}function G({column:e}){if(!e.getCanPin())return null;let t=e.getIsPinned();return(0,r.jsxs)(n.Group,{gap:2,children:[(0,r.jsx)(n.ActionIcon,{size:`xs`,variant:t===`left`?`filled`:`subtle`,color:t===`left`?`blue`:`gray`,"aria-label":`Pin ${c(e)} left`,onClick:()=>e.pin(t===`left`?!1:`left`),children:(0,r.jsx)(w,{})}),(0,r.jsx)(n.ActionIcon,{size:`xs`,variant:t===`right`?`filled`:`subtle`,color:t===`right`?`blue`:`gray`,"aria-label":`Pin ${c(e)} right`,onClick:()=>e.pin(t===`right`?!1:`right`),children:(0,r.jsx)(T,{})})]})}function K({view:e}){let t=e.table.getAllLeafColumns().filter(e=>e.getCanHide());return t.length===0?null:(0,r.jsxs)(n.Menu,{closeOnItemClick:!1,withinPortal:!0,position:`bottom-end`,children:[(0,r.jsx)(n.Menu.Target,{children:(0,r.jsx)(n.Button,{variant:`default`,rightSection:(0,r.jsx)(ee,{}),children:`Columns`})}),(0,r.jsx)(n.Menu.Dropdown,{children:(0,r.jsx)(n.Stack,{gap:`xs`,p:`xs`,children:t.map(e=>(0,r.jsxs)(n.Group,{gap:`xs`,justify:`space-between`,wrap:`nowrap`,children:[(0,r.jsx)(n.Checkbox,{label:c(e),checked:e.getIsVisible(),onChange:t=>e.toggleVisibility(t.currentTarget.checked)}),(0,r.jsx)(G,{column:e})]},e.id))})})]})}function q({view:e,searchPlaceholder:t=`Search…`,filterInlineThreshold:i=3,lockSwitcherOnMobile:a,showSearch:o,showFilters:s,showSort:c,showVisibility:l,showViewSwitcher:u,...d}){let{table:f,state:p}=e,m=o??f.options.enableGlobalFilter!==!1,h=s??e.filterableColumns.length>0,g=c??e.sortableColumns.length>0,_=l??!0,v=u??!0;return(0,r.jsxs)(n.Group,{justify:`space-between`,wrap:`wrap`,gap:`sm`,...d,children:[(0,r.jsxs)(n.Group,{wrap:`wrap`,gap:`sm`,children:[m&&(0,r.jsx)(n.TextInput,{"aria-label":`Search`,placeholder:t,leftSection:(0,r.jsx)(x,{}),value:p.globalFilter,onChange:e=>f.setGlobalFilter(e.currentTarget.value),rightSection:p.globalFilter?(0,r.jsx)(n.CloseButton,{size:`sm`,"aria-label":`Clear search`,onClick:()=>f.setGlobalFilter(``)}):void 0}),h&&(0,r.jsx)(W,{view:e,inlineThreshold:i}),g&&(0,r.jsx)(re,{view:e})]}),(0,r.jsxs)(n.Group,{wrap:`wrap`,gap:`sm`,children:[_&&(0,r.jsx)(K,{view:e}),v&&(0,r.jsx)(ie,{view:e,lockSwitcherOnMobile:a})]})]})}var J=(0,i.createContext)(null),ae=J.Provider;function Y(){let e=(0,i.useContext)(J);if(!e)throw Error(`DataView.Toolbar / DataView.Body / DataView.Pagination must be rendered inside <DataView>.`);return e}function X({view:e,slots:t,renderCard:a,fallbackRole:o,lockSwitcherOnMobile:s,children:c,...l}){return(0,r.jsx)(ae,{value:(0,i.useMemo)(()=>({view:e,slots:t,renderCard:a,fallbackRole:o,lockSwitcherOnMobile:s}),[e,t,a,o,s]),children:(0,r.jsx)(n.Stack,{...l,children:c??(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(oe,{}),(0,r.jsx)(ce,{}),(0,r.jsx)(se,{}),(0,r.jsx)(Z,{})]})})})}function oe(e){let{view:t,lockSwitcherOnMobile:n}=Y();return(0,r.jsx)(q,{view:t,lockSwitcherOnMobile:n,...e})}function se({tableProps:e,cardsProps:t}){let{view:n,slots:i,renderCard:a,fallbackRole:o}=Y();return n.view===`cards`?(0,r.jsx)(h,{view:n,slots:i,renderCard:a,fallbackRole:o,...t}):(0,r.jsx)(D,{view:n,slots:i,...e})}function Z(e){let{view:t}=Y();return(0,r.jsx)(v,{view:t,...e})}function ce(e){let{view:t,slots:n}=Y();return(0,r.jsx)(s,{view:t,slots:n,...e})}X.Toolbar=oe,X.BulkActions=ce,X.Body=se,X.Pagination=Z;function le(e){return e.replace(/_/g,` `).replace(/([a-z])([A-Z])/g,`$1 $2`).replace(/\b\w/g,e=>e.toUpperCase())}var ue={text:{dataType:`text`,filterVariant:`text`},number:{dataType:`number`,filterVariant:`numberRange`,align:`right`},currency:{dataType:`currency`,filterVariant:`numberRange`,align:`right`},date:{dataType:`date`,filterVariant:`dateRange`},boolean:{dataType:`boolean`,filterVariant:`boolean`},select:{filterVariant:`select`},multiselect:{filterVariant:`multiselect`}},de=class{cols=[];helper=(0,t.createColumnHelper)();add(e,t,n){let r=ue[e];if(!r)throw Error(`Unknown preset: ${e}`);let i=n?.header??le(t),a=n?.align??r.align,o;if(n?.filter===!1)o=void 0;else{let e={variant:r.filterVariant,...n?.options?{options:n.options}:{}};o=n?.filter?{...e,...n.filter}:e}let s=this.helper.accessor(t,{header:i,...n?.cell?{cell:n.cell}:{},...n?.enableSorting===!1?{enableSorting:!1}:{},meta:{label:i,...r.dataType?{dataType:r.dataType}:{},...a?{align:a}:{},...o?{filter:o}:{},...n?.format?{format:n.format}:{},...n?.card?{card:{role:n.card,...n.cardOrder==null?{}:{order:n.cardOrder}}}:{}}});return this.cols.push(s),this}text(e,t){return this.add(`text`,e,t)}number(e,t){return this.add(`number`,e,t)}currency(e,t){return this.add(`currency`,e,t)}date(e,t){return this.add(`date`,e,t)}boolean(e,t){return this.add(`boolean`,e,t)}select(e,t){return this.add(`select`,e,t)}multiselect(e,t){return this.add(`multiselect`,e,t)}custom(e){return this.cols.push(e),this}build(){return this.cols}};function fe(){return new de}function Q(e){let t=e==null?``:String(e);return t.includes(`,`)||t.includes(`"`)||t.includes(`
|
|
2
|
-
`)?`"${t.replace(/"/g,`""`)}"`:t}function pe(e,t){let{filename:n=`export.csv`,separator:r=`,`,formatted:i=!1,formatDefaults:a}=t??{},o=e.getVisibleLeafColumns().filter(e=>e.id!==`_select`),s=[o.map(e=>Q(c(e))),...e.getRowModel().rows.map(e=>o.map(t=>{let n=e.getAllCells().find(e=>e.column.id===t.id)?.getValue();return i&&t.columnDef.meta?.dataType?Q(
|
|
3
|
-
`),l=new Blob([s],{type:`text/csv;charset=utf-8;`}),u=URL.createObjectURL(l),d=document.createElement(`a`);d.href=u,d.download=n,d.click(),URL.revokeObjectURL(u)}function me(t){return t?{adapter:t.adapter,serializer:{...e.t,...t.serialize},include:e.r(t.include)}:null}function he(t,n,r){if(!t)return{};try{return e.n(t.adapter.read(),{serializer:t.serializer,include:t.include,getFilterMeta:r,current:n})}catch{return{}}}function ge({config:t,state:n,applyPatch:r,getFilterMeta:a}){let o=(0,i.useRef)(n);o.current=n;let s=(0,i.useRef)(r);s.current=r;let c=(0,i.useRef)(a);c.current=a;let l=(0,i.useRef)(t);l.current=t;let u=t?e.i(n,{serializer:t.serializer,include:t.include,getFilterMeta:a}):null;(0,i.useEffect)(()=>{let t=l.current;if(!t||!u)return;let n=e.a(t.adapter.read(),t.serializer,t.include);t.adapter.write({...n,...u},{replace:!0})},[u?JSON.stringify(u):``]),(0,i.useEffect)(()=>{if(!t)return;let{adapter:n,serializer:r,include:i}=t;return n.subscribe?.(()=>{let t=e.n(n.read(),{serializer:r,include:i,getFilterMeta:c.current,current:o.current});s.current(t)})},[t])}function _e(e){return e.columnFilters.length>0||e.globalFilter.trim()!==``}function ve({status:e,error:t,pageRowCount:n,state:r}){return e===`error`?{phase:`error`,error:t}:e===`loading`||e===`idle`?{phase:`loading`}:n===0?_e(r)?{phase:`empty-filtered`}:{phase:`empty`}:{phase:`ready`}}var $=300,ye=[10,25,50,100],be=10;function xe(e){return e==null?{globalFilter:$,columnFilters:$}:typeof e==`number`?{globalFilter:e,columnFilters:e}:{globalFilter:e.globalFilter??$,columnFilters:e.columnFilters??$}}function Se(e){if(e.id)return e.id;if(`accessorKey`in e&&e.accessorKey!=null)return String(e.accessorKey)}function Ce(e){let t=new Map;for(let n of e){let e=Se(n),r=n.meta?.filter;e&&r&&t.set(e,r)}return e=>t.get(e)}function we(e){return{pagination:{pageIndex:0,pageSize:e.pageSizeOptions?.[0]??be},sorting:[],columnFilters:[],globalFilter:``,rowSelection:{},columnVisibility:{},columnPinning:{left:[],right:[]},view:e.defaultView??`table`,...e.initialState}}function Te(e){let{columns:n,rows:r,rowCount:a,status:o,error:s,getRowId:c,onRequestChange:l,state:u,onStateChange:d,enableRowSelection:f,enableGlobalFilter:p=!0,debounce:m,responsive:h,formatDefaults:g,facets:_}=e,
|
|
1
|
+
Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("./serializer-CGmBq-Jz.cjs");let t=require("@tanstack/react-table"),n=require("@mantine/core"),r=require("react/jsx-runtime"),i=require("react"),a=require("@mantine/hooks"),o=require("@mantine/dates");require("@mantine/dates/styles.css");function s({view:e,slots:t,...i}){let{selection:a}=e;return a.count===0?null:(0,r.jsx)(n.Paper,{withBorder:!0,p:`xs`,radius:`sm`,role:`region`,"aria-label":`Bulk actions`,...i,children:(0,r.jsxs)(n.Group,{justify:`space-between`,wrap:`wrap`,gap:`sm`,children:[(0,r.jsxs)(n.Group,{gap:`sm`,children:[(0,r.jsxs)(n.Text,{size:`sm`,fw:500,children:[a.count,` selected`]}),(0,r.jsx)(n.Button,{variant:`subtle`,size:`xs`,onClick:a.clear,children:`Clear`})]}),t?.BulkActions&&(0,r.jsx)(n.Group,{gap:`xs`,children:t.BulkActions(a)})]})})}function c(e){let{meta:t,header:n}=e.columnDef;return t?.label?t.label:typeof n==`string`?n:e.id}function l(e,t,n){return t?t===`hidden`?null:t:e.accessorFn==null||n===`hidden`?null:n}function u(e,t={}){let n=t.fallbackRole??`meta`,r={title:[],subtitle:[],media:[],badge:[],meta:[]};e.getVisibleLeafColumns().forEach((e,t)=>{let i=e.columnDef.meta?.card,a=l(e,i?.role,n);a&&r[a].push({order:i?.order??t,index:t,field:{id:e.id,column:e,label:c(e),showLabel:i?.showLabel??a===`meta`}})});let i=e=>e.sort((e,t)=>e.order-t.order||e.index-t.index).map(e=>e.field);return{title:i(r.title),subtitle:i(r.subtitle),media:i(r.media),badge:i(r.badge),meta:i(r.meta)}}function d(e,t){let n=(0,i.useRef)([]),r=(0,i.useRef)(!1),a=(0,i.useRef)(0),o=e.map(e=>e.id),s=new Set;if(t&&r.current){let e=n.current,t=new Set(e);if(o.length!==e.length||o.some((t,n)=>t!==e[n]))if(a.current++,o.length===e.length&&o.every(e=>t.has(e)))for(let e of o)s.add(e);else for(let e of o)t.has(e)||s.add(e)}return n.current=o,r.current=!0,{rows:e,entering:s,generation:a.current}}function f(e){e.resetColumnFilters(),e.setGlobalFilter(``)}function p({view:e,slots:t}){return t?.ErrorState?(0,r.jsx)(r.Fragment,{children:t.ErrorState({error:e.error,retry:e.refetch})}):(0,r.jsxs)(n.Stack,{align:`center`,gap:`xs`,children:[(0,r.jsx)(n.Text,{c:`red`,children:`Something went wrong.`}),(0,r.jsx)(n.Button,{variant:`light`,size:`xs`,onClick:e.refetch,children:`Retry`})]})}function m({view:e,slots:t}){let i=e.renderStatus.phase===`empty-filtered`,a=()=>f(e.table);return t?.Empty?(0,r.jsx)(r.Fragment,{children:t.Empty({filtered:i,clearFilters:a})}):i?(0,r.jsxs)(n.Stack,{align:`center`,gap:`xs`,children:[(0,r.jsx)(n.Text,{c:`dimmed`,children:`No matches.`}),(0,r.jsx)(n.Button,{variant:`subtle`,size:`xs`,onClick:a,children:`Clear filters`})]}):(0,r.jsx)(n.Text,{c:`dimmed`,children:`No results.`})}var h={base:1,sm:2,lg:3};function g({view:e,slots:t,renderCard:i,fallbackRole:a,enableSelection:o,loadingCardCount:s,animateRows:c=!1,cols:l=h,...f}){let{table:g,renderStatus:v}=e,y=o??g.options.enableRowSelection!==!1,b=s??Math.min(e.state.pagination.pageSize,6),x={cols:l,...f},S=d(g.getRowModel().rows,c),C=e=>{let o=u(g,{fallbackRole:a});return(0,r.jsx)(n.SimpleGrid,{"data-changed":c||void 0,...x,children:e.map(e=>{let a=e.getIsSelected(),s={row:e,data:e.original,selected:a,toggleSelected:()=>e.toggleSelected()},c=S.entering.has(e.id)||void 0;if(i)return(0,r.jsx)(`div`,{"data-entering":c,children:i(s)},e.id);let l=(0,r.jsx)(_,{row:e,layout:o,selectionEnabled:y});return t?.Card?(0,r.jsx)(`div`,{"data-entering":c,children:t.Card({...s,children:l})},e.id):(0,r.jsx)(n.Card,{withBorder:!0,padding:`lg`,pos:`relative`,"data-selected":a||void 0,"data-entering":c,children:l},e.id)})},S.generation)};if(c&&v.phase===`loading`&&S.rows.length>0)return C(S.rows);switch(v.phase){case`loading`:return t?.LoadingCards?t.LoadingCards():(0,r.jsx)(n.SimpleGrid,{...x,children:Array.from({length:b},(e,t)=>(0,r.jsx)(n.Card,{withBorder:!0,padding:`md`,children:(0,r.jsxs)(n.Stack,{gap:`xs`,children:[(0,r.jsx)(n.Skeleton,{height:20,width:`60%`}),(0,r.jsx)(n.Skeleton,{height:12,width:`40%`}),(0,r.jsx)(n.Skeleton,{height:12})]})},t))});case`error`:return(0,r.jsx)(n.Center,{p:`xl`,children:(0,r.jsx)(p,{view:e,slots:t})});case`empty`:case`empty-filtered`:return(0,r.jsx)(n.Center,{p:`xl`,children:(0,r.jsx)(m,{view:e,slots:t})});default:return C(S.rows)}}function _({row:e,layout:a,selectionEnabled:o}){let s=new Map(e.getAllCells().map(e=>[e.column.id,e])),c=e=>{let n=s.get(e.id);return n?(0,t.flexRender)(n.column.columnDef.cell,n.getContext()):null};return(0,r.jsxs)(r.Fragment,{children:[o&&(0,r.jsx)(n.Checkbox,{"aria-label":`Select card`,checked:e.getIsSelected(),disabled:!e.getCanSelect(),onChange:e.getToggleSelectedHandler(),style:{position:`absolute`,top:8,right:8,zIndex:1}}),a.media.length>0&&(0,r.jsx)(n.Card.Section,{mb:`xs`,children:a.media.map(e=>(0,r.jsx)(n.Box,{children:c(e)},e.id))}),(0,r.jsxs)(n.Stack,{gap:`md`,children:[(a.title.length>0||a.subtitle.length>0)&&(0,r.jsxs)(n.Stack,{gap:4,children:[a.title.map(e=>(0,r.jsx)(n.Text,{fw:600,size:`lg`,lh:1.2,pr:o?28:0,children:c(e)},e.id)),a.subtitle.map(e=>(0,r.jsx)(n.Text,{size:`sm`,c:`dimmed`,children:c(e)},e.id))]}),a.badge.length>0&&(0,r.jsx)(n.Group,{gap:`xs`,children:a.badge.map(e=>(0,r.jsx)(i.Fragment,{children:c(e)},e.id))}),a.meta.length>0&&(0,r.jsx)(n.Stack,{gap:4,children:a.meta.map(e=>(0,r.jsxs)(n.Group,{justify:`space-between`,gap:`xs`,wrap:`nowrap`,children:[e.showLabel&&(0,r.jsx)(n.Text,{size:`sm`,c:`dimmed`,children:e.label}),(0,r.jsx)(n.Text,{size:`sm`,children:c(e)})]},e.id))})]})]})}function v({view:e,pageSizeOptions:t,showPageSize:i=!0,showRange:a=!0,pageSizeLabel:o=`Rows per page`,...s}){let{table:c}=e,{pageIndex:l,pageSize:u}=e.state.pagination,d=c.getRowCount(),f=c.getPageCount(),p=t??e.pageSizeOptions,m=d===0?0:l*u+1,h=Math.min((l+1)*u,d);return(0,r.jsxs)(n.Group,{justify:`space-between`,wrap:`wrap`,gap:`sm`,...s,children:[(0,r.jsxs)(n.Group,{gap:`sm`,wrap:`wrap`,children:[i&&(0,r.jsx)(n.Select,{"aria-label":o,data:p.map(String),value:String(u),onChange:e=>e&&c.setPageSize(Number(e)),w:80,comboboxProps:{withinPortal:!0}}),a&&(0,r.jsxs)(n.Text,{size:`sm`,c:`dimmed`,children:[m,`–`,h,` of `,d]})]}),(0,r.jsx)(n.Pagination,{value:l+1,total:Math.max(f,1),onChange:e=>c.setPageIndex(e-1),getControlProps:e=>({"aria-label":`${e} page`})})]})}function y({direction:e}){return(0,r.jsxs)(`svg`,{width:`14`,height:`14`,viewBox:`0 0 24 24`,fill:`none`,"aria-hidden":`true`,focusable:`false`,style:{flexShrink:0},children:[(0,r.jsx)(`title`,{children:`sort`}),(0,r.jsx)(`path`,{d:`M8 10l4-4 4 4`,stroke:`currentColor`,strokeWidth:`2`,strokeLinecap:`round`,strokeLinejoin:`round`,opacity:e===`asc`?1:.35}),(0,r.jsx)(`path`,{d:`M8 14l4 4 4-4`,stroke:`currentColor`,strokeWidth:`2`,strokeLinecap:`round`,strokeLinejoin:`round`,opacity:e===`desc`?1:.35})]})}function b({d:e,title:t}){return(0,r.jsxs)(`svg`,{width:`16`,height:`16`,viewBox:`0 0 24 24`,fill:`none`,stroke:`currentColor`,strokeWidth:`2`,strokeLinecap:`round`,strokeLinejoin:`round`,"aria-hidden":`true`,focusable:`false`,style:{flexShrink:0},children:[(0,r.jsx)(`title`,{children:t}),(0,r.jsx)(`path`,{d:e})]})}function x(){return(0,r.jsx)(b,{title:`search`,d:`M21 21l-4.3-4.3M11 19a8 8 0 110-16 8 8 0 010 16z`})}function S(){return(0,r.jsx)(b,{title:`filter`,d:`M3 5h18M7 12h10M10 19h4`})}function C(){return(0,r.jsx)(b,{title:`open`,d:`M6 9l6 6 6-6`})}function w(){return(0,r.jsx)(b,{title:`close`,d:`M18 6L6 18M6 6l12 12`})}function T(){return(0,r.jsx)(b,{title:`pin left`,d:`M4 4v16M9 8h8M9 12h6M9 16h8`})}function ee(){return(0,r.jsx)(b,{title:`pin right`,d:`M20 4v16M7 8h8M9 12h6M7 16h8`})}function E(e){let t=e.getIsPinned();if(t)return{position:`sticky`,[t]:t===`left`?e.getStart(`left`):e.getAfter(`right`),zIndex:1,backgroundColor:`var(--mantine-color-body)`}}function D({view:e,slots:i,enableSelection:a,loadingRowCount:o,disableWhileLoading:s=!0,animateRows:c=!1,...l}){let{table:u,renderStatus:f}=e,h=s&&e.status===`loading`,g=d(u.getRowModel().rows,c),_=u.getVisibleLeafColumns(),v=a??u.options.enableRowSelection!==!1,y=_.length+ +!!v,b=o??Math.min(e.state.pagination.pageSize,8),x=e=>(0,r.jsx)(n.Table.Tbody,{"data-changed":c||void 0,children:e.map(e=>{let a=g.entering.has(e.id)||void 0,o=(0,r.jsxs)(r.Fragment,{children:[v&&(0,r.jsx)(n.Table.Td,{children:(0,r.jsx)(n.Checkbox,{"aria-label":`Select row`,checked:e.getIsSelected(),disabled:!e.getCanSelect(),indeterminate:e.getIsSomeSelected(),onChange:e.getToggleSelectedHandler()})}),e.getVisibleCells().map(e=>{let i=e.column.columnDef.meta?.align;return(0,r.jsx)(n.Table.Td,{style:{...E(e.column),...i?{textAlign:i}:void 0},children:(0,t.flexRender)(e.column.columnDef.cell,e.getContext())},e.id)})]});return i?.Row?(0,r.jsx)(O,{children:i.Row({row:e,cells:o})},e.id):(0,r.jsx)(n.Table.Tr,{"data-selected":e.getIsSelected()||void 0,"data-entering":a,children:o},e.id)})},g.generation),S=()=>{if(c&&f.phase===`loading`&&g.rows.length>0)return x(g.rows);switch(f.phase){case`loading`:return i?.LoadingTable?i.LoadingTable():(0,r.jsx)(n.Table.Tbody,{children:Array.from({length:b},(e,t)=>(0,r.jsxs)(n.Table.Tr,{children:[v&&(0,r.jsx)(n.Table.Td,{children:(0,r.jsx)(n.Skeleton,{height:16,width:16})}),_.map(e=>(0,r.jsx)(n.Table.Td,{children:(0,r.jsx)(n.Skeleton,{height:12})},e.id))]},t))});case`error`:return(0,r.jsx)(k,{colSpan:y,children:(0,r.jsx)(p,{view:e,slots:i})});case`empty`:case`empty-filtered`:return(0,r.jsx)(k,{colSpan:y,children:(0,r.jsx)(m,{view:e,slots:i})});default:return x(g.rows)}};return(0,r.jsx)(`div`,{style:u.getIsSomeColumnsPinned()?{overflowX:`auto`}:void 0,children:(0,r.jsxs)(n.Table,{layout:`fixed`,...l,children:[(0,r.jsx)(n.Table.Thead,{children:u.getHeaderGroups().map(e=>(0,r.jsxs)(n.Table.Tr,{children:[v&&(0,r.jsx)(n.Table.Th,{style:{width:40},children:(0,r.jsx)(n.Checkbox,{"aria-label":`Select all rows on this page`,checked:u.getIsAllPageRowsSelected(),indeterminate:u.getIsSomePageRowsSelected()&&!u.getIsAllPageRowsSelected(),onChange:u.getToggleAllPageRowsSelectedHandler()})}),e.headers.map(e=>(0,r.jsx)(A,{header:e,disabled:h},e.id))]},e.id))}),S()]})})}function O({children:e}){return(0,r.jsx)(r.Fragment,{children:e})}function k({colSpan:e,children:t}){return(0,r.jsx)(n.Table.Tbody,{children:(0,r.jsx)(n.Table.Tr,{children:(0,r.jsx)(n.Table.Td,{colSpan:e,children:(0,r.jsx)(n.Center,{p:`xl`,children:t})})})})}function A({header:e,disabled:i}){let{column:a}=e,o=a.columnDef.meta?.align,s=a.getIsSorted(),c=a.getSortIndex(),l=c>0,u=e.isPlaceholder?null:(0,t.flexRender)(a.columnDef.header,e.getContext()),d=a.getCanSort()&&!i;return(0,r.jsx)(n.Table.Th,{style:{...E(a),...o?{textAlign:o}:void 0},"aria-sort":s===`asc`?`ascending`:s===`desc`?`descending`:void 0,children:d?(0,r.jsxs)(n.UnstyledButton,{onClick:a.getToggleSortingHandler(),style:{display:`inline-flex`,alignItems:`center`,gap:4,font:`inherit`},children:[u,(0,r.jsx)(y,{direction:s}),l&&(0,r.jsx)(`span`,{role:`note`,style:{fontSize:`0.7em`,opacity:.6},"aria-label":`Sort priority ${c+1}`,children:c+1})]}):(0,r.jsxs)(`span`,{style:{display:`inline-flex`,alignItems:`center`,gap:4,...i?{opacity:.5}:{}},children:[u,s&&(0,r.jsx)(y,{direction:s})]})})}var te=`(max-width: 0px)`;function j(e){let t=/^([\d.]+)(\D*)$/.exec(e.trim());if(!t)return`(max-width: ${e})`;let n=Number(t[1]),r=t[2]||`px`;return`(max-width: ${n-(r===`em`||r===`rem`?.01:.1)}${r})`}function ne(e){let t=(0,n.useMantineTheme)(),r=e?.forceCardsBelow,i=r?t.breakpoints[r]:void 0,o=(0,a.useMediaQuery)(i?j(i):te,!1);return!!i&&!!o}var M={text:e=>e==null?``:String(e),number:e=>e==null?``:new Intl.NumberFormat().format(Number(e)),currency:e=>e==null?``:new Intl.NumberFormat(void 0,{style:`currency`,currency:`USD`}).format(Number(e)),date:e=>{if(e==null)return``;let t=e instanceof Date?e:new Date(String(e));return Number.isNaN(t.getTime())?String(e):new Intl.DateTimeFormat().format(t)},boolean:e=>e==null?``:e?`Yes`:`No`};function re(e,t){if(e===`number`||e===`currency`){let n=new Intl.NumberFormat(void 0,e===`currency`?{style:`currency`,...t}:t);return e=>e==null?``:n.format(Number(e))}if(e===`date`){let e=new Intl.DateTimeFormat(void 0,t);return t=>{if(t==null)return``;let n=t instanceof Date?t:new Date(String(t));return Number.isNaN(n.getTime())?String(t):e.format(n)}}return M[e]}function N(e,t,n){let r=t??n?.[e];return r?typeof r==`function`?r:re(e,r):M[e]}function P({facet:e,value:t,onChange:i}){let a=Array.isArray(t)?t:null;return(0,r.jsx)(n.Stack,{gap:4,children:e.ranges.map(e=>{let t=a!=null&&a[0]===e.from&&a[1]===e.to;return(0,r.jsx)(n.UnstyledButton,{onClick:()=>i(t?void 0:[e.from,e.to]),style:{padding:`4px 8px`,borderRadius:4,background:t?`var(--mantine-color-blue-light)`:void 0},children:(0,r.jsxs)(n.Group,{gap:`xs`,justify:`space-between`,wrap:`nowrap`,children:[(0,r.jsx)(n.Text,{size:`sm`,children:e.label}),(0,r.jsx)(n.Badge,{size:`sm`,variant:`light`,color:e.count===0?`gray`:`blue`,children:e.count})]})},e.label)})})}function F({label:e,onClear:t}){return(0,r.jsxs)(n.Group,{justify:`space-between`,wrap:`nowrap`,children:[(0,r.jsx)(n.Text,{size:`sm`,fw:500,children:e}),(0,r.jsx)(n.Anchor,{component:`button`,type:`button`,size:`xs`,c:`dimmed`,onClick:t,children:`clear`})]})}function I(e){return e?typeof e==`string`?e:e.toISOString().split(`T`)[0]??null:null}function L(e){return Array.isArray(e)?[e[0],e[1]]:[null,null]}function R(e,t){return e.values.length>0?e.values.map(e=>({value:e.value,label:`${e.label??e.value} (${e.count})`,disabled:e.count===0})):t??[]}function z({column:e,facet:t}){let i=e.columnDef.meta?.filter;if(!i)return null;let a=c(e),s=i.placeholder??a,l=e.getFilterValue(),u=t=>e.setFilterValue(t);if(i.component){let t=i.component;return(0,r.jsx)(n.Input.Wrapper,{label:a,children:(0,r.jsx)(t,{value:l,onChange:u,column:e})})}let d=t?.type===`values`?t:void 0,f=t?.type===`ranges`?t:void 0;switch(i.variant){case`select`:return(0,r.jsx)(n.Select,{label:a,placeholder:s,clearable:!0,data:d?R(d,i.options):i.options??[],value:l??null,onChange:e=>u(e??void 0)});case`multiselect`:return(0,r.jsx)(n.MultiSelect,{label:a,placeholder:s,data:d?R(d,i.options):i.options??[],value:l??[],onChange:e=>u(e.length>0?e:void 0)});case`boolean`:{let e=l==null?`all`:l?`yes`:`no`,t=d?.values.find(e=>e.value===`true`),i=d?.values.find(e=>e.value===`false`),o=t?`Yes (${t.count})`:`Yes`,s=i?`No (${i.count})`:`No`;return(0,r.jsx)(n.Input.Wrapper,{label:a,children:(0,r.jsx)(n.SegmentedControl,{fullWidth:!0,size:`xs`,data:[{value:`all`,label:`All`},{value:`yes`,label:o},{value:`no`,label:s}],value:e,onChange:e=>{u(e===`all`?void 0:e===`yes`)}})})}case`numberRange`:{let[t,o]=L(l),s=i.min??f?.min,c=i.max??f?.max,d=s!=null&&c!=null,p=l!=null,m=f?(0,r.jsx)(P,{facet:f,value:l,onChange:u}):null,h=p?(0,r.jsx)(F,{label:a,onClear:()=>u(void 0)}):a;if(d){let l=[t??s,o??c],d=e.columnDef.meta?.dataType,f=d?N(d,e.columnDef.meta?.format,void 0):e=>String(e);return(0,r.jsx)(n.Input.Wrapper,{label:h,children:(0,r.jsxs)(n.Stack,{gap:`xs`,children:[m,(0,r.jsx)(n.RangeSlider,{min:s,max:c,step:i.step??1,value:l,onChange:([e,t])=>{u(e===s&&t===c?void 0:[e,t])},label:e=>f(e),minRange:i.step??1,"aria-label":a})]})})}if(m)return(0,r.jsx)(n.Input.Wrapper,{label:h,children:m});let g=e=>u(e[0]==null&&e[1]==null?void 0:e),_=e=>e===``||e==null?null:Number(e);return(0,r.jsx)(n.Input.Wrapper,{label:a,children:(0,r.jsxs)(n.Group,{gap:4,wrap:`nowrap`,children:[(0,r.jsx)(n.NumberInput,{"aria-label":`${a} minimum`,placeholder:`Min`,value:t??``,onChange:e=>g([_(e),o]),w:90}),(0,r.jsx)(n.NumberInput,{"aria-label":`${a} maximum`,placeholder:`Max`,value:o??``,onChange:e=>g([t,_(e)]),w:90})]})})}case`date`:return(0,r.jsx)(o.DatePickerInput,{label:a,placeholder:s,clearable:!0,popoverProps:{withinPortal:!1},value:l?new Date(l):null,onChange:e=>u(I(e)??void 0)});case`dateRange`:{let[e,t]=L(l),i=[e?new Date(e):null,t?new Date(t):null],c=l==null?a:(0,r.jsx)(F,{label:a,onClear:()=>u(void 0)});return(0,r.jsx)(n.Input.Wrapper,{label:c,children:(0,r.jsxs)(n.Stack,{gap:`xs`,children:[f&&(0,r.jsx)(P,{facet:f,value:l,onChange:u}),(0,r.jsx)(o.DatePickerInput,{type:`range`,popoverProps:{withinPortal:!1},placeholder:s,clearable:!0,value:i,onChange:([e,t])=>{let n=I(e),r=I(t);u(n==null&&r==null?void 0:[n,r])}})]})})}default:return(0,r.jsx)(n.TextInput,{label:a,placeholder:s,value:l??``,onChange:e=>u(e.currentTarget.value||void 0)})}}function B({view:e}){return e.state.columnFilters.length>0?(0,r.jsx)(n.Button,{variant:`subtle`,size:`compact-sm`,color:`gray`,leftSection:(0,r.jsx)(w,{}),onClick:()=>e.table.resetColumnFilters(),children:`Reset filters`}):null}function V(e){return e>0?`Filters (${e})`:`Filters`}function H({view:e,controls:t}){return(0,r.jsxs)(n.Stack,{gap:`sm`,style:{minWidth:240},children:[t,(0,r.jsx)(n.Group,{justify:`flex-end`,children:(0,r.jsx)(B,{view:e})})]})}function U({view:e,inlineThreshold:t}){let i=e.filterableColumns,o=(0,a.useMediaQuery)(j((0,n.useMantineTheme)().breakpoints.sm),!1),[s,{open:c,close:l}]=(0,a.useDisclosure)(!1);if(i.length===0)return null;let u=i.map(t=>(0,r.jsx)(z,{column:t,facet:e.facets[t.id]},t.id)),d=e.state.columnFilters.length;return o?(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(n.Button,{variant:`default`,leftSection:(0,r.jsx)(S,{}),onClick:c,children:V(d)}),(0,r.jsx)(n.Drawer,{opened:s,onClose:l,title:`Filters`,position:`bottom`,size:`auto`,children:(0,r.jsx)(H,{view:e,controls:u})})]}):i.length<=t?(0,r.jsxs)(r.Fragment,{children:[u,(0,r.jsx)(B,{view:e})]}):(0,r.jsxs)(n.Popover,{position:`bottom-start`,closeOnClickOutside:!1,children:[(0,r.jsx)(n.Popover.Target,{children:(0,r.jsx)(n.Button,{variant:`default`,leftSection:(0,r.jsx)(S,{}),children:V(d)})}),(0,r.jsx)(n.Popover.Dropdown,{children:(0,r.jsx)(H,{view:e,controls:u})})]})}function ie({view:e}){let{sortableColumns:t,state:i,table:a}=e,o=i.sorting[0];return(0,r.jsxs)(n.Group,{gap:4,wrap:`nowrap`,children:[(0,r.jsx)(n.Select,{"aria-label":`Sort by`,placeholder:`Sort by`,clearable:!0,data:t.map(e=>({value:e.id,label:c(e)})),value:o?.id??null,onChange:e=>a.setSorting(e?[{id:e,desc:o?.desc??!1}]:[])}),(0,r.jsx)(n.ActionIcon,{"aria-label":`Toggle sort direction`,variant:`default`,size:`lg`,disabled:!o,onClick:()=>o&&a.setSorting([{id:o.id,desc:!o.desc}]),children:(0,r.jsx)(y,{direction:o?o.desc?`desc`:`asc`:!1})})]})}function W({view:e,lockSwitcherOnMobile:t,tableLabel:i=`Table`,cardsLabel:a=`Cards`}){return e.isMobileForced&&t?null:(0,r.jsx)(n.SegmentedControl,{"aria-label":`View`,value:e.view,disabled:e.isMobileForced,onChange:t=>{(t===`table`||t===`cards`)&&e.setView(t)},data:[{value:`table`,label:i},{value:`cards`,label:a}]})}function G({column:e}){if(!e.getCanPin())return null;let t=e.getIsPinned();return(0,r.jsxs)(n.Group,{gap:2,children:[(0,r.jsx)(n.ActionIcon,{size:`xs`,variant:t===`left`?`filled`:`subtle`,color:t===`left`?`blue`:`gray`,"aria-label":`Pin ${c(e)} left`,onClick:()=>e.pin(t===`left`?!1:`left`),children:(0,r.jsx)(T,{})}),(0,r.jsx)(n.ActionIcon,{size:`xs`,variant:t===`right`?`filled`:`subtle`,color:t===`right`?`blue`:`gray`,"aria-label":`Pin ${c(e)} right`,onClick:()=>e.pin(t===`right`?!1:`right`),children:(0,r.jsx)(ee,{})})]})}function ae({view:e}){let t=e.table.getAllLeafColumns().filter(e=>e.getCanHide());return t.length===0?null:(0,r.jsxs)(n.Menu,{closeOnItemClick:!1,withinPortal:!0,position:`bottom-end`,children:[(0,r.jsx)(n.Menu.Target,{children:(0,r.jsx)(n.Button,{variant:`default`,rightSection:(0,r.jsx)(C,{}),children:`Columns`})}),(0,r.jsx)(n.Menu.Dropdown,{children:(0,r.jsx)(n.Stack,{gap:`xs`,p:`xs`,children:t.map(e=>(0,r.jsxs)(n.Group,{gap:`xs`,justify:`space-between`,wrap:`nowrap`,children:[(0,r.jsx)(n.Checkbox,{label:c(e),checked:e.getIsVisible(),onChange:t=>e.toggleVisibility(t.currentTarget.checked)}),(0,r.jsx)(G,{column:e})]},e.id))})})]})}function K({view:e,searchPlaceholder:t=`Search…`,filterInlineThreshold:i=3,lockSwitcherOnMobile:a,showSearch:o,showFilters:s,showSort:c,showVisibility:l,showViewSwitcher:u,disableWhileLoading:d=!0,leftSection:f,rightSection:p,...m}){let{table:h,state:g}=e,_=d&&e.status===`loading`,v=o??h.options.enableGlobalFilter!==!1,y=s??e.filterableColumns.length>0,b=c??e.sortableColumns.length>0,S=l??!0,C=u??!0;return(0,r.jsxs)(n.Group,{justify:`space-between`,wrap:`wrap`,gap:`sm`,...m,children:[(0,r.jsxs)(n.Group,{wrap:`wrap`,gap:`sm`,children:[f,v&&(0,r.jsx)(n.TextInput,{"aria-label":`Search`,placeholder:t,leftSection:(0,r.jsx)(x,{}),value:g.globalFilter,onChange:e=>h.setGlobalFilter(e.currentTarget.value),rightSection:g.globalFilter?(0,r.jsx)(n.CloseButton,{size:`sm`,"aria-label":`Clear search`,onClick:()=>h.setGlobalFilter(``)}):void 0}),(0,r.jsxs)(`fieldset`,{disabled:_,style:{display:`contents`,border:`none`,padding:0,margin:0},children:[y&&(0,r.jsx)(U,{view:e,inlineThreshold:i}),b&&(0,r.jsx)(ie,{view:e})]})]}),(0,r.jsx)(`fieldset`,{disabled:_,style:{display:`contents`,border:`none`,padding:0,margin:0},children:(0,r.jsxs)(n.Group,{wrap:`wrap`,gap:`sm`,children:[S&&(0,r.jsx)(ae,{view:e}),C&&(0,r.jsx)(W,{view:e,lockSwitcherOnMobile:a}),p]})})]})}var q=(0,i.createContext)(null),J=q.Provider;function Y(){let e=(0,i.useContext)(q);if(!e)throw Error(`DataView.Toolbar / DataView.Body / DataView.Pagination must be rendered inside <DataView>.`);return e}function X({view:e,slots:t,renderCard:a,fallbackRole:o,lockSwitcherOnMobile:s,animateRows:c,children:l,...u}){return(0,r.jsx)(J,{value:(0,i.useMemo)(()=>({view:e,slots:t,renderCard:a,fallbackRole:o,lockSwitcherOnMobile:s,animateRows:c}),[e,t,a,o,s,c]),children:(0,r.jsx)(n.Stack,{...u,children:l??(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(Z,{}),(0,r.jsx)(ce,{}),(0,r.jsx)(oe,{}),(0,r.jsx)(se,{})]})})})}function Z(e){let{view:t,lockSwitcherOnMobile:n}=Y();return(0,r.jsx)(K,{view:t,lockSwitcherOnMobile:n,...e})}function oe({tableProps:e,cardsProps:t}){let{view:n,slots:i,renderCard:a,fallbackRole:o,animateRows:s}=Y();return n.view===`cards`?(0,r.jsx)(g,{view:n,slots:i,renderCard:a,fallbackRole:o,animateRows:s,...t}):(0,r.jsx)(D,{view:n,slots:i,animateRows:s,...e})}function se(e){let{view:t}=Y();return(0,r.jsx)(v,{view:t,...e})}function ce(e){let{view:t,slots:n}=Y();return(0,r.jsx)(s,{view:t,slots:n,...e})}X.Toolbar=Z,X.BulkActions=ce,X.Body=oe,X.Pagination=se;function le(e){return e.replace(/_/g,` `).replace(/([a-z])([A-Z])/g,`$1 $2`).replace(/\b\w/g,e=>e.toUpperCase())}var ue={text:{dataType:`text`,filterVariant:`text`},number:{dataType:`number`,filterVariant:`numberRange`,align:`right`},currency:{dataType:`currency`,filterVariant:`numberRange`,align:`right`},date:{dataType:`date`,filterVariant:`dateRange`},boolean:{dataType:`boolean`,filterVariant:`boolean`},select:{filterVariant:`select`},multiselect:{filterVariant:`multiselect`}},de=class{cols=[];helper=(0,t.createColumnHelper)();add(e,t,n){let r=ue[e];if(!r)throw Error(`Unknown preset: ${e}`);let i=n?.header??le(t),a=n?.align??r.align,o;if(n?.filter===!1)o=void 0;else{let e={variant:r.filterVariant,...n?.options?{options:n.options}:{}};o=n?.filter?{...e,...n.filter}:e}let s=this.helper.accessor(t,{header:i,...n?.cell?{cell:n.cell}:{},...n?.enableSorting===!1?{enableSorting:!1}:{},meta:{label:i,...r.dataType?{dataType:r.dataType}:{},...a?{align:a}:{},...o?{filter:o}:{},...n?.format?{format:n.format}:{},...n?.card?{card:{role:n.card,...n.cardOrder==null?{}:{order:n.cardOrder}}}:{}}});return this.cols.push(s),this}text(e,t){return this.add(`text`,e,t)}number(e,t){return this.add(`number`,e,t)}currency(e,t){return this.add(`currency`,e,t)}date(e,t){return this.add(`date`,e,t)}boolean(e,t){return this.add(`boolean`,e,t)}select(e,t){return this.add(`select`,e,t)}multiselect(e,t){return this.add(`multiselect`,e,t)}custom(e){return this.cols.push(e),this}build(){return this.cols}};function fe(){return new de}function Q(e){let t=e==null?``:String(e);return t.includes(`,`)||t.includes(`"`)||t.includes(`
|
|
2
|
+
`)?`"${t.replace(/"/g,`""`)}"`:t}function pe(e,t){let{filename:n=`export.csv`,separator:r=`,`,formatted:i=!1,formatDefaults:a}=t??{},o=e.getVisibleLeafColumns().filter(e=>e.id!==`_select`),s=[o.map(e=>Q(c(e))),...e.getRowModel().rows.map(e=>o.map(t=>{let n=e.getAllCells().find(e=>e.column.id===t.id)?.getValue();return i&&t.columnDef.meta?.dataType?Q(N(t.columnDef.meta.dataType,t.columnDef.meta.format,a)(n)):Q(n)}))].map(e=>e.join(r)).join(`
|
|
3
|
+
`),l=new Blob([s],{type:`text/csv;charset=utf-8;`}),u=URL.createObjectURL(l),d=document.createElement(`a`);d.href=u,d.download=n,d.click(),URL.revokeObjectURL(u)}function me(t){return t?{adapter:t.adapter,serializer:{...e.t,...t.serialize},include:e.r(t.include)}:null}function he(t,n,r){if(!t)return{};try{return e.n(t.adapter.read(),{serializer:t.serializer,include:t.include,getFilterMeta:r,current:n})}catch{return{}}}function ge({config:t,state:n,applyPatch:r,getFilterMeta:a}){let o=(0,i.useRef)(n);o.current=n;let s=(0,i.useRef)(r);s.current=r;let c=(0,i.useRef)(a);c.current=a;let l=(0,i.useRef)(t);l.current=t;let u=t?e.i(n,{serializer:t.serializer,include:t.include,getFilterMeta:a}):null;(0,i.useEffect)(()=>{let t=l.current;if(!t||!u)return;let n=e.a(t.adapter.read(),t.serializer,t.include);t.adapter.write({...n,...u},{replace:!0})},[u?JSON.stringify(u):``]),(0,i.useEffect)(()=>{if(!t)return;let{adapter:n,serializer:r,include:i}=t;return n.subscribe?.(()=>{let t=e.n(n.read(),{serializer:r,include:i,getFilterMeta:c.current,current:o.current});s.current(t)})},[t])}function _e(e){return e.columnFilters.length>0||e.globalFilter.trim()!==``}function ve({status:e,error:t,pageRowCount:n,state:r}){return e===`error`?{phase:`error`,error:t}:e===`loading`||e===`idle`?{phase:`loading`}:n===0?_e(r)?{phase:`empty-filtered`}:{phase:`empty`}:{phase:`ready`}}var $=300,ye=[10,25,50,100],be=10;function xe(e){return e==null?{globalFilter:$,columnFilters:$}:typeof e==`number`?{globalFilter:e,columnFilters:e}:{globalFilter:e.globalFilter??$,columnFilters:e.columnFilters??$}}function Se(e){if(e.id)return e.id;if(`accessorKey`in e&&e.accessorKey!=null)return String(e.accessorKey)}function Ce(e){let t=new Map;for(let n of e){let e=Se(n),r=n.meta?.filter;e&&r&&t.set(e,r)}return e=>t.get(e)}function we(e){return{pagination:{pageIndex:0,pageSize:e.pageSizeOptions?.[0]??be},sorting:[],columnFilters:[],globalFilter:``,rowSelection:{},columnVisibility:{},columnPinning:{left:[],right:[]},view:e.defaultView??`table`,...e.initialState}}function Te(e){let{columns:n,rows:r,rowCount:a,status:o,error:s,getRowId:c,onRequestChange:l,state:u,onStateChange:d,enableRowSelection:f,enableGlobalFilter:p=!0,debounce:m,responsive:h,formatDefaults:g,facets:_,params:v}=e,y=_??{},b=v?JSON.stringify(v):``,x=v??{},S=(0,i.useMemo)(()=>n.map(e=>{let t=e.meta?.dataType;if(!t||e.cell)return e;let n=N(t,e.meta?.format,g);return{...e,cell:e=>n(e.getValue())}}),[n,g]),C=(0,i.useMemo)(()=>Ce(S),[S]),w=(0,i.useMemo)(()=>me(e.urlSync),[e.urlSync]),[T,ee]=(0,i.useState)(()=>{let t=we(e);return{...t,...he(w,t,C)}}),E=(0,i.useMemo)(()=>({...T,...u}),[T,u]),D=(0,i.useRef)(E);D.current=E;let O=(0,i.useCallback)(e=>{ee(t=>({...t,...e})),d?.({...D.current,...e})},[d]);ge({config:w,state:E,applyPatch:O,getFilterMeta:C});let k=(0,i.useCallback)(()=>({...D.current.pagination,pageIndex:0}),[]),A=(0,i.useRef)(b);(0,i.useEffect)(()=>{A.current!==b&&(A.current=b,O({pagination:k()}))});let te=(0,i.useCallback)(e=>{O({pagination:(0,t.functionalUpdate)(e,D.current.pagination)})},[O]),j=(0,i.useCallback)(e=>{O({sorting:(0,t.functionalUpdate)(e,D.current.sorting),pagination:k()})},[O,k]),M=(0,i.useCallback)(e=>{O({columnFilters:(0,t.functionalUpdate)(e,D.current.columnFilters),pagination:k()})},[O,k]),re=(0,i.useCallback)(e=>{O({globalFilter:(0,t.functionalUpdate)(e,D.current.globalFilter),pagination:k()})},[O,k]),P=(0,i.useCallback)(e=>{O({rowSelection:(0,t.functionalUpdate)(e,D.current.rowSelection)})},[O]),F=(0,i.useCallback)(e=>{O({columnVisibility:(0,t.functionalUpdate)(e,D.current.columnVisibility)})},[O]),I=(0,i.useCallback)(e=>{O({columnPinning:(0,t.functionalUpdate)(e,D.current.columnPinning)})},[O]),L=(0,t.useReactTable)({data:r,columns:S,getCoreRowModel:(0,t.getCoreRowModel)(),manualPagination:!0,manualSorting:!0,manualFiltering:!0,autoResetPageIndex:!1,rowCount:a,getRowId:e=>c(e),enableRowSelection:typeof f==`function`?e=>f(e.original):f??!0,enableGlobalFilter:p,state:{pagination:E.pagination,sorting:E.sorting,columnFilters:E.columnFilters,globalFilter:E.globalFilter,rowSelection:E.rowSelection,columnVisibility:E.columnVisibility,columnPinning:E.columnPinning},onPaginationChange:te,onSortingChange:j,onColumnFiltersChange:M,onGlobalFilterChange:re,onRowSelectionChange:P,onColumnVisibilityChange:F,onColumnPinningChange:I}),R=(0,i.useMemo)(()=>({pagination:E.pagination,sorting:E.sorting,filters:E.columnFilters,globalFilter:E.globalFilter,params:x}),[E.pagination,E.sorting,E.columnFilters,E.globalFilter,b]),z=(0,i.useRef)(l);z.current=l;let B=(0,i.useRef)(xe(m));B.current=xe(m);let V=(0,i.useRef)(null),H=(0,i.useRef)(void 0);(0,i.useEffect)(()=>{let e=V.current,t=e===null,n=!e||e.globalFilter!==R.globalFilter,r=!e||e.filters!==R.filters,i=()=>{V.current=R,z.current?.(R)},a=0;n&&(a=Math.max(a,B.current.globalFilter)),r&&(a=Math.max(a,B.current.columnFilters));let o=!t&&(n||r)&&a>0;return clearTimeout(H.current),o?H.current=setTimeout(i,a):i(),()=>clearTimeout(H.current)},[R]);let U=(0,i.useRef)(R);U.current=R;let ie=(0,i.useCallback)(()=>{z.current?.(U.current)},[]),W=(0,i.useMemo)(()=>ve({status:o,error:s,pageRowCount:r.length,state:E}),[o,s,r.length,E]),G=ne(h),ae=G?`cards`:E.view,K=(0,i.useCallback)(e=>O({view:e}),[O]),q=e.pageSizeOptions??ye,J=L.getAllColumns(),Y=J.filter(e=>e.getCanSort()),X=J.filter(e=>e.columnDef.meta?.filter!=null),Z=(0,i.useCallback)(()=>O({rowSelection:{}}),[O]);return{table:L,request:R,state:E,view:ae,setView:K,isMobileForced:G,status:o,error:s,renderStatus:W,refetch:ie,pageSizeOptions:q,sortableColumns:Y,filterableColumns:X,selection:(0,i.useMemo)(()=>{let e=E.rowSelection,t=Object.keys(e).filter(t=>e[t]),n=r.filter(t=>e[c(t)]===!0);return{count:t.length,ids:t,rows:n,clear:Z}},[E.rowSelection,r,c,Z]),exportCsv:(0,i.useCallback)(e=>pe(L,e),[L]),facets:y,resetFilter:(0,i.useCallback)(e=>L.getColumn(e)?.setFilterValue(void 0),[L]),resetAllFilters:(0,i.useCallback)(()=>L.resetColumnFilters(),[L])}}function Ee({fetcher:e,deps:t,...n}){let[r,a]=(0,i.useState)({rows:[],rowCount:0}),[o,s]=(0,i.useState)(`idle`),[c,l]=(0,i.useState)(void 0),u=(0,i.useRef)(e);u.current=e;let d=(0,i.useRef)(0),f=(0,i.useRef)(null),p=(0,i.useCallback)(async e=>{f.current=e;let t=++d.current;s(`loading`);try{let n=await u.current(e);t===d.current&&(a(n),l(void 0),s(`success`))}catch(e){t===d.current&&(l(e),s(`error`))}},[]),m=t?JSON.stringify(t):``,h=(0,i.useRef)(m);return(0,i.useEffect)(()=>{h.current!==m&&(h.current=m,f.current&&p(f.current))}),Te({...n,rows:r.rows,rowCount:r.rowCount,facets:r.facets,status:o,error:c,onRequestChange:p})}exports.ColumnBuilder=de,exports.DataBulkActions=s,exports.DataCards=g,exports.DataPagination=v,exports.DataTable=D,exports.DataToolbar=K,exports.DataView=X,exports.FilterControl=z,exports.ViewSwitcher=W,exports.col=fe,exports.composeCardLayout=u,Object.defineProperty(exports,"createColumnHelper",{enumerable:!0,get:function(){return t.createColumnHelper}}),exports.exportCsv=pe,exports.resolveColumnLabel=c,exports.useDataView=Te,exports.useDataViewContext=Y,exports.useDataViewFetcher=Ee;
|
|
4
4
|
//# sourceMappingURL=index.cjs.map
|