{"version":3,"sources":["../package/DataTable.tsx","../package/cssVariables.ts","../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/useDataTableColumnPinning.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/useDataTablePinnedColumns.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/DataTablePinnableDropdown.tsx","../package/icons/IconArrowLeft.tsx","../package/icons/IconArrowRight.tsx","../package/icons/IconPin.tsx","../package/icons/IconX.tsx","../package/DataTableResizableHeaderHandle.tsx","../package/icons/IconArrowsVertical.tsx","../package/icons/IconArrowUp.tsx","../package/icons/IconGripVertical.tsx","../package/DataTableHeaderSelectorCell.tsx","../package/DataTableLoader.tsx","../package/DataTablePagination.tsx","../package/DataTablePageSizeSelector.tsx","../package/icons/IconSelector.tsx","../package/DataTableRow.tsx","../package/DataTableRowCell.tsx","../package/DataTableRowExpansion.tsx","../package/DataTableRowSelectorCell.tsx","../package/DataTableScrollArea.tsx","../package/DataTableDraggableRow.tsx"],"sourcesContent":["import { Box, type MantineSize, Table } from '@mantine/core';\nimport { useMergedRef } from '@mantine/hooks';\nimport clsx from 'clsx';\nimport type { RefObject } from 'react';\nimport { useCallback, useEffect, useLayoutEffect, useMemo, useRef } from 'react';\nimport { getTableCssVariables } from './cssVariables';\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 {\n  useDataTableColumns,\n  useDataTableInjectCssVariables,\n  useDataTablePinnedColumns,\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 flatColumns = useMemo(() => {\n    return groups ? flattenColumns(groups) : columns!;\n  }, [columns, groups]);\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: flatColumns,\n    headerRef: refs.header as RefObject<HTMLTableSectionElement | null>,\n    scrollViewportRef: refs.scrollViewport as RefObject<HTMLElement | null>,\n  });\n\n  // Use the columns enriched with order/visibility/width from the hook so\n  // resize widths actually reach the rendered <th>/<td> cells.\n  const effectiveColumns = dragToggle.effectiveColumns;\n\n  const mergedTableRef = useMergedRef(refs.table, tableRef);\n  const mergedViewportRef = useMergedRef(refs.scrollViewport, scrollViewportRef);\n  const internalBodyRef = useRef<HTMLTableSectionElement>(null);\n  const mergedBodyRef = useMergedRef(internalBodyRef, bodyRef);\n  const rowExpansionInfo = useRowExpansion<T>({ rowExpansion, records, idAccessor });\n\n  const { pinnedMap, hasLeftPinned, hasRightPinned } = useDataTablePinnedColumns({\n    columns: effectiveColumns,\n    theadRef: refs.header as RefObject<HTMLTableSectionElement | null>,\n    tbodyRef: internalBodyRef,\n    selectionColumnHeaderRef: refs.selectionColumnHeader as RefObject<HTMLTableCellElement | null>,\n    selectionVisible: !!selectedRecords,\n    pinFirstColumn,\n    pinLastColumn,\n  });\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 && !hasLeftPinned;\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} pinnedMap={pinnedMap}>\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 || hasLeftPinned}\n          rightShadowBehind={hasRightPinned}\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-selection-column-visible': selectionColumnVisible,\n                  'mantine-datatable-resizable-columns': dragToggle.hasResizableColumns,\n                  'mantine-datatable-resize-locked': dragToggle.isLocked,\n                  'mantine-datatable-resizing': dragToggle.isResizing,\n                },\n                classNames?.table\n              )}\n              style={{\n                ...styles?.table,\n                ...(dragToggle.isLocked ? { tableLayout: 'fixed' } : null),\n                ...(dragToggle.tableWidth != null ? { width: `${dragToggle.tableWidth}px` } : null),\n              }}\n              data-striped={(recordsLength && striped) || undefined}\n              data-highlight-on-hover={highlightOnHover || undefined}\n              {...otherProps}\n            >\n              {noHeader ? null : (\n                <DataTableColumnsProvider {...dragToggle} pinnedMap={pinnedMap}>\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                    pinnedMap={pinnedMap}\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={mergedBodyRef}>\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                        pinnedMap={pinnedMap}\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                  pinnedMap={pinnedMap}\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","import { type MantineColor, type MantineTheme, parseThemeColor } 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","'use client';\n\nimport { type Dispatch, type PropsWithChildren, type SetStateAction, useState } from 'react';\nimport { DataTableColumnsContextProvider } from './DataTableColumns.context';\nimport type { DataTableColumnPinning, DataTableColumnToggle, PinnedColumnInfo } from './hooks';\n\ntype DataTableColumnsProviderProps = PropsWithChildren<{\n  columnsOrder: string[];\n  setColumnsOrder: (order: string[]) => void;\n  resetColumnsOrder: () => void;\n\n  columnsToggle: DataTableColumnToggle[];\n  setColumnsToggle: (toggle: DataTableColumnToggle[]) => void;\n  resetColumnsToggle: () => void;\n\n  columnsPinning: DataTableColumnPinning[];\n  setColumnsPinning: Dispatch<SetStateAction<DataTableColumnPinning[]>>;\n  resetColumnsPinning: () => 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  beginResize: () => void;\n  endResize: () => void;\n\n  pinnedMap: Map<string, PinnedColumnInfo>;\n}>;\n\nexport const DataTableColumnsProvider = (props: DataTableColumnsProviderProps) => {\n  const {\n    children,\n    columnsOrder,\n    setColumnsOrder,\n    columnsToggle,\n    setColumnsToggle,\n    columnsPinning,\n    setColumnsPinning,\n\n    resetColumnsOrder,\n    resetColumnsToggle,\n    resetColumnsPinning,\n\n    setColumnWidth,\n    setMultipleColumnWidths,\n    resetColumnsWidth,\n\n    beginResize,\n    endResize,\n\n    pinnedMap,\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\n    const sourceInfo = pinnedMap.get(sourceColumn);\n    const targetInfo = pinnedMap.get(targetColumn);\n    if (sourceInfo?.logicalSide !== targetInfo?.logicalSide) return;\n\n    const sourceIndex = columnsOrder.indexOf(sourceColumn);\n    const targetIndex = columnsOrder.indexOf(targetColumn);\n\n    if (sourceIndex !== -1 && targetIndex !== -1) {\n      const newOrder = [...columnsOrder];\n      const [removed] = newOrder.splice(sourceIndex, 1);\n      newOrder.splice(targetIndex, 0, removed);\n      setColumnsOrder(newOrder);\n    }\n  };\n\n  return (\n    <DataTableColumnsContextProvider\n      value={{\n        sourceColumn,\n        setSourceColumn,\n        targetColumn,\n        setTargetColumn,\n        columnsToggle,\n        setColumnsToggle,\n        columnsPinning,\n        setColumnsPinning,\n        swapColumns,\n        resetColumnsOrder,\n        resetColumnsToggle,\n        resetColumnsPinning,\n\n        setColumnWidth,\n        setMultipleColumnWidths,\n        resetColumnsWidth,\n\n        beginResize,\n        endResize,\n      }}\n    >\n      {children}\n    </DataTableColumnsContextProvider>\n  );\n};\n","import { createSafeContext } from '@mantine/core';\nimport type { Dispatch, SetStateAction } from 'react';\nimport type { DataTableColumnPinning, 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: (toggle: DataTableColumnToggle[]) => void;\n  resetColumnsToggle: () => void;\n\n  columnsPinning: DataTableColumnPinning[];\n  setColumnsPinning: Dispatch<SetStateAction<DataTableColumnPinning[]>>;\n  resetColumnsPinning: () => 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  // Drag lifecycle: snapshot DOM widths, lock the table, then persist on release\n  beginResize: () => void;\n  endResize: () => 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 { type MantineStyleProp, TableTfoot, TableTr } from '@mantine/core';\nimport clsx from 'clsx';\nimport { DataTableFooterCell } from './DataTableFooterCell';\nimport { DataTableFooterSelectorPlaceholderCell } from './DataTableFooterSelectorPlaceholderCell';\nimport type { PinnedColumnInfo } from './hooks';\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  pinnedMap: Map<string, PinnedColumnInfo>;\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  pinnedMap,\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              pinnedInfo={pinnedMap.get(String(accessor))}\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 { type MantineStyleProp, type MantineTheme, TableTh } from '@mantine/core';\nimport clsx from 'clsx';\nimport type { PinnedColumnInfo } from './hooks';\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  pinnedInfo: PinnedColumnInfo | 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  pinnedInfo,\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      data-pinned={pinnedInfo?.position}\n      data-pinned-shadow={pinnedInfo?.isBoundary ? pinnedInfo.position : undefined}\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        pinnedInfo && {\n          position: 'sticky',\n          [pinnedInfo.position]: pinnedInfo.offset,\n          overflow: 'visible',\n        },\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 { useEffect, useMemo } from 'react';\nimport type { DataTableColumn } from '../types/DataTableColumn';\n\nexport type DataTableColumnPinning = {\n  accessor: string;\n  defaultPinned: 'left' | 'right' | undefined;\n  pinnable: boolean;\n  pinned: 'left' | 'right' | undefined;\n};\n\n/**\n * Hook to handle column pinning with localStorage persistence.\n * @see https://icflorescu.github.io/mantine-datatable/examples/interactive-column-pinning/\n */\nexport function useDataTableColumnPinning<T>({\n  key,\n  columns = [],\n  getInitialValueInEffect = true,\n}: {\n  /**\n   * The key to use in localStorage to store the columns pinning 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  // Default columns pinning state\n  const defaultColumnsPinning = useMemo(\n    () =>\n      columns.map((column) => ({\n        accessor: column.accessor as string,\n        defaultPinned: column.pinned,\n        pinnable: !!column.pinnable,\n        pinned: column.pinned,\n      })),\n    [columns]\n  );\n\n  const [storedColumnsPinning, _setColumnsPinning] = useLocalStorage<DataTableColumnPinning[]>({\n    key: key ? `${key}-columns-pinning` : '',\n    defaultValue: key ? defaultColumnsPinning : undefined,\n    getInitialValueInEffect,\n  });\n\n  const columnsPinning = storedColumnsPinning ?? defaultColumnsPinning;\n\n  function setColumnsPinning(\n    pinning: DataTableColumnPinning[] | ((prev: DataTableColumnPinning[]) => DataTableColumnPinning[])\n  ) {\n    if (!key) return;\n    if (typeof pinning === 'function') {\n      _setColumnsPinning((prev) => pinning(prev ?? defaultColumnsPinning));\n    } else {\n      _setColumnsPinning(pinning);\n    }\n  }\n\n  // Align stored pinning state with current column definitions: drop accessors\n  // that no longer exist, append accessors added since last persisted state.\n  const alignedColumnsPinning = useMemo(() => {\n    if (!columnsPinning) return defaultColumnsPinning;\n    const aligned: DataTableColumnPinning[] = [];\n    columnsPinning.forEach((col) => {\n      if (columns.find((c) => c.accessor === col.accessor)) {\n        aligned.push(col);\n      }\n    });\n    columns.forEach((col) => {\n      if (!aligned.find((c) => c.accessor === col.accessor)) {\n        aligned.push({\n          accessor: col.accessor as string,\n          defaultPinned: col.pinned,\n          pinnable: !!col.pinnable,\n          pinned: col.pinned,\n        });\n      }\n    });\n    return aligned;\n  }, [columnsPinning, columns, defaultColumnsPinning]);\n\n  // Persist alignment in an effect — never set state during render\n  useEffect(() => {\n    if (!key) return;\n    if (!columnsPinning) return;\n    if (JSON.stringify(alignedColumnsPinning) !== JSON.stringify(columnsPinning)) {\n      _setColumnsPinning(alignedColumnsPinning);\n    }\n  }, [key, alignedColumnsPinning, columnsPinning, _setColumnsPinning]);\n\n  const resetColumnsPinning = () => {\n    setColumnsPinning(defaultColumnsPinning);\n  };\n\n  if (!key) {\n    return {\n      columnsPinning: defaultColumnsPinning,\n      setColumnsPinning,\n      resetColumnsPinning,\n    } as const;\n  }\n\n  return {\n    columnsPinning: alignedColumnsPinning,\n    setColumnsPinning,\n    resetColumnsPinning,\n  } as const;\n}\n","import { useLocalStorage } from '@mantine/hooks';\nimport { useEffect, useMemo } from 'react';\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  // Default columns order is the order of the columns in the array\n  const defaultColumnsOrder = useMemo(\n    () => (columns ? (columns.map((column) => column.accessor) as string[]) : []),\n    [columns]\n  );\n\n  const [storedColumnsOrder, _setColumnsOrder] = useLocalStorage<string[]>({\n    key: key ? `${key}-columns-order` : '',\n    defaultValue: key ? defaultColumnsOrder : undefined,\n    getInitialValueInEffect,\n  });\n\n  const columnsOrder = storedColumnsOrder ?? (defaultColumnsOrder as string[]);\n\n  function setColumnsOrder(order: string[]) {\n    if (key) {\n      _setColumnsOrder(order);\n    }\n  }\n\n  // Align stored order with current column definitions: drop accessors that no\n  // longer exist, append accessors added since last persisted state.\n  const alignedColumnsOrder = useMemo(() => {\n    if (!columnsOrder) return defaultColumnsOrder;\n    const aligned: string[] = [];\n    columnsOrder.forEach((col) => {\n      if (columns.find((c) => c.accessor === col)) {\n        aligned.push(col);\n      }\n    });\n    columns.forEach((col) => {\n      if (!aligned.includes(col.accessor as string)) {\n        aligned.push(col.accessor as string);\n      }\n    });\n    return aligned;\n  }, [columnsOrder, columns, defaultColumnsOrder]);\n\n  // Persist alignment in an effect — never set state during render\n  useEffect(() => {\n    if (!key) return;\n    if (!columnsOrder) return;\n    if (JSON.stringify(alignedColumnsOrder) !== JSON.stringify(columnsOrder)) {\n      _setColumnsOrder(alignedColumnsOrder);\n    }\n  }, [key, alignedColumnsOrder, columnsOrder, _setColumnsOrder]);\n\n  const resetColumnsOrder = () => {\n    setColumnsOrder(defaultColumnsOrder);\n  };\n\n  if (!key) {\n    return {\n      columnsOrder,\n      setColumnsOrder,\n      resetColumnsOrder,\n    } as const;\n  }\n\n  return {\n    columnsOrder: alignedColumnsOrder,\n    setColumnsOrder,\n    resetColumnsOrder,\n  } as const;\n}\n","import { useLocalStorage } from '@mantine/hooks';\nimport { type RefObject, useCallback, useEffect, useMemo, useRef, useState } 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.\n *\n * Strategy (mirrors `mantine-list-view-table`):\n * 1. Until the user grabs a handle, the table stays in `table-layout: auto`\n *    so declarative widths — including `width: '0%'` on actions columns —\n *    work as documented.\n * 2. On mousedown we snapshot every header cell into pixel widths and switch\n *    to `table-layout: fixed` so pixel widths are honored strictly during\n *    the drag and afterwards.\n * 3. The lock stays in place until `resetColumnsWidth` is called.\n *\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}: {\n  /** The key to use in localStorage to store the columns width. */\n  key: string | undefined;\n  /** Columns definitions. */\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  /** Reference to the table header element for measuring column widths. */\n  headerRef?: RefObject<HTMLTableSectionElement | null>;\n  /**\n   * Reference to the scroll viewport for calculating overflow.\n   * Kept for backwards compatibility; no longer used internally.\n   */\n  scrollViewportRef?: RefObject<HTMLElement | null>;\n}) {\n  const hasResizableColumns = useMemo(() => {\n    return columns.some((c) => c.resizable && !c.hidden && c.accessor !== '__selection__');\n  }, [columns]);\n\n  const getDefaultColumnsWidth = useCallback(() => {\n    return columns\n      .filter((column) => column.accessor !== '__selection__')\n      .map((column) => ({ [column.accessor]: column.width ?? 'auto' }));\n  }, [columns]);\n\n  // Honor caller's `getInitialValueInEffect`: when false the read is synchronous\n  // and we can seed `effectiveColumnsWidth` directly; when true the value lands\n  // after mount and the hydration effect below picks it up.\n  const [storedColumnsWidth, setStoredColumnsWidth] = useLocalStorage<DataTableColumnWidth[]>({\n    key: key ? `${key}-columns-width` : '',\n    defaultValue: key ? getDefaultColumnsWidth() : undefined,\n    getInitialValueInEffect,\n  });\n\n  const [effectiveColumnsWidth, setEffectiveColumnsWidth] = useState<DataTableColumnWidth[]>(() => {\n    if (key && storedColumnsWidth && storedColumnsWidth.length > 0) {\n      return storedColumnsWidth;\n    }\n    return getDefaultColumnsWidth();\n  });\n\n  // True only during an active drag — drives cursor / user-select styling\n  const [isResizing, setIsResizing] = useState(false);\n\n  // Marks effective widths as user-changed so the persistence effect knows to\n  // sync them to localStorage. Hydration / column re-alignment never set this.\n  const dirtyRef = useRef(false);\n\n  // Sync stored → effective whenever the persisted value lands or changes\n  // (covers `getInitialValueInEffect: true`, cross-tab updates, etc.).\n  // Idempotent: when values are unchanged React bails out of the re-render.\n  useEffect(() => {\n    if (!key) return;\n    if (!storedColumnsWidth || storedColumnsWidth.length === 0) return;\n\n    setEffectiveColumnsWidth(storedColumnsWidth);\n  }, [key, storedColumnsWidth]);\n\n  // Re-align effective state with the current column set: drop entries for\n  // removed accessors, add defaults for newly introduced columns. Bails out\n  // when nothing actually changed to avoid extra renders.\n  useEffect(() => {\n    setEffectiveColumnsWidth((prev) => {\n      const validAccessors = new Set(\n        columns.filter((c) => c.accessor !== '__selection__').map((c) => String(c.accessor))\n      );\n      const filtered = prev.filter((entry) => validAccessors.has(Object.keys(entry)[0]));\n      const present = new Set(filtered.map((entry) => Object.keys(entry)[0]));\n      let added = false;\n      for (const column of columns) {\n        if (column.accessor === '__selection__') continue;\n        const accessor = String(column.accessor);\n        if (present.has(accessor)) continue;\n        filtered.push({ [accessor]: column.width ?? 'auto' });\n        added = true;\n      }\n      const removed = filtered.length !== prev.length || added;\n      return removed ? filtered : prev;\n    });\n  }, [columns]);\n\n  const updateColumnWidths = useCallback((updates: Array<{ accessor: string; width: string | number }>) => {\n    const filtered = updates.filter((u) => u.accessor !== '__selection__');\n    if (filtered.length === 0) return;\n\n    dirtyRef.current = true;\n    setEffectiveColumnsWidth((prev) =>\n      prev.map((col) => {\n        const accessor = Object.keys(col)[0];\n        const update = filtered.find((u) => u.accessor === accessor);\n        return update ? { [accessor]: update.width } : col;\n      })\n    );\n  }, []);\n\n  // Persist user-initiated width changes — but only when no drag is in flight.\n  // `localStorage.setItem` is synchronous and writing it on every mousemove\n  // would block the main thread and visibly hurt drag smoothness.\n  useEffect(() => {\n    if (!key || !dirtyRef.current) return;\n    if (isResizing) return;\n    dirtyRef.current = false;\n    setStoredColumnsWidth(effectiveColumnsWidth);\n  }, [key, effectiveColumnsWidth, isResizing, setStoredColumnsWidth]);\n\n  const setColumnWidth = useCallback(\n    (accessor: string, width: string | number) => {\n      updateColumnWidths([{ accessor, width }]);\n    },\n    [updateColumnWidths]\n  );\n\n  const setMultipleColumnWidths = useCallback(\n    (updates: Array<{ accessor: string; width: string | number }>) => {\n      updateColumnWidths(updates);\n    },\n    [updateColumnWidths]\n  );\n\n  /**\n   * Snapshot every header cell width into the React state. Called the moment\n   * the user grabs a handle. Idempotent: if all cells are already pixel-locked\n   * the snapshot reads back the same values.\n   */\n  const beginResize = useCallback(() => {\n    setIsResizing(true);\n\n    const thead = headerRef?.current;\n    if (!thead) return;\n\n    const cells = Array.from(thead.querySelectorAll<HTMLTableCellElement>('th[data-accessor]'));\n    if (cells.length === 0) return;\n\n    const snapshot: DataTableColumnWidth[] = [];\n\n    for (const cell of cells) {\n      const accessor = cell.getAttribute('data-accessor');\n      if (!accessor) continue;\n      if (accessor === '__selection__') continue;\n      const width = Math.round(cell.getBoundingClientRect().width);\n      snapshot.push({ [accessor]: `${width}px` });\n    }\n\n    dirtyRef.current = true;\n    setEffectiveColumnsWidth(snapshot);\n  }, [headerRef]);\n\n  /** Clear the active-drag flag. Persistence runs from the effect once `isResizing` flips off. */\n  const endResize = useCallback(() => {\n    setIsResizing(false);\n  }, []);\n\n  const resetColumnsWidth = useCallback(() => {\n    const defaults = getDefaultColumnsWidth();\n    dirtyRef.current = true;\n    setEffectiveColumnsWidth(defaults);\n    setIsResizing(false);\n  }, [getDefaultColumnsWidth]);\n\n  const allResizableWidthsInitial = useMemo(() => {\n    if (!hasResizableColumns) return false;\n    const resizable = columns.filter((c) => c.resizable && !c.hidden && c.accessor !== '__selection__');\n    return effectiveColumnsWidth\n      .filter((cw) => {\n        const accessor = Object.keys(cw)[0];\n        return resizable.some((c) => c.accessor === accessor);\n      })\n      .every((cw) => {\n        const w = Object.values(cw)[0];\n        return w === 'auto' || w === 'initial';\n      });\n  }, [hasResizableColumns, columns, effectiveColumnsWidth]);\n\n  // No-op kept for backwards compatibility — measurement is now lazy\n  const measureAndSetColumnWidths = useCallback(() => {\n    /* noop */\n  }, []);\n\n  return {\n    columnsWidth: effectiveColumnsWidth,\n    setColumnsWidth: updateColumnWidths,\n    setColumnWidth,\n    setMultipleColumnWidths,\n    resetColumnsWidth,\n    hasResizableColumns,\n    allResizableWidthsInitial,\n    measureAndSetColumnWidths,\n    isResizing,\n    beginResize,\n    endResize,\n  } as const;\n}\n","import { type RefObject, useMemo } from 'react';\nimport type { DataTableColumn } from '../types/DataTableColumn';\nimport { type DataTableColumnPinning, useDataTableColumnPinning } from './useDataTableColumnPinning';\nimport { useDataTableColumnReorder } from './useDataTableColumnReorder';\nimport { useDataTableColumnResize } from './useDataTableColumnResize';\nimport { type DataTableColumnToggle, useDataTableColumnToggle } from './useDataTableColumnToggle';\n\nexport type { DataTableColumnPinning, 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}: {\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  // 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 { columnsPinning, setColumnsPinning, resetColumnsPinning } = useDataTableColumnPinning({\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    isResizing,\n    beginResize,\n    endResize,\n  } = useDataTableColumnResize({\n    key,\n    columns,\n    getInitialValueInEffect,\n    headerRef,\n    scrollViewportRef,\n  });\n\n  // Compute effective columns based on order, toggle, pinning, and width.\n  // Width is applied unconditionally — even without a `storeColumnsKey` —\n  // so that `setMultipleColumnWidths` updates from the resize handle\n  // actually flow back into the rendered cell `style.width`.\n  const effectiveColumns = useMemo(() => {\n    let result: DataTableColumn<T>[];\n    if (columnsOrder) {\n      result = columnsOrder\n        .map((order) => columns.find((column) => column.accessor === order))\n        .map((column) => {\n          // Effective pinned value:\n          // - If pinnable: true → use state from columnsPinning.pinned (interactive)\n          // - Otherwise → use static column.pinned\n          const pinningState = columnsPinning.find((p) => p.accessor === column?.accessor);\n          const effectivePinned = column?.pinnable ? pinningState?.pinned : column?.pinned;\n          return {\n            ...column,\n            hidden: column?.hidden || !columnsToggle.find((toggle) => toggle.accessor === column?.accessor)?.toggled,\n            pinned: effectivePinned,\n          };\n        }) as DataTableColumn<T>[];\n    } else {\n      result = columns;\n    }\n\n    // Reorder columns by pinning: left-pinned → unpinned → right-pinned\n    const leftPinned = result.filter((c) => c.pinned === 'left');\n    const unpinned = result.filter((c) => !c.pinned);\n    const rightPinned = result.filter((c) => c.pinned === 'right');\n    const reordered = [...leftPinned, ...unpinned, ...rightPinned];\n\n    return reordered.map((column) => {\n      if (column?.accessor === '__selection__') return column;\n      const accessor = column?.accessor as string;\n      const widthEntry = columnsWidth.find((entry) => accessor in entry);\n      if (!widthEntry) return column;\n      const width = widthEntry[accessor];\n      // Treat 'auto' / 'initial' as \"no override\" so declarative widths win\n      if (width === undefined || width === 'auto' || width === 'initial') return column;\n      return { ...column, width };\n    });\n  }, [columns, columnsOrder, columnsToggle, columnsPinning, columnsWidth]);\n\n  // Lock the table layout to `fixed` only when *every* visible column has a\n  // pixel width. Mixed states (some 'auto', some pixels) stay in auto layout\n  // so the browser keeps the auto cells visible — the user can re-resize to\n  // produce a complete pixel snapshot.\n  // Recomputes on column visibility changes too, so resize + toggle stays\n  // consistent.\n  const isLocked = useMemo(() => {\n    const visible = effectiveColumns.filter((c) => !c.hidden && c.accessor !== '__selection__');\n    if (visible.length === 0) return false;\n    return visible.every((c) => typeof c.width === 'string' && /px$/.test(c.width));\n  }, [effectiveColumns]);\n\n  const tableWidth = useMemo(() => {\n    if (!isLocked) return null;\n    let sum = 0;\n    for (const col of effectiveColumns) {\n      if (col.hidden || col.accessor === '__selection__') continue;\n      const w = col.width;\n      if (typeof w !== 'string') continue;\n      const n = parseInt(w, 10);\n      if (Number.isNaN(n)) continue;\n      sum += n;\n    }\n    return sum > 0 ? sum : null;\n  }, [isLocked, effectiveColumns]);\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    // Pinning handling\n    columnsPinning: columnsPinning as DataTableColumnPinning[],\n    setColumnsPinning,\n    resetColumnsPinning,\n\n    // Resize handling\n    columnsWidth,\n    setColumnsWidth,\n    setColumnWidth,\n    setMultipleColumnWidths,\n    resetColumnsWidth,\n    hasResizableColumns,\n    allResizableWidthsInitial,\n    measureAndSetColumnWidths,\n    isResizing,\n    isLocked,\n    tableWidth,\n    beginResize,\n    endResize,\n  } as const;\n};\n","import { useLocalStorage } from '@mantine/hooks';\nimport { useEffect, useMemo } from 'react';\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  // Default columns toggle state\n  const defaultColumnsToggle = useMemo(\n    () =>\n      columns?.map((column) => ({\n        accessor: column.accessor as string,\n        defaultToggle: column.defaultToggle || true,\n        toggleable: column.toggleable as boolean,\n        toggled: column.defaultToggle === undefined ? true : column.defaultToggle,\n      })) as DataTableColumnToggle[],\n    [columns]\n  );\n\n  const [storedColumnsToggle, _setColumnsToggle] = useLocalStorage<DataTableColumnToggle[]>({\n    key: key ? `${key}-columns-toggle` : '',\n    defaultValue: key ? defaultColumnsToggle : undefined,\n    getInitialValueInEffect,\n  });\n\n  const columnsToggle = storedColumnsToggle ?? defaultColumnsToggle;\n\n  function setColumnsToggle(toggle: DataTableColumnToggle[]) {\n    if (key) {\n      _setColumnsToggle(toggle);\n    }\n  }\n\n  // Align stored toggle state with current column definitions: drop accessors\n  // that no longer exist, append accessors added since last persisted state.\n  const alignedColumnsToggle = useMemo(() => {\n    if (!columnsToggle) return defaultColumnsToggle;\n    const aligned: DataTableColumnToggle[] = [];\n    columnsToggle.forEach((col) => {\n      if (columns.find((c) => c.accessor === col.accessor)) {\n        aligned.push(col);\n      }\n    });\n    columns.forEach((col) => {\n      if (!aligned.find((c) => c.accessor === col.accessor)) {\n        aligned.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    return aligned;\n  }, [columnsToggle, columns, defaultColumnsToggle]);\n\n  // Persist alignment in an effect — never set state during render\n  useEffect(() => {\n    if (!key) return;\n    if (!columnsToggle) return;\n    if (JSON.stringify(alignedColumnsToggle) !== JSON.stringify(columnsToggle)) {\n      _setColumnsToggle(alignedColumnsToggle);\n    }\n  }, [key, alignedColumnsToggle, columnsToggle, _setColumnsToggle]);\n\n  const resetColumnsToggle = () => {\n    setColumnsToggle(defaultColumnsToggle);\n  };\n\n  if (!key) {\n    return {\n      columnsToggle,\n      setColumnsToggle,\n      resetColumnsToggle,\n    } as const;\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  // biome-ignore lint/correctness/useExhaustiveDependencies: stable refs only\n  const onScroll = useCallback<OnScroll>((ev) => {\n    stableScrollCallbacks.current.onScroll?.(ev);\n    processScrollingRef.current();\n  }, []);\n\n  // biome-ignore lint/correctness/useExhaustiveDependencies: refs are stable\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  }, [header.current]);\n\n  // biome-ignore lint/correctness/useExhaustiveDependencies: refs are stable\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  }, [footer.current]);\n\n  // biome-ignore lint/correctness/useExhaustiveDependencies: refs are stable\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  }, [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  ref.current = value;\n  return ref;\n}\n","import { type RefObject, useCallback, useEffect, useState } from 'react';\nimport type { DataTableColumn } from '../types';\nimport { useIsomorphicLayoutEffect } from './useIsomorphicLayoutEffect';\n\nexport type PinnedColumnInfo = {\n  position: 'left' | 'right';\n  logicalSide: 'left' | 'right';\n  offset: number;\n  isBoundary: boolean;\n};\n\nexport function useDataTablePinnedColumns<T>({\n  columns,\n  theadRef,\n  tbodyRef,\n  selectionColumnHeaderRef,\n  selectionVisible,\n  pinFirstColumn,\n  pinLastColumn,\n}: {\n  columns: DataTableColumn<T>[];\n  theadRef: RefObject<HTMLTableSectionElement | null>;\n  tbodyRef: RefObject<HTMLTableSectionElement | null>;\n  selectionColumnHeaderRef: RefObject<HTMLTableCellElement | null>;\n  selectionVisible: boolean;\n  pinFirstColumn?: boolean;\n  pinLastColumn?: boolean;\n}): {\n  pinnedMap: Map<string, PinnedColumnInfo>;\n  hasLeftPinned: boolean;\n  hasRightPinned: boolean;\n} {\n  const [pinnedMap, setPinnedMap] = useState<Map<string, PinnedColumnInfo>>(new Map());\n\n  // Skip all measurement work when no pinning is configured. Otherwise every\n  // render fires a layout-forcing recalculate and tears down/recreates the\n  // ResizeObserver — needless thrash that interferes with consumers observing\n  // the same DOM (e.g. AutoAnimate on the same tbody). The flag is recomputed\n  // inside each hook closure so we don't change the shape of the deps arrays.\n  const recalculate = useCallback(() => {\n    if (!pinFirstColumn && !pinLastColumn && !columns.some((c) => c.pinned)) return;\n    const measurementSection = theadRef.current ?? tbodyRef.current;\n    if (!measurementSection) return;\n\n    const isTheadSource = !!theadRef.current;\n    const measurementRow = isTheadSource\n      ? measurementSection.querySelector<HTMLTableRowElement>('tr:last-of-type')\n      : measurementSection.querySelector<HTMLTableRowElement>('tr:first-of-type');\n    if (!measurementRow) return;\n\n    const isRtl = getComputedStyle(measurementSection).direction === 'rtl';\n\n    const widths = new Map<string, number>();\n\n    if (isTheadSource) {\n      measurementRow.querySelectorAll<HTMLElement>('th[data-accessor]').forEach((th) => {\n        const accessor = th.dataset.accessor;\n        if (accessor) {\n          const w = th.getBoundingClientRect().width;\n          if (w > 0) widths.set(accessor, w);\n        }\n      });\n    } else {\n      const visibleCols = columns.filter((c) => !c.hidden);\n      const tds = measurementRow.querySelectorAll<HTMLElement>(\n        'td:not(.mantine-datatable-row-selector-cell):not(.mantine-datatable-row-expansion-cell)'\n      );\n      tds.forEach((td, i) => {\n        if (visibleCols[i]) {\n          const w = td.getBoundingClientRect().width;\n          if (w > 0) widths.set(String(visibleCols[i].accessor), w);\n        }\n      });\n    }\n\n    let selectionWidth = 0;\n    if (selectionVisible) {\n      const selCell =\n        selectionColumnHeaderRef.current ??\n        measurementSection.querySelector<HTMLElement>(\n          isTheadSource ? '.mantine-datatable-header-selector-cell' : '.mantine-datatable-row-selector-cell'\n        );\n      if (selCell) selectionWidth = selCell.getBoundingClientRect().width;\n    }\n\n    const renderedAccessors = columns\n      .filter((c) => !c.hidden && widths.has(String(c.accessor)))\n      .map((c) => String(c.accessor));\n\n    const resolvedPinned = new Map<string, 'left' | 'right'>();\n    for (const col of columns) {\n      const acc = String(col.accessor);\n      if (!renderedAccessors.includes(acc)) continue;\n\n      if (col.pinned) {\n        resolvedPinned.set(acc, col.pinned);\n      } else if (pinFirstColumn && acc === renderedAccessors[0] && !resolvedPinned.has(acc)) {\n        resolvedPinned.set(acc, 'left');\n      } else if (pinLastColumn && acc === renderedAccessors[renderedAccessors.length - 1] && !resolvedPinned.has(acc)) {\n        resolvedPinned.set(acc, 'right');\n      }\n    }\n\n    const leftPinned = renderedAccessors.filter((acc) => resolvedPinned.get(acc) === 'left');\n    const rightPinned = renderedAccessors.filter((acc) => resolvedPinned.get(acc) === 'right');\n\n    const newMap = new Map<string, PinnedColumnInfo>();\n\n    let leftOffset = selectionWidth;\n    leftPinned.forEach((acc, i) => {\n      newMap.set(acc, {\n        position: isRtl ? 'right' : 'left',\n        logicalSide: 'left',\n        offset: leftOffset,\n        isBoundary: i === leftPinned.length - 1,\n      });\n      leftOffset += widths.get(acc) || 0;\n    });\n\n    let rightOffset = -0.4; // Webkit subpixel gap fix (see old CSS: right: rem(-0.4px))\n    const rightReversed = [...rightPinned].reverse();\n    rightReversed.forEach((acc, i) => {\n      newMap.set(acc, {\n        position: isRtl ? 'left' : 'right',\n        logicalSide: 'right',\n        offset: rightOffset,\n        isBoundary: i === rightReversed.length - 1,\n      });\n      rightOffset += widths.get(acc) || 0;\n    });\n\n    setPinnedMap((prev) => {\n      if (prev.size !== newMap.size) return newMap;\n      for (const [k, v] of newMap) {\n        const pv = prev.get(k);\n        if (\n          !pv ||\n          pv.position !== v.position ||\n          pv.logicalSide !== v.logicalSide ||\n          pv.offset !== v.offset ||\n          pv.isBoundary !== v.isBoundary\n        ) {\n          return newMap;\n        }\n      }\n      return prev;\n    });\n  }, [columns, selectionVisible, theadRef, tbodyRef, selectionColumnHeaderRef, pinFirstColumn, pinLastColumn]);\n\n  // biome-ignore lint/correctness/useExhaustiveDependencies: `pinFirstColumn`, `pinLastColumn` and `columns` are captured transitively via `recalculate` — keep the deps array shape (3 items) stable so HMR can't trip \"deps array changed size\".\n  useEffect(() => {\n    if (!pinFirstColumn && !pinLastColumn && !columns.some((c) => c.pinned)) return;\n    const section = theadRef.current ?? tbodyRef.current;\n    if (!section) return;\n\n    const isTheadSource = !!theadRef.current;\n    const row = isTheadSource ? section.querySelector('tr:last-of-type') : section.querySelector('tr:first-of-type');\n    if (!row) return;\n\n    const observer = new ResizeObserver(recalculate);\n    row.querySelectorAll(isTheadSource ? 'th' : 'td').forEach((cell) => {\n      observer.observe(cell);\n    });\n\n    return () => observer.disconnect();\n  }, [theadRef, tbodyRef, recalculate]);\n\n  useIsomorphicLayoutEffect(recalculate, [recalculate]);\n\n  const hasLeftPinned = [...pinnedMap.values()].some((info) => info.logicalSide === 'left');\n  const hasRightPinned = [...pinnedMap.values()].some((info) => info.logicalSide === 'right');\n\n  return { pinnedMap, hasLeftPinned, hasRightPinned };\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  // biome-ignore lint/correctness/useExhaustiveDependencies: reset when recordIds change\n  useEffect(() => {\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) => {\n      unsubscribe();\n    });\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 { type MantineTheme, useMantineTheme } 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 { type MantineTheme, useMantineTheme } 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      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  type CheckboxProps,\n  Group,\n  type MantineStyleProp,\n  Popover,\n  PopoverDropdown,\n  PopoverTarget,\n  Stack,\n  TableThead,\n  TableTr,\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, PinnedColumnInfo } 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  pinnedMap: Map<string, PinnedColumnInfo>;\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\nfunction getGroupPinnedInfo<T>(\n  group: DataTableColumnGroup<T>,\n  pinnedMap: Map<string, PinnedColumnInfo>\n): PinnedColumnInfo | undefined {\n  const leafColumns = group.columns ?? [];\n  const leafAccessors = leafColumns.filter((c) => !c.hidden).map((c) => String(c.accessor));\n\n  const pinnedInfos = leafAccessors.map((acc) => pinnedMap.get(acc)).filter(Boolean) as PinnedColumnInfo[];\n\n  if (pinnedInfos.length === 0 || pinnedInfos.length !== leafAccessors.length) return undefined;\n\n  const logicalSides = new Set(pinnedInfos.map((p) => p.logicalSide));\n  if (logicalSides.size > 1) return undefined;\n\n  const logicalSide = [...logicalSides][0];\n  const targetAcc = logicalSide === 'left' ? leafAccessors[0] : leafAccessors[leafAccessors.length - 1];\n  const info = pinnedMap.get(targetAcc);\n  if (!info) return undefined;\n\n  const boundaryAcc = logicalSide === 'left' ? leafAccessors[leafAccessors.length - 1] : leafAccessors[0];\n  const boundaryInfo = pinnedMap.get(boundaryAcc);\n  return { ...info, isBoundary: boundaryInfo?.isBoundary ?? false };\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  pinnedMap,\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                    pinnedInfo={getGroupPinnedInfo(group, pinnedMap)}\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            pinnable,\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              pinnedInfo={pinnedMap.get(String(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              pinnable={pinnable}\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 type { PinnedColumnInfo } from './hooks';\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  pinnedInfo: PinnedColumnInfo | undefined;\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  pinnedInfo,\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      data-pinned={pinnedInfo?.position}\n      data-pinned-shadow={pinnedInfo?.isBoundary ? pinnedInfo.position : 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={[\n        style,\n        pinnedInfo && {\n          position: 'sticky',\n          [pinnedInfo.position]: pinnedInfo.offset,\n          overflow: 'visible',\n        },\n      ]}\n    >\n      {title ?? humanize(id)}\n    </TableTh>\n  ) : null;\n}\n","import { ActionIcon, Box, Center, Flex, Group, type MantineStyleProp, type MantineTheme, TableTh } from '@mantine/core';\nimport clsx from 'clsx';\nimport { useRef, useState } from 'react';\nimport { useDataTableColumnsContext } from './DataTableColumns.context';\nimport { DataTableHeaderCellFilter } from './DataTableHeaderCellFilter';\nimport { DataTablePinnableDropdown } from './DataTablePinnableDropdown';\nimport { DataTableResizableHeaderHandle } from './DataTableResizableHeaderHandle';\nimport type { PinnedColumnInfo } from './hooks';\nimport { useMediaQueryStringOrFunction } from './hooks';\nimport { IconArrowsVertical } from './icons/IconArrowsVertical';\nimport { IconArrowUp } from './icons/IconArrowUp';\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  pinnedInfo: PinnedColumnInfo | 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  | 'pinnable'\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  pinnedInfo,\n  accessor,\n  visibleMediaQuery,\n  title,\n  sortable,\n  draggable,\n  toggleable,\n  pinnable,\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 {\n    setSourceColumn,\n    setTargetColumn,\n    swapColumns,\n    columnsToggle,\n    setColumnsToggle,\n    columnsPinning,\n    setColumnsPinning,\n  } = useDataTableColumnsContext();\n  const [dragOver, setDragOver] = useState<boolean>(false);\n  const columnRef = useRef<HTMLTableCellElement | null>(null);\n\n  // Get current pinning state for this column\n  const pinningState = columnsPinning?.find((p) => p.accessor === accessor);\n  const currentPinned = pinningState?.pinned;\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(\n      columnsToggle.map((c) => {\n        if (c.accessor === accessor) {\n          return { ...c, toggled: false };\n        }\n        return c;\n      })\n    );\n  };\n\n  const handlePinChange = (pinned: 'left' | 'right' | undefined) => {\n    setColumnsPinning((prev) =>\n      prev.map((p) => {\n        if (p.accessor === accessor) {\n          return { ...p, pinned };\n        }\n        return p;\n      })\n    );\n  };\n\n  return (\n    <TableTh\n      data-accessor={accessor}\n      data-pinned={pinnedInfo?.position}\n      data-pinned-shadow={pinnedInfo?.isBoundary ? pinnedInfo.position : undefined}\n      className={clsx(\n        {\n          'mantine-datatable-header-cell-sortable': sortable,\n          'mantine-datatable-header-cell-toggleable': toggleable,\n          'mantine-datatable-header-cell-pinnable': pinnable,\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        pinnedInfo && {\n          position: 'sticky',\n          [pinnedInfo.position]: pinnedInfo.offset,\n          overflow: 'visible',\n        },\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        {pinnable ? <DataTablePinnableDropdown currentPinned={currentPinned} onPinChange={handlePinChange} /> : null}\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          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 className=\"mantine-datatable-header-cell-sortable-unsorted-icon\" role=\"img\" aria-label=\"Not sorted\">\n              {sortIcons?.unsorted || <IconArrowsVertical />}\n            </Center>\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    // Keep the expanded props before the open/close, or they could be overridden by the client\n    <Popover withArrow shadow=\"md\" trapFocus {...filterPopoverProps} opened={isOpen} onClose={close} onDismiss={close}>\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","'use client';\n\nimport { ActionIcon, Center, Group, Popover } from '@mantine/core';\nimport { useCallback, useEffect, useRef, useState } from 'react';\nimport { useIsomorphicLayoutEffect } from './hooks/useIsomorphicLayoutEffect';\nimport { IconArrowLeft } from './icons/IconArrowLeft';\nimport { IconArrowRight } from './icons/IconArrowRight';\nimport { IconPin } from './icons/IconPin';\nimport { IconX } from './icons/IconX';\n\ntype DataTablePinnableDropdownProps = {\n  currentPinned: 'left' | 'right' | undefined;\n  onPinChange: (pinned: 'left' | 'right' | undefined) => void;\n};\n\nexport function DataTablePinnableDropdown({ currentPinned, onPinChange }: DataTablePinnableDropdownProps) {\n  const [opened, setOpened] = useState(false);\n  const containerRef = useRef<HTMLDivElement>(null);\n  const [isRtl, setIsRtl] = useState(false);\n\n  // Detect RTL from DOM - more reliable than useDirection() which may not see local DirectionProvider\n  const detectDirection = useCallback(() => {\n    if (containerRef.current) {\n      const computedDir = getComputedStyle(containerRef.current).direction;\n      setIsRtl(computedDir === 'rtl');\n    }\n  }, []);\n\n  // Use layout effect for synchronous detection (no flash)\n  useIsomorphicLayoutEffect(() => {\n    detectDirection();\n  }, [detectDirection]);\n\n  // Re-detect on open (in case direction changed)\n  useEffect(() => {\n    if (opened) {\n      detectDirection();\n    }\n  }, [opened, detectDirection]);\n\n  // In RTL mode, visual arrows should map to opposite logical sides:\n  // - Left arrow (visually pointing left) → physical left edge → 'right' in RTL\n  // - Right arrow (visually pointing right) → physical right edge → 'left' in RTL\n  const leftArrowPinValue: 'left' | 'right' = isRtl ? 'right' : 'left';\n  const rightArrowPinValue: 'left' | 'right' = isRtl ? 'left' : 'right';\n\n  // For highlighting: check if current pinned matches what this arrow would set\n  const isLeftArrowActive = currentPinned === leftArrowPinValue;\n  const isRightArrowActive = currentPinned === rightArrowPinValue;\n\n  return (\n    <Popover opened={opened} onChange={setOpened} position=\"bottom\" withArrow shadow=\"sm\">\n      <Popover.Target>\n        <Center\n          ref={containerRef}\n          className=\"mantine-datatable-header-cell-pinnable-icon\"\n          role=\"button\"\n          aria-label=\"Pin column\"\n          onMouseEnter={() => setOpened(true)}\n          onMouseLeave={() => setOpened(false)}\n        >\n          <ActionIcon size=\"xs\" variant=\"light\" onClick={(e) => e.stopPropagation()}>\n            <IconPin />\n          </ActionIcon>\n        </Center>\n      </Popover.Target>\n\n      <Popover.Dropdown\n        onClick={(e) => e.stopPropagation()}\n        onMouseEnter={() => setOpened(true)}\n        onMouseLeave={() => setOpened(false)}\n        className=\"mantine-datatable-pinnable-dropdown\"\n      >\n        <Group gap={4}>\n          <ActionIcon\n            size=\"sm\"\n            variant={isLeftArrowActive ? 'filled' : 'light'}\n            onClick={() => onPinChange(isLeftArrowActive ? undefined : leftArrowPinValue)}\n            aria-label=\"Pin left\"\n          >\n            <IconArrowLeft />\n          </ActionIcon>\n          <ActionIcon\n            size=\"sm\"\n            variant={isRightArrowActive ? 'filled' : 'light'}\n            onClick={() => onPinChange(isRightArrowActive ? undefined : rightArrowPinValue)}\n            aria-label=\"Pin right\"\n          >\n            <IconArrowRight />\n          </ActionIcon>\n          {currentPinned && (\n            <ActionIcon size=\"sm\" variant=\"light\" color=\"red\" onClick={() => onPinChange(undefined)} aria-label=\"Unpin\">\n              <IconX />\n            </ActionIcon>\n          )}\n        </Group>\n      </Popover.Dropdown>\n    </Popover>\n  );\n}\n","export function IconArrowLeft() {\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=\"M5 12l14 0\" />\n      <path d=\"M5 12l6 6\" />\n      <path d=\"M5 12l6 -6\" />\n    </svg>\n  );\n}\n","export function IconArrowRight() {\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=\"M5 12l14 0\" />\n      <path d=\"M19 12l-6 6\" />\n      <path d=\"M19 12l-6 -6\" />\n    </svg>\n  );\n}\n","export function IconPin() {\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 4v6l-2 4v2h10v-2l-2-4v-6\" />\n      <path d=\"M12 16v5\" />\n      <path d=\"M8 4h8\" />\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 { 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\nconst MIN_COLUMN_WIDTH = 50;\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, beginResize, endResize } = 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;\n        }\n        nextColumn = nextColumn.nextElementSibling as HTMLTableCellElement | null;\n      }\n\n      if (!nextColumn) {\n        return;\n      }\n\n      const nextAccessor = nextColumn.getAttribute('data-accessor');\n      if (!nextAccessor) {\n        return;\n      }\n\n      // Capture pixel widths BEFORE switching the table to fixed layout —\n      // these are the natural rendered widths the user is starting from.\n      const startCurrentWidth = currentColumn.offsetWidth;\n      const startNextWidth = nextColumn.offsetWidth;\n\n      // Snapshot every header cell into pixel widths and switch to fixed layout\n      beginResize();\n\n      setIsResizing(true);\n      startXRef.current = event.clientX;\n      originalWidthsRef.current = {\n        current: startCurrentWidth,\n        next: startNextWidth,\n      };\n\n      const handleMouseMove = (moveEvent: MouseEvent) => {\n        let deltaX = moveEvent.clientX - startXRef.current;\n        if (isRTL) deltaX = -deltaX;\n\n        const maxShrinkCurrent = originalWidthsRef.current.current - MIN_COLUMN_WIDTH;\n        const maxShrinkNext = originalWidthsRef.current.next - MIN_COLUMN_WIDTH;\n\n        const constrainedDelta = Math.max(-maxShrinkCurrent, Math.min(deltaX, maxShrinkNext));\n\n        const finalCurrentWidth = originalWidthsRef.current.current + constrainedDelta;\n        const finalNextWidth = originalWidthsRef.current.next - constrainedDelta;\n\n        // State-driven update: pushes the new widths through `effectiveColumns`\n        // and keeps React in sync with the DOM. With table-layout: fixed the\n        // browser honors the new pixel widths precisely.\n        setMultipleColumnWidths([\n          { accessor, width: `${finalCurrentWidth}px` },\n          { accessor: nextAccessor, width: `${finalNextWidth}px` },\n        ]);\n      };\n\n      const handleMouseUp = () => {\n        setIsResizing(false);\n\n        document.body.style.cursor = 'initial';\n        document.body.style.userSelect = 'initial';\n\n        endResize();\n\n        document.removeEventListener('mousemove', handleMouseMove);\n        document.removeEventListener('mouseup', handleMouseUp);\n      };\n\n      document.body.style.cursor = 'col-resize';\n      document.body.style.userSelect = 'none';\n\n      document.addEventListener('mousemove', handleMouseMove);\n      document.addEventListener('mouseup', handleMouseUp);\n    },\n    [accessor, columnRef, isRTL, setMultipleColumnWidths, beginResize, endResize]\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    const updates = [{ accessor, width: 'auto' }];\n\n    if (nextColumn) {\n      const nextAccessor = nextColumn.getAttribute('data-accessor');\n      if (nextAccessor && nextAccessor !== '__selection__') {\n        updates.push({ accessor: nextAccessor, width: 'auto' });\n      }\n    }\n\n    setMultipleColumnWidths(updates);\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 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 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 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","import type { MantineStyleProp } from '@mantine/core';\nimport { Checkbox, type CheckboxProps, TableTh } 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, type MantineSpacing, type MantineStyleProp, Pagination, rem, Text } from '@mantine/core';\nimport clsx from 'clsx';\nimport { getPaginationCssVariables } from './cssVariables';\nimport { DataTablePageSizeSelector } from './DataTablePageSizeSelector';\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      ) : null,\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, type MantineSize, Menu, MenuDropdown, MenuItem, MenuTarget, rem, Text } 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","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 { type CheckboxProps, type MantineColor, type MantineStyleProp, TableTr } from '@mantine/core';\nimport clsx from 'clsx';\nimport { getRowCssVariables } from './cssVariables';\nimport { DataTableRowCell } from './DataTableRowCell';\nimport { DataTableRowExpansion } from './DataTableRowExpansion';\nimport { DataTableRowSelectorCell } from './DataTableRowSelectorCell';\nimport type { PinnedColumnInfo, 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  pinnedMap: Map<string, PinnedColumnInfo>;\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  pinnedMap,\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            pinnedInfo={pinnedMap.get(String(accessor))}\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 { type MantineStyleProp, TableTd } from '@mantine/core';\nimport clsx from 'clsx';\nimport type { PinnedColumnInfo } from './hooks';\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  pinnedInfo: PinnedColumnInfo | 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  pinnedInfo,\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      data-pinned={pinnedInfo?.position}\n      data-pinned-shadow={pinnedInfo?.isBoundary ? pinnedInfo.position : undefined}\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        pinnedInfo && {\n          position: 'sticky',\n          [pinnedInfo.position]: pinnedInfo.offset,\n          overflow: 'visible',\n        },\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 expanded={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, type CheckboxProps, TableTd } 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  // biome-ignore lint/correctness/useExhaustiveDependencies: re-measure cells when children change\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":["Box","Table","useMergedRef","clsx","useCallback","useEffect","useLayoutEffect","useMemo","useRef","parseThemeColor","getColor","color","theme","colorScheme","getTableCssVariables","c","backgroundColor","borderColor","rowBorderColor","stripedColor","highlightOnHoverColor","getPaginationCssVariables","paginationActiveTextColor","paginationActiveBackgroundColor","getRowCssVariables","useState","createSafeContext","DataTableColumnsContextProvider","useDataTableColumnsContext","jsx","DataTableColumnsProvider","props","children","columnsOrder","setColumnsOrder","columnsToggle","setColumnsToggle","columnsPinning","setColumnsPinning","resetColumnsOrder","resetColumnsToggle","resetColumnsPinning","setColumnWidth","setMultipleColumnWidths","resetColumnsWidth","beginResize","endResize","pinnedMap","sourceColumn","setSourceColumn","useState","targetColumn","setTargetColumn","DataTableColumnsContextProvider","sourceInfo","targetInfo","sourceIndex","targetIndex","newOrder","removed","jsx","DataTableEmptyRow","Center","Text","jsx","jsxs","IconDatabaseOff","Fragment","jsx","jsxs","DataTableEmptyState","icon","text","active","children","Center","IconDatabaseOff","Text","TableTfoot","TableTr","clsx","TableTh","clsx","useCallback","useRef","useState","useLocalStorage","useEffect","useMemo","useDataTableColumnPinning","key","columns","getInitialValueInEffect","defaultColumnsPinning","column","storedColumnsPinning","_setColumnsPinning","columnsPinning","setColumnsPinning","pinning","prev","alignedColumnsPinning","aligned","col","c","resetColumnsPinning","useLocalStorage","useEffect","useMemo","useDataTableColumnReorder","key","columns","getInitialValueInEffect","defaultColumnsOrder","column","storedColumnsOrder","_setColumnsOrder","columnsOrder","setColumnsOrder","order","alignedColumnsOrder","aligned","col","c","resetColumnsOrder","useLocalStorage","useCallback","useEffect","useMemo","useRef","useState","useDataTableColumnResize","key","columns","getInitialValueInEffect","headerRef","hasResizableColumns","c","getDefaultColumnsWidth","column","storedColumnsWidth","setStoredColumnsWidth","effectiveColumnsWidth","setEffectiveColumnsWidth","isResizing","setIsResizing","dirtyRef","prev","validAccessors","filtered","entry","present","added","accessor","updateColumnWidths","updates","u","col","update","setColumnWidth","width","setMultipleColumnWidths","beginResize","thead","cells","snapshot","cell","endResize","resetColumnsWidth","defaults","allResizableWidthsInitial","resizable","cw","w","measureAndSetColumnWidths","useMemo","useLocalStorage","useEffect","useMemo","useDataTableColumnToggle","key","columns","getInitialValueInEffect","defaultColumnsToggle","column","storedColumnsToggle","_setColumnsToggle","columnsToggle","setColumnsToggle","toggle","alignedColumnsToggle","aligned","col","c","resetColumnsToggle","useDataTableColumns","key","columns","getInitialValueInEffect","headerRef","scrollViewportRef","columnsOrder","setColumnsOrder","resetColumnsOrder","useDataTableColumnReorder","columnsToggle","setColumnsToggle","resetColumnsToggle","useDataTableColumnToggle","columnsPinning","setColumnsPinning","resetColumnsPinning","useDataTableColumnPinning","columnsWidth","setColumnsWidth","setColumnWidth","setMultipleColumnWidths","resetColumnsWidth","hasResizableColumns","allResizableWidthsInitial","measureAndSetColumnWidths","isResizing","beginResize","endResize","useDataTableColumnResize","effectiveColumns","useMemo","result","order","column","pinningState","p","effectivePinned","toggle","leftPinned","c","unpinned","rightPinned","accessor","widthEntry","entry","width","isLocked","visible","tableWidth","sum","col","w","n","rem","useCallback","useEffect","useRef","useEffect","useLayoutEffect","useIsomorphicLayoutEffect","useRef","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","useRef","table","scrollViewport","header","footer","selectionColumnHeader","stableDependencies","useStableValue","stableScrollCallbacks","processScrollingRef","processLastRowBottomBorderRef","onScroll","useCallback","ev","useEffect","rect","useIsomorphicLayoutEffect","scrollPosition","tableRect","scrollRect","setScrolledTo","pos","old","processFooterPosition","diff","relative","processLastRowBottomBorder","rem","processScrolling","callbacks","viewport","scrollTop","scrollLeft","newScrolledToTop","newScrolledToBottom","scrolledToTop","scrolledToBottom","isRtl","maxScrollLeft","newScrolledToLeft","newScrolledToRight","absScrollLeft","scrolledToLeft","scrolledToRight","useCallback","useEffect","useState","useDataTablePinnedColumns","columns","theadRef","tbodyRef","selectionColumnHeaderRef","selectionVisible","pinFirstColumn","pinLastColumn","pinnedMap","setPinnedMap","useState","recalculate","useCallback","c","measurementSection","isTheadSource","measurementRow","isRtl","widths","th","accessor","w","visibleCols","td","i","selectionWidth","selCell","renderedAccessors","resolvedPinned","col","acc","leftPinned","rightPinned","newMap","leftOffset","rightOffset","rightReversed","prev","k","v","pv","useEffect","section","row","observer","cell","useIsomorphicLayoutEffect","hasLeftPinned","info","hasRightPinned","useEffect","useState","useLastSelectionChangeIndex","recordIds","lastSelectionChangeIndex","setLastSelectionChangeIndex","recordIdsString","useEffect","useRef","useState","attachMediaListeners","queries","callback","callbackWrapper","query","subscriptions","unsubscribe","getInitialValue","initialValues","useMediaQueries","getInitialValueInEffect","matches","setMatches","queryRef","queryResult","event","useMantineTheme","useMemo","useMediaQueriesStringOrFunction","queries","theme","useMantineTheme","values","useMemo","query","defaults","useMediaQueries","useMantineTheme","useMediaQuery","useMediaQueryStringOrFunction","mediaQuery","theme","mediaQueryValue","useState","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","useState","expandable","collapseProps","content","collapseRow","id","recordId","useTimeout","useEffect","useState","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","jsx","DataTableFooterCell","className","style","pinnedInfo","visibleMediaQuery","title","noWrap","ellipsis","textAlign","width","useMediaQueryStringOrFunction","TableTh","clsx","NOWRAP","ELLIPSIS","TEXT_ALIGN_LEFT","TEXT_ALIGN_CENTER","TEXT_ALIGN_RIGHT","TableTh","jsx","DataTableFooterSelectorPlaceholderCell","shadowVisible","jsx","jsxs","DataTableFooter","className","style","columns","defaultColumnProps","pinnedMap","selectionVisible","selectorCellShadowVisible","ref","TableTfoot","clsx","TableTr","DataTableFooterSelectorPlaceholderCell","hidden","columnProps","accessor","visibleMediaQuery","textAlign","width","footer","footerClassName","footerStyle","noWrap","ellipsis","DataTableFooterCell","Checkbox","Group","Popover","PopoverDropdown","PopoverTarget","Stack","TableThead","TableTr","clsx","useState","TableTh","clsx","useMemo","jsx","DataTableColumnGroupHeaderCell","id","columns","groups","title","textAlign","className","style","pinnedInfo","maxDepth","currentDepth","previousGroups","isLastGroup","withColumnBorders","totalTableColumns","allColumns","useMemo","flattenColumns","queries","visibleMediaQuery","visibles","useMediaQueriesStringOrFunction","colSpan","calculateColSpan","columnsBeforeGroup","sum","g","rowSpan","hasMoreColumns","needsBorder","needsRightBorder","TableTh","clsx","TEXT_ALIGN_LEFT","TEXT_ALIGN_CENTER","TEXT_ALIGN_RIGHT","humanize","ActionIcon","Box","Center","Flex","Group","TableTh","clsx","useRef","useState","ActionIcon","Popover","PopoverDropdown","PopoverTarget","useClickOutside","useDisclosure","jsx","jsxs","IconFilter","jsx","jsxs","IconFilterFilled","jsx","jsxs","DataTableHeaderCellFilter","children","isActive","filterPopoverProps","filterPopoverDisableClickOutside","isOpen","close","toggle","useDisclosure","Icon","IconFilterFilled","IconFilter","ref","useClickOutside","Popover","PopoverTarget","ActionIcon","e","PopoverDropdown","ActionIcon","Center","Group","Popover","useCallback","useEffect","useRef","useState","jsx","jsxs","IconArrowLeft","jsx","jsxs","IconArrowRight","jsx","jsxs","IconPin","jsx","jsxs","IconX","jsx","jsxs","DataTablePinnableDropdown","currentPinned","onPinChange","opened","setOpened","useState","containerRef","useRef","isRtl","setIsRtl","detectDirection","useCallback","computedDir","useIsomorphicLayoutEffect","useEffect","leftArrowPinValue","rightArrowPinValue","isLeftArrowActive","isRightArrowActive","Popover","Center","ActionIcon","e","IconPin","Group","IconArrowLeft","IconArrowRight","IconX","useDirection","useCallback","useRef","useState","jsx","MIN_COLUMN_WIDTH","DataTableResizableHeaderHandle","props","accessor","columnRef","isResizing","setIsResizing","useState","startXRef","useRef","originalWidthsRef","dir","useDirection","isRTL","setMultipleColumnWidths","beginResize","endResize","useDataTableColumnsContext","handleMouseDown","useCallback","event","currentColumn","nextColumn","nextAccessor","startCurrentWidth","startNextWidth","handleMouseMove","moveEvent","deltaX","maxShrinkCurrent","maxShrinkNext","constrainedDelta","finalCurrentWidth","finalNextWidth","handleMouseUp","handleDoubleClick","updates","jsx","jsxs","IconArrowsVertical","jsx","jsxs","IconArrowUp","jsx","jsxs","IconGripVertical","jsx","jsxs","DataTableHeaderCell","className","style","pinnedInfo","accessor","visibleMediaQuery","title","sortable","draggable","toggleable","pinnable","resizable","sortIcons","textAlign","width","sortStatus","onSortStatusChange","filter","filterPopoverProps","filterPopoverDisableClickOutside","filtering","sortKey","setSourceColumn","setTargetColumn","swapColumns","columnsToggle","setColumnsToggle","columnsPinning","setColumnsPinning","useDataTableColumnsContext","dragOver","setDragOver","useState","columnRef","useRef","currentPinned","p","useMediaQueryStringOrFunction","text","humanize","tooltip","sortAction","e","handleColumnDragStart","handleColumnDragOver","handleColumnDrop","handleColumnDragEnter","handleColumnDragLeave","handleColumnToggle","c","handlePinChange","pinned","prev","TableTh","clsx","Group","Flex","Center","ActionIcon","IconGripVertical","Box","TEXT_ALIGN_LEFT","TEXT_ALIGN_CENTER","TEXT_ALIGN_RIGHT","NOWRAP","ELLIPSIS","DataTablePinnableDropdown","IconX","IconArrowUp","IconArrowsVertical","DataTableHeaderCellFilter","DataTableResizableHeaderHandle","Checkbox","TableTh","clsx","jsx","DataTableHeaderSelectorCell","className","style","trigger","shadowVisible","checked","indeterminate","checkboxProps","onChange","rowSpan","ref","enabled","TableTh","clsx","POINTER_CURSOR","Checkbox","jsx","jsxs","getGroupPinnedInfo","group","pinnedMap","leafAccessors","c","pinnedInfos","acc","logicalSides","p","logicalSide","targetAcc","info","boundaryAcc","boundaryInfo","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","useState","someColumnsToggleable","column","columnToggleCheckboxLabels","accessor","title","humanize","content","TableThead","clsx","e","_","depthIndex","groupsAtDepth","getGroupsAtDepth","TableTr","index","DataTableColumnGroupHeaderCell","hidden","columnProps","visibleMediaQuery","textAlign","width","sortable","draggable","toggleable","pinnable","resizable","titleClassName","titleStyle","filter","filterPopoverProps","filterPopoverDisableClickOutside","filtering","sortKey","DataTableHeaderCell","Popover","PopoverTarget","PopoverDropdown","Stack","Group","Checkbox","Center","Loader","clsx","jsx","DataTableLoader","fetching","customContent","backgroundBlur","size","type","color","Box","Pagination","rem","Text","clsx","Button","Group","Menu","MenuDropdown","MenuItem","MenuTarget","rem","Text","clsx","jsx","jsxs","IconSelector","jsx","jsxs","HEIGHT","rem","DataTablePageSizeSelector","size","label","values","value","activeTextColor","activeBackgroundColor","onChange","Group","Text","Menu","MenuTarget","Button","IconSelector","theme","MenuDropdown","v","isCurrent","MenuItem","clsx","getPaginationCssVariables","Fragment","jsx","jsxs","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","rem","Controls","props","Text","DataTablePageSizeSelector","Pagination","clsx","theme","getPaginationCssVariables","ctx","n","Box","TableTr","clsx","TableTd","clsx","jsx","DataTableRowCell","className","style","pinnedInfo","visibleMediaQuery","record","index","onClick","onDoubleClick","onContextMenu","noWrap","ellipsis","textAlign","width","accessor","render","defaultRender","customCellAttributes","useMediaQueryStringOrFunction","TableTd","clsx","NOWRAP","ELLIPSIS","POINTER_CURSOR","CONTEXT_MENU_CURSOR","TEXT_ALIGN_LEFT","TEXT_ALIGN_CENTER","TEXT_ALIGN_RIGHT","getValueAtPath","Collapse","TableTd","TableTr","Fragment","jsx","jsxs","DataTableRowExpansion","open","colSpan","content","collapseProps","expanded","visible","useRowExpansionStatus","TableTr","TableTd","Collapse","Checkbox","TableTd","clsx","jsx","DataTableRowSelectorCell","className","style","record","index","trigger","onChange","withRightShadow","checkboxProps","getCheckboxProps","otherProps","allCheckboxProps","enabled","handleClick","e","TableTd","clsx","POINTER_CURSOR","Checkbox","Fragment","jsx","jsxs","DataTableRow","record","index","columns","defaultColumnProps","pinnedMap","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","TableTr","clsx","POINTER_CURSOR","CONTEXT_MENU_CURSOR","e","isExpandable","isRowExpanded","expandOnClick","expandRow","collapseRow","theme","colorValue","backgroundColorValue","getRowCssVariables","Box","ScrollArea","clsx","jsx","jsxs","DataTableScrollArea","leftShadowBehind","rightShadowBehind","onScrollPositionChange","children","viewportRef","scrollAreaProps","jsx","jsxs","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","flatColumns","useMemo","flattenColumns","refs","handleScrollPositionChange","useDataTableInjectCssVariables","dragToggle","useDataTableColumns","effectiveColumns","mergedTableRef","useMergedRef","mergedViewportRef","internalBodyRef","useRef","mergedBodyRef","rowExpansionInfo","useRowExpansion","pinnedMap","hasLeftPinned","hasRightPinned","useDataTablePinnedColumns","resetScrollPending","prevPageRef","recordsAtPageChangeRef","handlePageChange","useCallback","newPage","useEffect","recordsLength","useLayoutEffect","viewport","raf","recordIds","record","getRecordId","selectionColumnVisible","selectedRecordIds","hasRecordsAndSelectedRecords","selectableRecords","selectableRecordIds","allSelectableRecordsSelected","id","someRecordsSelected","handleHeaderSelectionChange","uniqBy","lastSelectionChangeIndex","setLastSelectionChangeIndex","useLastSelectionChangeIndex","selectorCellShadowVisible","marginProperties","TableWrapper","children","DataTableColumnsProvider","Box","clsx","theme","getTableCssVariables","DataTableScrollArea","Table","TEXT_SELECTION_DISABLED","DataTableHeader","recordId","isSelected","handleSelectionChange","e","targetRecords","rec","idx","differenceBy","r","DataTableRow","DataTableEmptyRow","footer","DataTableFooter","DataTablePagination","DataTableLoader","DataTableEmptyState","TableTr","useMergedRef","useEffect","useRef","jsx","DataTableDraggableRow","className","children","isDragging","refProp","otherProps","ref","mergedRef","headerRow","index","headerCellDimensions","cell"]}