{"version":3,"file":"AggregatedCell-3CIdlmt6.mjs","names":["Button","Dialog","DialogActions","DialogContent","DialogTitle","useEventCallback","useContext","useId","useTranslation","DialogsContext","ReactNode","OpenDialogOptions","onClose","result","TResult","Promise","AlertOptions","title","ConfirmOptions","confirmText","cancelText","DialogProps","payload","TPayload","open","OpenAlertDialog","message","options","OpenConfirmDialog","DialogComponent","React","ComponentType","OpenDialog","Component","CloseDialog","dialog","AlertDialogPayload","AlertDialogProps","AlertDialog","t0","$","_c","$i","Symbol","for","t","messageId","t1","t2","t3","t4","t5","t6","t7","t8","ConfirmDialogPayload","ConfirmDialogProps","ConfirmDialog","t9","t10","t11","t12","DialogHook","alert","confirm","close","useDialogs","undefined","message_0","options_0","_c","aggregationFn_count","aggregationFn_extent","aggregationFn_first","aggregationFn_last","aggregationFn_max","aggregationFn_mean","aggregationFn_median","aggregationFn_min","aggregationFn_sum","aggregationFn_unique","aggregationFn_uniqueCount","createExpandedRowModel","createFacetedMinMaxValues","createFacetedRowModel","createFacetedUniqueValues","createFilteredRowModel","createGroupedRowModel","createPaginatedRowModel","createSortedRowModel","createTableHookContexts","filterFn_arrHas","filterFn_arrIncludes","filterFn_arrIncludesAll","filterFn_arrIncludesSome","filterFn_between","filterFn_betweenInclusive","filterFn_empty","filterFn_endsWith","filterFn_equals","filterFn_equalsString","filterFn_equalsStringSensitive","filterFn_greaterThan","filterFn_greaterThanOrEqualTo","filterFn_inDateRange","filterFn_inNumberRange","filterFn_includesString","filterFn_includesStringSensitive","filterFn_lessThan","filterFn_lessThanOrEqualTo","filterFn_notEmpty","filterFn_startsWith","filterFn_weakEquals","metaHelper","sortFn_alphanumeric","sortFn_alphanumericCaseSensitive","sortFn_basic","sortFn_datetime","sortFn_text","sortFn_textCaseSensitive","stockFeatures","tableFeatures","AggregationFnDef","LayoutColumnMeta","RangeValue","Date","WithResult","TFn","TFeatures","TData","TValue","TResult","layoutTableFeatures","columnMeta","filteredRowModel","sortedRowModel","paginatedRowModel","expandedRowModel","groupedRowModel","facetedRowModel","facetedUniqueValues","facetedMinMaxValues","filterFns","arrHas","arrIncludes","arrIncludesAll","arrIncludesSome","between","betweenInclusive","empty","endsWith","equals","equalsString","equalsStringSensitive","greaterThan","greaterThanOrEqualTo","inDateRange","inNumberRange","includesString","includesStringSensitive","lessThan","lessThanOrEqualTo","notEmpty","startsWith","weakEquals","sortFns","alphanumeric","alphanumericCaseSensitive","basic","datetime","text","textCaseSensitive","aggregationFns","sum","min","max","extent","mean","median","unique","uniqueCount","count","first","last","LayoutTableFeatures","tableContext","cellContext","headerContext","useTableContext","useCellContext","useHeaderContext","TablePagination","TablePaginationProps","FC","useTableContext","PaginationProps","Omit","pageSizeOptions","Array","DEFAULT_PAGE_SIZE_OPTIONS","Pagination","props","table","pageIndex","pageSize","state","pagination","flexShrink","minHeight","borderTop","borderColor","isArray","sx","getPageCount","getRowCount","_","page","setPageIndex","event","setPagination","Number","target","value","Theme","formatForDisplay","Cell","CellData","Column","RowData","Range","defaultRangeExtractor","LayoutTableFeatures","LayoutColumnMeta","layoutTableClasses","root","main","table","toolbar","toolbarLabel","toolbarTitle","toolbarSelectedCount","toolbarDivider","toolbarQuickFilter","columnsButton","columnsPanel","filtersButton","filterPanel","columnHeaders","columnHeaderRow","columnHeader","columnHeaderContent","columnHeaderTitleContainer","sortLabel","sortIndex","menuIcon","columnSeparator","body","row","cell","groupCell","expandButton","actionsCell","cellOffset","rowOffset","filler","skeletonRow","skeletonCell","overlay","footer","footerRow","footerCell","aggregationValue","pagination","const","classNames","names","Array","filter","Boolean","join","pinnedClass","column","AnyColumn","TData","TValue","part","pinned","getIsPinned","shortcutLabel","label","hotkey","columnLabel","meta","columnDef","header","id","hasColumnLabel","columnAlign","align","columnFlex","Object","hasOwn","atoms","columnSizing","get","flex","moveColumn","delta","current","columnOrder","order","length","getAllLeafColumns","map","from","indexOf","to","splice","setColumnOrder","pinnedSx","isHeader","position","zIndex","insetInlineStart","getStart","undefined","insetInlineEnd","getAfter","bgcolor","backgroundImage","theme","palette","action","hover","selected","getIsLastColumn","borderInlineEnd","borderInlineEndStyle","borderColor","getIsFirstColumn","borderInlineStart","borderInlineStartStyle","cellSelectionSx","getIsSelected","edges","getSelectionEdges","outline","top","primary","bottom","left","right","boxShadow","quoteTsv","text","test","replaceAll","toClipboardValue","value","String","Date","toISOString","JSON","stringify","toClipboardText","regions","rows","cells","lookaheadRange","range","direction","lookahead","behind","overscan","ahead","startIndex","endIndex","dayjs","formatValue","value","dateFormat","undefined","Date","format","toString","JSON","stringify","TypographyProps","Typography","FC","formatValue","useCellContext","AggregatedCell","prefix","options","Intl","NumberFormatOptions","dateFormat","t0","$","_c","$i","Symbol","for","props","t1","undefined","cell","T0","t2","t3","t4","t5","t6","t7","t8","bb0","value","getValue","t9","entry","toLocaleString","format","Array","isArray","map","join","_c"],"sources":["../src/hooks/useDialogs.tsx","../src/components/table/context.ts","../src/components/table/table/Pagination.tsx","../src/components/table/utils.ts","../src/components/table/formatValue.ts","../src/components/table/cells/formatters/AggregatedCell.tsx"],"sourcesContent":["import {\n  Button,\n  Dialog,\n  DialogActions,\n  DialogContent,\n  DialogTitle,\n  useEventCallback,\n} from \"@mui/material\";\nimport { useContext, useId } from \"react\";\nimport { useTranslation } from \"react-i18next\";\nimport { DialogsContext } from \"../contexts/DialogsContext\";\nimport type { ReactNode } from \"react\";\n\nexport interface OpenDialogOptions<TResult> {\n  onClose?: (result: TResult) => Promise<void>;\n}\n\nexport interface AlertOptions {\n  title?: ReactNode;\n}\n\nexport interface ConfirmOptions {\n  title?: ReactNode;\n  confirmText?: ReactNode;\n  cancelText?: ReactNode;\n}\n\nexport interface DialogProps<TPayload = undefined, TResult = void> {\n  payload: TPayload;\n  open: boolean;\n  onClose: (result: TResult) => Promise<void>;\n}\n\nexport type OpenAlertDialog = (message: ReactNode, options?: AlertOptions) => Promise<void>;\n\nexport type OpenConfirmDialog = (message: ReactNode, options?: ConfirmOptions) => Promise<boolean>;\n\nexport type DialogComponent<TPayload, TResult> = React.ComponentType<\n  DialogProps<TPayload, TResult>\n>;\n\nexport interface OpenDialog {\n  <TPayload extends undefined, TResult>(\n    Component: DialogComponent<TPayload, TResult>,\n    payload?: TPayload,\n    options?: OpenDialogOptions<TResult>,\n  ): Promise<TResult>;\n  <TPayload, TResult>(\n    Component: DialogComponent<TPayload, TResult>,\n    payload: TPayload,\n    options?: OpenDialogOptions<TResult>,\n  ): Promise<TResult>;\n}\n\nexport type CloseDialog = <TResult>(dialog: Promise<TResult>, result: TResult) => Promise<TResult>;\n\nexport interface AlertDialogPayload extends AlertOptions {\n  message: ReactNode;\n}\n\nexport type AlertDialogProps = DialogProps<AlertDialogPayload, void>;\n\nexport function AlertDialog({ open, payload, onClose }: Readonly<AlertDialogProps>) {\n  const { t } = useTranslation();\n  const messageId = useId();\n\n  return (\n    <Dialog\n      maxWidth=\"xs\"\n      fullWidth\n      open={open}\n      onClose={() => onClose()}\n      role=\"alertdialog\"\n      aria-describedby={messageId}\n    >\n      <DialogTitle>{payload.title ?? t(\"Layout.Dialog.Alert\")}</DialogTitle>\n      <DialogContent id={messageId}>{payload.message}</DialogContent>\n      <DialogActions>\n        <Button onClick={() => onClose()} autoFocus>\n          {t(\"Layout.Dialog.Confirm\")}\n        </Button>\n      </DialogActions>\n    </Dialog>\n  );\n}\n\nexport interface ConfirmDialogPayload extends ConfirmOptions {\n  message: ReactNode;\n}\n\nexport type ConfirmDialogProps = DialogProps<ConfirmDialogPayload, boolean>;\n\nexport function ConfirmDialog({ open, payload, onClose }: Readonly<ConfirmDialogProps>) {\n  const { t } = useTranslation();\n  const messageId = useId();\n\n  return (\n    <Dialog\n      maxWidth=\"xs\"\n      fullWidth\n      open={open}\n      onClose={() => onClose(false)}\n      role=\"alertdialog\"\n      aria-describedby={messageId}\n    >\n      <DialogTitle>{payload.title ?? t(\"Layout.Dialog.Confirm\")}</DialogTitle>\n      <DialogContent id={messageId}>{payload.message}</DialogContent>\n      <DialogActions>\n        <Button onClick={() => onClose(false)}>\n          {payload.cancelText ?? t(\"Layout.Dialog.Cancel\")}\n        </Button>\n        <Button onClick={() => onClose(true)} autoFocus>\n          {payload.confirmText ?? t(\"Layout.Dialog.Confirm\")}\n        </Button>\n      </DialogActions>\n    </Dialog>\n  );\n}\n\ninterface DialogHook {\n  alert: OpenAlertDialog;\n  confirm: OpenConfirmDialog;\n  open: OpenDialog;\n  close: CloseDialog;\n}\n\nexport function useDialogs(): DialogHook {\n  const { open, close } = useContext(DialogsContext);\n\n  const alert = useEventCallback<OpenAlertDialog>((message, { ...options } = {}) =>\n    open(AlertDialog, { ...options, message }),\n  );\n\n  const confirm = useEventCallback<OpenConfirmDialog>((message, { ...options } = {}) =>\n    open(ConfirmDialog, { ...options, message }),\n  );\n\n  return { alert, confirm, open, close };\n}\n","import {\n  aggregationFn_count,\n  aggregationFn_extent,\n  aggregationFn_first,\n  aggregationFn_last,\n  aggregationFn_max,\n  aggregationFn_mean,\n  aggregationFn_median,\n  aggregationFn_min,\n  aggregationFn_sum,\n  aggregationFn_unique,\n  aggregationFn_uniqueCount,\n  createExpandedRowModel,\n  createFacetedMinMaxValues,\n  createFacetedRowModel,\n  createFacetedUniqueValues,\n  createFilteredRowModel,\n  createGroupedRowModel,\n  createPaginatedRowModel,\n  createSortedRowModel,\n  createTableHookContexts,\n  filterFn_arrHas,\n  filterFn_arrIncludes,\n  filterFn_arrIncludesAll,\n  filterFn_arrIncludesSome,\n  filterFn_between,\n  filterFn_betweenInclusive,\n  filterFn_empty,\n  filterFn_endsWith,\n  filterFn_equals,\n  filterFn_equalsString,\n  filterFn_equalsStringSensitive,\n  filterFn_greaterThan,\n  filterFn_greaterThanOrEqualTo,\n  filterFn_inDateRange,\n  filterFn_inNumberRange,\n  filterFn_includesString,\n  filterFn_includesStringSensitive,\n  filterFn_lessThan,\n  filterFn_lessThanOrEqualTo,\n  filterFn_notEmpty,\n  filterFn_startsWith,\n  filterFn_weakEquals,\n  metaHelper,\n  sortFn_alphanumeric,\n  sortFn_alphanumericCaseSensitive,\n  sortFn_basic,\n  sortFn_datetime,\n  sortFn_text,\n  sortFn_textCaseSensitive,\n  stockFeatures,\n  tableFeatures,\n} from \"@tanstack/react-table\";\nimport type { AggregationFnDef } from \"@tanstack/react-table\";\nimport type { LayoutColumnMeta } from \"~/components/table/types\";\n\n// table-core types min/max/extent with its non-exported `RangeValue`, which breaks .d.ts emit.\ntype RangeValue = Date | number | undefined;\ntype WithResult<TFn, TResult> =\n  TFn extends AggregationFnDef<infer TFeatures, infer TData, infer TValue, unknown>\n    ? AggregationFnDef<TFeatures, TData, TValue, TResult>\n    : never;\n\nexport const layoutTableFeatures = tableFeatures({\n  ...stockFeatures,\n  columnMeta: metaHelper<LayoutColumnMeta>(),\n  filteredRowModel: createFilteredRowModel(),\n  sortedRowModel: createSortedRowModel(),\n  paginatedRowModel: createPaginatedRowModel(),\n  expandedRowModel: createExpandedRowModel(),\n  groupedRowModel: createGroupedRowModel(),\n  facetedRowModel: createFacetedRowModel(),\n  facetedUniqueValues: createFacetedUniqueValues(),\n  facetedMinMaxValues: createFacetedMinMaxValues(),\n  filterFns: {\n    arrHas: filterFn_arrHas,\n    arrIncludes: filterFn_arrIncludes,\n    arrIncludesAll: filterFn_arrIncludesAll,\n    arrIncludesSome: filterFn_arrIncludesSome,\n    between: filterFn_between,\n    betweenInclusive: filterFn_betweenInclusive,\n    empty: filterFn_empty,\n    endsWith: filterFn_endsWith,\n    equals: filterFn_equals,\n    equalsString: filterFn_equalsString,\n    equalsStringSensitive: filterFn_equalsStringSensitive,\n    greaterThan: filterFn_greaterThan,\n    greaterThanOrEqualTo: filterFn_greaterThanOrEqualTo,\n    inDateRange: filterFn_inDateRange,\n    inNumberRange: filterFn_inNumberRange,\n    includesString: filterFn_includesString,\n    includesStringSensitive: filterFn_includesStringSensitive,\n    lessThan: filterFn_lessThan,\n    lessThanOrEqualTo: filterFn_lessThanOrEqualTo,\n    notEmpty: filterFn_notEmpty,\n    startsWith: filterFn_startsWith,\n    weakEquals: filterFn_weakEquals,\n  },\n  sortFns: {\n    alphanumeric: sortFn_alphanumeric,\n    alphanumericCaseSensitive: sortFn_alphanumericCaseSensitive,\n    basic: sortFn_basic,\n    datetime: sortFn_datetime,\n    text: sortFn_text,\n    textCaseSensitive: sortFn_textCaseSensitive,\n  },\n  aggregationFns: {\n    sum: aggregationFn_sum,\n    min: aggregationFn_min as WithResult<typeof aggregationFn_min, RangeValue>,\n    max: aggregationFn_max as WithResult<typeof aggregationFn_max, RangeValue>,\n    extent: aggregationFn_extent as WithResult<\n      typeof aggregationFn_extent,\n      [RangeValue, RangeValue]\n    >,\n    mean: aggregationFn_mean,\n    median: aggregationFn_median,\n    unique: aggregationFn_unique,\n    uniqueCount: aggregationFn_uniqueCount,\n    count: aggregationFn_count,\n    first: aggregationFn_first,\n    last: aggregationFn_last,\n  },\n});\n\nexport type LayoutTableFeatures = typeof layoutTableFeatures;\n\nexport const {\n  tableContext,\n  cellContext,\n  headerContext,\n  useTableContext,\n  useCellContext,\n  useHeaderContext,\n} = createTableHookContexts<LayoutTableFeatures>();\n","import { TablePagination, type TablePaginationProps } from \"@mui/material\";\nimport type { FC } from \"react\";\nimport { useTableContext } from \"~/components/table/context\";\n\nexport type PaginationProps = Omit<\n  TablePaginationProps,\n  \"count\" | \"page\" | \"rowsPerPage\" | \"onPageChange\" | \"onRowsPerPageChange\" | \"rowsPerPageOptions\"\n> & { pageSizeOptions?: Array<number> };\n\n/** A pager is for large data sets, so it offers no \"All\". LayoutTable starts at the lowest. */\nexport const DEFAULT_PAGE_SIZE_OPTIONS = [25, 50, 100];\n\nexport const Pagination: FC<PaginationProps> = ({\n  pageSizeOptions = DEFAULT_PAGE_SIZE_OPTIONS,\n  ...props\n}) => {\n  // The counts below are table methods; compiled, they would be cached on the table reference,\n  // which does not change when only data or options (rowCount, pageCount) do.\n  \"use no memo\";\n  const table = useTableContext();\n  const { pageIndex, pageSize } = table.state.pagination;\n\n  return (\n    <TablePagination\n      component=\"div\"\n      showFirstButton\n      showLastButton\n      {...props}\n      sx={[\n        { flexShrink: 0, minHeight: 52, borderTop: 1, borderColor: \"divider\" },\n        ...(Array.isArray(props.sx) ? props.sx : [props.sx]),\n      ]}\n      rowsPerPageOptions={pageSizeOptions}\n      // pageCount -1 means the total is unknown (cursor paging): MUI shows \"of more than N\" and\n      // keeps Next enabled.\n      count={table.getPageCount() === -1 ? -1 : table.getRowCount()}\n      page={pageIndex}\n      rowsPerPage={pageSize}\n      onPageChange={(_, page) => table.setPageIndex(page)}\n      // One update: a controlled onPaginationChange may resolve two calls against the same state.\n      onRowsPerPageChange={(event) =>\n        table.setPagination({ pageIndex: 0, pageSize: Number(event.target.value) })\n      }\n    />\n  );\n};\n","import type { Theme } from \"@mui/material\";\nimport { formatForDisplay } from \"@tanstack/react-hotkeys\";\nimport type { Cell, CellData, Column, RowData } from \"@tanstack/react-table\";\nimport type { Range } from \"@tanstack/react-virtual\";\nimport { defaultRangeExtractor } from \"@tanstack/react-virtual\";\nimport type { LayoutTableFeatures } from \"~/components/table/context\";\nimport type { LayoutColumnMeta } from \"./types\";\n\n/** Stable class names on every table part, for `sx` selectors like `.MuiDataGrid-*`. */\nexport const layoutTableClasses = {\n  root: \"LayoutTable-root\",\n  main: \"LayoutTable-main\",\n  table: \"LayoutTable-table\",\n\n  toolbar: \"LayoutTable-toolbar\",\n  toolbarLabel: \"LayoutTable-toolbarLabel\",\n  toolbarTitle: \"LayoutTable-toolbarTitle\",\n  toolbarSelectedCount: \"LayoutTable-toolbarSelectedCount\",\n  toolbarDivider: \"LayoutTable-toolbarDivider\",\n  toolbarQuickFilter: \"LayoutTable-toolbarQuickFilter\",\n  columnsButton: \"LayoutTable-columnsButton\",\n  columnsPanel: \"LayoutTable-columnsPanel\",\n  filtersButton: \"LayoutTable-filtersButton\",\n  filterPanel: \"LayoutTable-filterPanel\",\n\n  columnHeaders: \"LayoutTable-columnHeaders\",\n  columnHeaderRow: \"LayoutTable-columnHeaderRow\",\n  columnHeader: \"LayoutTable-columnHeader\",\n  \"columnHeader--sortable\": \"LayoutTable-columnHeader--sortable\",\n  \"columnHeader--sorted\": \"LayoutTable-columnHeader--sorted\",\n  \"columnHeader--filtered\": \"LayoutTable-columnHeader--filtered\",\n  \"columnHeader--pinnedStart\": \"LayoutTable-columnHeader--pinnedStart\",\n  \"columnHeader--pinnedEnd\": \"LayoutTable-columnHeader--pinnedEnd\",\n  columnHeaderContent: \"LayoutTable-columnHeaderContent\",\n  columnHeaderTitleContainer: \"LayoutTable-columnHeaderTitleContainer\",\n  sortLabel: \"LayoutTable-sortLabel\",\n  sortIndex: \"LayoutTable-sortIndex\",\n  menuIcon: \"LayoutTable-menuIcon\",\n  columnSeparator: \"LayoutTable-columnSeparator\",\n  \"columnSeparator--resizable\": \"LayoutTable-columnSeparator--resizable\",\n  \"columnSeparator--resizing\": \"LayoutTable-columnSeparator--resizing\",\n\n  body: \"LayoutTable-body\",\n  row: \"LayoutTable-row\",\n  \"row--grouped\": \"LayoutTable-row--grouped\",\n  \"row--expanded\": \"LayoutTable-row--expanded\",\n  \"row--pinned\": \"LayoutTable-row--pinned\",\n  cell: \"LayoutTable-cell\",\n  \"cell--selected\": \"LayoutTable-cell--selected\",\n  \"cell--grouped\": \"LayoutTable-cell--grouped\",\n  \"cell--aggregated\": \"LayoutTable-cell--aggregated\",\n  \"cell--pinnedStart\": \"LayoutTable-cell--pinnedStart\",\n  \"cell--pinnedEnd\": \"LayoutTable-cell--pinnedEnd\",\n  groupCell: \"LayoutTable-groupCell\",\n  expandButton: \"LayoutTable-expandButton\",\n  actionsCell: \"LayoutTable-actionsCell\",\n  cellOffset: \"LayoutTable-cellOffset\",\n  rowOffset: \"LayoutTable-rowOffset\",\n  filler: \"LayoutTable-filler\",\n  skeletonRow: \"LayoutTable-skeletonRow\",\n  skeletonCell: \"LayoutTable-skeletonCell\",\n  overlay: \"LayoutTable-overlay\",\n\n  footer: \"LayoutTable-footer\",\n  footerRow: \"LayoutTable-footerRow\",\n  footerCell: \"LayoutTable-footerCell\",\n  aggregationValue: \"LayoutTable-aggregationValue\",\n  pagination: \"LayoutTable-pagination\",\n} as const;\n\nexport const classNames = (...names: Array<string | false | null | undefined>): string =>\n  names.filter(Boolean).join(\" \");\n\nexport const pinnedClass = <TData extends RowData, TValue extends CellData>(\n  column: AnyColumn<TData, TValue>,\n  part: \"columnHeader\" | \"cell\",\n): string | false => {\n  const pinned = column.getIsPinned();\n  return (\n    !!pinned && layoutTableClasses[`${part}--${pinned === \"start\" ? \"pinnedStart\" : \"pinnedEnd\"}`]\n  );\n};\n\nexport const shortcutLabel = (label: string, hotkey: string): string =>\n  `${label} (${formatForDisplay(hotkey)})`;\n\ntype AnyColumn<TData extends RowData, TValue extends CellData> = Column<\n  LayoutTableFeatures,\n  TData,\n  TValue\n>;\n\nexport const columnLabel = <TData extends RowData, TValue extends CellData>(\n  column: AnyColumn<TData, TValue>,\n): string => {\n  const meta = column.columnDef.meta as LayoutColumnMeta | undefined;\n  if (meta?.label) return meta.label;\n\n  return typeof column.columnDef.header === \"string\" ? column.columnDef.header : column.id;\n};\n\nexport const hasColumnLabel = <TData extends RowData, TValue extends CellData>(\n  column: AnyColumn<TData, TValue>,\n): boolean =>\n  Boolean((column.columnDef.meta as LayoutColumnMeta | undefined)?.label) ||\n  typeof column.columnDef.header === \"string\";\n\nexport const columnAlign = <TData extends RowData, TValue extends CellData>(\n  column: AnyColumn<TData, TValue>,\n): \"left\" | \"center\" | \"right\" =>\n  (column.columnDef.meta as LayoutColumnMeta | undefined)?.align ??\n  (hasColumnLabel(column) ? \"left\" : \"center\");\n\n/** The column's `meta.flex`, or 0 once the user has resized it to a fixed width. */\nexport const columnFlex = <TData extends RowData, TValue extends CellData>(\n  column: AnyColumn<TData, TValue>,\n): number =>\n  Object.hasOwn(column.table.atoms.columnSizing.get(), column.id)\n    ? 0\n    : ((column.columnDef.meta as LayoutColumnMeta | undefined)?.flex ?? 0);\n\nexport const moveColumn = <TData extends RowData, TValue extends CellData>(\n  column: AnyColumn<TData, TValue>,\n  delta: number,\n): void => {\n  const { table } = column;\n  const current = table.atoms.columnOrder.get();\n  const order = current.length ? [...current] : table.getAllLeafColumns().map(({ id }) => id);\n  const from = order.indexOf(column.id);\n  const to = from + delta;\n  if (from < 0 || to < 0 || to >= order.length) return;\n\n  order.splice(to, 0, ...order.splice(from, 1));\n  table.setColumnOrder(order);\n};\n\nexport const pinnedSx = <TData extends RowData, TValue extends CellData>(\n  column: AnyColumn<TData, TValue>,\n  isHeader = false,\n) => {\n  const pinned = column.getIsPinned();\n  if (!pinned) return {};\n\n  return {\n    position: \"sticky\",\n    zIndex: isHeader ? 4 : 2,\n    insetInlineStart: pinned === \"start\" ? column.getStart(\"start\") : undefined,\n    insetInlineEnd: pinned === \"end\" ? column.getAfter(\"end\") : undefined,\n    bgcolor: \"background.paper\",\n    ...(!isHeader && {\n      \".MuiTableRow-root:hover > &\": {\n        backgroundImage: (theme: Theme) =>\n          `linear-gradient(${theme.palette.action.hover}, ${theme.palette.action.hover})`,\n      },\n      \".MuiTableRow-root.Mui-selected > &\": {\n        backgroundImage: (theme: Theme) =>\n          `linear-gradient(${theme.palette.action.selected}, ${theme.palette.action.selected})`,\n      },\n    }),\n    ...(pinned === \"start\" &&\n      column.getIsLastColumn(\"start\") && {\n        borderInlineEnd: 1,\n        borderInlineEndStyle: \"solid\",\n        borderColor: \"divider\",\n      }),\n    ...(pinned === \"end\" &&\n      column.getIsFirstColumn(\"end\") && {\n        borderInlineStart: 1,\n        borderInlineStartStyle: \"solid\",\n        borderColor: \"divider\",\n      }),\n  };\n};\n\nexport const cellSelectionSx = <TData extends RowData, TValue extends CellData>(\n  cell: Cell<LayoutTableFeatures, TData, TValue>,\n) => {\n  if (!cell.getIsSelected()) return {};\n\n  const edges = cell.getSelectionEdges();\n  const outline = (theme: Theme) =>\n    [\n      edges.top && `inset 0 2px 0 0 ${theme.palette.primary.main}`,\n      edges.bottom && `inset 0 -2px 0 0 ${theme.palette.primary.main}`,\n      edges.left && `inset 2px 0 0 0 ${theme.palette.primary.main}`,\n      edges.right && `inset -2px 0 0 0 ${theme.palette.primary.main}`,\n    ]\n      .filter(Boolean)\n      .join(\", \") || \"none\";\n\n  return {\n    backgroundImage: (theme: Theme) =>\n      `linear-gradient(${theme.palette.action.selected}, ${theme.palette.action.selected})`,\n    boxShadow: outline,\n  };\n};\n\n/** Spreadsheet TSV quoting, so a cell holding a tab or a newline stays one cell. */\nconst quoteTsv = (text: string): string =>\n  /[\"\\t\\n\\r]/.test(text) ? `\"${text.replaceAll('\"', '\"\"')}\"` : text;\n\nconst toClipboardValue = (value: unknown): string => {\n  if (value == null) return \"\";\n  if (typeof value === \"string\") return quoteTsv(value);\n  if (typeof value === \"number\" || typeof value === \"boolean\" || typeof value === \"bigint\")\n    return quoteTsv(String(value));\n  if (value instanceof Date) return quoteTsv(value.toISOString());\n\n  // Everything else — objects, and the odd symbol or function — as JSON or blank.\n  return quoteTsv(JSON.stringify(value) ?? \"\");\n};\n\n/**\n * Serializes `table.getSelectedCellRangesData()` as TSV, which is what Excel,\n * Google Sheets and LibreOffice all paste as a grid. Disjoint selection regions\n * are separated by a blank line.\n */\nexport const toClipboardText = (regions: Array<Array<Array<unknown>>>): string =>\n  regions\n    .map((rows) => rows.map((cells) => cells.map(toClipboardValue).join(\"\\t\")).join(\"\\n\"))\n    .join(\"\\n\\n\");\n\nexport const lookaheadRange = (\n  range: Range,\n  direction: \"forward\" | \"backward\" | null,\n  lookahead: number,\n): Array<number> => {\n  const behind = direction ? 0 : range.overscan;\n  const ahead = direction ? lookahead : range.overscan;\n\n  return defaultRangeExtractor({\n    ...range,\n    startIndex: range.startIndex - (direction === \"backward\" ? ahead : behind),\n    endIndex: range.endIndex + (direction === \"backward\" ? behind : ahead),\n    overscan: 0,\n  });\n};\n","import dayjs from \"dayjs\";\n\nexport const formatValue = (value: unknown, dateFormat = \"L LT\"): string => {\n  if (value === null || value === undefined) return \"\";\n  if (value instanceof Date) return dayjs(value).format(dateFormat);\n  if (typeof value === \"string\") return value;\n  if (typeof value === \"number\" || typeof value === \"boolean\" || typeof value === \"bigint\") {\n    return value.toString();\n  }\n\n  return JSON.stringify(value) ?? \"\";\n};\n","import type { TypographyProps } from \"@mui/material\";\nimport { Typography } from \"@mui/material\";\nimport type { FC } from \"react\";\nimport { formatValue } from \"~/components/table/formatValue\";\nimport { useCellContext } from \"~/components/table/context\";\n\nexport const AggregatedCell: FC<\n  TypographyProps & {\n    prefix?: string;\n    options?: Intl.NumberFormatOptions;\n    dateFormat?: string;\n  }\n> = ({ prefix = \"\", options, dateFormat, ...props }) => {\n  const cell = useCellContext();\n  const value = cell.getValue();\n  if (value === null || value === undefined || value === \"\") return null;\n\n  const format = (entry: unknown) =>\n    typeof entry === \"number\"\n      ? entry.toLocaleString(undefined, options)\n      : formatValue(entry, dateFormat);\n\n  return (\n    <Typography variant=\"body2\" color=\"text.secondary\" noWrap {...props}>\n      {prefix}\n      {/* `extent` — the default aggregate for anything non-numeric — is a [min, max] pair. */}\n      {Array.isArray(value) ? value.map(format).join(\" – \") : format(value)}\n    </Typography>\n  );\n};\n"],"mappings":"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"}