{"version":3,"file":"data-table.types.cjs","sources":["../../../components/data-table/data-table.types.tsx"],"sourcesContent":["import type {\n  Column,\n  ColumnDef,\n  Table,\n  VisibilityState\n} from '@tanstack/table-core';\nimport type {\n  DataTableFilterOperatorTypes,\n  FilterOperatorTypes,\n  FilterSelectOption,\n  FilterTypes,\n  FilterValueType\n} from '~/types/filters';\nimport type { FilterChipCalendarProps } from '../filter-chip';\nimport type { BaseSelectProps } from '../select/select-root';\n\nexport type DataTableMode = 'client' | 'server';\n\nexport const SortOrders = {\n  ASC: 'asc',\n  DESC: 'desc'\n} as const;\n\nexport interface DataTableFilterValues {\n  value: unknown;\n  // Only one of these value fields should be present at a time\n  boolValue?: boolean;\n  stringValue?: string;\n  numberValue?: number;\n}\n// Internal filter with UI operators and metadata\nexport interface InternalFilter extends DataTableFilterValues {\n  _type?: FilterTypes;\n  _dataType?: FilterValueType;\n  name: string;\n  operator: FilterOperatorTypes;\n}\n\n// Data table filter for backend API (no internal fields)\nexport interface DataTableFilter extends DataTableFilterValues {\n  name: string;\n  operator: DataTableFilterOperatorTypes;\n}\n\ntype SortOrdersKeys = keyof typeof SortOrders;\nexport type SortOrdersValues = (typeof SortOrders)[SortOrdersKeys];\n\nexport interface DataTableSort {\n  name: string;\n  order: SortOrdersValues;\n}\n\n// Internal query with UI operators and metadata\nexport interface InternalQuery {\n  filters?: InternalFilter[];\n  sort?: DataTableSort[];\n  group_by?: string[];\n  offset?: number;\n  limit?: number;\n  search?: string;\n}\n\n// Data table query for backend API (clean, no internal fields)\nexport interface DataTableQuery extends Omit<InternalQuery, 'filters'> {\n  filters?: DataTableFilter[];\n}\n\nexport type DataTableColumn<TData, TValue> = Omit<\n  Column<TData, TValue>,\n  'columnDef'\n> & {\n  columnDef: DataTableColumnDef<TData, TValue>;\n};\n\nexport type DataTableColumnDef<TData, TValue> = ColumnDef<TData, TValue> & {\n  accessorKey: string;\n  header: string;\n  filterType?: FilterTypes;\n  dataType?: FilterValueType;\n  enableColumnFilter?: boolean;\n  enableSorting?: boolean;\n  enableHiding?: boolean;\n  defaultHidden?: boolean;\n  filterOptions?: FilterSelectOption[];\n  defaultFilterValue?: unknown;\n  filterProps?: {\n    select?: BaseSelectProps;\n    calendar?: FilterChipCalendarProps;\n  };\n  classNames?: {\n    cell?: string;\n    header?: string;\n  };\n  styles?: {\n    cell?: React.CSSProperties;\n    header?: React.CSSProperties;\n  };\n  enableGrouping?: boolean;\n  showGroupCount?: boolean;\n  groupCountMap?: Record<string, number>;\n  groupLabelsMap?: Record<string, string>;\n  // TODO: implement these\n  icon?: React.ReactNode;\n};\n\nexport interface DataTableProps<TData, TValue> {\n  columns: DataTableColumnDef<TData, TValue>[];\n  data: TData[];\n  query?: DataTableQuery; // Initial query (will be transformed to internal format)\n  mode?: DataTableMode;\n  isLoading?: boolean;\n  totalRowCount?: number;\n  loadingRowCount?: number;\n  onTableQueryChange?: (query: DataTableQuery) => void;\n  defaultSort?: DataTableSort;\n  onLoadMore?: () => Promise<void>;\n  onRowClick?: (row: TData) => void;\n  onColumnVisibilityChange?: (columnVisibility: VisibilityState) => void;\n  /** When true, group headers stick under the table header while scrolling. Default is false. */\n  stickyGroupHeader?: boolean;\n  /** Return a stable unique id for each row (used as React key). Use for sortable/filterable tables. */\n  getRowId?: (row: TData, index: number) => string;\n}\n\nexport type DataTableContentClassNames = {\n  root?: string;\n  table?: string;\n  header?: string;\n  body?: string;\n  row?: string;\n};\n\nexport type DataTableContentBaseProps = {\n  emptyState?: React.ReactNode;\n  zeroState?: React.ReactNode;\n  classNames?: DataTableContentClassNames;\n};\n\nexport type DataTableContentProps = DataTableContentBaseProps;\n\nexport type VirtualizedContentProps = DataTableContentBaseProps & {\n  /** Height of each row in pixels. */\n  rowHeight?: number;\n  /** Height of group header rows in pixels. Defaults to 40 (matches the non-virtualized section header height). */\n  groupHeaderHeight?: number;\n  /** Number of rows to render outside visible area. */\n  overscan?: number;\n  /** Distance in pixels from bottom to trigger load more. */\n  loadMoreOffset?: number;\n};\n\nexport type TableQueryUpdateFn = (query: InternalQuery) => InternalQuery;\n\nexport type TableContextType<TData, TValue> = {\n  table: Table<TData>;\n  columns: DataTableColumnDef<TData, TValue>[];\n  isLoading?: boolean;\n  loadMoreData: () => void;\n  mode: DataTableMode;\n  defaultSort?: DataTableSort;\n  tableQuery?: InternalQuery;\n  totalRowCount?: number;\n  loadingRowCount?: number;\n  onDisplaySettingsReset: () => void;\n  updateTableQuery: (fn: TableQueryUpdateFn) => void;\n  onRowClick?: (row: TData) => void;\n  shouldShowFilters?: boolean;\n  stickyGroupHeader?: boolean;\n};\n\nexport interface ColumnData {\n  label: string;\n  id: string;\n  isVisible?: boolean;\n}\n\ninterface SubRows<_T> {}\n\nexport interface GroupedData<T> extends SubRows<T> {\n  label: string;\n  group_key: string;\n  subRows: T[];\n  count?: number;\n  showGroupCount?: boolean;\n}\n\nexport const defaultGroupOption = {\n  id: '--',\n  label: 'No grouping'\n};\n"],"names":[],"mappings":";;AAkBa,MAAA,UAAU,GAAG;AACxB,IAAA,GAAG,EAAE,KAAK;AACV,IAAA,IAAI,EAAE,MAAM;EACH;AAqKE,MAAA,kBAAkB,GAAG;AAChC,IAAA,EAAE,EAAE,IAAI;AACR,IAAA,KAAK,EAAE,aAAa;;;;;;"}