@multiplatform.one/table 7.10.0 → 7.11.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 +60 -0
- package/dist/cjs/components/DataTable/DataTableCardControls.cjs +90 -54
- package/dist/cjs/components/DataTable/DataTableCardControls.native.js +93 -56
- package/dist/cjs/components/DataTable/DataTableCardControls.native.js.map +1 -1
- package/dist/cjs/components/DataTable/DataTableRoot.cjs +51 -8
- package/dist/cjs/components/DataTable/DataTableRoot.native.js +53 -9
- package/dist/cjs/components/DataTable/DataTableRoot.native.js.map +1 -1
- package/dist/cjs/components/DataTableFilterButton/index.cjs +14 -0
- package/dist/cjs/components/DataTableFilterButton/index.native.js +15 -0
- package/dist/cjs/components/DataTableFilterButton/index.native.js.map +1 -1
- package/dist/cjs/components/DataTableToolbar/index.cjs +178 -101
- package/dist/cjs/components/DataTableToolbar/index.native.js +187 -109
- package/dist/cjs/components/DataTableToolbar/index.native.js.map +1 -1
- package/dist/cjs/hooks/useDataTable.cjs +32 -1
- package/dist/cjs/hooks/useDataTable.native.js +37 -1
- package/dist/cjs/hooks/useDataTable.native.js.map +1 -1
- package/dist/esm/components/DataTable/DataTableCardControls.mjs +89 -54
- package/dist/esm/components/DataTable/DataTableCardControls.mjs.map +1 -1
- package/dist/esm/components/DataTable/DataTableCardControls.native.js +92 -56
- package/dist/esm/components/DataTable/DataTableCardControls.native.js.map +1 -1
- package/dist/esm/components/DataTable/DataTableRoot.mjs +53 -10
- package/dist/esm/components/DataTable/DataTableRoot.mjs.map +1 -1
- package/dist/esm/components/DataTable/DataTableRoot.native.js +55 -11
- package/dist/esm/components/DataTable/DataTableRoot.native.js.map +1 -1
- package/dist/esm/components/DataTableFilterButton/index.mjs +14 -1
- package/dist/esm/components/DataTableFilterButton/index.mjs.map +1 -1
- package/dist/esm/components/DataTableFilterButton/index.native.js +15 -1
- package/dist/esm/components/DataTableFilterButton/index.native.js.map +1 -1
- package/dist/esm/components/DataTableToolbar/index.mjs +180 -104
- package/dist/esm/components/DataTableToolbar/index.mjs.map +1 -1
- package/dist/esm/components/DataTableToolbar/index.native.js +189 -112
- package/dist/esm/components/DataTableToolbar/index.native.js.map +1 -1
- package/dist/esm/hooks/useDataTable.mjs +32 -1
- package/dist/esm/hooks/useDataTable.mjs.map +1 -1
- package/dist/esm/hooks/useDataTable.native.js +37 -1
- package/dist/esm/hooks/useDataTable.native.js.map +1 -1
- package/dist/jsx/components/DataTable/DataTableCardControls.mjs +89 -54
- package/dist/jsx/components/DataTable/DataTableCardControls.mjs.map +1 -1
- package/dist/jsx/components/DataTable/DataTableCardControls.native.js +93 -56
- package/dist/jsx/components/DataTable/DataTableCardControls.native.js.map +1 -1
- package/dist/jsx/components/DataTable/DataTableRoot.mjs +53 -10
- package/dist/jsx/components/DataTable/DataTableRoot.mjs.map +1 -1
- package/dist/jsx/components/DataTable/DataTableRoot.native.js +53 -9
- package/dist/jsx/components/DataTable/DataTableRoot.native.js.map +1 -1
- package/dist/jsx/components/DataTableFilterButton/index.mjs +14 -1
- package/dist/jsx/components/DataTableFilterButton/index.mjs.map +1 -1
- package/dist/jsx/components/DataTableFilterButton/index.native.js +15 -0
- package/dist/jsx/components/DataTableFilterButton/index.native.js.map +1 -1
- package/dist/jsx/components/DataTableToolbar/index.mjs +180 -104
- package/dist/jsx/components/DataTableToolbar/index.mjs.map +1 -1
- package/dist/jsx/components/DataTableToolbar/index.native.js +187 -109
- package/dist/jsx/components/DataTableToolbar/index.native.js.map +1 -1
- package/dist/jsx/hooks/useDataTable.mjs +32 -1
- package/dist/jsx/hooks/useDataTable.mjs.map +1 -1
- package/dist/jsx/hooks/useDataTable.native.js +37 -1
- package/dist/jsx/hooks/useDataTable.native.js.map +1 -1
- package/package.json +14 -14
- package/src/components/DataTable/DataTable.stories.tsx +59 -0
- package/src/components/DataTable/DataTableCardControls.stories.tsx +61 -2
- package/src/components/DataTable/DataTableCardControls.tsx +92 -66
- package/src/components/DataTable/DataTableRoot.tsx +82 -14
- package/src/components/DataTable/cardLayout.spec.tsx +4 -3
- package/src/components/DataTable/cardToolbar.spec.tsx +238 -0
- package/src/components/DataTable/chromeInterplay.spec.tsx +7 -5
- package/src/components/DataTable/columnWidthLayout.spec.tsx +189 -0
- package/src/components/DataTable/dataTableCardControls.spec.tsx +3 -2
- package/src/components/DataTable/footerLayout.spec.tsx +250 -0
- package/src/components/DataTable/pinningGeometry.spec.tsx +66 -1
- package/src/components/DataTableExport/DataTableExport.spec.tsx +42 -18
- package/src/components/DataTableFilterButton/index.tsx +9 -0
- package/src/components/DataTableToolbar/index.tsx +184 -105
- package/src/hooks/useDataTable.spec.ts +114 -0
- package/src/hooks/useDataTable.ts +23 -1
- package/src/types.ts +14 -12
- package/types/components/DataTable/DataTableCardControls.d.ts +3 -0
- package/types/components/DataTable/DataTableCardControls.d.ts.map +1 -1
- package/types/components/DataTable/DataTableRoot.d.ts.map +1 -1
- package/types/components/DataTableFilterButton/index.d.ts +2 -1
- package/types/components/DataTableFilterButton/index.d.ts.map +1 -1
- package/types/components/DataTableToolbar/index.d.ts +1 -0
- package/types/components/DataTableToolbar/index.d.ts.map +1 -1
- package/types/hooks/useDataTable.d.ts.map +1 -1
- package/types/types.d.ts +14 -12
- package/types/types.d.ts.map +1 -1
|
@@ -11,7 +11,7 @@ import type { TableView } from "../../types";
|
|
|
11
11
|
import { iconSizeForToken } from "../../utils/chromeIcons";
|
|
12
12
|
import { useDataTableState } from "../DataTable/DataTableStateContext";
|
|
13
13
|
import { DataTableExport } from "../DataTableExport";
|
|
14
|
-
import { DataTableFilterButton } from "../DataTableFilterButton";
|
|
14
|
+
import { DataTableCardFilterButton, DataTableFilterButton } from "../DataTableFilterButton";
|
|
15
15
|
|
|
16
16
|
export interface DataTableToolbarProps {
|
|
17
17
|
// Search
|
|
@@ -49,6 +49,17 @@ export interface DataTableToolbarProps {
|
|
|
49
49
|
}
|
|
50
50
|
|
|
51
51
|
export function DataTableToolbar(props: DataTableToolbarProps) {
|
|
52
|
+
return <ToolbarLayout {...props} />;
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
export function DataTableCardToolbar(props: DataTableToolbarProps) {
|
|
56
|
+
return <ToolbarLayout {...props} cardLayout />;
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
function ToolbarLayout({
|
|
60
|
+
cardLayout = false,
|
|
61
|
+
...props
|
|
62
|
+
}: DataTableToolbarProps & { cardLayout?: boolean }) {
|
|
52
63
|
const ctx = useDataTableState();
|
|
53
64
|
|
|
54
65
|
const globalFilter = props.globalFilter ?? ctx?.state.globalFilter ?? "";
|
|
@@ -108,9 +119,105 @@ export function DataTableToolbar(props: DataTableToolbarProps) {
|
|
|
108
119
|
);
|
|
109
120
|
const hasTrailing = showActionCluster || isFetching;
|
|
110
121
|
|
|
122
|
+
const viewPickerContent = showViewPicker && (
|
|
123
|
+
<DropdownMenu closeOnSelect placement="bottom-end">
|
|
124
|
+
<DropdownMenu.Trigger asChild>
|
|
125
|
+
<RovingFocusGroup.Item focusable asChild>
|
|
126
|
+
<Button
|
|
127
|
+
chromeless
|
|
128
|
+
size={controlSize}
|
|
129
|
+
iconAfter={<CaretDownIcon size={iconPx} />}
|
|
130
|
+
aria-label={t("Saved views")}
|
|
131
|
+
{...(cardLayout ? { minWidth: 0, maxWidth: "100%" as const } : {})}
|
|
132
|
+
aria-haspopup="menu"
|
|
133
|
+
>
|
|
134
|
+
{activeView?.name ?? t("Views")}
|
|
135
|
+
</Button>
|
|
136
|
+
</RovingFocusGroup.Item>
|
|
137
|
+
</DropdownMenu.Trigger>
|
|
138
|
+
<DropdownMenu.Content>
|
|
139
|
+
{views.map((view) => (
|
|
140
|
+
<DropdownMenu.CheckboxItem
|
|
141
|
+
key={view.id}
|
|
142
|
+
checked={view.id === activeViewId}
|
|
143
|
+
closeOnSelect
|
|
144
|
+
onSelect={() => onLoadView(view.id)}
|
|
145
|
+
>
|
|
146
|
+
{view.name}
|
|
147
|
+
</DropdownMenu.CheckboxItem>
|
|
148
|
+
))}
|
|
149
|
+
</DropdownMenu.Content>
|
|
150
|
+
</DropdownMenu>
|
|
151
|
+
);
|
|
152
|
+
const viewPicker =
|
|
153
|
+
cardLayout && showViewPicker ? (
|
|
154
|
+
<XStack minWidth={0} maxWidth="100%" flexBasis="auto" flexGrow={0} flexShrink={1}>
|
|
155
|
+
{viewPickerContent}
|
|
156
|
+
</XStack>
|
|
157
|
+
) : (
|
|
158
|
+
viewPickerContent
|
|
159
|
+
);
|
|
160
|
+
const saveView = showSave && (
|
|
161
|
+
<Popover open={showSaveViewDialog} onOpenChange={setShowSaveViewDialog}>
|
|
162
|
+
<Popover.Trigger asChild>
|
|
163
|
+
<RovingFocusGroup.Item focusable asChild>
|
|
164
|
+
<Button
|
|
165
|
+
chromeless
|
|
166
|
+
size={controlSize}
|
|
167
|
+
icon={<FloppyDiskIcon size={iconPx} />}
|
|
168
|
+
aria-label={t("Save view")}
|
|
169
|
+
/>
|
|
170
|
+
</RovingFocusGroup.Item>
|
|
171
|
+
</Popover.Trigger>
|
|
172
|
+
<Popover.Content
|
|
173
|
+
{...knobProps.elevatedSurface}
|
|
174
|
+
{...knobProps.borderRadius}
|
|
175
|
+
borderColor="$color6"
|
|
176
|
+
// LC-24: enter/exitStyle need a `transition` driver on the
|
|
177
|
+
// same element ({...string} spread set nothing).
|
|
178
|
+
transition={knobProps.transition}
|
|
179
|
+
enterStyle={{ x: 0, y: -10, opacity: 0 }}
|
|
180
|
+
exitStyle={{ x: 0, y: -10, opacity: 0 }}
|
|
181
|
+
data-dismiss-class="compose"
|
|
182
|
+
>
|
|
183
|
+
<YStack {...knobProps.gap} {...knobProps.panelPadding} minWidth={240}>
|
|
184
|
+
<Input
|
|
185
|
+
placeholder={t("View name")}
|
|
186
|
+
value={newViewName}
|
|
187
|
+
onChangeText={setNewViewName}
|
|
188
|
+
size={searchSize}
|
|
189
|
+
{...(compact === undefined ? {} : { compact })}
|
|
190
|
+
inputProps={{
|
|
191
|
+
"aria-label": t("View name"),
|
|
192
|
+
onKeyDown: (e: React.KeyboardEvent) => {
|
|
193
|
+
if (e.key === "Enter") handleSaveView();
|
|
194
|
+
},
|
|
195
|
+
}}
|
|
196
|
+
/>
|
|
197
|
+
<XStack {...knobProps.gap} justifyContent="flex-end">
|
|
198
|
+
<Button size={controlSize} onPress={() => setShowSaveViewDialog(false)}>
|
|
199
|
+
{t("Cancel")}
|
|
200
|
+
</Button>
|
|
201
|
+
<Button
|
|
202
|
+
size={controlSize}
|
|
203
|
+
onPress={handleSaveView}
|
|
204
|
+
disabled={!newViewName.trim()}
|
|
205
|
+
disabledReason={t("Enter a view name")}
|
|
206
|
+
>
|
|
207
|
+
{t("Save")}
|
|
208
|
+
</Button>
|
|
209
|
+
</XStack>
|
|
210
|
+
</YStack>
|
|
211
|
+
</Popover.Content>
|
|
212
|
+
</Popover>
|
|
213
|
+
);
|
|
214
|
+
const showSecondary = showViewPicker || showSave || enableExport || isFetching;
|
|
215
|
+
|
|
111
216
|
return (
|
|
112
217
|
<XStack
|
|
113
|
-
alignItems="center"
|
|
218
|
+
alignItems={cardLayout ? "stretch" : "center"}
|
|
219
|
+
flexDirection={cardLayout ? "column" : "row"}
|
|
220
|
+
{...(cardLayout ? { width: "100%" as const, minWidth: 0 } : {})}
|
|
114
221
|
// LC-39: flush band — no painted panel, so no horizontal inset.
|
|
115
222
|
paddingVertical={knobProps.panelPadding.padding}
|
|
116
223
|
paddingHorizontal={0}
|
|
@@ -124,7 +231,12 @@ export function DataTableToolbar(props: DataTableToolbarProps) {
|
|
|
124
231
|
aria-busy={isFetching || undefined}
|
|
125
232
|
>
|
|
126
233
|
{enableGlobalSearch && (
|
|
127
|
-
<XStack
|
|
234
|
+
<XStack
|
|
235
|
+
flex={cardLayout ? undefined : 1}
|
|
236
|
+
minWidth={cardLayout ? 0 : 160}
|
|
237
|
+
maxWidth={cardLayout ? undefined : searchMaxWidth}
|
|
238
|
+
flexShrink={1}
|
|
239
|
+
>
|
|
128
240
|
<SearchInput
|
|
129
241
|
value={globalFilter}
|
|
130
242
|
onChange={onGlobalFilterChange}
|
|
@@ -144,116 +256,83 @@ export function DataTableToolbar(props: DataTableToolbarProps) {
|
|
|
144
256
|
</XStack>
|
|
145
257
|
)}
|
|
146
258
|
|
|
147
|
-
{
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
{...knobProps.gap}
|
|
151
|
-
flexShrink={0}
|
|
152
|
-
marginInlineStart={enableGlobalSearch ? "auto" : 0}
|
|
153
|
-
>
|
|
154
|
-
{showActionCluster && (
|
|
259
|
+
{cardLayout ? (
|
|
260
|
+
<>
|
|
261
|
+
{(showFilterButton || customActions) && (
|
|
155
262
|
<RovingFocusGroup orientation="horizontal" loop asChild>
|
|
156
|
-
<XStack
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
{
|
|
160
|
-
|
|
263
|
+
<XStack
|
|
264
|
+
data-table-card-primary=""
|
|
265
|
+
width="100%"
|
|
266
|
+
minWidth={0}
|
|
267
|
+
alignItems="center"
|
|
268
|
+
flexWrap="nowrap"
|
|
269
|
+
{...knobProps.gap}
|
|
270
|
+
>
|
|
271
|
+
{showFilterButton && (
|
|
272
|
+
<XStack flexShrink={0}>
|
|
273
|
+
<DataTableCardFilterButton />
|
|
274
|
+
</XStack>
|
|
275
|
+
)}
|
|
161
276
|
{customActions}
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
{views.map((view) => (
|
|
180
|
-
<DropdownMenu.CheckboxItem
|
|
181
|
-
key={view.id}
|
|
182
|
-
checked={view.id === activeViewId}
|
|
183
|
-
closeOnSelect
|
|
184
|
-
onSelect={() => onLoadView(view.id)}
|
|
185
|
-
>
|
|
186
|
-
{view.name}
|
|
187
|
-
</DropdownMenu.CheckboxItem>
|
|
188
|
-
))}
|
|
189
|
-
</DropdownMenu.Content>
|
|
190
|
-
</DropdownMenu>
|
|
277
|
+
</XStack>
|
|
278
|
+
</RovingFocusGroup>
|
|
279
|
+
)}
|
|
280
|
+
{showSecondary && (
|
|
281
|
+
<RovingFocusGroup orientation="horizontal" loop asChild>
|
|
282
|
+
<XStack
|
|
283
|
+
data-table-card-secondary=""
|
|
284
|
+
width="100%"
|
|
285
|
+
minWidth={0}
|
|
286
|
+
flexWrap="wrap"
|
|
287
|
+
alignItems="center"
|
|
288
|
+
{...knobProps.gap}
|
|
289
|
+
>
|
|
290
|
+
{enableExport && (
|
|
291
|
+
<XStack maxWidth="100%" minWidth={0}>
|
|
292
|
+
<DataTableExport />
|
|
293
|
+
</XStack>
|
|
191
294
|
)}
|
|
192
|
-
|
|
193
|
-
{
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
chromeless
|
|
199
|
-
size={controlSize}
|
|
200
|
-
icon={<FloppyDiskIcon size={iconPx} />}
|
|
201
|
-
aria-label={t("Save view")}
|
|
202
|
-
/>
|
|
203
|
-
</RovingFocusGroup.Item>
|
|
204
|
-
</Popover.Trigger>
|
|
205
|
-
<Popover.Content
|
|
206
|
-
{...knobProps.elevatedSurface}
|
|
207
|
-
{...knobProps.borderRadius}
|
|
208
|
-
borderColor="$color6"
|
|
209
|
-
// LC-24: enter/exitStyle need a `transition` driver on the
|
|
210
|
-
// same element ({...string} spread set nothing).
|
|
211
|
-
transition={knobProps.transition}
|
|
212
|
-
enterStyle={{ x: 0, y: -10, opacity: 0 }}
|
|
213
|
-
exitStyle={{ x: 0, y: -10, opacity: 0 }}
|
|
214
|
-
data-dismiss-class="compose"
|
|
215
|
-
>
|
|
216
|
-
<YStack {...knobProps.gap} {...knobProps.panelPadding} minWidth={240}>
|
|
217
|
-
<Input
|
|
218
|
-
placeholder={t("View name")}
|
|
219
|
-
value={newViewName}
|
|
220
|
-
onChangeText={setNewViewName}
|
|
221
|
-
size={searchSize}
|
|
222
|
-
{...(compact === undefined ? {} : { compact })}
|
|
223
|
-
inputProps={{
|
|
224
|
-
"aria-label": t("View name"),
|
|
225
|
-
onKeyDown: (e: React.KeyboardEvent) => {
|
|
226
|
-
if (e.key === "Enter") handleSaveView();
|
|
227
|
-
},
|
|
228
|
-
}}
|
|
229
|
-
/>
|
|
230
|
-
<XStack {...knobProps.gap} justifyContent="flex-end">
|
|
231
|
-
<Button size={controlSize} onPress={() => setShowSaveViewDialog(false)}>
|
|
232
|
-
{t("Cancel")}
|
|
233
|
-
</Button>
|
|
234
|
-
<Button
|
|
235
|
-
size={controlSize}
|
|
236
|
-
onPress={handleSaveView}
|
|
237
|
-
disabled={!newViewName.trim()}
|
|
238
|
-
disabledReason={t("Enter a view name")}
|
|
239
|
-
>
|
|
240
|
-
{t("Save")}
|
|
241
|
-
</Button>
|
|
242
|
-
</XStack>
|
|
243
|
-
</YStack>
|
|
244
|
-
</Popover.Content>
|
|
245
|
-
</Popover>
|
|
295
|
+
{viewPicker}
|
|
296
|
+
{saveView}
|
|
297
|
+
{isFetching && (
|
|
298
|
+
<XStack alignItems="center" aria-live="polite" data-table-fetching="true">
|
|
299
|
+
<Spinner size="small" />
|
|
300
|
+
</XStack>
|
|
246
301
|
)}
|
|
247
302
|
</XStack>
|
|
248
303
|
</RovingFocusGroup>
|
|
249
304
|
)}
|
|
305
|
+
</>
|
|
306
|
+
) : (
|
|
307
|
+
hasTrailing && (
|
|
308
|
+
<XStack
|
|
309
|
+
alignItems="center"
|
|
310
|
+
{...knobProps.gap}
|
|
311
|
+
flexShrink={0}
|
|
312
|
+
marginInlineStart={enableGlobalSearch ? "auto" : 0}
|
|
313
|
+
>
|
|
314
|
+
{showActionCluster && (
|
|
315
|
+
<RovingFocusGroup orientation="horizontal" loop asChild>
|
|
316
|
+
<XStack alignItems="center" {...knobProps.gap}>
|
|
317
|
+
{showFilterButton && <DataTableFilterButton />}
|
|
250
318
|
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
319
|
+
{enableExport && <DataTableExport />}
|
|
320
|
+
|
|
321
|
+
{customActions}
|
|
322
|
+
|
|
323
|
+
{viewPicker}
|
|
324
|
+
{saveView}
|
|
325
|
+
</XStack>
|
|
326
|
+
</RovingFocusGroup>
|
|
327
|
+
)}
|
|
328
|
+
|
|
329
|
+
{isFetching && (
|
|
330
|
+
<XStack alignItems="center" aria-live="polite" data-table-fetching="true">
|
|
331
|
+
<Spinner size="small" />
|
|
332
|
+
</XStack>
|
|
333
|
+
)}
|
|
334
|
+
</XStack>
|
|
335
|
+
)
|
|
257
336
|
)}
|
|
258
337
|
</XStack>
|
|
259
338
|
);
|
|
@@ -111,3 +111,117 @@ describe("useDataTable controlledState adoption", () => {
|
|
|
111
111
|
expect(result.current.state.filters).toEqual([]);
|
|
112
112
|
});
|
|
113
113
|
});
|
|
114
|
+
|
|
115
|
+
describe("useDataTable column width normalization", () => {
|
|
116
|
+
type Row = (typeof data)[number];
|
|
117
|
+
|
|
118
|
+
it.each<[Partial<DataTableColumn<Row>>, number]>([
|
|
119
|
+
[{ width: 320 }, 320],
|
|
120
|
+
[{ width: 320, size: 90 }, 90],
|
|
121
|
+
[{ width: 320, minWidth: 200, maxWidth: 240 }, 240],
|
|
122
|
+
[{ width: 320, size: 90, minWidth: 200, minSize: 60, maxWidth: 80, maxSize: 100 }, 90],
|
|
123
|
+
[{ width: 320, size: 180, maxWidth: 140 }, 140],
|
|
124
|
+
[{ width: 125.5 }, 125.5],
|
|
125
|
+
[{ width: 0 }, 20],
|
|
126
|
+
[{ width: 0, minWidth: 0 }, 0],
|
|
127
|
+
[{ width: 320, size: 0, minSize: 0 }, 0],
|
|
128
|
+
[{ width: Number.NaN }, 150],
|
|
129
|
+
[{ width: Number.POSITIVE_INFINITY }, 150],
|
|
130
|
+
[{ width: -1 }, 150],
|
|
131
|
+
[{ minWidth: Number.NaN, maxWidth: -1 }, 150],
|
|
132
|
+
])("resolves %j to %s through the real table", (sizing, expected) => {
|
|
133
|
+
const { result } = renderHook(() =>
|
|
134
|
+
useDataTable({ data, columns: [{ id: "name", accessorKey: "name", ...sizing }] }),
|
|
135
|
+
);
|
|
136
|
+
expect(result.current.table.getColumn("name")?.getSize()).toBe(expected);
|
|
137
|
+
});
|
|
138
|
+
|
|
139
|
+
it("preserves input objects and normalizes grouped leaves without distributing group width", () => {
|
|
140
|
+
const leaf: DataTableColumn<Row> = { id: "name", accessorKey: "name", width: 320 };
|
|
141
|
+
const group: DataTableColumn<Row> = {
|
|
142
|
+
id: "group",
|
|
143
|
+
header: "Group",
|
|
144
|
+
width: 900,
|
|
145
|
+
columns: [leaf],
|
|
146
|
+
};
|
|
147
|
+
const plain: DataTableColumn<Row> = { id: "status", accessorKey: "status" };
|
|
148
|
+
Object.freeze(leaf);
|
|
149
|
+
Object.freeze(group.columns);
|
|
150
|
+
Object.freeze(group);
|
|
151
|
+
Object.freeze(plain);
|
|
152
|
+
const source = [group, plain];
|
|
153
|
+
Object.freeze(source);
|
|
154
|
+
const { result, rerender } = renderHook(() => useDataTable({ data, columns: source }));
|
|
155
|
+
expect(result.current.table.getColumn("name")?.getSize()).toBe(320);
|
|
156
|
+
expect(leaf).not.toHaveProperty("size");
|
|
157
|
+
expect(group.columns?.[0]).toBe(leaf);
|
|
158
|
+
expect(result.current.table.options.columns[1]).toBe(plain);
|
|
159
|
+
const normalized = result.current.table.options.columns;
|
|
160
|
+
rerender();
|
|
161
|
+
expect(result.current.table.options.columns).toBe(normalized);
|
|
162
|
+
});
|
|
163
|
+
|
|
164
|
+
it("keeps sizing state ahead of updated declarations and resets to the current definition", () => {
|
|
165
|
+
const { result, rerender } = renderHook(
|
|
166
|
+
({ width }) => useDataTable({ data, columns: [{ id: "name", accessorKey: "name", width }] }),
|
|
167
|
+
{ initialProps: { width: 320 } },
|
|
168
|
+
);
|
|
169
|
+
expect(result.current.table.getColumn("name")?.getSize()).toBe(320);
|
|
170
|
+
act(() => result.current.actions.setColumnSizing({ name: 210 }));
|
|
171
|
+
rerender({ width: 400 });
|
|
172
|
+
expect(result.current.table.getColumn("name")?.getSize()).toBe(210);
|
|
173
|
+
act(() => result.current.actions.resetToDefault());
|
|
174
|
+
expect(result.current.table.getColumn("name")?.getSize()).toBe(400);
|
|
175
|
+
});
|
|
176
|
+
|
|
177
|
+
it("loads existing view width state without renaming its persistence field", () => {
|
|
178
|
+
const { result } = renderHook(() =>
|
|
179
|
+
useDataTable({
|
|
180
|
+
data,
|
|
181
|
+
columns: [{ id: "name", accessorKey: "name", width: 320 }],
|
|
182
|
+
initialState: {
|
|
183
|
+
views: [
|
|
184
|
+
{
|
|
185
|
+
id: "saved",
|
|
186
|
+
name: "Saved",
|
|
187
|
+
columns: { name: { id: "name", visible: true, width: 205, order: 0 } },
|
|
188
|
+
filters: [],
|
|
189
|
+
sorting: [],
|
|
190
|
+
pagination: { pageIndex: 0, pageSize: 10 },
|
|
191
|
+
},
|
|
192
|
+
],
|
|
193
|
+
},
|
|
194
|
+
}),
|
|
195
|
+
);
|
|
196
|
+
act(() => result.current.actions.loadView("saved"));
|
|
197
|
+
expect(result.current.table.getColumn("name")?.getSize()).toBe(205);
|
|
198
|
+
expect(result.current.state.columnSizing).toEqual({ name: 205 });
|
|
199
|
+
act(() => result.current.actions.resetToDefault());
|
|
200
|
+
expect(result.current.table.getColumn("name")?.getSize()).toBe(320);
|
|
201
|
+
});
|
|
202
|
+
|
|
203
|
+
it("preserves sorting/filter aliases and explicit overrides alongside width", () => {
|
|
204
|
+
const sortingFn = vi.fn(() => 0);
|
|
205
|
+
const { result } = renderHook(() =>
|
|
206
|
+
useDataTable({
|
|
207
|
+
data,
|
|
208
|
+
columns: [
|
|
209
|
+
{ id: "name", accessorKey: "name", width: 320, sortable: false, filterable: false },
|
|
210
|
+
{
|
|
211
|
+
id: "status",
|
|
212
|
+
accessorKey: "status",
|
|
213
|
+
width: 90,
|
|
214
|
+
sortable: false,
|
|
215
|
+
enableSorting: true,
|
|
216
|
+
sortingFn,
|
|
217
|
+
},
|
|
218
|
+
],
|
|
219
|
+
}),
|
|
220
|
+
);
|
|
221
|
+
expect(result.current.table.getColumn("name")?.getSize()).toBe(320);
|
|
222
|
+
expect(result.current.table.getColumn("name")?.getCanSort()).toBe(false);
|
|
223
|
+
expect(result.current.table.getColumn("name")?.getCanFilter()).toBe(false);
|
|
224
|
+
expect(result.current.table.getColumn("status")?.getCanSort()).toBe(true);
|
|
225
|
+
expect(result.current.table.getColumn("status")?.columnDef.sortingFn).toBe(sortingFn);
|
|
226
|
+
});
|
|
227
|
+
});
|
|
@@ -170,6 +170,7 @@ export const createUrlStrategy = {
|
|
|
170
170
|
|
|
171
171
|
import React, { useMemo, useState, useCallback, useEffect, useRef } from "react";
|
|
172
172
|
import type {
|
|
173
|
+
DataTableColumn,
|
|
173
174
|
DataTableData,
|
|
174
175
|
DataTableField,
|
|
175
176
|
DataTableInfiniteState,
|
|
@@ -200,6 +201,26 @@ import { useTableViews } from "./useTableViews";
|
|
|
200
201
|
const moneySortingFn = (rowA: any, rowB: any, columnId: string): number =>
|
|
201
202
|
moneyComparator(rowA.getValue(columnId), rowB.getValue(columnId));
|
|
202
203
|
|
|
204
|
+
function normalizeColumnWidths<TData extends DataTableData>(
|
|
205
|
+
column: ColumnDef<TData>,
|
|
206
|
+
): ColumnDef<TData> {
|
|
207
|
+
if ("columns" in column && column.columns) {
|
|
208
|
+
const children = column.columns.map(normalizeColumnWidths);
|
|
209
|
+
return children.some((child, index) => child !== column.columns?.[index])
|
|
210
|
+
? { ...column, columns: children }
|
|
211
|
+
: column;
|
|
212
|
+
}
|
|
213
|
+
const { width, minWidth, maxWidth } = column as DataTableColumn<TData>;
|
|
214
|
+
const validWidth = (value: unknown): value is number =>
|
|
215
|
+
typeof value === "number" && Number.isFinite(value) && value >= 0;
|
|
216
|
+
const sizing = {
|
|
217
|
+
...(column.size === undefined && validWidth(width) ? { size: width } : {}),
|
|
218
|
+
...(column.minSize === undefined && validWidth(minWidth) ? { minSize: minWidth } : {}),
|
|
219
|
+
...(column.maxSize === undefined && validWidth(maxWidth) ? { maxSize: maxWidth } : {}),
|
|
220
|
+
};
|
|
221
|
+
return Object.keys(sizing).length ? { ...column, ...sizing } : column;
|
|
222
|
+
}
|
|
223
|
+
|
|
203
224
|
export function useDataTable<TData extends DataTableData = DataTableData>({
|
|
204
225
|
data = [],
|
|
205
226
|
columns = [],
|
|
@@ -480,7 +501,8 @@ export function useDataTable<TData extends DataTableData = DataTableData>({
|
|
|
480
501
|
// the column declined (Axiom 6 HONEST STATE). Explicit TanStack props win.
|
|
481
502
|
const normalizedColumns = useMemo(
|
|
482
503
|
() =>
|
|
483
|
-
columns.map((
|
|
504
|
+
columns.map((inputColumn) => {
|
|
505
|
+
const column = normalizeColumnWidths(inputColumn);
|
|
484
506
|
const { sortable, filterable, field } = column as {
|
|
485
507
|
sortable?: boolean;
|
|
486
508
|
filterable?: boolean;
|
package/src/types.ts
CHANGED
|
@@ -181,13 +181,15 @@ export type DataTableColumn<TData extends DataTableData = DataTableData> = Colum
|
|
|
181
181
|
searchable?: boolean;
|
|
182
182
|
hidden?: boolean;
|
|
183
183
|
/**
|
|
184
|
-
*
|
|
185
|
-
*
|
|
186
|
-
*
|
|
187
|
-
*
|
|
184
|
+
* Initial leaf-column size in px, mapped to TanStack `size` when absent.
|
|
185
|
+
* Finite nonnegative values only. Sizing state overrides the declaration,
|
|
186
|
+
* within min/max bounds. Unpinned equal-layout cells ignore sizes unless
|
|
187
|
+
* resizing is enabled (see `columnLayout`).
|
|
188
188
|
*/
|
|
189
189
|
width?: number;
|
|
190
|
+
/** Alias for `minSize` when absent. Finite nonnegative px; canonical value wins. */
|
|
190
191
|
minWidth?: number;
|
|
192
|
+
/** Alias for `maxSize` when absent. Finite nonnegative px; canonical value wins. */
|
|
191
193
|
maxWidth?: number;
|
|
192
194
|
/**
|
|
193
195
|
* Text alignment override (DG-TBL-01).
|
|
@@ -565,15 +567,15 @@ export interface DataTableProps<TData extends DataTableData = DataTableData> {
|
|
|
565
567
|
// Column Layout
|
|
566
568
|
/**
|
|
567
569
|
* How columns are sized and whether table scrolls horizontally.
|
|
568
|
-
* - 'equal':
|
|
569
|
-
* - 'auto':
|
|
570
|
-
* - 'scroll':
|
|
570
|
+
* - 'equal': Unpinned cells share available width (default).
|
|
571
|
+
* - 'auto': Native table layout on web; resolved sizes are table-layout inputs.
|
|
572
|
+
* - 'scroll': Fixed resolved sizes; horizontal overflow on web when needed.
|
|
571
573
|
*
|
|
572
|
-
* Under 'equal'
|
|
573
|
-
*
|
|
574
|
-
*
|
|
575
|
-
*
|
|
576
|
-
*
|
|
574
|
+
* Under 'equal', unpinned cells ignore `width` / `size` without resizing.
|
|
575
|
+
* Use 'scroll' for exact widths or enable `enableColumnResizing` for fixed
|
|
576
|
+
* resizable cells. Pinned cells always keep their resolved size so sticky
|
|
577
|
+
* offsets agree with their boxes. Unspecified sizes resolve to 150px in
|
|
578
|
+
* sized modes; content isn't measured and spare space needn't be filled.
|
|
577
579
|
* Declaring a width under 'equal' emits the `[table] column-width-ignored`
|
|
578
580
|
* dev warning rather than failing silently (MPO-236).
|
|
579
581
|
*/
|
|
@@ -26,5 +26,8 @@ export interface DataTableCardControlsProps {
|
|
|
26
26
|
/** Table-level disabled state (UX-011): controls render inert + LC-40 visible. */
|
|
27
27
|
disabled?: boolean;
|
|
28
28
|
}
|
|
29
|
+
export declare function DataTableCardSortControl({ table, compact, disabled, contained, }: Pick<DataTableCardControlsProps, "table" | "compact" | "disabled"> & {
|
|
30
|
+
contained?: boolean;
|
|
31
|
+
}): import("react/jsx-runtime").JSX.Element | null;
|
|
29
32
|
export declare function DataTableCardControls({ table, enableSorting, enableFiltering, availableColumns, compact, disabled, }: DataTableCardControlsProps): import("react/jsx-runtime").JSX.Element | null;
|
|
30
33
|
//# sourceMappingURL=DataTableCardControls.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DataTableCardControls.d.ts","sourceRoot":"","sources":["../../../src/components/DataTable/DataTableCardControls.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AASH,OAAO,KAAK,EAAE,mBAAmB,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAK5E,MAAM,WAAW,0BAA0B;IACzC,mDAAmD;IACnD,KAAK,EAAE,GAAG,CAAC;IACX,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,6DAA6D;IAC7D,gBAAgB,CAAC,EAAE,KAAK,CAAC;QACvB,EAAE,EAAE,MAAM,CAAC;QACX,KAAK,EAAE,MAAM,CAAC;QACd,IAAI,EAAE,mBAAmB,CAAC;QAC1B,OAAO,CAAC,EAAE,mBAAmB,EAAE,CAAC;KACjC,CAAC,CAAC;IACH,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,kFAAkF;IAClF,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAOD,wBAAgB,qBAAqB,CAAC,EACpC,KAAK,EACL,aAAqB,EACrB,eAAuB,EACvB,gBAAqB,EACrB,OAAe,EACf,QAAgB,GACjB,EAAE,0BAA0B,
|
|
1
|
+
{"version":3,"file":"DataTableCardControls.d.ts","sourceRoot":"","sources":["../../../src/components/DataTable/DataTableCardControls.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AASH,OAAO,KAAK,EAAE,mBAAmB,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAK5E,MAAM,WAAW,0BAA0B;IACzC,mDAAmD;IACnD,KAAK,EAAE,GAAG,CAAC;IACX,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,6DAA6D;IAC7D,gBAAgB,CAAC,EAAE,KAAK,CAAC;QACvB,EAAE,EAAE,MAAM,CAAC;QACX,KAAK,EAAE,MAAM,CAAC;QACd,IAAI,EAAE,mBAAmB,CAAC;QAC1B,OAAO,CAAC,EAAE,mBAAmB,EAAE,CAAC;KACjC,CAAC,CAAC;IACH,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,kFAAkF;IAClF,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAOD,wBAAgB,wBAAwB,CAAC,EACvC,KAAK,EACL,OAAe,EACf,QAAgB,EAChB,SAAiB,GAClB,EAAE,IAAI,CAAC,0BAA0B,EAAE,OAAO,GAAG,SAAS,GAAG,UAAU,CAAC,GAAG;IAAE,SAAS,CAAC,EAAE,OAAO,CAAA;CAAE,kDAqF9F;AAED,wBAAgB,qBAAqB,CAAC,EACpC,KAAK,EACL,aAAqB,EACrB,eAAuB,EACvB,gBAAqB,EACrB,OAAe,EACf,QAAgB,GACjB,EAAE,0BAA0B,kDA6B5B"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DataTableRoot.d.ts","sourceRoot":"","sources":["../../../src/components/DataTable/DataTableRoot.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAcH,OAAO,KAA4D,MAAM,OAAO,CAAC;AAajF,OAAO,KAAK,EAIV,cAAc,EAEf,MAAM,aAAa,CAAC;AAgDrB,MAAM,WAAW,kBAAkB,CACjC,KAAK,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CACvD,SAAQ,cAAc,CAAC,KAAK,CAAC;IAC7B,mDAAmD;IACnD,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC3B,0CAA0C;IAC1C,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,0CAA0C;IAC1C,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,8DAA8D;IAC9D,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,wBAAgB,aAAa,CAAC,KAAK,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,EACrF,IAAI,EACJ,OAAO,EACP,YAAY,EACZ,eAAe,EACf,aAAa,EACb,OAAO,EACP,SAAS,EAAE,aAAa,EACxB,UAAU,EAAE,cAAc,EAC1B,WAAmB,EACnB,aAAmB,EACnB,WAAW,EACX,eAAuB,EACvB,gBAAwB,EACxB,aAAqB,EACrB,eAAsB,EACtB,gBAAgB,EAChB,aAAoB,EACpB,gBAAuB,EACvB,eAAe,EACf,cAAwB,EACxB,QAAQ,EACR,cAAc,EACd,sBAA6B,EAC7B,oBAA4B,EAC5B,oBAA4B,EAC5B,kBAAyB,EACzB,WAAmB,EACnB,YAAsB,EACtB,MAAe,EACf,oBAA4B,EAC5B,oBAAoB,EACpB,sBAA0B,EAC1B,kBAA0B,EAC1B,kBAAkB,EAClB,UAAU,EACV,mBAA2B,EAC3B,gBAAoB,EACpB,cAAsB,EACtB,wBAAgC,EAChC,UAAU,EACV,QAAQ,EACR,kBAA0B,EAC1B,cAAc,EAAE,kBAAkB,EAClC,WAAW,EACX,QAAgB,EAChB,YAAY,EACZ,IAAI,EACJ,IAAI,EAAE,QAAQ,EACd,cAAsB,EACtB,UAAkB,EAClB,aAAqB,EACrB,OAAW,EACX,OAAO,EACP,UAAU,EACV,YAAY,EACZ,QAAQ,EACR,SAAS,EACT,aAAa,EACb,gBAAgB,EAChB,aAAa,EAAE,cAAc,EAC7B,SAAS,EACT,IAAI,EACJ,OAAe,EACf,QAAgB,EAChB,MAAM,EACN,KAAK,EACL,OAAO,EACP,OAAO,EACP,QAAQ,EACR,YAAY,EAAE,SAAS,EACvB,kBAAkB,EAAE,eAAe,EACnC,GAAG,KAAK,EACT,EAAE,kBAAkB,CAAC,KAAK,CAAC,
|
|
1
|
+
{"version":3,"file":"DataTableRoot.d.ts","sourceRoot":"","sources":["../../../src/components/DataTable/DataTableRoot.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAcH,OAAO,KAA4D,MAAM,OAAO,CAAC;AAajF,OAAO,KAAK,EAIV,cAAc,EAEf,MAAM,aAAa,CAAC;AAgDrB,MAAM,WAAW,kBAAkB,CACjC,KAAK,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CACvD,SAAQ,cAAc,CAAC,KAAK,CAAC;IAC7B,mDAAmD;IACnD,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC3B,0CAA0C;IAC1C,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,0CAA0C;IAC1C,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,8DAA8D;IAC9D,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,wBAAgB,aAAa,CAAC,KAAK,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,EACrF,IAAI,EACJ,OAAO,EACP,YAAY,EACZ,eAAe,EACf,aAAa,EACb,OAAO,EACP,SAAS,EAAE,aAAa,EACxB,UAAU,EAAE,cAAc,EAC1B,WAAmB,EACnB,aAAmB,EACnB,WAAW,EACX,eAAuB,EACvB,gBAAwB,EACxB,aAAqB,EACrB,eAAsB,EACtB,gBAAgB,EAChB,aAAoB,EACpB,gBAAuB,EACvB,eAAe,EACf,cAAwB,EACxB,QAAQ,EACR,cAAc,EACd,sBAA6B,EAC7B,oBAA4B,EAC5B,oBAA4B,EAC5B,kBAAyB,EACzB,WAAmB,EACnB,YAAsB,EACtB,MAAe,EACf,oBAA4B,EAC5B,oBAAoB,EACpB,sBAA0B,EAC1B,kBAA0B,EAC1B,kBAAkB,EAClB,UAAU,EACV,mBAA2B,EAC3B,gBAAoB,EACpB,cAAsB,EACtB,wBAAgC,EAChC,UAAU,EACV,QAAQ,EACR,kBAA0B,EAC1B,cAAc,EAAE,kBAAkB,EAClC,WAAW,EACX,QAAgB,EAChB,YAAY,EACZ,IAAI,EACJ,IAAI,EAAE,QAAQ,EACd,cAAsB,EACtB,UAAkB,EAClB,aAAqB,EACrB,OAAW,EACX,OAAO,EACP,UAAU,EACV,YAAY,EACZ,QAAQ,EACR,SAAS,EACT,aAAa,EACb,gBAAgB,EAChB,aAAa,EAAE,cAAc,EAC7B,SAAS,EACT,IAAI,EACJ,OAAe,EACf,QAAgB,EAChB,MAAM,EACN,KAAK,EACL,OAAO,EACP,OAAO,EACP,QAAQ,EACR,YAAY,EAAE,SAAS,EACvB,kBAAkB,EAAE,eAAe,EACnC,GAAG,KAAK,EACT,EAAE,kBAAkB,CAAC,KAAK,CAAC,2CAkpE3B"}
|
|
@@ -12,5 +12,6 @@
|
|
|
12
12
|
* applies immediately; outside click / Escape just closes. Chip presses
|
|
13
13
|
* reopen this editor pre-filled via the context filterUi channel.
|
|
14
14
|
*/
|
|
15
|
-
export declare function DataTableFilterButton(): import("react/jsx-runtime").JSX.Element
|
|
15
|
+
export declare function DataTableFilterButton(): import("react/jsx-runtime").JSX.Element;
|
|
16
|
+
export declare function DataTableCardFilterButton(): import("react/jsx-runtime").JSX.Element;
|
|
16
17
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/DataTableFilterButton/index.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AA+EH,wBAAgB,qBAAqB,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/DataTableFilterButton/index.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AA+EH,wBAAgB,qBAAqB,4CAEpC;AAED,wBAAgB,yBAAyB,4CAExC"}
|
|
@@ -24,4 +24,5 @@ export interface DataTableToolbarProps {
|
|
|
24
24
|
compact?: boolean;
|
|
25
25
|
}
|
|
26
26
|
export declare function DataTableToolbar(props: DataTableToolbarProps): import("react/jsx-runtime").JSX.Element;
|
|
27
|
+
export declare function DataTableCardToolbar(props: DataTableToolbarProps): import("react/jsx-runtime").JSX.Element;
|
|
27
28
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/DataTableToolbar/index.tsx"],"names":[],"mappings":"AAKA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAI/B,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAM7C,MAAM,WAAW,qBAAqB;IAEpC,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,oBAAoB,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAG/C,cAAc,CAAC,EAAE,MAAM,IAAI,CAAC;IAC5B,wDAAwD;IACxD,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAG3B,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IACpC,UAAU,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;IACtC,KAAK,CAAC,EAAE,SAAS,EAAE,CAAC;IACpB,YAAY,CAAC,EAAE,MAAM,CAAC;IAGtB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,gFAAgF;IAChF,YAAY,CAAC,EAAE,OAAO,CAAC;IAGvB,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,aAAa,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAChC,kEAAkE;IAClE,UAAU,CAAC,EAAE,OAAO,CAAC;IAGrB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,qBAAqB,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/DataTableToolbar/index.tsx"],"names":[],"mappings":"AAKA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAI/B,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAM7C,MAAM,WAAW,qBAAqB;IAEpC,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,oBAAoB,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAG/C,cAAc,CAAC,EAAE,MAAM,IAAI,CAAC;IAC5B,wDAAwD;IACxD,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAG3B,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IACpC,UAAU,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;IACtC,KAAK,CAAC,EAAE,SAAS,EAAE,CAAC;IACpB,YAAY,CAAC,EAAE,MAAM,CAAC;IAGtB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,gFAAgF;IAChF,YAAY,CAAC,EAAE,OAAO,CAAC;IAGvB,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,aAAa,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAChC,kEAAkE;IAClE,UAAU,CAAC,EAAE,OAAO,CAAC;IAGrB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,qBAAqB,2CAE5D;AAED,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,qBAAqB,2CAEhE"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useDataTable.d.ts","sourceRoot":"","sources":["../../src/hooks/useDataTable.ts"],"names":[],"mappings":"AA0BA,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,EAAE,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EACtC,YAAY,EAAE,CAAC,KACZ,CAAC,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,KAAK,OAAO,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC;IACzF,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAiID,eAAO,MAAM,iBAAiB;4BA9HkB,MAAM,KAAG,gBAAgB;mCAgIxC,GAAG,eAAe,MAAM;8BAE7B,GAAG,aAAa,GAAG,eAAe,MAAM;6BAzCnB,MAAM,KAAG,gBAAgB;uBA4CrD,gBAAgB;CACpC,CAAC;AAGF,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"useDataTable.d.ts","sourceRoot":"","sources":["../../src/hooks/useDataTable.ts"],"names":[],"mappings":"AA0BA,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,EAAE,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EACtC,YAAY,EAAE,CAAC,KACZ,CAAC,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,KAAK,OAAO,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC;IACzF,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAiID,eAAO,MAAM,iBAAiB;4BA9HkB,MAAM,KAAG,gBAAgB;mCAgIxC,GAAG,eAAe,MAAM;8BAE7B,GAAG,aAAa,GAAG,eAAe,MAAM;6BAzCnB,MAAM,KAAG,gBAAgB;uBA4CrD,gBAAgB;CACpC,CAAC;AAGF,OAAO,KAAK,EAEV,aAAa,EAIb,mBAAmB,EACnB,kBAAkB,EACnB,MAAM,UAAU,CAAC;AA4ClB,wBAAgB,YAAY,CAAC,KAAK,SAAS,aAAa,GAAG,aAAa,EAAE,EACxE,IAAS,EACT,OAAY,EACZ,YAAY,EACZ,eAAe,EACf,aAAa,EACb,WAAmB,EACnB,aAAmB,EACnB,WAAW,EACX,eAAuB,EACvB,gBAAwB,EACxB,aAAqB,EACrB,eAAsB,EACtB,gBAAgB,EAChB,aAAoB,EACpB,gBAAgB,EAAE,iBAAwB,EAC1C,cAAwB,EACxB,QAAQ,EACR,cAAc,EACd,sBAA6B,EAC7B,oBAAoB,EAAE,qBAA6B,EACnD,oBAA4B,EAC5B,kBAAyB,EACzB,WAAW,EAAE,YAAoB,EACjC,kBAA0B,EAC1B,UAAU,EACV,mBAA2B,EAC3B,cAAsB,EACtB,kBAA0B,EAC1B,QAAQ,EACR,SAAS,EACT,SAAS,EAAE,aAAa,EACxB,UAAU,EAAE,cAAc,GAC3B,GAAE,mBAAmB,CAAC,KAAK,CAAC,GAAG;IAC9B,WAAW,CAAC,EAAE,gBAAgB,CAAC;CAC3B,GAAG,kBAAkB,CAAC,KAAK,CAAC,CAyiBjC"}
|