@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.js CHANGED
@@ -602,12 +602,104 @@ const Pagination = () => {
602
602
  }, children: jsxRuntime.jsxs(react.HStack, { children: [jsxRuntime.jsx(PaginationPrevTrigger, {}), jsxRuntime.jsx(PaginationItems, {}), jsxRuntime.jsx(PaginationNextTrigger, {})] }) }));
603
603
  };
604
604
 
605
+ /**
606
+ * Custom selector utilities to replace TanStack table selector primitives.
607
+ * These work directly with rowSelection state instead of using table's built-in selectors.
608
+ */
609
+ /**
610
+ * Get all selected rows from the table based on rowSelection state
611
+ */
612
+ function getSelectedRows(table, rowSelection) {
613
+ const selectedRowIds = Object.keys(rowSelection).filter((id) => rowSelection[id] === true);
614
+ return table
615
+ .getRowModel()
616
+ .rows.filter((row) => selectedRowIds.includes(row.id));
617
+ }
618
+ /**
619
+ * Get the count of selected rows
620
+ */
621
+ function getSelectedRowCount(table, rowSelection) {
622
+ return getSelectedRows(table, rowSelection).length;
623
+ }
624
+ /**
625
+ * Check if a specific row is selected
626
+ */
627
+ function isRowSelected(rowId, rowSelection) {
628
+ return rowSelection[rowId] === true;
629
+ }
630
+ /**
631
+ * Check if all rows in the table are selected
632
+ */
633
+ function areAllRowsSelected(table, rowSelection) {
634
+ const rows = table.getRowModel().rows;
635
+ if (rows.length === 0)
636
+ return false;
637
+ return rows.every((row) => isRowSelected(row.id, rowSelection));
638
+ }
639
+ /**
640
+ * Check if all rows on the current page are selected
641
+ */
642
+ function areAllPageRowsSelected(table, rowSelection) {
643
+ const pageRows = table.getRowModel().rows;
644
+ if (pageRows.length === 0)
645
+ return false;
646
+ return pageRows.every((row) => isRowSelected(row.id, rowSelection));
647
+ }
648
+ /**
649
+ * Create a toggle handler for a specific row
650
+ */
651
+ function createRowToggleHandler(row, rowSelection, setRowSelection) {
652
+ return () => {
653
+ setRowSelection((old) => {
654
+ const newSelection = { ...old };
655
+ if (newSelection[row.id]) {
656
+ delete newSelection[row.id];
657
+ }
658
+ else {
659
+ newSelection[row.id] = true;
660
+ }
661
+ return newSelection;
662
+ });
663
+ };
664
+ }
665
+ /**
666
+ * Create a toggle handler for all rows
667
+ */
668
+ function createToggleAllRowsHandler(table, rowSelection, setRowSelection) {
669
+ return () => {
670
+ const allSelected = areAllRowsSelected(table, rowSelection);
671
+ if (allSelected) {
672
+ // Deselect all
673
+ setRowSelection({});
674
+ }
675
+ else {
676
+ // Select all
677
+ const newSelection = {};
678
+ table.getRowModel().rows.forEach((row) => {
679
+ newSelection[row.id] = true;
680
+ });
681
+ setRowSelection(newSelection);
682
+ }
683
+ };
684
+ }
685
+ /**
686
+ * Reset row selection (clear all selections)
687
+ */
688
+ function resetRowSelection(setRowSelection) {
689
+ setRowSelection({});
690
+ }
691
+ /**
692
+ * Check if a row can be selected (always true for now, can be extended)
693
+ */
694
+ function canRowSelect(row) {
695
+ return row.getCanSelect?.() ?? true;
696
+ }
697
+
605
698
  const ResetSelectionButton = () => {
606
- const { table } = useDataTableContext();
607
- const { tableLabel } = useDataTableContext();
699
+ const { tableLabel, setRowSelection } = useDataTableContext();
608
700
  const { resetSelection } = tableLabel;
609
701
  return (jsxRuntime.jsx(react.Button, { onClick: () => {
610
- table.resetRowSelection();
702
+ resetRowSelection(setRowSelection);
611
703
  }, children: resetSelection }));
612
704
  };
613
705
 
@@ -2683,20 +2775,20 @@ const GlobalFilter = () => {
2683
2775
  } }) }) }));
2684
2776
  };
2685
2777
 
2686
- const SelectAllRowsToggle = ({ selectAllIcon = jsxRuntime.jsx(md.MdOutlineChecklist, {}), clearAllIcon = jsxRuntime.jsx(md.MdClear, {}), selectAllText = "", clearAllText = "", }) => {
2687
- const { table } = useDataTableContext();
2688
- return (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [!!selectAllText === false && (jsxRuntime.jsx(react.IconButton, { variant: "ghost", "aria-label": table.getIsAllRowsSelected() ? clearAllText : selectAllText, onClick: (event) => {
2689
- table.getToggleAllRowsSelectedHandler()(event);
2690
- }, children: table.getIsAllRowsSelected() ? clearAllIcon : selectAllIcon })), !!selectAllText !== false && (jsxRuntime.jsxs(react.Button, { variant: "ghost", onClick: (event) => {
2691
- table.getToggleAllRowsSelectedHandler()(event);
2692
- }, children: [table.getIsAllRowsSelected() ? clearAllIcon : selectAllIcon, table.getIsAllRowsSelected() ? clearAllText : selectAllText] }))] }));
2778
+ const SelectAllRowsToggle = ({ selectAllIcon = jsxRuntime.jsx(md.MdOutlineChecklist, {}), clearAllIcon = jsxRuntime.jsx(md.MdClear, {}), selectAllText = '', clearAllText = '', }) => {
2779
+ const { table, rowSelection, setRowSelection } = useDataTableContext();
2780
+ const allRowsSelected = areAllRowsSelected(table, rowSelection);
2781
+ const toggleHandler = createToggleAllRowsHandler(table, rowSelection, setRowSelection);
2782
+ return (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [!!selectAllText === false && (jsxRuntime.jsx(react.IconButton, { variant: 'ghost', "aria-label": allRowsSelected ? clearAllText : selectAllText, onClick: toggleHandler, children: allRowsSelected ? clearAllIcon : selectAllIcon })), !!selectAllText !== false && (jsxRuntime.jsxs(react.Button, { variant: 'ghost', onClick: toggleHandler, children: [allRowsSelected ? clearAllIcon : selectAllIcon, allRowsSelected ? clearAllText : selectAllText] }))] }));
2693
2783
  };
2694
2784
 
2695
2785
  const TableSelector = () => {
2696
- const { table } = useDataTableContext();
2697
- return (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [table.getSelectedRowModel().rows.length > 0 && (jsxRuntime.jsxs(react.Button, { onClick: () => { }, variant: "ghost", display: "flex", gap: "0.25rem", children: [jsxRuntime.jsx(react.Box, { fontSize: "sm", children: `${table.getSelectedRowModel().rows.length}` }), jsxRuntime.jsx(io.IoMdCheckbox, {})] })), !table.getIsAllPageRowsSelected() && jsxRuntime.jsx(SelectAllRowsToggle, {}), table.getSelectedRowModel().rows.length > 0 && (jsxRuntime.jsx(react.IconButton, { variant: "ghost", onClick: () => {
2698
- table.resetRowSelection();
2699
- }, "aria-label": "reset selection", children: jsxRuntime.jsx(md.MdClear, {}) }))] }));
2786
+ const { table, rowSelection, setRowSelection } = useDataTableContext();
2787
+ const selectedCount = getSelectedRowCount(table, rowSelection);
2788
+ const allPageRowsSelected = areAllPageRowsSelected(table, rowSelection);
2789
+ return (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [selectedCount > 0 && (jsxRuntime.jsxs(react.Button, { onClick: () => { }, variant: 'ghost', display: 'flex', gap: "0.25rem", children: [jsxRuntime.jsx(react.Box, { fontSize: 'sm', children: `${selectedCount}` }), jsxRuntime.jsx(io.IoMdCheckbox, {})] })), !allPageRowsSelected && jsxRuntime.jsx(SelectAllRowsToggle, {}), selectedCount > 0 && (jsxRuntime.jsx(react.IconButton, { variant: 'ghost', onClick: () => {
2790
+ resetRowSelection(setRowSelection);
2791
+ }, "aria-label": 'reset selection', children: jsxRuntime.jsx(md.MdClear, {}) }))] }));
2700
2792
  };
2701
2793
 
2702
2794
  const TableFilterTags = () => {
@@ -2893,7 +2985,7 @@ const Checkbox = React__namespace.forwardRef(function Checkbox(props, ref) {
2893
2985
  });
2894
2986
 
2895
2987
  const TableBody = ({ showSelector = false, canResize = true, }) => {
2896
- "use no memo";
2988
+ 'use no memo';
2897
2989
  const { table } = useDataTableContext();
2898
2990
  const SELECTION_BOX_WIDTH = 20;
2899
2991
  const [hoveredRow, setHoveredRow] = React.useState(-1);
@@ -2904,9 +2996,9 @@ const TableBody = ({ showSelector = false, canResize = true, }) => {
2904
2996
  const tdProps = cell.column.getIsPinned()
2905
2997
  ? {
2906
2998
  left: showSelector
2907
- ? `${cell.column.getStart("left") + SELECTION_BOX_WIDTH + table.getDensityValue() * 2}px`
2908
- : `${cell.column.getStart("left")}px`,
2909
- position: "relative",
2999
+ ? `${cell.column.getStart('left') + SELECTION_BOX_WIDTH + table.getDensityValue() * 2}px`
3000
+ : `${cell.column.getStart('left')}px`,
3001
+ position: 'relative',
2910
3002
  }
2911
3003
  : {};
2912
3004
  return tdProps;
@@ -2917,37 +3009,40 @@ const TableBody = ({ showSelector = false, canResize = true, }) => {
2917
3009
  }
2918
3010
  if (hoveredRow === index) {
2919
3011
  return {
2920
- opacity: "1",
3012
+ opacity: '1',
2921
3013
  };
2922
3014
  }
2923
3015
  return {
2924
- opacity: "0.8",
3016
+ opacity: '0.8',
2925
3017
  };
2926
3018
  };
2927
3019
  return (jsxRuntime.jsx(react.Table.Body, { children: table.getRowModel().rows.map((row, index) => {
2928
- return (jsxRuntime.jsxs(react.Table.Row, { display: "flex", zIndex: 1, onMouseEnter: () => handleRowHover(index), onMouseLeave: () => handleRowHover(-1), ...getTrProps({ hoveredRow, index }), children: [showSelector && (jsxRuntime.jsx(TableRowSelector, { index: index, row: row, hoveredRow: hoveredRow })), row.getVisibleCells().map((cell, index) => {
3020
+ return (jsxRuntime.jsxs(react.Table.Row, { display: 'flex', zIndex: 1, onMouseEnter: () => handleRowHover(index), onMouseLeave: () => handleRowHover(-1), ...getTrProps({ hoveredRow, index }), children: [showSelector && (jsxRuntime.jsx(TableRowSelector, { index: index, row: row, hoveredRow: hoveredRow })), row.getVisibleCells().map((cell, index) => {
2929
3021
  return (jsxRuntime.jsx(react.Table.Cell, { padding: `${table.getDensityValue()}px`,
2930
3022
  // styling resize and pinning start
2931
- flex: `${canResize ? "0" : "1"} 0 ${cell.column.getSize()}px`,
3023
+ flex: `${canResize ? '0' : '1'} 0 ${cell.column.getSize()}px`,
2932
3024
  // this is to avoid the cell from being too wide
2933
3025
  minWidth: `0`, color: {
2934
- base: "colorPalette.900",
2935
- _dark: "colorPalette.100",
3026
+ base: 'colorPalette.900',
3027
+ _dark: 'colorPalette.100',
2936
3028
  },
2937
- bg: { base: "colorPalette.50", _dark: "colorPalette.950" }, ...getTdProps(cell), children: reactTable.flexRender(cell.column.columnDef.cell, cell.getContext()) }, `chakra-table-rowcell-${cell.id}-${index}`));
3029
+ bg: { base: 'colorPalette.50', _dark: 'colorPalette.950' }, ...getTdProps(cell), children: reactTable.flexRender(cell.column.columnDef.cell, cell.getContext()) }, `chakra-table-rowcell-${cell.id}-${index}`));
2938
3030
  })] }, `chakra-table-row-${row.id}`));
2939
3031
  }) }));
2940
3032
  };
2941
- const TableRowSelector = ({ row, }) => {
2942
- const { table } = useDataTableContext();
3033
+ const TableRowSelector = ({ row }) => {
3034
+ const { table, rowSelection, setRowSelection } = useDataTableContext();
2943
3035
  const SELECTION_BOX_WIDTH = 20;
2944
- return (jsxRuntime.jsx(react.Table.Cell, { padding: `${table.getDensityValue()}px`, display: "grid", color: {
2945
- base: "colorPalette.900",
2946
- _dark: "colorPalette.100",
3036
+ const isSelected = isRowSelected(row.id, rowSelection);
3037
+ const canSelect = canRowSelect(row);
3038
+ const toggleHandler = createRowToggleHandler(row, rowSelection, setRowSelection);
3039
+ return (jsxRuntime.jsx(react.Table.Cell, { padding: `${table.getDensityValue()}px`, display: 'grid', color: {
3040
+ base: 'colorPalette.900',
3041
+ _dark: 'colorPalette.100',
2947
3042
  },
2948
- bg: { base: "colorPalette.50", _dark: "colorPalette.950" }, justifyItems: "center", alignItems: "center", children: jsxRuntime.jsx(Checkbox, { width: `${SELECTION_BOX_WIDTH}px`, height: `${SELECTION_BOX_WIDTH}px`, checked: row.getIsSelected(),
2949
- disabled: !row.getCanSelect(),
2950
- onCheckedChange: row.getToggleSelectedHandler() }) }));
3043
+ bg: { base: 'colorPalette.50', _dark: 'colorPalette.950' }, justifyItems: 'center', alignItems: 'center', children: jsxRuntime.jsx(Checkbox, { width: `${SELECTION_BOX_WIDTH}px`, height: `${SELECTION_BOX_WIDTH}px`, checked: isSelected,
3044
+ disabled: !canSelect,
3045
+ onCheckedChange: toggleHandler }) }));
2951
3046
  };
2952
3047
 
2953
3048
  const TableCardContainer = ({ children, variant = "", gap = "1rem", gridTemplateColumns = "repeat(auto-fit, minmax(20rem, 1fr))", direction = "row", ...props }) => {
@@ -2961,16 +3056,16 @@ const DefaultCardTitle = () => {
2961
3056
  return jsxRuntime.jsx(jsxRuntime.Fragment, {});
2962
3057
  };
2963
3058
  const TableCards = ({ isSelectable = false, showDisplayNameOnly = false, renderTitle = DefaultCardTitle, cardBodyProps = {}, }) => {
2964
- const { table } = useDataTableContext();
3059
+ const { table, rowSelection, setRowSelection } = useDataTableContext();
2965
3060
  return (jsxRuntime.jsx(jsxRuntime.Fragment, { children: table.getRowModel().rows.map((row) => {
2966
- return (jsxRuntime.jsx(react.Card.Root, { flex: "1 0 20rem", children: jsxRuntime.jsxs(react.Card.Body, { display: "flex", flexFlow: "column", gap: "0.5rem", ...cardBodyProps, children: [isSelectable && (jsxRuntime.jsx(Checkbox, { isChecked: row.getIsSelected(),
2967
- disabled: !row.getCanSelect(),
3061
+ return (jsxRuntime.jsx(react.Card.Root, { flex: '1 0 20rem', children: jsxRuntime.jsxs(react.Card.Body, { display: 'flex', flexFlow: 'column', gap: '0.5rem', ...cardBodyProps, children: [isSelectable && (jsxRuntime.jsx(Checkbox, { isChecked: isRowSelected(row.id, rowSelection),
3062
+ disabled: !canRowSelect(row),
2968
3063
  // indeterminate: row.getIsSomeSelected(),
2969
- onChange: row.getToggleSelectedHandler() })), renderTitle(row), jsxRuntime.jsx(react.Grid, { templateColumns: "auto 1fr", gap: "1rem", children: row.getVisibleCells().map((cell) => {
2970
- return (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [jsxRuntime.jsxs(react.Box, { children: [showDisplayNameOnly && (jsxRuntime.jsx(react.Text, { fontWeight: "bold", children: cell.column.columnDef.meta?.displayName ??
3064
+ onChange: createRowToggleHandler(row, rowSelection, setRowSelection) })), renderTitle(row), jsxRuntime.jsx(react.Grid, { templateColumns: 'auto 1fr', gap: '1rem', children: row.getVisibleCells().map((cell) => {
3065
+ return (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [jsxRuntime.jsxs(react.Box, { children: [showDisplayNameOnly && (jsxRuntime.jsx(react.Text, { fontWeight: 'bold', children: cell.column.columnDef.meta?.displayName ??
2971
3066
  cell.column.id })), !showDisplayNameOnly && (jsxRuntime.jsx(jsxRuntime.Fragment, { children: reactTable.flexRender(cell.column.columnDef.header,
2972
3067
  // @ts-expect-error Assuming the CellContext interface is the same as HeaderContext
2973
- cell.getContext()) }))] }, `chakra-table-cardcolumnid-${row.id}`), jsxRuntime.jsx(react.Box, { justifySelf: "end", children: reactTable.flexRender(cell.column.columnDef.cell, cell.getContext()) }, `chakra-table-cardcolumn-${row.id}`)] }));
3068
+ cell.getContext()) }))] }, `chakra-table-cardcolumnid-${row.id}`), jsxRuntime.jsx(react.Box, { justifySelf: 'end', children: reactTable.flexRender(cell.column.columnDef.cell, cell.getContext()) }, `chakra-table-cardcolumn-${row.id}`)] }));
2974
3069
  }) })] }) }, `chakra-table-card-${row.id}`));
2975
3070
  }) }));
2976
3071
  };
@@ -2983,7 +3078,7 @@ const TableComponent = ({ render = () => {
2983
3078
  };
2984
3079
 
2985
3080
  const TableFooter = ({ showSelector = false, alwaysShowSelector = true, }) => {
2986
- const table = useDataTableContext().table;
3081
+ const { table, rowSelection, setRowSelection } = useDataTableContext();
2987
3082
  const SELECTION_BOX_WIDTH = 20;
2988
3083
  const [hoveredCheckBox, setHoveredCheckBox] = React.useState(false);
2989
3084
  const handleRowHover = (isHovered) => {
@@ -2993,7 +3088,7 @@ const TableFooter = ({ showSelector = false, alwaysShowSelector = true, }) => {
2993
3088
  if (alwaysShowSelector) {
2994
3089
  return true;
2995
3090
  }
2996
- if (table.getIsAllRowsSelected()) {
3091
+ if (areAllRowsSelected(table, rowSelection)) {
2997
3092
  return true;
2998
3093
  }
2999
3094
  if (hoveredCheckBox) {
@@ -3001,22 +3096,22 @@ const TableFooter = ({ showSelector = false, alwaysShowSelector = true, }) => {
3001
3096
  }
3002
3097
  return false;
3003
3098
  };
3004
- return (jsxRuntime.jsx(react.Table.Footer, { children: table.getFooterGroups().map((footerGroup) => (jsxRuntime.jsxs(react.Table.Row, { display: "flex", children: [showSelector && (jsxRuntime.jsxs(react.Table.Header, { padding: `${table.getDensityValue()}px`, onMouseEnter: () => handleRowHover(true), onMouseLeave: () => handleRowHover(false), display: "grid", children: [isCheckBoxVisible() && (jsxRuntime.jsx(react.Box, { margin: "0rem", display: "grid", justifyItems: "center", alignItems: "center", children: jsxRuntime.jsx(Checkbox, { width: `${SELECTION_BOX_WIDTH}px`, height: `${SELECTION_BOX_WIDTH}px`, isChecked: table.getIsAllRowsSelected(),
3005
- // indeterminate: table.getIsSomeRowsSelected(),
3006
- onChange: table.getToggleAllRowsSelectedHandler() }) })), !isCheckBoxVisible() && (jsxRuntime.jsx(react.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) => (jsxRuntime.jsx(react.Table.Cell, { padding: "0", columnSpan: `${header.colSpan}`,
3099
+ return (jsxRuntime.jsx(react.Table.Footer, { children: table.getFooterGroups().map((footerGroup) => (jsxRuntime.jsxs(react.Table.Row, { display: 'flex', children: [showSelector && (jsxRuntime.jsxs(react.Table.Header, { padding: `${table.getDensityValue()}px`, onMouseEnter: () => handleRowHover(true), onMouseLeave: () => handleRowHover(false), display: 'grid', children: [isCheckBoxVisible() && (jsxRuntime.jsx(react.Box, { margin: '0rem', display: 'grid', justifyItems: 'center', alignItems: 'center', children: jsxRuntime.jsx(Checkbox, { width: `${SELECTION_BOX_WIDTH}px`, height: `${SELECTION_BOX_WIDTH}px`, isChecked: areAllRowsSelected(table, rowSelection),
3100
+ // indeterminate: areSomeRowsSelected(table, rowSelection),
3101
+ onChange: createToggleAllRowsHandler(table, rowSelection, setRowSelection) }) })), !isCheckBoxVisible() && (jsxRuntime.jsx(react.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) => (jsxRuntime.jsx(react.Table.Cell, { padding: '0', columnSpan: `${header.colSpan}`,
3007
3102
  // styling resize and pinning start
3008
- maxWidth: `${header.getSize()}px`, width: `${header.getSize()}px`, display: "grid", children: jsxRuntime.jsx(react.MenuRoot, { children: jsxRuntime.jsx(react.MenuTrigger, { asChild: true, children: jsxRuntime.jsx(react.Box, { padding: `${table.getDensityValue()}px`, display: "flex", alignItems: "center", justifyContent: "start", borderRadius: "0rem", children: jsxRuntime.jsxs(react.Flex, { gap: "0.5rem", alignItems: "center", children: [header.isPlaceholder
3103
+ maxWidth: `${header.getSize()}px`, width: `${header.getSize()}px`, display: 'grid', children: jsxRuntime.jsx(react.MenuRoot, { children: jsxRuntime.jsx(react.MenuTrigger, { asChild: true, children: jsxRuntime.jsx(react.Box, { padding: `${table.getDensityValue()}px`, display: 'flex', alignItems: 'center', justifyContent: 'start', borderRadius: '0rem', children: jsxRuntime.jsxs(react.Flex, { gap: "0.5rem", alignItems: 'center', children: [header.isPlaceholder
3009
3104
  ? null
3010
- : reactTable.flexRender(header.column.columnDef.footer, header.getContext()), jsxRuntime.jsx(react.Box, { children: header.column.getCanSort() && (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [header.column.getIsSorted() === false && jsxRuntime.jsx(jsxRuntime.Fragment, {}), header.column.getIsSorted() === "asc" && (jsxRuntime.jsx(bi.BiUpArrow, {})), header.column.getIsSorted() === "desc" && (jsxRuntime.jsx(bi.BiDownArrow, {}))] })) })] }) }) }) }) }, `chakra-table-footer-${header.column.id}-${footerGroup.id}`)))] }, `chakra-table-footergroup-${footerGroup.id}`))) }));
3105
+ : reactTable.flexRender(header.column.columnDef.footer, header.getContext()), jsxRuntime.jsx(react.Box, { children: header.column.getCanSort() && (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [header.column.getIsSorted() === false && jsxRuntime.jsx(jsxRuntime.Fragment, {}), header.column.getIsSorted() === 'asc' && (jsxRuntime.jsx(bi.BiUpArrow, {})), header.column.getIsSorted() === 'desc' && (jsxRuntime.jsx(bi.BiDownArrow, {}))] })) })] }) }) }) }) }, `chakra-table-footer-${header.column.id}-${footerGroup.id}`)))] }, `chakra-table-footergroup-${footerGroup.id}`))) }));
3011
3106
  };
3012
3107
 
3013
3108
  // Default text values
3014
3109
  const DEFAULT_HEADER_TEXTS = {
3015
- pinColumn: "Pin Column",
3016
- cancelPin: "Cancel Pin",
3017
- sortAscending: "Sort Ascending",
3018
- sortDescending: "Sort Descending",
3019
- clearSorting: "Clear Sorting",
3110
+ pinColumn: 'Pin Column',
3111
+ cancelPin: 'Cancel Pin',
3112
+ sortAscending: 'Sort Ascending',
3113
+ sortDescending: 'Sort Descending',
3114
+ clearSorting: 'Clear Sorting',
3020
3115
  };
3021
3116
  /**
3022
3117
  * TableHeader component with configurable text strings.
@@ -3049,7 +3144,7 @@ const DEFAULT_HEADER_TEXTS = {
3049
3144
  * ];
3050
3145
  */
3051
3146
  const TableHeader = ({ canResize = true, showSelector = false, isSticky = true, tableHeaderProps = {}, tableRowProps = {}, defaultTexts = {}, }) => {
3052
- const { table } = useDataTableContext();
3147
+ const { table, rowSelection, setRowSelection } = useDataTableContext();
3053
3148
  const SELECTION_BOX_WIDTH = 20;
3054
3149
  // Merge default texts with provided defaults
3055
3150
  const mergedDefaultTexts = { ...DEFAULT_HEADER_TEXTS, ...defaultTexts };
@@ -3062,58 +3157,105 @@ const TableHeader = ({ canResize = true, showSelector = false, isSticky = true,
3062
3157
  const thProps = header.column.getIsPinned()
3063
3158
  ? {
3064
3159
  left: showSelector
3065
- ? `${header.getStart("left") + SELECTION_BOX_WIDTH + table.getDensityValue() * 2}px`
3066
- : `${header.getStart("left")}px`,
3067
- position: "sticky",
3160
+ ? `${header.getStart('left') + SELECTION_BOX_WIDTH + table.getDensityValue() * 2}px`
3161
+ : `${header.getStart('left')}px`,
3162
+ position: 'sticky',
3068
3163
  zIndex: 100 + 1,
3069
3164
  }
3070
3165
  : {};
3071
3166
  return thProps;
3072
3167
  };
3073
3168
  const stickyProps = {
3074
- position: "sticky",
3169
+ position: 'sticky',
3075
3170
  top: 0,
3076
3171
  };
3077
- return (jsxRuntime.jsx(react.Table.Header, { ...(isSticky ? stickyProps : {}), bgColor: "transparent", ...tableHeaderProps, children: table.getHeaderGroups().map((headerGroup) => (jsxRuntime.jsxs(react.Table.Row, { display: "flex", bgColor: "transparent", ...tableRowProps, children: [showSelector && (jsxRuntime.jsx(react.Table.ColumnHeader, { padding: `${table.getDensityValue()}px`, display: "grid", color: {
3078
- base: "colorPalette.900",
3079
- _dark: "colorPalette.100",
3172
+ const handleAutoSize = (header, event) => {
3173
+ const headerElement = event.currentTarget.closest('th');
3174
+ if (!headerElement)
3175
+ return;
3176
+ // Find the table container
3177
+ const tableContainer = headerElement.closest('[role="table"]') ||
3178
+ headerElement.closest('table') ||
3179
+ headerElement.closest('div');
3180
+ if (!tableContainer)
3181
+ return;
3182
+ // Calculate the actual column index accounting for selector column
3183
+ const columnIndex = header.index;
3184
+ const actualColumnIndex = showSelector ? columnIndex + 1 : columnIndex;
3185
+ // Get all rows (header and body) - Chakra UI Table uses flex layout
3186
+ const rows = Array.from(tableContainer.querySelectorAll('[role="row"], tr'));
3187
+ let maxWidth = 0;
3188
+ // Measure all cells in this column
3189
+ rows.forEach((row) => {
3190
+ // Get all cells in the row (td, th, or Chakra Table.Cell/Table.ColumnHeader)
3191
+ const cells = Array.from(row.children);
3192
+ const cell = cells[actualColumnIndex];
3193
+ if (cell) {
3194
+ // Create a temporary clone to measure content without constraints
3195
+ const clone = cell.cloneNode(true);
3196
+ clone.style.position = 'absolute';
3197
+ clone.style.visibility = 'hidden';
3198
+ clone.style.width = 'auto';
3199
+ clone.style.maxWidth = 'none';
3200
+ clone.style.whiteSpace = 'nowrap';
3201
+ clone.style.flex = 'none';
3202
+ document.body.appendChild(clone);
3203
+ const width = clone.scrollWidth;
3204
+ maxWidth = Math.max(maxWidth, width);
3205
+ document.body.removeChild(clone);
3206
+ }
3207
+ });
3208
+ // Add padding for better UX (density padding + some extra space)
3209
+ const padding = table.getDensityValue() * 2 + 4;
3210
+ const minSize = header.column.columnDef.minSize || 10;
3211
+ const finalWidth = Math.max(maxWidth + padding, minSize);
3212
+ // Set the column size - setSize exists on column but may not be fully typed in @tanstack/react-table
3213
+ console.log('finalWidth', finalWidth);
3214
+ table.setColumnSizing((current) => ({
3215
+ ...current,
3216
+ [header.id]: finalWidth,
3217
+ }));
3218
+ };
3219
+ return (jsxRuntime.jsx(react.Table.Header, { ...(isSticky ? stickyProps : {}), bgColor: 'transparent', ...tableHeaderProps, children: table.getHeaderGroups().map((headerGroup) => (jsxRuntime.jsxs(react.Table.Row, { display: 'flex', bgColor: 'transparent', ...tableRowProps, children: [showSelector && (jsxRuntime.jsx(react.Table.ColumnHeader, { padding: `${table.getDensityValue()}px`, display: 'grid', color: {
3220
+ base: 'colorPalette.900',
3221
+ _dark: 'colorPalette.100',
3080
3222
  },
3081
- bg: { base: "colorPalette.50", _dark: "colorPalette.950" }, justifyItems: "center", alignItems: "center", children: jsxRuntime.jsx(Checkbox, { width: `${SELECTION_BOX_WIDTH}px`, height: `${SELECTION_BOX_WIDTH}px`, checked: table.getIsAllRowsSelected(),
3082
- // indeterminate: table.getIsSomeRowsSelected(),
3083
- onChange: table.getToggleAllRowsSelectedHandler() }) })), headerGroup.headers.map((header) => {
3223
+ bg: { base: 'colorPalette.50', _dark: 'colorPalette.950' }, justifyItems: 'center', alignItems: 'center', children: jsxRuntime.jsx(Checkbox, { width: `${SELECTION_BOX_WIDTH}px`, height: `${SELECTION_BOX_WIDTH}px`, checked: areAllRowsSelected(table, rowSelection),
3224
+ // indeterminate: areSomeRowsSelected(table, rowSelection),
3225
+ onChange: createToggleAllRowsHandler(table, rowSelection, setRowSelection) }) })), headerGroup.headers.map((header) => {
3084
3226
  const resizeProps = {
3085
3227
  onMouseDown: header.getResizeHandler(),
3086
3228
  onTouchStart: header.getResizeHandler(),
3087
- cursor: "col-resize",
3229
+ cursor: 'col-resize',
3088
3230
  };
3089
3231
  return (jsxRuntime.jsxs(react.Table.ColumnHeader, { padding: 0, columnSpan: `${header.colSpan}`,
3090
3232
  // styling resize and pinning start
3091
- flex: `${canResize ? "0" : "1"} 0 ${header.column.getSize()}px`, display: "grid", gridTemplateColumns: "1fr auto", zIndex: 1500 + header.index, color: {
3092
- base: "colorPalette.800",
3093
- _dark: "colorPalette.200",
3233
+ flex: `${canResize ? '0' : '1'} 0 ${header.column.getSize()}px`, display: 'grid', gridTemplateColumns: '1fr auto', zIndex: 1500 + header.index, color: {
3234
+ base: 'colorPalette.800',
3235
+ _dark: 'colorPalette.200',
3094
3236
  },
3095
- bg: { base: "colorPalette.100", _dark: "colorPalette.900" }, ...getThProps(header), children: [jsxRuntime.jsxs(MenuRoot, { children: [jsxRuntime.jsx(MenuTrigger, { asChild: true, children: jsxRuntime.jsx(react.Flex, { padding: `${table.getDensityValue()}px`, alignItems: "center", justifyContent: "start", borderRadius: "0rem", overflow: "auto", color: {
3096
- base: "colorPalette.800",
3097
- _dark: "colorPalette.200",
3237
+ bg: { base: 'colorPalette.100', _dark: 'colorPalette.900' }, ...getThProps(header), children: [jsxRuntime.jsxs(MenuRoot, { children: [jsxRuntime.jsx(MenuTrigger, { asChild: true, children: jsxRuntime.jsx(react.Flex, { padding: `${table.getDensityValue()}px`, alignItems: 'center', justifyContent: 'start', borderRadius: '0rem', overflow: 'auto', color: {
3238
+ base: 'colorPalette.800',
3239
+ _dark: 'colorPalette.200',
3098
3240
  _hover: {
3099
- base: "colorPalette.700",
3100
- _dark: "colorPalette.300",
3241
+ base: 'colorPalette.700',
3242
+ _dark: 'colorPalette.300',
3101
3243
  },
3102
3244
  },
3103
3245
  bg: {
3104
- base: "colorPalette.100",
3105
- _dark: "colorPalette.900",
3246
+ base: 'colorPalette.100',
3247
+ _dark: 'colorPalette.900',
3106
3248
  _hover: {
3107
- base: "colorPalette.200",
3108
- _dark: "colorPalette.800",
3249
+ base: 'colorPalette.200',
3250
+ _dark: 'colorPalette.800',
3109
3251
  },
3110
- }, children: jsxRuntime.jsxs(react.Flex, { gap: "0.5rem", alignItems: "center", children: [header.isPlaceholder
3252
+ }, children: jsxRuntime.jsxs(react.Flex, { gap: "0.5rem", alignItems: 'center', children: [header.isPlaceholder
3111
3253
  ? null
3112
- : reactTable.flexRender(header.column.columnDef.header, header.getContext()), jsxRuntime.jsx(react.Box, { children: header.column.getCanSort() && (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [header.column.getIsSorted() === false && jsxRuntime.jsx(jsxRuntime.Fragment, {}), header.column.getIsSorted() === "asc" && (jsxRuntime.jsx(bi.BiUpArrow, {})), header.column.getIsSorted() === "desc" && (jsxRuntime.jsx(bi.BiDownArrow, {}))] })) }), jsxRuntime.jsx(react.Box, { children: header.column.getIsFiltered() && jsxRuntime.jsx(md.MdFilterListAlt, {}) })] }) }) }), jsxRuntime.jsxs(MenuContent, { children: [!header.column.getIsPinned() && (jsxRuntime.jsx(MenuItem, { asChild: true, value: "pin-column", children: jsxRuntime.jsxs(Button, { variant: "ghost", onClick: () => {
3113
- header.column.pin("left");
3114
- }, children: [jsxRuntime.jsx(md.MdPushPin, {}), getHeaderText(header, "pinColumn")] }) })), header.column.getIsPinned() && (jsxRuntime.jsx(MenuItem, { asChild: true, value: "cancel-pin", children: jsxRuntime.jsxs(Button, { variant: "ghost", onClick: () => {
3254
+ : reactTable.flexRender(header.column.columnDef.header, header.getContext()), jsxRuntime.jsx(react.Box, { children: header.column.getCanSort() && (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [header.column.getIsSorted() === false && jsxRuntime.jsx(jsxRuntime.Fragment, {}), header.column.getIsSorted() === 'asc' && (jsxRuntime.jsx(bi.BiUpArrow, {})), header.column.getIsSorted() === 'desc' && (jsxRuntime.jsx(bi.BiDownArrow, {}))] })) }), jsxRuntime.jsx(react.Box, { children: header.column.getIsFiltered() && jsxRuntime.jsx(md.MdFilterListAlt, {}) })] }) }) }), jsxRuntime.jsxs(MenuContent, { children: [!header.column.getIsPinned() && (jsxRuntime.jsx(MenuItem, { asChild: true, value: "pin-column", children: jsxRuntime.jsxs(Button, { variant: 'ghost', onClick: () => {
3255
+ header.column.pin('left');
3256
+ }, children: [jsxRuntime.jsx(md.MdPushPin, {}), getHeaderText(header, 'pinColumn')] }) })), header.column.getIsPinned() && (jsxRuntime.jsx(MenuItem, { asChild: true, value: "cancel-pin", children: jsxRuntime.jsxs(Button, { variant: 'ghost', onClick: () => {
3115
3257
  header.column.pin(false);
3116
- }, children: [jsxRuntime.jsx(md.MdCancel, {}), getHeaderText(header, "cancelPin")] }) })), header.column.getCanSort() && (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [jsxRuntime.jsx(MenuItem, { asChild: true, value: "sort-ascend", children: jsxRuntime.jsxs(Button, { variant: "ghost", onClick: () => {
3258
+ }, children: [jsxRuntime.jsx(md.MdCancel, {}), getHeaderText(header, 'cancelPin')] }) })), header.column.getCanSort() && (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [jsxRuntime.jsx(MenuItem, { asChild: true, value: "sort-ascend", children: jsxRuntime.jsxs(Button, { variant: 'ghost', onClick: () => {
3117
3259
  table.setSorting((state) => {
3118
3260
  return [
3119
3261
  ...state.filter((column) => {
@@ -3122,7 +3264,7 @@ const TableHeader = ({ canResize = true, showSelector = false, isSticky = true,
3122
3264
  { id: header.id, desc: false },
3123
3265
  ];
3124
3266
  });
3125
- }, children: [jsxRuntime.jsx(gr.GrAscend, {}), getHeaderText(header, "sortAscending")] }) }), jsxRuntime.jsx(MenuItem, { asChild: true, value: "sort-descend", children: jsxRuntime.jsxs(Button, { variant: "ghost", onClick: () => {
3267
+ }, children: [jsxRuntime.jsx(gr.GrAscend, {}), getHeaderText(header, 'sortAscending')] }) }), jsxRuntime.jsx(MenuItem, { asChild: true, value: "sort-descend", children: jsxRuntime.jsxs(Button, { variant: 'ghost', onClick: () => {
3126
3268
  table.setSorting((state) => {
3127
3269
  return [
3128
3270
  ...state.filter((column) => {
@@ -3131,14 +3273,16 @@ const TableHeader = ({ canResize = true, showSelector = false, isSticky = true,
3131
3273
  { id: header.id, desc: true },
3132
3274
  ];
3133
3275
  });
3134
- }, children: [jsxRuntime.jsx(gr.GrDescend, {}), getHeaderText(header, "sortDescending")] }) }), header.column.getIsSorted() && (jsxRuntime.jsx(MenuItem, { asChild: true, value: "clear-sorting", children: jsxRuntime.jsxs(Button, { variant: "ghost", onClick: () => {
3276
+ }, children: [jsxRuntime.jsx(gr.GrDescend, {}), getHeaderText(header, 'sortDescending')] }) }), header.column.getIsSorted() && (jsxRuntime.jsx(MenuItem, { asChild: true, value: "clear-sorting", children: jsxRuntime.jsxs(Button, { variant: 'ghost', onClick: () => {
3135
3277
  header.column.clearSorting();
3136
- }, children: [jsxRuntime.jsx(md.MdClear, {}), getHeaderText(header, "clearSorting")] }) }))] }))] })] }), canResize && (jsxRuntime.jsx(react.Box, { borderRight: "0.2rem solid", borderRightColor: header.column.getIsResizing()
3137
- ? "colorPalette.700"
3138
- : "transparent", position: "relative", right: "0.1rem", width: "2px", height: "100%", userSelect: "none", style: { touchAction: "none" }, _hover: {
3278
+ }, children: [jsxRuntime.jsx(md.MdClear, {}), getHeaderText(header, 'clearSorting')] }) }))] }))] })] }), canResize && (jsxRuntime.jsx(react.Box, { borderRight: '0.2rem solid', borderRightColor: header.column.getIsResizing()
3279
+ ? 'colorPalette.700'
3280
+ : 'transparent', position: 'relative', right: '0.1rem', width: '2px', height: '100%', userSelect: 'none', style: { touchAction: 'none' }, _hover: {
3139
3281
  borderRightColor: header.column.getIsResizing()
3140
- ? "colorPalette.700"
3141
- : "colorPalette.400",
3282
+ ? 'colorPalette.700'
3283
+ : 'colorPalette.400',
3284
+ }, onDoubleClick: (e) => {
3285
+ handleAutoSize(header, e);
3142
3286
  }, ...resizeProps }))] }, `chakra-table-header-${header.id}`));
3143
3287
  })] }, `chakra-table-headergroup-${headerGroup.id}`))) }));
3144
3288
  };
@@ -3627,7 +3771,7 @@ const FormRoot = ({ schema, idMap, setIdMap, form, serverUrl, translate, childre
3627
3771
  showSubmitButton: true,
3628
3772
  showResetButton: true,
3629
3773
  showTitle: true,
3630
- }, requireConfirmation = false, dateTimePickerLabels, idPickerLabels, enumPickerLabels, filePickerLabels, comboboxInDialog = false, }) => {
3774
+ }, requireConfirmation = false, dateTimePickerLabels, idPickerLabels, enumPickerLabels, filePickerLabels, insideDialog = false, }) => {
3631
3775
  const [isSuccess, setIsSuccess] = React.useState(false);
3632
3776
  const [isError, setIsError] = React.useState(false);
3633
3777
  const [isSubmiting, setIsSubmiting] = React.useState(false);
@@ -3718,7 +3862,7 @@ const FormRoot = ({ schema, idMap, setIdMap, form, serverUrl, translate, childre
3718
3862
  enumPickerLabels,
3719
3863
  filePickerLabels,
3720
3864
  ajvResolver: ajvResolver(schema),
3721
- comboboxInDialog,
3865
+ insideDialog,
3722
3866
  }, children: jsxRuntime.jsx(reactHookForm.FormProvider, { ...form, children: children }) }));
3723
3867
  };
3724
3868
 
@@ -4179,7 +4323,7 @@ const DateRangePicker = ({ column, schema, prefix, }) => {
4179
4323
 
4180
4324
  const EnumPicker = ({ column, isMultiple = false, schema, prefix, showTotalAndLimit = false, }) => {
4181
4325
  const { watch, formState: { errors }, setValue, } = reactHookForm.useFormContext();
4182
- const { enumPickerLabels, comboboxInDialog } = useSchemaContext();
4326
+ const { enumPickerLabels, insideDialog } = useSchemaContext();
4183
4327
  const formI18n = useFormI18n(column, prefix);
4184
4328
  const { required, variant } = schema;
4185
4329
  const isRequired = required?.some((columnId) => columnId === column);
@@ -4248,11 +4392,11 @@ const EnumPicker = ({ column, isMultiple = false, schema, prefix, showTotalAndLi
4248
4392
  }, children: !!renderDisplay === true
4249
4393
  ? renderDisplay(enumValue)
4250
4394
  : formI18n.t(enumValue) }, enumValue));
4251
- }) })), jsxRuntime.jsxs(react.Combobox.Root, { collection: collection, value: currentValue, onValueChange: handleValueChange, onInputValueChange: handleInputValueChange, multiple: isMultiple, closeOnSelect: !isMultiple, openOnClick: true, invalid: !!errors[colLabel], width: "100%", positioning: comboboxInDialog
4395
+ }) })), jsxRuntime.jsxs(react.Combobox.Root, { collection: collection, value: currentValue, onValueChange: handleValueChange, onInputValueChange: handleInputValueChange, multiple: isMultiple, closeOnSelect: !isMultiple, openOnClick: true, invalid: !!errors[colLabel], width: "100%", positioning: insideDialog
4252
4396
  ? { strategy: 'fixed', hideWhenDetached: true }
4253
4397
  : undefined, children: [jsxRuntime.jsxs(react.Combobox.Control, { children: [jsxRuntime.jsx(react.Combobox.Input, { placeholder: enumPickerLabels?.typeToSearch ?? formI18n.t('type_to_search') }), jsxRuntime.jsxs(react.Combobox.IndicatorGroup, { children: [!isMultiple && currentValue.length > 0 && (jsxRuntime.jsx(react.Combobox.ClearTrigger, { onClick: () => {
4254
4398
  setValue(colLabel, '');
4255
- } })), jsxRuntime.jsx(react.Combobox.Trigger, {})] })] }), comboboxInDialog ? (jsxRuntime.jsx(react.Combobox.Positioner, { children: jsxRuntime.jsxs(react.Combobox.Content, { children: [showTotalAndLimit && (jsxRuntime.jsx(react.Text, { p: 2, fontSize: "sm", color: "fg.muted", children: `${enumPickerLabels?.total ?? formI18n.t('total')}: ${collection.items.length}` })), collection.items.length === 0 ? (jsxRuntime.jsx(react.Combobox.Empty, { children: enumPickerLabels?.emptySearchResult ??
4399
+ } })), jsxRuntime.jsx(react.Combobox.Trigger, {})] })] }), insideDialog ? (jsxRuntime.jsx(react.Combobox.Positioner, { children: jsxRuntime.jsxs(react.Combobox.Content, { children: [showTotalAndLimit && (jsxRuntime.jsx(react.Text, { p: 2, fontSize: "sm", color: "fg.muted", children: `${enumPickerLabels?.total ?? formI18n.t('total')}: ${collection.items.length}` })), collection.items.length === 0 ? (jsxRuntime.jsx(react.Combobox.Empty, { children: enumPickerLabels?.emptySearchResult ??
4256
4400
  formI18n.t('empty_search_result') })) : (jsxRuntime.jsx(jsxRuntime.Fragment, { children: collection.items.map((item, index) => (jsxRuntime.jsxs(react.Combobox.Item, { item: item, children: [jsxRuntime.jsx(react.Combobox.ItemText, { children: item.label }), jsxRuntime.jsx(react.Combobox.ItemIndicator, {})] }, item.value ?? `item-${index}`))) }))] }) })) : (jsxRuntime.jsx(react.Portal, { children: jsxRuntime.jsx(react.Combobox.Positioner, { children: jsxRuntime.jsxs(react.Combobox.Content, { children: [showTotalAndLimit && (jsxRuntime.jsx(react.Text, { p: 2, fontSize: "sm", color: "fg.muted", children: `${enumPickerLabels?.total ?? formI18n.t('total')}: ${collection.items.length}` })), collection.items.length === 0 ? (jsxRuntime.jsx(react.Combobox.Empty, { children: enumPickerLabels?.emptySearchResult ??
4257
4401
  formI18n.t('empty_search_result') })) : (jsxRuntime.jsx(jsxRuntime.Fragment, { children: collection.items.map((item, index) => (jsxRuntime.jsxs(react.Combobox.Item, { item: item, children: [jsxRuntime.jsx(react.Combobox.ItemText, { children: item.label }), jsxRuntime.jsx(react.Combobox.ItemIndicator, {})] }, item.value ?? `item-${index}`))) }))] }) }) }))] })] }));
4258
4402
  };
@@ -5043,7 +5187,7 @@ const getTableData = async ({ serverUrl, in_table, searching = "", where = [], l
5043
5187
 
5044
5188
  const IdPicker = ({ column, schema, prefix, isMultiple = false, }) => {
5045
5189
  const { watch, getValues, formState: { errors }, setValue, } = reactHookForm.useFormContext();
5046
- const { serverUrl, idMap, setIdMap, schema: parentSchema, idPickerLabels, comboboxInDialog, } = useSchemaContext();
5190
+ const { serverUrl, idMap, setIdMap, idPickerLabels, insideDialog } = useSchemaContext();
5047
5191
  const formI18n = useFormI18n(column, prefix);
5048
5192
  const { required, gridColumn = 'span 12', gridRow = 'span 1', renderDisplay, foreign_key, } = schema;
5049
5193
  const isRequired = required?.some((columnId) => columnId === column);
@@ -5120,60 +5264,6 @@ const IdPicker = ({ column, schema, prefix, isMultiple = false, }) => {
5120
5264
  enabled: true, // Always enabled for combobox
5121
5265
  staleTime: 300000,
5122
5266
  });
5123
- // Query for currently selected items (to display them properly)
5124
- // This query is needed for side effects (populating idMap) even though the result isn't directly used
5125
- reactQuery.useQuery({
5126
- queryKey: [
5127
- `idpicker-default`,
5128
- {
5129
- form: parentSchema.title,
5130
- column,
5131
- id: isMultiple ? currentIds : currentId,
5132
- },
5133
- ],
5134
- queryFn: async () => {
5135
- const queryId = currentId;
5136
- const queryIds = currentIds;
5137
- if (customQueryFn) {
5138
- const { data, idMap } = await customQueryFn({
5139
- searching: '',
5140
- limit: isMultiple ? queryIds.length : 1,
5141
- offset: 0,
5142
- where: [{ id: column_ref, value: isMultiple ? queryIds : queryId }],
5143
- });
5144
- setIdMap((state) => {
5145
- return { ...state, ...idMap };
5146
- });
5147
- return data;
5148
- }
5149
- if (!queryId && (!queryIds || queryIds.length === 0)) {
5150
- return { data: [] };
5151
- }
5152
- const data = await getTableData({
5153
- serverUrl,
5154
- searching: '',
5155
- in_table: table,
5156
- where: [{ id: column_ref, value: isMultiple ? queryIds : queryId }],
5157
- limit: isMultiple ? queryIds.length : 1,
5158
- offset: 0,
5159
- });
5160
- const newMap = Object.fromEntries((data ?? { data: [] }).data.map((item) => {
5161
- return [
5162
- item[column_ref],
5163
- {
5164
- ...item,
5165
- },
5166
- ];
5167
- }));
5168
- setIdMap((state) => {
5169
- return { ...state, ...newMap };
5170
- });
5171
- return data;
5172
- },
5173
- enabled: isMultiple
5174
- ? Array.isArray(currentIds) && currentIds.length > 0
5175
- : !!currentId,
5176
- });
5177
5267
  const { isLoading, isFetching, data, isPending, isError } = query;
5178
5268
  const dataList = data?.data ?? [];
5179
5269
  // Check if we're currently searching (user typed but debounce hasn't fired yet)
@@ -5236,11 +5326,11 @@ const IdPicker = ({ column, schema, prefix, isMultiple = false, }) => {
5236
5326
  }, children: !!renderDisplay === true
5237
5327
  ? renderDisplay(item)
5238
5328
  : item[display_column] }, id));
5239
- }) })), jsxRuntime.jsxs(react.Combobox.Root, { collection: collection, value: currentValue, onValueChange: handleValueChange, onInputValueChange: handleInputValueChange, multiple: isMultiple, closeOnSelect: !isMultiple, openOnClick: true, invalid: !!errors[colLabel], width: "100%", positioning: comboboxInDialog
5329
+ }) })), jsxRuntime.jsxs(react.Combobox.Root, { collection: collection, value: currentValue, onValueChange: handleValueChange, onInputValueChange: handleInputValueChange, multiple: isMultiple, closeOnSelect: !isMultiple, openOnClick: true, invalid: !!errors[colLabel], width: "100%", positioning: insideDialog
5240
5330
  ? { strategy: 'fixed', hideWhenDetached: true }
5241
5331
  : undefined, children: [jsxRuntime.jsxs(react.Combobox.Control, { children: [jsxRuntime.jsx(react.Combobox.Input, { placeholder: idPickerLabels?.typeToSearch ?? formI18n.t('type_to_search') }), jsxRuntime.jsxs(react.Combobox.IndicatorGroup, { children: [(isFetching || isLoading || isPending) && jsxRuntime.jsx(react.Spinner, { size: "xs" }), isError && (jsxRuntime.jsx(react.Icon, { color: "fg.error", children: jsxRuntime.jsx(bi.BiError, {}) })), !isMultiple && currentValue.length > 0 && (jsxRuntime.jsx(react.Combobox.ClearTrigger, { onClick: () => {
5242
5332
  setValue(colLabel, '');
5243
- } })), jsxRuntime.jsx(react.Combobox.Trigger, {})] })] }), comboboxInDialog ? (jsxRuntime.jsx(react.Combobox.Positioner, { children: jsxRuntime.jsx(react.Combobox.Content, { children: isError ? (jsxRuntime.jsx(react.Text, { p: 2, color: "fg.error", fontSize: "sm", children: formI18n.t('loading_failed') })) : isFetching || isLoading || isPending || isSearching ? (
5333
+ } })), jsxRuntime.jsx(react.Combobox.Trigger, {})] })] }), insideDialog ? (jsxRuntime.jsx(react.Combobox.Positioner, { children: jsxRuntime.jsx(react.Combobox.Content, { children: isError ? (jsxRuntime.jsx(react.Text, { p: 2, color: "fg.error", fontSize: "sm", children: formI18n.t('loading_failed') })) : isFetching || isLoading || isPending || isSearching ? (
5244
5334
  // Show skeleton items to prevent UI shift
5245
5335
  jsxRuntime.jsx(jsxRuntime.Fragment, { children: Array.from({ length: 5 }).map((_, index) => (jsxRuntime.jsx(react.Flex, { p: 2, align: "center", gap: 2, children: jsxRuntime.jsx(react.Skeleton, { height: "20px", flex: "1" }) }, `skeleton-${index}`))) })) : collection.items.length === 0 ? (jsxRuntime.jsx(react.Combobox.Empty, { children: searchText
5246
5336
  ? idPickerLabels?.emptySearchResult ??
@@ -7283,7 +7373,7 @@ const DensityFeature = {
7283
7373
  // define the new feature's initial state
7284
7374
  getInitialState: (state) => {
7285
7375
  return {
7286
- density: "sm",
7376
+ density: 'sm',
7287
7377
  ...state,
7288
7378
  };
7289
7379
  },
@@ -7291,7 +7381,7 @@ const DensityFeature = {
7291
7381
  getDefaultOptions: (table) => {
7292
7382
  return {
7293
7383
  enableDensity: true,
7294
- onDensityChange: reactTable.makeStateUpdater("density", table),
7384
+ onDensityChange: reactTable.makeStateUpdater('density', table),
7295
7385
  };
7296
7386
  },
7297
7387
  // if you need to add a default column definition...
@@ -7311,13 +7401,16 @@ const DensityFeature = {
7311
7401
  table.setDensity((old) => {
7312
7402
  if (value)
7313
7403
  return value;
7314
- if (old === "sm") {
7315
- return "md";
7404
+ if (old === 'xs') {
7405
+ return 'sm';
7406
+ }
7407
+ if (old === 'sm') {
7408
+ return 'md';
7316
7409
  }
7317
- if (old === "md") {
7318
- return "lg";
7410
+ if (old === 'md') {
7411
+ return 'lg';
7319
7412
  }
7320
- return "sm";
7413
+ return 'xs';
7321
7414
  });
7322
7415
  };
7323
7416
  table.getDensityValue = (value) => {
@@ -7328,13 +7421,16 @@ const DensityFeature = {
7328
7421
  else {
7329
7422
  density = table.getState().density;
7330
7423
  }
7331
- if (density === "sm") {
7332
- return 8;
7424
+ if (density === 'xs') {
7425
+ return 2;
7426
+ }
7427
+ if (density === 'sm') {
7428
+ return 4;
7333
7429
  }
7334
- if (density === "md") {
7335
- return 16;
7430
+ if (density === 'md') {
7431
+ return 8;
7336
7432
  }
7337
- return 32;
7433
+ return 12;
7338
7434
  };
7339
7435
  },
7340
7436
  // if you need to add row instance APIs...
@@ -7585,6 +7681,7 @@ exports.ResetFilteringButton = ResetFilteringButton;
7585
7681
  exports.ResetSelectionButton = ResetSelectionButton;
7586
7682
  exports.ResetSortingButton = ResetSortingButton;
7587
7683
  exports.RowCountText = RowCountText;
7684
+ exports.SelectAllRowsToggle = SelectAllRowsToggle;
7588
7685
  exports.Table = Table;
7589
7686
  exports.TableBody = TableBody;
7590
7687
  exports.TableCardContainer = TableCardContainer;