@ceed/cds 1.40.3-next.6 → 1.40.3-next.8

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/index.js CHANGED
@@ -187,7 +187,7 @@ function Alert(inProps) {
187
187
  Alert.displayName = "Alert";
188
188
 
189
189
  // src/components/Autocomplete/Autocomplete.tsx
190
- import React5, { useCallback as useCallback2, useEffect as useEffect2, useMemo as useMemo2, useRef as useRef2 } from "react";
190
+ import React5, { useCallback as useCallback3, useEffect as useEffect2, useMemo as useMemo2, useRef as useRef3 } from "react";
191
191
  import {
192
192
  Autocomplete as JoyAutocomplete,
193
193
  AutocompleteOption as JoyAutocompleteOption,
@@ -295,7 +295,7 @@ function useControlledState(controlledValue, defaultValue, onChange) {
295
295
  }
296
296
 
297
297
  // src/libs/slot-props.ts
298
- import { useMemo } from "react";
298
+ import { useCallback as useCallback2, useMemo, useRef as useRef2 } from "react";
299
299
  function assignRef(ref, value) {
300
300
  if (typeof ref === "function") ref(value);
301
301
  else if (ref) ref.current = value;
@@ -313,16 +313,25 @@ function useSlotRef(slotProp, ref) {
313
313
  const isFunctionForm = typeof slotProp === "function";
314
314
  const slotRef = isFunctionForm ? void 0 : slotProp?.ref;
315
315
  const mergedRef = useMergedRef(slotRef, ref);
316
+ const latestSlotRef = useRef2(null);
317
+ const stableMergedRef = useCallback2(
318
+ (value) => {
319
+ assignRef(latestSlotRef.current, value);
320
+ assignRef(ref, value);
321
+ },
322
+ [ref]
323
+ );
316
324
  return useMemo(() => {
317
325
  if (isFunctionForm) {
318
326
  return ((ownerState) => {
319
327
  const resolved = slotProp(ownerState) ?? {};
320
- const merged = mergeRefs(resolved.ref, ref);
321
- return merged ? { ...resolved, ref: merged } : { ...resolved };
328
+ const resolvedRef = resolved.ref;
329
+ latestSlotRef.current = resolvedRef ?? null;
330
+ return resolvedRef || ref ? { ...resolved, ref: stableMergedRef } : { ...resolved };
322
331
  });
323
332
  }
324
333
  return mergedRef ? { ...slotProp, ref: mergedRef } : { ...slotProp };
325
- }, [isFunctionForm, slotProp, mergedRef, ref]);
334
+ }, [isFunctionForm, slotProp, mergedRef, ref, stableMergedRef]);
326
335
  }
327
336
 
328
337
  // src/components/Autocomplete/Autocomplete.tsx
@@ -347,7 +356,7 @@ var AutocompleteListBox = React5.forwardRef((props, ref) => {
347
356
  ownerState: { loading, size: fontSize = "md" },
348
357
  ...innerProps
349
358
  } = props;
350
- const parentRef = useRef2(null);
359
+ const parentRef = useRef3(null);
351
360
  const isGrouped = children[0].every((child) => child.hasOwnProperty("group"));
352
361
  const itemHeight = useMemo2(() => {
353
362
  const heights = itemHeightMap[fontSize ?? "md"];
@@ -464,7 +473,7 @@ function AutocompleteInner(props, ref) {
464
473
  const [rawValue, setValue] = useControlledState(
465
474
  props.value,
466
475
  props.defaultValue ?? null,
467
- useCallback2(
476
+ useCallback3(
468
477
  (value2) => onChange?.({
469
478
  target: {
470
479
  value: value2,
@@ -507,7 +516,7 @@ function AutocompleteInner(props, ref) {
507
516
  }
508
517
  return optionMap.get(_value);
509
518
  }, [_value, optionMap, props.loading]);
510
- const applySize = useCallback2(
519
+ const applySize = useCallback3(
511
520
  (node) => {
512
521
  return React5.isValidElement(node) && !props.loading ? React5.cloneElement(node, { ...{ size } }) : node;
513
522
  },
@@ -533,7 +542,7 @@ function AutocompleteInner(props, ref) {
533
542
  }),
534
543
  [options, props.slotProps, inputSlotProps]
535
544
  );
536
- const handleChange = useCallback2(
545
+ const handleChange = useCallback3(
537
546
  (event, value2) => {
538
547
  const newValue = value2;
539
548
  const _value2 = Array.isArray(newValue) ? newValue.map((value3) => value3.value) : newValue?.value;
@@ -696,7 +705,7 @@ var MenuItem = JoyMenuItem;
696
705
  var Menu_default = Menu;
697
706
 
698
707
  // src/components/Dropdown/Dropdown.tsx
699
- import React8, { createContext, useCallback as useCallback3, useMemo as useMemo4, useState as useState2 } from "react";
708
+ import React8, { createContext, useCallback as useCallback4, useMemo as useMemo4, useState as useState2 } from "react";
700
709
  import { Dropdown as JoyDropdown } from "@mui/joy";
701
710
  import { MenuButton } from "@mui/joy";
702
711
  import { useMenuButton } from "@mui/base/useMenuButton";
@@ -711,7 +720,7 @@ function Dropdown({ open: openProp, defaultOpen = false, onOpenChange, ...rest }
711
720
  }),
712
721
  []
713
722
  );
714
- const handleOpenChange = useCallback3(
723
+ const handleOpenChange = useCallback4(
715
724
  (event, isOpen) => {
716
725
  if (nestedCount > 0 && !isOpen && event?.type === "blur") {
717
726
  return;
@@ -774,7 +783,7 @@ Button.displayName = "Button";
774
783
  var Button_default = Button;
775
784
 
776
785
  // src/components/Calendar/Calendar.tsx
777
- import React13, { Fragment, forwardRef as forwardRef4, useCallback as useCallback6, useEffect as useEffect3, useMemo as useMemo6, useRef as useRef3, useState as useState5 } from "react";
786
+ import React13, { Fragment, forwardRef as forwardRef4, useCallback as useCallback7, useEffect as useEffect3, useMemo as useMemo6, useRef as useRef4, useState as useState5 } from "react";
778
787
  import { styled as styled5 } from "@mui/joy";
779
788
  import ChevronLeftIcon from "@mui/icons-material/ChevronLeft";
780
789
  import ChevronRightIcon from "@mui/icons-material/ChevronRight";
@@ -868,7 +877,7 @@ var isSameMonth = (date1, date2) => {
868
877
  };
869
878
 
870
879
  // src/components/Calendar/hooks/use-calendar-props.ts
871
- import { useCallback as useCallback4, useMemo as useMemo5, useState as useState3 } from "react";
880
+ import { useCallback as useCallback5, useMemo as useMemo5, useState as useState3 } from "react";
872
881
  import { useThemeProps as useThemeProps3 } from "@mui/joy";
873
882
  var resolveView = (view, views) => {
874
883
  return views.includes(view) ? view : views[0];
@@ -898,13 +907,13 @@ var useCalendarProps = (inProps) => {
898
907
  maxDate.setHours(0, 0, 0, 0);
899
908
  return maxDate;
900
909
  }, [inProps.maxDate]);
901
- const paginate = useCallback4(
910
+ const paginate = useCallback5(
902
911
  (newDirection) => {
903
912
  setPage([page + newDirection, newDirection]);
904
913
  },
905
914
  [page]
906
915
  );
907
- const handleViewMonthChange = useCallback4(
916
+ const handleViewMonthChange = useCallback5(
908
917
  (newMonth) => {
909
918
  setViewMonth(newMonth);
910
919
  if (resolvedView === "month") {
@@ -957,7 +966,7 @@ var useCalendarProps = (inProps) => {
957
966
  };
958
967
 
959
968
  // src/components/Calendar/hooks/use-calendar.ts
960
- import { useCallback as useCallback5, useState as useState4 } from "react";
969
+ import { useCallback as useCallback6, useState as useState4 } from "react";
961
970
  var useCalendar = (ownerState) => {
962
971
  const [localHoverDay, setLocalHoverDay] = useState4(null);
963
972
  const [localHoverMonth, setLocalHoverMonth] = useState4(null);
@@ -967,7 +976,7 @@ var useCalendar = (ownerState) => {
967
976
  const setHoverMonth = ownerState.onHoverMonthChange ?? setLocalHoverMonth;
968
977
  return {
969
978
  calendarTitle: ownerState.view === "month" ? getYearName(ownerState.viewMonth, ownerState.locale || "default") : getMonthName(ownerState.viewMonth, ownerState.locale || "default"),
970
- onPrev: useCallback5(() => {
979
+ onPrev: useCallback6(() => {
971
980
  if (ownerState.view === "day") {
972
981
  const currentDate = new Date(ownerState.viewMonth || /* @__PURE__ */ new Date());
973
982
  const currentYear = currentDate.getFullYear();
@@ -984,7 +993,7 @@ var useCalendar = (ownerState) => {
984
993
  ownerState.onMonthChange?.(prevYear);
985
994
  }
986
995
  }, [ownerState.onMonthChange, ownerState.viewMonth, ownerState.view]),
987
- onNext: useCallback5(() => {
996
+ onNext: useCallback6(() => {
988
997
  if (ownerState.view === "day") {
989
998
  const currentDate = new Date(ownerState.viewMonth || /* @__PURE__ */ new Date());
990
999
  const currentYear = currentDate.getFullYear();
@@ -1001,7 +1010,7 @@ var useCalendar = (ownerState) => {
1001
1010
  ownerState.onMonthChange?.(nextYear);
1002
1011
  }
1003
1012
  }, [ownerState.onMonthChange, ownerState.viewMonth, ownerState.view]),
1004
- getDayCellProps: useCallback5(
1013
+ getDayCellProps: useCallback6(
1005
1014
  (day) => {
1006
1015
  const thisDay = new Date(ownerState.viewMonth || /* @__PURE__ */ new Date());
1007
1016
  thisDay.setHours(0, 0, 0, 0);
@@ -1016,7 +1025,7 @@ var useCalendar = (ownerState) => {
1016
1025
  },
1017
1026
  [ownerState.rangeSelection, ownerState.value, ownerState.viewMonth, hoverDay]
1018
1027
  ),
1019
- getMonthCellProps: useCallback5(
1028
+ getMonthCellProps: useCallback6(
1020
1029
  (monthIndex) => {
1021
1030
  const thisMonth = new Date(ownerState.viewMonth || /* @__PURE__ */ new Date());
1022
1031
  thisMonth.setDate(1);
@@ -1033,7 +1042,7 @@ var useCalendar = (ownerState) => {
1033
1042
  },
1034
1043
  [ownerState.rangeSelection, ownerState.value, ownerState.viewMonth, hoverMonth]
1035
1044
  ),
1036
- getPickerDayProps: useCallback5(
1045
+ getPickerDayProps: useCallback6(
1037
1046
  (day) => {
1038
1047
  const thisDay = new Date(ownerState.viewMonth || /* @__PURE__ */ new Date());
1039
1048
  thisDay.setHours(0, 0, 0, 0);
@@ -1087,7 +1096,7 @@ var useCalendar = (ownerState) => {
1087
1096
  hoverDay
1088
1097
  ]
1089
1098
  ),
1090
- getPickerMonthProps: useCallback5(
1099
+ getPickerMonthProps: useCallback6(
1091
1100
  (monthIndex) => {
1092
1101
  const thisMonth = new Date(ownerState.viewMonth || /* @__PURE__ */ new Date());
1093
1102
  thisMonth.setDate(1);
@@ -1617,9 +1626,9 @@ var Calendar = forwardRef4((inProps, ref) => {
1617
1626
  } = props;
1618
1627
  const { calendarTitle, onPrev, onNext } = useCalendar(ownerState);
1619
1628
  const [isMonthViewAssistHintOpen, setIsMonthViewAssistHintOpen] = useState5(false);
1620
- const monthNavClickTimestampsRef = useRef3([]);
1621
- const monthViewAssistHintShownInSessionRef = useRef3(false);
1622
- const monthViewAssistHintTimeoutRef = useRef3(null);
1629
+ const monthNavClickTimestampsRef = useRef4([]);
1630
+ const monthViewAssistHintShownInSessionRef = useRef4(false);
1631
+ const monthViewAssistHintTimeoutRef = useRef4(null);
1623
1632
  const [hoverDay, setHoverDay] = useState5(null);
1624
1633
  const [hoverMonth, setHoverMonth] = useState5(null);
1625
1634
  const resolvedNumberOfMonths = numberOfMonths ?? 1;
@@ -1640,14 +1649,14 @@ var Calendar = forwardRef4((inProps, ref) => {
1640
1649
  }
1641
1650
  };
1642
1651
  }, []);
1643
- const closeMonthViewAssistHint = useCallback6(() => {
1652
+ const closeMonthViewAssistHint = useCallback7(() => {
1644
1653
  if (monthViewAssistHintTimeoutRef.current) {
1645
1654
  clearTimeout(monthViewAssistHintTimeoutRef.current);
1646
1655
  monthViewAssistHintTimeoutRef.current = null;
1647
1656
  }
1648
1657
  setIsMonthViewAssistHintOpen(false);
1649
1658
  }, []);
1650
- const showMonthViewAssistHint = useCallback6(() => {
1659
+ const showMonthViewAssistHint = useCallback7(() => {
1651
1660
  const now = Date.now();
1652
1661
  if (monthViewAssistHintShownInSessionRef.current) return;
1653
1662
  if (now - lastMonthViewAssistHintShownAt < MONTH_VIEW_HINT_COOLDOWN_MS) return;
@@ -1662,7 +1671,7 @@ var Calendar = forwardRef4((inProps, ref) => {
1662
1671
  monthViewAssistHintTimeoutRef.current = null;
1663
1672
  }, MONTH_VIEW_HINT_DURATION_MS);
1664
1673
  }, []);
1665
- const trackFastMonthNavigation = useCallback6(() => {
1674
+ const trackFastMonthNavigation = useCallback7(() => {
1666
1675
  if (!isHintEligible) return;
1667
1676
  const now = Date.now();
1668
1677
  monthNavClickTimestampsRef.current = [
@@ -1673,15 +1682,15 @@ var Calendar = forwardRef4((inProps, ref) => {
1673
1682
  showMonthViewAssistHint();
1674
1683
  }
1675
1684
  }, [isHintEligible, showMonthViewAssistHint]);
1676
- const handlePrevClick = useCallback6(() => {
1685
+ const handlePrevClick = useCallback7(() => {
1677
1686
  onPrev();
1678
1687
  trackFastMonthNavigation();
1679
1688
  }, [onPrev, trackFastMonthNavigation]);
1680
- const handleNextClick = useCallback6(() => {
1689
+ const handleNextClick = useCallback7(() => {
1681
1690
  onNext();
1682
1691
  trackFastMonthNavigation();
1683
1692
  }, [onNext, trackFastMonthNavigation]);
1684
- const handleSwitchViewClick = useCallback6(() => {
1693
+ const handleSwitchViewClick = useCallback7(() => {
1685
1694
  closeMonthViewAssistHint();
1686
1695
  onViewChange?.();
1687
1696
  }, [closeMonthViewAssistHint, onViewChange]);
@@ -1851,11 +1860,11 @@ var Container = forwardRef5(function Container2(props, ref) {
1851
1860
  Container.displayName = "Container";
1852
1861
 
1853
1862
  // src/components/CurrencyInput/CurrencyInput.tsx
1854
- import React17, { useCallback as useCallback8, useMemo as useMemo7 } from "react";
1863
+ import React17, { useCallback as useCallback9, useMemo as useMemo7 } from "react";
1855
1864
  import { NumericFormat } from "react-number-format";
1856
1865
 
1857
1866
  // src/components/Input/Input.tsx
1858
- import React16, { useCallback as useCallback7, useState as useState6 } from "react";
1867
+ import React16, { useCallback as useCallback8, useState as useState6 } from "react";
1859
1868
  import { Input as JoyInput } from "@mui/joy";
1860
1869
  import { motion as motion16 } from "framer-motion";
1861
1870
  import ClearIcon from "@mui/icons-material/Close";
@@ -1893,7 +1902,7 @@ var Input = React16.forwardRef((props, ref) => {
1893
1902
  const [value, setValue] = useControlledState(
1894
1903
  valueProp,
1895
1904
  defaultValueProp ?? null,
1896
- useCallback7(
1905
+ useCallback8(
1897
1906
  (value2) => {
1898
1907
  onChange?.({
1899
1908
  /**
@@ -2183,7 +2192,7 @@ var CurrencyInput = React17.forwardRef(function CurrencyInput2(inProps, ref) {
2183
2192
  const [_value, setValue] = useControlledState(
2184
2193
  props.value,
2185
2194
  props.defaultValue ?? null,
2186
- useCallback8((value2) => onChange?.({ target: { name, value: value2 } }), [onChange, name])
2195
+ useCallback9((value2) => onChange?.({ target: { name, value: value2 } }), [onChange, name])
2187
2196
  );
2188
2197
  const value = useMemo7(() => {
2189
2198
  if (_value && useMinorUnit) {
@@ -2198,7 +2207,7 @@ var CurrencyInput = React17.forwardRef(function CurrencyInput2(inProps, ref) {
2198
2207
  return props.max;
2199
2208
  }, [props.max, useMinorUnit, decimalScale]);
2200
2209
  const isOverLimit = useMemo7(() => max != null && value != null && value > max, [max, value]);
2201
- const handleChange = useCallback8(
2210
+ const handleChange = useCallback9(
2202
2211
  (event) => {
2203
2212
  if (event.target.value === "") {
2204
2213
  setValue(null);
@@ -2247,9 +2256,9 @@ var CurrencyInput_default = CurrencyInput;
2247
2256
 
2248
2257
  // src/components/DataTable/DataTable.tsx
2249
2258
  import React26, {
2250
- useCallback as useCallback13,
2259
+ useCallback as useCallback14,
2251
2260
  useMemo as useMemo12,
2252
- useRef as useRef7,
2261
+ useRef as useRef8,
2253
2262
  useId,
2254
2263
  forwardRef as forwardRef7,
2255
2264
  useImperativeHandle as useImperativeHandle2,
@@ -2482,8 +2491,11 @@ function computeAutoFitWidth(params) {
2482
2491
  if (!isNaN(maxPx) && maxPx > 0) finalWidth = Math.min(finalWidth, maxPx);
2483
2492
  return finalWidth;
2484
2493
  }
2485
- function getHeaderCellId(tableId, columnId) {
2486
- return `${tableId}_header_${columnId}`.trim().replace(/\s+/g, "_");
2494
+ function getHeaderCellId(tableId, field) {
2495
+ return `${tableId}_header_${sanitizeColumnId(field)}`;
2496
+ }
2497
+ function sanitizeColumnId(field) {
2498
+ return String(field).trim().replace(/\s+/g, "_");
2487
2499
  }
2488
2500
 
2489
2501
  // src/components/DataTable/styled.tsx
@@ -2673,11 +2685,11 @@ var Resizer = (ref, targetRef = ref, onResizeStateChange, onAutoFit) => /* @__PU
2673
2685
 
2674
2686
  // src/components/DataTable/components.tsx
2675
2687
  import React23, {
2676
- useRef as useRef5,
2688
+ useRef as useRef6,
2677
2689
  useState as useState8,
2678
2690
  useLayoutEffect,
2679
2691
  useMemo as useMemo10,
2680
- useCallback as useCallback10,
2692
+ useCallback as useCallback11,
2681
2693
  useEffect as useEffect5,
2682
2694
  memo,
2683
2695
  createElement
@@ -2686,7 +2698,7 @@ import { styled as styled12, useTheme } from "@mui/joy";
2686
2698
  import { AnimatePresence as AnimatePresence2 } from "framer-motion";
2687
2699
 
2688
2700
  // src/components/DatePicker/DatePicker.tsx
2689
- import React19, { forwardRef as forwardRef6, useCallback as useCallback9, useEffect as useEffect4, useImperativeHandle, useRef as useRef4, useState as useState7 } from "react";
2701
+ import React19, { forwardRef as forwardRef6, useCallback as useCallback10, useEffect as useEffect4, useImperativeHandle, useRef as useRef5, useState as useState7 } from "react";
2690
2702
  import { IMaskInput, IMask } from "react-imask";
2691
2703
  import CalendarTodayIcon from "@mui/icons-material/CalendarToday";
2692
2704
  import { styled as styled10, useThemeProps as useThemeProps5 } from "@mui/joy";
@@ -2903,12 +2915,12 @@ var DatePicker = forwardRef6((inProps, ref) => {
2903
2915
  presets,
2904
2916
  ...innerProps
2905
2917
  } = props;
2906
- const innerRef = useRef4(null);
2907
- const buttonRef = useRef4(null);
2918
+ const innerRef = useRef5(null);
2919
+ const buttonRef = useRef5(null);
2908
2920
  const [rawValue, setValue] = useControlledState(
2909
2921
  props.value,
2910
2922
  props.defaultValue ?? null,
2911
- useCallback9(
2923
+ useCallback10(
2912
2924
  (value2) => onChange?.({ target: { name: props.name, value: value2 ?? "" } }),
2913
2925
  [props.name, onChange]
2914
2926
  )
@@ -2936,7 +2948,7 @@ var DatePicker = forwardRef6((inProps, ref) => {
2936
2948
  }
2937
2949
  }, [displayFormat, displayValue, format, locale, value]);
2938
2950
  useImperativeHandle(ref, () => innerRef.current, [innerRef]);
2939
- const handleChange = useCallback9(
2951
+ const handleChange = useCallback10(
2940
2952
  (event) => {
2941
2953
  const value2 = event.target.value;
2942
2954
  setDisplayValue(value2 ? formatValueString(parseDate(value2, format), displayFormat, locale) : value2);
@@ -2944,7 +2956,7 @@ var DatePicker = forwardRef6((inProps, ref) => {
2944
2956
  },
2945
2957
  [displayFormat, format, locale, setValue]
2946
2958
  );
2947
- const handleDisplayInputChange = useCallback9(
2959
+ const handleDisplayInputChange = useCallback10(
2948
2960
  (event) => {
2949
2961
  if (event.target.value === "") {
2950
2962
  handleChange({
@@ -2969,7 +2981,7 @@ var DatePicker = forwardRef6((inProps, ref) => {
2969
2981
  },
2970
2982
  [displayFormat, format, handleChange, props.name]
2971
2983
  );
2972
- const handleCalendarToggle = useCallback9(
2984
+ const handleCalendarToggle = useCallback10(
2973
2985
  (event) => {
2974
2986
  setAnchorEl(anchorEl ? null : event.currentTarget);
2975
2987
  setTimeout(() => {
@@ -2978,7 +2990,7 @@ var DatePicker = forwardRef6((inProps, ref) => {
2978
2990
  },
2979
2991
  [anchorEl, setAnchorEl, innerRef]
2980
2992
  );
2981
- const handleInputMouseDown = useCallback9(
2993
+ const handleInputMouseDown = useCallback10(
2982
2994
  (event) => {
2983
2995
  if (inputReadOnly || isAlphabeticDisplay) {
2984
2996
  event.preventDefault();
@@ -2987,7 +2999,7 @@ var DatePicker = forwardRef6((inProps, ref) => {
2987
2999
  },
2988
3000
  [inputReadOnly, isAlphabeticDisplay, buttonRef]
2989
3001
  );
2990
- const handleInputClick = useCallback9(
3002
+ const handleInputClick = useCallback10(
2991
3003
  (event) => {
2992
3004
  if (inputReadOnly && !readOnly) {
2993
3005
  handleCalendarToggle(event);
@@ -2995,7 +3007,7 @@ var DatePicker = forwardRef6((inProps, ref) => {
2995
3007
  },
2996
3008
  [inputReadOnly, readOnly, handleCalendarToggle]
2997
3009
  );
2998
- const handlePresetClick = useCallback9(
3010
+ const handlePresetClick = useCallback10(
2999
3011
  (presetValue) => {
3000
3012
  handleChange({
3001
3013
  target: {
@@ -3007,7 +3019,7 @@ var DatePicker = forwardRef6((inProps, ref) => {
3007
3019
  },
3008
3020
  [handleChange, props.name]
3009
3021
  );
3010
- const isPresetDisabled = useCallback9(
3022
+ const isPresetDisabled = useCallback10(
3011
3023
  (presetValue) => {
3012
3024
  try {
3013
3025
  const date = parseDate(presetValue, format);
@@ -3375,7 +3387,7 @@ var TextEllipsis = ({
3375
3387
  lineClamp,
3376
3388
  ...rest
3377
3389
  }) => {
3378
- const textRef = useRef5(null);
3390
+ const textRef = useRef6(null);
3379
3391
  const [showTooltip, setShowTooltip] = useState8(false);
3380
3392
  useLayoutEffect(() => {
3381
3393
  const element = textRef.current;
@@ -3392,7 +3404,7 @@ var TextEllipsis = ({
3392
3404
  return /* @__PURE__ */ React23.createElement(Tooltip_default, { title: showTooltip ? children : "", placement: "top" }, /* @__PURE__ */ React23.createElement(EllipsisDiv, { ref: textRef, lineClamp, ...rest }, children));
3393
3405
  };
3394
3406
  var CellTextEllipsis = ({ children }) => {
3395
- const textRef = useRef5(null);
3407
+ const textRef = useRef6(null);
3396
3408
  const [showTooltip, setShowTooltip] = useState8(false);
3397
3409
  useLayoutEffect(() => {
3398
3410
  const element = textRef.current;
@@ -3442,20 +3454,19 @@ var HeadCell = (props) => {
3442
3454
  tableColRef,
3443
3455
  headerClassName,
3444
3456
  headerLineClamp,
3445
- onAutoFit,
3446
- columnId
3457
+ onAutoFit
3447
3458
  } = props;
3448
3459
  const theme = useTheme();
3449
3460
  const ref = headerRef;
3450
3461
  const colRef = tableColRef;
3451
- const localRef = useRef5(null);
3462
+ const localRef = useRef6(null);
3452
3463
  useLayoutEffect(() => {
3453
3464
  ref.current = localRef.current;
3454
3465
  }, [ref]);
3455
3466
  const [isHovered, setIsHovered] = useState8(false);
3456
3467
  const sortable = type === "actions" ? false : _sortable;
3457
- const headId = useMemo10(() => getHeaderCellId(tableId, columnId), [tableId, columnId]);
3458
- const isResizingRef = useRef5(false);
3468
+ const headId = useMemo10(() => getHeaderCellId(tableId, field), [tableId, field]);
3469
+ const isResizingRef = useRef6(false);
3459
3470
  const resizer = useMemo10(
3460
3471
  () => resizable ?? true ? Resizer(
3461
3472
  ref,
@@ -3463,9 +3474,9 @@ var HeadCell = (props) => {
3463
3474
  (isResizing) => {
3464
3475
  isResizingRef.current = isResizing;
3465
3476
  },
3466
- onAutoFit ? () => onAutoFit(columnId) : void 0
3477
+ onAutoFit ? () => onAutoFit(field) : void 0
3467
3478
  ) : null,
3468
- [resizable, ref, colRef, onAutoFit, columnId]
3479
+ [resizable, ref, colRef, onAutoFit, field]
3469
3480
  );
3470
3481
  const style = useMemo10(
3471
3482
  () => ({
@@ -3539,7 +3550,7 @@ var HeadCell = (props) => {
3539
3550
  ref: localRef,
3540
3551
  key: field,
3541
3552
  style,
3542
- onClick: useCallback10(
3553
+ onClick: useCallback11(
3543
3554
  (e) => {
3544
3555
  if (isResizingRef.current) return;
3545
3556
  if (!(e.target instanceof Element) || !e.currentTarget.contains(e.target)) return;
@@ -3579,7 +3590,7 @@ var BodyCell = (props) => {
3579
3590
  } = props;
3580
3591
  const theme = useTheme();
3581
3592
  const [value, setValue] = useState8(row[field]);
3582
- const cellRef = useRef5(null);
3593
+ const cellRef = useRef6(null);
3583
3594
  const params = useMemo10(
3584
3595
  () => ({
3585
3596
  row,
@@ -3735,7 +3746,7 @@ var BodyCell = (props) => {
3735
3746
  {
3736
3747
  ref: cellRef,
3737
3748
  key: field,
3738
- headers: getHeaderCellId(tableId, props.columnId),
3749
+ headers: getHeaderCellId(tableId, field),
3739
3750
  sx: {
3740
3751
  textAlign: getTextAlign({ type }),
3741
3752
  verticalAlign: editMode ? "top" : "middle",
@@ -3800,10 +3811,10 @@ var VirtualizedTableRow = memo(StyledTableRow2, (prevProps, nextProps) => {
3800
3811
  });
3801
3812
 
3802
3813
  // src/components/DataTable/hooks.ts
3803
- import { useState as useState9, useLayoutEffect as useLayoutEffect2, useRef as useRef6, useMemo as useMemo11, useCallback as useCallback11, useEffect as useEffect6, createRef } from "react";
3804
- function useColumnWidths(columnsById) {
3814
+ import { useState as useState9, useLayoutEffect as useLayoutEffect2, useRef as useRef7, useMemo as useMemo11, useCallback as useCallback12, useEffect as useEffect6, createRef } from "react";
3815
+ function useColumnWidths(columnsByField) {
3805
3816
  const [widths, setWidths] = useState9({});
3806
- const roRef = useRef6();
3817
+ const roRef = useRef7();
3807
3818
  useLayoutEffect2(() => {
3808
3819
  if (roRef.current) roRef.current.disconnect();
3809
3820
  roRef.current = new ResizeObserver((entries) => {
@@ -3811,11 +3822,11 @@ function useColumnWidths(columnsById) {
3811
3822
  let changed = false;
3812
3823
  const next = { ...prev };
3813
3824
  entries.forEach((entry) => {
3814
- const columnId = entry.target.dataset.hdsColumnId;
3825
+ const field = entry.target.dataset.field;
3815
3826
  const w = Math.round(entry.target.getBoundingClientRect().width);
3816
3827
  if (w === 0) return;
3817
- if (next[columnId] !== w) {
3818
- next[columnId] = w;
3828
+ if (next[field] !== w) {
3829
+ next[field] = w;
3819
3830
  changed = true;
3820
3831
  }
3821
3832
  });
@@ -3823,23 +3834,22 @@ function useColumnWidths(columnsById) {
3823
3834
  });
3824
3835
  });
3825
3836
  const measured = {};
3826
- Object.entries(columnsById).forEach(([columnId, def]) => {
3837
+ Object.entries(columnsByField).forEach(([field, def]) => {
3827
3838
  const el = def.headerRef.current;
3828
3839
  if (el) {
3829
- el.dataset.hdsColumnId = columnId;
3830
- el.dataset.field = String(def.field);
3840
+ el.dataset.field = field;
3831
3841
  const w = Math.round(el.getBoundingClientRect().width);
3832
- if (w > 0) measured[columnId] = w;
3842
+ if (w > 0) measured[field] = w;
3833
3843
  roRef.current.observe(el);
3834
3844
  }
3835
3845
  });
3836
3846
  setWidths((prev) => {
3837
3847
  const keys = Object.keys(measured);
3838
- const same = keys.length === Object.keys(prev).length && keys.every((key) => prev[key] === measured[key]);
3839
- return same ? prev : measured;
3848
+ const same = keys.every((key) => prev[key] === measured[key]);
3849
+ return same ? prev : { ...prev, ...measured };
3840
3850
  });
3841
3851
  return () => roRef.current?.disconnect();
3842
- }, [columnsById]);
3852
+ }, [columnsByField]);
3843
3853
  return widths;
3844
3854
  }
3845
3855
  function useDataTableRenderer({
@@ -3871,19 +3881,26 @@ function useDataTableRenderer({
3871
3881
  "You cannot use both `pinnedColumns` and `columnGroupingModel` at the same time. Please choose one of them."
3872
3882
  );
3873
3883
  }
3874
- const onSelectionModelChangeRef = useRef6(onSelectionModelChange);
3884
+ const duplicatedField = useMemo11(() => {
3885
+ const ids = columnsProp.map((column) => sanitizeColumnId(column.field));
3886
+ const index = ids.findIndex((id, i) => ids.indexOf(id) !== i);
3887
+ return index === -1 ? void 0 : columnsProp[index].field;
3888
+ }, [columnsProp]);
3889
+ if (duplicatedField !== void 0)
3890
+ throw new Error(`DataTable: column \`field\` must be unique. Duplicated: "${String(duplicatedField)}"`);
3891
+ const onSelectionModelChangeRef = useRef7(onSelectionModelChange);
3875
3892
  onSelectionModelChangeRef.current = onSelectionModelChange;
3876
3893
  const [focusedRowId, setFocusedRowId] = useState9(null);
3877
3894
  const [selectionAnchor, setSelectionAnchor] = useState9(null);
3878
3895
  const [sortModel, setSortModel] = useControlledState(
3879
3896
  controlledSortModel,
3880
3897
  initialState?.sorting?.sortModel ?? [],
3881
- useCallback11((sortModel2) => onSortModelChange?.(sortModel2), [onSortModelChange])
3898
+ useCallback12((sortModel2) => onSortModelChange?.(sortModel2), [onSortModelChange])
3882
3899
  );
3883
3900
  const [visibilityModel] = useControlledState(
3884
3901
  columnVisibilityModel,
3885
3902
  initialState?.columns?.columnVisibilityModel ?? {},
3886
- useCallback11(
3903
+ useCallback12(
3887
3904
  (model) => onColumnVisibilityModelChange?.(model),
3888
3905
  [onColumnVisibilityModelChange]
3889
3906
  )
@@ -3892,16 +3909,9 @@ function useDataTableRenderer({
3892
3909
  if (!columnGroupingModel) return columnsProp;
3893
3910
  return reorderColumnsByGroupingModel(columnsProp, columnGroupingModel);
3894
3911
  }, [columnsProp, columnGroupingModel]);
3895
- const visibleColumnIndexes = useMemo11(
3896
- () => reorderedColumns.reduce((acc, col, index) => {
3897
- if (visibilityModel[col.field] !== false) acc.push(index);
3898
- return acc;
3899
- }, []),
3900
- [reorderedColumns, visibilityModel]
3901
- );
3902
3912
  const visibleColumns = useMemo11(
3903
- () => visibleColumnIndexes.map((index) => reorderedColumns[index]),
3904
- [visibleColumnIndexes, reorderedColumns]
3913
+ () => reorderedColumns.filter((col) => visibilityModel[col.field] !== false),
3914
+ [reorderedColumns, visibilityModel]
3905
3915
  );
3906
3916
  const visibleFieldSet = useMemo11(() => new Set(visibleColumns.map((c) => c.field)), [visibleColumns]);
3907
3917
  const tableMinWidth = useMemo11(() => {
@@ -3922,29 +3932,10 @@ function useDataTableRenderer({
3922
3932
  ),
3923
3933
  [reorderedColumns]
3924
3934
  );
3925
- const allColumnIds = useMemo11(() => {
3926
- const taken = new Set(reorderedColumns.map((column) => String(column.field)));
3927
- const assigned = /* @__PURE__ */ new Set();
3928
- return reorderedColumns.map((column) => {
3929
- const field = String(column.field);
3930
- if (!assigned.has(field)) {
3931
- assigned.add(field);
3932
- return field;
3933
- }
3934
- let n = 2;
3935
- while (taken.has(`${field}__${n}`)) n += 1;
3936
- taken.add(`${field}__${n}`);
3937
- return `${field}__${n}`;
3938
- });
3939
- }, [reorderedColumns]);
3940
- const columnIds = useMemo11(
3941
- () => visibleColumnIndexes.map((index) => allColumnIds[index]),
3942
- [visibleColumnIndexes, allColumnIds]
3943
- );
3944
- const visibleColumnsById = useMemo11(
3935
+ const visibleColumnsByField = useMemo11(
3945
3936
  () => Object.fromEntries(
3946
- visibleColumns.map((column, index) => [
3947
- columnIds[index],
3937
+ visibleColumns.map((column) => [
3938
+ column.field,
3948
3939
  {
3949
3940
  ...column,
3950
3941
  headerRef: createRef(),
@@ -3952,9 +3943,9 @@ function useDataTableRenderer({
3952
3943
  }
3953
3944
  ])
3954
3945
  ),
3955
- [visibleColumns, columnIds]
3946
+ [visibleColumns]
3956
3947
  );
3957
- const sortComparator = useCallback11(
3948
+ const sortComparator = useCallback12(
3958
3949
  (rowA, rowB) => {
3959
3950
  for (const sort of sortModel) {
3960
3951
  const { field, sort: direction } = sort;
@@ -3993,7 +3984,7 @@ function useDataTableRenderer({
3993
3984
  );
3994
3985
  const [page, setPage] = useState9(paginationModel?.page || 1);
3995
3986
  const pageSize = paginationModel?.pageSize || 20;
3996
- const getId = useCallback11(
3987
+ const getId = useCallback12(
3997
3988
  (row, index) => _getId?.(row) ?? row.id ?? `${(index || 0) + (page - 1) * pageSize}`,
3998
3989
  [_getId, page, pageSize]
3999
3990
  );
@@ -4009,7 +4000,7 @@ function useDataTableRenderer({
4009
4000
  }),
4010
4001
  [dataInPage, isRowSelectable, getId]
4011
4002
  );
4012
- const handleRangeSelection = useCallback11(
4003
+ const handleRangeSelection = useCallback12(
4013
4004
  (anchor, targetIndex) => {
4014
4005
  const startIndex = Math.min(anchor.rowIndex, targetIndex);
4015
4006
  const endIndex = Math.max(anchor.rowIndex, targetIndex);
@@ -4045,18 +4036,12 @@ function useDataTableRenderer({
4045
4036
  () => _isTotalSelected ?? (selectableRowCount > 0 && (selectionModel?.length || 0) === selectableRowCount),
4046
4037
  [_isTotalSelected, selectionModel, selectableRowCount]
4047
4038
  );
4048
- const columnWidths = useColumnWidths(visibleColumnsById);
4049
- const measuredWidthByField = useMemo11(
4050
- () => Object.fromEntries(
4051
- Object.entries(visibleColumnsById).map(([columnId, column]) => [column.field, columnWidths[columnId]])
4052
- ),
4053
- [visibleColumnsById, columnWidths]
4054
- );
4055
- const getWidth = useCallback11(
4039
+ const columnWidths = useColumnWidths(visibleColumnsByField);
4040
+ const getWidth = useCallback12(
4056
4041
  // 반환값은 pinned offset으로 더해지므로 반드시 숫자여야 한다. width/minWidth는 '500px' 같은 문자열.
4057
- (f) => measuredWidthByField[f] ?? parsePxValue(allColumnsByField[f]?.width) ?? // Column prop 으로 지정된 width
4042
+ (f) => columnWidths[f] ?? parsePxValue(allColumnsByField[f]?.width) ?? // Column prop 으로 지정된 width
4058
4043
  parsePxValue(allColumnsByField[f]?.minWidth) ?? 0,
4059
- [measuredWidthByField, allColumnsByField]
4044
+ [columnWidths, allColumnsByField]
4060
4045
  );
4061
4046
  const processedColumnGroups = useMemo11(() => {
4062
4047
  if (!columnGroupingModel) return null;
@@ -4076,16 +4061,14 @@ function useDataTableRenderer({
4076
4061
  const baseColumns = visibleColumns.length > 0 ? visibleColumns : reorderedColumns.length > 0 ? [] : inferredFields.map((key) => ({
4077
4062
  field: key
4078
4063
  }));
4079
- return baseColumns.map((column, index) => {
4080
- const columnId = columnIds[index] ?? String(column.field);
4064
+ return baseColumns.map((column) => {
4081
4065
  const isLeftPinned = effectivePinnedLeft?.includes(column.field);
4082
4066
  const isRightPinned = effectivePinnedRight?.includes(column.field);
4083
4067
  const isPinned = isLeftPinned || isRightPinned;
4084
4068
  return {
4085
4069
  ...column,
4086
- columnId,
4087
- headerRef: visibleColumnsById[columnId]?.headerRef,
4088
- tableColRef: visibleColumnsById[columnId]?.tableColRef,
4070
+ headerRef: visibleColumnsByField[column.field]?.headerRef,
4071
+ tableColRef: visibleColumnsByField[column.field]?.tableColRef,
4089
4072
  isCellEditable: editMode && (typeof column.isCellEditable === "function" ? column.isCellEditable : column.isCellEditable ?? true),
4090
4073
  sort: sortModel.find((sort) => sort.field === column.field)?.sort,
4091
4074
  sortOrder: allColumnsByField[column.field]?.sortOrder || sortOrder,
@@ -4102,22 +4085,21 @@ function useDataTableRenderer({
4102
4085
  inferredFields,
4103
4086
  effectivePinnedLeft,
4104
4087
  effectivePinnedRight,
4105
- columnIds,
4106
- visibleColumnsById,
4088
+ visibleColumnsByField,
4107
4089
  allColumnsByField,
4108
4090
  editMode,
4109
4091
  sortModel,
4110
4092
  sortOrder,
4111
4093
  getWidth
4112
4094
  ]);
4113
- const handlePageChange = useCallback11(
4095
+ const handlePageChange = useCallback12(
4114
4096
  (newPage) => {
4115
4097
  setPage(newPage);
4116
4098
  onPaginationModelChange?.({ page: newPage, pageSize });
4117
4099
  },
4118
4100
  [onPaginationModelChange, pageSize]
4119
4101
  );
4120
- const handleSortChange = useCallback11(
4102
+ const handleSortChange = useCallback12(
4121
4103
  (props) => {
4122
4104
  const { field, currentSort, multiple } = props;
4123
4105
  const column = allColumnsByField[field];
@@ -4155,16 +4137,16 @@ function useDataTableRenderer({
4155
4137
  onSelectionModelChangeRef.current?.([]);
4156
4138
  setSelectionAnchor(null);
4157
4139
  }, [page]);
4158
- const prevRowsRef = useRef6(_rows);
4140
+ const prevRowsRef = useRef7(_rows);
4159
4141
  useEffect6(() => {
4160
4142
  if (prevRowsRef.current !== _rows) {
4161
4143
  setSelectionAnchor(null);
4162
4144
  prevRowsRef.current = _rows;
4163
4145
  }
4164
4146
  }, [_rows]);
4165
- const handleAutoFit = useCallback11(
4166
- (columnId) => {
4167
- const colDef = visibleColumnsById[columnId];
4147
+ const handleAutoFit = useCallback12(
4148
+ (field) => {
4149
+ const colDef = visibleColumnsByField[field];
4168
4150
  if (!colDef?.headerRef.current) return;
4169
4151
  const columnType = "type" in colDef ? colDef.type : void 0;
4170
4152
  if (columnType === "actions") return;
@@ -4178,7 +4160,7 @@ function useDataTableRenderer({
4178
4160
  colDef.headerRef.current.style.width = widthPx;
4179
4161
  if (colDef.tableColRef.current) colDef.tableColRef.current.style.width = widthPx;
4180
4162
  },
4181
- [visibleColumnsById, dataInPage]
4163
+ [visibleColumnsByField, dataInPage]
4182
4164
  );
4183
4165
  return {
4184
4166
  rowCount,
@@ -4194,8 +4176,8 @@ function useDataTableRenderer({
4194
4176
  handleAutoFit,
4195
4177
  isAllSelected,
4196
4178
  isTotalSelected,
4197
- isSelectedRow: useCallback11((model) => selectedModelSet.has(model), [selectedModelSet]),
4198
- isRowSelectable: useCallback11(
4179
+ isSelectedRow: useCallback12((model) => selectedModelSet.has(model), [selectedModelSet]),
4180
+ isRowSelectable: useCallback12(
4199
4181
  (rowId, row) => {
4200
4182
  if (!isRowSelectable) return true;
4201
4183
  return isRowSelectable({ row, id: rowId });
@@ -4203,13 +4185,13 @@ function useDataTableRenderer({
4203
4185
  [isRowSelectable]
4204
4186
  ),
4205
4187
  focusedRowId,
4206
- onRowFocus: useCallback11((rowId) => {
4188
+ onRowFocus: useCallback12((rowId) => {
4207
4189
  setFocusedRowId(rowId);
4208
4190
  }, []),
4209
- onAllCheckboxChange: useCallback11(() => {
4191
+ onAllCheckboxChange: useCallback12(() => {
4210
4192
  onSelectionModelChange?.(isAllSelected ? [] : selectableDataInPage.map(getId));
4211
4193
  }, [isAllSelected, selectableDataInPage, onSelectionModelChange, getId]),
4212
- onCheckboxChange: useCallback11(
4194
+ onCheckboxChange: useCallback12(
4213
4195
  (event, selectedModel) => {
4214
4196
  const isShiftClick = "shiftKey" in event && event.shiftKey;
4215
4197
  const rowIndex = dataInPage.findIndex((row, i) => getId(row, i) === selectedModel);
@@ -4243,7 +4225,7 @@ function useDataTableRenderer({
4243
4225
  columns,
4244
4226
  tableMinWidth,
4245
4227
  processedColumnGroups,
4246
- onTotalSelect: useCallback11(() => {
4228
+ onTotalSelect: useCallback12(() => {
4247
4229
  const selectableRows = rows.filter((row, i) => {
4248
4230
  if (!isRowSelectable) return true;
4249
4231
  return isRowSelectable({ row, id: getId(row, i) });
@@ -4328,7 +4310,7 @@ function TableBody(props) {
4328
4310
  TableBody.displayName = "TableBody";
4329
4311
 
4330
4312
  // src/components/Pagination/Pagination.tsx
4331
- import React25, { useCallback as useCallback12, useEffect as useEffect7 } from "react";
4313
+ import React25, { useCallback as useCallback13, useEffect as useEffect7 } from "react";
4332
4314
  import PreviousIcon from "@mui/icons-material/ChevronLeftRounded";
4333
4315
  import NextIcon from "@mui/icons-material/ChevronRightRounded";
4334
4316
  import FirstPageIcon from "@mui/icons-material/FirstPageRounded";
@@ -4398,7 +4380,7 @@ function Pagination(inProps) {
4398
4380
  const [paginationModel, setPaginationModel] = useControlledState(
4399
4381
  _paginationModel,
4400
4382
  defaultPaginationModel,
4401
- useCallback12(
4383
+ useCallback13(
4402
4384
  (newPage) => {
4403
4385
  onPageChange(newPage.page);
4404
4386
  },
@@ -4616,8 +4598,8 @@ function Component(props, apiRef) {
4616
4598
  ...innerProps
4617
4599
  } = props;
4618
4600
  const tableId = useId();
4619
- const parentRef = useRef7(null);
4620
- const tableBodyRef = useRef7(null);
4601
+ const parentRef = useRef8(null);
4602
+ const tableBodyRef = useRef8(null);
4621
4603
  const {
4622
4604
  columns,
4623
4605
  processedColumnGroups,
@@ -4681,20 +4663,20 @@ function Component(props, apiRef) {
4681
4663
  const showNoRowsOverlay = !loading && rowCount === 0;
4682
4664
  const showFillerColumn = columns.length > 0 && columns.every((c) => !!c.width);
4683
4665
  const totalColCount = Math.max(1, columns.length + (checkboxSelection ? 1 : 0) + (showFillerColumn ? 1 : 0));
4684
- const getRowClickHandler = useCallback13(
4666
+ const getRowClickHandler = useCallback14(
4685
4667
  (row, rowId) => (e) => {
4686
4668
  onRowClick?.({ row, rowId }, e);
4687
4669
  checkboxSelection && !disableSelectionOnClick && isRowSelectableCheck(rowId, row) && onCheckboxChange(e, rowId);
4688
4670
  },
4689
4671
  [onRowClick, checkboxSelection, disableSelectionOnClick, onCheckboxChange, isRowSelectableCheck]
4690
4672
  );
4691
- const getRowFocusHandler = useCallback13(
4673
+ const getRowFocusHandler = useCallback14(
4692
4674
  (rowId) => () => {
4693
4675
  onRowFocus(rowId);
4694
4676
  },
4695
4677
  [onRowFocus]
4696
4678
  );
4697
- const getCheckboxClickHandler = useCallback13(
4679
+ const getCheckboxClickHandler = useCallback14(
4698
4680
  (rowId, row) => (e) => {
4699
4681
  e.stopPropagation();
4700
4682
  if (isRowSelectableCheck(rowId, row)) {
@@ -4704,7 +4686,7 @@ function Component(props, apiRef) {
4704
4686
  },
4705
4687
  [onCheckboxChange, isRowSelectableCheck, onRowFocus]
4706
4688
  );
4707
- const handleTableKeyDown = useCallback13(
4689
+ const handleTableKeyDown = useCallback14(
4708
4690
  (e) => {
4709
4691
  const supportedKeys = ["ArrowUp", "ArrowDown", " ", "Home", "End", "PageUp", "PageDown"];
4710
4692
  if (!supportedKeys.includes(e.key)) return;
@@ -4865,7 +4847,7 @@ function Component(props, apiRef) {
4865
4847
  "col",
4866
4848
  {
4867
4849
  ref: c.tableColRef,
4868
- key: c.columnId,
4850
+ key: c.field.toString(),
4869
4851
  style: {
4870
4852
  width: c.width,
4871
4853
  minWidth: c.minWidth ?? "50px"
@@ -4915,13 +4897,13 @@ function Component(props, apiRef) {
4915
4897
  }
4916
4898
  },
4917
4899
  headerCheckboxElement
4918
- ), columns.map((c, i) => (
4900
+ ), columns.map((c) => (
4919
4901
  // @ts-ignore
4920
4902
  /* @__PURE__ */ React26.createElement(
4921
4903
  HeadCell2,
4922
4904
  {
4923
4905
  tableId,
4924
- key: `${c.field.toString()}_${i}`,
4906
+ key: c.field.toString(),
4925
4907
  stickyHeader: props.stickyHeader,
4926
4908
  editMode: !!c.isCellEditable,
4927
4909
  onSortChange: handleSortChange,
@@ -5051,7 +5033,7 @@ var DataTable = forwardRef7(Component);
5051
5033
  DataTable.displayName = "DataTable";
5052
5034
 
5053
5035
  // src/components/DateRangePicker/DateRangePicker.tsx
5054
- import React27, { forwardRef as forwardRef8, useCallback as useCallback14, useEffect as useEffect8, useImperativeHandle as useImperativeHandle3, useMemo as useMemo13, useRef as useRef8, useState as useState10 } from "react";
5036
+ import React27, { forwardRef as forwardRef8, useCallback as useCallback15, useEffect as useEffect8, useImperativeHandle as useImperativeHandle3, useMemo as useMemo13, useRef as useRef9, useState as useState10 } from "react";
5055
5037
  import { IMaskInput as IMaskInput2, IMask as IMask2 } from "react-imask";
5056
5038
  import CalendarTodayIcon2 from "@mui/icons-material/CalendarToday";
5057
5039
  import { styled as styled14, useThemeProps as useThemeProps7 } from "@mui/joy";
@@ -5256,12 +5238,12 @@ var DateRangePicker = forwardRef8((inProps, ref) => {
5256
5238
  numberOfMonths,
5257
5239
  ...innerProps
5258
5240
  } = props;
5259
- const innerRef = useRef8(null);
5260
- const buttonRef = useRef8(null);
5241
+ const innerRef = useRef9(null);
5242
+ const buttonRef = useRef9(null);
5261
5243
  const [rawValue, setValue] = useControlledState(
5262
5244
  props.value,
5263
5245
  props.defaultValue ?? null,
5264
- useCallback14(
5246
+ useCallback15(
5265
5247
  (value2) => onChange?.({ target: { name: props.name, value: value2 ?? "" } }),
5266
5248
  [props.name, onChange]
5267
5249
  )
@@ -5295,7 +5277,7 @@ var DateRangePicker = forwardRef8((inProps, ref) => {
5295
5277
  }
5296
5278
  }, [anchorEl, innerRef]);
5297
5279
  useImperativeHandle3(ref, () => innerRef.current, [innerRef]);
5298
- const handleChange = useCallback14(
5280
+ const handleChange = useCallback15(
5299
5281
  (event) => {
5300
5282
  const value2 = event.target.value;
5301
5283
  setDisplayValue(value2 ? formatValueString2(parseDates(value2, format), displayFormat, locale) : value2);
@@ -5303,7 +5285,7 @@ var DateRangePicker = forwardRef8((inProps, ref) => {
5303
5285
  },
5304
5286
  [displayFormat, format, locale, setValue]
5305
5287
  );
5306
- const handleDisplayInputChange = useCallback14(
5288
+ const handleDisplayInputChange = useCallback15(
5307
5289
  (event) => {
5308
5290
  if (event.target.value === "") {
5309
5291
  handleChange({
@@ -5328,14 +5310,14 @@ var DateRangePicker = forwardRef8((inProps, ref) => {
5328
5310
  },
5329
5311
  [displayFormat, format, handleChange, props.name]
5330
5312
  );
5331
- const handleCalendarToggle = useCallback14(
5313
+ const handleCalendarToggle = useCallback15(
5332
5314
  (event) => {
5333
5315
  setAnchorEl(anchorEl ? null : event.currentTarget);
5334
5316
  innerRef.current?.focus();
5335
5317
  },
5336
5318
  [anchorEl, setAnchorEl, innerRef]
5337
5319
  );
5338
- const handleCalendarChange = useCallback14(
5320
+ const handleCalendarChange = useCallback15(
5339
5321
  ([date1, date2]) => {
5340
5322
  if (!date1 || !date2) return;
5341
5323
  const formattedValue = formatValueString2([date1, date2], format);
@@ -5349,7 +5331,7 @@ var DateRangePicker = forwardRef8((inProps, ref) => {
5349
5331
  },
5350
5332
  [props.value, props.name, onChange, setValue, setAnchorEl, format, displayFormat, locale]
5351
5333
  );
5352
- const handleInputMouseDown = useCallback14(
5334
+ const handleInputMouseDown = useCallback15(
5353
5335
  (event) => {
5354
5336
  if (inputReadOnly || isAlphabeticDisplay) {
5355
5337
  event.preventDefault();
@@ -5358,7 +5340,7 @@ var DateRangePicker = forwardRef8((inProps, ref) => {
5358
5340
  },
5359
5341
  [inputReadOnly, isAlphabeticDisplay, buttonRef]
5360
5342
  );
5361
- const handleInputClick = useCallback14(
5343
+ const handleInputClick = useCallback15(
5362
5344
  (event) => {
5363
5345
  if (inputReadOnly && !readOnly) {
5364
5346
  handleCalendarToggle(event);
@@ -5366,7 +5348,7 @@ var DateRangePicker = forwardRef8((inProps, ref) => {
5366
5348
  },
5367
5349
  [inputReadOnly, readOnly, handleCalendarToggle]
5368
5350
  );
5369
- const handlePresetClick = useCallback14(
5351
+ const handlePresetClick = useCallback15(
5370
5352
  (presetValue) => {
5371
5353
  if (props.value !== void 0) {
5372
5354
  onChange?.({ target: { name: props.name, value: presetValue } });
@@ -5379,7 +5361,7 @@ var DateRangePicker = forwardRef8((inProps, ref) => {
5379
5361
  },
5380
5362
  [props.value, props.name, onChange, setValue, setAnchorEl, format, displayFormat, locale]
5381
5363
  );
5382
- const isPresetDisabled = useCallback14(
5364
+ const isPresetDisabled = useCallback15(
5383
5365
  (presetValue) => {
5384
5366
  try {
5385
5367
  const dates = parseDates(presetValue, format);
@@ -5638,14 +5620,14 @@ var InsetDrawer = styled20(JoyDrawer2)(({ theme }) => ({
5638
5620
  }));
5639
5621
 
5640
5622
  // src/components/FilterableCheckboxGroup/FilterableCheckboxGroup.tsx
5641
- import React32, { useCallback as useCallback15, useEffect as useEffect9, useMemo as useMemo14, useRef as useRef9, useState as useState11 } from "react";
5623
+ import React32, { useCallback as useCallback16, useEffect as useEffect9, useMemo as useMemo14, useRef as useRef10, useState as useState11 } from "react";
5642
5624
  import SearchIcon from "@mui/icons-material/Search";
5643
5625
  import { useThemeProps as useThemeProps8 } from "@mui/joy";
5644
5626
  import { useVirtualizer as useVirtualizer3 } from "@tanstack/react-virtual";
5645
5627
  var EMPTY_VALUE = [];
5646
5628
  function LabelWithTooltip(props) {
5647
5629
  const { label, size } = props;
5648
- const labelContentRef = useRef9(null);
5630
+ const labelContentRef = useRef10(null);
5649
5631
  const [isOverflowing, setIsOverflowing] = useState11(false);
5650
5632
  const labelContent = /* @__PURE__ */ React32.createElement(
5651
5633
  "span",
@@ -5693,12 +5675,12 @@ function FilterableCheckboxGroup(inProps) {
5693
5675
  const [rawValue, setInternalValue] = useControlledState(
5694
5676
  value,
5695
5677
  value ?? EMPTY_VALUE,
5696
- useCallback15((newValue) => onChange?.(newValue ?? []), [onChange])
5678
+ useCallback16((newValue) => onChange?.(newValue ?? []), [onChange])
5697
5679
  );
5698
5680
  const internalValue = rawValue ?? EMPTY_VALUE;
5699
- const parentRef = useRef9(null);
5700
- const isInitialSortRef = useRef9(false);
5701
- const prevOptionsRef = useRef9([...options]);
5681
+ const parentRef = useRef10(null);
5682
+ const isInitialSortRef = useRef10(false);
5683
+ const prevOptionsRef = useRef10([...options]);
5702
5684
  const filteredOptions = useMemo14(() => {
5703
5685
  if (!searchTerm) return sortedOptions;
5704
5686
  return sortedOptions.filter((option) => option.label.toLowerCase().includes(searchTerm.toLowerCase()));
@@ -5750,10 +5732,10 @@ function FilterableCheckboxGroup(inProps) {
5750
5732
  useEffect9(() => {
5751
5733
  virtualizer.measure();
5752
5734
  }, [virtualizer, filteredOptions, size]);
5753
- const handleSearchChange = useCallback15((event) => {
5735
+ const handleSearchChange = useCallback16((event) => {
5754
5736
  setSearchTerm(event.target.value);
5755
5737
  }, []);
5756
- const handleCheckboxChange = useCallback15(
5738
+ const handleCheckboxChange = useCallback16(
5757
5739
  (optionValue) => (event) => {
5758
5740
  const checked = event.target.checked;
5759
5741
  const newValue = checked ? [...internalValue, optionValue] : internalValue.filter((v) => v !== optionValue);
@@ -5761,7 +5743,7 @@ function FilterableCheckboxGroup(inProps) {
5761
5743
  },
5762
5744
  [internalValue, setInternalValue]
5763
5745
  );
5764
- const handleSelectAll = useCallback15(
5746
+ const handleSelectAll = useCallback16(
5765
5747
  (event) => {
5766
5748
  const checked = event.target.checked;
5767
5749
  const enabledOptions = filteredOptions.filter((option) => !option.disabled);
@@ -6119,7 +6101,7 @@ function MenuButton2(props) {
6119
6101
  MenuButton2.displayName = "MenuButton";
6120
6102
 
6121
6103
  // src/components/MonthPicker/MonthPicker.tsx
6122
- import React36, { forwardRef as forwardRef9, useCallback as useCallback16, useEffect as useEffect11, useImperativeHandle as useImperativeHandle4, useRef as useRef10, useState as useState13 } from "react";
6104
+ import React36, { forwardRef as forwardRef9, useCallback as useCallback17, useEffect as useEffect11, useImperativeHandle as useImperativeHandle4, useRef as useRef11, useState as useState13 } from "react";
6123
6105
  import CalendarTodayIcon3 from "@mui/icons-material/CalendarToday";
6124
6106
  import { styled as styled21, useThemeProps as useThemeProps9 } from "@mui/joy";
6125
6107
  import { FocusTrap as FocusTrap3, ClickAwayListener as ClickAwayListener3, Popper as Popper4 } from "@mui/base";
@@ -6202,18 +6184,18 @@ var MonthPicker = forwardRef9((inProps, ref) => {
6202
6184
  locale,
6203
6185
  ...innerProps
6204
6186
  } = props;
6205
- const innerRef = useRef10(null);
6206
- const buttonRef = useRef10(null);
6187
+ const innerRef = useRef11(null);
6188
+ const buttonRef = useRef11(null);
6207
6189
  const [rawValue, setValue, isControlled] = useControlledState(
6208
6190
  props.value,
6209
6191
  props.defaultValue ?? null,
6210
- useCallback16(
6192
+ useCallback17(
6211
6193
  (value2) => onChange?.({ target: { name: props.name, value: value2 ?? "" } }),
6212
6194
  [props.name, onChange]
6213
6195
  )
6214
6196
  );
6215
6197
  const value = rawValue ?? "";
6216
- const getFormattedDisplayValue = useCallback16(
6198
+ const getFormattedDisplayValue = useCallback17(
6217
6199
  (inputValue) => {
6218
6200
  if (!inputValue) return "";
6219
6201
  try {
@@ -6236,7 +6218,7 @@ var MonthPicker = forwardRef9((inProps, ref) => {
6236
6218
  useEffect11(() => {
6237
6219
  setDisplayValue(getFormattedDisplayValue(value));
6238
6220
  }, [value, getFormattedDisplayValue]);
6239
- const handleChange = useCallback16(
6221
+ const handleChange = useCallback17(
6240
6222
  (event) => {
6241
6223
  const newValue = event.target.value;
6242
6224
  setValue(newValue);
@@ -6246,14 +6228,14 @@ var MonthPicker = forwardRef9((inProps, ref) => {
6246
6228
  },
6247
6229
  [setValue, getFormattedDisplayValue, isControlled]
6248
6230
  );
6249
- const handleCalendarToggle = useCallback16(
6231
+ const handleCalendarToggle = useCallback17(
6250
6232
  (event) => {
6251
6233
  setAnchorEl(anchorEl ? null : event.currentTarget);
6252
6234
  innerRef.current?.focus();
6253
6235
  },
6254
6236
  [anchorEl, setAnchorEl, innerRef]
6255
6237
  );
6256
- const handleInputMouseDown = useCallback16(
6238
+ const handleInputMouseDown = useCallback17(
6257
6239
  (event) => {
6258
6240
  event.preventDefault();
6259
6241
  buttonRef.current?.focus();
@@ -6377,7 +6359,7 @@ var MonthPicker = forwardRef9((inProps, ref) => {
6377
6359
  });
6378
6360
 
6379
6361
  // src/components/MonthRangePicker/MonthRangePicker.tsx
6380
- import React37, { forwardRef as forwardRef10, useCallback as useCallback17, useEffect as useEffect12, useImperativeHandle as useImperativeHandle5, useMemo as useMemo15, useRef as useRef11, useState as useState14 } from "react";
6362
+ import React37, { forwardRef as forwardRef10, useCallback as useCallback18, useEffect as useEffect12, useImperativeHandle as useImperativeHandle5, useMemo as useMemo15, useRef as useRef12, useState as useState14 } from "react";
6381
6363
  import { IMaskInput as IMaskInput3, IMask as IMask3 } from "react-imask";
6382
6364
  import CalendarTodayIcon4 from "@mui/icons-material/CalendarToday";
6383
6365
  import { styled as styled22, useThemeProps as useThemeProps10 } from "@mui/joy";
@@ -6492,12 +6474,12 @@ var MonthRangePicker = forwardRef10((inProps, ref) => {
6492
6474
  } = props;
6493
6475
  const displayFormat = displayFormatProp ?? format;
6494
6476
  const isAlphabeticDisplay = hasAlphabeticMonth3(displayFormat);
6495
- const innerRef = useRef11(null);
6496
- const buttonRef = useRef11(null);
6477
+ const innerRef = useRef12(null);
6478
+ const buttonRef = useRef12(null);
6497
6479
  const [rawValue, setValue] = useControlledState(
6498
6480
  props.value,
6499
6481
  props.defaultValue ?? null,
6500
- useCallback17(
6482
+ useCallback18(
6501
6483
  (value2) => onChange?.({ target: { name: props.name, value: value2 ?? "" } }),
6502
6484
  [props.name, onChange]
6503
6485
  )
@@ -6527,7 +6509,7 @@ var MonthRangePicker = forwardRef10((inProps, ref) => {
6527
6509
  }
6528
6510
  }, [anchorEl, innerRef]);
6529
6511
  useImperativeHandle5(ref, () => innerRef.current, [innerRef]);
6530
- const handleChange = useCallback17(
6512
+ const handleChange = useCallback18(
6531
6513
  (event) => {
6532
6514
  setDisplayValue(
6533
6515
  event.target.value ? formatValueString4(parseDates2(event.target.value), displayFormat, locale) : ""
@@ -6536,7 +6518,7 @@ var MonthRangePicker = forwardRef10((inProps, ref) => {
6536
6518
  },
6537
6519
  [displayFormat, locale, setValue]
6538
6520
  );
6539
- const handleInputMouseDown = useCallback17(
6521
+ const handleInputMouseDown = useCallback18(
6540
6522
  (event) => {
6541
6523
  if (isAlphabeticDisplay) {
6542
6524
  event.preventDefault();
@@ -6545,14 +6527,14 @@ var MonthRangePicker = forwardRef10((inProps, ref) => {
6545
6527
  },
6546
6528
  [isAlphabeticDisplay, buttonRef]
6547
6529
  );
6548
- const handleCalendarToggle = useCallback17(
6530
+ const handleCalendarToggle = useCallback18(
6549
6531
  (event) => {
6550
6532
  setAnchorEl(anchorEl ? null : event.currentTarget);
6551
6533
  innerRef.current?.focus();
6552
6534
  },
6553
6535
  [anchorEl, setAnchorEl, innerRef]
6554
6536
  );
6555
- const handleCalendarChange = useCallback17(
6537
+ const handleCalendarChange = useCallback18(
6556
6538
  ([date1, date2]) => {
6557
6539
  if (!date1 || !date2) return;
6558
6540
  const formattedValue = formatValueString4([date1, date2], format);
@@ -6791,7 +6773,7 @@ function Navigator(props) {
6791
6773
  Navigator.displayName = "Navigator";
6792
6774
 
6793
6775
  // src/components/PercentageInput/PercentageInput.tsx
6794
- import React41, { useCallback as useCallback18, useMemo as useMemo16 } from "react";
6776
+ import React41, { useCallback as useCallback19, useMemo as useMemo16 } from "react";
6795
6777
  import { NumericFormat as NumericFormat2 } from "react-number-format";
6796
6778
  import { styled as styled25, useThemeProps as useThemeProps11 } from "@mui/joy";
6797
6779
  var padDecimal = (value, decimalScale) => {
@@ -6848,7 +6830,7 @@ var PercentageInput = React41.forwardRef(
6848
6830
  const [_value, setValue] = useControlledState(
6849
6831
  props.value,
6850
6832
  props.defaultValue ?? null,
6851
- useCallback18((value2) => onChange?.({ target: { name, value: value2 } }), [onChange, name])
6833
+ useCallback19((value2) => onChange?.({ target: { name, value: value2 } }), [onChange, name])
6852
6834
  );
6853
6835
  const value = useMemo16(() => {
6854
6836
  if (_value && useMinorUnit) {
@@ -6860,7 +6842,7 @@ var PercentageInput = React41.forwardRef(
6860
6842
  () => value != null && (max != null && value > max || min != null && value < min),
6861
6843
  [max, min, value]
6862
6844
  );
6863
- const handleChange = useCallback18(
6845
+ const handleChange = useCallback19(
6864
6846
  (event) => {
6865
6847
  if (event.target.value === "") {
6866
6848
  setValue(null);
@@ -7622,7 +7604,7 @@ function ThemeProvider(props) {
7622
7604
  ThemeProvider.displayName = "ThemeProvider";
7623
7605
 
7624
7606
  // src/components/Uploader/Uploader.tsx
7625
- import React49, { useCallback as useCallback19, useEffect as useEffect13, useMemo as useMemo17, useRef as useRef12, useState as useState16 } from "react";
7607
+ import React49, { useCallback as useCallback20, useEffect as useEffect13, useMemo as useMemo17, useRef as useRef13, useState as useState16 } from "react";
7626
7608
  import { styled as styled31, Input as Input2 } from "@mui/joy";
7627
7609
  import MuiFileUploadIcon from "@mui/icons-material/CloudUploadRounded";
7628
7610
  import MuiUploadFileIcon from "@mui/icons-material/UploadFileRounded";
@@ -7756,8 +7738,8 @@ var Uploader = React49.memo((props) => {
7756
7738
  error: errorProp,
7757
7739
  helperText: helperTextProp
7758
7740
  } = props;
7759
- const dropZoneRef = useRef12(null);
7760
- const inputRef = useRef12(null);
7741
+ const dropZoneRef = useRef13(null);
7742
+ const inputRef = useRef13(null);
7761
7743
  const [errorText, setErrorText] = useState16();
7762
7744
  const [files, setFiles] = useState16([]);
7763
7745
  const [uploaded, setUploaded] = useState16(props.uploaded || []);
@@ -7807,7 +7789,7 @@ var Uploader = React49.memo((props) => {
7807
7789
  () => !maxCount || maxCount && [...uploaded, ...files].length !== maxCount,
7808
7790
  [files, maxCount, uploaded]
7809
7791
  );
7810
- const addFiles = useCallback19(
7792
+ const addFiles = useCallback20(
7811
7793
  (uploads) => {
7812
7794
  try {
7813
7795
  const types = parsedAccepts.map((type) => type.replace(".", "")) || [];
@@ -7889,14 +7871,14 @@ var Uploader = React49.memo((props) => {
7889
7871
  }
7890
7872
  }
7891
7873
  }, [inputRef, files, minCount]);
7892
- const handleFileChanged = useCallback19(
7874
+ const handleFileChanged = useCallback20(
7893
7875
  (event) => {
7894
7876
  const files2 = Array.from(event.target.files || []);
7895
7877
  addFiles(files2);
7896
7878
  },
7897
7879
  [addFiles]
7898
7880
  );
7899
- const handleDeleteFile = useCallback19(
7881
+ const handleDeleteFile = useCallback20(
7900
7882
  (deletedFile) => {
7901
7883
  if (deletedFile instanceof File) {
7902
7884
  setFiles((current) => {
@@ -7916,7 +7898,7 @@ var Uploader = React49.memo((props) => {
7916
7898
  },
7917
7899
  [name, onChange, onDelete]
7918
7900
  );
7919
- const handleUploaderButtonClick = useCallback19(() => {
7901
+ const handleUploaderButtonClick = useCallback20(() => {
7920
7902
  inputRef.current?.click();
7921
7903
  }, []);
7922
7904
  const uploader = /* @__PURE__ */ React49.createElement(