@bigbinary/neeto-atoms 1.0.43 → 1.0.45

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.
Files changed (104) hide show
  1. package/dist/{ColorPicker-D7Y1gZNn.js → ColorPicker-ClnRUq9y.js} +2 -2
  2. package/dist/{ColorPicker-D7Y1gZNn.js.map → ColorPicker-ClnRUq9y.js.map} +1 -1
  3. package/dist/{DataTable-B6QeW254.js → DataTable-DZYQUYKJ.js} +171 -34
  4. package/dist/DataTable-DZYQUYKJ.js.map +1 -0
  5. package/dist/{DatePicker-CV3nsugu.js → DatePicker-D-0HMiNG.js} +17 -5
  6. package/dist/DatePicker-D-0HMiNG.js.map +1 -0
  7. package/dist/{Input-xjYQfsaz.js → Input-DrpfsLAw.js} +22 -6
  8. package/dist/Input-DrpfsLAw.js.map +1 -0
  9. package/dist/{MultiEmailInput-L-QJg0hh.js → MultiEmailInput-DhjSEXbS.js} +6 -5
  10. package/dist/MultiEmailInput-DhjSEXbS.js.map +1 -0
  11. package/dist/{Select-o0yJaN0P.js → Select-BiyQTuiQ.js} +20 -12
  12. package/dist/Select-BiyQTuiQ.js.map +1 -0
  13. package/dist/{TimePicker-XE0sCXE6.js → TimePicker-CSjiggpr.js} +17 -5
  14. package/dist/TimePicker-CSjiggpr.js.map +1 -0
  15. package/dist/{TreeSelect-Dk299XMv.js → TreeSelect-BwF2rY6f.js} +7 -4
  16. package/dist/{TreeSelect-Dk299XMv.js.map → TreeSelect-BwF2rY6f.js.map} +1 -1
  17. package/dist/cjs/{ColorPicker-Co1Gffsu.js → ColorPicker-rhCnblTv.js} +2 -2
  18. package/dist/cjs/{ColorPicker-Co1Gffsu.js.map → ColorPicker-rhCnblTv.js.map} +1 -1
  19. package/dist/cjs/{DataTable-D6PwbV2u.js → DataTable-D4suNizi.js} +170 -33
  20. package/dist/cjs/DataTable-D4suNizi.js.map +1 -0
  21. package/dist/cjs/{DatePicker-CqnlwzLe.js → DatePicker-JhQ7D2bu.js} +17 -5
  22. package/dist/cjs/DatePicker-JhQ7D2bu.js.map +1 -0
  23. package/dist/cjs/{Input-CpuJXazH.js → Input-Lc77SV8e.js} +22 -6
  24. package/dist/cjs/Input-Lc77SV8e.js.map +1 -0
  25. package/dist/cjs/{MultiEmailInput-CPXODFvs.js → MultiEmailInput-BZtzoX7D.js} +6 -5
  26. package/dist/cjs/MultiEmailInput-BZtzoX7D.js.map +1 -0
  27. package/dist/cjs/{Select-DbfPhEu0.js → Select-DC23xcMU.js} +20 -12
  28. package/dist/cjs/Select-DC23xcMU.js.map +1 -0
  29. package/dist/cjs/{TimePicker-BGWNGfVR.js → TimePicker-CU7qJpoT.js} +17 -5
  30. package/dist/cjs/TimePicker-CU7qJpoT.js.map +1 -0
  31. package/dist/cjs/{TreeSelect-Cmm5yYq3.js → TreeSelect-qLtRIP-s.js} +7 -4
  32. package/dist/cjs/{TreeSelect-Cmm5yYq3.js.map → TreeSelect-qLtRIP-s.js.map} +1 -1
  33. package/dist/cjs/components/ColorPicker.js +1 -1
  34. package/dist/cjs/components/DataTable.js +1 -1
  35. package/dist/cjs/components/DatePicker.js +1 -1
  36. package/dist/cjs/components/Input.js +2 -1
  37. package/dist/cjs/components/Input.js.map +1 -1
  38. package/dist/cjs/components/MultiEmailInput.js +2 -1
  39. package/dist/cjs/components/MultiEmailInput.js.map +1 -1
  40. package/dist/cjs/components/Select.js +1 -1
  41. package/dist/cjs/components/TimePicker.js +1 -1
  42. package/dist/cjs/components/TreeSelect.js +1 -1
  43. package/dist/cjs/components/index.js +9 -8
  44. package/dist/cjs/components/index.js.map +1 -1
  45. package/dist/cjs/formik/Input.js +2 -1
  46. package/dist/cjs/formik/Input.js.map +1 -1
  47. package/dist/cjs/formik/MultiEmailInput.js +2 -1
  48. package/dist/cjs/formik/MultiEmailInput.js.map +1 -1
  49. package/dist/cjs/formik/Select.js +1 -1
  50. package/dist/cjs/formik/TreeSelect.js +1 -1
  51. package/dist/cjs/formik/index.js +5 -4
  52. package/dist/cjs/formik/index.js.map +1 -1
  53. package/dist/cjs/index.js +9 -8
  54. package/dist/cjs/index.js.map +1 -1
  55. package/dist/cjs/withIconSize-BKUwVY6t.js +19 -0
  56. package/dist/cjs/withIconSize-BKUwVY6t.js.map +1 -0
  57. package/dist/components/ColorPicker.js +1 -1
  58. package/dist/components/DataTable/components/ResizeHandle.d.ts +2 -1
  59. package/dist/components/DataTable/hooks/useColumnResize.d.ts +16 -0
  60. package/dist/components/DataTable/utils.d.ts +9 -0
  61. package/dist/components/DataTable.js +1 -1
  62. package/dist/components/DatePicker/constants.d.ts +7 -4
  63. package/dist/components/DatePicker.js +1 -1
  64. package/dist/components/Input/constants.d.ts +3 -0
  65. package/dist/components/Input.js +2 -1
  66. package/dist/components/Input.js.map +1 -1
  67. package/dist/components/MultiEmailInput.js +2 -1
  68. package/dist/components/MultiEmailInput.js.map +1 -1
  69. package/dist/components/Select/MultiSelectCombobox.types.d.ts +1 -0
  70. package/dist/components/Select/SelectCombobox.types.d.ts +1 -0
  71. package/dist/components/Select/constants.d.ts +1 -0
  72. package/dist/components/Select.js +1 -1
  73. package/dist/components/TimePicker.js +1 -1
  74. package/dist/components/TreeSelect.js +1 -1
  75. package/dist/components/index.js +9 -8
  76. package/dist/components/index.js.map +1 -1
  77. package/dist/formik/Input.js +2 -1
  78. package/dist/formik/Input.js.map +1 -1
  79. package/dist/formik/MultiEmailInput.js +2 -1
  80. package/dist/formik/MultiEmailInput.js.map +1 -1
  81. package/dist/formik/Select.js +1 -1
  82. package/dist/formik/TreeSelect.js +1 -1
  83. package/dist/formik/index.js +5 -4
  84. package/dist/formik/index.js.map +1 -1
  85. package/dist/hooks/useMultiSelectState.d.ts +1 -0
  86. package/dist/hooks/useSelectState.d.ts +1 -0
  87. package/dist/index.js +9 -8
  88. package/dist/index.js.map +1 -1
  89. package/dist/utils/withIconSize.d.ts +12 -0
  90. package/dist/withIconSize-Czt1EelO.js +13 -0
  91. package/dist/withIconSize-Czt1EelO.js.map +1 -0
  92. package/package.json +1 -1
  93. package/dist/DataTable-B6QeW254.js.map +0 -1
  94. package/dist/DatePicker-CV3nsugu.js.map +0 -1
  95. package/dist/Input-xjYQfsaz.js.map +0 -1
  96. package/dist/MultiEmailInput-L-QJg0hh.js.map +0 -1
  97. package/dist/Select-o0yJaN0P.js.map +0 -1
  98. package/dist/TimePicker-XE0sCXE6.js.map +0 -1
  99. package/dist/cjs/DataTable-D6PwbV2u.js.map +0 -1
  100. package/dist/cjs/DatePicker-CqnlwzLe.js.map +0 -1
  101. package/dist/cjs/Input-CpuJXazH.js.map +0 -1
  102. package/dist/cjs/MultiEmailInput-CPXODFvs.js.map +0 -1
  103. package/dist/cjs/Select-DbfPhEu0.js.map +0 -1
  104. package/dist/cjs/TimePicker-BGWNGfVR.js.map +0 -1
@@ -3247,6 +3247,24 @@ const writeToLocalStorage = (key, value) => {
3247
3247
  } catch {
3248
3248
  }
3249
3249
  };
3250
+ const getResizeColumnStyle = ({
3251
+ size,
3252
+ isSelectionCol,
3253
+ isLastDataCol,
3254
+ enableResize,
3255
+ pinned,
3256
+ pinnedStart,
3257
+ pinnedEnd
3258
+ }) => ({
3259
+ width: isSelectionCol ? 0 : isLastDataCol ? void 0 : size,
3260
+ ...enableResize && !isSelectionCol ? {
3261
+ minWidth: size,
3262
+ ...isLastDataCol ? {} : { maxWidth: size },
3263
+ overflow: "hidden"
3264
+ } : {},
3265
+ ...pinned === "left" ? { left: pinnedStart } : {},
3266
+ ...pinned === "right" ? { right: pinnedEnd } : {}
3267
+ });
3250
3268
  const getPageNumbers = (current, total) => {
3251
3269
  if (total <= 7) {
3252
3270
  return Array.from({ length: total }, (_, i) => i + 1);
@@ -3607,6 +3625,100 @@ const useColumnOrdering = ({
3607
3625
  };
3608
3626
  };
3609
3627
 
3628
+ const useColumnResize = ({
3629
+ enabled,
3630
+ table,
3631
+ columnVisibility,
3632
+ hasSelectionColumn,
3633
+ scrollContainerRef,
3634
+ columnSizing,
3635
+ setColumnSizing
3636
+ }) => {
3637
+ const [containerWidth, setContainerWidth] = React.useState(0);
3638
+ const userResizedColumnsRef = React.useRef(/* @__PURE__ */ new Set());
3639
+ const columns = table.options.columns;
3640
+ const clearUserResized = React.useCallback((columnId) => {
3641
+ userResizedColumnsRef.current.delete(columnId);
3642
+ }, []);
3643
+ const trackUserResize = React.useCallback(
3644
+ (updaterOrValue) => {
3645
+ setColumnSizing((prev) => {
3646
+ const next = typeof updaterOrValue === "function" ? updaterOrValue(prev) : updaterOrValue;
3647
+ for (const id of Object.keys(next)) {
3648
+ if (next[id] !== prev[id]) {
3649
+ userResizedColumnsRef.current.add(id);
3650
+ }
3651
+ }
3652
+ return next;
3653
+ });
3654
+ },
3655
+ [setColumnSizing]
3656
+ );
3657
+ React.useEffect(() => {
3658
+ const container = scrollContainerRef.current;
3659
+ if (!container || !enabled) return;
3660
+ let rafId;
3661
+ const observer = new ResizeObserver((entries) => {
3662
+ cancelAnimationFrame(rafId);
3663
+ rafId = requestAnimationFrame(() => {
3664
+ setContainerWidth(Math.round(entries[0].contentRect.width));
3665
+ });
3666
+ });
3667
+ observer.observe(container);
3668
+ return () => {
3669
+ cancelAnimationFrame(rafId);
3670
+ observer.disconnect();
3671
+ };
3672
+ }, [enabled, scrollContainerRef]);
3673
+ React.useLayoutEffect(() => {
3674
+ if (!enabled || containerWidth === 0) return;
3675
+ const leafColumns = table.getAllLeafColumns().filter((col) => col.id !== "_selection");
3676
+ let reservedWidth = 0;
3677
+ if (hasSelectionColumn) {
3678
+ const firstTh = scrollContainerRef.current?.querySelector("thead th");
3679
+ if (firstTh) {
3680
+ reservedWidth = firstTh.getBoundingClientRect().width;
3681
+ }
3682
+ }
3683
+ const availableWidth = containerWidth - reservedWidth;
3684
+ let userResizedTotal = 0;
3685
+ let autoDefaultTotal = 0;
3686
+ const visibleIds = new Set(leafColumns.map((col) => col.id));
3687
+ for (const id of userResizedColumnsRef.current) {
3688
+ if (!visibleIds.has(id)) userResizedColumnsRef.current.delete(id);
3689
+ }
3690
+ leafColumns.forEach((col) => {
3691
+ if (userResizedColumnsRef.current.has(col.id)) {
3692
+ userResizedTotal += columnSizing[col.id] ?? col.columnDef.size ?? 150;
3693
+ } else {
3694
+ autoDefaultTotal += col.columnDef.size ?? 150;
3695
+ }
3696
+ });
3697
+ if (autoDefaultTotal === 0) return;
3698
+ const autoAvailable = availableWidth - userResizedTotal;
3699
+ const scale = autoAvailable > 0 ? autoAvailable / autoDefaultTotal : 0;
3700
+ const newSizing = {};
3701
+ let changed = false;
3702
+ leafColumns.forEach((col) => {
3703
+ if (userResizedColumnsRef.current.has(col.id)) {
3704
+ newSizing[col.id] = columnSizing[col.id] ?? col.columnDef.size ?? 150;
3705
+ } else {
3706
+ const defaultSize = col.columnDef.size ?? 150;
3707
+ const newSize = scale > 0 ? Math.floor(defaultSize * scale) : defaultSize;
3708
+ if (newSize !== (columnSizing[col.id] ?? -1)) changed = true;
3709
+ newSizing[col.id] = newSize;
3710
+ }
3711
+ });
3712
+ if (changed) setColumnSizing((prev) => ({ ...prev, ...newSizing }));
3713
+ }, [containerWidth, enabled, columns, columnVisibility, hasSelectionColumn]);
3714
+ const lastDataColumnId = enabled ? (() => {
3715
+ const dataCols = table.getVisibleLeafColumns().filter((col) => col.id !== "_selection");
3716
+ const lastNonPinned = dataCols.filter((col) => !col.getIsPinned()).at(-1);
3717
+ return (lastNonPinned ?? dataCols.at(-1))?.id;
3718
+ })() : void 0;
3719
+ return { trackUserResize, lastDataColumnId, clearUserResized };
3720
+ };
3721
+
3610
3722
  const LoadingOverlay = () => /* @__PURE__ */ jsxRuntime.jsx("div", { className: "absolute inset-0 z-10 flex items-center justify-center bg-background/50", children: /* @__PURE__ */ jsxRuntime.jsx(primitives_Spinner.Spinner, { className: "size-6" }) });
3611
3723
 
3612
3724
  const EmptyState = ({ colSpan, message }) => {
@@ -3633,14 +3745,20 @@ const SortIndicator = ({
3633
3745
  return null;
3634
3746
  };
3635
3747
 
3636
- const ResizeHandle = ({ header }) => {
3748
+ const ResizeHandle = ({
3749
+ header,
3750
+ onReset
3751
+ }) => {
3637
3752
  if (!header.column.getCanResize()) return null;
3638
3753
  return /* @__PURE__ */ jsxRuntime.jsx(
3639
3754
  "div",
3640
3755
  {
3641
3756
  onMouseDown: header.getResizeHandler(),
3642
3757
  onTouchStart: header.getResizeHandler(),
3643
- onDoubleClick: () => header.column.resetSize(),
3758
+ onDoubleClick: () => {
3759
+ header.column.resetSize();
3760
+ onReset?.(header.column.id);
3761
+ },
3644
3762
  className: utils.cn(
3645
3763
  "absolute top-0 end-0 h-full w-1 cursor-col-resize select-none touch-none",
3646
3764
  header.column.getIsResizing() ? "bg-primary" : "bg-border opacity-0 group-hover/head:opacity-100"
@@ -3982,11 +4100,15 @@ const DataTable = ({
3982
4100
  });
3983
4101
  const showHeaderMenu = enableHeaderMenu ?? (enableColumnFreeze || enableAddColumn || !!onColumnHideProp || !!onColumnDelete || !!onColumnUpdate || !!onMoreActionClick);
3984
4102
  const allColumns = React.useMemo(() => {
4103
+ const cols = enableColumnResize ? columns.map((col) => ({
4104
+ ...col,
4105
+ minSize: col.minSize ?? col.size ?? 150
4106
+ })) : columns;
3985
4107
  if (selectionColumn) {
3986
- return [selectionColumn, ...columns];
4108
+ return [selectionColumn, ...cols];
3987
4109
  }
3988
- return columns;
3989
- }, [columns, selectionColumn]);
4110
+ return cols;
4111
+ }, [columns, selectionColumn, enableColumnResize]);
3990
4112
  const resolvedColumnOrder = React.useMemo(() => {
3991
4113
  if (columnOrder.length === 0) return [];
3992
4114
  if (selectionColumn && !columnOrder.includes("_selection")) {
@@ -4000,6 +4122,8 @@ const DataTable = ({
4000
4122
  if (left.includes("_selection")) return columnPinning;
4001
4123
  return { ...columnPinning, left: ["_selection", ...left] };
4002
4124
  }, [columnPinning, selectionColumn, enableColumnFreeze]);
4125
+ const scrollContainerRef = React.useRef(null);
4126
+ const [columnSizing, setColumnSizing] = React.useState({});
4003
4127
  const table = useReactTable({
4004
4128
  data,
4005
4129
  columns: allColumns,
@@ -4013,7 +4137,8 @@ const DataTable = ({
4013
4137
  rowSelection,
4014
4138
  columnPinning: resolvedColumnPinning,
4015
4139
  columnVisibility,
4016
- columnOrder: resolvedColumnOrder
4140
+ columnOrder: resolvedColumnOrder,
4141
+ columnSizing
4017
4142
  },
4018
4143
  onSortingChange,
4019
4144
  manualPagination: true,
@@ -4028,6 +4153,19 @@ const DataTable = ({
4028
4153
  onColumnVisibilityChange,
4029
4154
  onColumnOrderChange
4030
4155
  });
4156
+ const { trackUserResize, lastDataColumnId, clearUserResized } = useColumnResize({
4157
+ enabled: enableColumnResize,
4158
+ table,
4159
+ columnVisibility,
4160
+ hasSelectionColumn: !!selectionColumn,
4161
+ scrollContainerRef,
4162
+ columnSizing,
4163
+ setColumnSizing
4164
+ });
4165
+ table.setOptions((prev) => ({
4166
+ ...prev,
4167
+ onColumnSizingChange: trackUserResize
4168
+ }));
4031
4169
  const [bulkSelectedAllRows, setBulkSelectedAllRowsInternal] = React.useState(false);
4032
4170
  const isAutoSelectingRef = React.useRef(false);
4033
4171
  const bulkSelectedRef = React.useRef(false);
@@ -4054,7 +4192,6 @@ const DataTable = ({
4054
4192
  table.toggleAllPageRowsSelected(false);
4055
4193
  onRowSelect?.([], []);
4056
4194
  };
4057
- const scrollContainerRef = React.useRef(null);
4058
4195
  const [scrollState, setScrollState] = React.useState({
4059
4196
  scrolledStart: false,
4060
4197
  scrolledEnd: false
@@ -4114,10 +4251,6 @@ const DataTable = ({
4114
4251
  const dataHeaders = headerGroup.headers.filter(
4115
4252
  (header) => header.column.id !== "_selection"
4116
4253
  );
4117
- const totalDataSize = dataHeaders.reduce(
4118
- (sum, header) => sum + header.getSize(),
4119
- 0
4120
- );
4121
4254
  return /* @__PURE__ */ jsxRuntime.jsx(primitives_Table.TableRow, { className: "hover:bg-muted", children: headerGroup.headers.map((header, headerIndex) => {
4122
4255
  const isPinned = header.column.getIsPinned();
4123
4256
  const isSelectionCol = header.column.id === "_selection";
@@ -4135,16 +4268,15 @@ const DataTable = ({
4135
4268
  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",
4136
4269
  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"
4137
4270
  ),
4138
- style: {
4139
- width: selectionColumn && isSelectionCol ? 0 : selectionColumn ? `${header.getSize() / totalDataSize * 100}%` : header.getSize(),
4140
- minWidth: enableColumnResize ? header.getSize() : void 0,
4141
- ...isPinned === "left" ? {
4142
- left: header.column.getStart("left")
4143
- } : {},
4144
- ...isPinned === "right" ? {
4145
- right: header.column.getAfter("right")
4146
- } : {}
4147
- },
4271
+ style: getResizeColumnStyle({
4272
+ size: header.getSize(),
4273
+ isSelectionCol,
4274
+ isLastDataCol: header.column.id === lastDataColumnId,
4275
+ enableResize: enableColumnResize,
4276
+ pinned: isPinned,
4277
+ pinnedStart: header.column.getStart("left"),
4278
+ pinnedEnd: header.column.getAfter("right")
4279
+ }),
4148
4280
  onClick: header.column.getCanSort() ? header.column.getToggleSortingHandler() : void 0,
4149
4281
  children: [
4150
4282
  header.isPlaceholder ? null : /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center", children: [
@@ -4175,7 +4307,13 @@ const DataTable = ({
4175
4307
  }
4176
4308
  )
4177
4309
  ] }),
4178
- enableColumnResize && /* @__PURE__ */ jsxRuntime.jsx(ResizeHandle, { header })
4310
+ enableColumnResize && /* @__PURE__ */ jsxRuntime.jsx(
4311
+ ResizeHandle,
4312
+ {
4313
+ header,
4314
+ onReset: clearUserResized
4315
+ }
4316
+ )
4179
4317
  ]
4180
4318
  },
4181
4319
  header.id
@@ -4203,16 +4341,15 @@ const DataTable = ({
4203
4341
  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",
4204
4342
  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"
4205
4343
  ),
4206
- style: {
4207
- width: selectionColumn && isSelCell ? 0 : cell.column.getSize(),
4208
- minWidth: enableColumnResize ? cell.column.getSize() : void 0,
4209
- ...isPinned === "left" ? {
4210
- left: cell.column.getStart("left")
4211
- } : {},
4212
- ...isPinned === "right" ? {
4213
- right: cell.column.getAfter("right")
4214
- } : {}
4215
- },
4344
+ style: getResizeColumnStyle({
4345
+ size: cell.column.getSize(),
4346
+ isSelectionCol: isSelCell,
4347
+ isLastDataCol: cell.column.id === lastDataColumnId,
4348
+ enableResize: enableColumnResize,
4349
+ pinned: isPinned,
4350
+ pinnedStart: cell.column.getStart("left"),
4351
+ pinnedEnd: cell.column.getAfter("right")
4352
+ }),
4216
4353
  children: flexRender(
4217
4354
  cell.column.columnDef.cell,
4218
4355
  cell.getContext()
@@ -4245,4 +4382,4 @@ exports.useColumnVisibility = useColumnVisibility;
4245
4382
  exports.useTablePagination = useTablePagination;
4246
4383
  exports.useTableSelection = useTableSelection;
4247
4384
  exports.useTableSort = useTableSort;
4248
- //# sourceMappingURL=DataTable-D6PwbV2u.js.map
4385
+ //# sourceMappingURL=DataTable-D4suNizi.js.map