@wisdomgarden/mantine-datatable 8.3.1-3.1

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.
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../package/index.ts","../package/DataTable.tsx","../package/DataTableDragToggleProvider.tsx","../package/DataTableColumns.context.ts","../package/DataTableEmptyRow.tsx","../package/DataTableEmptyState.tsx","../package/icons/IconDatabaseOff.tsx","../package/DataTableFooter.tsx","../package/DataTableFooterCell.tsx","../package/hooks/useColumnResize.ts","../package/hooks/useDataTableColumnReorder.ts","../package/hooks/useDataTableColumnResize.ts","../package/hooks/useDataTableColumns.ts","../package/hooks/useDataTableColumnToggle.ts","../package/hooks/useDataTableInjectCssVariables.ts","../package/hooks/useIsomorphicLayoutEffect.ts","../package/hooks/useStableValue.ts","../package/hooks/useLastSelectionChangeIndex.ts","../package/hooks/useMediaQueries.ts","../package/hooks/useMediaQueriesStringOrFunction.ts","../package/hooks/useMediaQueryStringOrFunction.ts","../package/hooks/useRowExpansion.ts","../package/utils.ts","../package/hooks/useRowExpansionStatus.ts","../package/utilityClasses.ts","../package/DataTableFooterSelectorPlaceholderCell.tsx","../package/DataTableHeader.tsx","../package/DataTableColumnGroupHeaderCell.tsx","../package/DataTableHeaderCell.tsx","../package/DataTableHeaderCellFilter.tsx","../package/icons/IconFilter.tsx","../package/icons/IconFilterFilled.tsx","../package/DataTableResizableHeaderHandle.tsx","../package/icons/IconArrowUp.tsx","../package/icons/IconArrowsVertical.tsx","../package/icons/IconGripVertical.tsx","../package/icons/IconX.tsx","../package/DataTableHeaderSelectorCell.tsx","../package/DataTableLoader.tsx","../package/DataTablePagination.tsx","../package/DataTablePageSizeSelector.tsx","../package/cssVariables.ts","../package/icons/IconSelector.tsx","../package/DataTableRow.tsx","../package/DataTableRowCell.tsx","../package/DataTableRowExpansion.tsx","../package/DataTableRowSelectorCell.tsx","../package/DataTableScrollArea.tsx","../package/DataTableDraggableRow.tsx"],"sourcesContent":["'use client';\n\nexport { DataTable } from './DataTable';\nexport { DataTableDraggableRow } from './DataTableDraggableRow';\nexport * from './hooks/useDataTableColumns';\nexport * from './types';\nexport * from './utils';\n","import { Box, Table, type MantineSize } from '@mantine/core';\nimport { useMergedRef } from '@mantine/hooks';\nimport clsx from 'clsx';\nimport type { RefObject } from 'react';\nimport { useCallback, useEffect, useLayoutEffect, useMemo, useRef, useState } from 'react';\nimport { DataTableColumnsProvider } from './DataTableDragToggleProvider';\nimport { DataTableEmptyRow } from './DataTableEmptyRow';\nimport { DataTableEmptyState } from './DataTableEmptyState';\nimport { DataTableFooter } from './DataTableFooter';\nimport { DataTableHeader } from './DataTableHeader';\nimport { DataTableLoader } from './DataTableLoader';\nimport { DataTablePagination } from './DataTablePagination';\nimport { DataTableRow } from './DataTableRow';\nimport { DataTableScrollArea } from './DataTableScrollArea';\nimport { getTableCssVariables } from './cssVariables';\nimport {\n useDataTableColumns,\n useDataTableInjectCssVariables,\n useLastSelectionChangeIndex,\n useRowExpansion,\n} from './hooks';\nimport type { DataTableProps } from './types';\nimport { TEXT_SELECTION_DISABLED } from './utilityClasses';\nimport { differenceBy, flattenColumns, getRecordId, uniqBy } from './utils';\n\nexport function DataTable<T>({\n withTableBorder,\n borderRadius,\n textSelectionDisabled,\n height = '100%',\n minHeight,\n maxHeight,\n shadow,\n verticalAlign = 'center',\n fetching,\n columns,\n storeColumnsKey,\n groups,\n pinFirstColumn,\n pinLastColumn,\n defaultColumnProps,\n defaultColumnRender,\n idAccessor = 'id',\n records,\n selectionTrigger = 'checkbox',\n selectedRecords,\n onSelectedRecordsChange,\n selectionColumnClassName,\n selectionColumnStyle,\n isRecordSelectable,\n selectionCheckboxProps,\n allRecordsSelectionCheckboxProps = { 'aria-label': 'Select all records' },\n getRecordSelectionCheckboxProps = (_, index) => ({ 'aria-label': `Select record ${index + 1}` }),\n sortStatus,\n sortIcons,\n onSortStatusChange,\n horizontalSpacing,\n page,\n onPageChange,\n totalRecords,\n recordsPerPage,\n onRecordsPerPageChange,\n recordsPerPageOptions,\n recordsPerPageLabel = 'Records per page',\n paginationWithEdges,\n paginationWithControls,\n paginationActiveTextColor,\n paginationActiveBackgroundColor,\n paginationSize = 'sm',\n paginationText = ({ from, to, totalRecords }) => `${from} - ${to} / ${totalRecords}`,\n paginationWrapBreakpoint = 'sm',\n getPaginationControlProps = (control) => {\n if (control === 'previous') {\n return { 'aria-label': 'Previous page' };\n } else if (control === 'next') {\n return { 'aria-label': 'Next page' };\n }\n return {};\n },\n getPaginationItemProps,\n renderPagination,\n loaderBackgroundBlur,\n customLoader,\n loaderSize,\n loaderType,\n loaderColor,\n loadingText = '...',\n emptyState,\n noRecordsText = 'No records',\n noRecordsIcon,\n highlightOnHover,\n striped,\n noHeader,\n onRowClick,\n onRowDoubleClick,\n onRowContextMenu,\n onCellClick,\n onCellDoubleClick,\n onCellContextMenu,\n onScroll,\n onScrollToTop,\n onScrollToBottom,\n onScrollToLeft,\n onScrollToRight,\n c,\n backgroundColor,\n borderColor,\n rowBorderColor,\n stripedColor,\n highlightOnHoverColor,\n rowColor,\n rowBackgroundColor,\n rowExpansion,\n rowClassName,\n rowStyle,\n customRowAttributes,\n scrollViewportRef,\n scrollAreaProps,\n tableRef,\n bodyRef,\n m,\n my,\n mx,\n mt,\n mb,\n ml,\n mr,\n className,\n classNames,\n style,\n styles,\n rowFactory,\n tableWrapper,\n ...otherProps\n}: DataTableProps<T>) {\n const effectiveColumns = useMemo(() => {\n return groups ? flattenColumns(groups) : columns!;\n }, [columns, groups]);\n\n // When columns are resizable, start with auto layout to let the browser\n // compute natural widths, then capture them and switch to fixed layout.\n const [fixedLayoutEnabled, setFixedLayoutEnabled] = useState(false);\n\n const { refs, onScroll: handleScrollPositionChange } = useDataTableInjectCssVariables({\n scrollCallbacks: {\n onScroll,\n onScrollToTop,\n onScrollToBottom,\n onScrollToLeft,\n onScrollToRight,\n },\n withRowBorders: otherProps.withRowBorders,\n });\n\n const dragToggle = useDataTableColumns({\n key: storeColumnsKey,\n columns: effectiveColumns,\n headerRef: refs.header as RefObject<HTMLTableSectionElement | null>,\n scrollViewportRef: refs.scrollViewport as RefObject<HTMLElement | null>,\n onFixedLayoutChange: setFixedLayoutEnabled,\n });\n\n const mergedTableRef = useMergedRef(refs.table, tableRef);\n const mergedViewportRef = useMergedRef(refs.scrollViewport, scrollViewportRef);\n const rowExpansionInfo = useRowExpansion<T>({ rowExpansion, records, idAccessor });\n\n // Track when we should reset scroll due to pagination, but defer until data is rendered\n const resetScrollPending = useRef(false);\n const prevPageRef = useRef(page);\n const recordsAtPageChangeRef = useRef<typeof records | undefined>(records);\n\n const handlePageChange = useCallback(\n (newPage: number) => {\n resetScrollPending.current = true;\n recordsAtPageChangeRef.current = records;\n onPageChange!(newPage);\n },\n [onPageChange, records]\n );\n\n // Handle externally-driven page changes\n useEffect(() => {\n if (prevPageRef.current !== page) {\n resetScrollPending.current = true;\n recordsAtPageChangeRef.current = records;\n prevPageRef.current = page;\n }\n }, [page, records]);\n\n const recordsLength = records?.length;\n\n // Reset scroll position when changing pages (sync) or when records change (async)\n useLayoutEffect(() => {\n if (!resetScrollPending.current) return;\n if (fetching) return;\n if (records === recordsAtPageChangeRef.current) return;\n\n const viewport = refs.scrollViewport.current;\n if (!viewport) return;\n\n const raf = requestAnimationFrame(() => {\n viewport.scrollTo({ top: 0, left: 0 });\n resetScrollPending.current = false;\n });\n\n return () => cancelAnimationFrame(raf);\n }, [fetching, records, refs.scrollViewport]);\n\n const recordIds = records?.map((record) => getRecordId(record, idAccessor));\n const selectionColumnVisible = !!selectedRecords;\n const selectedRecordIds = selectedRecords?.map((record) => getRecordId(record, idAccessor));\n const hasRecordsAndSelectedRecords =\n recordIds !== undefined && selectedRecordIds !== undefined && selectedRecordIds.length > 0;\n\n const selectableRecords = isRecordSelectable ? records?.filter(isRecordSelectable) : records;\n const selectableRecordIds = selectableRecords?.map((record) => getRecordId(record, idAccessor));\n\n const allSelectableRecordsSelected =\n hasRecordsAndSelectedRecords && selectableRecordIds!.every((id) => selectedRecordIds.includes(id));\n const someRecordsSelected =\n hasRecordsAndSelectedRecords && selectableRecordIds!.some((id) => selectedRecordIds.includes(id));\n\n const handleHeaderSelectionChange = useCallback(() => {\n if (selectedRecords && onSelectedRecordsChange) {\n onSelectedRecordsChange(\n allSelectableRecordsSelected\n ? selectedRecords.filter((record) => !selectableRecordIds!.includes(getRecordId(record, idAccessor)))\n : uniqBy([...selectedRecords, ...selectableRecords!], (record) => getRecordId(record, idAccessor))\n );\n }\n }, [\n allSelectableRecordsSelected,\n idAccessor,\n onSelectedRecordsChange,\n selectableRecordIds,\n selectableRecords,\n selectedRecords,\n ]);\n\n const { lastSelectionChangeIndex, setLastSelectionChangeIndex } = useLastSelectionChangeIndex(recordIds);\n const selectorCellShadowVisible = selectionColumnVisible && !pinFirstColumn;\n\n const marginProperties = { m, my, mx, mt, mb, ml, mr };\n\n const TableWrapper = useCallback(\n ({ children }: { children: React.ReactNode }) => {\n if (tableWrapper) return tableWrapper({ children });\n return children;\n },\n [tableWrapper]\n );\n\n return (\n <DataTableColumnsProvider {...dragToggle}>\n <Box\n ref={refs.root}\n {...marginProperties}\n className={clsx(\n 'mantine-datatable',\n { 'mantine-datatable-with-border': withTableBorder },\n className,\n classNames?.root\n )}\n style={[\n (theme) => ({\n ...getTableCssVariables({\n theme,\n c,\n backgroundColor,\n borderColor,\n rowBorderColor,\n stripedColor,\n highlightOnHoverColor,\n }),\n borderRadius: theme.radius[borderRadius as MantineSize] || borderRadius,\n boxShadow: theme.shadows[shadow as MantineSize] || shadow,\n height,\n minHeight,\n maxHeight,\n }),\n style,\n styles?.root,\n {\n position: 'relative',\n },\n ]}\n >\n <DataTableScrollArea\n viewportRef={mergedViewportRef}\n leftShadowBehind={selectionColumnVisible || !!pinFirstColumn}\n rightShadowBehind={pinLastColumn}\n onScrollPositionChange={handleScrollPositionChange}\n scrollAreaProps={scrollAreaProps}\n >\n <TableWrapper>\n <Table\n ref={mergedTableRef}\n horizontalSpacing={horizontalSpacing}\n className={clsx(\n 'mantine-datatable-table',\n {\n [TEXT_SELECTION_DISABLED]: textSelectionDisabled,\n 'mantine-datatable-vertical-align-top': verticalAlign === 'top',\n 'mantine-datatable-vertical-align-bottom': verticalAlign === 'bottom',\n 'mantine-datatable-pin-last-column': pinLastColumn,\n 'mantine-datatable-selection-column-visible': selectionColumnVisible,\n 'mantine-datatable-pin-first-column': pinFirstColumn,\n 'mantine-datatable-resizable-columns': dragToggle.hasResizableColumns && fixedLayoutEnabled,\n },\n classNames?.table\n )}\n style={{\n ...styles?.table,\n }}\n data-striped={(recordsLength && striped) || undefined}\n data-highlight-on-hover={highlightOnHover || undefined}\n {...otherProps}\n >\n {noHeader ? null : (\n <DataTableColumnsProvider {...dragToggle}>\n <DataTableHeader<T>\n ref={refs.header}\n selectionColumnHeaderRef={refs.selectionColumnHeader}\n className={classNames?.header}\n style={styles?.header}\n columns={effectiveColumns}\n defaultColumnProps={defaultColumnProps}\n groups={groups}\n sortStatus={sortStatus}\n sortIcons={sortIcons}\n onSortStatusChange={onSortStatusChange}\n selectionTrigger={selectionTrigger}\n selectionVisible={selectionColumnVisible}\n selectionChecked={allSelectableRecordsSelected}\n selectionIndeterminate={someRecordsSelected && !allSelectableRecordsSelected}\n onSelectionChange={handleHeaderSelectionChange}\n selectionCheckboxProps={{ ...selectionCheckboxProps, ...allRecordsSelectionCheckboxProps }}\n selectorCellShadowVisible={selectorCellShadowVisible}\n selectionColumnClassName={selectionColumnClassName}\n selectionColumnStyle={selectionColumnStyle}\n withColumnBorders={otherProps.withColumnBorders}\n />\n </DataTableColumnsProvider>\n )}\n <tbody ref={bodyRef}>\n {recordsLength ? (\n records.map((record, index) => {\n const recordId = getRecordId(record, idAccessor);\n const isSelected = selectedRecordIds?.includes(recordId) || false;\n\n let handleSelectionChange: React.MouseEventHandler | undefined;\n\n if (onSelectedRecordsChange && selectedRecords) {\n handleSelectionChange = (e) => {\n if (e.nativeEvent.shiftKey && lastSelectionChangeIndex !== null) {\n const targetRecords = records.filter(\n index > lastSelectionChangeIndex\n ? (rec, idx) =>\n idx >= lastSelectionChangeIndex &&\n idx <= index &&\n (isRecordSelectable ? isRecordSelectable(rec, idx) : true)\n : (rec, idx) =>\n idx >= index &&\n idx <= lastSelectionChangeIndex &&\n (isRecordSelectable ? isRecordSelectable(rec, idx) : true)\n );\n onSelectedRecordsChange(\n isSelected\n ? differenceBy(selectedRecords, targetRecords, (r) => getRecordId(r, idAccessor))\n : uniqBy([...selectedRecords, ...targetRecords], (r) => getRecordId(r, idAccessor))\n );\n } else {\n onSelectedRecordsChange(\n isSelected\n ? selectedRecords.filter((rec) => getRecordId(rec, idAccessor) !== recordId)\n : uniqBy([...selectedRecords, record], (rec) => getRecordId(rec, idAccessor))\n );\n }\n setLastSelectionChangeIndex(index);\n };\n }\n\n return (\n <DataTableRow<T>\n key={recordId as React.Key}\n record={record}\n index={index}\n columns={effectiveColumns}\n defaultColumnProps={defaultColumnProps}\n defaultColumnRender={defaultColumnRender}\n selectionTrigger={selectionTrigger}\n selectionVisible={selectionColumnVisible}\n selectionChecked={isSelected}\n onSelectionChange={handleSelectionChange}\n isRecordSelectable={isRecordSelectable}\n selectionCheckboxProps={selectionCheckboxProps}\n getSelectionCheckboxProps={getRecordSelectionCheckboxProps}\n onClick={onRowClick}\n onDoubleClick={onRowDoubleClick}\n onCellClick={onCellClick}\n onCellDoubleClick={onCellDoubleClick}\n onContextMenu={onRowContextMenu}\n onCellContextMenu={onCellContextMenu}\n expansion={rowExpansionInfo}\n color={rowColor}\n backgroundColor={rowBackgroundColor}\n className={rowClassName}\n style={rowStyle}\n customAttributes={customRowAttributes}\n selectorCellShadowVisible={selectorCellShadowVisible}\n selectionColumnClassName={selectionColumnClassName}\n selectionColumnStyle={selectionColumnStyle}\n idAccessor={idAccessor as string}\n rowFactory={rowFactory}\n />\n );\n })\n ) : (\n <DataTableEmptyRow />\n )}\n </tbody>\n\n {effectiveColumns.some(({ footer }) => footer) && (\n <DataTableFooter<T>\n ref={refs.footer}\n className={classNames?.footer}\n style={styles?.footer}\n columns={effectiveColumns}\n defaultColumnProps={defaultColumnProps}\n selectionVisible={selectionColumnVisible}\n selectorCellShadowVisible={selectorCellShadowVisible}\n />\n )}\n </Table>\n </TableWrapper>\n </DataTableScrollArea>\n {!!(page && recordsLength) && (\n <DataTablePagination\n className={classNames?.pagination}\n style={styles?.pagination}\n horizontalSpacing={horizontalSpacing}\n fetching={fetching}\n page={page}\n onPageChange={handlePageChange}\n totalRecords={totalRecords}\n recordsPerPage={recordsPerPage}\n onRecordsPerPageChange={onRecordsPerPageChange}\n recordsPerPageOptions={recordsPerPageOptions}\n recordsPerPageLabel={recordsPerPageLabel}\n paginationWithEdges={paginationWithEdges}\n paginationWithControls={paginationWithControls}\n paginationActiveTextColor={paginationActiveTextColor}\n paginationActiveBackgroundColor={paginationActiveBackgroundColor}\n paginationSize={paginationSize}\n paginationText={paginationText}\n paginationWrapBreakpoint={paginationWrapBreakpoint}\n getPaginationControlProps={getPaginationControlProps}\n getPaginationItemProps={getPaginationItemProps}\n noRecordsText={noRecordsText}\n loadingText={loadingText}\n recordsLength={recordsLength}\n renderPagination={renderPagination}\n />\n )}\n <DataTableLoader\n fetching={fetching}\n backgroundBlur={loaderBackgroundBlur}\n customContent={customLoader}\n size={loaderSize}\n type={loaderType}\n color={loaderColor}\n />\n <DataTableEmptyState icon={noRecordsIcon} text={noRecordsText} active={!fetching && !recordsLength}>\n {emptyState}\n </DataTableEmptyState>\n </Box>\n </DataTableColumnsProvider>\n );\n}\n","'use client';\n\nimport { useState, type Dispatch, type PropsWithChildren, type SetStateAction } from 'react';\nimport { DataTableColumnsContextProvider } from './DataTableColumns.context';\nimport type { DataTableColumnToggle } from './hooks';\n\ntype DataTableColumnsProviderProps = PropsWithChildren<{\n columnsOrder: string[];\n setColumnsOrder: Dispatch<SetStateAction<string[]>>;\n resetColumnsOrder: () => void;\n\n columnsToggle: DataTableColumnToggle[];\n setColumnsToggle: Dispatch<SetStateAction<DataTableColumnToggle[]>>;\n resetColumnsToggle: () => void;\n\n setColumnWidth: (accessor: string, width: string | number) => void;\n setMultipleColumnWidths: (updates: Array<{ accessor: string; width: string | number }>) => void;\n resetColumnsWidth: () => void;\n}>;\n\nexport const DataTableColumnsProvider = (props: DataTableColumnsProviderProps) => {\n const {\n children,\n columnsOrder,\n setColumnsOrder,\n columnsToggle,\n setColumnsToggle,\n\n resetColumnsOrder,\n resetColumnsToggle,\n\n setColumnWidth,\n setMultipleColumnWidths,\n resetColumnsWidth,\n } = props;\n\n const [sourceColumn, setSourceColumn] = useState('');\n const [targetColumn, setTargetColumn] = useState('');\n\n const swapColumns = () => {\n if (!columnsOrder || !setColumnsOrder || !sourceColumn || !targetColumn) {\n return;\n }\n const sourceIndex = columnsOrder.indexOf(sourceColumn);\n const targetIndex = columnsOrder.indexOf(targetColumn);\n\n if (sourceIndex !== -1 && targetIndex !== -1) {\n const removedColumn = columnsOrder.splice(sourceIndex, 1)[0];\n\n columnsOrder.splice(targetIndex, 0, removedColumn);\n\n // update the columns order\n setColumnsOrder([...columnsOrder]);\n }\n };\n\n return (\n <DataTableColumnsContextProvider\n value={{\n sourceColumn,\n setSourceColumn,\n targetColumn,\n setTargetColumn,\n columnsToggle,\n setColumnsToggle,\n swapColumns,\n resetColumnsOrder,\n resetColumnsToggle,\n\n setColumnWidth,\n setMultipleColumnWidths,\n resetColumnsWidth,\n }}\n >\n {children}\n </DataTableColumnsContextProvider>\n );\n};\n","import { createSafeContext } from '@mantine/core';\nimport type { Dispatch, SetStateAction } from 'react';\nimport type { DataTableColumnToggle } from './hooks';\n\ninterface DataTableColumnsContext {\n // accessor of the column which is currently dragged\n sourceColumn: string;\n setSourceColumn: Dispatch<SetStateAction<string>>;\n\n // accessor of the column which is currently hovered\n targetColumn: string;\n setTargetColumn: Dispatch<SetStateAction<string>>;\n\n // swap the source column with the target column\n swapColumns: () => void;\n\n // reset to the default columns order\n resetColumnsOrder: () => void;\n\n columnsToggle: DataTableColumnToggle[];\n setColumnsToggle: Dispatch<SetStateAction<DataTableColumnToggle[]>>;\n resetColumnsToggle: () => void;\n\n setColumnWidth: (accessor: string, width: string | number) => void;\n setMultipleColumnWidths: (updates: Array<{ accessor: string; width: string | number }>) => void;\n resetColumnsWidth: () => void;\n}\n\nexport const [DataTableColumnsContextProvider, useDataTableColumnsContext] = createSafeContext<DataTableColumnsContext>(\n 'useDataTableColumnsContext must be used within DataTableColumnProvider'\n);\n","export function DataTableEmptyRow() {\n return (\n <tr className=\"mantine-datatable-empty-row\">\n <td />\n </tr>\n );\n}\n","import { Center, Text } from '@mantine/core';\nimport { IconDatabaseOff } from './icons/IconDatabaseOff';\n\ntype DataTableEmptyStateProps = React.PropsWithChildren<{\n icon: React.ReactNode | undefined;\n text: string;\n active: boolean;\n}>;\n\nexport function DataTableEmptyState({ icon, text, active, children }: DataTableEmptyStateProps) {\n return (\n <Center className=\"mantine-datatable-empty-state\" data-active={active || undefined}>\n {children || (\n <>\n {icon || (\n <div className=\"mantine-datatable-empty-state-icon\">\n <IconDatabaseOff />\n </div>\n )}\n <Text component=\"div\" size=\"sm\" c=\"dimmed\">\n {text}\n </Text>\n </>\n )}\n </Center>\n );\n}\n","export function IconDatabaseOff() {\n return (\n <svg\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n strokeWidth=\"2\"\n stroke=\"currentColor\"\n fill=\"none\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <path stroke=\"none\" d=\"M0 0h24v24H0z\" fill=\"none\" />\n <path d=\"M12.983 8.978c3.955 -.182 7.017 -1.446 7.017 -2.978c0 -1.657 -3.582 -3 -8 -3c-1.661 0 -3.204 .19 -4.483 .515m-2.783 1.228c-.471 .382 -.734 .808 -.734 1.257c0 1.22 1.944 2.271 4.734 2.74\" />\n <path d=\"M4 6v6c0 1.657 3.582 3 8 3c.986 0 1.93 -.067 2.802 -.19m3.187 -.82c1.251 -.53 2.011 -1.228 2.011 -1.99v-6\" />\n <path d=\"M4 12v6c0 1.657 3.582 3 8 3c3.217 0 5.991 -.712 7.261 -1.74m.739 -3.26v-4\" />\n <path d=\"M3 3l18 18\" />\n </svg>\n );\n}\n","import { TableTfoot, TableTr, type MantineStyleProp } from '@mantine/core';\nimport clsx from 'clsx';\nimport { DataTableFooterCell } from './DataTableFooterCell';\nimport { DataTableFooterSelectorPlaceholderCell } from './DataTableFooterSelectorPlaceholderCell';\nimport type { DataTableColumn, DataTableDefaultColumnProps } from './types';\n\ntype DataTableFooterProps<T> = {\n className: string | undefined;\n style: MantineStyleProp | undefined;\n columns: DataTableColumn<T>[];\n defaultColumnProps: DataTableDefaultColumnProps<T> | undefined;\n selectionVisible: boolean;\n selectorCellShadowVisible: boolean;\n ref: React.Ref<HTMLTableSectionElement>;\n};\n\nexport function DataTableFooter<T>({\n className,\n style,\n columns,\n defaultColumnProps,\n selectionVisible,\n selectorCellShadowVisible,\n ref,\n}: DataTableFooterProps<T>) {\n return (\n <TableTfoot ref={ref} className={clsx('mantine-datatable-footer', className)} style={style}>\n <TableTr>\n {selectionVisible && <DataTableFooterSelectorPlaceholderCell shadowVisible={selectorCellShadowVisible} />}\n {columns.map(({ hidden, ...columnProps }) => {\n if (hidden) return null;\n\n const {\n accessor,\n visibleMediaQuery,\n textAlign,\n width,\n footer,\n footerClassName,\n footerStyle,\n noWrap,\n ellipsis,\n } = { ...defaultColumnProps, ...columnProps };\n\n return (\n <DataTableFooterCell<T>\n key={accessor as React.Key}\n className={footerClassName}\n style={footerStyle}\n visibleMediaQuery={visibleMediaQuery}\n textAlign={textAlign}\n width={width}\n title={footer}\n noWrap={noWrap}\n ellipsis={ellipsis}\n />\n );\n })}\n </TableTr>\n </TableTfoot>\n );\n}\n","import { TableTh, type MantineStyleProp, type MantineTheme } from '@mantine/core';\nimport clsx from 'clsx';\nimport { useMediaQueryStringOrFunction } from './hooks';\nimport type { DataTableColumn } from './types';\nimport { ELLIPSIS, NOWRAP, TEXT_ALIGN_CENTER, TEXT_ALIGN_LEFT, TEXT_ALIGN_RIGHT } from './utilityClasses';\n\ntype DataTableFooterCellProps<T> = {\n className: string | undefined;\n style: MantineStyleProp | undefined;\n visibleMediaQuery: string | ((theme: MantineTheme) => string) | undefined;\n title: React.ReactNode | undefined;\n} & Pick<DataTableColumn<T>, 'noWrap' | 'ellipsis' | 'textAlign' | 'width'>;\n\nexport function DataTableFooterCell<T>({\n className,\n style,\n visibleMediaQuery,\n title,\n noWrap,\n ellipsis,\n textAlign,\n width,\n}: DataTableFooterCellProps<T>) {\n if (!useMediaQueryStringOrFunction(visibleMediaQuery)) return null;\n return (\n <TableTh\n className={clsx(\n {\n [NOWRAP]: noWrap || ellipsis,\n [ELLIPSIS]: ellipsis,\n [TEXT_ALIGN_LEFT]: textAlign === 'left',\n [TEXT_ALIGN_CENTER]: textAlign === 'center',\n [TEXT_ALIGN_RIGHT]: textAlign === 'right',\n },\n className\n )}\n style={[\n {\n width,\n minWidth: width,\n maxWidth: width,\n },\n style,\n ]}\n >\n {title}\n </TableTh>\n );\n}\n","import { useCallback, useRef, useState } from 'react';\n\ninterface UseColumnResizeProps {\n onColumnResize: (updates: Array<{ accessor: string; width: string | number }>) => void;\n minColumnWidth?: number;\n}\n\ninterface ResizeState {\n isResizing: boolean;\n startX: number;\n originalWidths: { current: number; next: number };\n currentAccessor: string;\n nextAccessor: string | null;\n}\n\nexport const useColumnResize = ({ onColumnResize, minColumnWidth = 50 }: UseColumnResizeProps) => {\n const [resizeState, setResizeState] = useState<ResizeState | null>(null);\n const currentColumnRef = useRef<HTMLTableCellElement | null>(null);\n const nextColumnRef = useRef<HTMLTableCellElement | null>(null);\n\n const startResize = useCallback(\n (event: React.MouseEvent, currentColumn: HTMLTableCellElement, currentAccessor: string) => {\n event.preventDefault();\n event.stopPropagation();\n\n const nextColumn = currentColumn.nextElementSibling as HTMLTableCellElement | null;\n if (!nextColumn) {\n return false;\n }\n\n const nextAccessor = nextColumn.getAttribute('data-accessor');\n if (!nextAccessor) {\n return false;\n }\n\n const currentWidth = currentColumn.getBoundingClientRect().width;\n const nextWidth = nextColumn.getBoundingClientRect().width;\n\n currentColumnRef.current = currentColumn;\n nextColumnRef.current = nextColumn;\n\n setResizeState({\n isResizing: true,\n startX: event.clientX,\n originalWidths: { current: currentWidth, next: nextWidth },\n currentAccessor,\n nextAccessor,\n });\n\n // Global styles for better UX\n document.body.style.cursor = 'col-resize';\n document.body.style.userSelect = 'none';\n\n return true;\n },\n []\n );\n\n const updateResize = useCallback(\n (clientX: number) => {\n if (!resizeState || !currentColumnRef.current || !nextColumnRef.current) return;\n\n const deltaX = clientX - resizeState.startX;\n\n // Calculate the actual delta we can apply based on constraints\n const actualDelta = Math.min(\n deltaX,\n resizeState.originalWidths.next - minColumnWidth // Don't shrink next below minimum\n );\n\n const finalCurrentWidth = resizeState.originalWidths.current + actualDelta;\n const finalNextWidth = resizeState.originalWidths.next - actualDelta;\n\n // Apply to DOM for immediate visual feedback\n currentColumnRef.current.style.width = `${finalCurrentWidth}px`;\n nextColumnRef.current.style.width = `${finalNextWidth}px`;\n\n return { finalCurrentWidth, finalNextWidth };\n },\n [resizeState, minColumnWidth]\n );\n\n const endResize = useCallback(() => {\n if (!resizeState || !currentColumnRef.current || !nextColumnRef.current) return;\n\n // Reset global styles\n document.body.style.cursor = 'initial';\n document.body.style.userSelect = 'initial';\n\n // Get final widths\n const currentWidth = currentColumnRef.current.getBoundingClientRect().width;\n const nextWidth = nextColumnRef.current.getBoundingClientRect().width;\n\n // Update through callback\n const updates = [{ accessor: resizeState.currentAccessor, width: `${currentWidth}px` }];\n\n if (resizeState.nextAccessor) {\n updates.push({ accessor: resizeState.nextAccessor, width: `${nextWidth}px` });\n }\n\n onColumnResize(updates);\n\n // Clean up\n setResizeState(null);\n currentColumnRef.current = null;\n nextColumnRef.current = null;\n }, [resizeState, onColumnResize]);\n\n const cancelResize = useCallback(() => {\n if (!resizeState) return;\n\n // Reset global styles\n document.body.style.cursor = 'initial';\n document.body.style.userSelect = 'initial';\n\n // Reset column widths to original values\n if (currentColumnRef.current) {\n currentColumnRef.current.style.width = `${resizeState.originalWidths.current}px`;\n }\n if (nextColumnRef.current) {\n nextColumnRef.current.style.width = `${resizeState.originalWidths.next}px`;\n }\n\n // Clean up\n setResizeState(null);\n currentColumnRef.current = null;\n nextColumnRef.current = null;\n }, [resizeState]);\n\n const resetColumnWidths = useCallback(\n (currentAccessor: string, nextAccessor?: string) => {\n const updates = [{ accessor: currentAccessor, width: 'initial' }];\n if (nextAccessor) {\n updates.push({ accessor: nextAccessor, width: 'initial' });\n }\n onColumnResize(updates);\n },\n [onColumnResize]\n );\n\n return {\n isResizing: !!resizeState,\n startResize,\n updateResize,\n endResize,\n cancelResize,\n resetColumnWidths,\n };\n};\n","import { useLocalStorage } from '@mantine/hooks';\nimport type { DataTableColumn } from '../types/DataTableColumn';\n\n/**\n * Hook to handle column reordering with localStorage persistence.\n * @see https://icflorescu.github.io/mantine-datatable/examples/column-dragging-and-toggling/\n */\nexport function useDataTableColumnReorder<T>({\n key,\n columns = [],\n getInitialValueInEffect = true,\n}: {\n /**\n * The key to use in localStorage to store the columns order.\n */\n key: string | undefined;\n /**\n * Columns definitions.\n */\n columns: DataTableColumn<T>[];\n /**\n * If set to true, value will be updated in useEffect after mount.\n * @default true\n */\n getInitialValueInEffect?: boolean;\n}) {\n // Align order with current columns definition\n function alignColumnsOrder<T>(columnsOrder: string[], columns: DataTableColumn<T>[]) {\n const updatedColumnsOrder: string[] = [];\n\n // Keep existing order for columns that still exist\n columnsOrder.forEach((col) => {\n if (columns.find((c) => c.accessor === col)) {\n updatedColumnsOrder.push(col);\n }\n });\n\n // Add new columns to the end\n columns.forEach((col) => {\n if (!updatedColumnsOrder.includes(col.accessor as string)) {\n updatedColumnsOrder.push(col.accessor as string);\n }\n });\n\n return updatedColumnsOrder;\n }\n\n // Default columns order is the order of the columns in the array\n const defaultColumnsOrder = (columns && columns.map((column) => column.accessor)) || [];\n\n const [columnsOrder, _setColumnsOrder] = useLocalStorage<string[]>({\n key: key ? `${key}-columns-order` : '',\n defaultValue: key ? (defaultColumnsOrder as string[]) : undefined,\n getInitialValueInEffect,\n });\n\n function setColumnsOrder(order: string[] | ((prev: string[]) => string[])) {\n if (key) {\n _setColumnsOrder(order);\n }\n }\n\n const resetColumnsOrder = () => {\n setColumnsOrder(defaultColumnsOrder as string[]);\n };\n\n // If no key is provided, return unmanaged state\n if (!key) {\n return {\n columnsOrder: columnsOrder as string[],\n setColumnsOrder,\n resetColumnsOrder,\n } as const;\n }\n\n // Align order with current columns\n const alignedColumnsOrder = alignColumnsOrder(columnsOrder, columns);\n const prevColumnsOrder = JSON.stringify(columnsOrder);\n\n if (JSON.stringify(alignedColumnsOrder) !== prevColumnsOrder) {\n setColumnsOrder(alignedColumnsOrder);\n }\n\n return {\n columnsOrder: alignedColumnsOrder,\n setColumnsOrder,\n resetColumnsOrder,\n } as const;\n}\n","import { useLocalStorage } from '@mantine/hooks';\nimport { useCallback, useEffect, useMemo, useRef, useState, type RefObject } from 'react';\nimport type { DataTableColumn } from '../types/DataTableColumn';\n\ntype DataTableColumnWidth = Record<string, string | number>;\n\n/**\n * Hook to handle column resizing with localStorage persistence and auto-resize calculation.\n * @see https://icflorescu.github.io/mantine-datatable/examples/column-resizing/\n */\nexport function useDataTableColumnResize<T>({\n key,\n columns = [],\n getInitialValueInEffect = true,\n headerRef,\n onFixedLayoutChange,\n}: {\n /**\n * The key to use in localStorage to store the columns width.\n */\n key: string | undefined;\n /**\n * Columns definitions.\n */\n columns: DataTableColumn<T>[];\n /**\n * If set to true, value will be updated in useEffect after mount.\n * @default true\n */\n getInitialValueInEffect?: boolean;\n /**\n * Reference to the table header element for measuring column widths.\n */\n headerRef?: RefObject<HTMLTableSectionElement | null>;\n /**\n * Reference to the scroll viewport for calculating overflow.\n */\n scrollViewportRef?: RefObject<HTMLElement | null>;\n /**\n * Callback to control fixed layout state in the parent component.\n */\n onFixedLayoutChange?: (enabled: boolean) => void;\n}) {\n const isInitializedRef = useRef(false);\n const naturalWidthsRef = useRef<Record<string, number>>({});\n const [isSSR, setIsSSR] = useState(true);\n\n // Check if columns have resizable feature\n const hasResizableColumns = useMemo(() => {\n return columns.some((c) => c.resizable && !c.hidden && c.accessor !== '__selection__');\n }, [columns]);\n\n // Get resizable columns\n const resizableColumns = useMemo(() => {\n return columns.filter((c) => c.resizable && !c.hidden && c.accessor !== '__selection__');\n }, [columns]);\n\n // Check if we need to measure natural widths (columns without explicit width)\n const needsNaturalMeasurement = useMemo(() => {\n return resizableColumns.some((c) => c.width === undefined || c.width === '' || c.width === 'initial');\n }, [resizableColumns]);\n\n // Create default column widths - use explicit widths or 'auto' for natural sizing\n // Exclude selection column from width management\n const getDefaultColumnsWidth = useCallback(() => {\n return columns\n .filter((column) => column.accessor !== '__selection__')\n .map((column) => ({\n [column.accessor]: column.width ?? 'auto',\n }));\n }, [columns]);\n\n const [storedColumnsWidth, setStoredColumnsWidth] = useLocalStorage<DataTableColumnWidth[]>({\n key: key ? `${key}-columns-width` : '',\n defaultValue: key ? getDefaultColumnsWidth() : undefined,\n getInitialValueInEffect: false, // We'll handle initialization manually\n });\n\n // Current effective column widths (combines stored + measured natural widths)\n const [effectiveColumnsWidth, setEffectiveColumnsWidth] = useState<DataTableColumnWidth[]>(() =>\n getDefaultColumnsWidth()\n );\n\n // Handle SSR\n useEffect(() => {\n // eslint-disable-next-line react-hooks/set-state-in-effect\n setIsSSR(false);\n }, []);\n\n // Measure natural widths of columns\n const measureNaturalWidths = useCallback(() => {\n if (!headerRef?.current || isSSR) return {};\n\n const thead = headerRef.current;\n const headerCells = Array.from(thead.querySelectorAll<HTMLTableCellElement>('th[data-accessor]'));\n const naturalWidths: Record<string, number> = {};\n\n headerCells.forEach((cell) => {\n const accessor = cell.getAttribute('data-accessor');\n if (!accessor || accessor === '__selection__') return;\n\n const column = resizableColumns.find((c) => c.accessor === accessor);\n if (!column) return;\n\n // Only measure if column doesn't have explicit width\n if (column.width === undefined || column.width === '' || column.width === 'initial') {\n const rect = cell.getBoundingClientRect();\n naturalWidths[accessor] = Math.round(rect.width);\n }\n });\n\n return naturalWidths;\n }, [headerRef, resizableColumns, isSSR]);\n\n // Update column widths (both stored and effective)\n // Filter out selection column from updates\n const updateColumnWidths = useCallback(\n (updates: Array<{ accessor: string; width: string | number }>) => {\n // Filter out any updates to the selection column\n const filteredUpdates = updates.filter((update) => update.accessor !== '__selection__');\n\n const newWidths = effectiveColumnsWidth.map((column) => {\n const accessor = Object.keys(column)[0];\n const update = filteredUpdates.find((u) => u.accessor === accessor);\n\n if (update) {\n return { [accessor]: update.width };\n }\n return column;\n });\n\n setEffectiveColumnsWidth(newWidths);\n\n // Also update stored widths if we have a key\n if (key) {\n setStoredColumnsWidth(newWidths);\n }\n },\n [effectiveColumnsWidth, key, setStoredColumnsWidth]\n );\n\n const setMultipleColumnWidths = useCallback(\n (updates: Array<{ accessor: string; width: string | number }>) => {\n updateColumnWidths(updates);\n },\n [updateColumnWidths]\n );\n\n // Initialize column widths (measure natural widths and apply stored widths)\n const initializeColumnWidths = useCallback(() => {\n if (!headerRef?.current || !onFixedLayoutChange || isSSR) return;\n\n // First, measure natural widths if needed\n if (needsNaturalMeasurement) {\n // Temporarily use auto layout to get natural widths\n onFixedLayoutChange(false);\n\n // Wait for layout to settle, then measure\n requestAnimationFrame(() => {\n requestAnimationFrame(() => {\n const naturalWidths = measureNaturalWidths();\n naturalWidthsRef.current = { ...naturalWidthsRef.current, ...naturalWidths };\n\n // Create effective widths combining stored and natural widths\n // Exclude selection column from width management\n const newEffectiveWidths = columns\n .filter((column) => column.accessor !== '__selection__')\n .map((column) => {\n const accessor = column.accessor as string;\n\n // Check if we have a stored width for this column\n const storedWidth = storedColumnsWidth?.find((w) => Object.keys(w)[0] === accessor);\n if (storedWidth && storedWidth[accessor] !== 'auto') {\n return { [accessor]: storedWidth[accessor] };\n }\n\n // Use natural width if available, otherwise use column definition or auto\n const naturalWidth = naturalWidths[accessor];\n if (naturalWidth) {\n return { [accessor]: `${naturalWidth}px` };\n }\n\n return { [accessor]: column.width ?? 'auto' };\n });\n\n setEffectiveColumnsWidth(newEffectiveWidths);\n\n // Switch to fixed layout for resizing\n setTimeout(() => {\n onFixedLayoutChange(true);\n isInitializedRef.current = true;\n }, 10);\n });\n });\n } else {\n // All columns have explicit widths, use them directly\n // Exclude selection column from width management\n const explicitWidths = columns\n .filter((column) => column.accessor !== '__selection__')\n .map((column) => ({\n [column.accessor]: column.width ?? 'auto',\n }));\n\n setEffectiveColumnsWidth(explicitWidths);\n onFixedLayoutChange(true);\n isInitializedRef.current = true;\n }\n }, [\n headerRef,\n onFixedLayoutChange,\n isSSR,\n needsNaturalMeasurement,\n measureNaturalWidths,\n columns,\n storedColumnsWidth,\n ]);\n\n const measureAndSetColumnWidths = initializeColumnWidths;\n\n // Initialize on mount and when columns change\n useEffect(() => {\n if (!hasResizableColumns || !onFixedLayoutChange || isSSR) {\n onFixedLayoutChange?.(false);\n return;\n }\n\n // Reset initialization flag when columns change\n isInitializedRef.current = false;\n\n // Initialize after a short delay to ensure DOM is ready\n const timeoutId = setTimeout(() => {\n initializeColumnWidths();\n }, 50);\n\n return () => clearTimeout(timeoutId);\n }, [hasResizableColumns, onFixedLayoutChange, isSSR, initializeColumnWidths]);\n\n // Load stored widths on client-side hydration\n useEffect(() => {\n if (isSSR || !key || !getInitialValueInEffect) return;\n\n // Apply stored widths if available\n if (storedColumnsWidth && storedColumnsWidth.length > 0) {\n // eslint-disable-next-line react-hooks/set-state-in-effect\n setEffectiveColumnsWidth(storedColumnsWidth);\n }\n }, [isSSR, key, getInitialValueInEffect, storedColumnsWidth]);\n // Reset all columns to their natural/initial widths\n const resetColumnsWidth = useCallback(() => {\n // Clear stored widths\n if (key) {\n setStoredColumnsWidth(getDefaultColumnsWidth());\n }\n\n // Reset to natural widths\n naturalWidthsRef.current = {};\n isInitializedRef.current = false;\n\n // Re-initialize to measure natural widths\n if (onFixedLayoutChange) {\n onFixedLayoutChange(false);\n setTimeout(() => {\n initializeColumnWidths();\n }, 10);\n }\n }, [key, setStoredColumnsWidth, getDefaultColumnsWidth, onFixedLayoutChange, initializeColumnWidths]);\n\n // Set width for a single column\n const setColumnWidth = useCallback(\n (accessor: string, width: string | number) => {\n updateColumnWidths([{ accessor, width }]);\n },\n [updateColumnWidths]\n );\n\n // Check if all resizable columns are using auto/natural widths\n const allResizableWidthsInitial = useMemo(() => {\n if (!hasResizableColumns) return false;\n return effectiveColumnsWidth\n .filter((colWidth) => {\n const accessor = Object.keys(colWidth)[0];\n return resizableColumns.some((c) => c.accessor === accessor);\n })\n .every((colWidth) => {\n const width = Object.values(colWidth)[0];\n return width === 'auto' || width === 'initial';\n });\n }, [hasResizableColumns, effectiveColumnsWidth, resizableColumns]);\n\n return {\n columnsWidth: effectiveColumnsWidth,\n setColumnsWidth: updateColumnWidths,\n setColumnWidth,\n setMultipleColumnWidths,\n resetColumnsWidth,\n hasResizableColumns,\n allResizableWidthsInitial,\n measureAndSetColumnWidths,\n } as const;\n}\n","import { useMemo, type RefObject } from 'react';\nimport type { DataTableColumn } from '../types/DataTableColumn';\nimport { useDataTableColumnReorder } from './useDataTableColumnReorder';\nimport { useDataTableColumnResize } from './useDataTableColumnResize';\nimport { useDataTableColumnToggle, type DataTableColumnToggle } from './useDataTableColumnToggle';\n\nexport type { DataTableColumnToggle };\n\n/**\n * Hook to handle column features such as drag-and-drop reordering, visibility toggling and resizing.\n * @see https://icflorescu.github.io/mantine-datatable/examples/column-dragging-and-toggling/\n */\nexport const useDataTableColumns = <T>({\n key,\n columns = [],\n getInitialValueInEffect = true,\n headerRef,\n scrollViewportRef,\n onFixedLayoutChange,\n}: {\n /**\n * The key to use in localStorage to store the columns order and toggle state.\n */\n key: string | undefined;\n /**\n * Columns definitions.\n */\n columns: DataTableColumn<T>[];\n /**\n * If set to true, value will be updated in useEffect after mount.\n * @default true\n */\n getInitialValueInEffect?: boolean;\n /**\n * Reference to the table header element for measuring column widths.\n */\n headerRef?: RefObject<HTMLTableSectionElement | null>;\n /**\n * Reference to the scroll viewport for calculating overflow.\n */\n scrollViewportRef?: RefObject<HTMLElement | null>;\n /**\n * Callback to control fixed layout state in the parent component.\n */\n onFixedLayoutChange?: (enabled: boolean) => void;\n}) => {\n // Use specialized hooks for each feature\n const { columnsOrder, setColumnsOrder, resetColumnsOrder } = useDataTableColumnReorder({\n key,\n columns,\n getInitialValueInEffect,\n });\n\n const { columnsToggle, setColumnsToggle, resetColumnsToggle } = useDataTableColumnToggle({\n key,\n columns,\n getInitialValueInEffect,\n });\n\n const {\n columnsWidth,\n setColumnsWidth,\n setColumnWidth,\n setMultipleColumnWidths,\n resetColumnsWidth,\n hasResizableColumns,\n allResizableWidthsInitial,\n measureAndSetColumnWidths,\n } = useDataTableColumnResize({\n key,\n columns,\n getInitialValueInEffect,\n headerRef,\n scrollViewportRef,\n onFixedLayoutChange,\n });\n\n // Compute effective columns based on order, toggle, and width\n const effectiveColumns = useMemo(() => {\n if (!columnsOrder) {\n return columns;\n }\n\n const result = columnsOrder\n .map((order) => columns.find((column) => column.accessor === order))\n .map((column) => {\n return {\n ...column,\n hidden:\n column?.hidden ||\n !columnsToggle.find((toggle) => {\n return toggle.accessor === column?.accessor;\n })?.toggled,\n };\n }) as DataTableColumn<T>[];\n\n const newWidths = result.map((column) => {\n // Skip width application for selection column\n if (column?.accessor === '__selection__') {\n return column;\n }\n\n return {\n ...column,\n width: columnsWidth.find((width) => {\n return width[column?.accessor as string];\n })?.[column?.accessor as string],\n };\n });\n\n return newWidths;\n }, [columns, columnsOrder, columnsToggle, columnsWidth]);\n\n return {\n effectiveColumns: effectiveColumns as DataTableColumn<T>[],\n\n // Order handling\n setColumnsOrder,\n columnsOrder: columnsOrder as string[],\n resetColumnsOrder,\n\n // Toggle handling\n columnsToggle: columnsToggle as DataTableColumnToggle[],\n setColumnsToggle,\n resetColumnsToggle,\n\n // Resize handling\n columnsWidth,\n setColumnsWidth,\n setColumnWidth,\n setMultipleColumnWidths,\n resetColumnsWidth,\n hasResizableColumns,\n allResizableWidthsInitial,\n measureAndSetColumnWidths,\n } as const;\n};\n","import { useLocalStorage } from '@mantine/hooks';\nimport type { DataTableColumn } from '../types/DataTableColumn';\n\nexport type DataTableColumnToggle = {\n accessor: string;\n defaultToggle: boolean;\n toggleable: boolean;\n toggled: boolean;\n};\n\n/**\n * Hook to handle column visibility toggling with localStorage persistence.\n * @see https://icflorescu.github.io/mantine-datatable/examples/column-dragging-and-toggling/\n */\nexport function useDataTableColumnToggle<T>({\n key,\n columns = [],\n getInitialValueInEffect = true,\n}: {\n /**\n * The key to use in localStorage to store the columns toggle state.\n */\n key: string | undefined;\n /**\n * Columns definitions.\n */\n columns: DataTableColumn<T>[];\n /**\n * If set to true, value will be updated in useEffect after mount.\n * @default true\n */\n getInitialValueInEffect?: boolean;\n}) {\n // Align toggle state with current columns definition\n function alignColumnsToggle<T>(columnsToggle: DataTableColumnToggle[], columns: DataTableColumn<T>[]) {\n const updatedColumnsToggle: DataTableColumnToggle[] = [];\n\n // Keep existing toggle states for columns that still exist\n columnsToggle.forEach((col) => {\n if (columns.find((c) => c.accessor === col.accessor)) {\n updatedColumnsToggle.push(col);\n }\n });\n\n // Add toggle state for new columns\n columns.forEach((col) => {\n if (!updatedColumnsToggle.find((c) => c.accessor === col.accessor)) {\n updatedColumnsToggle.push({\n accessor: col.accessor as string,\n defaultToggle: col.defaultToggle || true,\n toggleable: col.toggleable as boolean,\n toggled: col.defaultToggle === undefined ? true : col.defaultToggle,\n });\n }\n });\n\n return updatedColumnsToggle as DataTableColumnToggle[];\n }\n\n // Default columns toggle state\n const defaultColumnsToggle =\n columns &&\n columns.map((column) => ({\n accessor: column.accessor,\n defaultToggle: column.defaultToggle || true,\n toggleable: column.toggleable,\n toggled: column.defaultToggle === undefined ? true : column.defaultToggle,\n }));\n\n const [columnsToggle, _setColumnsToggle] = useLocalStorage<DataTableColumnToggle[]>({\n key: key ? `${key}-columns-toggle` : '',\n defaultValue: key ? (defaultColumnsToggle as DataTableColumnToggle[]) : undefined,\n getInitialValueInEffect,\n });\n\n function setColumnsToggle(\n toggle: DataTableColumnToggle[] | ((prev: DataTableColumnToggle[]) => DataTableColumnToggle[])\n ) {\n if (key) {\n _setColumnsToggle(toggle);\n }\n }\n\n const resetColumnsToggle = () => {\n setColumnsToggle(defaultColumnsToggle as DataTableColumnToggle[]);\n };\n\n // If no key is provided, return unmanaged state\n if (!key) {\n return {\n columnsToggle: columnsToggle as DataTableColumnToggle[],\n setColumnsToggle,\n resetColumnsToggle,\n } as const;\n }\n\n // Align toggle state with current columns\n const alignedColumnsToggle = alignColumnsToggle(columnsToggle, columns);\n const prevColumnsToggle = JSON.stringify(columnsToggle);\n\n if (JSON.stringify(alignedColumnsToggle) !== prevColumnsToggle) {\n setColumnsToggle(alignedColumnsToggle);\n }\n\n return {\n columnsToggle: alignedColumnsToggle,\n setColumnsToggle,\n resetColumnsToggle,\n } as const;\n}\n","import { rem } from '@mantine/core';\nimport { useCallback, useEffect, useRef } from 'react';\nimport type { DataTableScrollProps } from '../types/DataTableScrollProps';\nimport { useIsomorphicLayoutEffect } from './useIsomorphicLayoutEffect';\nimport { useStableValue } from './useStableValue';\n\nconst VAR_HEADER_HEIGHT = '--mantine-datatable-header-height';\nconst VAR_FOOTER_HEIGHT = '--mantine-datatable-footer-height';\nconst VAR_SELECTION_COLUMN_WIDTH = '--mantine-datatable-selection-column-width';\nconst VAR_LAST_ROW_BORDER_BOTTOM = '--mantine-datatable-last-row-border-bottom';\n\ninterface UseDataTableInjectCssVariablesOpts {\n scrollCallbacks: DataTableScrollProps;\n withRowBorders: boolean | undefined;\n}\n\ntype OnScroll = NonNullable<DataTableScrollProps['onScroll']>;\n\ntype Rect = {\n width: number;\n height: number;\n};\n\ntype Pos = 'top' | 'bottom' | 'left' | 'right';\n\nfunction setCssVar(root: HTMLDivElement | null, name: string, value: string) {\n root?.style.setProperty(name, value);\n}\n\nfunction getRect(entry: ResizeObserverEntry): Rect {\n const boxSize = entry.borderBoxSize?.[0] || entry.contentBoxSize?.[0];\n if (boxSize) {\n return {\n width: boxSize.inlineSize,\n height: boxSize.blockSize,\n };\n } else {\n return { width: entry.contentRect.width, height: entry.contentRect.height };\n }\n}\n\nfunction observe(elem: HTMLElement | null, onChange: (rect: Rect) => unknown, onCancel: () => unknown) {\n if (elem) {\n const observer = new ResizeObserver((entries) => {\n const entry = entries[0];\n if (entry) {\n onChange(getRect(entry));\n }\n });\n observer.observe(elem);\n return () => {\n observer.disconnect();\n onCancel();\n };\n }\n}\n\nexport function useDataTableInjectCssVariables({\n scrollCallbacks,\n withRowBorders,\n}: UseDataTableInjectCssVariablesOpts) {\n const refs = {\n root: useRef<HTMLDivElement>(null),\n table: useRef<HTMLTableElement>(null),\n scrollViewport: useRef<HTMLElement>(null),\n header: useRef<HTMLTableSectionElement>(null),\n footer: useRef<HTMLTableSectionElement>(null),\n selectionColumnHeader: useRef<HTMLTableCellElement>(null),\n };\n const { root, table, scrollViewport, header, footer, selectionColumnHeader } = refs;\n\n const stableDependencies = useStableValue({ withRowBorders });\n const stableScrollCallbacks = useStableValue(scrollCallbacks);\n const processScrollingRef = useRef<() => void>(() => void 0);\n const processLastRowBottomBorderRef = useRef<() => void>(() => void 0);\n const onScroll = useCallback<OnScroll>((ev) => {\n stableScrollCallbacks.current.onScroll?.(ev);\n processScrollingRef.current();\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n useEffect(() => {\n return observe(\n header.current,\n (rect) => {\n setCssVar(root.current, VAR_HEADER_HEIGHT, `${rect.height}px`);\n },\n () => setCssVar(root.current, VAR_HEADER_HEIGHT, '0')\n );\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [header.current]);\n\n useEffect(() => {\n return observe(\n footer.current,\n (rect) => {\n setCssVar(root.current, VAR_FOOTER_HEIGHT, `${rect.height}px`);\n },\n () => setCssVar(root.current, VAR_FOOTER_HEIGHT, '0')\n );\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [footer.current]);\n\n useEffect(() => {\n return observe(\n selectionColumnHeader.current,\n (rect) => {\n setCssVar(root.current, VAR_SELECTION_COLUMN_WIDTH, `${rect.width}px`);\n },\n () => setCssVar(root.current, VAR_SELECTION_COLUMN_WIDTH, '0')\n );\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [selectionColumnHeader.current]);\n\n useIsomorphicLayoutEffect(() => {\n if (typeof window === undefined) {\n return;\n }\n const scrollPosition: Record<Pos, boolean> = {\n top: true,\n bottom: true,\n left: true,\n right: true,\n };\n let tableRect: Rect = { width: 0, height: 0 };\n let scrollRect: Rect = { width: 0, height: 0 };\n\n function setScrolledTo(pos: Pos, value: boolean) {\n const old = scrollPosition[pos];\n scrollPosition[pos] = value;\n setCssVar(root.current, `--mantine-datatable-${pos}-shadow-opacity`, value ? '0' : '1');\n return old;\n }\n\n function processFooterPosition() {\n const diff = tableRect.height - scrollRect.height;\n const relative = diff < 0;\n setCssVar(root.current, '--mantine-datatable-footer-position', relative ? 'relative' : 'sticky');\n setCssVar(root.current, '--mantine-datatable-footer-bottom', relative ? `${diff}px` : '0');\n }\n\n function processLastRowBottomBorder() {\n if (stableDependencies.current.withRowBorders && tableRect.height < scrollRect.height) {\n setCssVar(\n root.current,\n VAR_LAST_ROW_BORDER_BOTTOM,\n `${rem('1px')} solid var(--mantine-datatable-border-color)`\n );\n } else {\n setCssVar(root.current, VAR_LAST_ROW_BORDER_BOTTOM, 'unset');\n }\n }\n processLastRowBottomBorderRef.current = processLastRowBottomBorder;\n\n function processScrolling() {\n const callbacks = stableScrollCallbacks.current;\n const viewport = scrollViewport.current;\n const scrollTop = viewport?.scrollTop ?? 0;\n const scrollLeft = viewport?.scrollLeft ?? 0;\n\n const newScrolledToTop = scrollTop === 0;\n const newScrolledToBottom = tableRect.height - scrollTop - scrollRect.height < 1;\n const scrolledToTop = setScrolledTo('top', newScrolledToTop);\n const scrolledToBottom = setScrolledTo('bottom', newScrolledToBottom);\n if (newScrolledToTop && newScrolledToTop !== scrolledToTop) callbacks.onScrollToTop?.();\n if (newScrolledToBottom && newScrolledToBottom !== scrolledToBottom) callbacks.onScrollToBottom?.();\n\n // In RTL mode, scrollLeft behavior varies by browser:\n // - Chrome/Edge: starts at 0, goes negative when scrolling left (towards visual left)\n // - Firefox: starts at 0, goes negative when scrolling left\n // - Safari: starts at 0, goes negative when scrolling left\n // The key insight: in RTL, scrollLeft=0 means we're at the RIGHT edge (visual start)\n // and negative/max values mean we're at the LEFT edge (visual end)\n const isRtl = viewport ? getComputedStyle(viewport).direction === 'rtl' : false;\n const maxScrollLeft = (viewport?.scrollWidth ?? 0) - scrollRect.width;\n\n let newScrolledToLeft: boolean;\n let newScrolledToRight: boolean;\n\n if (isRtl) {\n // In RTL with modern browsers, scrollLeft is 0 at right edge, negative when scrolling left\n const absScrollLeft = Math.abs(scrollLeft);\n // At right edge (RTL start): absScrollLeft ≈ 0, so scrolledToRight = true (no right shadow)\n // At left edge (RTL end): absScrollLeft ≈ maxScrollLeft, so scrolledToLeft = true (no left shadow)\n newScrolledToRight = absScrollLeft < 1;\n newScrolledToLeft = maxScrollLeft - absScrollLeft < 1;\n } else {\n newScrolledToLeft = scrollLeft < 1;\n newScrolledToRight = tableRect.width - scrollLeft - scrollRect.width < 1;\n }\n\n const scrolledToLeft = setScrolledTo('left', newScrolledToLeft);\n const scrolledToRight = setScrolledTo('right', newScrolledToRight);\n if (newScrolledToLeft && newScrolledToLeft !== scrolledToLeft) callbacks.onScrollToLeft?.();\n if (newScrolledToRight && newScrolledToRight !== scrolledToRight) callbacks.onScrollToRight?.();\n }\n processScrollingRef.current = processScrolling;\n const observer = new ResizeObserver((entries) => {\n for (const entry of entries) {\n switch (entry.target.tagName) {\n case 'TABLE': {\n tableRect = getRect(entry);\n break;\n }\n case 'DIV': {\n scrollRect = getRect(entry);\n break;\n }\n }\n }\n processScrolling();\n processFooterPosition();\n processLastRowBottomBorder();\n });\n\n observer.observe(table.current!);\n observer.observe(scrollViewport.current!);\n\n return () => {\n observer.disconnect();\n };\n }, []);\n\n useIsomorphicLayoutEffect(() => {\n processLastRowBottomBorderRef.current();\n }, [withRowBorders]);\n\n return {\n refs,\n onScroll,\n };\n}\n","import { useEffect, useLayoutEffect } from 'react';\n\nexport const useIsomorphicLayoutEffect = typeof window !== 'undefined' ? useLayoutEffect : useEffect;\n","import { useRef } from 'react';\n\nexport interface ReadonlyRef<T> {\n readonly current: T;\n}\n\nexport function useStableValue<T>(value: T): ReadonlyRef<T> {\n const ref = useRef<T>(value);\n // eslint-disable-next-line react-hooks/refs\n ref.current = value;\n return ref;\n}\n","import { useEffect, useState } from 'react';\n\nexport function useLastSelectionChangeIndex(recordIds: unknown[] | undefined) {\n const [lastSelectionChangeIndex, setLastSelectionChangeIndex] = useState<number | null>(null);\n const recordIdsString = recordIds?.join(':') || '';\n useEffect(() => {\n // eslint-disable-next-line react-hooks/set-state-in-effect\n setLastSelectionChangeIndex(null);\n }, [recordIdsString]);\n\n return { lastSelectionChangeIndex, setLastSelectionChangeIndex };\n}\n","// Modified from https://github.com/mantinedev/mantine/blob/8c12a76c56da51af34213f18dd67c8b72a0ddb44/src/mantine-hooks/src/use-media-query/use-media-query.ts\n\nimport { useEffect, useRef, useState } from 'react';\n\nexport interface UseMediaQueryOptions {\n getInitialValueInEffect: boolean;\n}\n\n/**\n * Older versions of Safari (shipped with Catalina and before) do not support addEventListener on matchMedia\n * https://stackoverflow.com/questions/56466261/matchmedia-addlistener-marked-as-deprecated-addeventlistener-equivalent\n * */\nfunction attachMediaListeners(queries: MediaQueryList[], callback: (matches: boolean[]) => void) {\n const callbackWrapper = () => {\n callback(queries.map((query) => query.matches));\n };\n const subscriptions = queries.map((query) => {\n try {\n query.addEventListener('change', callbackWrapper);\n return () => query.removeEventListener('change', callbackWrapper);\n } catch {\n query.addListener(callbackWrapper);\n return () => query.removeListener(callbackWrapper);\n }\n });\n return () => {\n subscriptions.forEach((unsubscribe) => unsubscribe());\n };\n}\n\nfunction getInitialValue(queries: string[], initialValues?: boolean[]) {\n if (initialValues) {\n return initialValues;\n }\n\n if (typeof window !== 'undefined' && 'matchMedia' in window) {\n return queries.map((query) => window.matchMedia(query).matches);\n }\n\n return queries.map(() => false);\n}\n\nexport function useMediaQueries(\n queries: string[],\n initialValues?: boolean[],\n { getInitialValueInEffect }: UseMediaQueryOptions = {\n getInitialValueInEffect: true,\n }\n) {\n const [matches, setMatches] = useState(\n getInitialValueInEffect ? initialValues : getInitialValue(queries, initialValues)\n );\n const queryRef = useRef<MediaQueryList[]>(null);\n\n useEffect(() => {\n if ('matchMedia' in window) {\n queryRef.current = queries.map((query) => window.matchMedia(query));\n setMatches(queryRef.current.map((queryResult) => queryResult.matches));\n return attachMediaListeners(queryRef.current, (event) => {\n setMatches(event);\n });\n }\n\n return undefined;\n }, [queries]);\n\n return matches;\n}\n","import { useMantineTheme, type MantineTheme } from '@mantine/core';\nimport { useMemo } from 'react';\nimport { useMediaQueries } from './useMediaQueries';\n\nexport function useMediaQueriesStringOrFunction(queries: (string | ((theme: MantineTheme) => string) | undefined)[]) {\n const theme = useMantineTheme();\n const values = useMemo(\n () => queries.map((query) => (typeof query === 'function' ? query(theme) : query) ?? ''),\n [queries, theme]\n );\n const defaults = useMemo(() => queries.map(() => true), [queries]);\n return useMediaQueries(values, defaults);\n}\n","import { useMantineTheme, type MantineTheme } from '@mantine/core';\nimport { useMediaQuery } from '@mantine/hooks';\n\nexport function useMediaQueryStringOrFunction(mediaQuery: string | ((theme: MantineTheme) => string) | undefined) {\n const theme = useMantineTheme();\n const mediaQueryValue = typeof mediaQuery === 'function' ? mediaQuery(theme) : mediaQuery;\n return useMediaQuery(mediaQueryValue || '', true);\n}\n","import { useState } from 'react';\nimport type { DataTableRowExpansionProps } from '../types/DataTableRowExpansionProps';\nimport { getRecordId } from '../utils';\n\nexport function useRowExpansion<T>({\n rowExpansion,\n records,\n idAccessor,\n}: {\n rowExpansion?: DataTableRowExpansionProps<T>;\n records: T[] | undefined;\n idAccessor: (keyof T | (string & NonNullable<unknown>)) | ((record: T) => React.Key);\n}) {\n let initiallyExpandedRecordIds: unknown[] = [];\n if (rowExpansion && records) {\n const { trigger, allowMultiple, initiallyExpanded } = rowExpansion;\n if (records && trigger === 'always') {\n initiallyExpandedRecordIds = records.map((r) => getRecordId(r, idAccessor));\n } else if (initiallyExpanded) {\n initiallyExpandedRecordIds = records\n .filter((record, index) => initiallyExpanded({ record, index }))\n .map((r) => getRecordId(r, idAccessor));\n if (!allowMultiple) {\n initiallyExpandedRecordIds = [initiallyExpandedRecordIds[0]];\n }\n }\n }\n\n let expandedRecordIds: unknown[];\n let setExpandedRecordIds: ((expandedRecordIds: unknown[]) => void) | undefined;\n const expandedRecordIdsState = useState<unknown[]>(initiallyExpandedRecordIds);\n\n if (rowExpansion) {\n const { expandable, trigger, allowMultiple, collapseProps, content } = rowExpansion;\n if (rowExpansion.expanded) {\n ({ recordIds: expandedRecordIds, onRecordIdsChange: setExpandedRecordIds } = rowExpansion.expanded);\n } else {\n [expandedRecordIds, setExpandedRecordIds] = expandedRecordIdsState;\n }\n\n const collapseRow = (record: T) =>\n setExpandedRecordIds?.(expandedRecordIds.filter((id) => id !== getRecordId(record, idAccessor)));\n\n return {\n expandOnClick: trigger !== 'always' && trigger !== 'never',\n isRowExpanded: (record: T) =>\n trigger === 'always' ? true : expandedRecordIds.includes(getRecordId(record, idAccessor)),\n isExpandable: ({ record, index }: { record: T; index: number }) => {\n if (!expandable) {\n return true;\n }\n return expandable({ record, index });\n },\n expandRow: (record: T) => {\n const recordId = getRecordId(record, idAccessor);\n setExpandedRecordIds?.(allowMultiple ? [...expandedRecordIds, recordId] : [recordId]);\n },\n collapseRow,\n collapseProps,\n content:\n ({ record, index }: { record: T; index: number }) =>\n () =>\n content({ record, index, collapse: () => collapseRow(record) }),\n };\n }\n}\n","import type { DropResult } from '@hello-pangea/dnd';\nimport type { DataTableColumn, DataTableColumnGroup } from './types';\n\n/**\n * Utility function that returns a humanized version of a string, e.g. \"camelCase\" -> \"Camel Case\"\n */\nexport function humanize(value: string) {\n const str = value\n .replace(/([a-z\\d])([A-Z]+)/g, '$1 $2')\n .replace(/\\W|_/g, ' ')\n .trim()\n .toLowerCase();\n return `${str.charAt(0).toUpperCase()}${str.slice(1)}`;\n}\n\n/**\n * Utility function that returns an array of values that are present in the first array but not in the second\n */\nexport function differenceBy<T>(arr1: T[], arr2: T[], iteratee: (value: T) => unknown) {\n return arr1.filter((c) => !arr2.map(iteratee).includes(iteratee(c)));\n}\n\n/**\n * Utility function that returns an array of unique values from a given array\n */\nexport function uniqBy<T>(arr: T[], iteratee: (value: T) => unknown) {\n return arr.filter((x, i, self) => i === self.findIndex((y) => iteratee(x) === iteratee(y)));\n}\n\n/**\n * Utility function that returns the value at a given path in an object\n */\nexport function getValueAtPath<T>(obj: T, path: keyof T | (string & NonNullable<unknown>)) {\n if (!path) return undefined;\n const pathArray = (path as string).match(/([^[.\\]])+/g) as string[];\n return pathArray.reduce((prevObj: unknown, key) => prevObj && (prevObj as Record<string, unknown>)[key], obj);\n}\n\n/**\n * Utility function that returns the record id using idAccessor\n */\nexport function getRecordId<T>(\n record: T,\n idAccessor: keyof T | (string & NonNullable<unknown>) | ((record: T) => React.Key)\n) {\n return typeof idAccessor === 'string'\n ? getValueAtPath(record, idAccessor)\n : (idAccessor as (record: T) => React.Key)(record);\n}\n\n/**\n * Utility function that reorders an array of records by a given field used for drag'n'drop functionality.\n * @see https://github.com/hello-pangea/dnd\n */\nexport function reorderRecords<T>(dropResult: DropResult, records: T[]): T[] {\n const draft = structuredClone(records);\n const prev = draft[dropResult.source.index];\n\n if (dropResult.destination) {\n draft.splice(dropResult.source.index, 1);\n draft.splice(dropResult.destination.index, 0, prev);\n }\n\n return draft;\n}\n\n/**\n * Utility function that swaps elements of an array, by a given result from drag'n'drop functionality.\n * @see https://github.com/hello-pangea/dnd\n */\nexport function swapRecords<T>(dropResult: DropResult, records: T[]): T[] {\n const draft = structuredClone(records);\n\n const destination = dropResult.destination;\n\n if (!destination) return draft;\n\n const sourceEl = draft[dropResult.source.index];\n const destEl = draft[destination.index];\n\n draft.splice(destination.index, 1, sourceEl);\n draft.splice(dropResult.source.index, 1, destEl);\n\n return draft;\n}\n\n/**\n * Calculates the maximum depth of nested column groups\n */\nexport function getMaxGroupDepth<T>(groups: readonly DataTableColumnGroup<T>[]): number {\n if (!groups || groups.length === 0) return 0;\n\n return Math.max(\n ...groups.map((group) => {\n if (group.groups && group.groups.length > 0) {\n return 1 + getMaxGroupDepth(group.groups);\n }\n return 1;\n })\n );\n}\n\n/**\n * Flattens nested column groups to extract all columns at the deepest level\n */\nexport function flattenColumns<T>(groups: DataTableColumnGroup<T>[]): DataTableColumn<T>[] {\n const columns: DataTableColumn<T>[] = [];\n\n for (const group of groups) {\n if (group.columns && group.columns.length > 0) {\n columns.push(...group.columns.filter((col) => col != null));\n } else if (group.groups && group.groups.length > 0) {\n columns.push(...flattenColumns(group.groups));\n }\n }\n\n return columns.filter((col) => col != null);\n}\n\n/**\n * Calculates the column span for a group based on visible columns\n */\nexport function calculateColSpan<T>(group: DataTableColumnGroup<T>, visibles?: (boolean | undefined)[]): number {\n if (group.columns && group.columns.length > 0) {\n return group.columns.filter((column, index) => {\n if (column.hidden) return false;\n return visibles ? visibles[index] !== false : true;\n }).length;\n }\n\n if (group.groups && group.groups.length > 0) {\n return group.groups.reduce((sum, subGroup) => {\n return sum + calculateColSpan(subGroup, visibles);\n }, 0);\n }\n\n return 0;\n}\n\n/**\n * Gets all groups at a specific depth level\n */\nexport function getGroupsAtDepth<T>(\n groups: readonly DataTableColumnGroup<T>[],\n targetDepth: number,\n currentDepth: number = 0\n): DataTableColumnGroup<T>[] {\n if (currentDepth === targetDepth) {\n return [...groups];\n }\n\n const result: DataTableColumnGroup<T>[] = [];\n for (const group of groups) {\n if (group.groups && group.groups.length > 0) {\n result.push(...getGroupsAtDepth(group.groups, targetDepth, currentDepth + 1));\n }\n }\n\n return result;\n}\n\n/**\n * Checks if a group needs a right border based on its position and context\n */\nexport function needsRightBorder(\n isLastGroup: boolean,\n hasMoreColumnsAfter: boolean,\n withColumnBorders: boolean\n): boolean {\n if (!withColumnBorders) return false;\n return !isLastGroup || hasMoreColumnsAfter;\n}\n","import { useTimeout } from '@mantine/hooks';\nimport { useEffect, useState } from 'react';\n\nexport function useRowExpansionStatus(open: boolean, transitionDuration?: number) {\n const [expanded, setExpanded] = useState(open);\n const [visible, setVisible] = useState(open);\n\n const expand = useTimeout(() => setExpanded(true), 0);\n const hide = useTimeout(() => setVisible(false), transitionDuration || 200);\n\n useEffect(() => {\n if (open) {\n hide.clear();\n // eslint-disable-next-line react-hooks/set-state-in-effect\n setVisible(true);\n expand.start();\n } else {\n expand.clear();\n setExpanded(false);\n hide.start();\n }\n }, [expand, hide, open]);\n\n return { expanded, visible };\n}\n","export const NOWRAP = 'mantine-datatable-nowrap';\nexport const ELLIPSIS = 'mantine-datatable-ellipsis';\nexport const POINTER_CURSOR = 'mantine-datatable-pointer-cursor';\nexport const CONTEXT_MENU_CURSOR = 'mantine-datatable-context-menu-cursor';\nexport const TEXT_SELECTION_DISABLED = 'mantine-datatable-text-selection-disabled';\nexport const TEXT_ALIGN_LEFT = 'mantine-datatable-text-align-left';\nexport const TEXT_ALIGN_CENTER = 'mantine-datatable-text-align-center';\nexport const TEXT_ALIGN_RIGHT = 'mantine-datatable-text-align-right';\n","import { TableTh } from '@mantine/core';\n\ntype DataTableFooterSelectorPlaceholderCellProps = {\n shadowVisible: boolean;\n};\n\nexport function DataTableFooterSelectorPlaceholderCell({ shadowVisible }: DataTableFooterSelectorPlaceholderCellProps) {\n return (\n <TableTh\n className=\"mantine-datatable-footer-selector-placeholder-cell\"\n data-shadow-visible={shadowVisible || undefined}\n />\n );\n}\n","import {\n Checkbox,\n Group,\n Popover,\n PopoverDropdown,\n PopoverTarget,\n Stack,\n TableThead,\n TableTr,\n type CheckboxProps,\n type MantineStyleProp,\n} from '@mantine/core';\nimport clsx from 'clsx';\nimport { useState } from 'react';\nimport { DataTableColumnGroupHeaderCell } from './DataTableColumnGroupHeaderCell';\nimport { useDataTableColumnsContext } from './DataTableColumns.context';\nimport { DataTableHeaderCell } from './DataTableHeaderCell';\nimport { DataTableHeaderSelectorCell } from './DataTableHeaderSelectorCell';\nimport type { DataTableColumnToggle } from './hooks';\nimport type { DataTableColumn, DataTableColumnGroup, DataTableSelectionTrigger, DataTableSortProps } from './types';\nimport { getGroupsAtDepth, getMaxGroupDepth, humanize } from './utils';\n\ntype DataTableHeaderProps<T> = {\n selectionColumnHeaderRef: React.ForwardedRef<HTMLTableCellElement>;\n className: string | undefined;\n style?: MantineStyleProp;\n sortStatus: DataTableSortProps<T>['sortStatus'];\n sortIcons: DataTableSortProps<T>['sortIcons'];\n onSortStatusChange: DataTableSortProps<T>['onSortStatusChange'];\n columns: DataTableColumn<T>[];\n defaultColumnProps: Omit<DataTableColumn<T>, 'accessor'> | undefined;\n groups: readonly DataTableColumnGroup<T>[] | undefined;\n selectionTrigger: DataTableSelectionTrigger;\n selectionVisible: boolean;\n selectionChecked: boolean;\n selectionIndeterminate: boolean;\n onSelectionChange: (() => void) | undefined;\n selectionCheckboxProps: CheckboxProps;\n selectorCellShadowVisible: boolean;\n selectionColumnClassName: string | undefined;\n selectionColumnStyle: MantineStyleProp;\n withColumnBorders?: boolean;\n ref: React.Ref<HTMLTableSectionElement>;\n};\n\nexport function DataTableHeader<T>({\n selectionColumnHeaderRef,\n className,\n style,\n sortStatus,\n sortIcons,\n onSortStatusChange,\n columns,\n defaultColumnProps,\n groups,\n selectionTrigger,\n selectionVisible,\n selectionChecked,\n selectionIndeterminate,\n onSelectionChange,\n selectionCheckboxProps,\n selectorCellShadowVisible,\n selectionColumnClassName,\n selectionColumnStyle,\n withColumnBorders = false,\n ref,\n}: DataTableHeaderProps<T>) {\n const maxGroupDepth = groups ? getMaxGroupDepth(groups) : 0;\n const totalHeaderRows = maxGroupDepth > 0 ? maxGroupDepth + 1 : 1;\n\n const allRecordsSelectorCell = selectionVisible ? (\n <DataTableHeaderSelectorCell\n ref={selectionColumnHeaderRef}\n className={selectionColumnClassName}\n style={selectionColumnStyle}\n trigger={selectionTrigger}\n shadowVisible={selectorCellShadowVisible}\n checked={selectionChecked}\n indeterminate={selectionIndeterminate}\n checkboxProps={selectionCheckboxProps}\n onChange={onSelectionChange}\n rowSpan={groups ? totalHeaderRows : undefined}\n />\n ) : null;\n\n const { columnsToggle, setColumnsToggle } = useDataTableColumnsContext();\n const [columnsPopoverOpened, setColumnsPopoverOpened] = useState<boolean>(false);\n const someColumnsToggleable = columns.some((column) => column.toggleable);\n\n const columnToggleCheckboxLabels = someColumnsToggleable\n ? Object.fromEntries(columns.map(({ accessor, title }) => [accessor, title ?? humanize(String(accessor))]))\n : undefined;\n\n const content = (\n <TableThead\n className={clsx('mantine-datatable-header', className)}\n style={style}\n ref={ref}\n onContextMenu={\n someColumnsToggleable\n ? (e) => {\n e.preventDefault();\n setColumnsPopoverOpened((columnsPopoverOpened) => !columnsPopoverOpened);\n }\n : undefined\n }\n >\n {groups &&\n Array.from({ length: maxGroupDepth }, (_, depthIndex) => {\n const groupsAtDepth = getGroupsAtDepth(groups, depthIndex);\n\n return (\n <TableTr key={`group-depth-${depthIndex}`}>\n {depthIndex === 0 && allRecordsSelectorCell}\n {groupsAtDepth.map((group, index) => {\n return (\n <DataTableColumnGroupHeaderCell\n key={group.id}\n group={group}\n maxDepth={maxGroupDepth}\n currentDepth={depthIndex}\n previousGroups={groupsAtDepth.slice(0, index)}\n isLastGroup={index === groupsAtDepth.length - 1}\n withColumnBorders={withColumnBorders}\n totalTableColumns={columns.length}\n />\n );\n })}\n </TableTr>\n );\n })}\n\n <TableTr>\n {!groups && allRecordsSelectorCell}\n\n {columns.map(({ hidden, ...columnProps }, index) => {\n if (hidden) return null;\n\n const {\n accessor,\n visibleMediaQuery,\n textAlign,\n width,\n title,\n sortable,\n draggable,\n toggleable,\n resizable,\n titleClassName,\n titleStyle,\n filter,\n filterPopoverProps,\n filterPopoverDisableClickOutside,\n filtering,\n sortKey,\n } = { ...defaultColumnProps, ...columnProps };\n\n return (\n <DataTableHeaderCell<T>\n key={accessor as React.Key}\n accessor={accessor}\n className={titleClassName}\n style={titleStyle}\n visibleMediaQuery={visibleMediaQuery}\n textAlign={textAlign}\n width={width}\n title={title}\n sortable={sortable}\n draggable={draggable}\n toggleable={toggleable}\n // we won't display the resize handle for the last column to avoid overflow render issues\n resizable={resizable && index < columns.length - 1}\n sortStatus={sortStatus}\n sortIcons={sortIcons}\n sortKey={sortKey}\n onSortStatusChange={onSortStatusChange}\n filter={filter}\n filterPopoverProps={filterPopoverProps}\n filterPopoverDisableClickOutside={filterPopoverDisableClickOutside}\n filtering={filtering}\n />\n );\n })}\n </TableTr>\n </TableThead>\n );\n\n return someColumnsToggleable ? (\n <Popover position=\"bottom\" withArrow shadow=\"md\" opened={columnsPopoverOpened} onChange={setColumnsPopoverOpened}>\n <PopoverTarget>{content}</PopoverTarget>\n <PopoverDropdown>\n <Stack>\n {columnsToggle\n .filter((column) => column.toggleable)\n .map((column: DataTableColumnToggle) => {\n return (\n <Group key={column.accessor}>\n <Checkbox\n classNames={{ label: 'mantine-datatable-header-column-toggle-checkbox-label' }}\n size=\"xs\"\n label={columnToggleCheckboxLabels![column.accessor]}\n checked={column.toggled}\n onChange={(e) => {\n setColumnsToggle(\n columnsToggle.map((c: DataTableColumnToggle) => {\n if (c.accessor === column.accessor) {\n return { ...c, toggled: e.currentTarget.checked };\n }\n return c;\n })\n );\n }}\n />\n </Group>\n );\n })}\n </Stack>\n </PopoverDropdown>\n </Popover>\n ) : (\n content\n );\n}\n","import { TableTh } from '@mantine/core';\nimport clsx from 'clsx';\nimport { useMemo } from 'react';\nimport { useMediaQueriesStringOrFunction } from './hooks';\nimport type { DataTableColumnGroup } from './types';\nimport { TEXT_ALIGN_CENTER, TEXT_ALIGN_LEFT, TEXT_ALIGN_RIGHT } from './utilityClasses';\nimport { calculateColSpan, flattenColumns, humanize, needsRightBorder } from './utils';\n\ntype DataTableColumnGroupHeaderCellProps<T> = {\n group: DataTableColumnGroup<T>;\n maxDepth: number;\n currentDepth: number;\n previousGroups: readonly DataTableColumnGroup<T>[];\n isLastGroup: boolean;\n withColumnBorders?: boolean;\n totalTableColumns: number;\n};\n\nexport function DataTableColumnGroupHeaderCell<T>({\n group: { id, columns, groups, title, textAlign, className, style },\n maxDepth,\n currentDepth,\n previousGroups,\n isLastGroup,\n withColumnBorders = false,\n totalTableColumns,\n}: DataTableColumnGroupHeaderCellProps<T>) {\n const allColumns = useMemo(() => {\n if (columns && columns.length > 0) {\n return columns;\n }\n if (groups && groups.length > 0) {\n return flattenColumns([{ id, columns, groups }]);\n }\n return [];\n }, [columns, groups, id]);\n\n const queries = useMemo(() => allColumns.map(({ visibleMediaQuery }) => visibleMediaQuery), [allColumns]);\n const visibles = useMediaQueriesStringOrFunction(queries);\n\n const colSpan = useMemo(() => {\n return calculateColSpan({ id, columns, groups }, visibles);\n }, [id, columns, groups, visibles]);\n\n const columnsBeforeGroup = useMemo(() => {\n return previousGroups.reduce((sum, g) => sum + calculateColSpan(g, visibles), 0);\n }, [previousGroups, visibles]);\n\n const hasSubGroups = groups && groups.length > 0;\n const rowSpan = hasSubGroups ? 1 : maxDepth - currentDepth;\n\n const hasMoreColumns = columnsBeforeGroup + colSpan < totalTableColumns;\n const needsBorder = needsRightBorder(isLastGroup, hasMoreColumns, withColumnBorders);\n\n return colSpan > 0 ? (\n <TableTh\n colSpan={colSpan}\n rowSpan={rowSpan > 1 ? rowSpan : undefined}\n className={clsx(\n 'mantine-datatable-column-group-header-cell',\n {\n [TEXT_ALIGN_LEFT]: textAlign === 'left',\n [TEXT_ALIGN_CENTER]: textAlign === 'center',\n [TEXT_ALIGN_RIGHT]: textAlign === 'right',\n 'mantine-datatable-column-group-header-cell--needs-border': needsBorder,\n },\n className\n )}\n style={style}\n >\n {title ?? humanize(id)}\n </TableTh>\n ) : null;\n}\n","import { ActionIcon, Box, Center, Flex, Group, TableTh, type MantineStyleProp, type MantineTheme } from '@mantine/core';\nimport clsx from 'clsx';\nimport { useRef, useState } from 'react';\nimport { useDataTableColumnsContext } from './DataTableColumns.context';\nimport { DataTableHeaderCellFilter } from './DataTableHeaderCellFilter';\nimport { DataTableResizableHeaderHandle } from './DataTableResizableHeaderHandle';\nimport { useMediaQueryStringOrFunction } from './hooks';\nimport { IconArrowUp } from './icons/IconArrowUp';\nimport { IconArrowsVertical } from './icons/IconArrowsVertical';\nimport { IconGripVertical } from './icons/IconGripVertical';\nimport { IconX } from './icons/IconX';\nimport type { DataTableColumn, DataTableSortProps } from './types';\nimport { ELLIPSIS, NOWRAP, TEXT_ALIGN_CENTER, TEXT_ALIGN_LEFT, TEXT_ALIGN_RIGHT } from './utilityClasses';\nimport { humanize } from './utils';\n\ntype DataTableHeaderCellProps<T> = {\n className: string | undefined;\n style: MantineStyleProp | undefined;\n visibleMediaQuery: string | ((theme: MantineTheme) => string) | undefined;\n title: React.ReactNode | undefined;\n sortStatus: DataTableSortProps<T>['sortStatus'];\n sortIcons: DataTableSortProps<T>['sortIcons'];\n onSortStatusChange: DataTableSortProps<T>['onSortStatusChange'];\n} & Pick<\n DataTableColumn<T>,\n | 'accessor'\n | 'sortable'\n | 'draggable'\n | 'toggleable'\n | 'resizable'\n | 'textAlign'\n | 'width'\n | 'filter'\n | 'filterPopoverProps'\n | 'filterPopoverDisableClickOutside'\n | 'filtering'\n | 'sortKey'\n>;\n\nexport function DataTableHeaderCell<T>({\n className,\n style,\n accessor,\n visibleMediaQuery,\n title,\n sortable,\n draggable,\n toggleable,\n resizable,\n sortIcons,\n textAlign,\n width,\n sortStatus,\n onSortStatusChange,\n filter,\n filterPopoverProps,\n filterPopoverDisableClickOutside,\n filtering,\n sortKey,\n}: DataTableHeaderCellProps<T>) {\n const { setSourceColumn, setTargetColumn, swapColumns, setColumnsToggle } = useDataTableColumnsContext();\n const [dragOver, setDragOver] = useState<boolean>(false);\n const columnRef = useRef<HTMLTableCellElement | null>(null);\n\n if (!useMediaQueryStringOrFunction(visibleMediaQuery)) return null;\n const text = title ?? humanize(accessor as string);\n const tooltip = typeof text === 'string' ? text : undefined;\n\n const sortAction =\n sortable && onSortStatusChange\n ? (e?: React.BaseSyntheticEvent) => {\n if (e?.defaultPrevented) return;\n\n onSortStatusChange({\n sortKey,\n columnAccessor: accessor,\n direction:\n sortStatus?.columnAccessor === accessor\n ? sortStatus.direction === 'asc'\n ? 'desc'\n : 'asc'\n : (sortStatus?.direction ?? 'asc'),\n });\n }\n : undefined;\n\n const handleColumnDragStart = (e: React.DragEvent) => {\n e.stopPropagation();\n setSourceColumn(accessor as string);\n setDragOver(false);\n };\n\n const handleColumnDragOver = (e: React.DragEvent) => {\n e.preventDefault();\n setTargetColumn(accessor as string);\n setDragOver(true);\n };\n\n const handleColumnDrop = () => {\n setTargetColumn(accessor as string);\n setDragOver(false);\n swapColumns();\n };\n\n const handleColumnDragEnter = () => {\n setDragOver(true);\n };\n\n const handleColumnDragLeave = () => {\n setDragOver(false);\n };\n\n const handleColumnToggle = (e: React.MouseEvent<HTMLButtonElement>) => {\n e.stopPropagation();\n\n setColumnsToggle((columnsToggle) =>\n columnsToggle.map((c) => {\n if (c.accessor === accessor) {\n return { ...c, toggled: false };\n }\n return c;\n })\n );\n };\n\n return (\n <TableTh\n data-accessor={accessor}\n className={clsx(\n {\n 'mantine-datatable-header-cell-sortable': sortable,\n 'mantine-datatable-header-cell-toggleable': toggleable,\n 'mantine-datatable-header-cell-resizable': resizable,\n },\n className\n )}\n style={[\n {\n width,\n ...(!resizable ? { minWidth: width, maxWidth: width } : {}),\n },\n style,\n ]}\n role={sortable ? 'button' : undefined}\n tabIndex={sortable ? 0 : undefined}\n onClick={sortAction}\n onKeyDown={(e) => e.key === 'Enter' && sortAction?.()}\n ref={columnRef}\n >\n <Group className=\"mantine-datatable-header-cell-sortable-group\" justify=\"space-between\" wrap=\"nowrap\">\n <Flex\n align=\"center\"\n w=\"100%\"\n className={clsx({\n 'mantine-datatable-header-cell-draggable': draggable,\n 'mantine-datatable-header-cell-drag-over': dragOver,\n })}\n draggable={draggable}\n onDragStart={draggable ? handleColumnDragStart : undefined}\n onDragEnter={draggable ? handleColumnDragEnter : undefined}\n onDragOver={draggable ? handleColumnDragOver : undefined}\n onDrop={draggable ? handleColumnDrop : undefined}\n onDragLeave={draggable ? handleColumnDragLeave : undefined}\n >\n {draggable ? (\n <Center role=\"img\" aria-label=\"Drag column\">\n <ActionIcon\n className=\"mantine-datatable-header-cell-draggable-action-icon\"\n variant=\"subtle\"\n size=\"xs\"\n onClick={(e: React.MouseEvent<HTMLButtonElement>) => {\n e.stopPropagation();\n }}\n >\n <IconGripVertical />\n </ActionIcon>\n </Center>\n ) : null}\n <Box\n className={clsx(\n 'mantine-datatable-header-cell-sortable-text',\n {\n [TEXT_ALIGN_LEFT]: textAlign === 'left',\n [TEXT_ALIGN_CENTER]: textAlign === 'center',\n [TEXT_ALIGN_RIGHT]: textAlign === 'right',\n },\n NOWRAP,\n ELLIPSIS\n )}\n title={tooltip}\n >\n {text}\n </Box>\n </Flex>\n {toggleable ? (\n <Center className=\"mantine-datatable-header-cell-toggleable-icon\" role=\"img\" aria-label=\"Toggle column\">\n <ActionIcon size=\"xs\" variant=\"light\" onClick={handleColumnToggle}>\n <IconX />\n </ActionIcon>\n </Center>\n ) : null}\n {sortable || sortStatus?.columnAccessor === accessor ? (\n <>\n {sortStatus?.columnAccessor === accessor ? (\n <Center\n className={clsx('mantine-datatable-header-cell-sortable-icon', {\n 'mantine-datatable-header-cell-sortable-icon-reversed': sortStatus.direction === 'desc',\n })}\n role=\"img\"\n aria-label={`Sorted ${sortStatus.direction === 'desc' ? 'descending' : 'ascending'}`}\n >\n {sortIcons?.sorted || <IconArrowUp />}\n </Center>\n ) : (\n <Center\n className=\"mantine-datatable-header-cell-sortable-unsorted-icon\"\n role=\"img\"\n aria-label=\"Not sorted\"\n >\n {sortIcons?.unsorted || <IconArrowsVertical />}\n </Center>\n )}\n </>\n ) : null}\n {filter ? (\n <DataTableHeaderCellFilter\n filterPopoverProps={filterPopoverProps}\n isActive={!!filtering}\n filterPopoverDisableClickOutside={filterPopoverDisableClickOutside}\n >\n {filter}\n </DataTableHeaderCellFilter>\n ) : null}\n </Group>\n {resizable && accessor !== '__selection__' ? (\n <DataTableResizableHeaderHandle accessor={accessor as string} columnRef={columnRef} />\n ) : null}\n </TableTh>\n );\n}\n","import { ActionIcon, Popover, PopoverDropdown, PopoverTarget } from '@mantine/core';\nimport { useClickOutside, useDisclosure } from '@mantine/hooks';\nimport type { RefObject } from 'react';\nimport { IconFilter } from './icons/IconFilter';\nimport { IconFilterFilled } from './icons/IconFilterFilled';\nimport type { DataTableColumn } from './types';\n\ntype DataTableHeaderCellFilterProps<T> = {\n children: DataTableColumn<T>['filter'];\n filterPopoverProps: DataTableColumn<T>['filterPopoverProps'];\n filterPopoverDisableClickOutside?: DataTableColumn<T>['filterPopoverDisableClickOutside'];\n isActive: boolean;\n};\n\nexport function DataTableHeaderCellFilter<T>({\n children,\n isActive,\n filterPopoverProps,\n filterPopoverDisableClickOutside,\n}: DataTableHeaderCellFilterProps<T>) {\n const [isOpen, { close, toggle }] = useDisclosure(false);\n const Icon = isActive ? IconFilterFilled : IconFilter;\n let ref: RefObject<HTMLDivElement | null> | undefined = useClickOutside(close);\n if (filterPopoverDisableClickOutside) ref = undefined;\n\n return (\n <Popover withArrow shadow=\"md\" opened={isOpen} onClose={close} trapFocus {...filterPopoverProps}>\n <PopoverTarget>\n <ActionIcon\n className=\"mantine-datatable-header-cell-filter-action-icon\"\n data-active={isActive || undefined}\n size=\"sm\"\n variant=\"default\"\n onClick={(e) => {\n e.preventDefault();\n toggle();\n }}\n onKeyDown={(e) => e.stopPropagation()}\n >\n <Icon />\n </ActionIcon>\n </PopoverTarget>\n <PopoverDropdown ref={ref} onClick={(e) => e.stopPropagation()} onKeyDown={(e) => e.stopPropagation()}>\n {typeof children === 'function' ? children({ close }) : children}\n </PopoverDropdown>\n </Popover>\n );\n}\n","export function IconFilter() {\n return (\n <svg\n width=\"14\"\n height=\"14\"\n viewBox=\"0 0 24 24\"\n strokeWidth=\"2\"\n stroke=\"currentColor\"\n fill=\"none\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <path stroke=\"none\" d=\"M0 0h24v24H0z\" fill=\"none\" />\n <path d=\"M4 4h16v2.172a2 2 0 0 1 -.586 1.414l-4.414 4.414v7l-6 2v-8.5l-4.48 -4.928a2 2 0 0 1 -.52 -1.345v-2.227z\" />\n </svg>\n );\n}\n","export function IconFilterFilled() {\n return (\n <svg\n width=\"14\"\n height=\"14\"\n viewBox=\"0 0 24 24\"\n strokeWidth=\"2\"\n stroke=\"currentColor\"\n fill=\"none\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <path stroke=\"none\" d=\"M0 0h24v24H0z\" fill=\"none\" />\n <path\n d=\"M20 3h-16a1 1 0 0 0 -1 1v2.227l.008 .223a3 3 0 0 0 .772 1.795l4.22 4.641v8.114a1 1 0 0 0 1.316 .949l6 -2l.108 -.043a1 1 0 0 0 .576 -.906v-6.586l4.121 -4.12a3 3 0 0 0 .879 -2.123v-2.171a1 1 0 0 0 -1 -1z\"\n strokeWidth=\"0\"\n fill=\"currentColor\"\n />\n </svg>\n );\n}\n","import { useDirection } from '@mantine/core';\nimport type { RefObject } from 'react';\nimport { useCallback, useRef, useState } from 'react';\nimport { useDataTableColumnsContext } from './DataTableColumns.context';\n\ntype DataTableResizableHeaderHandleProps = {\n accessor: string;\n columnRef: RefObject<HTMLTableCellElement | null>;\n};\n\nexport const DataTableResizableHeaderHandle = (props: DataTableResizableHeaderHandleProps) => {\n const { accessor, columnRef } = props;\n const [isResizing, setIsResizing] = useState(false);\n const startXRef = useRef<number>(0);\n const originalWidthsRef = useRef<{ current: number; next: number }>({ current: 0, next: 0 });\n\n const { dir } = useDirection();\n const isRTL = dir === 'rtl';\n\n const { setMultipleColumnWidths } = useDataTableColumnsContext();\n\n const handleMouseDown = useCallback(\n (event: React.MouseEvent<HTMLDivElement>) => {\n event.preventDefault();\n event.stopPropagation();\n\n if (!columnRef.current) return;\n\n const currentColumn = columnRef.current;\n\n // Find the next resizable data column (skip selection column)\n let nextColumn = currentColumn.nextElementSibling as HTMLTableCellElement | null;\n while (nextColumn) {\n const nextAccessor = nextColumn.getAttribute('data-accessor');\n if (nextAccessor && nextAccessor !== '__selection__') {\n break; // Found a valid data column\n }\n nextColumn = nextColumn.nextElementSibling as HTMLTableCellElement | null;\n }\n\n if (!nextColumn) {\n return; // No next column to resize with\n }\n\n const nextAccessor = nextColumn.getAttribute('data-accessor');\n if (!nextAccessor) {\n return; // Next column missing data-accessor\n }\n\n // Special handling for next column being selection column\n const isNextSelection = nextAccessor === '__selection__';\n\n // Store initial state\n setIsResizing(true);\n startXRef.current = event.clientX;\n\n // Get current computed widths (not getBoundingClientRect which might include borders/padding)\n const currentWidth = currentColumn.offsetWidth;\n const nextWidth = nextColumn.offsetWidth;\n\n originalWidthsRef.current = {\n current: currentWidth,\n next: nextWidth,\n };\n\n // Global mouse event handlers\n const handleMouseMove = (moveEvent: MouseEvent) => {\n if (!columnRef.current) return;\n\n const currentCol = columnRef.current;\n const nextCol = currentCol.nextElementSibling as HTMLTableCellElement | null;\n if (!nextCol) return;\n\n let deltaX = moveEvent.clientX - startXRef.current;\n\n // In RTL, reverse the deltaX to make resizing follow mouse movement naturally\n if (isRTL) {\n deltaX = -deltaX;\n }\n\n const minWidth = 50;\n\n // Calculate the maximum possible movement in both directions\n const maxShrinkCurrent = originalWidthsRef.current.current - minWidth;\n const maxShrinkNext = originalWidthsRef.current.next - minWidth;\n\n // Limit deltaX to respect both columns' minimum widths\n const constrainedDelta = Math.max(\n -maxShrinkCurrent, // Don't shrink current below minimum\n Math.min(deltaX, maxShrinkNext) // Don't shrink next below minimum\n );\n\n const finalCurrentWidth = originalWidthsRef.current.current + constrainedDelta;\n const finalNextWidth = originalWidthsRef.current.next - constrainedDelta;\n\n // Apply to DOM immediately for smooth visual feedback\n currentCol.style.width = `${finalCurrentWidth}px`;\n nextCol.style.width = `${finalNextWidth}px`;\n\n // Ensure the table maintains fixed layout during resize\n currentCol.style.minWidth = `${finalCurrentWidth}px`;\n currentCol.style.maxWidth = `${finalCurrentWidth}px`;\n nextCol.style.minWidth = `${finalNextWidth}px`;\n nextCol.style.maxWidth = `${finalNextWidth}px`;\n };\n\n const handleMouseUp = () => {\n if (!columnRef.current) return;\n\n const currentCol = columnRef.current;\n const nextCol = currentCol.nextElementSibling as HTMLTableCellElement | null;\n\n setIsResizing(false);\n\n // Reset global styles\n document.body.style.cursor = 'initial';\n document.body.style.userSelect = 'initial';\n\n // Get final widths from the applied styles\n const finalCurrentWidth = parseInt(currentCol.style.width) || currentCol.offsetWidth;\n const finalNextWidth = nextCol ? parseInt(nextCol.style.width) || nextCol.offsetWidth : 0;\n\n // Update context with final widths\n const updates = [{ accessor, width: `${finalCurrentWidth}px` }];\n\n if (nextCol && !isNextSelection) {\n const nextAccessor = nextCol.getAttribute('data-accessor');\n if (nextAccessor) {\n updates.push({\n accessor: nextAccessor,\n width: `${finalNextWidth}px`,\n });\n }\n }\n\n // Update the context AFTER we've applied the styles\n setTimeout(() => {\n setMultipleColumnWidths(updates);\n }, 0);\n\n // Remove event listeners\n document.removeEventListener('mousemove', handleMouseMove);\n document.removeEventListener('mouseup', handleMouseUp);\n };\n\n // Set global styles\n document.body.style.cursor = 'col-resize';\n document.body.style.userSelect = 'none';\n\n // Add event listeners\n document.addEventListener('mousemove', handleMouseMove);\n document.addEventListener('mouseup', handleMouseUp);\n },\n [accessor, columnRef, isRTL, setMultipleColumnWidths]\n );\n\n const handleDoubleClick = useCallback(() => {\n if (!columnRef.current) return;\n\n const currentColumn = columnRef.current;\n const nextColumn = currentColumn.nextElementSibling as HTMLTableCellElement | null;\n\n // Clear any inline styles that might interfere with natural sizing\n currentColumn.style.width = '';\n currentColumn.style.minWidth = '';\n currentColumn.style.maxWidth = '';\n\n // Reset current column to auto width\n const updates = [{ accessor, width: 'auto' }];\n\n if (nextColumn) {\n nextColumn.style.width = '';\n nextColumn.style.minWidth = '';\n nextColumn.style.maxWidth = '';\n\n const nextAccessor = nextColumn.getAttribute('data-accessor');\n // Only reset next column if it's not the selection column\n if (nextAccessor && nextAccessor !== '__selection__') {\n updates.push({ accessor: nextAccessor, width: 'auto' });\n }\n }\n\n // Use setTimeout to ensure DOM changes are applied before context update\n setTimeout(() => {\n setMultipleColumnWidths(updates);\n }, 0);\n }, [accessor, columnRef, setMultipleColumnWidths]);\n\n return (\n <div\n className=\"mantine-datatable-header-resizable-handle\"\n style={{\n cursor: isResizing ? 'col-resize' : undefined,\n }}\n onMouseDown={handleMouseDown}\n onDoubleClick={handleDoubleClick}\n onClick={(event) => event.stopPropagation()} // Prevent column sorting\n title=\"Drag to resize column, double-click to reset\"\n />\n );\n};\n","export function IconArrowUp() {\n return (\n <svg\n width=\"14\"\n height=\"14\"\n viewBox=\"0 0 24 24\"\n strokeWidth=\"2\"\n stroke=\"currentColor\"\n fill=\"none\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <path stroke=\"none\" d=\"M0 0h24v24H0z\" fill=\"none\" />\n <path d=\"M12 5l0 14\" />\n <path d=\"M16 9l-4 -4\" />\n <path d=\"M8 9l4 -4\" />\n </svg>\n );\n}\n","export function IconArrowsVertical() {\n return (\n <svg\n width=\"14\"\n height=\"14\"\n viewBox=\"0 0 24 24\"\n strokeWidth=\"2\"\n stroke=\"currentColor\"\n fill=\"none\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <path stroke=\"none\" d=\"M0 0h24v24H0z\" fill=\"none\" />\n <path d=\"M8 7l4 -4l4 4\" />\n <path d=\"M8 17l4 4l4 -4\" />\n <path d=\"M12 3l0 18\" />\n </svg>\n );\n}\n","export function IconGripVertical() {\n return (\n <svg\n width=\"14\"\n height=\"14\"\n viewBox=\"0 0 24 24\"\n strokeWidth=\"2\"\n stroke=\"currentColor\"\n fill=\"none\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <path stroke=\"none\" d=\"M0 0h24v24H0z\" fill=\"none\" />\n <path d=\"M9 5m-1 0a1 1 0 1 0 2 0a1 1 0 1 0 -2 0\" />\n <path d=\"M9 12m-1 0a1 1 0 1 0 2 0a1 1 0 1 0 -2 0\" />\n <path d=\"M9 19m-1 0a1 1 0 1 0 2 0a1 1 0 1 0 -2 0\" />\n <path d=\"M15 5m-1 0a1 1 0 1 0 2 0a1 1 0 1 0 -2 0\" />\n <path d=\"M15 12m-1 0a1 1 0 1 0 2 0a1 1 0 1 0 -2 0\" />\n <path d=\"M15 19m-1 0a1 1 0 1 0 2 0a1 1 0 1 0 -2 0\" />\n </svg>\n );\n}\n","export function IconX() {\n return (\n <svg\n width=\"14\"\n height=\"14\"\n viewBox=\"0 0 24 24\"\n strokeWidth=\"2\"\n stroke=\"currentColor\"\n fill=\"none\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <path stroke=\"none\" d=\"M0 0h24v24H0z\" fill=\"none\" />\n <path d=\"M18 6l-12 12\" />\n <path d=\"M6 6l12 12\" />\n </svg>\n );\n}\n","import type { MantineStyleProp } from '@mantine/core';\nimport { Checkbox, TableTh, type CheckboxProps } from '@mantine/core';\nimport clsx from 'clsx';\nimport type { DataTableSelectionTrigger } from './types';\nimport { POINTER_CURSOR } from './utilityClasses';\n\ntype DataTableHeaderSelectorCellProps = {\n className: string | undefined;\n style: MantineStyleProp | undefined;\n trigger: DataTableSelectionTrigger;\n shadowVisible: boolean;\n checked: boolean;\n indeterminate: boolean;\n checkboxProps: CheckboxProps;\n onChange: (() => void) | undefined;\n rowSpan: number | undefined;\n ref: React.Ref<HTMLTableCellElement>;\n};\n\nexport function DataTableHeaderSelectorCell({\n className,\n style,\n trigger,\n shadowVisible,\n checked,\n indeterminate,\n checkboxProps,\n onChange,\n rowSpan,\n ref,\n}: DataTableHeaderSelectorCellProps) {\n const enabled = !checkboxProps.disabled;\n\n return (\n <TableTh\n ref={ref}\n className={clsx(\n 'mantine-datatable-header-selector-cell',\n { [POINTER_CURSOR]: trigger === 'cell' && enabled },\n className\n )}\n style={style}\n rowSpan={rowSpan}\n data-shadow-visible={shadowVisible || undefined}\n data-accessor=\"__selection__\"\n onClick={trigger === 'cell' && enabled ? onChange : undefined}\n >\n <Checkbox\n classNames={enabled ? { input: POINTER_CURSOR } : undefined}\n checked={checked}\n indeterminate={indeterminate}\n onChange={onChange}\n {...checkboxProps}\n disabled={!(onChange || checkboxProps.onChange) || checkboxProps.disabled}\n />\n </TableTh>\n );\n}\n","import { Center, Loader, type MantineColor, type MantineLoader, type MantineSize } from '@mantine/core';\nimport clsx from 'clsx';\n\ntype DataTableLoaderProps = {\n fetching: boolean | undefined;\n customContent: React.ReactNode | undefined;\n backgroundBlur: number | undefined;\n size: MantineSize | (string & NonNullable<unknown>) | number | undefined;\n type: MantineLoader | undefined;\n color: MantineColor | undefined;\n};\n\nexport function DataTableLoader({ fetching, customContent, backgroundBlur, size, type, color }: DataTableLoaderProps) {\n return (\n <Center\n className={clsx('mantine-datatable-loader', { 'mantine-datatable-loader-fetching': fetching })}\n style={[{ backdropFilter: backgroundBlur ? `blur(${backgroundBlur}px)` : undefined }]}\n >\n {fetching && (customContent || <Loader size={size} type={type} color={color} />)}\n </Center>\n );\n}\n","import { Box, Pagination, Text, rem, type MantineSpacing, type MantineStyleProp } from '@mantine/core';\nimport clsx from 'clsx';\nimport { DataTablePageSizeSelector } from './DataTablePageSizeSelector';\nimport { getPaginationCssVariables } from './cssVariables';\nimport { useMediaQueryStringOrFunction } from './hooks';\nimport type { DataTablePaginationProps } from './types';\nimport type { PaginationRenderContext } from './types/PaginationRenderContext';\nimport type { WithOptionalProperty, WithRequiredProperty } from './types/utils';\n\ntype DataTablePaginationComponentProps = WithOptionalProperty<\n WithRequiredProperty<\n DataTablePaginationProps,\n 'loadingText' | 'paginationSize' | 'recordsPerPageLabel' | 'paginationWrapBreakpoint' | 'getPaginationControlProps'\n >,\n 'onRecordsPerPageChange' | 'recordsPerPageOptions' | 'renderPagination'\n> & {\n className: string | undefined;\n style: MantineStyleProp | undefined;\n fetching: boolean | undefined;\n recordsLength: number | undefined;\n horizontalSpacing: MantineSpacing | undefined;\n noRecordsText: string;\n};\n\nexport function DataTablePagination({\n className,\n style,\n fetching,\n page,\n onPageChange,\n paginationWithEdges,\n paginationWithControls,\n paginationActiveTextColor,\n paginationActiveBackgroundColor,\n paginationSize,\n loadingText,\n noRecordsText,\n paginationText,\n totalRecords,\n recordsPerPage,\n onRecordsPerPageChange,\n recordsPerPageLabel,\n recordsPerPageOptions,\n recordsLength,\n horizontalSpacing,\n paginationWrapBreakpoint,\n getPaginationControlProps,\n getPaginationItemProps,\n renderPagination,\n}: DataTablePaginationComponentProps) {\n let paginationTextValue: React.ReactNode;\n if (totalRecords) {\n const from = (page - 1) * recordsPerPage + 1;\n const to = from + (recordsLength || 0) - 1;\n paginationTextValue = paginationText!({ from, to, totalRecords });\n } else {\n paginationTextValue = fetching ? loadingText : noRecordsText;\n }\n\n const totalPages = totalRecords && recordsPerPage ? Math.max(1, Math.ceil(totalRecords / recordsPerPage)) : 1;\n\n const from = totalRecords ? (page - 1) * (recordsPerPage ?? 0) + 1 : undefined;\n const to = totalRecords ? (from ?? 1) + (recordsLength ?? 0) - 1 : undefined;\n\n const isAbovePaginationWrapBreakpoint = useMediaQueryStringOrFunction(\n ({ breakpoints }) =>\n `(min-width: ${\n typeof paginationWrapBreakpoint === 'number'\n ? `${rem(paginationWrapBreakpoint)}rem`\n : breakpoints[paginationWrapBreakpoint] || paginationWrapBreakpoint\n })`\n );\n\n const isWrapped = !isAbovePaginationWrapBreakpoint;\n\n const Controls: PaginationRenderContext['Controls'] = {\n Text: (props) => (\n <Text component=\"div\" className=\"mantine-datatable-pagination-text\" size={paginationSize} {...props}>\n {paginationTextValue}\n </Text>\n ),\n PageSizeSelector: (props) =>\n recordsPerPageOptions ? (\n <DataTablePageSizeSelector\n activeTextColor={paginationActiveTextColor}\n activeBackgroundColor={paginationActiveBackgroundColor}\n size={paginationSize}\n label={recordsPerPageLabel}\n values={recordsPerPageOptions}\n value={recordsPerPage!}\n onChange={onRecordsPerPageChange!}\n {...props}\n />\n ) : (\n <></>\n ),\n Pagination: (props) => (\n <Pagination\n classNames={{\n root: clsx('mantine-datatable-pagination-pages', {\n 'mantine-datatable-pagination-pages-fetching': fetching || !recordsLength,\n }),\n control: 'mantine-datatable-pagination-pages-control',\n }}\n style={\n paginationActiveTextColor || paginationActiveBackgroundColor\n ? (theme) =>\n getPaginationCssVariables({\n theme,\n paginationActiveTextColor,\n paginationActiveBackgroundColor,\n })\n : undefined\n }\n withEdges={paginationWithEdges}\n withControls={paginationWithControls}\n value={page}\n onChange={onPageChange}\n size={paginationSize}\n total={totalPages}\n getControlProps={getPaginationControlProps}\n getItemProps={getPaginationItemProps}\n {...props}\n />\n ),\n };\n\n const ctx: PaginationRenderContext = {\n state: {\n paginationSize,\n page,\n totalPages,\n totalRecords,\n recordsPerPage,\n recordsLength,\n fetching,\n from,\n to,\n isWrapped,\n },\n actions: {\n setPage: (n) => onPageChange?.(n),\n setRecordsPerPage: onRecordsPerPageChange ? (n) => onRecordsPerPageChange(n) : undefined,\n },\n Controls,\n };\n\n return (\n <Box\n px={horizontalSpacing ?? 'xs'}\n py=\"xs\"\n className={clsx('mantine-datatable-pagination', className)}\n style={[{ flexDirection: isWrapped ? 'column' : 'row' }, style]}\n >\n {typeof renderPagination === 'function' ? (\n renderPagination(ctx)\n ) : (\n <>\n <Controls.Text />\n <Controls.PageSizeSelector />\n <Controls.Pagination />\n </>\n )}\n </Box>\n );\n}\n","import type { MantineColor } from '@mantine/core';\nimport { Button, Group, Menu, MenuDropdown, MenuItem, MenuTarget, Text, rem, type MantineSize } from '@mantine/core';\nimport clsx from 'clsx';\nimport { getPaginationCssVariables } from './cssVariables';\nimport { IconSelector } from './icons/IconSelector';\n\ntype DataTablePageSizeSelectorComponentProps = {\n size: MantineSize;\n label: string;\n values: number[];\n value: number;\n activeTextColor: MantineColor | { dark: MantineColor; light: MantineColor } | undefined;\n activeBackgroundColor: MantineColor | { dark: MantineColor; light: MantineColor } | undefined;\n onChange: (value: number) => void;\n};\n\nconst HEIGHT: Record<MantineSize, string> = { xs: rem(22), sm: rem(26), md: rem(32), lg: rem(38), xl: rem(44) };\n\nexport function DataTablePageSizeSelector({\n size,\n label,\n values,\n value,\n activeTextColor,\n activeBackgroundColor,\n onChange,\n}: DataTablePageSizeSelectorComponentProps) {\n return (\n <Group gap=\"xs\">\n <Text component=\"div\" size={size}>\n {label}\n </Text>\n <Menu withinPortal withArrow offset={2} classNames={{ arrow: 'mantine-datatable-page-size-selector-menu-arrow' }}>\n <MenuTarget>\n <Button\n size={size}\n variant=\"default\"\n classNames={{ section: 'mantine-datatable-page-size-selector-button-icon' }}\n rightSection={<IconSelector />}\n style={[\n { fontWeight: 'normal' },\n (theme) => ({\n height: HEIGHT[size],\n paddingLeft: theme.spacing[size],\n paddingRight: theme.spacing[size],\n }),\n ]}\n >\n {value}\n </Button>\n </MenuTarget>\n <MenuDropdown>\n {values.map((v) => {\n const isCurrent = v === value;\n return (\n <MenuItem\n key={v}\n className={clsx({ 'mantine-datatable-page-size-selector-active': isCurrent })}\n style={[\n { height: HEIGHT[size] },\n isCurrent && (activeTextColor || activeBackgroundColor)\n ? (theme) =>\n getPaginationCssVariables({\n theme,\n paginationActiveTextColor: activeTextColor,\n paginationActiveBackgroundColor: activeBackgroundColor,\n })\n : undefined,\n ]}\n disabled={isCurrent}\n onClick={() => onChange(v)}\n >\n <Text component=\"div\" size={size}>\n {v}\n </Text>\n </MenuItem>\n );\n })}\n </MenuDropdown>\n </Menu>\n </Group>\n );\n}\n","import { parseThemeColor, type MantineColor, type MantineTheme } from '@mantine/core';\nimport type { DataTableProps } from './types';\n\nexport function getColor(\n color: MantineColor | undefined | { light: MantineColor; dark: MantineColor },\n theme: MantineTheme,\n colorScheme: 'light' | 'dark'\n) {\n return color\n ? parseThemeColor({\n color: typeof color === 'object' ? color[colorScheme] : color,\n theme,\n }).value\n : undefined;\n}\n\nexport function getTableCssVariables({\n theme,\n c,\n backgroundColor,\n borderColor,\n rowBorderColor,\n stripedColor,\n highlightOnHoverColor,\n}: Pick<\n DataTableProps,\n 'c' | 'backgroundColor' | 'borderColor' | 'rowBorderColor' | 'stripedColor' | 'highlightOnHoverColor'\n> & {\n theme: MantineTheme;\n}) {\n return {\n '--mantine-datatable-color-light': getColor(c, theme, 'light'),\n '--mantine-datatable-color-dark': getColor(c, theme, 'dark'),\n\n '--mantine-datatable-background-color-light': getColor(backgroundColor, theme, 'light'),\n '--mantine-datatable-background-color-dark': getColor(backgroundColor, theme, 'dark'),\n\n '--mantine-datatable-border-color-light': getColor(borderColor, theme, 'light'),\n '--mantine-datatable-border-color-dark': getColor(borderColor, theme, 'dark'),\n\n '--mantine-datatable-row-border-color-light': getColor(rowBorderColor, theme, 'light'),\n '--mantine-datatable-row-border-color-dark': getColor(rowBorderColor, theme, 'dark'),\n\n '--mantine-datatable-striped-color-light': getColor(stripedColor, theme, 'light'),\n '--mantine-datatable-striped-color-dark': getColor(stripedColor, theme, 'dark'),\n\n '--mantine-datatable-highlight-on-hover-color-light': getColor(highlightOnHoverColor, theme, 'light'),\n '--mantine-datatable-highlight-on-hover-color-dark': getColor(highlightOnHoverColor, theme, 'dark'),\n };\n}\n\nexport function getPaginationCssVariables({\n theme,\n paginationActiveTextColor,\n paginationActiveBackgroundColor,\n}: Pick<DataTableProps, 'paginationActiveTextColor' | 'paginationActiveBackgroundColor'> & {\n theme: MantineTheme;\n}) {\n return {\n '--mantine-datatable-pagination-active-text-color-light': getColor(paginationActiveTextColor, theme, 'light'),\n '--mantine-datatable-pagination-active-text-color-dark': getColor(paginationActiveTextColor, theme, 'dark'),\n\n '--mantine-datatable-pagination-active-background-color-light': getColor(\n paginationActiveBackgroundColor,\n theme,\n 'light'\n ),\n '--mantine-datatable-pagination-active-background-color-dark': getColor(\n paginationActiveBackgroundColor,\n theme,\n 'dark'\n ),\n };\n}\n\nexport function getRowCssVariables({\n theme,\n color,\n backgroundColor,\n}: {\n theme: MantineTheme;\n color: MantineColor | undefined | { light: MantineColor; dark: MantineColor };\n backgroundColor: MantineColor | undefined | { light: MantineColor; dark: MantineColor };\n}) {\n return {\n '--mantine-datatable-row-color-light': getColor(color, theme, 'light'),\n '--mantine-datatable-row-color-dark': getColor(color, theme, 'dark'),\n '--mantine-datatable-row-background-color-light': getColor(backgroundColor, theme, 'light'),\n '--mantine-datatable-row-background-color-dark': getColor(backgroundColor, theme, 'dark'),\n };\n}\n","export function IconSelector() {\n return (\n <svg\n width=\"14\"\n height=\"14\"\n viewBox=\"0 0 24 24\"\n strokeWidth=\"2\"\n stroke=\"currentColor\"\n fill=\"none\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <path stroke=\"none\" d=\"M0 0h24v24H0z\" fill=\"none\" />\n <path d=\"M8 9l4 -4l4 4\" />\n <path d=\"M16 15l-4 4l-4 -4\" />\n </svg>\n );\n}\n","import type { MantineTheme } from '@mantine/core';\nimport { TableTr, type CheckboxProps, type MantineColor, type MantineStyleProp } from '@mantine/core';\nimport clsx from 'clsx';\nimport { DataTableRowCell } from './DataTableRowCell';\nimport { DataTableRowExpansion } from './DataTableRowExpansion';\nimport { DataTableRowSelectorCell } from './DataTableRowSelectorCell';\nimport { getRowCssVariables } from './cssVariables';\nimport type { useRowExpansion } from './hooks';\nimport type {\n DataTableCellClickHandler,\n DataTableColumn,\n DataTableDefaultColumnProps,\n DataTableProps,\n DataTableRowClickHandler,\n DataTableSelectionTrigger,\n} from './types';\nimport { CONTEXT_MENU_CURSOR, POINTER_CURSOR } from './utilityClasses';\n\ntype DataTableRowProps<T> = {\n record: T;\n index: number;\n columns: DataTableColumn<T>[];\n defaultColumnProps: DataTableDefaultColumnProps<T> | undefined;\n defaultColumnRender:\n | ((record: T, index: number, accessor: keyof T | (string & NonNullable<unknown>)) => React.ReactNode)\n | undefined;\n selectionTrigger: DataTableSelectionTrigger;\n selectionVisible: boolean;\n selectionChecked: boolean;\n onSelectionChange: React.MouseEventHandler | undefined;\n isRecordSelectable: ((record: T, index: number) => boolean) | undefined;\n selectionCheckboxProps: CheckboxProps | undefined;\n getSelectionCheckboxProps: (record: T, index: number) => CheckboxProps;\n onClick: DataTableRowClickHandler<T> | undefined;\n onDoubleClick: DataTableRowClickHandler<T> | undefined;\n onContextMenu: DataTableRowClickHandler<T> | undefined;\n onCellClick: DataTableCellClickHandler<T> | undefined;\n onCellDoubleClick: DataTableCellClickHandler<T> | undefined;\n onCellContextMenu: DataTableCellClickHandler<T> | undefined;\n expansion: ReturnType<typeof useRowExpansion<T>>;\n customAttributes?: (record: T, index: number) => Record<string, unknown>;\n color:\n | ((record: T, index: number) => MantineColor | undefined | { light: MantineColor; dark: MantineColor })\n | undefined;\n backgroundColor:\n | ((record: T, index: number) => MantineColor | undefined | { light: MantineColor; dark: MantineColor })\n | undefined;\n className?: string | ((record: T, index: number) => string | undefined);\n style?: (record: T, index: number) => MantineStyleProp | undefined;\n selectorCellShadowVisible: boolean;\n selectionColumnClassName: string | undefined;\n selectionColumnStyle: MantineStyleProp | undefined;\n idAccessor: string;\n} & Pick<DataTableProps<T>, 'rowFactory'>;\n\nexport function DataTableRow<T>({\n record,\n index,\n columns,\n defaultColumnProps,\n defaultColumnRender,\n selectionTrigger,\n selectionVisible,\n selectionChecked,\n onSelectionChange,\n isRecordSelectable,\n selectionCheckboxProps,\n getSelectionCheckboxProps,\n onClick,\n onDoubleClick,\n onContextMenu,\n onCellClick,\n onCellDoubleClick,\n onCellContextMenu,\n expansion,\n customAttributes,\n color,\n backgroundColor,\n className,\n style,\n selectorCellShadowVisible,\n selectionColumnClassName,\n selectionColumnStyle,\n rowFactory,\n}: Readonly<DataTableRowProps<T>>) {\n const cols = (\n <>\n {selectionVisible && (\n <DataTableRowSelectorCell<T>\n className={selectionColumnClassName}\n style={selectionColumnStyle}\n record={record}\n index={index}\n trigger={selectionTrigger}\n withRightShadow={selectorCellShadowVisible}\n checked={selectionChecked}\n disabled={!onSelectionChange || (isRecordSelectable ? !isRecordSelectable(record, index) : false)}\n onChange={onSelectionChange}\n checkboxProps={selectionCheckboxProps}\n getCheckboxProps={getSelectionCheckboxProps}\n />\n )}\n\n {columns.map(({ hidden, hiddenContent, ...columnProps }, columnIndex) => {\n if (hidden || hiddenContent) return null;\n\n const {\n accessor,\n visibleMediaQuery,\n textAlign,\n noWrap,\n ellipsis,\n width,\n render,\n cellsClassName,\n cellsStyle,\n customCellAttributes,\n } = { ...defaultColumnProps, ...columnProps };\n\n return (\n <DataTableRowCell<T>\n key={accessor as React.Key}\n className={typeof cellsClassName === 'function' ? cellsClassName(record, index) : cellsClassName}\n style={cellsStyle?.(record, index)}\n visibleMediaQuery={visibleMediaQuery}\n record={record}\n index={index}\n onClick={\n onCellClick\n ? (event) => onCellClick({ event, record, index, column: columnProps, columnIndex })\n : undefined\n }\n onDoubleClick={\n onCellDoubleClick\n ? (event) => onCellDoubleClick({ event, record, index, column: columnProps, columnIndex })\n : undefined\n }\n onContextMenu={\n onCellContextMenu\n ? (event) => onCellContextMenu({ event, record, index, column: columnProps, columnIndex })\n : undefined\n }\n accessor={accessor}\n textAlign={textAlign}\n noWrap={noWrap}\n ellipsis={ellipsis}\n width={width}\n render={render}\n defaultRender={defaultColumnRender}\n customCellAttributes={customCellAttributes}\n />\n );\n })}\n </>\n );\n\n const expandedElement = expansion && (\n <DataTableRowExpansion\n colSpan={columns.filter(({ hidden }) => !hidden).length + (selectionVisible ? 1 : 0)}\n open={expansion.isRowExpanded(record)}\n content={expansion.content({ record, index })}\n collapseProps={expansion.collapseProps}\n />\n );\n\n const rowProps = getRowProps({\n record,\n index,\n selectionChecked,\n onClick,\n onDoubleClick,\n onContextMenu,\n expansion,\n customAttributes,\n color,\n backgroundColor,\n className,\n style,\n });\n\n if (rowFactory) {\n return rowFactory({\n record,\n index,\n rowProps,\n children: cols,\n expandedElement,\n });\n }\n\n return (\n <>\n <TableTr {...rowProps}>{cols}</TableTr>\n {expandedElement}\n </>\n );\n}\n\ntype GetRowPropsArgs<T> = Readonly<\n Pick<\n DataTableRowProps<T>,\n | 'record'\n | 'index'\n | 'selectionChecked'\n | 'onClick'\n | 'onDoubleClick'\n | 'onContextMenu'\n | 'expansion'\n | 'customAttributes'\n | 'color'\n | 'backgroundColor'\n | 'className'\n | 'style'\n >\n>;\n\nexport function getRowProps<T>({\n record,\n index,\n selectionChecked,\n onClick,\n onDoubleClick,\n onContextMenu,\n expansion,\n customAttributes,\n color,\n backgroundColor,\n className,\n style,\n}: GetRowPropsArgs<T>) {\n return {\n className: clsx(\n 'mantine-datatable-row',\n {\n [POINTER_CURSOR]:\n onClick || onDoubleClick || (expansion?.isExpandable({ record, index }) && expansion?.expandOnClick),\n },\n { [CONTEXT_MENU_CURSOR]: onContextMenu },\n typeof className === 'function' ? className(record, index) : className\n ),\n\n ['data-selected']: selectionChecked || undefined,\n\n onClick: (e: React.MouseEvent<HTMLTableRowElement, MouseEvent>) => {\n if (expansion) {\n const { isExpandable, isRowExpanded, expandOnClick, expandRow, collapseRow } = expansion;\n if (isExpandable({ record, index }) && expandOnClick) {\n if (isRowExpanded(record)) {\n collapseRow(record);\n } else {\n expandRow(record);\n }\n }\n }\n onClick?.({ event: e, record, index });\n },\n onDoubleClick: onDoubleClick\n ? (e: React.MouseEvent<HTMLTableRowElement, MouseEvent>) => onDoubleClick({ event: e, record, index })\n : undefined,\n onContextMenu: onContextMenu\n ? (e: React.MouseEvent<HTMLTableRowElement, MouseEvent>) => onContextMenu({ event: e, record, index })\n : undefined,\n style: [\n color || backgroundColor\n ? (theme: MantineTheme) => {\n const colorValue = color?.(record, index);\n const backgroundColorValue = backgroundColor?.(record, index);\n return getRowCssVariables({ theme, color: colorValue, backgroundColor: backgroundColorValue });\n }\n : undefined,\n style?.(record, index),\n ],\n ...(customAttributes?.(record, index) ?? {}),\n };\n}\n","import { TableTd, type MantineStyleProp } from '@mantine/core';\nimport clsx from 'clsx';\nimport { useMediaQueryStringOrFunction } from './hooks';\nimport type { DataTableColumn } from './types';\nimport {\n CONTEXT_MENU_CURSOR,\n ELLIPSIS,\n NOWRAP,\n POINTER_CURSOR,\n TEXT_ALIGN_CENTER,\n TEXT_ALIGN_LEFT,\n TEXT_ALIGN_RIGHT,\n} from './utilityClasses';\nimport { getValueAtPath } from './utils';\n\ntype DataTableRowCellProps<T> = {\n className: string | undefined;\n style: MantineStyleProp | undefined;\n record: T;\n index: number;\n defaultRender:\n | ((record: T, index: number, accessor: keyof T | (string & NonNullable<unknown>)) => React.ReactNode)\n | undefined;\n onClick: React.MouseEventHandler<HTMLTableCellElement> | undefined;\n onDoubleClick: React.MouseEventHandler<HTMLTableCellElement> | undefined;\n onContextMenu: React.MouseEventHandler<HTMLTableCellElement> | undefined;\n} & Pick<\n DataTableColumn<T>,\n 'accessor' | 'visibleMediaQuery' | 'textAlign' | 'width' | 'noWrap' | 'ellipsis' | 'render' | 'customCellAttributes'\n>;\n\nexport function DataTableRowCell<T>({\n className,\n style,\n visibleMediaQuery,\n record,\n index,\n onClick,\n onDoubleClick,\n onContextMenu,\n noWrap,\n ellipsis,\n textAlign,\n width,\n accessor,\n render,\n defaultRender,\n customCellAttributes,\n}: DataTableRowCellProps<T>) {\n if (!useMediaQueryStringOrFunction(visibleMediaQuery)) return null;\n return (\n <TableTd\n className={clsx(\n {\n [NOWRAP]: noWrap || ellipsis,\n [ELLIPSIS]: ellipsis,\n [POINTER_CURSOR]: onClick || onDoubleClick,\n [CONTEXT_MENU_CURSOR]: onContextMenu,\n [TEXT_ALIGN_LEFT]: textAlign === 'left',\n [TEXT_ALIGN_CENTER]: textAlign === 'center',\n [TEXT_ALIGN_RIGHT]: textAlign === 'right',\n },\n className\n )}\n style={[\n {\n width,\n minWidth: width,\n maxWidth: width,\n },\n style,\n ]}\n onClick={onClick}\n onDoubleClick={onDoubleClick}\n onContextMenu={onContextMenu}\n {...customCellAttributes?.(record, index)}\n >\n {render\n ? render(record, index)\n : defaultRender\n ? defaultRender(record, index, accessor)\n : (getValueAtPath(record, accessor) as React.ReactNode)}\n </TableTd>\n );\n}\n","import { Collapse, TableTd, TableTr } from '@mantine/core';\nimport { useRowExpansionStatus } from './hooks';\nimport type { DataTableRowExpansionCollapseProps } from './types';\n\ntype DataTableRowExpansionProps = {\n open: boolean;\n colSpan: number;\n content: () => React.ReactNode;\n collapseProps: DataTableRowExpansionCollapseProps | undefined;\n};\n\nexport function DataTableRowExpansion({ open, colSpan, content, collapseProps }: DataTableRowExpansionProps) {\n const { expanded, visible } = useRowExpansionStatus(open, collapseProps?.transitionDuration);\n\n return visible ? (\n <>\n {/* add an empty row to maintain striped rows consistency */}\n <TableTr />\n <TableTr>\n <TableTd className=\"mantine-datatable-row-expansion-cell\" colSpan={colSpan}>\n <Collapse in={expanded} {...collapseProps}>\n <div className=\"mantine-datatable-row-expansion-cell-content\">{content()}</div>\n </Collapse>\n </TableTd>\n </TableTr>\n </>\n ) : null;\n}\n","import type { MantineStyleProp } from '@mantine/core';\nimport { Checkbox, TableTd, type CheckboxProps } from '@mantine/core';\nimport clsx from 'clsx';\nimport type { DataTableSelectionTrigger } from './types';\nimport { POINTER_CURSOR } from './utilityClasses';\n\ntype DataTableRowSelectorCellProps<T> = {\n className: string | undefined;\n style: MantineStyleProp | undefined;\n record: T;\n index: number;\n trigger: DataTableSelectionTrigger;\n withRightShadow: boolean;\n checked: boolean;\n disabled: boolean;\n onChange: React.MouseEventHandler | undefined;\n checkboxProps: CheckboxProps | undefined;\n getCheckboxProps: (record: T, index: number) => CheckboxProps;\n};\n\nexport function DataTableRowSelectorCell<T>({\n className,\n style,\n record,\n index,\n trigger,\n onChange,\n withRightShadow,\n checkboxProps,\n getCheckboxProps,\n ...otherProps\n}: Readonly<DataTableRowSelectorCellProps<T>>) {\n const allCheckboxProps = { ...checkboxProps, ...getCheckboxProps(record, index) };\n const enabled = !otherProps.disabled && !allCheckboxProps.disabled;\n\n const handleClick: React.MouseEventHandler = (e) => {\n e.stopPropagation();\n if (trigger === 'cell' && enabled) {\n onChange?.(e);\n }\n };\n\n return (\n <TableTd\n className={clsx(\n 'mantine-datatable-row-selector-cell',\n { [POINTER_CURSOR]: trigger === 'cell' && enabled },\n className\n )}\n style={style}\n data-shadow-visible={withRightShadow || undefined}\n onClick={handleClick}\n >\n <Checkbox\n classNames={enabled ? { input: POINTER_CURSOR } : undefined}\n onChange={onChange as unknown as React.ChangeEventHandler}\n {...otherProps}\n {...allCheckboxProps}\n />\n </TableTd>\n );\n}\n","import { Box, ScrollArea, type ScrollAreaProps } from '@mantine/core';\nimport clsx from 'clsx';\n\ntype DataTableScrollAreaProps = React.PropsWithChildren<{\n leftShadowBehind: boolean;\n rightShadowBehind: boolean | undefined;\n onScrollPositionChange: ScrollAreaProps['onScrollPositionChange'];\n viewportRef: React.Ref<HTMLDivElement>;\n scrollAreaProps: Omit<ScrollAreaProps, 'classNames' | 'styles' | 'onScrollPositionChange'> | undefined;\n}>;\n\nexport function DataTableScrollArea({\n leftShadowBehind,\n rightShadowBehind,\n onScrollPositionChange,\n children,\n viewportRef,\n scrollAreaProps,\n}: DataTableScrollAreaProps) {\n return (\n <ScrollArea\n {...scrollAreaProps}\n viewportRef={viewportRef}\n classNames={{\n root: 'mantine-datatable-scroll-area',\n scrollbar: 'mantine-datatable-scroll-area-scrollbar',\n thumb: 'mantine-datatable-scroll-area-thumb',\n corner: 'mantine-datatable-scroll-area-corner',\n }}\n onScrollPositionChange={onScrollPositionChange}\n >\n {children}\n <Box className={clsx('mantine-datatable-scroll-area-shadow', 'mantine-datatable-scroll-area-top-shadow')} />\n <div\n className={clsx('mantine-datatable-scroll-area-shadow', 'mantine-datatable-scroll-area-left-shadow', {\n 'mantine-datatable-scroll-area-shadow-behind': leftShadowBehind,\n })}\n />\n <div\n className={clsx('mantine-datatable-scroll-area-shadow', 'mantine-datatable-scroll-area-right-shadow', {\n 'mantine-datatable-scroll-area-shadow-behind': rightShadowBehind,\n })}\n />\n <Box className={clsx('mantine-datatable-scroll-area-shadow', 'mantine-datatable-scroll-area-bottom-shadow')} />\n </ScrollArea>\n );\n}\n","import { TableTr } from '@mantine/core';\nimport { useMergedRef } from '@mantine/hooks';\nimport type { Ref } from 'react';\nimport { useEffect, useRef } from 'react';\nimport type { DataTableDraggableRowProps } from './types';\n\nexport function DataTableDraggableRow({\n className,\n children,\n isDragging,\n ref: refProp,\n ...otherProps\n}: DataTableDraggableRowProps & {\n ref?: Ref<HTMLTableRowElement>;\n}) {\n const ref = useRef<HTMLTableRowElement>(null);\n const mergedRef = useMergedRef(ref, refProp);\n\n useEffect(() => {\n // a simple fix to keep column width as in table\n if (!ref.current) return;\n if (!isDragging) return;\n\n const tbody = ref.current.parentElement!;\n const table = tbody.parentElement!;\n const thead = table.children[0];\n const headerRow = thead.children[0];\n\n for (let index = 0; index < headerRow.children.length; index++) {\n const headerCell = headerRow.children[index];\n const headerCellDimensions = headerCell.getBoundingClientRect();\n\n const cell = ref.current.children[index] as HTMLTableCellElement;\n\n cell.style.height = headerCellDimensions.height + 'px';\n cell.style.width = headerCellDimensions.width + 'px';\n cell.style.minWidth = headerCellDimensions.width + 'px';\n cell.style.maxWidth = headerCellDimensions.width + 'px';\n }\n }, [isDragging, children]);\n\n return (\n <TableTr data-is-dragging={isDragging} ref={mergedRef} {...otherProps} className={className}>\n {children}\n </TableTr>\n );\n}\n"],"mappings":"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","names":["index_exports","__export","DataTable","DataTableDraggableRow","calculateColSpan","differenceBy","flattenColumns","getGroupsAtDepth","getMaxGroupDepth","getRecordId","getValueAtPath","humanize","needsRightBorder","reorderRecords","swapRecords","uniqBy","useDataTableColumns","__toCommonJS","import_core","import_hooks","import_clsx","import_react","import_react","import_core","DataTableColumnsContextProvider","useDataTableColumnsContext","import_jsx_runtime","DataTableColumnsProvider","props","children","columnsOrder","setColumnsOrder","columnsToggle","setColumnsToggle","resetColumnsOrder","resetColumnsToggle","setColumnWidth","setMultipleColumnWidths","resetColumnsWidth","sourceColumn","setSourceColumn","targetColumn","setTargetColumn","DataTableColumnsContextProvider","sourceIndex","targetIndex","removedColumn","import_jsx_runtime","DataTableEmptyRow","import_core","import_jsx_runtime","IconDatabaseOff","import_jsx_runtime","DataTableEmptyState","icon","text","active","children","IconDatabaseOff","import_core","import_clsx","import_core","import_clsx","import_react","import_hooks","useDataTableColumnReorder","key","columns","getInitialValueInEffect","alignColumnsOrder","columnsOrder","updatedColumnsOrder","col","c","defaultColumnsOrder","column","_setColumnsOrder","setColumnsOrder","order","resetColumnsOrder","alignedColumnsOrder","prevColumnsOrder","import_hooks","import_react","useDataTableColumnResize","key","columns","getInitialValueInEffect","headerRef","onFixedLayoutChange","isInitializedRef","naturalWidthsRef","isSSR","setIsSSR","hasResizableColumns","c","resizableColumns","needsNaturalMeasurement","getDefaultColumnsWidth","column","storedColumnsWidth","setStoredColumnsWidth","effectiveColumnsWidth","setEffectiveColumnsWidth","measureNaturalWidths","thead","headerCells","naturalWidths","cell","accessor","rect","updateColumnWidths","updates","filteredUpdates","update","newWidths","u","setMultipleColumnWidths","initializeColumnWidths","newEffectiveWidths","storedWidth","naturalWidth","explicitWidths","measureAndSetColumnWidths","timeoutId","resetColumnsWidth","setColumnWidth","width","allResizableWidthsInitial","colWidth","import_react","import_hooks","useDataTableColumnToggle","key","columns","getInitialValueInEffect","alignColumnsToggle","columnsToggle","updatedColumnsToggle","col","c","defaultColumnsToggle","column","_setColumnsToggle","setColumnsToggle","toggle","resetColumnsToggle","alignedColumnsToggle","prevColumnsToggle","useDataTableColumns","key","columns","getInitialValueInEffect","headerRef","scrollViewportRef","onFixedLayoutChange","columnsOrder","setColumnsOrder","resetColumnsOrder","useDataTableColumnReorder","columnsToggle","setColumnsToggle","resetColumnsToggle","useDataTableColumnToggle","columnsWidth","setColumnsWidth","setColumnWidth","setMultipleColumnWidths","resetColumnsWidth","hasResizableColumns","allResizableWidthsInitial","measureAndSetColumnWidths","useDataTableColumnResize","order","column","toggle","width","import_core","import_react","import_react","useIsomorphicLayoutEffect","import_react","useStableValue","value","ref","VAR_HEADER_HEIGHT","VAR_FOOTER_HEIGHT","VAR_SELECTION_COLUMN_WIDTH","VAR_LAST_ROW_BORDER_BOTTOM","setCssVar","root","name","value","getRect","entry","boxSize","observe","elem","onChange","onCancel","observer","entries","useDataTableInjectCssVariables","scrollCallbacks","withRowBorders","refs","table","scrollViewport","header","footer","selectionColumnHeader","stableDependencies","useStableValue","stableScrollCallbacks","processScrollingRef","processLastRowBottomBorderRef","onScroll","ev","rect","useIsomorphicLayoutEffect","scrollPosition","tableRect","scrollRect","setScrolledTo","pos","old","processFooterPosition","diff","relative","processLastRowBottomBorder","processScrolling","callbacks","viewport","scrollTop","scrollLeft","newScrolledToTop","newScrolledToBottom","scrolledToTop","scrolledToBottom","isRtl","maxScrollLeft","newScrolledToLeft","newScrolledToRight","absScrollLeft","scrolledToLeft","scrolledToRight","import_react","useLastSelectionChangeIndex","recordIds","lastSelectionChangeIndex","setLastSelectionChangeIndex","recordIdsString","import_react","attachMediaListeners","queries","callback","callbackWrapper","query","subscriptions","unsubscribe","getInitialValue","initialValues","useMediaQueries","getInitialValueInEffect","matches","setMatches","queryRef","queryResult","event","import_core","import_react","useMediaQueriesStringOrFunction","queries","theme","values","query","defaults","useMediaQueries","import_core","import_hooks","useMediaQueryStringOrFunction","mediaQuery","theme","mediaQueryValue","import_react","humanize","value","str","differenceBy","arr1","arr2","iteratee","c","uniqBy","arr","x","i","self","y","getValueAtPath","obj","path","prevObj","key","getRecordId","record","idAccessor","reorderRecords","dropResult","records","draft","prev","swapRecords","destination","sourceEl","destEl","getMaxGroupDepth","groups","group","flattenColumns","columns","col","calculateColSpan","visibles","column","index","sum","subGroup","getGroupsAtDepth","targetDepth","currentDepth","result","needsRightBorder","isLastGroup","hasMoreColumnsAfter","withColumnBorders","useRowExpansion","rowExpansion","records","idAccessor","initiallyExpandedRecordIds","trigger","allowMultiple","initiallyExpanded","r","getRecordId","record","index","expandedRecordIds","setExpandedRecordIds","expandedRecordIdsState","expandable","collapseProps","content","collapseRow","id","recordId","import_hooks","import_react","useRowExpansionStatus","open","transitionDuration","expanded","setExpanded","visible","setVisible","expand","hide","NOWRAP","ELLIPSIS","POINTER_CURSOR","CONTEXT_MENU_CURSOR","TEXT_SELECTION_DISABLED","TEXT_ALIGN_LEFT","TEXT_ALIGN_CENTER","TEXT_ALIGN_RIGHT","import_jsx_runtime","DataTableFooterCell","className","style","visibleMediaQuery","title","noWrap","ellipsis","textAlign","width","useMediaQueryStringOrFunction","clsx","NOWRAP","ELLIPSIS","TEXT_ALIGN_LEFT","TEXT_ALIGN_CENTER","TEXT_ALIGN_RIGHT","import_core","import_jsx_runtime","DataTableFooterSelectorPlaceholderCell","shadowVisible","import_jsx_runtime","DataTableFooter","className","style","columns","defaultColumnProps","selectionVisible","selectorCellShadowVisible","ref","clsx","DataTableFooterSelectorPlaceholderCell","hidden","columnProps","accessor","visibleMediaQuery","textAlign","width","footer","footerClassName","footerStyle","noWrap","ellipsis","DataTableFooterCell","import_core","import_clsx","import_react","import_core","import_clsx","import_react","import_jsx_runtime","DataTableColumnGroupHeaderCell","id","columns","groups","title","textAlign","className","style","maxDepth","currentDepth","previousGroups","isLastGroup","withColumnBorders","totalTableColumns","allColumns","flattenColumns","queries","visibleMediaQuery","visibles","useMediaQueriesStringOrFunction","colSpan","calculateColSpan","columnsBeforeGroup","sum","g","rowSpan","hasMoreColumns","needsBorder","needsRightBorder","clsx","TEXT_ALIGN_LEFT","TEXT_ALIGN_CENTER","TEXT_ALIGN_RIGHT","humanize","import_core","import_clsx","import_react","import_core","import_hooks","import_jsx_runtime","IconFilter","import_jsx_runtime","IconFilterFilled","import_jsx_runtime","DataTableHeaderCellFilter","children","isActive","filterPopoverProps","filterPopoverDisableClickOutside","isOpen","close","toggle","Icon","IconFilterFilled","IconFilter","ref","e","import_core","import_react","import_jsx_runtime","DataTableResizableHeaderHandle","props","accessor","columnRef","isResizing","setIsResizing","startXRef","originalWidthsRef","dir","isRTL","setMultipleColumnWidths","useDataTableColumnsContext","handleMouseDown","event","currentColumn","nextColumn","nextAccessor","isNextSelection","currentWidth","nextWidth","handleMouseMove","moveEvent","currentCol","nextCol","deltaX","minWidth","maxShrinkCurrent","maxShrinkNext","constrainedDelta","finalCurrentWidth","finalNextWidth","handleMouseUp","updates","handleDoubleClick","import_jsx_runtime","IconArrowUp","import_jsx_runtime","IconArrowsVertical","import_jsx_runtime","IconGripVertical","import_jsx_runtime","IconX","import_jsx_runtime","DataTableHeaderCell","className","style","accessor","visibleMediaQuery","title","sortable","draggable","toggleable","resizable","sortIcons","textAlign","width","sortStatus","onSortStatusChange","filter","filterPopoverProps","filterPopoverDisableClickOutside","filtering","sortKey","setSourceColumn","setTargetColumn","swapColumns","setColumnsToggle","useDataTableColumnsContext","dragOver","setDragOver","columnRef","useMediaQueryStringOrFunction","text","humanize","tooltip","sortAction","e","handleColumnDragStart","handleColumnDragOver","handleColumnDrop","handleColumnDragEnter","handleColumnDragLeave","handleColumnToggle","columnsToggle","c","clsx","IconGripVertical","TEXT_ALIGN_LEFT","TEXT_ALIGN_CENTER","TEXT_ALIGN_RIGHT","NOWRAP","ELLIPSIS","IconX","IconArrowUp","IconArrowsVertical","DataTableHeaderCellFilter","DataTableResizableHeaderHandle","import_core","import_clsx","import_jsx_runtime","DataTableHeaderSelectorCell","className","style","trigger","shadowVisible","checked","indeterminate","checkboxProps","onChange","rowSpan","ref","enabled","clsx","POINTER_CURSOR","import_jsx_runtime","DataTableHeader","selectionColumnHeaderRef","className","style","sortStatus","sortIcons","onSortStatusChange","columns","defaultColumnProps","groups","selectionTrigger","selectionVisible","selectionChecked","selectionIndeterminate","onSelectionChange","selectionCheckboxProps","selectorCellShadowVisible","selectionColumnClassName","selectionColumnStyle","withColumnBorders","ref","maxGroupDepth","getMaxGroupDepth","totalHeaderRows","allRecordsSelectorCell","DataTableHeaderSelectorCell","columnsToggle","setColumnsToggle","useDataTableColumnsContext","columnsPopoverOpened","setColumnsPopoverOpened","someColumnsToggleable","column","columnToggleCheckboxLabels","accessor","title","humanize","content","clsx","e","_","depthIndex","groupsAtDepth","getGroupsAtDepth","group","index","DataTableColumnGroupHeaderCell","hidden","columnProps","visibleMediaQuery","textAlign","width","sortable","draggable","toggleable","resizable","titleClassName","titleStyle","filter","filterPopoverProps","filterPopoverDisableClickOutside","filtering","sortKey","DataTableHeaderCell","c","import_core","import_clsx","import_jsx_runtime","DataTableLoader","fetching","customContent","backgroundBlur","size","type","color","clsx","import_core","import_clsx","import_core","import_clsx","import_core","getColor","color","theme","colorScheme","getTableCssVariables","c","backgroundColor","borderColor","rowBorderColor","stripedColor","highlightOnHoverColor","getPaginationCssVariables","paginationActiveTextColor","paginationActiveBackgroundColor","getRowCssVariables","import_jsx_runtime","IconSelector","import_jsx_runtime","HEIGHT","DataTablePageSizeSelector","size","label","values","value","activeTextColor","activeBackgroundColor","onChange","IconSelector","theme","v","isCurrent","clsx","getPaginationCssVariables","import_jsx_runtime","DataTablePagination","className","style","fetching","page","onPageChange","paginationWithEdges","paginationWithControls","paginationActiveTextColor","paginationActiveBackgroundColor","paginationSize","loadingText","noRecordsText","paginationText","totalRecords","recordsPerPage","onRecordsPerPageChange","recordsPerPageLabel","recordsPerPageOptions","recordsLength","horizontalSpacing","paginationWrapBreakpoint","getPaginationControlProps","getPaginationItemProps","renderPagination","paginationTextValue","from","to","totalPages","isWrapped","useMediaQueryStringOrFunction","breakpoints","Controls","props","DataTablePageSizeSelector","clsx","theme","getPaginationCssVariables","ctx","n","import_core","import_clsx","import_core","import_clsx","import_jsx_runtime","DataTableRowCell","className","style","visibleMediaQuery","record","index","onClick","onDoubleClick","onContextMenu","noWrap","ellipsis","textAlign","width","accessor","render","defaultRender","customCellAttributes","useMediaQueryStringOrFunction","clsx","NOWRAP","ELLIPSIS","POINTER_CURSOR","CONTEXT_MENU_CURSOR","TEXT_ALIGN_LEFT","TEXT_ALIGN_CENTER","TEXT_ALIGN_RIGHT","getValueAtPath","import_core","import_jsx_runtime","DataTableRowExpansion","open","colSpan","content","collapseProps","expanded","visible","useRowExpansionStatus","import_core","import_clsx","import_jsx_runtime","DataTableRowSelectorCell","className","style","record","index","trigger","onChange","withRightShadow","checkboxProps","getCheckboxProps","otherProps","allCheckboxProps","enabled","handleClick","e","clsx","POINTER_CURSOR","import_jsx_runtime","DataTableRow","record","index","columns","defaultColumnProps","defaultColumnRender","selectionTrigger","selectionVisible","selectionChecked","onSelectionChange","isRecordSelectable","selectionCheckboxProps","getSelectionCheckboxProps","onClick","onDoubleClick","onContextMenu","onCellClick","onCellDoubleClick","onCellContextMenu","expansion","customAttributes","color","backgroundColor","className","style","selectorCellShadowVisible","selectionColumnClassName","selectionColumnStyle","rowFactory","cols","DataTableRowSelectorCell","hidden","hiddenContent","columnProps","columnIndex","accessor","visibleMediaQuery","textAlign","noWrap","ellipsis","width","render","cellsClassName","cellsStyle","customCellAttributes","DataTableRowCell","event","expandedElement","DataTableRowExpansion","rowProps","getRowProps","clsx","POINTER_CURSOR","CONTEXT_MENU_CURSOR","e","isExpandable","isRowExpanded","expandOnClick","expandRow","collapseRow","theme","colorValue","backgroundColorValue","getRowCssVariables","import_core","import_clsx","import_jsx_runtime","DataTableScrollArea","leftShadowBehind","rightShadowBehind","onScrollPositionChange","children","viewportRef","scrollAreaProps","clsx","import_jsx_runtime","DataTable","withTableBorder","borderRadius","textSelectionDisabled","height","minHeight","maxHeight","shadow","verticalAlign","fetching","columns","storeColumnsKey","groups","pinFirstColumn","pinLastColumn","defaultColumnProps","defaultColumnRender","idAccessor","records","selectionTrigger","selectedRecords","onSelectedRecordsChange","selectionColumnClassName","selectionColumnStyle","isRecordSelectable","selectionCheckboxProps","allRecordsSelectionCheckboxProps","getRecordSelectionCheckboxProps","_","index","sortStatus","sortIcons","onSortStatusChange","horizontalSpacing","page","onPageChange","totalRecords","recordsPerPage","onRecordsPerPageChange","recordsPerPageOptions","recordsPerPageLabel","paginationWithEdges","paginationWithControls","paginationActiveTextColor","paginationActiveBackgroundColor","paginationSize","paginationText","from","to","paginationWrapBreakpoint","getPaginationControlProps","control","getPaginationItemProps","renderPagination","loaderBackgroundBlur","customLoader","loaderSize","loaderType","loaderColor","loadingText","emptyState","noRecordsText","noRecordsIcon","highlightOnHover","striped","noHeader","onRowClick","onRowDoubleClick","onRowContextMenu","onCellClick","onCellDoubleClick","onCellContextMenu","onScroll","onScrollToTop","onScrollToBottom","onScrollToLeft","onScrollToRight","c","backgroundColor","borderColor","rowBorderColor","stripedColor","highlightOnHoverColor","rowColor","rowBackgroundColor","rowExpansion","rowClassName","rowStyle","customRowAttributes","scrollViewportRef","scrollAreaProps","tableRef","bodyRef","m","my","mx","mt","mb","ml","mr","className","classNames","style","styles","rowFactory","tableWrapper","otherProps","effectiveColumns","flattenColumns","fixedLayoutEnabled","setFixedLayoutEnabled","refs","handleScrollPositionChange","useDataTableInjectCssVariables","dragToggle","useDataTableColumns","mergedTableRef","mergedViewportRef","rowExpansionInfo","useRowExpansion","resetScrollPending","prevPageRef","recordsAtPageChangeRef","handlePageChange","newPage","recordsLength","viewport","raf","recordIds","record","getRecordId","selectionColumnVisible","selectedRecordIds","hasRecordsAndSelectedRecords","selectableRecords","selectableRecordIds","allSelectableRecordsSelected","id","someRecordsSelected","handleHeaderSelectionChange","uniqBy","lastSelectionChangeIndex","setLastSelectionChangeIndex","useLastSelectionChangeIndex","selectorCellShadowVisible","marginProperties","TableWrapper","children","DataTableColumnsProvider","clsx","theme","getTableCssVariables","DataTableScrollArea","TEXT_SELECTION_DISABLED","DataTableHeader","recordId","isSelected","handleSelectionChange","e","targetRecords","rec","idx","differenceBy","r","DataTableRow","DataTableEmptyRow","footer","DataTableFooter","DataTablePagination","DataTableLoader","DataTableEmptyState","import_core","import_hooks","import_react","import_jsx_runtime","DataTableDraggableRow","className","children","isDragging","refProp","otherProps","ref","mergedRef","headerRow","index","headerCellDimensions","cell"]}