@bsol-oss/react-datatable5 12.0.0-beta.87 → 12.0.0-beta.89

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
@@ -582,12 +582,104 @@ const Pagination = () => {
582
582
  }, children: jsxs(HStack, { children: [jsx(PaginationPrevTrigger, {}), jsx(PaginationItems, {}), jsx(PaginationNextTrigger, {})] }) }));
583
583
  };
584
584
 
585
+ /**
586
+ * Custom selector utilities to replace TanStack table selector primitives.
587
+ * These work directly with rowSelection state instead of using table's built-in selectors.
588
+ */
589
+ /**
590
+ * Get all selected rows from the table based on rowSelection state
591
+ */
592
+ function getSelectedRows(table, rowSelection) {
593
+ const selectedRowIds = Object.keys(rowSelection).filter((id) => rowSelection[id] === true);
594
+ return table
595
+ .getRowModel()
596
+ .rows.filter((row) => selectedRowIds.includes(row.id));
597
+ }
598
+ /**
599
+ * Get the count of selected rows
600
+ */
601
+ function getSelectedRowCount(table, rowSelection) {
602
+ return getSelectedRows(table, rowSelection).length;
603
+ }
604
+ /**
605
+ * Check if a specific row is selected
606
+ */
607
+ function isRowSelected(rowId, rowSelection) {
608
+ return rowSelection[rowId] === true;
609
+ }
610
+ /**
611
+ * Check if all rows in the table are selected
612
+ */
613
+ function areAllRowsSelected(table, rowSelection) {
614
+ const rows = table.getRowModel().rows;
615
+ if (rows.length === 0)
616
+ return false;
617
+ return rows.every((row) => isRowSelected(row.id, rowSelection));
618
+ }
619
+ /**
620
+ * Check if all rows on the current page are selected
621
+ */
622
+ function areAllPageRowsSelected(table, rowSelection) {
623
+ const pageRows = table.getRowModel().rows;
624
+ if (pageRows.length === 0)
625
+ return false;
626
+ return pageRows.every((row) => isRowSelected(row.id, rowSelection));
627
+ }
628
+ /**
629
+ * Create a toggle handler for a specific row
630
+ */
631
+ function createRowToggleHandler(row, rowSelection, setRowSelection) {
632
+ return () => {
633
+ setRowSelection((old) => {
634
+ const newSelection = { ...old };
635
+ if (newSelection[row.id]) {
636
+ delete newSelection[row.id];
637
+ }
638
+ else {
639
+ newSelection[row.id] = true;
640
+ }
641
+ return newSelection;
642
+ });
643
+ };
644
+ }
645
+ /**
646
+ * Create a toggle handler for all rows
647
+ */
648
+ function createToggleAllRowsHandler(table, rowSelection, setRowSelection) {
649
+ return () => {
650
+ const allSelected = areAllRowsSelected(table, rowSelection);
651
+ if (allSelected) {
652
+ // Deselect all
653
+ setRowSelection({});
654
+ }
655
+ else {
656
+ // Select all
657
+ const newSelection = {};
658
+ table.getRowModel().rows.forEach((row) => {
659
+ newSelection[row.id] = true;
660
+ });
661
+ setRowSelection(newSelection);
662
+ }
663
+ };
664
+ }
665
+ /**
666
+ * Reset row selection (clear all selections)
667
+ */
668
+ function resetRowSelection(setRowSelection) {
669
+ setRowSelection({});
670
+ }
671
+ /**
672
+ * Check if a row can be selected (always true for now, can be extended)
673
+ */
674
+ function canRowSelect(row) {
675
+ return row.getCanSelect?.() ?? true;
676
+ }
677
+
585
678
  const ResetSelectionButton = () => {
586
- const { table } = useDataTableContext();
587
- const { tableLabel } = useDataTableContext();
679
+ const { tableLabel, setRowSelection } = useDataTableContext();
588
680
  const { resetSelection } = tableLabel;
589
681
  return (jsx(Button$1, { onClick: () => {
590
- table.resetRowSelection();
682
+ resetRowSelection(setRowSelection);
591
683
  }, children: resetSelection }));
592
684
  };
593
685
 
@@ -2663,20 +2755,20 @@ const GlobalFilter = () => {
2663
2755
  } }) }) }));
2664
2756
  };
2665
2757
 
2666
- const SelectAllRowsToggle = ({ selectAllIcon = jsx(MdOutlineChecklist, {}), clearAllIcon = jsx(MdClear, {}), selectAllText = "", clearAllText = "", }) => {
2667
- const { table } = useDataTableContext();
2668
- return (jsxs(Fragment, { children: [!!selectAllText === false && (jsx(IconButton, { variant: "ghost", "aria-label": table.getIsAllRowsSelected() ? clearAllText : selectAllText, onClick: (event) => {
2669
- table.getToggleAllRowsSelectedHandler()(event);
2670
- }, children: table.getIsAllRowsSelected() ? clearAllIcon : selectAllIcon })), !!selectAllText !== false && (jsxs(Button$1, { variant: "ghost", onClick: (event) => {
2671
- table.getToggleAllRowsSelectedHandler()(event);
2672
- }, children: [table.getIsAllRowsSelected() ? clearAllIcon : selectAllIcon, table.getIsAllRowsSelected() ? clearAllText : selectAllText] }))] }));
2758
+ const SelectAllRowsToggle = ({ selectAllIcon = jsx(MdOutlineChecklist, {}), clearAllIcon = jsx(MdClear, {}), selectAllText = '', clearAllText = '', }) => {
2759
+ const { table, rowSelection, setRowSelection } = useDataTableContext();
2760
+ const allRowsSelected = areAllRowsSelected(table, rowSelection);
2761
+ const toggleHandler = createToggleAllRowsHandler(table, rowSelection, setRowSelection);
2762
+ return (jsxs(Fragment, { children: [!!selectAllText === false && (jsx(IconButton, { variant: 'ghost', "aria-label": allRowsSelected ? clearAllText : selectAllText, onClick: toggleHandler, children: allRowsSelected ? clearAllIcon : selectAllIcon })), !!selectAllText !== false && (jsxs(Button$1, { variant: 'ghost', onClick: toggleHandler, children: [allRowsSelected ? clearAllIcon : selectAllIcon, allRowsSelected ? clearAllText : selectAllText] }))] }));
2673
2763
  };
2674
2764
 
2675
2765
  const TableSelector = () => {
2676
- const { table } = useDataTableContext();
2677
- return (jsxs(Fragment, { children: [table.getSelectedRowModel().rows.length > 0 && (jsxs(Button$1, { onClick: () => { }, variant: "ghost", display: "flex", gap: "0.25rem", children: [jsx(Box, { fontSize: "sm", children: `${table.getSelectedRowModel().rows.length}` }), jsx(IoMdCheckbox, {})] })), !table.getIsAllPageRowsSelected() && jsx(SelectAllRowsToggle, {}), table.getSelectedRowModel().rows.length > 0 && (jsx(IconButton, { variant: "ghost", onClick: () => {
2678
- table.resetRowSelection();
2679
- }, "aria-label": "reset selection", children: jsx(MdClear, {}) }))] }));
2766
+ const { table, rowSelection, setRowSelection } = useDataTableContext();
2767
+ const selectedCount = getSelectedRowCount(table, rowSelection);
2768
+ const allPageRowsSelected = areAllPageRowsSelected(table, rowSelection);
2769
+ return (jsxs(Fragment, { children: [selectedCount > 0 && (jsxs(Button$1, { onClick: () => { }, variant: 'ghost', display: 'flex', gap: "0.25rem", children: [jsx(Box, { fontSize: 'sm', children: `${selectedCount}` }), jsx(IoMdCheckbox, {})] })), !allPageRowsSelected && jsx(SelectAllRowsToggle, {}), selectedCount > 0 && (jsx(IconButton, { variant: 'ghost', onClick: () => {
2770
+ resetRowSelection(setRowSelection);
2771
+ }, "aria-label": 'reset selection', children: jsx(MdClear, {}) }))] }));
2680
2772
  };
2681
2773
 
2682
2774
  const TableFilterTags = () => {
@@ -2873,7 +2965,7 @@ const Checkbox = React.forwardRef(function Checkbox(props, ref) {
2873
2965
  });
2874
2966
 
2875
2967
  const TableBody = ({ showSelector = false, canResize = true, }) => {
2876
- "use no memo";
2968
+ 'use no memo';
2877
2969
  const { table } = useDataTableContext();
2878
2970
  const SELECTION_BOX_WIDTH = 20;
2879
2971
  const [hoveredRow, setHoveredRow] = useState(-1);
@@ -2884,9 +2976,9 @@ const TableBody = ({ showSelector = false, canResize = true, }) => {
2884
2976
  const tdProps = cell.column.getIsPinned()
2885
2977
  ? {
2886
2978
  left: showSelector
2887
- ? `${cell.column.getStart("left") + SELECTION_BOX_WIDTH + table.getDensityValue() * 2}px`
2888
- : `${cell.column.getStart("left")}px`,
2889
- position: "relative",
2979
+ ? `${cell.column.getStart('left') + SELECTION_BOX_WIDTH + table.getDensityValue() * 2}px`
2980
+ : `${cell.column.getStart('left')}px`,
2981
+ position: 'relative',
2890
2982
  }
2891
2983
  : {};
2892
2984
  return tdProps;
@@ -2897,37 +2989,40 @@ const TableBody = ({ showSelector = false, canResize = true, }) => {
2897
2989
  }
2898
2990
  if (hoveredRow === index) {
2899
2991
  return {
2900
- opacity: "1",
2992
+ opacity: '1',
2901
2993
  };
2902
2994
  }
2903
2995
  return {
2904
- opacity: "0.8",
2996
+ opacity: '0.8',
2905
2997
  };
2906
2998
  };
2907
2999
  return (jsx(Table$1.Body, { children: table.getRowModel().rows.map((row, index) => {
2908
- return (jsxs(Table$1.Row, { display: "flex", zIndex: 1, onMouseEnter: () => handleRowHover(index), onMouseLeave: () => handleRowHover(-1), ...getTrProps({ hoveredRow, index }), children: [showSelector && (jsx(TableRowSelector, { index: index, row: row, hoveredRow: hoveredRow })), row.getVisibleCells().map((cell, index) => {
3000
+ return (jsxs(Table$1.Row, { display: 'flex', zIndex: 1, onMouseEnter: () => handleRowHover(index), onMouseLeave: () => handleRowHover(-1), ...getTrProps({ hoveredRow, index }), children: [showSelector && (jsx(TableRowSelector, { index: index, row: row, hoveredRow: hoveredRow })), row.getVisibleCells().map((cell, index) => {
2909
3001
  return (jsx(Table$1.Cell, { padding: `${table.getDensityValue()}px`,
2910
3002
  // styling resize and pinning start
2911
- flex: `${canResize ? "0" : "1"} 0 ${cell.column.getSize()}px`,
3003
+ flex: `${canResize ? '0' : '1'} 0 ${cell.column.getSize()}px`,
2912
3004
  // this is to avoid the cell from being too wide
2913
3005
  minWidth: `0`, color: {
2914
- base: "colorPalette.900",
2915
- _dark: "colorPalette.100",
3006
+ base: 'colorPalette.900',
3007
+ _dark: 'colorPalette.100',
2916
3008
  },
2917
- bg: { base: "colorPalette.50", _dark: "colorPalette.950" }, ...getTdProps(cell), children: flexRender(cell.column.columnDef.cell, cell.getContext()) }, `chakra-table-rowcell-${cell.id}-${index}`));
3009
+ bg: { base: 'colorPalette.50', _dark: 'colorPalette.950' }, ...getTdProps(cell), children: flexRender(cell.column.columnDef.cell, cell.getContext()) }, `chakra-table-rowcell-${cell.id}-${index}`));
2918
3010
  })] }, `chakra-table-row-${row.id}`));
2919
3011
  }) }));
2920
3012
  };
2921
- const TableRowSelector = ({ row, }) => {
2922
- const { table } = useDataTableContext();
3013
+ const TableRowSelector = ({ row }) => {
3014
+ const { table, rowSelection, setRowSelection } = useDataTableContext();
2923
3015
  const SELECTION_BOX_WIDTH = 20;
2924
- return (jsx(Table$1.Cell, { padding: `${table.getDensityValue()}px`, display: "grid", color: {
2925
- base: "colorPalette.900",
2926
- _dark: "colorPalette.100",
3016
+ const isSelected = isRowSelected(row.id, rowSelection);
3017
+ const canSelect = canRowSelect(row);
3018
+ const toggleHandler = createRowToggleHandler(row, rowSelection, setRowSelection);
3019
+ return (jsx(Table$1.Cell, { padding: `${table.getDensityValue()}px`, display: 'grid', color: {
3020
+ base: 'colorPalette.900',
3021
+ _dark: 'colorPalette.100',
2927
3022
  },
2928
- bg: { base: "colorPalette.50", _dark: "colorPalette.950" }, justifyItems: "center", alignItems: "center", children: jsx(Checkbox, { width: `${SELECTION_BOX_WIDTH}px`, height: `${SELECTION_BOX_WIDTH}px`, checked: row.getIsSelected(),
2929
- disabled: !row.getCanSelect(),
2930
- onCheckedChange: row.getToggleSelectedHandler() }) }));
3023
+ bg: { base: 'colorPalette.50', _dark: 'colorPalette.950' }, justifyItems: 'center', alignItems: 'center', children: jsx(Checkbox, { width: `${SELECTION_BOX_WIDTH}px`, height: `${SELECTION_BOX_WIDTH}px`, checked: isSelected,
3024
+ disabled: !canSelect,
3025
+ onCheckedChange: toggleHandler }) }));
2931
3026
  };
2932
3027
 
2933
3028
  const TableCardContainer = ({ children, variant = "", gap = "1rem", gridTemplateColumns = "repeat(auto-fit, minmax(20rem, 1fr))", direction = "row", ...props }) => {
@@ -2941,16 +3036,16 @@ const DefaultCardTitle = () => {
2941
3036
  return jsx(Fragment, {});
2942
3037
  };
2943
3038
  const TableCards = ({ isSelectable = false, showDisplayNameOnly = false, renderTitle = DefaultCardTitle, cardBodyProps = {}, }) => {
2944
- const { table } = useDataTableContext();
3039
+ const { table, rowSelection, setRowSelection } = useDataTableContext();
2945
3040
  return (jsx(Fragment, { children: table.getRowModel().rows.map((row) => {
2946
- return (jsx(Card.Root, { flex: "1 0 20rem", children: jsxs(Card.Body, { display: "flex", flexFlow: "column", gap: "0.5rem", ...cardBodyProps, children: [isSelectable && (jsx(Checkbox, { isChecked: row.getIsSelected(),
2947
- disabled: !row.getCanSelect(),
3041
+ return (jsx(Card.Root, { flex: '1 0 20rem', children: jsxs(Card.Body, { display: 'flex', flexFlow: 'column', gap: '0.5rem', ...cardBodyProps, children: [isSelectable && (jsx(Checkbox, { isChecked: isRowSelected(row.id, rowSelection),
3042
+ disabled: !canRowSelect(row),
2948
3043
  // indeterminate: row.getIsSomeSelected(),
2949
- onChange: row.getToggleSelectedHandler() })), renderTitle(row), jsx(Grid, { templateColumns: "auto 1fr", gap: "1rem", children: row.getVisibleCells().map((cell) => {
2950
- return (jsxs(Fragment, { children: [jsxs(Box, { children: [showDisplayNameOnly && (jsx(Text, { fontWeight: "bold", children: cell.column.columnDef.meta?.displayName ??
3044
+ onChange: createRowToggleHandler(row, rowSelection, setRowSelection) })), renderTitle(row), jsx(Grid, { templateColumns: 'auto 1fr', gap: '1rem', children: row.getVisibleCells().map((cell) => {
3045
+ return (jsxs(Fragment, { children: [jsxs(Box, { children: [showDisplayNameOnly && (jsx(Text, { fontWeight: 'bold', children: cell.column.columnDef.meta?.displayName ??
2951
3046
  cell.column.id })), !showDisplayNameOnly && (jsx(Fragment, { children: flexRender(cell.column.columnDef.header,
2952
3047
  // @ts-expect-error Assuming the CellContext interface is the same as HeaderContext
2953
- cell.getContext()) }))] }, `chakra-table-cardcolumnid-${row.id}`), jsx(Box, { justifySelf: "end", children: flexRender(cell.column.columnDef.cell, cell.getContext()) }, `chakra-table-cardcolumn-${row.id}`)] }));
3048
+ cell.getContext()) }))] }, `chakra-table-cardcolumnid-${row.id}`), jsx(Box, { justifySelf: 'end', children: flexRender(cell.column.columnDef.cell, cell.getContext()) }, `chakra-table-cardcolumn-${row.id}`)] }));
2954
3049
  }) })] }) }, `chakra-table-card-${row.id}`));
2955
3050
  }) }));
2956
3051
  };
@@ -2963,7 +3058,7 @@ const TableComponent = ({ render = () => {
2963
3058
  };
2964
3059
 
2965
3060
  const TableFooter = ({ showSelector = false, alwaysShowSelector = true, }) => {
2966
- const table = useDataTableContext().table;
3061
+ const { table, rowSelection, setRowSelection } = useDataTableContext();
2967
3062
  const SELECTION_BOX_WIDTH = 20;
2968
3063
  const [hoveredCheckBox, setHoveredCheckBox] = useState(false);
2969
3064
  const handleRowHover = (isHovered) => {
@@ -2973,7 +3068,7 @@ const TableFooter = ({ showSelector = false, alwaysShowSelector = true, }) => {
2973
3068
  if (alwaysShowSelector) {
2974
3069
  return true;
2975
3070
  }
2976
- if (table.getIsAllRowsSelected()) {
3071
+ if (areAllRowsSelected(table, rowSelection)) {
2977
3072
  return true;
2978
3073
  }
2979
3074
  if (hoveredCheckBox) {
@@ -2981,22 +3076,22 @@ const TableFooter = ({ showSelector = false, alwaysShowSelector = true, }) => {
2981
3076
  }
2982
3077
  return false;
2983
3078
  };
2984
- return (jsx(Table$1.Footer, { children: table.getFooterGroups().map((footerGroup) => (jsxs(Table$1.Row, { display: "flex", children: [showSelector && (jsxs(Table$1.Header, { padding: `${table.getDensityValue()}px`, onMouseEnter: () => handleRowHover(true), onMouseLeave: () => handleRowHover(false), display: "grid", children: [isCheckBoxVisible() && (jsx(Box, { margin: "0rem", display: "grid", justifyItems: "center", alignItems: "center", children: jsx(Checkbox, { width: `${SELECTION_BOX_WIDTH}px`, height: `${SELECTION_BOX_WIDTH}px`, isChecked: table.getIsAllRowsSelected(),
2985
- // indeterminate: table.getIsSomeRowsSelected(),
2986
- onChange: table.getToggleAllRowsSelectedHandler() }) })), !isCheckBoxVisible() && (jsx(Box, { as: "span", margin: "0rem", display: "grid", justifyItems: "center", alignItems: "center", width: `${SELECTION_BOX_WIDTH}px`, height: `${SELECTION_BOX_WIDTH}px` }))] })), footerGroup.headers.map((header) => (jsx(Table$1.Cell, { padding: "0", columnSpan: `${header.colSpan}`,
3079
+ return (jsx(Table$1.Footer, { children: table.getFooterGroups().map((footerGroup) => (jsxs(Table$1.Row, { display: 'flex', children: [showSelector && (jsxs(Table$1.Header, { padding: `${table.getDensityValue()}px`, onMouseEnter: () => handleRowHover(true), onMouseLeave: () => handleRowHover(false), display: 'grid', children: [isCheckBoxVisible() && (jsx(Box, { margin: '0rem', display: 'grid', justifyItems: 'center', alignItems: 'center', children: jsx(Checkbox, { width: `${SELECTION_BOX_WIDTH}px`, height: `${SELECTION_BOX_WIDTH}px`, isChecked: areAllRowsSelected(table, rowSelection),
3080
+ // indeterminate: areSomeRowsSelected(table, rowSelection),
3081
+ onChange: createToggleAllRowsHandler(table, rowSelection, setRowSelection) }) })), !isCheckBoxVisible() && (jsx(Box, { as: "span", margin: '0rem', display: 'grid', justifyItems: 'center', alignItems: 'center', width: `${SELECTION_BOX_WIDTH}px`, height: `${SELECTION_BOX_WIDTH}px` }))] })), footerGroup.headers.map((header) => (jsx(Table$1.Cell, { padding: '0', columnSpan: `${header.colSpan}`,
2987
3082
  // styling resize and pinning start
2988
- maxWidth: `${header.getSize()}px`, width: `${header.getSize()}px`, display: "grid", children: jsx(MenuRoot$1, { children: jsx(MenuTrigger$1, { asChild: true, children: jsx(Box, { padding: `${table.getDensityValue()}px`, display: "flex", alignItems: "center", justifyContent: "start", borderRadius: "0rem", children: jsxs(Flex, { gap: "0.5rem", alignItems: "center", children: [header.isPlaceholder
3083
+ maxWidth: `${header.getSize()}px`, width: `${header.getSize()}px`, display: 'grid', children: jsx(MenuRoot$1, { children: jsx(MenuTrigger$1, { asChild: true, children: jsx(Box, { padding: `${table.getDensityValue()}px`, display: 'flex', alignItems: 'center', justifyContent: 'start', borderRadius: '0rem', children: jsxs(Flex, { gap: "0.5rem", alignItems: 'center', children: [header.isPlaceholder
2989
3084
  ? null
2990
- : flexRender(header.column.columnDef.footer, header.getContext()), jsx(Box, { children: header.column.getCanSort() && (jsxs(Fragment, { children: [header.column.getIsSorted() === false && jsx(Fragment, {}), header.column.getIsSorted() === "asc" && (jsx(BiUpArrow, {})), header.column.getIsSorted() === "desc" && (jsx(BiDownArrow, {}))] })) })] }) }) }) }) }, `chakra-table-footer-${header.column.id}-${footerGroup.id}`)))] }, `chakra-table-footergroup-${footerGroup.id}`))) }));
3085
+ : flexRender(header.column.columnDef.footer, header.getContext()), jsx(Box, { children: header.column.getCanSort() && (jsxs(Fragment, { children: [header.column.getIsSorted() === false && jsx(Fragment, {}), header.column.getIsSorted() === 'asc' && (jsx(BiUpArrow, {})), header.column.getIsSorted() === 'desc' && (jsx(BiDownArrow, {}))] })) })] }) }) }) }) }, `chakra-table-footer-${header.column.id}-${footerGroup.id}`)))] }, `chakra-table-footergroup-${footerGroup.id}`))) }));
2991
3086
  };
2992
3087
 
2993
3088
  // Default text values
2994
3089
  const DEFAULT_HEADER_TEXTS = {
2995
- pinColumn: "Pin Column",
2996
- cancelPin: "Cancel Pin",
2997
- sortAscending: "Sort Ascending",
2998
- sortDescending: "Sort Descending",
2999
- clearSorting: "Clear Sorting",
3090
+ pinColumn: 'Pin Column',
3091
+ cancelPin: 'Cancel Pin',
3092
+ sortAscending: 'Sort Ascending',
3093
+ sortDescending: 'Sort Descending',
3094
+ clearSorting: 'Clear Sorting',
3000
3095
  };
3001
3096
  /**
3002
3097
  * TableHeader component with configurable text strings.
@@ -3029,7 +3124,7 @@ const DEFAULT_HEADER_TEXTS = {
3029
3124
  * ];
3030
3125
  */
3031
3126
  const TableHeader = ({ canResize = true, showSelector = false, isSticky = true, tableHeaderProps = {}, tableRowProps = {}, defaultTexts = {}, }) => {
3032
- const { table } = useDataTableContext();
3127
+ const { table, rowSelection, setRowSelection } = useDataTableContext();
3033
3128
  const SELECTION_BOX_WIDTH = 20;
3034
3129
  // Merge default texts with provided defaults
3035
3130
  const mergedDefaultTexts = { ...DEFAULT_HEADER_TEXTS, ...defaultTexts };
@@ -3042,58 +3137,105 @@ const TableHeader = ({ canResize = true, showSelector = false, isSticky = true,
3042
3137
  const thProps = header.column.getIsPinned()
3043
3138
  ? {
3044
3139
  left: showSelector
3045
- ? `${header.getStart("left") + SELECTION_BOX_WIDTH + table.getDensityValue() * 2}px`
3046
- : `${header.getStart("left")}px`,
3047
- position: "sticky",
3140
+ ? `${header.getStart('left') + SELECTION_BOX_WIDTH + table.getDensityValue() * 2}px`
3141
+ : `${header.getStart('left')}px`,
3142
+ position: 'sticky',
3048
3143
  zIndex: 100 + 1,
3049
3144
  }
3050
3145
  : {};
3051
3146
  return thProps;
3052
3147
  };
3053
3148
  const stickyProps = {
3054
- position: "sticky",
3149
+ position: 'sticky',
3055
3150
  top: 0,
3056
3151
  };
3057
- return (jsx(Table$1.Header, { ...(isSticky ? stickyProps : {}), bgColor: "transparent", ...tableHeaderProps, children: table.getHeaderGroups().map((headerGroup) => (jsxs(Table$1.Row, { display: "flex", bgColor: "transparent", ...tableRowProps, children: [showSelector && (jsx(Table$1.ColumnHeader, { padding: `${table.getDensityValue()}px`, display: "grid", color: {
3058
- base: "colorPalette.900",
3059
- _dark: "colorPalette.100",
3152
+ const handleAutoSize = (header, event) => {
3153
+ const headerElement = event.currentTarget.closest('th');
3154
+ if (!headerElement)
3155
+ return;
3156
+ // Find the table container
3157
+ const tableContainer = headerElement.closest('[role="table"]') ||
3158
+ headerElement.closest('table') ||
3159
+ headerElement.closest('div');
3160
+ if (!tableContainer)
3161
+ return;
3162
+ // Calculate the actual column index accounting for selector column
3163
+ const columnIndex = header.index;
3164
+ const actualColumnIndex = showSelector ? columnIndex + 1 : columnIndex;
3165
+ // Get all rows (header and body) - Chakra UI Table uses flex layout
3166
+ const rows = Array.from(tableContainer.querySelectorAll('[role="row"], tr'));
3167
+ let maxWidth = 0;
3168
+ // Measure all cells in this column
3169
+ rows.forEach((row) => {
3170
+ // Get all cells in the row (td, th, or Chakra Table.Cell/Table.ColumnHeader)
3171
+ const cells = Array.from(row.children);
3172
+ const cell = cells[actualColumnIndex];
3173
+ if (cell) {
3174
+ // Create a temporary clone to measure content without constraints
3175
+ const clone = cell.cloneNode(true);
3176
+ clone.style.position = 'absolute';
3177
+ clone.style.visibility = 'hidden';
3178
+ clone.style.width = 'auto';
3179
+ clone.style.maxWidth = 'none';
3180
+ clone.style.whiteSpace = 'nowrap';
3181
+ clone.style.flex = 'none';
3182
+ document.body.appendChild(clone);
3183
+ const width = clone.scrollWidth;
3184
+ maxWidth = Math.max(maxWidth, width);
3185
+ document.body.removeChild(clone);
3186
+ }
3187
+ });
3188
+ // Add padding for better UX (density padding + some extra space)
3189
+ const padding = table.getDensityValue() * 2 + 4;
3190
+ const minSize = header.column.columnDef.minSize || 10;
3191
+ const finalWidth = Math.max(maxWidth + padding, minSize);
3192
+ // Set the column size - setSize exists on column but may not be fully typed in @tanstack/react-table
3193
+ console.log('finalWidth', finalWidth);
3194
+ table.setColumnSizing((current) => ({
3195
+ ...current,
3196
+ [header.id]: finalWidth,
3197
+ }));
3198
+ };
3199
+ return (jsx(Table$1.Header, { ...(isSticky ? stickyProps : {}), bgColor: 'transparent', ...tableHeaderProps, children: table.getHeaderGroups().map((headerGroup) => (jsxs(Table$1.Row, { display: 'flex', bgColor: 'transparent', ...tableRowProps, children: [showSelector && (jsx(Table$1.ColumnHeader, { padding: `${table.getDensityValue()}px`, display: 'grid', color: {
3200
+ base: 'colorPalette.900',
3201
+ _dark: 'colorPalette.100',
3060
3202
  },
3061
- bg: { base: "colorPalette.50", _dark: "colorPalette.950" }, justifyItems: "center", alignItems: "center", children: jsx(Checkbox, { width: `${SELECTION_BOX_WIDTH}px`, height: `${SELECTION_BOX_WIDTH}px`, checked: table.getIsAllRowsSelected(),
3062
- // indeterminate: table.getIsSomeRowsSelected(),
3063
- onChange: table.getToggleAllRowsSelectedHandler() }) })), headerGroup.headers.map((header) => {
3203
+ bg: { base: 'colorPalette.50', _dark: 'colorPalette.950' }, justifyItems: 'center', alignItems: 'center', children: jsx(Checkbox, { width: `${SELECTION_BOX_WIDTH}px`, height: `${SELECTION_BOX_WIDTH}px`, checked: areAllRowsSelected(table, rowSelection),
3204
+ // indeterminate: areSomeRowsSelected(table, rowSelection),
3205
+ onChange: createToggleAllRowsHandler(table, rowSelection, setRowSelection) }) })), headerGroup.headers.map((header) => {
3064
3206
  const resizeProps = {
3065
3207
  onMouseDown: header.getResizeHandler(),
3066
3208
  onTouchStart: header.getResizeHandler(),
3067
- cursor: "col-resize",
3209
+ cursor: 'col-resize',
3068
3210
  };
3069
3211
  return (jsxs(Table$1.ColumnHeader, { padding: 0, columnSpan: `${header.colSpan}`,
3070
3212
  // styling resize and pinning start
3071
- flex: `${canResize ? "0" : "1"} 0 ${header.column.getSize()}px`, display: "grid", gridTemplateColumns: "1fr auto", zIndex: 1500 + header.index, color: {
3072
- base: "colorPalette.800",
3073
- _dark: "colorPalette.200",
3213
+ flex: `${canResize ? '0' : '1'} 0 ${header.column.getSize()}px`, display: 'grid', gridTemplateColumns: '1fr auto', zIndex: 1500 + header.index, color: {
3214
+ base: 'colorPalette.800',
3215
+ _dark: 'colorPalette.200',
3074
3216
  },
3075
- bg: { base: "colorPalette.100", _dark: "colorPalette.900" }, ...getThProps(header), children: [jsxs(MenuRoot, { children: [jsx(MenuTrigger, { asChild: true, children: jsx(Flex, { padding: `${table.getDensityValue()}px`, alignItems: "center", justifyContent: "start", borderRadius: "0rem", overflow: "auto", color: {
3076
- base: "colorPalette.800",
3077
- _dark: "colorPalette.200",
3217
+ bg: { base: 'colorPalette.100', _dark: 'colorPalette.900' }, ...getThProps(header), children: [jsxs(MenuRoot, { children: [jsx(MenuTrigger, { asChild: true, children: jsx(Flex, { padding: `${table.getDensityValue()}px`, alignItems: 'center', justifyContent: 'start', borderRadius: '0rem', overflow: 'auto', color: {
3218
+ base: 'colorPalette.800',
3219
+ _dark: 'colorPalette.200',
3078
3220
  _hover: {
3079
- base: "colorPalette.700",
3080
- _dark: "colorPalette.300",
3221
+ base: 'colorPalette.700',
3222
+ _dark: 'colorPalette.300',
3081
3223
  },
3082
3224
  },
3083
3225
  bg: {
3084
- base: "colorPalette.100",
3085
- _dark: "colorPalette.900",
3226
+ base: 'colorPalette.100',
3227
+ _dark: 'colorPalette.900',
3086
3228
  _hover: {
3087
- base: "colorPalette.200",
3088
- _dark: "colorPalette.800",
3229
+ base: 'colorPalette.200',
3230
+ _dark: 'colorPalette.800',
3089
3231
  },
3090
- }, children: jsxs(Flex, { gap: "0.5rem", alignItems: "center", children: [header.isPlaceholder
3232
+ }, children: jsxs(Flex, { gap: "0.5rem", alignItems: 'center', children: [header.isPlaceholder
3091
3233
  ? null
3092
- : flexRender(header.column.columnDef.header, header.getContext()), jsx(Box, { children: header.column.getCanSort() && (jsxs(Fragment, { children: [header.column.getIsSorted() === false && jsx(Fragment, {}), header.column.getIsSorted() === "asc" && (jsx(BiUpArrow, {})), header.column.getIsSorted() === "desc" && (jsx(BiDownArrow, {}))] })) }), jsx(Box, { children: header.column.getIsFiltered() && jsx(MdFilterListAlt, {}) })] }) }) }), jsxs(MenuContent, { children: [!header.column.getIsPinned() && (jsx(MenuItem, { asChild: true, value: "pin-column", children: jsxs(Button, { variant: "ghost", onClick: () => {
3093
- header.column.pin("left");
3094
- }, children: [jsx(MdPushPin, {}), getHeaderText(header, "pinColumn")] }) })), header.column.getIsPinned() && (jsx(MenuItem, { asChild: true, value: "cancel-pin", children: jsxs(Button, { variant: "ghost", onClick: () => {
3234
+ : flexRender(header.column.columnDef.header, header.getContext()), jsx(Box, { children: header.column.getCanSort() && (jsxs(Fragment, { children: [header.column.getIsSorted() === false && jsx(Fragment, {}), header.column.getIsSorted() === 'asc' && (jsx(BiUpArrow, {})), header.column.getIsSorted() === 'desc' && (jsx(BiDownArrow, {}))] })) }), jsx(Box, { children: header.column.getIsFiltered() && jsx(MdFilterListAlt, {}) })] }) }) }), jsxs(MenuContent, { children: [!header.column.getIsPinned() && (jsx(MenuItem, { asChild: true, value: "pin-column", children: jsxs(Button, { variant: 'ghost', onClick: () => {
3235
+ header.column.pin('left');
3236
+ }, children: [jsx(MdPushPin, {}), getHeaderText(header, 'pinColumn')] }) })), header.column.getIsPinned() && (jsx(MenuItem, { asChild: true, value: "cancel-pin", children: jsxs(Button, { variant: 'ghost', onClick: () => {
3095
3237
  header.column.pin(false);
3096
- }, children: [jsx(MdCancel, {}), getHeaderText(header, "cancelPin")] }) })), header.column.getCanSort() && (jsxs(Fragment, { children: [jsx(MenuItem, { asChild: true, value: "sort-ascend", children: jsxs(Button, { variant: "ghost", onClick: () => {
3238
+ }, children: [jsx(MdCancel, {}), getHeaderText(header, 'cancelPin')] }) })), header.column.getCanSort() && (jsxs(Fragment, { children: [jsx(MenuItem, { asChild: true, value: "sort-ascend", children: jsxs(Button, { variant: 'ghost', onClick: () => {
3097
3239
  table.setSorting((state) => {
3098
3240
  return [
3099
3241
  ...state.filter((column) => {
@@ -3102,7 +3244,7 @@ const TableHeader = ({ canResize = true, showSelector = false, isSticky = true,
3102
3244
  { id: header.id, desc: false },
3103
3245
  ];
3104
3246
  });
3105
- }, children: [jsx(GrAscend, {}), getHeaderText(header, "sortAscending")] }) }), jsx(MenuItem, { asChild: true, value: "sort-descend", children: jsxs(Button, { variant: "ghost", onClick: () => {
3247
+ }, children: [jsx(GrAscend, {}), getHeaderText(header, 'sortAscending')] }) }), jsx(MenuItem, { asChild: true, value: "sort-descend", children: jsxs(Button, { variant: 'ghost', onClick: () => {
3106
3248
  table.setSorting((state) => {
3107
3249
  return [
3108
3250
  ...state.filter((column) => {
@@ -3111,14 +3253,16 @@ const TableHeader = ({ canResize = true, showSelector = false, isSticky = true,
3111
3253
  { id: header.id, desc: true },
3112
3254
  ];
3113
3255
  });
3114
- }, children: [jsx(GrDescend, {}), getHeaderText(header, "sortDescending")] }) }), header.column.getIsSorted() && (jsx(MenuItem, { asChild: true, value: "clear-sorting", children: jsxs(Button, { variant: "ghost", onClick: () => {
3256
+ }, children: [jsx(GrDescend, {}), getHeaderText(header, 'sortDescending')] }) }), header.column.getIsSorted() && (jsx(MenuItem, { asChild: true, value: "clear-sorting", children: jsxs(Button, { variant: 'ghost', onClick: () => {
3115
3257
  header.column.clearSorting();
3116
- }, children: [jsx(MdClear, {}), getHeaderText(header, "clearSorting")] }) }))] }))] })] }), canResize && (jsx(Box, { borderRight: "0.2rem solid", borderRightColor: header.column.getIsResizing()
3117
- ? "colorPalette.700"
3118
- : "transparent", position: "relative", right: "0.1rem", width: "2px", height: "100%", userSelect: "none", style: { touchAction: "none" }, _hover: {
3258
+ }, children: [jsx(MdClear, {}), getHeaderText(header, 'clearSorting')] }) }))] }))] })] }), canResize && (jsx(Box, { borderRight: '0.2rem solid', borderRightColor: header.column.getIsResizing()
3259
+ ? 'colorPalette.700'
3260
+ : 'transparent', position: 'relative', right: '0.1rem', width: '2px', height: '100%', userSelect: 'none', style: { touchAction: 'none' }, _hover: {
3119
3261
  borderRightColor: header.column.getIsResizing()
3120
- ? "colorPalette.700"
3121
- : "colorPalette.400",
3262
+ ? 'colorPalette.700'
3263
+ : 'colorPalette.400',
3264
+ }, onDoubleClick: (e) => {
3265
+ handleAutoSize(header, e);
3122
3266
  }, ...resizeProps }))] }, `chakra-table-header-${header.id}`));
3123
3267
  })] }, `chakra-table-headergroup-${headerGroup.id}`))) }));
3124
3268
  };
@@ -3607,7 +3751,7 @@ const FormRoot = ({ schema, idMap, setIdMap, form, serverUrl, translate, childre
3607
3751
  showSubmitButton: true,
3608
3752
  showResetButton: true,
3609
3753
  showTitle: true,
3610
- }, requireConfirmation = false, dateTimePickerLabels, idPickerLabels, enumPickerLabels, filePickerLabels, comboboxInDialog = false, }) => {
3754
+ }, requireConfirmation = false, dateTimePickerLabels, idPickerLabels, enumPickerLabels, filePickerLabels, insideDialog = false, }) => {
3611
3755
  const [isSuccess, setIsSuccess] = useState(false);
3612
3756
  const [isError, setIsError] = useState(false);
3613
3757
  const [isSubmiting, setIsSubmiting] = useState(false);
@@ -3698,7 +3842,7 @@ const FormRoot = ({ schema, idMap, setIdMap, form, serverUrl, translate, childre
3698
3842
  enumPickerLabels,
3699
3843
  filePickerLabels,
3700
3844
  ajvResolver: ajvResolver(schema),
3701
- comboboxInDialog,
3845
+ insideDialog,
3702
3846
  }, children: jsx(FormProvider, { ...form, children: children }) }));
3703
3847
  };
3704
3848
 
@@ -4159,7 +4303,7 @@ const DateRangePicker = ({ column, schema, prefix, }) => {
4159
4303
 
4160
4304
  const EnumPicker = ({ column, isMultiple = false, schema, prefix, showTotalAndLimit = false, }) => {
4161
4305
  const { watch, formState: { errors }, setValue, } = useFormContext();
4162
- const { enumPickerLabels, comboboxInDialog } = useSchemaContext();
4306
+ const { enumPickerLabels, insideDialog } = useSchemaContext();
4163
4307
  const formI18n = useFormI18n(column, prefix);
4164
4308
  const { required, variant } = schema;
4165
4309
  const isRequired = required?.some((columnId) => columnId === column);
@@ -4228,11 +4372,11 @@ const EnumPicker = ({ column, isMultiple = false, schema, prefix, showTotalAndLi
4228
4372
  }, children: !!renderDisplay === true
4229
4373
  ? renderDisplay(enumValue)
4230
4374
  : formI18n.t(enumValue) }, enumValue));
4231
- }) })), jsxs(Combobox.Root, { collection: collection, value: currentValue, onValueChange: handleValueChange, onInputValueChange: handleInputValueChange, multiple: isMultiple, closeOnSelect: !isMultiple, openOnClick: true, invalid: !!errors[colLabel], width: "100%", positioning: comboboxInDialog
4375
+ }) })), jsxs(Combobox.Root, { collection: collection, value: currentValue, onValueChange: handleValueChange, onInputValueChange: handleInputValueChange, multiple: isMultiple, closeOnSelect: !isMultiple, openOnClick: true, invalid: !!errors[colLabel], width: "100%", positioning: insideDialog
4232
4376
  ? { strategy: 'fixed', hideWhenDetached: true }
4233
4377
  : undefined, children: [jsxs(Combobox.Control, { children: [jsx(Combobox.Input, { placeholder: enumPickerLabels?.typeToSearch ?? formI18n.t('type_to_search') }), jsxs(Combobox.IndicatorGroup, { children: [!isMultiple && currentValue.length > 0 && (jsx(Combobox.ClearTrigger, { onClick: () => {
4234
4378
  setValue(colLabel, '');
4235
- } })), jsx(Combobox.Trigger, {})] })] }), comboboxInDialog ? (jsx(Combobox.Positioner, { children: jsxs(Combobox.Content, { children: [showTotalAndLimit && (jsx(Text, { p: 2, fontSize: "sm", color: "fg.muted", children: `${enumPickerLabels?.total ?? formI18n.t('total')}: ${collection.items.length}` })), collection.items.length === 0 ? (jsx(Combobox.Empty, { children: enumPickerLabels?.emptySearchResult ??
4379
+ } })), jsx(Combobox.Trigger, {})] })] }), insideDialog ? (jsx(Combobox.Positioner, { children: jsxs(Combobox.Content, { children: [showTotalAndLimit && (jsx(Text, { p: 2, fontSize: "sm", color: "fg.muted", children: `${enumPickerLabels?.total ?? formI18n.t('total')}: ${collection.items.length}` })), collection.items.length === 0 ? (jsx(Combobox.Empty, { children: enumPickerLabels?.emptySearchResult ??
4236
4380
  formI18n.t('empty_search_result') })) : (jsx(Fragment, { children: collection.items.map((item, index) => (jsxs(Combobox.Item, { item: item, children: [jsx(Combobox.ItemText, { children: item.label }), jsx(Combobox.ItemIndicator, {})] }, item.value ?? `item-${index}`))) }))] }) })) : (jsx(Portal, { children: jsx(Combobox.Positioner, { children: jsxs(Combobox.Content, { children: [showTotalAndLimit && (jsx(Text, { p: 2, fontSize: "sm", color: "fg.muted", children: `${enumPickerLabels?.total ?? formI18n.t('total')}: ${collection.items.length}` })), collection.items.length === 0 ? (jsx(Combobox.Empty, { children: enumPickerLabels?.emptySearchResult ??
4237
4381
  formI18n.t('empty_search_result') })) : (jsx(Fragment, { children: collection.items.map((item, index) => (jsxs(Combobox.Item, { item: item, children: [jsx(Combobox.ItemText, { children: item.label }), jsx(Combobox.ItemIndicator, {})] }, item.value ?? `item-${index}`))) }))] }) }) }))] })] }));
4238
4382
  };
@@ -5023,7 +5167,7 @@ const getTableData = async ({ serverUrl, in_table, searching = "", where = [], l
5023
5167
 
5024
5168
  const IdPicker = ({ column, schema, prefix, isMultiple = false, }) => {
5025
5169
  const { watch, getValues, formState: { errors }, setValue, } = useFormContext();
5026
- const { serverUrl, idMap, setIdMap, schema: parentSchema, idPickerLabels, comboboxInDialog, } = useSchemaContext();
5170
+ const { serverUrl, idMap, setIdMap, idPickerLabels, insideDialog } = useSchemaContext();
5027
5171
  const formI18n = useFormI18n(column, prefix);
5028
5172
  const { required, gridColumn = 'span 12', gridRow = 'span 1', renderDisplay, foreign_key, } = schema;
5029
5173
  const isRequired = required?.some((columnId) => columnId === column);
@@ -5100,60 +5244,6 @@ const IdPicker = ({ column, schema, prefix, isMultiple = false, }) => {
5100
5244
  enabled: true, // Always enabled for combobox
5101
5245
  staleTime: 300000,
5102
5246
  });
5103
- // Query for currently selected items (to display them properly)
5104
- // This query is needed for side effects (populating idMap) even though the result isn't directly used
5105
- useQuery({
5106
- queryKey: [
5107
- `idpicker-default`,
5108
- {
5109
- form: parentSchema.title,
5110
- column,
5111
- id: isMultiple ? currentIds : currentId,
5112
- },
5113
- ],
5114
- queryFn: async () => {
5115
- const queryId = currentId;
5116
- const queryIds = currentIds;
5117
- if (customQueryFn) {
5118
- const { data, idMap } = await customQueryFn({
5119
- searching: '',
5120
- limit: isMultiple ? queryIds.length : 1,
5121
- offset: 0,
5122
- where: [{ id: column_ref, value: isMultiple ? queryIds : queryId }],
5123
- });
5124
- setIdMap((state) => {
5125
- return { ...state, ...idMap };
5126
- });
5127
- return data;
5128
- }
5129
- if (!queryId && (!queryIds || queryIds.length === 0)) {
5130
- return { data: [] };
5131
- }
5132
- const data = await getTableData({
5133
- serverUrl,
5134
- searching: '',
5135
- in_table: table,
5136
- where: [{ id: column_ref, value: isMultiple ? queryIds : queryId }],
5137
- limit: isMultiple ? queryIds.length : 1,
5138
- offset: 0,
5139
- });
5140
- const newMap = Object.fromEntries((data ?? { data: [] }).data.map((item) => {
5141
- return [
5142
- item[column_ref],
5143
- {
5144
- ...item,
5145
- },
5146
- ];
5147
- }));
5148
- setIdMap((state) => {
5149
- return { ...state, ...newMap };
5150
- });
5151
- return data;
5152
- },
5153
- enabled: isMultiple
5154
- ? Array.isArray(currentIds) && currentIds.length > 0
5155
- : !!currentId,
5156
- });
5157
5247
  const { isLoading, isFetching, data, isPending, isError } = query;
5158
5248
  const dataList = data?.data ?? [];
5159
5249
  // Check if we're currently searching (user typed but debounce hasn't fired yet)
@@ -5216,11 +5306,11 @@ const IdPicker = ({ column, schema, prefix, isMultiple = false, }) => {
5216
5306
  }, children: !!renderDisplay === true
5217
5307
  ? renderDisplay(item)
5218
5308
  : item[display_column] }, id));
5219
- }) })), jsxs(Combobox.Root, { collection: collection, value: currentValue, onValueChange: handleValueChange, onInputValueChange: handleInputValueChange, multiple: isMultiple, closeOnSelect: !isMultiple, openOnClick: true, invalid: !!errors[colLabel], width: "100%", positioning: comboboxInDialog
5309
+ }) })), jsxs(Combobox.Root, { collection: collection, value: currentValue, onValueChange: handleValueChange, onInputValueChange: handleInputValueChange, multiple: isMultiple, closeOnSelect: !isMultiple, openOnClick: true, invalid: !!errors[colLabel], width: "100%", positioning: insideDialog
5220
5310
  ? { strategy: 'fixed', hideWhenDetached: true }
5221
5311
  : undefined, children: [jsxs(Combobox.Control, { children: [jsx(Combobox.Input, { placeholder: idPickerLabels?.typeToSearch ?? formI18n.t('type_to_search') }), jsxs(Combobox.IndicatorGroup, { children: [(isFetching || isLoading || isPending) && jsx(Spinner, { size: "xs" }), isError && (jsx(Icon, { color: "fg.error", children: jsx(BiError, {}) })), !isMultiple && currentValue.length > 0 && (jsx(Combobox.ClearTrigger, { onClick: () => {
5222
5312
  setValue(colLabel, '');
5223
- } })), jsx(Combobox.Trigger, {})] })] }), comboboxInDialog ? (jsx(Combobox.Positioner, { children: jsx(Combobox.Content, { children: isError ? (jsx(Text, { p: 2, color: "fg.error", fontSize: "sm", children: formI18n.t('loading_failed') })) : isFetching || isLoading || isPending || isSearching ? (
5313
+ } })), jsx(Combobox.Trigger, {})] })] }), insideDialog ? (jsx(Combobox.Positioner, { children: jsx(Combobox.Content, { children: isError ? (jsx(Text, { p: 2, color: "fg.error", fontSize: "sm", children: formI18n.t('loading_failed') })) : isFetching || isLoading || isPending || isSearching ? (
5224
5314
  // Show skeleton items to prevent UI shift
5225
5315
  jsx(Fragment, { children: Array.from({ length: 5 }).map((_, index) => (jsx(Flex, { p: 2, align: "center", gap: 2, children: jsx(Skeleton, { height: "20px", flex: "1" }) }, `skeleton-${index}`))) })) : collection.items.length === 0 ? (jsx(Combobox.Empty, { children: searchText
5226
5316
  ? idPickerLabels?.emptySearchResult ??
@@ -7263,7 +7353,7 @@ const DensityFeature = {
7263
7353
  // define the new feature's initial state
7264
7354
  getInitialState: (state) => {
7265
7355
  return {
7266
- density: "sm",
7356
+ density: 'sm',
7267
7357
  ...state,
7268
7358
  };
7269
7359
  },
@@ -7271,7 +7361,7 @@ const DensityFeature = {
7271
7361
  getDefaultOptions: (table) => {
7272
7362
  return {
7273
7363
  enableDensity: true,
7274
- onDensityChange: makeStateUpdater("density", table),
7364
+ onDensityChange: makeStateUpdater('density', table),
7275
7365
  };
7276
7366
  },
7277
7367
  // if you need to add a default column definition...
@@ -7291,13 +7381,16 @@ const DensityFeature = {
7291
7381
  table.setDensity((old) => {
7292
7382
  if (value)
7293
7383
  return value;
7294
- if (old === "sm") {
7295
- return "md";
7384
+ if (old === 'xs') {
7385
+ return 'sm';
7386
+ }
7387
+ if (old === 'sm') {
7388
+ return 'md';
7296
7389
  }
7297
- if (old === "md") {
7298
- return "lg";
7390
+ if (old === 'md') {
7391
+ return 'lg';
7299
7392
  }
7300
- return "sm";
7393
+ return 'xs';
7301
7394
  });
7302
7395
  };
7303
7396
  table.getDensityValue = (value) => {
@@ -7308,13 +7401,16 @@ const DensityFeature = {
7308
7401
  else {
7309
7402
  density = table.getState().density;
7310
7403
  }
7311
- if (density === "sm") {
7312
- return 8;
7404
+ if (density === 'xs') {
7405
+ return 2;
7406
+ }
7407
+ if (density === 'sm') {
7408
+ return 4;
7313
7409
  }
7314
- if (density === "md") {
7315
- return 16;
7410
+ if (density === 'md') {
7411
+ return 8;
7316
7412
  }
7317
- return 32;
7413
+ return 12;
7318
7414
  };
7319
7415
  },
7320
7416
  // if you need to add row instance APIs...
@@ -7539,4 +7635,4 @@ function DataTableServer({ columns, enableRowSelection = true, enableMultiRowSel
7539
7635
  }, children: jsx(DataTableServerContext.Provider, { value: { url, query }, children: children }) }));
7540
7636
  }
7541
7637
 
7542
- export { CardHeader, DataDisplay, DataTable, DataTableServer, DefaultCardTitle, DefaultForm, DefaultTable, DefaultTableServer, DensityToggleButton, EditSortingButton, EmptyState, ErrorAlert, FilterDialog, FormBody, FormRoot, FormTitle, GlobalFilter, MediaLibraryBrowser, PageSizeControl, Pagination, RecordDisplay, ReloadButton, ResetFilteringButton, ResetSelectionButton, ResetSortingButton, RowCountText, Table, TableBody, TableCardContainer, TableCards, TableComponent, TableControls, TableDataDisplay, TableFilter, TableFilterTags, TableFooter, TableHeader, TableLoadingComponent, TableSelector, TableSorter, TableViewer, TextCell, ViewDialog, buildErrorMessages, buildFieldErrors, buildRequiredErrors, convertToAjvErrorsFormat, createErrorMessage, getColumns, getMultiDates, getRangeDates, idPickerSanityCheck, useDataTable, useDataTableContext, useDataTableServer, useForm, widthSanityCheck };
7638
+ export { CardHeader, DataDisplay, DataTable, DataTableServer, DefaultCardTitle, DefaultForm, DefaultTable, DefaultTableServer, DensityToggleButton, EditSortingButton, EmptyState, ErrorAlert, FilterDialog, FormBody, FormRoot, FormTitle, GlobalFilter, MediaLibraryBrowser, PageSizeControl, Pagination, RecordDisplay, ReloadButton, ResetFilteringButton, ResetSelectionButton, ResetSortingButton, RowCountText, SelectAllRowsToggle, Table, TableBody, TableCardContainer, TableCards, TableComponent, TableControls, TableDataDisplay, TableFilter, TableFilterTags, TableFooter, TableHeader, TableLoadingComponent, TableSelector, TableSorter, TableViewer, TextCell, ViewDialog, buildErrorMessages, buildFieldErrors, buildRequiredErrors, convertToAjvErrorsFormat, createErrorMessage, getColumns, getMultiDates, getRangeDates, idPickerSanityCheck, useDataTable, useDataTableContext, useDataTableServer, useForm, widthSanityCheck };