@bigbinary/neeto-atoms 1.0.42 → 1.0.44
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/dist/{DataTable-B6QeW254.js → DataTable-DZYQUYKJ.js} +171 -34
- package/dist/DataTable-DZYQUYKJ.js.map +1 -0
- package/dist/cjs/{DataTable-D6PwbV2u.js → DataTable-D4suNizi.js} +170 -33
- package/dist/cjs/DataTable-D4suNizi.js.map +1 -0
- package/dist/cjs/components/DataTable.js +1 -1
- package/dist/cjs/components/index.js +1 -1
- package/dist/cjs/index.js +1 -1
- package/dist/components/DataTable/components/ResizeHandle.d.ts +2 -1
- package/dist/components/DataTable/hooks/useColumnResize.d.ts +16 -0
- package/dist/components/DataTable/utils.d.ts +9 -0
- package/dist/components/DataTable.js +1 -1
- package/dist/components/index.js +1 -1
- package/dist/index.css +1 -1
- package/dist/index.js +1 -1
- package/package.json +1 -1
- package/dist/DataTable-B6QeW254.js.map +0 -1
- package/dist/cjs/DataTable-D6PwbV2u.js.map +0 -1
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
|
|
2
2
|
import * as React from 'react';
|
|
3
|
-
import { useState, useCallback, useEffect, useMemo, useRef } from 'react';
|
|
3
|
+
import { useState, useCallback, useEffect, useMemo, useRef, useLayoutEffect } from 'react';
|
|
4
4
|
import { TableRow, TableCell, Table, TableHeader, TableHead, TableBody } from './primitives/Table.js';
|
|
5
5
|
import { c as cn } from './utils-BJnb9o5c.js';
|
|
6
6
|
import { useTranslation } from 'react-i18next';
|
|
@@ -3226,6 +3226,24 @@ const writeToLocalStorage = (key, value) => {
|
|
|
3226
3226
|
} catch {
|
|
3227
3227
|
}
|
|
3228
3228
|
};
|
|
3229
|
+
const getResizeColumnStyle = ({
|
|
3230
|
+
size,
|
|
3231
|
+
isSelectionCol,
|
|
3232
|
+
isLastDataCol,
|
|
3233
|
+
enableResize,
|
|
3234
|
+
pinned,
|
|
3235
|
+
pinnedStart,
|
|
3236
|
+
pinnedEnd
|
|
3237
|
+
}) => ({
|
|
3238
|
+
width: isSelectionCol ? 0 : isLastDataCol ? void 0 : size,
|
|
3239
|
+
...enableResize && !isSelectionCol ? {
|
|
3240
|
+
minWidth: size,
|
|
3241
|
+
...isLastDataCol ? {} : { maxWidth: size },
|
|
3242
|
+
overflow: "hidden"
|
|
3243
|
+
} : {},
|
|
3244
|
+
...pinned === "left" ? { left: pinnedStart } : {},
|
|
3245
|
+
...pinned === "right" ? { right: pinnedEnd } : {}
|
|
3246
|
+
});
|
|
3229
3247
|
const getPageNumbers = (current, total) => {
|
|
3230
3248
|
if (total <= 7) {
|
|
3231
3249
|
return Array.from({ length: total }, (_, i) => i + 1);
|
|
@@ -3586,6 +3604,100 @@ const useColumnOrdering = ({
|
|
|
3586
3604
|
};
|
|
3587
3605
|
};
|
|
3588
3606
|
|
|
3607
|
+
const useColumnResize = ({
|
|
3608
|
+
enabled,
|
|
3609
|
+
table,
|
|
3610
|
+
columnVisibility,
|
|
3611
|
+
hasSelectionColumn,
|
|
3612
|
+
scrollContainerRef,
|
|
3613
|
+
columnSizing,
|
|
3614
|
+
setColumnSizing
|
|
3615
|
+
}) => {
|
|
3616
|
+
const [containerWidth, setContainerWidth] = useState(0);
|
|
3617
|
+
const userResizedColumnsRef = useRef(/* @__PURE__ */ new Set());
|
|
3618
|
+
const columns = table.options.columns;
|
|
3619
|
+
const clearUserResized = useCallback((columnId) => {
|
|
3620
|
+
userResizedColumnsRef.current.delete(columnId);
|
|
3621
|
+
}, []);
|
|
3622
|
+
const trackUserResize = useCallback(
|
|
3623
|
+
(updaterOrValue) => {
|
|
3624
|
+
setColumnSizing((prev) => {
|
|
3625
|
+
const next = typeof updaterOrValue === "function" ? updaterOrValue(prev) : updaterOrValue;
|
|
3626
|
+
for (const id of Object.keys(next)) {
|
|
3627
|
+
if (next[id] !== prev[id]) {
|
|
3628
|
+
userResizedColumnsRef.current.add(id);
|
|
3629
|
+
}
|
|
3630
|
+
}
|
|
3631
|
+
return next;
|
|
3632
|
+
});
|
|
3633
|
+
},
|
|
3634
|
+
[setColumnSizing]
|
|
3635
|
+
);
|
|
3636
|
+
useEffect(() => {
|
|
3637
|
+
const container = scrollContainerRef.current;
|
|
3638
|
+
if (!container || !enabled) return;
|
|
3639
|
+
let rafId;
|
|
3640
|
+
const observer = new ResizeObserver((entries) => {
|
|
3641
|
+
cancelAnimationFrame(rafId);
|
|
3642
|
+
rafId = requestAnimationFrame(() => {
|
|
3643
|
+
setContainerWidth(Math.round(entries[0].contentRect.width));
|
|
3644
|
+
});
|
|
3645
|
+
});
|
|
3646
|
+
observer.observe(container);
|
|
3647
|
+
return () => {
|
|
3648
|
+
cancelAnimationFrame(rafId);
|
|
3649
|
+
observer.disconnect();
|
|
3650
|
+
};
|
|
3651
|
+
}, [enabled, scrollContainerRef]);
|
|
3652
|
+
useLayoutEffect(() => {
|
|
3653
|
+
if (!enabled || containerWidth === 0) return;
|
|
3654
|
+
const leafColumns = table.getAllLeafColumns().filter((col) => col.id !== "_selection");
|
|
3655
|
+
let reservedWidth = 0;
|
|
3656
|
+
if (hasSelectionColumn) {
|
|
3657
|
+
const firstTh = scrollContainerRef.current?.querySelector("thead th");
|
|
3658
|
+
if (firstTh) {
|
|
3659
|
+
reservedWidth = firstTh.getBoundingClientRect().width;
|
|
3660
|
+
}
|
|
3661
|
+
}
|
|
3662
|
+
const availableWidth = containerWidth - reservedWidth;
|
|
3663
|
+
let userResizedTotal = 0;
|
|
3664
|
+
let autoDefaultTotal = 0;
|
|
3665
|
+
const visibleIds = new Set(leafColumns.map((col) => col.id));
|
|
3666
|
+
for (const id of userResizedColumnsRef.current) {
|
|
3667
|
+
if (!visibleIds.has(id)) userResizedColumnsRef.current.delete(id);
|
|
3668
|
+
}
|
|
3669
|
+
leafColumns.forEach((col) => {
|
|
3670
|
+
if (userResizedColumnsRef.current.has(col.id)) {
|
|
3671
|
+
userResizedTotal += columnSizing[col.id] ?? col.columnDef.size ?? 150;
|
|
3672
|
+
} else {
|
|
3673
|
+
autoDefaultTotal += col.columnDef.size ?? 150;
|
|
3674
|
+
}
|
|
3675
|
+
});
|
|
3676
|
+
if (autoDefaultTotal === 0) return;
|
|
3677
|
+
const autoAvailable = availableWidth - userResizedTotal;
|
|
3678
|
+
const scale = autoAvailable > 0 ? autoAvailable / autoDefaultTotal : 0;
|
|
3679
|
+
const newSizing = {};
|
|
3680
|
+
let changed = false;
|
|
3681
|
+
leafColumns.forEach((col) => {
|
|
3682
|
+
if (userResizedColumnsRef.current.has(col.id)) {
|
|
3683
|
+
newSizing[col.id] = columnSizing[col.id] ?? col.columnDef.size ?? 150;
|
|
3684
|
+
} else {
|
|
3685
|
+
const defaultSize = col.columnDef.size ?? 150;
|
|
3686
|
+
const newSize = scale > 0 ? Math.floor(defaultSize * scale) : defaultSize;
|
|
3687
|
+
if (newSize !== (columnSizing[col.id] ?? -1)) changed = true;
|
|
3688
|
+
newSizing[col.id] = newSize;
|
|
3689
|
+
}
|
|
3690
|
+
});
|
|
3691
|
+
if (changed) setColumnSizing((prev) => ({ ...prev, ...newSizing }));
|
|
3692
|
+
}, [containerWidth, enabled, columns, columnVisibility, hasSelectionColumn]);
|
|
3693
|
+
const lastDataColumnId = enabled ? (() => {
|
|
3694
|
+
const dataCols = table.getVisibleLeafColumns().filter((col) => col.id !== "_selection");
|
|
3695
|
+
const lastNonPinned = dataCols.filter((col) => !col.getIsPinned()).at(-1);
|
|
3696
|
+
return (lastNonPinned ?? dataCols.at(-1))?.id;
|
|
3697
|
+
})() : void 0;
|
|
3698
|
+
return { trackUserResize, lastDataColumnId, clearUserResized };
|
|
3699
|
+
};
|
|
3700
|
+
|
|
3589
3701
|
const LoadingOverlay = () => /* @__PURE__ */ jsx("div", { className: "absolute inset-0 z-10 flex items-center justify-center bg-background/50", children: /* @__PURE__ */ jsx(Spinner, { className: "size-6" }) });
|
|
3590
3702
|
|
|
3591
3703
|
const EmptyState = ({ colSpan, message }) => {
|
|
@@ -3612,14 +3724,20 @@ const SortIndicator = ({
|
|
|
3612
3724
|
return null;
|
|
3613
3725
|
};
|
|
3614
3726
|
|
|
3615
|
-
const ResizeHandle = ({
|
|
3727
|
+
const ResizeHandle = ({
|
|
3728
|
+
header,
|
|
3729
|
+
onReset
|
|
3730
|
+
}) => {
|
|
3616
3731
|
if (!header.column.getCanResize()) return null;
|
|
3617
3732
|
return /* @__PURE__ */ jsx(
|
|
3618
3733
|
"div",
|
|
3619
3734
|
{
|
|
3620
3735
|
onMouseDown: header.getResizeHandler(),
|
|
3621
3736
|
onTouchStart: header.getResizeHandler(),
|
|
3622
|
-
onDoubleClick: () =>
|
|
3737
|
+
onDoubleClick: () => {
|
|
3738
|
+
header.column.resetSize();
|
|
3739
|
+
onReset?.(header.column.id);
|
|
3740
|
+
},
|
|
3623
3741
|
className: cn(
|
|
3624
3742
|
"absolute top-0 end-0 h-full w-1 cursor-col-resize select-none touch-none",
|
|
3625
3743
|
header.column.getIsResizing() ? "bg-primary" : "bg-border opacity-0 group-hover/head:opacity-100"
|
|
@@ -3961,11 +4079,15 @@ const DataTable = ({
|
|
|
3961
4079
|
});
|
|
3962
4080
|
const showHeaderMenu = enableHeaderMenu ?? (enableColumnFreeze || enableAddColumn || !!onColumnHideProp || !!onColumnDelete || !!onColumnUpdate || !!onMoreActionClick);
|
|
3963
4081
|
const allColumns = useMemo(() => {
|
|
4082
|
+
const cols = enableColumnResize ? columns.map((col) => ({
|
|
4083
|
+
...col,
|
|
4084
|
+
minSize: col.minSize ?? col.size ?? 150
|
|
4085
|
+
})) : columns;
|
|
3964
4086
|
if (selectionColumn) {
|
|
3965
|
-
return [selectionColumn, ...
|
|
4087
|
+
return [selectionColumn, ...cols];
|
|
3966
4088
|
}
|
|
3967
|
-
return
|
|
3968
|
-
}, [columns, selectionColumn]);
|
|
4089
|
+
return cols;
|
|
4090
|
+
}, [columns, selectionColumn, enableColumnResize]);
|
|
3969
4091
|
const resolvedColumnOrder = useMemo(() => {
|
|
3970
4092
|
if (columnOrder.length === 0) return [];
|
|
3971
4093
|
if (selectionColumn && !columnOrder.includes("_selection")) {
|
|
@@ -3979,6 +4101,8 @@ const DataTable = ({
|
|
|
3979
4101
|
if (left.includes("_selection")) return columnPinning;
|
|
3980
4102
|
return { ...columnPinning, left: ["_selection", ...left] };
|
|
3981
4103
|
}, [columnPinning, selectionColumn, enableColumnFreeze]);
|
|
4104
|
+
const scrollContainerRef = useRef(null);
|
|
4105
|
+
const [columnSizing, setColumnSizing] = useState({});
|
|
3982
4106
|
const table = useReactTable({
|
|
3983
4107
|
data,
|
|
3984
4108
|
columns: allColumns,
|
|
@@ -3992,7 +4116,8 @@ const DataTable = ({
|
|
|
3992
4116
|
rowSelection,
|
|
3993
4117
|
columnPinning: resolvedColumnPinning,
|
|
3994
4118
|
columnVisibility,
|
|
3995
|
-
columnOrder: resolvedColumnOrder
|
|
4119
|
+
columnOrder: resolvedColumnOrder,
|
|
4120
|
+
columnSizing
|
|
3996
4121
|
},
|
|
3997
4122
|
onSortingChange,
|
|
3998
4123
|
manualPagination: true,
|
|
@@ -4007,6 +4132,19 @@ const DataTable = ({
|
|
|
4007
4132
|
onColumnVisibilityChange,
|
|
4008
4133
|
onColumnOrderChange
|
|
4009
4134
|
});
|
|
4135
|
+
const { trackUserResize, lastDataColumnId, clearUserResized } = useColumnResize({
|
|
4136
|
+
enabled: enableColumnResize,
|
|
4137
|
+
table,
|
|
4138
|
+
columnVisibility,
|
|
4139
|
+
hasSelectionColumn: !!selectionColumn,
|
|
4140
|
+
scrollContainerRef,
|
|
4141
|
+
columnSizing,
|
|
4142
|
+
setColumnSizing
|
|
4143
|
+
});
|
|
4144
|
+
table.setOptions((prev) => ({
|
|
4145
|
+
...prev,
|
|
4146
|
+
onColumnSizingChange: trackUserResize
|
|
4147
|
+
}));
|
|
4010
4148
|
const [bulkSelectedAllRows, setBulkSelectedAllRowsInternal] = useState(false);
|
|
4011
4149
|
const isAutoSelectingRef = useRef(false);
|
|
4012
4150
|
const bulkSelectedRef = useRef(false);
|
|
@@ -4033,7 +4171,6 @@ const DataTable = ({
|
|
|
4033
4171
|
table.toggleAllPageRowsSelected(false);
|
|
4034
4172
|
onRowSelect?.([], []);
|
|
4035
4173
|
};
|
|
4036
|
-
const scrollContainerRef = useRef(null);
|
|
4037
4174
|
const [scrollState, setScrollState] = useState({
|
|
4038
4175
|
scrolledStart: false,
|
|
4039
4176
|
scrolledEnd: false
|
|
@@ -4093,10 +4230,6 @@ const DataTable = ({
|
|
|
4093
4230
|
const dataHeaders = headerGroup.headers.filter(
|
|
4094
4231
|
(header) => header.column.id !== "_selection"
|
|
4095
4232
|
);
|
|
4096
|
-
const totalDataSize = dataHeaders.reduce(
|
|
4097
|
-
(sum, header) => sum + header.getSize(),
|
|
4098
|
-
0
|
|
4099
|
-
);
|
|
4100
4233
|
return /* @__PURE__ */ jsx(TableRow, { className: "hover:bg-muted", children: headerGroup.headers.map((header, headerIndex) => {
|
|
4101
4234
|
const isPinned = header.column.getIsPinned();
|
|
4102
4235
|
const isSelectionCol = header.column.id === "_selection";
|
|
@@ -4114,16 +4247,15 @@ const DataTable = ({
|
|
|
4114
4247
|
isPinned === "left" && "after:pointer-events-none after:absolute after:inset-y-0 after:-right-2 after:w-2 after:bg-gradient-to-r after:from-black/6 after:to-transparent after:opacity-0 after:transition-opacity after:duration-200 after:content-[''] group-data-[scrolled-start]/scroll:after:opacity-100 dark:after:from-white/6",
|
|
4115
4248
|
isPinned === "right" && "before:pointer-events-none before:absolute before:inset-y-0 before:-left-2 before:w-2 before:bg-gradient-to-l before:from-black/6 before:to-transparent before:opacity-0 before:transition-opacity before:duration-200 before:content-[''] group-data-[scrolled-end]/scroll:before:opacity-100 dark:before:from-white/6"
|
|
4116
4249
|
),
|
|
4117
|
-
style: {
|
|
4118
|
-
|
|
4119
|
-
|
|
4120
|
-
|
|
4121
|
-
|
|
4122
|
-
|
|
4123
|
-
|
|
4124
|
-
|
|
4125
|
-
|
|
4126
|
-
},
|
|
4250
|
+
style: getResizeColumnStyle({
|
|
4251
|
+
size: header.getSize(),
|
|
4252
|
+
isSelectionCol,
|
|
4253
|
+
isLastDataCol: header.column.id === lastDataColumnId,
|
|
4254
|
+
enableResize: enableColumnResize,
|
|
4255
|
+
pinned: isPinned,
|
|
4256
|
+
pinnedStart: header.column.getStart("left"),
|
|
4257
|
+
pinnedEnd: header.column.getAfter("right")
|
|
4258
|
+
}),
|
|
4127
4259
|
onClick: header.column.getCanSort() ? header.column.getToggleSortingHandler() : void 0,
|
|
4128
4260
|
children: [
|
|
4129
4261
|
header.isPlaceholder ? null : /* @__PURE__ */ jsxs("div", { className: "flex items-center", children: [
|
|
@@ -4154,7 +4286,13 @@ const DataTable = ({
|
|
|
4154
4286
|
}
|
|
4155
4287
|
)
|
|
4156
4288
|
] }),
|
|
4157
|
-
enableColumnResize && /* @__PURE__ */ jsx(
|
|
4289
|
+
enableColumnResize && /* @__PURE__ */ jsx(
|
|
4290
|
+
ResizeHandle,
|
|
4291
|
+
{
|
|
4292
|
+
header,
|
|
4293
|
+
onReset: clearUserResized
|
|
4294
|
+
}
|
|
4295
|
+
)
|
|
4158
4296
|
]
|
|
4159
4297
|
},
|
|
4160
4298
|
header.id
|
|
@@ -4182,16 +4320,15 @@ const DataTable = ({
|
|
|
4182
4320
|
isPinned === "left" && "after:pointer-events-none after:absolute after:inset-y-0 after:-right-2 after:w-2 after:bg-gradient-to-r after:from-black/6 after:to-transparent after:opacity-0 after:transition-opacity after:duration-200 after:content-[''] group-data-[scrolled-start]/scroll:after:opacity-100 dark:after:from-white/6",
|
|
4183
4321
|
isPinned === "right" && "before:pointer-events-none before:absolute before:inset-y-0 before:-left-2 before:w-2 before:bg-gradient-to-l before:from-black/6 before:to-transparent before:opacity-0 before:transition-opacity before:duration-200 before:content-[''] group-data-[scrolled-end]/scroll:before:opacity-100 dark:before:from-white/6"
|
|
4184
4322
|
),
|
|
4185
|
-
style: {
|
|
4186
|
-
|
|
4187
|
-
|
|
4188
|
-
|
|
4189
|
-
|
|
4190
|
-
|
|
4191
|
-
|
|
4192
|
-
|
|
4193
|
-
|
|
4194
|
-
},
|
|
4323
|
+
style: getResizeColumnStyle({
|
|
4324
|
+
size: cell.column.getSize(),
|
|
4325
|
+
isSelectionCol: isSelCell,
|
|
4326
|
+
isLastDataCol: cell.column.id === lastDataColumnId,
|
|
4327
|
+
enableResize: enableColumnResize,
|
|
4328
|
+
pinned: isPinned,
|
|
4329
|
+
pinnedStart: cell.column.getStart("left"),
|
|
4330
|
+
pinnedEnd: cell.column.getAfter("right")
|
|
4331
|
+
}),
|
|
4195
4332
|
children: flexRender(
|
|
4196
4333
|
cell.column.columnDef.cell,
|
|
4197
4334
|
cell.getContext()
|
|
@@ -4218,4 +4355,4 @@ const DataTable = ({
|
|
|
4218
4355
|
};
|
|
4219
4356
|
|
|
4220
4357
|
export { DataTable as D, useColumnPinning as a, useColumnVisibility as b, useTablePagination as c, useTableSelection as d, useTableSort as e, useColumnOrdering as u };
|
|
4221
|
-
//# sourceMappingURL=DataTable-
|
|
4358
|
+
//# sourceMappingURL=DataTable-DZYQUYKJ.js.map
|