@sustaina/shared-ui 1.41.0 → 1.42.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.mjs CHANGED
@@ -1,5 +1,5 @@
1
- import * as React26 from 'react';
2
- import React26__default, { forwardRef, useRef, useMemo, useCallback, useState, isValidElement, useEffect, useLayoutEffect, createElement } from 'react';
1
+ import * as React27 from 'react';
2
+ import React27__default, { forwardRef, useRef, useMemo, useCallback, useState, isValidElement, useEffect, useLayoutEffect, createElement } from 'react';
3
3
  import { useRouter } from '@tanstack/react-router';
4
4
  import { create } from 'zustand';
5
5
  import clsx2, { clsx } from 'clsx';
@@ -18,6 +18,7 @@ import * as PopoverPrimitive from '@radix-ui/react-popover';
18
18
  import * as CheckboxPrimitive from '@radix-ui/react-checkbox';
19
19
  import * as CollapsiblePrimitive from '@radix-ui/react-collapsible';
20
20
  import { reSplitAlphaNumeric, useReactTable, getCoreRowModel, getGroupedRowModel, getExpandedRowModel, getSortedRowModel, getFilteredRowModel, flexRender } from '@tanstack/react-table';
21
+ import { useVirtualizer } from '@tanstack/react-virtual';
21
22
  import * as SheetPrimitive from '@radix-ui/react-dialog';
22
23
  import { initReactI18next, useTranslation, I18nextProvider } from 'react-i18next';
23
24
  import i18n from 'i18next';
@@ -60,7 +61,6 @@ import { z } from 'zod';
60
61
  import Cropper from 'react-easy-crop';
61
62
  import { NumericFormat } from 'react-number-format';
62
63
  import { Command as Command$1 } from 'cmdk';
63
- import { useVirtualizer } from '@tanstack/react-virtual';
64
64
 
65
65
  var __defProp = Object.defineProperty;
66
66
  var __export = (target, all) => {
@@ -2542,7 +2542,7 @@ var OPERATOR_LABEL = {
2542
2542
  containsAll: "Contains all of"
2543
2543
  };
2544
2544
  var OperatorSelect = ({ row, operators, onChangeOperator, error }) => {
2545
- React26__default.useEffect(() => {
2545
+ React27__default.useEffect(() => {
2546
2546
  if (!operators.length) return;
2547
2547
  if (!operators.includes(row.operator)) {
2548
2548
  onChangeOperator(operators[0]);
@@ -2578,15 +2578,15 @@ function Label2({ className, ...props }) {
2578
2578
  );
2579
2579
  }
2580
2580
  var Form = FormProvider;
2581
- var FormFieldContext = React26.createContext({});
2581
+ var FormFieldContext = React27.createContext({});
2582
2582
  var FormField = ({
2583
2583
  ...props
2584
2584
  }) => {
2585
2585
  return /* @__PURE__ */ jsx(FormFieldContext.Provider, { value: { name: props.name }, children: /* @__PURE__ */ jsx(Controller, { ...props }) });
2586
2586
  };
2587
2587
  var useFormField = () => {
2588
- const fieldContext = React26.useContext(FormFieldContext);
2589
- const itemContext = React26.useContext(FormItemContext);
2588
+ const fieldContext = React27.useContext(FormFieldContext);
2589
+ const itemContext = React27.useContext(FormItemContext);
2590
2590
  const { getFieldState } = useFormContext();
2591
2591
  const formState = useFormState({ name: fieldContext.name });
2592
2592
  const fieldState = getFieldState(fieldContext.name, formState);
@@ -2603,9 +2603,9 @@ var useFormField = () => {
2603
2603
  ...fieldState
2604
2604
  };
2605
2605
  };
2606
- var FormItemContext = React26.createContext({});
2606
+ var FormItemContext = React27.createContext({});
2607
2607
  function FormItem({ className, ...props }) {
2608
- const id = React26.useId();
2608
+ const id = React27.useId();
2609
2609
  return /* @__PURE__ */ jsx(FormItemContext.Provider, { value: { id }, children: /* @__PURE__ */ jsx("div", { "data-slot": "form-item", className: cn("grid gap-2", className), ...props }) });
2610
2610
  }
2611
2611
  function FormLabel({ className, ...props }) {
@@ -2709,7 +2709,7 @@ var Spinner = ({ className, variant, size = "default", ...props }) => /* @__PURE
2709
2709
  ]
2710
2710
  }
2711
2711
  );
2712
- var InputPrimitive = React26.forwardRef(
2712
+ var InputPrimitive = React27.forwardRef(
2713
2713
  ({ className, type = "text", ...props }, ref) => {
2714
2714
  return /* @__PURE__ */ jsx(
2715
2715
  "input",
@@ -2748,7 +2748,7 @@ var inputVariants = cva("", {
2748
2748
  appearance: "filled"
2749
2749
  }
2750
2750
  });
2751
- var Input = React26.forwardRef(
2751
+ var Input = React27.forwardRef(
2752
2752
  ({
2753
2753
  className,
2754
2754
  wrapperClassName,
@@ -2781,8 +2781,8 @@ var Input = React26.forwardRef(
2781
2781
  onChange: onChangeProp
2782
2782
  } = rest;
2783
2783
  const ariaInvalid = invalid ?? ariaInvalidProp;
2784
- const messageId = React26.useId();
2785
- const handleChange = React26.useCallback(
2784
+ const messageId = React27.useId();
2785
+ const handleChange = React27.useCallback(
2786
2786
  (event) => {
2787
2787
  onChangeProp?.(event);
2788
2788
  onValueChange?.(event.target.value);
@@ -3170,20 +3170,20 @@ function DatePicker({
3170
3170
  className,
3171
3171
  ...props
3172
3172
  }) {
3173
- const today = React26.useMemo(() => startOfDay(/* @__PURE__ */ new Date()), []);
3174
- const [displayed, setDisplayed] = React26.useState(
3173
+ const today = React27.useMemo(() => startOfDay(/* @__PURE__ */ new Date()), []);
3174
+ const [displayed, setDisplayed] = React27.useState(
3175
3175
  selectedDate ? new Date(selectedDate) : /* @__PURE__ */ new Date()
3176
3176
  );
3177
3177
  minDate = clampToDay(minDate);
3178
3178
  maxDate = clampToDay(maxDate);
3179
- const disabledSet = React26.useMemo(() => {
3179
+ const disabledSet = React27.useMemo(() => {
3180
3180
  const s = /* @__PURE__ */ new Set();
3181
3181
  disabledDates?.forEach((d) => s.add(startOfDay(d).toISOString()));
3182
3182
  return s;
3183
3183
  }, [disabledDates]);
3184
3184
  const displayYear = displayed.getFullYear();
3185
3185
  const displayMonth = displayed.getMonth();
3186
- const weekdays = React26.useMemo(() => {
3186
+ const weekdays = React27.useMemo(() => {
3187
3187
  const labels = [];
3188
3188
  for (let i = 0; i < 7; i++) {
3189
3189
  const idx = i;
@@ -3192,7 +3192,7 @@ function DatePicker({
3192
3192
  }
3193
3193
  return labels;
3194
3194
  }, [callbacks]);
3195
- const grid = React26.useMemo(() => buildCalendarGrid(displayed, true), [displayed]);
3195
+ const grid = React27.useMemo(() => buildCalendarGrid(displayed, true), [displayed]);
3196
3196
  const isDateDisabled = (date) => {
3197
3197
  const d = startOfDay(date);
3198
3198
  if (minDate && d < minDate) return true;
@@ -3202,7 +3202,7 @@ function DatePicker({
3202
3202
  };
3203
3203
  const minYear = minDate?.getFullYear();
3204
3204
  const maxYear = maxDate?.getFullYear();
3205
- const getMonthLabel = React26.useCallback(
3205
+ const getMonthLabel = React27.useCallback(
3206
3206
  (year, monthIndex) => {
3207
3207
  const label = callbacks?.monthLabel?.(year, monthIndex);
3208
3208
  if (label === null || label === void 0) {
@@ -3212,7 +3212,7 @@ function DatePicker({
3212
3212
  },
3213
3213
  [callbacks]
3214
3214
  );
3215
- const getYearLabel = React26.useCallback(
3215
+ const getYearLabel = React27.useCallback(
3216
3216
  (year) => {
3217
3217
  const label = callbacks?.yearLabel?.(year);
3218
3218
  if (label === null || label === void 0) return String(year);
@@ -3220,7 +3220,7 @@ function DatePicker({
3220
3220
  },
3221
3221
  [callbacks]
3222
3222
  );
3223
- const clampMonthToBounds = React26.useCallback(
3223
+ const clampMonthToBounds = React27.useCallback(
3224
3224
  (year, monthIndex) => {
3225
3225
  let output = monthIndex;
3226
3226
  if (typeof minYear === "number" && year === minYear && minDate) {
@@ -3235,7 +3235,7 @@ function DatePicker({
3235
3235
  },
3236
3236
  [maxDate, minDate, maxYear, minYear]
3237
3237
  );
3238
- const yearOptions = React26.useMemo(() => {
3238
+ const yearOptions = React27.useMemo(() => {
3239
3239
  const fallbackWindow = 50;
3240
3240
  const start = typeof minYear === "number" ? minYear : displayYear - fallbackWindow;
3241
3241
  const end = typeof maxYear === "number" ? maxYear : displayYear + fallbackWindow;
@@ -3256,7 +3256,7 @@ function DatePicker({
3256
3256
  }
3257
3257
  return years;
3258
3258
  }, [displayYear, maxYear, minYear, selectedDate]);
3259
- const monthOptions = React26.useMemo(() => {
3259
+ const monthOptions = React27.useMemo(() => {
3260
3260
  const months = Array.from({ length: 12 }, (_, monthIndex) => {
3261
3261
  const disabled = typeof minYear === "number" && displayYear === minYear && minDate && monthIndex < minDate.getMonth() || typeof maxYear === "number" && displayYear === maxYear && maxDate && monthIndex > maxDate.getMonth();
3262
3262
  return {
@@ -3275,7 +3275,7 @@ function DatePicker({
3275
3275
  }
3276
3276
  return months.sort((a, b) => a.value - b.value).filter((option, index, arr) => index === 0 || option.value !== arr[index - 1].value);
3277
3277
  }, [displayMonth, displayYear, getMonthLabel, maxDate, maxYear, minDate, minYear]);
3278
- const handleMonthSelect = React26.useCallback((nextValue) => {
3278
+ const handleMonthSelect = React27.useCallback((nextValue) => {
3279
3279
  const nextMonth = Number.parseInt(nextValue, 10);
3280
3280
  if (Number.isNaN(nextMonth)) return;
3281
3281
  setDisplayed((prev) => {
@@ -3285,7 +3285,7 @@ function DatePicker({
3285
3285
  return next;
3286
3286
  });
3287
3287
  }, []);
3288
- const handleYearSelect = React26.useCallback(
3288
+ const handleYearSelect = React27.useCallback(
3289
3289
  (nextValue) => {
3290
3290
  const nextYear = Number.parseInt(nextValue, 10);
3291
3291
  if (Number.isNaN(nextYear)) return;
@@ -3433,14 +3433,14 @@ var DatePicker2 = ({
3433
3433
  ariaLabel,
3434
3434
  ...calendarProps
3435
3435
  }) => {
3436
- const [open, setOpen] = React26__default.useState(false);
3437
- const parser = React26__default.useMemo(() => valueParser ?? defaultValueParser, [valueParser]);
3438
- const outputFormatter = React26__default.useMemo(() => valueFormatter ?? defaultValueFormatter, [valueFormatter]);
3439
- const labelFormatter = React26__default.useMemo(
3436
+ const [open, setOpen] = React27__default.useState(false);
3437
+ const parser = React27__default.useMemo(() => valueParser ?? defaultValueParser, [valueParser]);
3438
+ const outputFormatter = React27__default.useMemo(() => valueFormatter ?? defaultValueFormatter, [valueFormatter]);
3439
+ const labelFormatter = React27__default.useMemo(
3440
3440
  () => displayFormatter ?? defaultDisplayFormatter,
3441
3441
  [displayFormatter]
3442
3442
  );
3443
- const parsedValue = React26__default.useMemo(() => {
3443
+ const parsedValue = React27__default.useMemo(() => {
3444
3444
  if (value === null || value === void 0) return void 0;
3445
3445
  if (value instanceof Date) return value;
3446
3446
  const parsed = parser(value);
@@ -3449,26 +3449,26 @@ var DatePicker2 = ({
3449
3449
  const buttonLabel = parsedValue ? labelFormatter(parsedValue) : placeholder2;
3450
3450
  const buttonAriaLabel = ariaLabel ?? (parsedValue ? `Change date, current selection ${labelFormatter(parsedValue)}` : "Open date picker");
3451
3451
  const shouldShowClear = allowClear && !disabled && !!parsedValue;
3452
- const handleClose = React26__default.useCallback(() => setOpen(false), []);
3453
- const emitChange = React26__default.useCallback(
3452
+ const handleClose = React27__default.useCallback(() => setOpen(false), []);
3453
+ const emitChange = React27__default.useCallback(
3454
3454
  (next) => {
3455
3455
  onChange?.(next);
3456
3456
  onValueChange?.(next ? outputFormatter(next) : void 0);
3457
3457
  },
3458
3458
  [onChange, onValueChange, outputFormatter]
3459
3459
  );
3460
- const handleSelect = React26__default.useCallback(
3460
+ const handleSelect = React27__default.useCallback(
3461
3461
  (next) => {
3462
3462
  emitChange(next);
3463
3463
  if (closeOnSelect && next) handleClose();
3464
3464
  },
3465
3465
  [closeOnSelect, emitChange, handleClose]
3466
3466
  );
3467
- const handleClear = React26__default.useCallback(() => {
3467
+ const handleClear = React27__default.useCallback(() => {
3468
3468
  emitChange(void 0);
3469
3469
  handleClose();
3470
3470
  }, [emitChange, handleClose]);
3471
- const handleOpenChange = React26__default.useCallback(
3471
+ const handleOpenChange = React27__default.useCallback(
3472
3472
  (nextOpen) => {
3473
3473
  if (disabled && nextOpen) return;
3474
3474
  setOpen(nextOpen);
@@ -3658,15 +3658,15 @@ function MonthCal({
3658
3658
  onYearBackward,
3659
3659
  onYearForward
3660
3660
  }) {
3661
- const today = React26.useMemo(() => {
3661
+ const today = React27.useMemo(() => {
3662
3662
  const now = /* @__PURE__ */ new Date();
3663
3663
  now.setDate(1);
3664
3664
  now.setHours(0, 0, 0, 0);
3665
3665
  return now;
3666
3666
  }, []);
3667
- const selectedMonthDate = React26.useMemo(() => normalizeMonth(selectedDate), [selectedDate]);
3668
- const min = React26.useMemo(() => normalizeMonth(minDate), [minDate]);
3669
- const max = React26.useMemo(() => normalizeMonth(maxDate), [maxDate]);
3667
+ const selectedMonthDate = React27.useMemo(() => normalizeMonth(selectedDate), [selectedDate]);
3668
+ const min = React27.useMemo(() => normalizeMonth(minDate), [minDate]);
3669
+ const max = React27.useMemo(() => normalizeMonth(maxDate), [maxDate]);
3670
3670
  let effectiveMin = min;
3671
3671
  if (min && max && min > max) {
3672
3672
  effectiveMin = max;
@@ -3675,10 +3675,10 @@ function MonthCal({
3675
3675
  const minMonth = effectiveMin?.getMonth();
3676
3676
  const maxYear = max?.getFullYear();
3677
3677
  const maxMonth = max?.getMonth();
3678
- const [menuYear, setMenuYear] = React26.useState(
3678
+ const [menuYear, setMenuYear] = React27.useState(
3679
3679
  () => selectedMonthDate?.getFullYear() ?? today.getFullYear()
3680
3680
  );
3681
- React26.useEffect(() => {
3681
+ React27.useEffect(() => {
3682
3682
  if (selectedMonthDate) {
3683
3683
  const year = selectedMonthDate.getFullYear();
3684
3684
  if (year !== menuYear) {
@@ -3686,7 +3686,7 @@ function MonthCal({
3686
3686
  }
3687
3687
  }
3688
3688
  }, [selectedMonthDate, menuYear]);
3689
- React26.useEffect(() => {
3689
+ React27.useEffect(() => {
3690
3690
  if (typeof minYear === "number" && menuYear < minYear) {
3691
3691
  setMenuYear(minYear);
3692
3692
  return;
@@ -3697,7 +3697,7 @@ function MonthCal({
3697
3697
  }, [minYear, maxYear, menuYear]);
3698
3698
  const disablePrevYear = typeof minYear === "number" ? menuYear <= minYear : false;
3699
3699
  const disableNextYear = typeof maxYear === "number" ? menuYear >= maxYear : false;
3700
- const yearOptions = React26.useMemo(() => {
3700
+ const yearOptions = React27.useMemo(() => {
3701
3701
  const fallbackWindow = 50;
3702
3702
  const start = typeof minYear === "number" ? minYear : menuYear - fallbackWindow;
3703
3703
  const end = typeof maxYear === "number" ? maxYear : menuYear + fallbackWindow;
@@ -3711,7 +3711,7 @@ function MonthCal({
3711
3711
  }
3712
3712
  return years;
3713
3713
  }, [maxYear, menuYear, minYear]);
3714
- const formatYearLabel = React26.useCallback(
3714
+ const formatYearLabel = React27.useCallback(
3715
3715
  (year) => {
3716
3716
  const raw = callbacks?.yearLabel?.(year);
3717
3717
  if (raw === null || raw === void 0) return String(year);
@@ -3719,7 +3719,7 @@ function MonthCal({
3719
3719
  },
3720
3720
  [callbacks]
3721
3721
  );
3722
- const handleYearSelect = React26.useCallback(
3722
+ const handleYearSelect = React27.useCallback(
3723
3723
  (nextValue) => {
3724
3724
  const nextYear = Number.parseInt(nextValue, 10);
3725
3725
  if (Number.isNaN(nextYear)) return;
@@ -3729,7 +3729,7 @@ function MonthCal({
3729
3729
  },
3730
3730
  [maxYear, minYear]
3731
3731
  );
3732
- const disabledPairs = React26.useMemo(() => {
3732
+ const disabledPairs = React27.useMemo(() => {
3733
3733
  if (!disabledDates?.length) return [];
3734
3734
  const pairs = [];
3735
3735
  disabledDates.forEach((date) => {
@@ -3874,14 +3874,14 @@ var MonthPicker2 = ({
3874
3874
  ariaLabel,
3875
3875
  ...calendarProps
3876
3876
  }) => {
3877
- const [open, setOpen] = React26__default.useState(false);
3878
- const parser = React26__default.useMemo(() => valueParser ?? defaultValueParser2, [valueParser]);
3879
- const outputFormatter = React26__default.useMemo(() => valueFormatter ?? defaultValueFormatter2, [valueFormatter]);
3880
- const labelFormatter = React26__default.useMemo(
3877
+ const [open, setOpen] = React27__default.useState(false);
3878
+ const parser = React27__default.useMemo(() => valueParser ?? defaultValueParser2, [valueParser]);
3879
+ const outputFormatter = React27__default.useMemo(() => valueFormatter ?? defaultValueFormatter2, [valueFormatter]);
3880
+ const labelFormatter = React27__default.useMemo(
3881
3881
  () => displayFormatter ?? defaultDisplayFormatter2,
3882
3882
  [displayFormatter]
3883
3883
  );
3884
- const parsedValue = React26__default.useMemo(() => {
3884
+ const parsedValue = React27__default.useMemo(() => {
3885
3885
  if (value === null || value === void 0) return void 0;
3886
3886
  if (value instanceof Date) return normalizeMonth2(value);
3887
3887
  if (typeof value === "string") {
@@ -3893,8 +3893,8 @@ var MonthPicker2 = ({
3893
3893
  const buttonLabel = parsedValue ? labelFormatter(parsedValue) : placeholder2;
3894
3894
  const buttonAriaLabel = ariaLabel ?? (parsedValue ? `Change month, current selection ${labelFormatter(parsedValue)}` : "Open month picker");
3895
3895
  const shouldShowClear = allowClear && !disabled && !!parsedValue;
3896
- const handleClose = React26__default.useCallback(() => setOpen(false), []);
3897
- const emitChange = React26__default.useCallback(
3896
+ const handleClose = React27__default.useCallback(() => setOpen(false), []);
3897
+ const emitChange = React27__default.useCallback(
3898
3898
  (next) => {
3899
3899
  const normalized = next ? normalizeMonth2(next) : void 0;
3900
3900
  onChange?.(normalized);
@@ -3902,18 +3902,18 @@ var MonthPicker2 = ({
3902
3902
  },
3903
3903
  [onChange, onValueChange, outputFormatter]
3904
3904
  );
3905
- const handleSelect = React26__default.useCallback(
3905
+ const handleSelect = React27__default.useCallback(
3906
3906
  (next) => {
3907
3907
  emitChange(next);
3908
3908
  if (closeOnSelect && next) handleClose();
3909
3909
  },
3910
3910
  [closeOnSelect, emitChange, handleClose]
3911
3911
  );
3912
- const handleClear = React26__default.useCallback(() => {
3912
+ const handleClear = React27__default.useCallback(() => {
3913
3913
  emitChange(void 0);
3914
3914
  handleClose();
3915
3915
  }, [emitChange, handleClose]);
3916
- const handleOpenChange = React26__default.useCallback(
3916
+ const handleOpenChange = React27__default.useCallback(
3917
3917
  (nextOpen) => {
3918
3918
  if (disabled && nextOpen) return;
3919
3919
  setOpen(nextOpen);
@@ -5189,7 +5189,7 @@ var AdvanceSearch = ({
5189
5189
  defaultValues: {}
5190
5190
  });
5191
5191
  const { handleSubmit, unregister, resetField, getValues, clearErrors, setError } = form;
5192
- const [operatorErrors, setOperatorErrors] = React26__default.useState({});
5192
+ const [operatorErrors, setOperatorErrors] = React27__default.useState({});
5193
5193
  const clearOperatorError = useCallback(
5194
5194
  (rowId) => {
5195
5195
  setOperatorErrors((prev) => {
@@ -5610,14 +5610,14 @@ var useControllableState = ({
5610
5610
  value
5611
5611
  }) => {
5612
5612
  const isControlled = typeof value !== "undefined";
5613
- const [internalValue, setInternalValue] = React26.useState(() => {
5613
+ const [internalValue, setInternalValue] = React27.useState(() => {
5614
5614
  return isControlled ? value : defaultValue;
5615
5615
  });
5616
- React26.useEffect(() => {
5616
+ React27.useEffect(() => {
5617
5617
  if (!isControlled) return;
5618
5618
  setInternalValue(value);
5619
5619
  }, [isControlled, value]);
5620
- const setValue = React26.useCallback(
5620
+ const setValue = React27.useCallback(
5621
5621
  (nextValue) => {
5622
5622
  if (isControlled) return;
5623
5623
  setInternalValue(nextValue);
@@ -5632,6 +5632,16 @@ var useControllableState = ({
5632
5632
  };
5633
5633
  var useControllableState_default = useControllableState;
5634
5634
  var useIsomorphicLayoutEffect = typeof window !== "undefined" ? useLayoutEffect : useEffect;
5635
+ var useBindRef = ({ ref, value }) => {
5636
+ React27.useEffect(() => {
5637
+ if (!ref) return;
5638
+ ref.current = value;
5639
+ return () => {
5640
+ ref.current = null;
5641
+ };
5642
+ }, [ref, value]);
5643
+ };
5644
+ var useBindRef_default = useBindRef;
5635
5645
  var HeaderCell = ({
5636
5646
  rootClassName,
5637
5647
  labelClassName,
@@ -5798,38 +5808,6 @@ function TableCaption({ className, ...props }) {
5798
5808
  }
5799
5809
  );
5800
5810
  }
5801
- var ColumnResizer = ({ header, className, style }) => {
5802
- if (!header.column.getCanResize()) {
5803
- return null;
5804
- }
5805
- const resizeHandler = header.getResizeHandler();
5806
- return /* @__PURE__ */ jsx(
5807
- "div",
5808
- {
5809
- className: cn(
5810
- "z-[2] absolute top-0 right-0 h-full w-1 select-none touch-none cursor-col-resize hover:bg-[#41875c]/45 active:bg-[#41875c]",
5811
- className
5812
- ),
5813
- onDoubleClick: () => header.column.resetSize(),
5814
- onTouchStart: resizeHandler,
5815
- onMouseDown: resizeHandler,
5816
- style
5817
- }
5818
- );
5819
- };
5820
- var ColumnResizer_default = ColumnResizer;
5821
- var ColumnSeparator = ({ show, className, ...props }) => {
5822
- if (!show) return null;
5823
- return /* @__PURE__ */ jsx(
5824
- "span",
5825
- {
5826
- "data-slot": "table-head-separator",
5827
- className: cn("absolute right-0 top-1/2 h-4 w-px -translate-y-1/2 bg-gray-300", className),
5828
- ...props
5829
- }
5830
- );
5831
- };
5832
- var ColumnSeparator_default = React26__default.memo(ColumnSeparator);
5833
5811
  var StatusContentSlot = ({
5834
5812
  content,
5835
5813
  icon,
@@ -5848,7 +5826,7 @@ var StatusContentSlot = ({
5848
5826
  content
5849
5827
  ] });
5850
5828
  };
5851
- var StatusContentSlot_default = React26__default.memo(StatusContentSlot);
5829
+ var StatusContentSlot_default = React27__default.memo(StatusContentSlot);
5852
5830
  var stateOptions = [
5853
5831
  "columnFilters",
5854
5832
  "globalFilter",
@@ -6014,45 +5992,8 @@ var DataTableDevTool = ({ table }) => {
6014
5992
  ] });
6015
5993
  };
6016
5994
  var DataTableDevTool_default = DataTableDevTool;
6017
-
6018
- // src/components/data-table/helpers.ts
6019
- function getColumnPinningInfo(column) {
6020
- const isPinned = column.getIsPinned();
6021
- const isLastLeftPinnedColumn = isPinned === "left" && column.getIsLastColumn("left");
6022
- const isFirstRightPinnedColumn = isPinned === "right" && column.getIsFirstColumn("right");
6023
- return { isPinned, isLastLeftPinnedColumn, isFirstRightPinnedColumn };
6024
- }
6025
- function getColumnPinningStyles(column) {
6026
- const { isPinned, isFirstRightPinnedColumn, isLastLeftPinnedColumn } = getColumnPinningInfo(column);
6027
- const classes = cn(
6028
- isPinned ? "sticky" : "relative",
6029
- isPinned ? "z-[1]" : "z-0",
6030
- isLastLeftPinnedColumn && "shadow-[inset_-1px_0_0_0_black]",
6031
- isFirstRightPinnedColumn && "shadow-[inset_1px_0_0_0_black]"
6032
- );
6033
- const style = {
6034
- left: isPinned === "left" ? column.getStart("left") : void 0,
6035
- right: isPinned === "right" ? column.getAfter("right") : void 0
6036
- };
6037
- return { classes, style };
6038
- }
6039
- function getRowClickHandlers(handler, { rowData, row, table }) {
6040
- const handleClick = (event) => {
6041
- if (event.detail === 1) {
6042
- handler(rowData, { event, row, table, clickType: "single" });
6043
- }
6044
- if (event.detail >= 2) {
6045
- handler(rowData, { event, row, table, clickType: "double" });
6046
- }
6047
- };
6048
- return {
6049
- onClick: handleClick
6050
- };
6051
- }
6052
5995
  var fallbackData = [];
6053
- var DataTable = ({
6054
- tableRef,
6055
- isInitialLoading,
5996
+ var useTableController = ({
6056
5997
  columns,
6057
5998
  data,
6058
5999
  filters,
@@ -6064,14 +6005,8 @@ var DataTable = ({
6064
6005
  columnResizing,
6065
6006
  rowSelection,
6066
6007
  rowExpansion,
6067
- scrollFetch,
6068
- activeStatusContent,
6069
- statusContent,
6070
6008
  rowIdKey,
6071
- childrenKey,
6072
- onRowClick,
6073
- debug,
6074
- components
6009
+ childrenKey
6075
6010
  }) => {
6076
6011
  const table = useReactTable({
6077
6012
  // required properties
@@ -6124,7 +6059,6 @@ var DataTable = ({
6124
6059
  getSortedRowModel: !sorting?.manual && sorting?.enabled ? getSortedRowModel() : void 0,
6125
6060
  manualSorting: sorting?.enabled && (sorting?.manual ?? false),
6126
6061
  enableSorting: sorting?.enabled ?? false,
6127
- // default behavior: column with type number is sort by desc and string sort by asc first, we fix force always asc
6128
6062
  sortDescFirst: sorting?.enabled ? sorting?.sortDescFirst ?? false : false,
6129
6063
  onSortingChange: sorting?.enabled ? sorting?.onSortingChange : void 0,
6130
6064
  // ordering
@@ -6139,10 +6073,7 @@ var DataTable = ({
6139
6073
  enableMultiRowSelection: rowSelection?.enabled ? rowSelection?.multiSelect ?? true : true,
6140
6074
  onRowSelectionChange: rowSelection?.enabled ? rowSelection?.onSelectionChange : void 0,
6141
6075
  // row expanded
6142
- getExpandedRowModel: (
6143
- // when grouping is use then we should open this
6144
- !rowExpansion?.manual && rowExpansion?.enabled ? getExpandedRowModel() : void 0
6145
- ),
6076
+ getExpandedRowModel: !rowExpansion?.manual && rowExpansion?.enabled ? getExpandedRowModel() : void 0,
6146
6077
  manualExpanding: rowExpansion?.enabled && (rowExpansion?.manual ?? false),
6147
6078
  enableExpanding: rowExpansion?.enabled ?? false,
6148
6079
  getIsRowExpanded: rowExpansion?.enabled ? rowExpansion?.isRowExpanded : void 0,
@@ -6160,13 +6091,93 @@ var DataTable = ({
6160
6091
  columnResizeMode: columnResizing?.enabled ? columnResizing?.resizeMode ?? "onChange" : "onChange"
6161
6092
  })
6162
6093
  });
6163
- const tableContainerRef = useRef(null);
6094
+ return table;
6095
+ };
6096
+ var useScrollFetch = ({ scrollFetch, containerRef }) => {
6097
+ const fetchMoreOnScrollReached = useCallback(
6098
+ (containerRefElement) => {
6099
+ if (!scrollFetch?.enabled || !containerRefElement || scrollFetch?.isFetchingMore || !scrollFetch?.hasMore || !scrollFetch?.fetchMore) {
6100
+ return;
6101
+ }
6102
+ const { scrollHeight, scrollTop, clientHeight } = containerRefElement;
6103
+ const scrollableHeight = scrollHeight - clientHeight;
6104
+ const distanceToBottom = scrollableHeight - scrollTop;
6105
+ const ratioToBottom = scrollableHeight > 0 ? scrollTop / scrollableHeight : 1;
6106
+ const info = {
6107
+ scrollTop,
6108
+ scrollHeight,
6109
+ clientHeight,
6110
+ scrollableHeight,
6111
+ distanceToBottom,
6112
+ ratioToBottom,
6113
+ isTopReached: scrollTop === 0,
6114
+ isBottomReached: distanceToBottom <= 0
6115
+ };
6116
+ let shouldTrigger = false;
6117
+ if (typeof scrollFetch.scrollThreshold === "number") {
6118
+ shouldTrigger = info.ratioToBottom >= scrollFetch.scrollThreshold;
6119
+ } else if (typeof scrollFetch.scrollThreshold === "function") {
6120
+ shouldTrigger = scrollFetch.scrollThreshold(info);
6121
+ } else {
6122
+ shouldTrigger = info.ratioToBottom >= 0.7;
6123
+ }
6124
+ if (shouldTrigger) {
6125
+ scrollFetch.fetchMore();
6126
+ }
6127
+ },
6128
+ // eslint-disable-next-line react-hooks/exhaustive-deps
6129
+ [scrollFetch?.enabled, scrollFetch?.isFetchingMore, scrollFetch?.hasMore, scrollFetch?.fetchMore]
6130
+ );
6131
+ useEffect(() => {
6132
+ fetchMoreOnScrollReached(containerRef.current);
6133
+ }, [fetchMoreOnScrollReached, containerRef]);
6134
+ return fetchMoreOnScrollReached;
6135
+ };
6136
+ var DEFAULT_ROW_HEIGHT = 40;
6137
+ var DEFAULT_OVER_SCAN = 10;
6138
+ var useTableVirtualizer = ({
6139
+ enabled,
6140
+ table,
6141
+ containerRef,
6142
+ virtual
6143
+ }) => {
6144
+ const rowModel = table.getRowModel().rows;
6145
+ const virtualizer = useVirtualizer({
6146
+ count: enabled ? rowModel.length : 0,
6147
+ useFlushSync: false,
6148
+ getScrollElement: () => containerRef.current,
6149
+ estimateSize: () => DEFAULT_ROW_HEIGHT,
6150
+ measureElement: typeof window !== "undefined" && navigator.userAgent.indexOf("Firefox") === -1 ? (element) => element?.getBoundingClientRect().height : void 0,
6151
+ overscan: virtual?.overscan ?? DEFAULT_OVER_SCAN
6152
+ });
6153
+ const virtualItems = enabled ? virtualizer.getVirtualItems() : [];
6154
+ const paddingTop = enabled && virtualItems.length > 0 ? virtualItems[0].start : 0;
6155
+ const paddingBottom = enabled && virtualItems.length > 0 ? virtualizer.getTotalSize() - virtualItems[virtualItems.length - 1].end : 0;
6156
+ return {
6157
+ virtualizer,
6158
+ virtualItems,
6159
+ paddingTop,
6160
+ paddingBottom,
6161
+ rowModel
6162
+ };
6163
+ };
6164
+ function useComputedTableState({
6165
+ table,
6166
+ rowModel,
6167
+ isInitialLoading,
6168
+ scrollFetch,
6169
+ activeStatusContent
6170
+ }) {
6164
6171
  const isTableEmpty = table.getCoreRowModel().rows.length === 0;
6165
- const isTableEmptyAfterFiltering = table.getRowModel().rows.length === 0;
6172
+ const isTableEmptyAfterFiltering = rowModel.length === 0;
6166
6173
  const isFiltering = table.getState().columnFilters.length > 0 || !!table.getState().globalFilter;
6167
6174
  const leftVisibleLeftColumns = table.getLeftVisibleLeafColumns();
6168
6175
  const centerVisibleLeafColumns = table.getCenterVisibleLeafColumns();
6169
6176
  const rightVisibleLeafColumns = table.getRightVisibleLeafColumns();
6177
+ const visibleColumnCount = Math.max(
6178
+ leftVisibleLeftColumns.length + centerVisibleLeafColumns.length + rightVisibleLeafColumns.length,
6179
+ 1
6180
+ );
6170
6181
  const { isSomeColumnsFilterable, filterableColumns } = useMemo(() => {
6171
6182
  const mergedColumns = [
6172
6183
  ...leftVisibleLeftColumns,
@@ -6203,50 +6214,329 @@ var DataTable = ({
6203
6214
  }
6204
6215
  return activeStatusContent;
6205
6216
  }, [activeStatusContent, autoStatusKey]);
6206
- const fetchMoreOnScrollReached = useCallback(
6207
- (containerRefElement) => {
6208
- if (!scrollFetch?.enabled || !containerRefElement || scrollFetch?.isFetchingMore || !scrollFetch?.hasMore || !scrollFetch?.fetchMore) {
6209
- return;
6210
- }
6211
- const { scrollHeight, scrollTop, clientHeight } = containerRefElement;
6212
- const scrollableHeight = scrollHeight - clientHeight;
6213
- const distanceToBottom = scrollableHeight - scrollTop;
6214
- const ratioToBottom = scrollableHeight > 0 ? scrollTop / scrollableHeight : 1;
6215
- const info = {
6216
- scrollTop,
6217
- scrollHeight,
6218
- clientHeight,
6219
- scrollableHeight,
6220
- distanceToBottom,
6221
- ratioToBottom,
6222
- isTopReached: scrollTop === 0,
6223
- isBottomReached: distanceToBottom <= 0
6224
- };
6225
- let shouldTrigger = false;
6226
- if (typeof scrollFetch.scrollThreshold === "number") {
6227
- shouldTrigger = info.ratioToBottom >= scrollFetch.scrollThreshold;
6228
- } else if (typeof scrollFetch.scrollThreshold === "function") {
6229
- shouldTrigger = scrollFetch.scrollThreshold(info);
6230
- } else {
6231
- shouldTrigger = info.ratioToBottom >= 0.7;
6217
+ return {
6218
+ isTableEmpty,
6219
+ isTableEmptyAfterFiltering,
6220
+ isFiltering,
6221
+ leftVisibleLeftColumns,
6222
+ centerVisibleLeafColumns,
6223
+ rightVisibleLeafColumns,
6224
+ visibleColumnCount,
6225
+ isSomeColumnsFilterable,
6226
+ filterableColumns,
6227
+ activeStatusContentComputed
6228
+ };
6229
+ }
6230
+ var ColumnResizer = ({ header, className, style }) => {
6231
+ if (!header.column.getCanResize()) {
6232
+ return null;
6233
+ }
6234
+ const resizeHandler = header.getResizeHandler();
6235
+ return /* @__PURE__ */ jsx(
6236
+ "div",
6237
+ {
6238
+ className: cn(
6239
+ "z-[2] absolute top-0 right-0 h-full w-1 select-none touch-none cursor-col-resize hover:bg-[#41875c]/45 active:bg-[#41875c]",
6240
+ className
6241
+ ),
6242
+ onDoubleClick: () => header.column.resetSize(),
6243
+ onTouchStart: resizeHandler,
6244
+ onMouseDown: resizeHandler,
6245
+ style
6246
+ }
6247
+ );
6248
+ };
6249
+ var ColumnResizer_default = ColumnResizer;
6250
+ var ColumnSeparator = ({ show, className, ...props }) => {
6251
+ if (!show) return null;
6252
+ return /* @__PURE__ */ jsx(
6253
+ "span",
6254
+ {
6255
+ "data-slot": "table-head-separator",
6256
+ className: cn("absolute right-0 top-1/2 h-4 w-px -translate-y-1/2 bg-gray-300", className),
6257
+ ...props
6258
+ }
6259
+ );
6260
+ };
6261
+ var ColumnSeparator_default = React27__default.memo(ColumnSeparator);
6262
+
6263
+ // src/components/data-table/helpers.ts
6264
+ function getColumnPinningInfo(column) {
6265
+ const isPinned = column.getIsPinned();
6266
+ const isLastLeftPinnedColumn = isPinned === "left" && column.getIsLastColumn("left");
6267
+ const isFirstRightPinnedColumn = isPinned === "right" && column.getIsFirstColumn("right");
6268
+ return { isPinned, isLastLeftPinnedColumn, isFirstRightPinnedColumn };
6269
+ }
6270
+ function getColumnPinningStyles(column) {
6271
+ const { isPinned, isFirstRightPinnedColumn, isLastLeftPinnedColumn } = getColumnPinningInfo(column);
6272
+ const classes = cn(isPinned ? "sticky" : "relative");
6273
+ const style = {
6274
+ left: isPinned === "left" ? column.getStart("left") : void 0,
6275
+ right: isPinned === "right" ? column.getAfter("right") : void 0,
6276
+ zIndex: isPinned ? 1 : 0,
6277
+ boxShadow: isLastLeftPinnedColumn ? "inset -1px 0 0 0 black" : isFirstRightPinnedColumn ? "inset 1px 0 0 0 black" : void 0
6278
+ };
6279
+ return { classes, style };
6280
+ }
6281
+ function getRowClickHandlers(handler, { rowData, row, table }) {
6282
+ const handleClick = (event) => {
6283
+ if (event.detail === 1) {
6284
+ handler(rowData, { event, row, table, clickType: "single" });
6285
+ }
6286
+ if (event.detail >= 2) {
6287
+ handler(rowData, { event, row, table, clickType: "double" });
6288
+ }
6289
+ };
6290
+ return {
6291
+ onClick: handleClick
6292
+ };
6293
+ }
6294
+ var TableHeaderRows = ({
6295
+ table,
6296
+ columnResizing,
6297
+ virtual,
6298
+ components
6299
+ }) => {
6300
+ return /* @__PURE__ */ jsx(Fragment, { children: table.getHeaderGroups().map((headerGroup) => {
6301
+ return /* @__PURE__ */ jsx(TableRow, { children: headerGroup.headers.map((header) => {
6302
+ const { classes, style } = getColumnPinningStyles(header.column);
6303
+ const useColumnSizing = header.column.columnDef?.meta?.useColumnSizing ?? columnResizing?.enabled ?? virtual?.enabled ?? false;
6304
+ const tableHeadCellProps = typeof components?.tableHeadCellProps === "function" ? components?.tableHeadCellProps({ header, table }) : components?.tableHeadCellProps;
6305
+ const nextHeader = headerGroup.headers?.[header.index + 1] || header;
6306
+ const { isLastLeftPinnedColumn } = getColumnPinningInfo(header.column);
6307
+ const { isFirstRightPinnedColumn } = getColumnPinningInfo(nextHeader.column);
6308
+ const headerGroupLength = header.headerGroup.headers.length;
6309
+ const showSeparator = header.index !== headerGroupLength - 1 && !isLastLeftPinnedColumn && !isFirstRightPinnedColumn;
6310
+ return /* @__PURE__ */ jsxs(
6311
+ TableHead,
6312
+ {
6313
+ "data-testid": `table-head-${header.id}`,
6314
+ colSpan: header.colSpan,
6315
+ ...tableHeadCellProps,
6316
+ ...header.column.columnDef?.meta?.headerProps,
6317
+ className: cn(
6318
+ classes,
6319
+ tableHeadCellProps?.className,
6320
+ header.column.columnDef?.meta?.headerProps?.className
6321
+ ),
6322
+ style: {
6323
+ ...style,
6324
+ width: useColumnSizing ? header.column.getSize() : void 0,
6325
+ minWidth: useColumnSizing ? header.column.columnDef.minSize : void 0,
6326
+ maxWidth: useColumnSizing ? header.column.columnDef.maxSize : void 0,
6327
+ ...tableHeadCellProps?.style,
6328
+ ...header.column.columnDef?.meta?.headerProps?.style
6329
+ },
6330
+ children: [
6331
+ header.isPlaceholder ? null : flexRender(header.column.columnDef.header, header.getContext()),
6332
+ /* @__PURE__ */ jsx(
6333
+ ColumnSeparator_default,
6334
+ {
6335
+ ...components?.columnSeparatorProps?.headerCell,
6336
+ ...header.column.columnDef?.meta?.columnSeparatorProps,
6337
+ show: header.column.columnDef?.meta?.columnSeparatorProps?.show ?? components?.columnSeparatorProps?.headerCell?.show ?? showSeparator
6338
+ }
6339
+ ),
6340
+ /* @__PURE__ */ jsx(ColumnResizer_default, { header, ...components?.columnResizerProps })
6341
+ ]
6342
+ },
6343
+ header.id
6344
+ );
6345
+ }) }, headerGroup.id);
6346
+ }) });
6347
+ };
6348
+ var TableFilterRow = ({
6349
+ table,
6350
+ filterableColumns,
6351
+ isSomeColumnsFilterable,
6352
+ columnResizing,
6353
+ virtual,
6354
+ components
6355
+ }) => {
6356
+ if (!isSomeColumnsFilterable) return null;
6357
+ return /* @__PURE__ */ jsx(TableRow, { "data-testid": "table-filter-row", children: filterableColumns.map((column) => {
6358
+ const { classes, style } = getColumnPinningStyles(column);
6359
+ const useColumnSizing = column.columnDef.meta?.useColumnSizing ?? columnResizing?.enabled ?? virtual?.enabled ?? false;
6360
+ const tableFilterCellProps = typeof components?.tableFilterCellProps === "function" ? components?.tableFilterCellProps({ column, table }) : components?.tableFilterCellProps;
6361
+ return /* @__PURE__ */ jsx(
6362
+ TableCell,
6363
+ {
6364
+ "data-testid": `table-filter-cell-${column.id}`,
6365
+ ...tableFilterCellProps,
6366
+ ...column.columnDef?.meta?.filterCellProps,
6367
+ className: cn(
6368
+ "bg-white border-b",
6369
+ classes,
6370
+ tableFilterCellProps?.className,
6371
+ column.columnDef?.meta?.filterCellProps?.className
6372
+ ),
6373
+ style: {
6374
+ ...style,
6375
+ width: useColumnSizing ? column.getSize() : void 0,
6376
+ minWidth: useColumnSizing ? column.columnDef.minSize : void 0,
6377
+ maxWidth: useColumnSizing ? column.columnDef.maxSize : void 0,
6378
+ ...tableFilterCellProps?.style,
6379
+ ...column.columnDef?.meta?.filterCellProps?.style
6380
+ },
6381
+ children: column.getCanFilter() && column.columnDef.meta?.renderColumnFilter?.({
6382
+ column,
6383
+ table
6384
+ })
6385
+ },
6386
+ column.id
6387
+ );
6388
+ }) });
6389
+ };
6390
+ var TableDataRows = ({
6391
+ table,
6392
+ rowModel,
6393
+ virtualEnabled,
6394
+ virtualItems,
6395
+ virtualizer,
6396
+ paddingTop,
6397
+ paddingBottom,
6398
+ visibleColumnCount,
6399
+ columnResizing,
6400
+ virtual,
6401
+ onRowClick,
6402
+ components
6403
+ }) => {
6404
+ const config = virtualEnabled ? { items: virtualItems, isVirtualize: true, rowModel } : { items: rowModel, isVirtualize: false };
6405
+ return /* @__PURE__ */ jsxs(Fragment, { children: [
6406
+ virtualEnabled && paddingTop > 0 && /* @__PURE__ */ jsx(TableRow, { "aria-hidden": "true", "data-testid": "table-virtual-padding-top", children: /* @__PURE__ */ jsx(
6407
+ TableCell,
6408
+ {
6409
+ className: "border-b-0 p-0 h-auto",
6410
+ colSpan: visibleColumnCount,
6411
+ style: { height: `${paddingTop}px` }
6232
6412
  }
6233
- if (shouldTrigger) {
6234
- scrollFetch.fetchMore();
6413
+ ) }),
6414
+ config.items.map((item) => {
6415
+ const row = config.isVirtualize ? config.rowModel[item.index] : item;
6416
+ if (!row) return null;
6417
+ const virtualIndex = config.isVirtualize ? item.index : void 0;
6418
+ const tableDataRowProps = typeof components?.tableDataRowProps === "function" ? components.tableDataRowProps({ row, table }) || {} : components?.tableDataRowProps || {};
6419
+ return /* @__PURE__ */ createElement(
6420
+ TableRow,
6421
+ {
6422
+ "data-testid": `table-data-row-${row.id}`,
6423
+ "data-index": virtualIndex,
6424
+ ref: config.isVirtualize ? (node) => virtualizer.measureElement(node) : void 0,
6425
+ ...tableDataRowProps,
6426
+ key: row.id,
6427
+ className: cn("group", tableDataRowProps?.className),
6428
+ "data-state": row.getIsSelected() ? "selected" : "non-selected",
6429
+ ...getRowClickHandlers(onRowClick ?? (() => {
6430
+ }), {
6431
+ rowData: row.original,
6432
+ row,
6433
+ table
6434
+ })
6435
+ },
6436
+ row.getVisibleCells().map((cell) => {
6437
+ const { classes, style } = getColumnPinningStyles(cell.column);
6438
+ const useColumnSizing = cell.column.columnDef.meta?.useColumnSizing ?? columnResizing?.enabled ?? virtual?.enabled ?? false;
6439
+ const tableDataCellProps = typeof components?.tableDataCellProps === "function" ? components?.tableDataCellProps({ row, cell, table }) : components?.tableDataCellProps;
6440
+ return /* @__PURE__ */ jsx(
6441
+ TableCell,
6442
+ {
6443
+ "data-testid": `table-data-cell-${cell.id}`,
6444
+ "data-row-id": row.id,
6445
+ "data-column-id": cell.column.id,
6446
+ ...tableDataCellProps,
6447
+ ...cell.column.columnDef?.meta?.cellProps,
6448
+ className: cn(
6449
+ {
6450
+ "bg-[#dfeae3]": row.getIsSelected(),
6451
+ "bg-white group-hover:bg-sus-primary-3-hover": !row.getIsSelected()
6452
+ },
6453
+ classes,
6454
+ tableDataCellProps?.className,
6455
+ cell.column.columnDef?.meta?.cellProps?.className
6456
+ ),
6457
+ style: {
6458
+ ...style,
6459
+ width: useColumnSizing ? cell.column.getSize() : void 0,
6460
+ minWidth: useColumnSizing ? cell.column.columnDef.minSize : void 0,
6461
+ maxWidth: useColumnSizing ? cell.column.columnDef.maxSize : void 0,
6462
+ ...tableDataCellProps?.style,
6463
+ ...cell.column.columnDef?.meta?.cellProps?.style
6464
+ },
6465
+ children: flexRender(cell.column.columnDef.cell, cell.getContext())
6466
+ },
6467
+ cell.id
6468
+ );
6469
+ })
6470
+ );
6471
+ }),
6472
+ virtualEnabled && paddingBottom > 0 && /* @__PURE__ */ jsx(TableRow, { "aria-hidden": "true", "data-testid": "table-virtual-padding-bottom", children: /* @__PURE__ */ jsx(
6473
+ TableCell,
6474
+ {
6475
+ className: "border-b-0 p-0 h-auto",
6476
+ colSpan: visibleColumnCount,
6477
+ style: { height: `${paddingBottom}px` }
6235
6478
  }
6236
- },
6237
- // eslint-disable-next-line react-hooks/exhaustive-deps
6238
- [scrollFetch?.enabled, scrollFetch?.isFetchingMore, scrollFetch?.hasMore, scrollFetch?.fetchMore]
6239
- );
6240
- useEffect(() => {
6241
- if (!tableRef) return;
6242
- tableRef.current = table;
6243
- return () => {
6244
- tableRef.current = null;
6245
- };
6246
- }, [tableRef, table]);
6247
- useEffect(() => {
6248
- fetchMoreOnScrollReached(tableContainerRef.current);
6249
- }, [fetchMoreOnScrollReached]);
6479
+ ) })
6480
+ ] });
6481
+ };
6482
+ var DataTable = ({
6483
+ tableRef,
6484
+ virtualizerRef,
6485
+ isInitialLoading,
6486
+ columns,
6487
+ data,
6488
+ filters,
6489
+ sorting,
6490
+ columnOrder,
6491
+ columnVisibility,
6492
+ columnPinning,
6493
+ columnGrouping,
6494
+ columnResizing,
6495
+ rowSelection,
6496
+ rowExpansion,
6497
+ virtual,
6498
+ scrollFetch,
6499
+ activeStatusContent,
6500
+ statusContent,
6501
+ rowIdKey,
6502
+ childrenKey,
6503
+ onRowClick,
6504
+ debug,
6505
+ components
6506
+ }) => {
6507
+ const virtualEnabled = virtual?.enabled ?? false;
6508
+ const tableContainerRef = useRef(null);
6509
+ const table = useTableController({
6510
+ columns,
6511
+ data,
6512
+ filters,
6513
+ sorting,
6514
+ columnOrder,
6515
+ columnVisibility,
6516
+ columnPinning,
6517
+ columnGrouping,
6518
+ columnResizing,
6519
+ rowSelection,
6520
+ rowExpansion,
6521
+ rowIdKey,
6522
+ childrenKey
6523
+ });
6524
+ const { virtualizer, virtualItems, paddingTop, paddingBottom, rowModel } = useTableVirtualizer({
6525
+ enabled: virtualEnabled,
6526
+ table,
6527
+ containerRef: tableContainerRef,
6528
+ virtual
6529
+ });
6530
+ const { visibleColumnCount, isSomeColumnsFilterable, filterableColumns, activeStatusContentComputed } = useComputedTableState({
6531
+ table,
6532
+ rowModel,
6533
+ isInitialLoading,
6534
+ scrollFetch,
6535
+ activeStatusContent
6536
+ });
6537
+ const fetchMoreOnScrollReached = useScrollFetch({ scrollFetch, containerRef: tableContainerRef });
6538
+ useBindRef_default({ ref: tableRef, value: table });
6539
+ useBindRef_default({ ref: virtualizerRef, value: virtualizer });
6250
6540
  return /* @__PURE__ */ jsxs(
6251
6541
  TableContainer,
6252
6542
  {
@@ -6283,149 +6573,61 @@ var DataTable = ({
6283
6573
  defaultIcon: /* @__PURE__ */ jsx(empty_data_default, { size: 128 })
6284
6574
  }
6285
6575
  ) : /* @__PURE__ */ jsxs(Fragment, { children: [
6286
- /* @__PURE__ */ jsxs(Table, { ...components?.tableProps, children: [
6287
- /* @__PURE__ */ jsxs(
6288
- TableHeader,
6289
- {
6290
- className: cn("sticky top-0 z-10", components?.tableHeaderProps?.className),
6291
- ...components?.tableHeaderProps,
6292
- children: [
6293
- table.getHeaderGroups().map((headerGroup) => {
6294
- return /* @__PURE__ */ jsx(TableRow, { children: headerGroup.headers.map((header) => {
6295
- const { classes, style } = getColumnPinningStyles(header.column);
6296
- const useColumnSizing = header.column.columnDef?.meta?.useColumnSizing ?? columnResizing?.enabled ?? false;
6297
- const tableHeadCellProps = typeof components?.tableHeadCellProps === "function" ? components?.tableHeadCellProps({ header, table }) : components?.tableHeadCellProps;
6298
- const nextHeader = headerGroup.headers?.[header.index + 1] || header;
6299
- const { isLastLeftPinnedColumn } = getColumnPinningInfo(header.column);
6300
- const { isFirstRightPinnedColumn } = getColumnPinningInfo(nextHeader.column);
6301
- const headerGroupLength = header.headerGroup.headers.length;
6302
- const showSeparator = header.index !== headerGroupLength - 1 && !isLastLeftPinnedColumn && !isFirstRightPinnedColumn;
6303
- return /* @__PURE__ */ jsxs(
6304
- TableHead,
6305
- {
6306
- "data-testid": `table-head-${header.id}`,
6307
- colSpan: header.colSpan,
6308
- ...tableHeadCellProps,
6309
- ...header.column.columnDef?.meta?.headerProps,
6310
- className: cn(
6311
- classes,
6312
- tableHeadCellProps?.className,
6313
- header.column.columnDef?.meta?.headerProps?.className
6314
- ),
6315
- style: {
6316
- ...style,
6317
- width: useColumnSizing ? header.column.getSize() : void 0,
6318
- minWidth: useColumnSizing ? header.column.columnDef.minSize : void 0,
6319
- maxWidth: useColumnSizing ? header.column.columnDef.maxSize : void 0,
6320
- ...tableHeadCellProps?.style,
6321
- ...header.column.columnDef?.meta?.headerProps?.style
6322
- },
6323
- children: [
6324
- header.isPlaceholder ? null : flexRender(header.column.columnDef.header, header.getContext()),
6325
- /* @__PURE__ */ jsx(
6326
- ColumnSeparator_default,
6327
- {
6328
- ...components?.columnSeparatorProps?.headerCell,
6329
- ...header.column.columnDef?.meta?.columnSeparatorProps,
6330
- show: header.column.columnDef?.meta?.columnSeparatorProps?.show ?? components?.columnSeparatorProps?.headerCell?.show ?? showSeparator
6331
- }
6332
- ),
6333
- /* @__PURE__ */ jsx(ColumnResizer_default, { header, ...components?.columnResizerProps })
6334
- ]
6335
- },
6336
- header.id
6337
- );
6338
- }) }, headerGroup.id);
6339
- }),
6340
- isSomeColumnsFilterable && /* @__PURE__ */ jsx(TableRow, { "data-testid": "table-filter-row", children: filterableColumns.map((column) => {
6341
- const { classes, style } = getColumnPinningStyles(column);
6342
- const useColumnSizing = column.columnDef.meta?.useColumnSizing ?? columnResizing?.enabled ?? false;
6343
- const tableFilterCellProps = typeof components?.tableFilterCellProps === "function" ? components?.tableFilterCellProps({ column, table }) : components?.tableFilterCellProps;
6344
- return /* @__PURE__ */ jsx(
6345
- TableCell,
6346
- {
6347
- "data-testid": `table-filter-cell-${column.id}`,
6348
- ...tableFilterCellProps,
6349
- ...column.columnDef?.meta?.filterCellProps,
6350
- className: cn(
6351
- "bg-white border-b",
6352
- classes,
6353
- tableFilterCellProps?.className,
6354
- column.columnDef?.meta?.filterCellProps?.className
6355
- ),
6356
- style: {
6357
- ...style,
6358
- width: useColumnSizing ? column.getSize() : void 0,
6359
- minWidth: useColumnSizing ? column.columnDef.minSize : void 0,
6360
- maxWidth: useColumnSizing ? column.columnDef.maxSize : void 0,
6361
- ...tableFilterCellProps?.style,
6362
- ...column.columnDef?.meta?.filterCellProps?.style
6363
- },
6364
- children: column.getCanFilter() && column.columnDef.meta?.renderColumnFilter?.({
6365
- column,
6366
- table
6367
- })
6368
- },
6369
- column.id
6370
- );
6371
- }) })
6372
- ]
6373
- }
6374
- ),
6375
- /* @__PURE__ */ jsx(TableBody, { ...components?.tableBodyProps, children: table.getRowModel().rows.map((row) => {
6376
- const tableDataRowProps = typeof components?.tableDataRowProps === "function" ? components.tableDataRowProps({ row, table }) || {} : components?.tableDataRowProps || {};
6377
- return /* @__PURE__ */ createElement(
6378
- TableRow,
6379
- {
6380
- "data-testid": `table-data-row-${row.id}`,
6381
- ...tableDataRowProps,
6382
- key: row.id,
6383
- className: cn("group", tableDataRowProps?.className),
6384
- "data-state": row.getIsSelected() ? "selected" : "non-selected",
6385
- ...getRowClickHandlers(onRowClick ?? (() => {
6386
- }), {
6387
- rowData: row.original,
6388
- row,
6389
- table
6390
- })
6391
- },
6392
- row.getVisibleCells().map((cell) => {
6393
- const { classes, style } = getColumnPinningStyles(cell.column);
6394
- const useColumnSizing = cell.column.columnDef.meta?.useColumnSizing ?? columnResizing?.enabled ?? false;
6395
- const tableDataCellProps = typeof components?.tableDataCellProps === "function" ? components?.tableDataCellProps({ row, cell, table }) : components?.tableDataCellProps;
6396
- return /* @__PURE__ */ jsx(
6397
- TableCell,
6398
- {
6399
- "data-testid": `table-data-cell-${cell.id}`,
6400
- "data-row-id": row.id,
6401
- "data-column-id": cell.column.id,
6402
- ...tableDataCellProps,
6403
- ...cell.column.columnDef?.meta?.cellProps,
6404
- className: cn(
6576
+ /* @__PURE__ */ jsxs(
6577
+ Table,
6578
+ {
6579
+ ...components?.tableProps,
6580
+ style: { tableLayout: virtualEnabled ? "fixed" : "auto", ...components?.tableProps?.style },
6581
+ children: [
6582
+ /* @__PURE__ */ jsxs(
6583
+ TableHeader,
6584
+ {
6585
+ className: cn("sticky top-0 z-10 bg-white", components?.tableHeaderProps?.className),
6586
+ ...components?.tableHeaderProps,
6587
+ children: [
6588
+ /* @__PURE__ */ jsx(
6589
+ TableHeaderRows,
6405
6590
  {
6406
- "bg-[#dfeae3]": row.getIsSelected(),
6407
- "bg-white group-hover:bg-[#eff5f1]": !row.getIsSelected()
6408
- },
6409
- classes,
6410
- tableDataCellProps?.className,
6411
- cell.column.columnDef?.meta?.cellProps?.className
6591
+ table,
6592
+ columnResizing,
6593
+ virtual,
6594
+ components
6595
+ }
6412
6596
  ),
6413
- style: {
6414
- ...style,
6415
- width: useColumnSizing ? cell.column.getSize() : void 0,
6416
- minWidth: useColumnSizing ? cell.column.columnDef.minSize : void 0,
6417
- maxWidth: useColumnSizing ? cell.column.columnDef.maxSize : void 0,
6418
- ...tableDataCellProps?.style,
6419
- ...cell.column.columnDef?.meta?.cellProps?.style
6420
- },
6421
- children: flexRender(cell.column.columnDef.cell, cell.getContext())
6422
- },
6423
- cell.id
6424
- );
6425
- })
6426
- );
6427
- }) })
6428
- ] }),
6597
+ /* @__PURE__ */ jsx(
6598
+ TableFilterRow,
6599
+ {
6600
+ table,
6601
+ filterableColumns,
6602
+ isSomeColumnsFilterable,
6603
+ columnResizing,
6604
+ virtual,
6605
+ components
6606
+ }
6607
+ )
6608
+ ]
6609
+ }
6610
+ ),
6611
+ /* @__PURE__ */ jsx(TableBody, { ...components?.tableBodyProps, children: /* @__PURE__ */ jsx(
6612
+ TableDataRows,
6613
+ {
6614
+ table,
6615
+ rowModel,
6616
+ virtualEnabled,
6617
+ virtualItems,
6618
+ virtualizer,
6619
+ paddingTop,
6620
+ paddingBottom,
6621
+ visibleColumnCount,
6622
+ columnResizing,
6623
+ virtual,
6624
+ onRowClick,
6625
+ components
6626
+ }
6627
+ ) })
6628
+ ]
6629
+ }
6630
+ ),
6429
6631
  activeStatusContentComputed === "emptyFilteredData" && /* @__PURE__ */ jsx(
6430
6632
  StatusContentSlot_default,
6431
6633
  {
@@ -7372,8 +7574,8 @@ var DISALLOWED_MARKS = ["bold", "italic", "link"];
7372
7574
  var SUGGESTION_DEBOUNCE = 200;
7373
7575
  var DEFAULT_CHIP_CLASS = "outline-1 outline-muted bg-muted/40 text-foreground";
7374
7576
  var TokenView = ({ node, editor, getPos }) => {
7375
- const [isFocused, setIsFocused] = React26__default.useState(false);
7376
- React26__default.useEffect(() => {
7577
+ const [isFocused, setIsFocused] = React27__default.useState(false);
7578
+ React27__default.useEffect(() => {
7377
7579
  const handler = () => {
7378
7580
  const { from, to } = editor.state.selection;
7379
7581
  const position = getPos();
@@ -8565,7 +8767,7 @@ function ToolbarPlugin({
8565
8767
  isLink: hasLink
8566
8768
  }));
8567
8769
  }, []);
8568
- React26.useEffect(() => {
8770
+ React27.useEffect(() => {
8569
8771
  return mergeRegister(
8570
8772
  editor.registerCommand(
8571
8773
  CAN_UNDO_COMMAND,
@@ -9151,7 +9353,7 @@ function ControlledValuePlugin({
9151
9353
  trackAppliedValue
9152
9354
  }) {
9153
9355
  const [editor] = useLexicalComposerContext();
9154
- React26.useEffect(() => {
9356
+ React27.useEffect(() => {
9155
9357
  if (value == null || trackAppliedValue.current === value) {
9156
9358
  return;
9157
9359
  }
@@ -9175,14 +9377,14 @@ function ControlledValuePlugin({
9175
9377
  }
9176
9378
  function EditableStatePlugin({ editable }) {
9177
9379
  const [editor] = useLexicalComposerContext();
9178
- React26.useEffect(() => {
9380
+ React27.useEffect(() => {
9179
9381
  editor.setEditable(editable);
9180
9382
  }, [editor, editable]);
9181
9383
  return null;
9182
9384
  }
9183
9385
  function ImagesPlugin() {
9184
9386
  const [editor] = useLexicalComposerContext();
9185
- React26.useEffect(() => {
9387
+ React27.useEffect(() => {
9186
9388
  return editor.registerCommand(
9187
9389
  INSERT_IMAGE_COMMAND,
9188
9390
  (payload) => {
@@ -9463,9 +9665,9 @@ var SIDEBAR_WIDTH = "16rem";
9463
9665
  var SIDEBAR_WIDTH_MOBILE = "18rem";
9464
9666
  var SIDEBAR_WIDTH_ICON = "3rem";
9465
9667
  var SIDEBAR_KEYBOARD_SHORTCUT = "b";
9466
- var SidebarContext = React26.createContext(null);
9668
+ var SidebarContext = React27.createContext(null);
9467
9669
  function useSidebar() {
9468
- const context = React26.useContext(SidebarContext);
9670
+ const context = React27.useContext(SidebarContext);
9469
9671
  if (!context) {
9470
9672
  throw new Error("useSidebar must be used within a SidebarProvider.");
9471
9673
  }
@@ -9481,10 +9683,10 @@ function SidebarProvider({
9481
9683
  ...props
9482
9684
  }) {
9483
9685
  const isMobile = useIsMobile();
9484
- const [openMobile, setOpenMobile] = React26.useState(false);
9485
- const [_open, _setOpen] = React26.useState(defaultOpen);
9686
+ const [openMobile, setOpenMobile] = React27.useState(false);
9687
+ const [_open, _setOpen] = React27.useState(defaultOpen);
9486
9688
  const open = openProp ?? _open;
9487
- const setOpen = React26.useCallback(
9689
+ const setOpen = React27.useCallback(
9488
9690
  (value) => {
9489
9691
  const openState = typeof value === "function" ? value(open) : value;
9490
9692
  if (setOpenProp) {
@@ -9496,10 +9698,10 @@ function SidebarProvider({
9496
9698
  },
9497
9699
  [setOpenProp, open]
9498
9700
  );
9499
- const toggleSidebar = React26.useCallback(() => {
9701
+ const toggleSidebar = React27.useCallback(() => {
9500
9702
  return isMobile ? setOpenMobile((open2) => !open2) : setOpen((open2) => !open2);
9501
9703
  }, [isMobile, setOpen, setOpenMobile]);
9502
- React26.useEffect(() => {
9704
+ React27.useEffect(() => {
9503
9705
  const handleKeyDown = (event) => {
9504
9706
  if (event.key === SIDEBAR_KEYBOARD_SHORTCUT && (event.metaKey || event.ctrlKey)) {
9505
9707
  event.preventDefault();
@@ -9510,7 +9712,7 @@ function SidebarProvider({
9510
9712
  return () => window.removeEventListener("keydown", handleKeyDown);
9511
9713
  }, [toggleSidebar]);
9512
9714
  const state = open ? "expanded" : "collapsed";
9513
- const contextValue = React26.useMemo(
9715
+ const contextValue = React27.useMemo(
9514
9716
  () => ({
9515
9717
  state,
9516
9718
  open,
@@ -9952,7 +10154,7 @@ function SidebarMenuSkeleton({
9952
10154
  showIcon = false,
9953
10155
  ...props
9954
10156
  }) {
9955
- const width = React26.useMemo(() => {
10157
+ const width = React27.useMemo(() => {
9956
10158
  return `${Math.floor(Math.random() * 40) + 50}%`;
9957
10159
  }, []);
9958
10160
  return /* @__PURE__ */ jsxs(
@@ -10422,7 +10624,7 @@ function SortableRow({
10422
10624
  id: value,
10423
10625
  disabled: name === "columns.0.id"
10424
10626
  });
10425
- const style = React26.useMemo(
10627
+ const style = React27.useMemo(
10426
10628
  () => ({
10427
10629
  transform: CSS.Transform.toString(transform),
10428
10630
  transition
@@ -10824,7 +11026,7 @@ function getCandidateWidths({
10824
11026
  }
10825
11027
  return DEVICE_SIZES;
10826
11028
  }
10827
- var Image2 = React26.forwardRef(function Image3({
11029
+ var Image2 = React27.forwardRef(function Image3({
10828
11030
  src,
10829
11031
  alt,
10830
11032
  width,
@@ -10854,34 +11056,34 @@ var Image2 = React26.forwardRef(function Image3({
10854
11056
  } = imgProps;
10855
11057
  const widthNumber = toNumber(width);
10856
11058
  const heightNumber = toNumber(height);
10857
- React26.useEffect(() => {
11059
+ React27.useEffect(() => {
10858
11060
  if (!fill && (!widthNumber || !heightNumber)) {
10859
11061
  console.warn(
10860
11062
  "[Image] When `fill` is false you should provide both `width` and `height` to prevent layout shifts."
10861
11063
  );
10862
11064
  }
10863
11065
  }, [fill, heightNumber, widthNumber]);
10864
- const candidateWidths = React26.useMemo(
11066
+ const candidateWidths = React27.useMemo(
10865
11067
  () => getCandidateWidths({ width: widthNumber, sizes, fill }),
10866
11068
  [fill, sizes, widthNumber]
10867
11069
  );
10868
11070
  const largestWidth = candidateWidths[candidateWidths.length - 1] ?? widthNumber ?? DEVICE_SIZES[DEVICE_SIZES.length - 1];
10869
- const computedSrc = React26.useMemo(() => {
11071
+ const computedSrc = React27.useMemo(() => {
10870
11072
  if (unoptimized) {
10871
11073
  return src;
10872
11074
  }
10873
11075
  return loader({ src, width: largestWidth, quality });
10874
11076
  }, [largestWidth, loader, quality, src, unoptimized]);
10875
- const computedSrcSet = React26.useMemo(() => {
11077
+ const computedSrcSet = React27.useMemo(() => {
10876
11078
  if (unoptimized) {
10877
11079
  return void 0;
10878
11080
  }
10879
11081
  return candidateWidths.map((currentWidth) => `${loader({ src, width: currentWidth, quality })} ${currentWidth}w`).join(", ");
10880
11082
  }, [candidateWidths, loader, quality, src, unoptimized]);
10881
11083
  const sizesValue = sizes ?? (fill ? "100vw" : widthNumber ? `${widthNumber}px` : void 0);
10882
- const [isLoaded, setIsLoaded] = React26.useState(false);
10883
- const internalRef = React26.useRef(null);
10884
- const setRefs = React26.useCallback(
11084
+ const [isLoaded, setIsLoaded] = React27.useState(false);
11085
+ const internalRef = React27.useRef(null);
11086
+ const setRefs = React27.useCallback(
10885
11087
  (node) => {
10886
11088
  internalRef.current = node;
10887
11089
  if (!ref) {
@@ -10895,7 +11097,7 @@ var Image2 = React26.forwardRef(function Image3({
10895
11097
  },
10896
11098
  [ref]
10897
11099
  );
10898
- React26.useEffect(() => {
11100
+ React27.useEffect(() => {
10899
11101
  const image = internalRef.current;
10900
11102
  if (!image) {
10901
11103
  return;
@@ -10907,7 +11109,7 @@ var Image2 = React26.forwardRef(function Image3({
10907
11109
  setIsLoaded(false);
10908
11110
  }
10909
11111
  }, [onLoadingComplete, src]);
10910
- const handleLoad = React26.useCallback(
11112
+ const handleLoad = React27.useCallback(
10911
11113
  (event) => {
10912
11114
  setIsLoaded(true);
10913
11115
  onLoadProp?.(event);
@@ -10919,7 +11121,7 @@ var Image2 = React26.forwardRef(function Image3({
10919
11121
  const fetchPriority = priority ? "high" : fetchPriorityProp;
10920
11122
  const decoding = decodingProp ?? "async";
10921
11123
  const resolvedObjectFit = objectFit ?? (fill ? "cover" : void 0);
10922
- const wrapperStyle = React26.useMemo(
11124
+ const wrapperStyle = React27.useMemo(
10923
11125
  () => ({
10924
11126
  position: "relative",
10925
11127
  display: fill ? "block" : "inline-block",
@@ -10929,7 +11131,7 @@ var Image2 = React26.forwardRef(function Image3({
10929
11131
  }),
10930
11132
  [fill, height, width]
10931
11133
  );
10932
- const imageStyle = React26.useMemo(
11134
+ const imageStyle = React27.useMemo(
10933
11135
  () => ({
10934
11136
  width: fill ? "100%" : formatDimension(width) ?? void 0,
10935
11137
  height: fill ? "100%" : formatDimension(height) ?? void 0,
@@ -11078,7 +11280,7 @@ var InfoIcon = ({ size = "1em", className, ...props }) => {
11078
11280
  }
11079
11281
  );
11080
11282
  };
11081
- var InfoIcon_default = React26__default.memo(InfoIcon);
11283
+ var InfoIcon_default = React27__default.memo(InfoIcon);
11082
11284
  var Navbar = ({
11083
11285
  className,
11084
11286
  title,
@@ -11210,7 +11412,7 @@ var Navbar = ({
11210
11412
  }
11211
11413
  );
11212
11414
  };
11213
- var navbar_default = React26__default.memo(Navbar);
11415
+ var navbar_default = React27__default.memo(Navbar);
11214
11416
  var usePreventPageLeaveStore = create((set) => ({
11215
11417
  isPreventing: false,
11216
11418
  setPreventing: (value) => set({ isPreventing: value })
@@ -11250,7 +11452,7 @@ var DefaultHeader = ({
11250
11452
  classNames,
11251
11453
  rightActions
11252
11454
  }) => {
11253
- const titleRef = React26.useRef(null);
11455
+ const titleRef = React27.useRef(null);
11254
11456
  const isTruncated = useTruncated_default({ elementRef: titleRef });
11255
11457
  const textElement = title ? /* @__PURE__ */ jsx(
11256
11458
  "span",
@@ -11589,7 +11791,7 @@ function isFragment(object) {
11589
11791
  var isValidText = (val) => ["string", "number"].includes(typeof val);
11590
11792
  function toArray(children, option = {}) {
11591
11793
  let ret = [];
11592
- React26.Children.forEach(children, (child) => {
11794
+ React27.Children.forEach(children, (child) => {
11593
11795
  if ((child === void 0 || child === null) && !option.keepEmpty) {
11594
11796
  return;
11595
11797
  }
@@ -11603,9 +11805,9 @@ function toArray(children, option = {}) {
11603
11805
  });
11604
11806
  return ret;
11605
11807
  }
11606
- var MeasureText = React26.forwardRef(({ style, children }, ref) => {
11607
- const spanRef = React26.useRef(null);
11608
- React26.useImperativeHandle(ref, () => ({
11808
+ var MeasureText = React27.forwardRef(({ style, children }, ref) => {
11809
+ const spanRef = React27.useRef(null);
11810
+ React27.useImperativeHandle(ref, () => ({
11609
11811
  isExceed: () => {
11610
11812
  const span = spanRef.current;
11611
11813
  return span.scrollHeight > span.clientHeight;
@@ -11663,19 +11865,19 @@ var lineClipStyle = {
11663
11865
  };
11664
11866
  function EllipsisMeasure(props) {
11665
11867
  const { enableMeasure, width, text, children, rows, expanded, miscDeps, onEllipsis } = props;
11666
- const nodeList = React26.useMemo(() => toArray(text), [text]);
11667
- const nodeLen = React26.useMemo(() => getNodesLen(nodeList), [text]);
11668
- const fullContent = React26.useMemo(() => children(nodeList, false), [text]);
11669
- const [ellipsisCutIndex, setEllipsisCutIndex] = React26.useState(null);
11670
- const cutMidRef = React26.useRef(null);
11671
- const measureWhiteSpaceRef = React26.useRef(null);
11672
- const needEllipsisRef = React26.useRef(null);
11673
- const descRowsEllipsisRef = React26.useRef(null);
11674
- const symbolRowEllipsisRef = React26.useRef(null);
11675
- const [canEllipsis, setCanEllipsis] = React26.useState(false);
11676
- const [needEllipsis, setNeedEllipsis] = React26.useState(STATUS_MEASURE_NONE);
11677
- const [ellipsisHeight, setEllipsisHeight] = React26.useState(0);
11678
- const [parentWhiteSpace, setParentWhiteSpace] = React26.useState(null);
11868
+ const nodeList = React27.useMemo(() => toArray(text), [text]);
11869
+ const nodeLen = React27.useMemo(() => getNodesLen(nodeList), [text]);
11870
+ const fullContent = React27.useMemo(() => children(nodeList, false), [text]);
11871
+ const [ellipsisCutIndex, setEllipsisCutIndex] = React27.useState(null);
11872
+ const cutMidRef = React27.useRef(null);
11873
+ const measureWhiteSpaceRef = React27.useRef(null);
11874
+ const needEllipsisRef = React27.useRef(null);
11875
+ const descRowsEllipsisRef = React27.useRef(null);
11876
+ const symbolRowEllipsisRef = React27.useRef(null);
11877
+ const [canEllipsis, setCanEllipsis] = React27.useState(false);
11878
+ const [needEllipsis, setNeedEllipsis] = React27.useState(STATUS_MEASURE_NONE);
11879
+ const [ellipsisHeight, setEllipsisHeight] = React27.useState(0);
11880
+ const [parentWhiteSpace, setParentWhiteSpace] = React27.useState(null);
11679
11881
  useIsomorphicLayoutEffect(() => {
11680
11882
  if (enableMeasure && width && nodeLen) {
11681
11883
  setNeedEllipsis(STATUS_MEASURE_PREPARE);
@@ -11718,7 +11920,7 @@ function EllipsisMeasure(props) {
11718
11920
  setEllipsisCutIndex(isOverflow ? [minIndex, targetMidIndex] : [targetMidIndex, maxIndex]);
11719
11921
  }
11720
11922
  }, [ellipsisCutIndex, cutMidIndex]);
11721
- const finalContent = React26.useMemo(() => {
11923
+ const finalContent = React27.useMemo(() => {
11722
11924
  if (!enableMeasure) {
11723
11925
  return children(nodeList, false);
11724
11926
  }
@@ -11809,10 +12011,10 @@ var Truncated = ({
11809
12011
  tooltipProps,
11810
12012
  tooltipContentProps
11811
12013
  }) => {
11812
- const elementRef = React26.useRef(null);
11813
- const [open, setOpen] = React26.useState(false);
11814
- const [isTruncated, setIsTruncated] = React26.useState(false);
11815
- const [measureWidth, setMeasureWidth] = React26.useState(0);
12014
+ const elementRef = React27.useRef(null);
12015
+ const [open, setOpen] = React27.useState(false);
12016
+ const [isTruncated, setIsTruncated] = React27.useState(false);
12017
+ const [measureWidth, setMeasureWidth] = React27.useState(0);
11816
12018
  const Comp = as;
11817
12019
  const normalizedChildren = typeof children === "string" ? children.replace(/>/g, ">\u200B") : children;
11818
12020
  const lineClampLines = typeof ellipsis === "number" ? ellipsis : typeof ellipsis === "object" ? ellipsis?.lineClamp ?? 3 : null;
@@ -11837,13 +12039,13 @@ var Truncated = ({
11837
12039
  setIsTruncated(false);
11838
12040
  }
11839
12041
  }, [enableMeasure]);
11840
- const truncationClass = React26.useMemo(() => {
12042
+ const truncationClass = React27.useMemo(() => {
11841
12043
  if (!ellipsis) return "";
11842
12044
  if (typeof ellipsis === "number") return `line-clamp-${ellipsis}`;
11843
12045
  if (typeof ellipsis === "object") return `line-clamp-${lineClampLines ?? 3}`;
11844
12046
  return "truncate";
11845
12047
  }, [ellipsis, lineClampLines]);
11846
- const clampedStyle = React26.useMemo(() => {
12048
+ const clampedStyle = React27.useMemo(() => {
11847
12049
  if (!lineClampLines) return style;
11848
12050
  return {
11849
12051
  ...style,
@@ -11905,7 +12107,7 @@ var Truncated = ({
11905
12107
  );
11906
12108
  };
11907
12109
  var truncated_default = Truncated;
11908
- var InputPrimitive2 = React26.forwardRef(
12110
+ var InputPrimitive2 = React27.forwardRef(
11909
12111
  ({ className, type = "text", ...props }, ref) => {
11910
12112
  return /* @__PURE__ */ jsx(
11911
12113
  "input",
@@ -11944,7 +12146,7 @@ var inputVariants2 = cva("", {
11944
12146
  appearance: "filled"
11945
12147
  }
11946
12148
  });
11947
- var Input2 = React26.forwardRef(
12149
+ var Input2 = React27.forwardRef(
11948
12150
  ({
11949
12151
  className,
11950
12152
  wrapperClassName,
@@ -11977,8 +12179,8 @@ var Input2 = React26.forwardRef(
11977
12179
  onChange: onChangeProp
11978
12180
  } = rest;
11979
12181
  const ariaInvalid = invalid ?? ariaInvalidProp;
11980
- const messageId = React26.useId();
11981
- const handleChange = React26.useCallback(
12182
+ const messageId = React27.useId();
12183
+ const handleChange = React27.useCallback(
11982
12184
  (event) => {
11983
12185
  onChangeProp?.(event);
11984
12186
  onValueChange?.(event.target.value);
@@ -12372,13 +12574,13 @@ var useFieldNames = ({
12372
12574
  fieldNames
12373
12575
  }) => {
12374
12576
  const { label: labelFieldKey = "label", value: valueFieldKey = "value" } = fieldNames || {};
12375
- const getLabelField = React26__default.useCallback(
12577
+ const getLabelField = React27__default.useCallback(
12376
12578
  (option) => {
12377
12579
  return option?.[labelFieldKey];
12378
12580
  },
12379
12581
  [labelFieldKey]
12380
12582
  );
12381
- const getValueField = React26__default.useCallback(
12583
+ const getValueField = React27__default.useCallback(
12382
12584
  (option) => {
12383
12585
  return option?.[valueFieldKey];
12384
12586
  },
@@ -12410,11 +12612,11 @@ var VirtualizedCommand = ({
12410
12612
  onFocus
12411
12613
  }) => {
12412
12614
  const { getLabelField, getValueField } = useFieldNames_default({ fieldNames });
12413
- const internalOptions = React26.useMemo(() => options ?? [], [options]);
12414
- const [filteredOptions, setFilteredOptions] = React26.useState(internalOptions);
12415
- const [focusedIndex, setFocusedIndex] = React26.useState(0);
12416
- const [isKeyboardNavActive, setIsKeyboardNavActive] = React26.useState(false);
12417
- const parentRef = React26.useRef(null);
12615
+ const internalOptions = React27.useMemo(() => options ?? [], [options]);
12616
+ const [filteredOptions, setFilteredOptions] = React27.useState(internalOptions);
12617
+ const [focusedIndex, setFocusedIndex] = React27.useState(0);
12618
+ const [isKeyboardNavActive, setIsKeyboardNavActive] = React27.useState(false);
12619
+ const parentRef = React27.useRef(null);
12418
12620
  const virtualizer = useVirtualizer({
12419
12621
  count: filteredOptions.length,
12420
12622
  getScrollElement: () => parentRef.current,
@@ -12422,14 +12624,14 @@ var VirtualizedCommand = ({
12422
12624
  overscan: 2
12423
12625
  });
12424
12626
  const virtualOptions = virtualizer.getVirtualItems();
12425
- const dynamicHeight = React26.useMemo(() => {
12627
+ const dynamicHeight = React27.useMemo(() => {
12426
12628
  const contentHeight = filteredOptions.length * ROW_HEIGHT;
12427
12629
  if (contentHeight <= 0) {
12428
12630
  return MIN_HEIGHT_EMPTY;
12429
12631
  }
12430
12632
  return Math.max(ROW_HEIGHT, Math.min(height, contentHeight));
12431
12633
  }, [filteredOptions.length, height]);
12432
- const scrollToIndex = React26.useCallback(
12634
+ const scrollToIndex = React27.useCallback(
12433
12635
  (index) => {
12434
12636
  virtualizer.scrollToIndex(index, {
12435
12637
  align: "center"
@@ -12437,7 +12639,7 @@ var VirtualizedCommand = ({
12437
12639
  },
12438
12640
  [virtualizer]
12439
12641
  );
12440
- const handleSearch = React26.useCallback(
12642
+ const handleSearch = React27.useCallback(
12441
12643
  (search) => {
12442
12644
  setIsKeyboardNavActive(false);
12443
12645
  setFilteredOptions(
@@ -12452,7 +12654,7 @@ var VirtualizedCommand = ({
12452
12654
  },
12453
12655
  [filterOption, getLabelField, internalOptions]
12454
12656
  );
12455
- const handleKeyDown = React26.useCallback(
12657
+ const handleKeyDown = React27.useCallback(
12456
12658
  (event) => {
12457
12659
  switch (event.key) {
12458
12660
  case "ArrowDown": {
@@ -12487,7 +12689,7 @@ var VirtualizedCommand = ({
12487
12689
  },
12488
12690
  [filteredOptions, focusedIndex, getValueField, onSelect, scrollToIndex]
12489
12691
  );
12490
- React26.useEffect(() => {
12692
+ React27.useEffect(() => {
12491
12693
  if (value) {
12492
12694
  const option = filteredOptions.find((option2) => {
12493
12695
  const optionValue = getValueField(option2);
@@ -12614,13 +12816,13 @@ var ComboboxInner = ({
12614
12816
  defaultValue,
12615
12817
  value
12616
12818
  });
12617
- const currentSelectedOption = React26.useMemo(() => {
12819
+ const currentSelectedOption = React27.useMemo(() => {
12618
12820
  return options?.find((option) => {
12619
12821
  const optionValue = getValueField(option);
12620
12822
  return optionValue === selectedValue;
12621
12823
  });
12622
12824
  }, [getValueField, options, selectedValue]);
12623
- const renderValue = React26.useMemo(() => {
12825
+ const renderValue = React27.useMemo(() => {
12624
12826
  if (!selectedValue) return placeholder2;
12625
12827
  if (currentSelectedOption) {
12626
12828
  return getLabelField(currentSelectedOption);
@@ -12630,7 +12832,7 @@ var ComboboxInner = ({
12630
12832
  }
12631
12833
  return null;
12632
12834
  }, [currentSelectedOption, getLabelField, placeholder2, selectedValue, showValueWhenNoMatch]);
12633
- const handleSelect = React26.useCallback(
12835
+ const handleSelect = React27.useCallback(
12634
12836
  (selected, option) => {
12635
12837
  setSelectedValue(selected);
12636
12838
  setOpenPopover(false);
@@ -12643,7 +12845,7 @@ var ComboboxInner = ({
12643
12845
  },
12644
12846
  [onOpenChange, onSelect, setOpenPopover, setSelectedValue]
12645
12847
  );
12646
- const handleOpenPopover = React26.useCallback(
12848
+ const handleOpenPopover = React27.useCallback(
12647
12849
  (isOpen) => {
12648
12850
  if (disabled) return;
12649
12851
  setOpenPopover(isOpen);
@@ -12653,7 +12855,7 @@ var ComboboxInner = ({
12653
12855
  },
12654
12856
  [disabled, onOpenChange, setOpenPopover]
12655
12857
  );
12656
- const handleClear = React26.useCallback(
12858
+ const handleClear = React27.useCallback(
12657
12859
  (event) => {
12658
12860
  event.stopPropagation();
12659
12861
  setSelectedValue(void 0);
@@ -12742,7 +12944,7 @@ var ComboboxInner = ({
12742
12944
  )
12743
12945
  ] });
12744
12946
  };
12745
- var Combobox = React26.forwardRef(ComboboxInner);
12947
+ var Combobox = React27.forwardRef(ComboboxInner);
12746
12948
  var Combobox_default = Combobox;
12747
12949
  var TruncatedMouseEnterDiv = ({
12748
12950
  value,
@@ -12867,6 +13069,6 @@ var TabSelect = ({
12867
13069
  );
12868
13070
  };
12869
13071
 
12870
- export { Accordion, AccordionContent, AccordionItem, AccordionTrigger, ActionMenu, AdministrationIcon, AdvanceSearch_default as AdvanceSearch, AnalyticsIcon, application_log_default as ApplicationLogIcon, arrow_default as ArrowIcon, AuditFooter, Button, Checkbox, Collapsible, CollapsibleContent2 as CollapsibleContent, CollapsibleTrigger2 as CollapsibleTrigger, Combobox_default as Combobox, Command, CommandDialog, CommandEmpty, CommandGroup, CommandInput, CommandItem, CommandList, CommandSeparator, CommandShortcut, CropperModal, CropperModalError, custom_action_status_default as CustomActionStatusIcon, custom_field_default as CustomFieldIcon, DIALOG_ALERT_I18N_SUBNAMESPACE, DIALOG_ALERT_TEMPLATES, DashboardIcon, DataEntryIcon, DataTable_default as DataTable, DatePicker2 as DatePicker, decrease_default as DecreaseIcon, Dialog, DialogAlert, DialogAlertProvider, DialogContent, DialogDescription, DialogFooter, DialogTitle, DialogTrigger, ErrorCompression, ErrorCreateCanvas, ErrorGeneratingBlob, ErrorInvalidSVG, ErrorSVGExceedSize, filters_default as FiltersIcon, Form, FormControl, FormDescription, FormField, FormItem, FormLabel, FormMessage, FormulaEditor, GridSettingsModal_default as GridSettingsModal, HamburgerMenuIcon, HandymanIcon, HeaderCell_default as HeaderCell, Image2 as Image, information_default as InformationIcon, Input, InputNumber_default as InputNumber, Label2 as Label, LookupSelect, MailIcon, MainListContainer_default as MainListContainer, ManIcon, ManagementIcon, MenuIcon, MonthPicker2 as MonthPicker, navbar_default as Navbar, not_found_default as NotFoundIcon, plus_default as PlusIcon, Popover, PopoverAnchor, PopoverArrow, PopoverContent, PopoverTrigger, PowerIcon, PreventPageLeave_default as PreventPageLeave, QuestionIcon, RadioGroupItem, RadioGroupRoot, RadioLabel, RichText, RightPanelContainer_default as RightPanelContainer, role_default as RoleIcon, Select, SelectContent, SelectGroup, SelectItem, SelectLabel, SelectScrollDownButton, SelectScrollUpButton, SelectSeparator, SelectTrigger, SelectValue, Separator2 as Separator, SetupIcon, Sheet, SheetClose, SheetContent, SheetDescription, SheetFooter, SheetHeader, SheetTitle, SheetTrigger, Sidebar, SidebarContent, SidebarFooter, SidebarGroup, SidebarGroupAction, SidebarGroupContent, SidebarGroupLabel, SidebarHeader, SidebarInput, SidebarInset, SidebarLayout, SidebarMenu, SidebarMenuAction, SidebarMenuBadge, SidebarMenuButton, SidebarMenuItem, SidebarMenuSkeleton, SidebarMenuSub, SidebarMenuSubButton, SidebarMenuSubItem, SidebarProvider, SidebarRail, SidebarSeparator, SidebarTrigger, Skeleton, Spinner, calendar_default as SuiCalendarIcon, calendar2_default as SuiCalendarIcon2, check_default as SuiCheckIcon, dots_vertical_default as SuiDotsVerticalIcon, empty_data_default as SuiEmptyDataIcon, expand_default as SuiExpandIcon, filter_default as SuiFilterIcon, setting_default as SuiSettingIcon, triangle_down_default as SuiTriangleDownIcon, warning_default as SuiWarningIcon, Switch, TabSelect, Textarea, ToolBoxIcon, Tooltip2 as Tooltip, TooltipArrow, TooltipContent2 as TooltipContent, TooltipProvider2 as TooltipProvider, TooltipTrigger2 as TooltipTrigger, trash_default as TrashIcon, truncated_default as Truncated, truncatedMouseEnterDiv_default as TruncatedMouseEnterDiv, ui_exports as UI, user_alone_default as UserAloneIcon, user_friend_default as UserFriendIcon, user_default as UserIcon, VirtualizedCommand_default as VirtualizedCommand, booleanToSelectValue, buildPrefixMap, buttonVariants, cn, compareAlphanumeric, debounce, defaultOperatorShortcuts, defaultOperators, formatISODate, getDialogAlertControls, inputVariants, isDefined, isEmptyObject, isValidParentheses, mapTokensToOutput, parseFormula, parseFormulaToToken, resetVisibleTableState, selectValueToBoolean, spinnerVariants, splitOperators, stripNullishObject, throttle, tokenizeFormulaString, useControllableState_default as useControllableState, useDraftGuardStore, useFormField, useGridSettingsStore_default as useGridSettingsStore, useHover_default as useHover, useIntersectionObserver_default as useIntersectionObserver, useIsomorphicLayoutEffect, useMediaQuery_default as useMediaQuery, usePreventPageLeave_default as usePreventPageLeave, usePreventPageLeaveStore_default as usePreventPageLeaveStore, useSafeBlocker, useScreenSize_default as useScreenSize, useSidebar, useTruncated_default as useTruncated, validateTokenPrefixes };
13072
+ export { Accordion, AccordionContent, AccordionItem, AccordionTrigger, ActionMenu, AdministrationIcon, AdvanceSearch_default as AdvanceSearch, AnalyticsIcon, application_log_default as ApplicationLogIcon, arrow_default as ArrowIcon, AuditFooter, Button, Checkbox, Collapsible, CollapsibleContent2 as CollapsibleContent, CollapsibleTrigger2 as CollapsibleTrigger, Combobox_default as Combobox, Command, CommandDialog, CommandEmpty, CommandGroup, CommandInput, CommandItem, CommandList, CommandSeparator, CommandShortcut, CropperModal, CropperModalError, custom_action_status_default as CustomActionStatusIcon, custom_field_default as CustomFieldIcon, DIALOG_ALERT_I18N_SUBNAMESPACE, DIALOG_ALERT_TEMPLATES, DashboardIcon, DataEntryIcon, DataTable_default as DataTable, DatePicker2 as DatePicker, decrease_default as DecreaseIcon, Dialog, DialogAlert, DialogAlertProvider, DialogContent, DialogDescription, DialogFooter, DialogTitle, DialogTrigger, ErrorCompression, ErrorCreateCanvas, ErrorGeneratingBlob, ErrorInvalidSVG, ErrorSVGExceedSize, filters_default as FiltersIcon, Form, FormControl, FormDescription, FormField, FormItem, FormLabel, FormMessage, FormulaEditor, GridSettingsModal_default as GridSettingsModal, HamburgerMenuIcon, HandymanIcon, HeaderCell_default as HeaderCell, Image2 as Image, information_default as InformationIcon, Input, InputNumber_default as InputNumber, Label2 as Label, LookupSelect, MailIcon, MainListContainer_default as MainListContainer, ManIcon, ManagementIcon, MenuIcon, MonthPicker2 as MonthPicker, navbar_default as Navbar, not_found_default as NotFoundIcon, plus_default as PlusIcon, Popover, PopoverAnchor, PopoverArrow, PopoverContent, PopoverTrigger, PowerIcon, PreventPageLeave_default as PreventPageLeave, QuestionIcon, RadioGroupItem, RadioGroupRoot, RadioLabel, RichText, RightPanelContainer_default as RightPanelContainer, role_default as RoleIcon, Select, SelectContent, SelectGroup, SelectItem, SelectLabel, SelectScrollDownButton, SelectScrollUpButton, SelectSeparator, SelectTrigger, SelectValue, Separator2 as Separator, SetupIcon, Sheet, SheetClose, SheetContent, SheetDescription, SheetFooter, SheetHeader, SheetTitle, SheetTrigger, Sidebar, SidebarContent, SidebarFooter, SidebarGroup, SidebarGroupAction, SidebarGroupContent, SidebarGroupLabel, SidebarHeader, SidebarInput, SidebarInset, SidebarLayout, SidebarMenu, SidebarMenuAction, SidebarMenuBadge, SidebarMenuButton, SidebarMenuItem, SidebarMenuSkeleton, SidebarMenuSub, SidebarMenuSubButton, SidebarMenuSubItem, SidebarProvider, SidebarRail, SidebarSeparator, SidebarTrigger, Skeleton, Spinner, calendar_default as SuiCalendarIcon, calendar2_default as SuiCalendarIcon2, check_default as SuiCheckIcon, dots_vertical_default as SuiDotsVerticalIcon, empty_data_default as SuiEmptyDataIcon, expand_default as SuiExpandIcon, filter_default as SuiFilterIcon, setting_default as SuiSettingIcon, triangle_down_default as SuiTriangleDownIcon, warning_default as SuiWarningIcon, Switch, TabSelect, Textarea, ToolBoxIcon, Tooltip2 as Tooltip, TooltipArrow, TooltipContent2 as TooltipContent, TooltipProvider2 as TooltipProvider, TooltipTrigger2 as TooltipTrigger, trash_default as TrashIcon, truncated_default as Truncated, truncatedMouseEnterDiv_default as TruncatedMouseEnterDiv, ui_exports as UI, user_alone_default as UserAloneIcon, user_friend_default as UserFriendIcon, user_default as UserIcon, VirtualizedCommand_default as VirtualizedCommand, booleanToSelectValue, buildPrefixMap, buttonVariants, cn, compareAlphanumeric, debounce, defaultOperatorShortcuts, defaultOperators, formatISODate, getDialogAlertControls, inputVariants, isDefined, isEmptyObject, isValidParentheses, mapTokensToOutput, parseFormula, parseFormulaToToken, resetVisibleTableState, selectValueToBoolean, spinnerVariants, splitOperators, stripNullishObject, throttle, tokenizeFormulaString, useBindRef_default as useBindRef, useControllableState_default as useControllableState, useDraftGuardStore, useFormField, useGridSettingsStore_default as useGridSettingsStore, useHover_default as useHover, useIntersectionObserver_default as useIntersectionObserver, useIsomorphicLayoutEffect, useMediaQuery_default as useMediaQuery, usePreventPageLeave_default as usePreventPageLeave, usePreventPageLeaveStore_default as usePreventPageLeaveStore, useSafeBlocker, useScreenSize_default as useScreenSize, useSidebar, useTruncated_default as useTruncated, validateTokenPrefixes };
12871
13073
  //# sourceMappingURL=index.mjs.map
12872
13074
  //# sourceMappingURL=index.mjs.map