ahs-cti 0.0.24 → 0.0.25

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../call-control-sdk/lib/pages/agentPerformanceReport/index.tsx","../node_modules/@mui/icons-material/Visibility.mjs","../node_modules/@tanstack/table-core/src/columnHelper.ts","../node_modules/@tanstack/table-core/src/utils.ts","../node_modules/@tanstack/table-core/src/core/cell.ts","../node_modules/@tanstack/table-core/src/core/column.ts","../node_modules/@tanstack/table-core/src/core/headers.ts","../node_modules/@tanstack/table-core/src/core/row.ts","../node_modules/@tanstack/table-core/src/features/ColumnFaceting.ts","../node_modules/@tanstack/table-core/src/filterFns.ts","../node_modules/@tanstack/table-core/src/features/ColumnFiltering.ts","../node_modules/@tanstack/table-core/src/aggregationFns.ts","../node_modules/@tanstack/table-core/src/features/ColumnGrouping.ts","../node_modules/@tanstack/table-core/src/features/ColumnOrdering.ts","../node_modules/@tanstack/table-core/src/features/ColumnPinning.ts","../node_modules/@tanstack/table-core/src/features/ColumnSizing.ts","../node_modules/@tanstack/table-core/src/features/ColumnVisibility.ts","../node_modules/@tanstack/table-core/src/features/GlobalFaceting.ts","../node_modules/@tanstack/table-core/src/features/GlobalFiltering.ts","../node_modules/@tanstack/table-core/src/features/RowExpanding.ts","../node_modules/@tanstack/table-core/src/features/RowPagination.ts","../node_modules/@tanstack/table-core/src/features/RowPinning.ts","../node_modules/@tanstack/table-core/src/features/RowSelection.ts","../node_modules/@tanstack/table-core/src/sortingFns.ts","../node_modules/@tanstack/table-core/src/features/RowSorting.ts","../node_modules/@tanstack/table-core/src/core/table.ts","../node_modules/@tanstack/table-core/src/utils/getCoreRowModel.ts","../node_modules/@tanstack/table-core/src/utils/getExpandedRowModel.ts","../node_modules/@tanstack/table-core/src/utils/getFacetedMinMaxValues.ts","../node_modules/@tanstack/table-core/src/utils/filterRowsUtils.ts","../node_modules/@tanstack/table-core/src/utils/getFacetedRowModel.ts","../node_modules/@tanstack/table-core/src/utils/getFacetedUniqueValues.ts","../node_modules/@tanstack/table-core/src/utils/getFilteredRowModel.ts","../node_modules/@tanstack/table-core/src/utils/getGroupedRowModel.ts","../node_modules/@tanstack/table-core/src/utils/getPaginationRowModel.ts","../node_modules/@tanstack/table-core/src/utils/getSortedRowModel.ts","../node_modules/@tanstack/react-table/src/index.tsx","../node_modules/@tanstack/match-sorter-utils/src/remove-accents.ts","../node_modules/@tanstack/match-sorter-utils/src/index.ts","../node_modules/@mui/icons-material/ArrowDownward.mjs","../node_modules/@mui/icons-material/ArrowRight.mjs","../node_modules/@mui/icons-material/Cancel.mjs","../node_modules/@mui/icons-material/ClearAll.mjs","../node_modules/@mui/icons-material/ContentCopy.mjs","../node_modules/@mui/icons-material/DensityLarge.mjs","../node_modules/@mui/icons-material/DensityMedium.mjs","../node_modules/@mui/icons-material/DensitySmall.mjs","../node_modules/@mui/icons-material/DragHandle.mjs","../node_modules/@mui/icons-material/DynamicFeed.mjs","../node_modules/@mui/icons-material/ExpandMore.mjs","../node_modules/@mui/icons-material/FilterAlt.mjs","../node_modules/@mui/icons-material/FilterList.mjs","../node_modules/@mui/icons-material/FilterListOff.mjs","../node_modules/@mui/icons-material/FirstPage.mjs","../node_modules/@mui/icons-material/Fullscreen.mjs","../node_modules/@mui/icons-material/FullscreenExit.mjs","../node_modules/@mui/icons-material/KeyboardDoubleArrowDown.mjs","../node_modules/@mui/icons-material/LastPage.mjs","../node_modules/@mui/icons-material/MoreHoriz.mjs","../node_modules/@mui/icons-material/PushPin.mjs","../node_modules/@mui/icons-material/RestartAlt.mjs","../node_modules/@mui/icons-material/Save.mjs","../node_modules/@mui/icons-material/SearchOff.mjs","../node_modules/@mui/icons-material/Sort.mjs","../node_modules/@mui/icons-material/SyncAlt.mjs","../node_modules/@mui/icons-material/ViewColumn.mjs","../node_modules/@mui/icons-material/VisibilityOff.mjs","../node_modules/@tanstack/virtual-core/src/utils.ts","../node_modules/@tanstack/virtual-core/src/index.ts","../node_modules/@tanstack/react-virtual/src/index.tsx","../node_modules/highlight-words/dist/highlight-words.mjs","../node_modules/@mui/x-date-pickers/TimePicker/TimePicker.mjs","../node_modules/@mui/x-date-pickers/DesktopTimePicker/DesktopTimePicker.mjs","../node_modules/@mui/x-date-pickers/TimeField/TimeField.mjs","../node_modules/@mui/x-date-pickers/TimeField/useTimeField.mjs","../node_modules/@mui/x-date-pickers/TimePicker/shared.mjs","../node_modules/@mui/x-date-pickers/TimePicker/TimePickerToolbar.mjs","../node_modules/@mui/x-date-pickers/TimePicker/timePickerToolbarClasses.mjs","../node_modules/@mui/x-date-pickers/MobileTimePicker/MobileTimePicker.mjs","../node_modules/material-react-table/src/utils/column.utils.ts","../node_modules/material-react-table/src/utils/tanstack.helpers.ts","../node_modules/material-react-table/src/fns/sortingFns.ts","../node_modules/material-react-table/src/utils/utils.ts","../node_modules/material-react-table/src/utils/row.utils.ts","../node_modules/material-react-table/src/utils/cell.utils.ts","../node_modules/material-react-table/src/utils/displayColumn.utils.ts","../node_modules/material-react-table/src/fns/aggregationFns.ts","../node_modules/material-react-table/src/fns/filterFns.ts","../node_modules/.pnpm/@rollup+plugin-typescript@11.1.6_rollup@2.79.2_tslib@2.8.1_typescript@5.7.2/node_modules/tslib/tslib.es6.js","../node_modules/material-react-table/src/components/buttons/MRT_EditActionButtons.tsx","../node_modules/material-react-table/src/utils/style.utils.ts","../node_modules/material-react-table/src/components/menus/MRT_ActionMenuItem.tsx","../node_modules/material-react-table/src/components/menus/MRT_RowActionMenu.tsx","../node_modules/material-react-table/src/components/buttons/MRT_ToggleRowActionMenuButton.tsx","../node_modules/material-react-table/src/hooks/display-columns/getMRT_RowActionsColumnDef.tsx","../node_modules/material-react-table/src/components/buttons/MRT_GrabHandleButton.tsx","../node_modules/material-react-table/src/components/body/MRT_TableBodyRowGrabHandle.tsx","../node_modules/material-react-table/src/hooks/display-columns/getMRT_RowDragColumnDef.tsx","../node_modules/material-react-table/src/components/buttons/MRT_ExpandAllButton.tsx","../node_modules/material-react-table/src/components/buttons/MRT_ExpandButton.tsx","../node_modules/material-react-table/src/hooks/display-columns/getMRT_RowExpandColumnDef.tsx","../node_modules/material-react-table/src/hooks/display-columns/getMRT_RowNumbersColumnDef.tsx","../node_modules/material-react-table/src/components/buttons/MRT_RowPinButton.tsx","../node_modules/material-react-table/src/components/body/MRT_TableBodyRowPinButton.tsx","../node_modules/material-react-table/src/hooks/display-columns/getMRT_RowPinningColumnDef.tsx","../node_modules/material-react-table/src/components/inputs/MRT_SelectCheckbox.tsx","../node_modules/material-react-table/src/hooks/display-columns/getMRT_RowSelectColumnDef.tsx","../node_modules/material-react-table/src/icons.ts","../node_modules/material-react-table/src/locales/en.ts","../node_modules/material-react-table/src/hooks/useMRT_TableOptions.ts","../node_modules/material-react-table/src/hooks/display-columns/getMRT_RowSpacerColumnDef.tsx","../node_modules/material-react-table/src/hooks/useMRT_Effects.ts","../node_modules/material-react-table/src/hooks/useMRT_TableInstance.ts","../node_modules/material-react-table/src/hooks/useMaterialReactTable.ts","../node_modules/material-react-table/src/utils/virtualization.utils.ts","../node_modules/material-react-table/src/hooks/useMRT_ColumnVirtualizer.ts","../node_modules/material-react-table/src/hooks/useMRT_RowVirtualizer.ts","../node_modules/material-react-table/src/hooks/useMRT_Rows.ts","../node_modules/material-react-table/src/components/body/MRT_TableBodyCellValue.tsx","../node_modules/material-react-table/src/components/buttons/MRT_CopyButton.tsx","../node_modules/material-react-table/src/components/inputs/MRT_EditCellTextField.tsx","../node_modules/material-react-table/src/components/body/MRT_TableBodyCell.tsx","../node_modules/material-react-table/src/components/body/MRT_TableDetailPanel.tsx","../node_modules/material-react-table/src/components/body/MRT_TableBodyRow.tsx","../node_modules/material-react-table/src/components/body/MRT_TableBody.tsx","../node_modules/material-react-table/src/components/footer/MRT_TableFooterCell.tsx","../node_modules/material-react-table/src/components/footer/MRT_TableFooterRow.tsx","../node_modules/material-react-table/src/components/footer/MRT_TableFooter.tsx","../node_modules/material-react-table/src/components/menus/MRT_FilterOptionMenu.tsx","../node_modules/material-react-table/src/components/menus/MRT_ColumnActionMenu.tsx","../node_modules/material-react-table/src/components/head/MRT_TableHeadCellColumnActionsButton.tsx","../node_modules/material-react-table/src/components/inputs/MRT_FilterCheckbox.tsx","../node_modules/material-react-table/src/components/inputs/MRT_FilterTextField.tsx","../node_modules/material-react-table/src/components/inputs/MRT_FilterRangeFields.tsx","../node_modules/material-react-table/src/components/inputs/MRT_FilterRangeSlider.tsx","../node_modules/material-react-table/src/components/head/MRT_TableHeadCellFilterContainer.tsx","../node_modules/material-react-table/src/components/head/MRT_TableHeadCellFilterLabel.tsx","../node_modules/material-react-table/src/components/head/MRT_TableHeadCellGrabHandle.tsx","../node_modules/material-react-table/src/components/head/MRT_TableHeadCellResizeHandle.tsx","../node_modules/material-react-table/src/components/head/MRT_TableHeadCellSortLabel.tsx","../node_modules/material-react-table/src/components/head/MRT_TableHeadCell.tsx","../node_modules/material-react-table/src/components/head/MRT_TableHeadRow.tsx","../node_modules/material-react-table/src/components/toolbar/MRT_ToolbarAlertBanner.tsx","../node_modules/material-react-table/src/components/head/MRT_TableHead.tsx","../node_modules/material-react-table/src/components/table/MRT_Table.tsx","../node_modules/material-react-table/src/components/table/MRT_TableLoadingOverlay.tsx","../node_modules/material-react-table/src/components/menus/MRT_CellActionMenu.tsx","../node_modules/material-react-table/src/components/modals/MRT_EditRowModal.tsx","../node_modules/material-react-table/src/components/table/MRT_TableContainer.tsx","../node_modules/material-react-table/src/components/toolbar/MRT_LinearProgressBar.tsx","../node_modules/material-react-table/src/components/toolbar/MRT_TablePagination.tsx","../node_modules/material-react-table/src/components/toolbar/MRT_ToolbarDropZone.tsx","../node_modules/material-react-table/src/components/toolbar/MRT_BottomToolbar.tsx","../node_modules/material-react-table/src/components/buttons/MRT_ColumnPinningButtons.tsx","../node_modules/material-react-table/src/components/menus/MRT_ShowHideColumnsMenuItems.tsx","../node_modules/material-react-table/src/components/menus/MRT_ShowHideColumnsMenu.tsx","../node_modules/material-react-table/src/components/buttons/MRT_ShowHideColumnsButton.tsx","../node_modules/material-react-table/src/components/buttons/MRT_ToggleDensePaddingButton.tsx","../node_modules/material-react-table/src/components/buttons/MRT_ToggleFiltersButton.tsx","../node_modules/material-react-table/src/components/buttons/MRT_ToggleFullScreenButton.tsx","../node_modules/material-react-table/src/components/buttons/MRT_ToggleGlobalFilterButton.tsx","../node_modules/material-react-table/src/components/toolbar/MRT_ToolbarInternalButtons.tsx","../node_modules/material-react-table/src/components/inputs/MRT_GlobalFilterTextField.tsx","../node_modules/material-react-table/src/components/toolbar/MRT_TopToolbar.tsx","../node_modules/material-react-table/src/components/table/MRT_TablePaper.tsx","../node_modules/material-react-table/src/components/MaterialReactTable.tsx","../call-control-sdk/lib/pages/common/components/AppTable.tsx","../call-control-sdk/lib/pages/agentPerformanceReport/BreakSessionsDialog.tsx"],"sourcesContent":["import React, { useState, useEffect, useMemo, useCallback } from \"react\";\r\nimport { Box, Paper, Typography, CircularProgress, Alert, Tooltip, IconButton, Select, MenuItem, FormControl } from \"@mui/material\";\r\nimport type { MRT_ColumnDef } from \"material-react-table\";\r\nimport RefreshIcon from \"@mui/icons-material/Refresh\";\r\nimport FileDownloadIcon from \"@mui/icons-material/FileDownload\";\r\nimport VisibilityIcon from \"@mui/icons-material/Visibility\";\r\nimport { LocalizationProvider } from \"@mui/x-date-pickers/LocalizationProvider\";\r\nimport { AdapterDayjs } from \"@mui/x-date-pickers/AdapterDayjs\";\r\nimport dayjs, { Dayjs } from \"dayjs\";\r\n\r\nimport PageHeader from \"../common/components/PageHeader\";\r\nimport AppButton from \"../common/components/AppButton\";\r\nimport AppTable from \"../common/components/AppTable\";\r\nimport { headCellSx, bodyCellSx } from \"../common/utils/tableStyles\";\r\nimport ReportFilterBar, { type QuickRange } from \"../common/components/ReportFilterBar\";\r\nimport axiosInstance from \"../../services/axios\";\r\nimport { END_POINT } from \"../../services/endPoint\";\r\nimport { SDKProvider } from \"../../components/SDKProvider\";\r\nimport { SDKPermissionGuard } from \"../../components/SDKPermissionGuard\";\r\nimport { SDK_PERMISSIONS } from \"../../permissions/sdk-constants\";\r\nimport AgentDetailReport from \"../agentDetailReport\";\r\nimport BreakSessionsDialog from \"./BreakSessionsDialog\";\r\n\r\n/* ═══════════════════════ TYPES + DATA (agents analytics dashboard) ═══════════════════════ */\r\ntype ReportData = Record<string, any>;\r\n\r\n/** Per-agent time breakdown used by the four heat panels. */\r\ninterface AgentWiseTime {\r\n agentName: string;\r\n idleTime: string;\r\n talkTime: string;\r\n wrapTime: string;\r\n handleTime: string;\r\n}\r\n\r\n/** Response of POST /agent-dashboard/agent-data — KPI strip + heat panels. */\r\ninterface AgentDashboardData {\r\n agentsLoggedIn: number;\r\n callsHandled: number;\r\n loggedInDuration: string;\r\n breakTime: string;\r\n firstLoginTime: string;\r\n outboundTime: string;\r\n agentsTime: {\r\n totalIdleTime: string;\r\n totalTalkTime: string;\r\n totalWrapTime: string;\r\n totalHandleTime: string;\r\n agentWiseIdleTime: AgentWiseTime[];\r\n };\r\n}\r\n\r\n/** Inbound/outbound call leg inside an agent-performance row. */\r\ninterface AgentPerfCallLeg {\r\n totalCalls: number;\r\n answeredCalls: number;\r\n answeredPercentage: number | null;\r\n abandonedCalls: number;\r\n abandonedPercentage: number | null;\r\n}\r\n\r\n/** One row of POST /agent-dashboard/agent-performance (the Agent Wise Performance table). */\r\ninterface AgentPerformanceRow {\r\n agentId: string;\r\n agentName: string;\r\n totalCallsHandled: number;\r\n answeredCalls: number;\r\n abandonedCalls: number;\r\n loggedInDuration: string;\r\n callHandleTime: string;\r\n breakCount: number;\r\n breakTime: string;\r\n meetingTime: string;\r\n trainingTime: string;\r\n idleTime: string;\r\n totalCalls: number;\r\n inbound: AgentPerfCallLeg;\r\n outbound: AgentPerfCallLeg;\r\n holdTime: string;\r\n firstLoginTime: string | null;\r\n logoutTime: string | null;\r\n avgCallHandleTime: string;\r\n productionPct?: number;\r\n occupancyPct?: number;\r\n breakPct?: number;\r\n idlePct?: number;\r\n meetingTrainingPct?: number;\r\n callHandlePct?: number;\r\n answerRatePct?: number;\r\n reportDate?: string;\r\n loginTime?: string;\r\n}\r\n\r\ninterface AgentDashboardParams {\r\n inputType?: string;\r\n startDate: string; // YYYY-MM-DD\r\n endDate: string; // YYYY-MM-DD\r\n}\r\n\r\ninterface AgentPerformancePage {\r\n data: AgentPerformanceRow[];\r\n total: number;\r\n page: number;\r\n pageSize: number;\r\n totalPages: number;\r\n}\r\n\r\nconst EMPTY_AGENT_DASHBOARD: AgentDashboardData = {\r\n agentsLoggedIn: 0, callsHandled: 0, loggedInDuration: \"00:00:00\",\r\n breakTime: \"00:00:00\", firstLoginTime: \"00:00:00\", outboundTime: \"00:00:00\",\r\n agentsTime: { totalIdleTime: \"00:00:00\", totalTalkTime: \"00:00:00\", totalWrapTime: \"00:00:00\", totalHandleTime: \"00:00:00\", agentWiseIdleTime: [] },\r\n};\r\n\r\n/** POST /agent-dashboard/agent-data → KPI strip + per-agent idle/talk/wrap/handle (heat panels). */\r\nasync function getAgentDashboardData(params: AgentDashboardParams): Promise<AgentDashboardData> {\r\n const res = await axiosInstance.post(END_POINT.AGENT_DASHBOARD_DATA, {\r\n inputType: params.inputType ?? \"TOTAL\",\r\n startDate: params.startDate,\r\n endDate: params.endDate,\r\n });\r\n const body = res.data;\r\n const row = Array.isArray(body) ? body[0] : body;\r\n return row ? { ...EMPTY_AGENT_DASHBOARD, ...row } : EMPTY_AGENT_DASHBOARD;\r\n}\r\n\r\n/** POST /agent-dashboard/agent-performance (page 1-based + pageSize) → server-side paginated envelope. */\r\nasync function getAgentPerformancePaged(\r\n params: AgentDashboardParams & { page: number; pageSize: number },\r\n): Promise<AgentPerformancePage> {\r\n const res = await axiosInstance.post(END_POINT.AGENT_DASHBOARD_PERFORMANCE, {\r\n inputType: params.inputType ?? \"TOTAL\",\r\n startDate: params.startDate,\r\n endDate: params.endDate,\r\n page: params.page,\r\n pageSize: params.pageSize,\r\n });\r\n const b = res.data ?? {};\r\n const data: AgentPerformanceRow[] = Array.isArray(b) ? b : (b.data ?? []);\r\n return {\r\n data,\r\n total: typeof b.total === \"number\" ? b.total : data.length,\r\n page: typeof b.page === \"number\" ? b.page : params.page,\r\n pageSize: typeof b.pageSize === \"number\" ? b.pageSize : params.pageSize,\r\n totalPages: typeof b.totalPages === \"number\" ? b.totalPages : 1,\r\n };\r\n}\r\n\r\n/**\r\n * POST /agent-dashboard/export/excel → downloads the Agents dashboard as an .xlsx file\r\n * (summary cards block + agent-wise performance table; ranked heatmap is not exported).\r\n * Omit reportMode → Summary (one aggregated row per agent for the range); pass\r\n * reportMode \"cumulative\" → one row per agent per day across the range.\r\n */\r\nasync function exportAgentDashboardToExcel(params: AgentDashboardParams & { reportMode?: string }): Promise<void> {\r\n const body: Record<string, unknown> = {\r\n inputType: params.inputType ?? \"TOTAL\",\r\n startDate: params.startDate,\r\n endDate: params.endDate,\r\n };\r\n if (params.reportMode) body.reportMode = params.reportMode;\r\n const res = await axiosInstance.post(END_POINT.AGENT_DASHBOARD_EXPORT_EXCEL, body, { responseType: \"blob\" });\r\n const url = URL.createObjectURL(new Blob([res.data]));\r\n const a = document.createElement(\"a\");\r\n const suffix = params.reportMode ?? \"summary\";\r\n a.href = url;\r\n a.download = `agents-report-${suffix}-${params.startDate}_${params.endDate}.xlsx`;\r\n a.click();\r\n URL.revokeObjectURL(url);\r\n}\r\n\r\n/* ═══════════════════════ COLORS (brand primary = teal #1A5F6C) ═══════════════════════ */\r\nconst C = {\r\n navy: \"#14505b\", blue: \"#1A5F6C\", green: \"#0a9a62\", amber: \"#c47c00\",\r\n red: \"#cc2a2a\", purple: \"#6b3fbf\", teal: \"#0b7a8f\",\r\n bg: \"transparent\", surface: \"#fff\", s2: \"#f7f9fc\", s3: \"#eef2f7\",\r\n b1: \"rgba(20,50,100,.07)\", b2: \"rgba(20,50,100,.13)\",\r\n t1: \"#0d1e35\", t2: \"#364f6e\", t3: \"#7a93b5\",\r\n blt: \"#e3f1f3\", rlt: \"#fdeae3\",\r\n};\r\n// One font stack for the whole tab — matches the agent-detail report so the\r\n// KPI strip, heat panels, table and dialogs all read as one page.\r\nconst FONT = \"'Inter', 'Segoe UI', 'Roboto', -apple-system, BlinkMacSystemFont, sans-serif\";\r\n// Per-KPI accent colours (border + value) for the stat cards.\r\nconst KPI_ACCENTS = [\"#1A5F6C\", \"#00897B\", \"#5E35B1\", \"#F57C00\", \"#00ACC1\", \"#E53935\"];\r\n// Numeric styling — same page font, just bold + tabular figures for alignment.\r\nconst mono = { fontWeight: 700, fontVariantNumeric: \"tabular-nums\" as const };\r\n// Deterministic avatar palette — a name always maps to the same colour.\r\nconst AVATAR_COLORS = [\"#1A5F6C\", \"#00897B\", \"#5E35B1\", \"#F57C00\", \"#00ACC1\", \"#E53935\", \"#0a9a62\", \"#6b3fbf\"];\r\n// Initials = first letter of first name + first letter of last name.\r\nfunction getInitials(name: string): string {\r\n const parts = (name || \"\").trim().split(/\\s+/).filter(Boolean);\r\n if (parts.length === 0) return \"\";\r\n if (parts.length === 1) return parts[0][0].toUpperCase();\r\n return (parts[0][0] + parts[parts.length - 1][0]).toUpperCase();\r\n}\r\nfunction getAvatarColor(name: string): string {\r\n let h = 0;\r\n for (let i = 0; i < (name || \"\").length; i++) h = name.charCodeAt(i) + ((h << 5) - h);\r\n return AVATAR_COLORS[Math.abs(h) % AVATAR_COLORS.length];\r\n}\r\n\r\n/* ═══════════════════════ HELPERS ═══════════════════════ */\r\nfunction parseDur(d?: string | null): number {\r\n if (!d || d === \"00:00:00\") return 0;\r\n const p = d.split(\":\").map(Number);\r\n if (p.length === 3) return p[0] * 3600 + p[1] * 60 + p[2];\r\n if (p.length === 2) return p[0] * 60 + p[1];\r\n return 0;\r\n}\r\nfunction fmtDur(s: number): string {\r\n if (!s || s <= 0) return \"00:00:00\";\r\n const h = Math.floor(s / 3600), m = Math.floor((s % 3600) / 60), sc = Math.floor(s % 60);\r\n return [h, m, sc].map((x) => String(x).padStart(2, \"0\")).join(\":\");\r\n}\r\nfunction fmtDateTime(v?: string | null): string {\r\n if (!v) return \"\";\r\n const d = dayjs(String(v).replace(\" \", \"T\"));\r\n return d.isValid() ? d.format(\"DD-MM-YYYY HH:mm:ss\") : String(v);\r\n}\r\n// Epoch (ms) for chronological sorting of date/time columns; 0 when empty/invalid.\r\nfunction toEpoch(v?: string | null): number {\r\n if (!v) return 0;\r\n const d = dayjs(String(v).replace(\" \", \"T\"));\r\n return d.isValid() ? d.valueOf() : 0;\r\n}\r\n/**\r\n * Threshold colour for a performance percentage (0–100).\r\n * Normal (high is good — Production, Idle, Call Handle):\r\n * < 25% → red · 25–50% → orange · 50–75% → blue · ≥ 75% → green\r\n * Inverted (high is bad — Break, Meeting + Training) flips the scale:\r\n * < 25% → green · 25–50% → blue · 50–75% → orange · ≥ 75% → red\r\n */\r\nfunction pctColor(pct: number, invert = false): string {\r\n const colors = invert\r\n ? [\"#0a9a62\", \"#1565c8\", \"#F57C00\", \"#cc2a2a\"] // green → red (low is good)\r\n : [\"#cc2a2a\", \"#F57C00\", \"#1565c8\", \"#0a9a62\"]; // red → green (high is good)\r\n if (pct < 25) return colors[0];\r\n if (pct < 50) return colors[1];\r\n if (pct < 75) return colors[2];\r\n return colors[3];\r\n}\r\n/* ═══════════════════════ KPI CELL ═══════════════════════ */\r\nfunction Kpi({ label, value, sub, accent }: { label: string; value: string | number; sub?: string; accent: string }) {\r\n return (\r\n <Box sx={{\r\n background: C.surface, border: `1px solid #dce3ef`, borderRadius: \"10px\",\r\n borderLeft: `4px solid ${accent}`, p: \"14px 16px\",\r\n boxShadow: \"0 1px 4px rgba(0,0,0,.08), 0 2px 12px rgba(0,0,0,.05)\",\r\n display: \"flex\", flexDirection: \"column\", gap: 0.5,\r\n }}>\r\n <Typography sx={{ fontSize: 11.5, fontWeight: 600, color: C.t2, textTransform: \"uppercase\", letterSpacing: 0.4 }}>{label}</Typography>\r\n <Typography sx={{ fontSize: 28, fontWeight: 800, color: accent, lineHeight: 1, letterSpacing: \"-0.5px\", fontVariantNumeric: \"tabular-nums\" }}>{value}</Typography>\r\n {sub && <Typography sx={{ fontSize: 11.5, color: C.t3 }}>{sub}</Typography>}\r\n </Box>\r\n );\r\n}\r\n\r\n/* ═══════════════════════ HEAT PANEL (Top/Bottom) ═══════════════════════ */\r\nconst HEAT_TONES = {\r\n blue: { headBg: \"#eef5f6\", headTx: \"#14505b\", pillBg: \"#e3f1f3\", pillTx: \"#14505b\", rank: \"#6ba3ac\" },\r\n red: { headBg: \"#fdeeee\", headTx: \"#b3352f\", pillBg: \"#fbe3e3\", pillTx: \"#c0392b\", rank: \"#e0a0a0\" },\r\n};\r\nfunction HeatColumn({ title, rows, variant }: { title: string; rows: { name: string; secs: number }[]; variant: \"blue\" | \"red\" }) {\r\n const tone = HEAT_TONES[variant];\r\n return (\r\n <Box sx={{ flex: 1, minWidth: 0 }}>\r\n <Typography sx={{ fontSize: 10.5, fontWeight: 700, letterSpacing: 0.4, textTransform: \"uppercase\", color: tone.headTx, background: tone.headBg, textAlign: \"center\", py: 0.7, borderBottom: `1px solid ${C.b1}` }}>{title}</Typography>\r\n <Box sx={{ maxHeight: 176, overflowY: \"auto\", \"&::-webkit-scrollbar\": { width: 5 }, \"&::-webkit-scrollbar-thumb\": { background: C.b2, borderRadius: 4 } }}>\r\n {rows.map((r, i) => (\r\n <Box key={i} sx={{\r\n display: \"grid\", gridTemplateColumns: \"18px 1fr auto\", alignItems: \"center\", gap: 0.6,\r\n px: 1, py: 0.45, borderBottom: `1px solid ${C.b1}`, \"&:last-child\": { borderBottom: \"none\" },\r\n transition: \"background .12s\", \"&:hover\": { background: C.s2 },\r\n }}>\r\n <Typography sx={{ ...mono, fontSize: 10, fontWeight: 700, color: tone.rank, textAlign: \"right\" }}>{i + 1}</Typography>\r\n <Tooltip title={r.name} arrow placement=\"top\">\r\n <Typography noWrap sx={{ fontSize: 11.5, fontWeight: 600, color: C.t1, cursor: \"default\" }}>\r\n {r.name.length > 5 ? `${r.name.slice(0, 5)}…` : r.name}\r\n </Typography>\r\n </Tooltip>\r\n <Box sx={{ background: tone.pillBg, color: tone.pillTx, borderRadius: \"5px\", textAlign: \"center\", px: 0.9, py: 0.3, minWidth: 62, ...mono, fontSize: 10.5 }}>\r\n {fmtDur(r.secs)}\r\n </Box>\r\n </Box>\r\n ))}\r\n {rows.length === 0 && <Typography sx={{ fontSize: 11.5, color: C.t3, textAlign: \"center\", py: 3 }}>No data</Typography>}\r\n </Box>\r\n </Box>\r\n );\r\n}\r\nfunction HeatPanel({ title, total, accent, agents, pick }: {\r\n title: string; total: string; accent: string; agents: AgentWiseTime[]; pick: (a: AgentWiseTime) => string;\r\n}) {\r\n const vals = agents.map((a) => ({ name: a.agentName, secs: parseDur(pick(a)) }));\r\n const asc = [...vals].sort((a, b) => a.secs - b.secs);\r\n const desc = [...asc].reverse();\r\n return (\r\n <Paper elevation={0} sx={{ border: `1px solid #dce3ef`, borderLeft: `4px solid ${accent}`, borderRadius: \"10px\", overflow: \"hidden\", boxShadow: \"0 1px 4px rgba(0,0,0,.08), 0 2px 12px rgba(0,0,0,.05)\" }}>\r\n <Box sx={{ background: C.s2, borderBottom: `1px solid ${C.b1}`, px: 1.5, py: 1, display: \"flex\", alignItems: \"center\", justifyContent: \"space-between\" }}>\r\n <Box sx={{ display: \"flex\", alignItems: \"center\", gap: 0.8 }}>\r\n <Box sx={{ width: 8, height: 8, borderRadius: \"50%\", background: accent }} />\r\n <Typography sx={{ fontSize: 12, fontWeight: 700, color: C.t1, letterSpacing: 0.3, textTransform: \"uppercase\" }}>{title}</Typography>\r\n </Box>\r\n <Typography sx={{ ...mono, fontSize: 14, fontWeight: 800, color: accent }}>{total}</Typography>\r\n </Box>\r\n <Box sx={{ display: \"flex\", \"& > *:first-of-type\": { borderRight: `1px solid ${C.b1}` } }}>\r\n <HeatColumn title=\"Top to Bottom\" rows={desc} variant=\"blue\" />\r\n <HeatColumn title=\"Bottom to Top\" rows={asc} variant=\"red\" />\r\n </Box>\r\n </Paper>\r\n );\r\n}\r\n\r\n/* ═══════════════════════ TABLE BAR CELL ═══════════════════════\r\n Stacked layout: a top line with [count?] · % · time, and the coloured bar\r\n sitting directly beneath them. The bar uses the column's own accent, fills\r\n 0–100%, and renders nothing at zero — so empty rows read as blank, not red. */\r\nfunction BarCell({ value, pct, accent, count, onCountClick }: {\r\n value: string; pct: number; accent: string; count?: number; onCountClick?: () => void;\r\n}) {\r\n const width = Math.max(0, Math.min(100, pct));\r\n return (\r\n <Box sx={{ display: \"flex\", flexDirection: \"column\", gap: 0.5, minWidth: 130, py: 0.3 }}>\r\n <Box sx={{ display: \"flex\", alignItems: \"center\", gap: 0.8 }}>\r\n {count != null && (\r\n <Box\r\n component=\"span\"\r\n onClick={onCountClick ? (e) => { e.stopPropagation(); onCountClick(); } : undefined}\r\n title={onCountClick ? \"View break sessions\" : undefined}\r\n sx={{\r\n flexShrink: 0, display: \"inline-flex\", alignItems: \"center\", justifyContent: \"center\",\r\n minWidth: 20, height: 18, px: 0.5, borderRadius: \"9px\", fontSize: 10,\r\n fontVariantNumeric: \"tabular-nums\", transition: \"background .12s\",\r\n ...(onCountClick\r\n ? { cursor: \"pointer\", background: C.navy, color: \"#fff\", \"&:hover\": { background: C.blue } }\r\n : { background: C.s3, color: C.t3 }),\r\n }}\r\n >\r\n {count}\r\n </Box>\r\n )}\r\n {/* A percentage over 100% is flagged with a red tint — it signals a value\r\n that exceeds its reference period and is worth a second look. */}\r\n <Typography sx={{\r\n fontSize: 11, fontVariantNumeric: \"tabular-nums\", whiteSpace: \"nowrap\",\r\n ...(pct > 100\r\n ? { color: C.red, background: C.rlt, borderRadius: \"4px\", px: 0.5 }\r\n : { color: C.t2 }),\r\n }}>{pct.toFixed(1)}%</Typography>\r\n <Typography sx={{ fontSize: 10.5, color: C.t3, fontVariantNumeric: \"tabular-nums\", whiteSpace: \"nowrap\" }}>{value}</Typography>\r\n </Box>\r\n <Box sx={{ width: \"100%\", height: 8, background: C.s3, borderRadius: \"4px\", overflow: \"hidden\" }}>\r\n {width > 0 && <Box sx={{ height: \"100%\", width: `${width}%`, background: accent, borderRadius: \"4px\" }} />}\r\n </Box>\r\n </Box>\r\n );\r\n}\r\nconst InOut = ({ i, o }: { i: number; o: number }) => (\r\n <Typography sx={{ fontSize: 11.5, color: C.t2, whiteSpace: \"nowrap\" }}>\r\n <span style={{ color: C.t3 }}>In:</span> {i} <span style={{ color: C.t3 }}>Out:</span> {o}\r\n </Typography>\r\n);\r\n\r\n/* ═══════════════════════ MAIN COMPONENT ═══════════════════════ */\r\nfunction AgentPerformanceReportContent() {\r\n const [startDate, setStartDate] = useState<Dayjs | null>(dayjs().startOf(\"day\"));\r\n const [endDate, setEndDate] = useState<Dayjs | null>(dayjs());\r\n const [quickRange, setQuickRange] = useState<string>(\"today\");\r\n\r\n const [dashboard, setDashboard] = useState<AgentDashboardData | null>(null);\r\n const [rows, setRows] = useState<AgentPerformanceRow[]>([]);\r\n const [total, setTotal] = useState(0);\r\n const [pagination, setPagination] = useState({ pageIndex: 0, pageSize: 10 });\r\n const [loadingTop, setLoadingTop] = useState(false);\r\n const [loadingTable, setLoadingTable] = useState(false);\r\n const [error, setError] = useState(\"\");\r\n // Eye action → drill into the per-agent detail view (rendered in place).\r\n const [selectedAgent, setSelectedAgent] = useState<AgentPerformanceRow | null>(null);\r\n // Break-count click → break-sessions dialog for that agent.\r\n const [breaksAgent, setBreaksAgent] = useState<AgentPerformanceRow | null>(null);\r\n // Export mode: \"summary\" (no reportMode) or \"cumulative\" (day-wise, reportMode: \"cumulative\").\r\n const [exportMode, setExportMode] = useState<\"summary\" | \"cumulative\">(\"summary\");\r\n const [exporting, setExporting] = useState(false);\r\n const loading = loadingTop || loadingTable;\r\n\r\n const onErr = (err: any) => setError(err?.response?.data?.detail || err?.message || \"Failed to load agents report\");\r\n\r\n // KPI strip + heat panels — always the full agent set (dates only).\r\n const fetchDashboard = useCallback((showSpinner = true) => {\r\n if (!startDate || !endDate) return;\r\n const params = { inputType: \"TOTAL\", startDate: startDate.format(\"YYYY-MM-DD\"), endDate: endDate.format(\"YYYY-MM-DD\") };\r\n if (showSpinner) setLoadingTop(true);\r\n setError(\"\");\r\n getAgentDashboardData(params).then(setDashboard).catch(onErr).finally(() => setLoadingTop(false));\r\n }, [startDate, endDate]);\r\n\r\n // Agent Wise Performance table — server-side paginated.\r\n const fetchTable = useCallback((showSpinner = true) => {\r\n if (!startDate || !endDate) return;\r\n const params = {\r\n inputType: \"TOTAL\", startDate: startDate.format(\"YYYY-MM-DD\"), endDate: endDate.format(\"YYYY-MM-DD\"),\r\n page: pagination.pageIndex + 1, pageSize: pagination.pageSize,\r\n };\r\n if (showSpinner) setLoadingTable(true);\r\n setError(\"\");\r\n getAgentPerformancePaged(params)\r\n .then((res) => { setRows(res.data); setTotal(res.total); })\r\n .catch(onErr)\r\n .finally(() => setLoadingTable(false));\r\n }, [startDate, endDate, pagination.pageIndex, pagination.pageSize]);\r\n\r\n useEffect(() => { fetchDashboard(); }, [fetchDashboard]);\r\n useEffect(() => { fetchTable(); }, [fetchTable]);\r\n\r\n const handleRefresh = () => {\r\n if (quickRange === \"today\" || quickRange === \"week\" || quickRange === \"month\") {\r\n const nowD = dayjs();\r\n let sd = nowD.startOf(\"day\");\r\n if (quickRange === \"week\") sd = nowD.startOf(\"week\").startOf(\"day\");\r\n else if (quickRange === \"month\") sd = nowD.startOf(\"month\").startOf(\"day\");\r\n setStartDate(sd); setEndDate(nowD);\r\n }\r\n fetchDashboard(); fetchTable();\r\n };\r\n\r\n const handleExport = () => {\r\n if (!startDate || !endDate) return;\r\n setExporting(true);\r\n setError(\"\");\r\n exportAgentDashboardToExcel({\r\n inputType: \"TOTAL\",\r\n startDate: startDate.format(\"YYYY-MM-DD\"),\r\n endDate: endDate.format(\"YYYY-MM-DD\"),\r\n reportMode: exportMode, // \"summary\" | \"cumulative\" — sent explicitly so the two differ\r\n }).catch(onErr).finally(() => setExporting(false));\r\n };\r\n\r\n const heatAgents = dashboard?.agentsTime.agentWiseIdleTime ?? [];\r\n\r\n // Production Time = logged-in − break; the numeric value shown alongside the % bar.\r\n const prodSecs = (r: AgentPerformanceRow) => Math.max(0, parseDur(r.loggedInDuration) - parseDur(r.breakTime));\r\n const mtSecs = (r: AgentPerformanceRow) => parseDur(r.meetingTime) + parseDur(r.trainingTime);\r\n\r\n const columns = useMemo<MRT_ColumnDef<AgentPerformanceRow>[]>(() => [\r\n { id: \"agent\", header: \"Agent\", size: 220, accessorFn: (r) => r.agentName,\r\n Cell: ({ row }) => {\r\n const name = row.original.agentName || \"\";\r\n return (\r\n <Box sx={{ display: \"flex\", alignItems: \"center\", gap: 1, minWidth: 0 }}>\r\n <Box sx={{\r\n width: 30, height: 30, borderRadius: \"50%\", flexShrink: 0,\r\n display: \"flex\", alignItems: \"center\", justifyContent: \"center\",\r\n background: getAvatarColor(name), color: \"#fff\", fontSize: 11, letterSpacing: 0.3,\r\n }}>\r\n {getInitials(name)}\r\n </Box>\r\n <Box sx={{ minWidth: 0 }}>\r\n <Typography noWrap sx={{ fontSize: 11.5, color: C.t1, lineHeight: 1.3 }}>{name}</Typography>\r\n <Typography noWrap sx={{ fontSize: 10.5, color: C.t3, fontVariantNumeric: \"tabular-nums\", lineHeight: 1.3 }}>{row.original.agentId}</Typography>\r\n </Box>\r\n </Box>\r\n );\r\n } },\r\n { id: \"firstLogin\", header: \"First Login\", size: 160, accessorFn: (r) => toEpoch(r.firstLoginTime),\r\n Cell: ({ row }) => <span style={{ fontSize: 11.5, color: C.t2, fontVariantNumeric: \"tabular-nums\" }}>{fmtDateTime(row.original.firstLoginTime)}</span> },\r\n { id: \"lastLogout\", header: \"Last Logout\", size: 160, accessorFn: (r) => toEpoch(r.logoutTime),\r\n Cell: ({ row }) => <span style={{ fontSize: 11.5, color: C.t2, fontVariantNumeric: \"tabular-nums\" }}>{fmtDateTime(row.original.logoutTime)}</span> },\r\n { id: \"total\", header: \"Total Calls\", size: 120, accessorFn: (r) => r.inbound.totalCalls + r.outbound.totalCalls,\r\n Cell: ({ row }) => <InOut i={row.original.inbound.totalCalls} o={row.original.outbound.totalCalls} /> },\r\n { id: \"answered\", header: \"Answered\", size: 120, accessorFn: (r) => r.inbound.answeredCalls + r.outbound.answeredCalls,\r\n Cell: ({ row }) => <InOut i={row.original.inbound.answeredCalls} o={row.original.outbound.answeredCalls} /> },\r\n { id: \"abandoned\", header: \"Abandoned\", size: 120, accessorFn: (r) => r.inbound.abandonedCalls + r.outbound.abandonedCalls,\r\n Cell: ({ row }) => <InOut i={row.original.inbound.abandonedCalls} o={row.original.outbound.abandonedCalls} /> },\r\n { id: \"avgCallHandleTime\", header: \"AHT\", size: 100, accessorFn: (r) => parseDur(r.avgCallHandleTime),\r\n Cell: ({ row }) => <span style={{ fontWeight: 400, fontSize: 11.5, color: C.purple, fontVariantNumeric: \"tabular-nums\" }}>{row.original.avgCallHandleTime}</span> },\r\n { id: \"loggedInDuration\", header: \"Logged In Duration\", size: 130, accessorFn: (r) => parseDur(r.loggedInDuration),\r\n Cell: ({ row }) => <span style={{ fontWeight: 400, fontSize: 11.5, color: C.teal, fontVariantNumeric: \"tabular-nums\" }}>{row.original.loggedInDuration}</span> },\r\n { id: \"production\", header: \"Production Time\", size: 200, accessorFn: (r) => prodSecs(r),\r\n Cell: ({ row }) => { const p = row.original.productionPct ?? 0; return <BarCell value={fmtDur(prodSecs(row.original))} pct={p} accent={pctColor(p)} />; } },\r\n { id: \"callHandle\", header: \"Call Handle Time\", size: 200, accessorFn: (r) => parseDur(r.callHandleTime),\r\n Cell: ({ row }) => { const p = row.original.callHandlePct ?? 0; return <BarCell value={row.original.callHandleTime} pct={p} accent={pctColor(p)} />; } },\r\n { id: \"break\", header: \"Break Time\", size: 200, accessorFn: (r) => parseDur(r.breakTime),\r\n Cell: ({ row }) => { const p = row.original.breakPct ?? 0; return <BarCell value={row.original.breakTime} pct={p} accent={pctColor(p, true)} count={row.original.breakCount} onCountClick={row.original.breakCount > 0 ? () => setBreaksAgent(row.original) : undefined} />; } },\r\n { id: \"idle\", header: \"Idle Time\", size: 200, accessorFn: (r) => parseDur(r.idleTime),\r\n Cell: ({ row }) => { const p = row.original.idlePct ?? 0; return <BarCell value={row.original.idleTime} pct={p} accent={pctColor(p)} />; } },\r\n { id: \"meetingTraining\", header: \"Meeting + Training\", size: 200, accessorFn: (r) => mtSecs(r),\r\n Cell: ({ row }) => { const p = row.original.meetingTrainingPct ?? 0; return <BarCell value={fmtDur(mtSecs(row.original))} pct={p} accent={pctColor(p, true)} />; } },\r\n { id: \"actions\", header: \"Detail\", size: 80, enableColumnFilter: false, enableSorting: false,\r\n Cell: ({ row }) => (\r\n <Tooltip title=\"View agent details\" arrow>\r\n <IconButton size=\"small\" onClick={() => setSelectedAgent(row.original)} sx={{ color: C.blue }}>\r\n <VisibilityIcon sx={{ fontSize: 16 }} />\r\n </IconButton>\r\n </Tooltip>\r\n ) },\r\n ], []);\r\n\r\n // Drill-down: reuse the existing per-agent detail page. It only needs the\r\n // agentId + name; every other metric it fetches itself by agent id.\r\n if (selectedAgent) {\r\n const agentRow: ReportData = { agentDetails: { agentId: selectedAgent.agentId, fullName: selectedAgent.agentName } };\r\n return (\r\n <AgentDetailReport\r\n agentRow={agentRow}\r\n onBack={() => setSelectedAgent(null)}\r\n initialStartDate={startDate}\r\n initialEndDate={endDate}\r\n initialQuickRange={quickRange}\r\n />\r\n );\r\n }\r\n\r\n return (\r\n <LocalizationProvider dateAdapter={AdapterDayjs}>\r\n <Box sx={{\r\n background: C.bg, minHeight: \"100vh\", fontFamily: FONT,\r\n \"& .MuiTypography-root, & th, & td, & .MuiButton-root, & .MuiChip-root, & .MuiMenuItem-root\": { fontFamily: FONT },\r\n }}>\r\n <PageHeader title=\"Agents Performance Report\" />\r\n\r\n <ReportFilterBar\r\n startDate={startDate} endDate={endDate}\r\n onStartChange={setStartDate}\r\n onEndChange={setEndDate}\r\n showTime={false}\r\n quickRange={quickRange} onQuickRangeChange={(r: QuickRange) => setQuickRange(r)}\r\n extra={\r\n <Box sx={{ display: \"flex\", alignItems: \"center\", gap: 1 }}>\r\n <AppButton startIcon={<RefreshIcon sx={{ fontSize: \"0.9rem !important\" }} />} disabled={loading} onClick={handleRefresh} sx={{ height: 32 }}>\r\n Refresh\r\n </AppButton>\r\n <SDKPermissionGuard permissions={[SDK_PERMISSIONS.REPORTS_AGENT_PERFORMANCE_EXPORT, SDK_PERMISSIONS.REPORTS_AGENT_PERFORMANCE_MANAGE]}>\r\n <FormControl size=\"small\">\r\n <Select\r\n value={exportMode}\r\n onChange={(e) => setExportMode(e.target.value as \"summary\" | \"cumulative\")}\r\n sx={{ height: 32, fontSize: 13, minWidth: 130, bgcolor: \"#fff\", borderRadius: \"30px\", \"& .MuiOutlinedInput-notchedOutline\": { borderRadius: \"30px\" } }}\r\n >\r\n <MenuItem value=\"summary\" sx={{ fontSize: 13 }}>Summary</MenuItem>\r\n <MenuItem value=\"cumulative\" sx={{ fontSize: 13 }}>Day-wise</MenuItem>\r\n </Select>\r\n </FormControl>\r\n <AppButton\r\n startIcon={<FileDownloadIcon sx={{ fontSize: \"0.95rem !important\" }} />}\r\n disabled={exporting || loading}\r\n onClick={handleExport}\r\n sx={{ height: 32 }}\r\n >\r\n Export Excel\r\n </AppButton>\r\n </SDKPermissionGuard>\r\n </Box>\r\n }\r\n />\r\n\r\n {error && <Alert severity=\"error\" sx={{ mx: 2.5, mt: 1.5 }} onClose={() => setError(\"\")}>{error}</Alert>}\r\n\r\n <Box sx={{ py: 1.5, px: 2, position: \"relative\" }}>\r\n {loadingTop && (\r\n <Box sx={{ position: \"absolute\", inset: 0, background: \"rgba(240,244,248,0.7)\", display: \"flex\", alignItems: \"flex-start\", justifyContent: \"center\", pt: 10, zIndex: 10 }}>\r\n <CircularProgress />\r\n </Box>\r\n )}\r\n\r\n {/* ═══ KPI STRIP ═══ */}\r\n <Box sx={{ display: \"grid\", gridTemplateColumns: { xs: \"repeat(2,1fr)\", md: \"repeat(3,1fr)\", lg: \"repeat(6,1fr)\" }, gap: 1.25, mb: 1.75 }}>\r\n <Kpi label=\"Agents Logged In\" value={dashboard?.agentsLoggedIn ?? 0} sub=\"Active right now\" accent={KPI_ACCENTS[0]} />\r\n <Kpi label=\"Calls Handled\" value={(dashboard?.callsHandled ?? 0).toLocaleString()} sub=\"Today total\" accent={KPI_ACCENTS[1]} />\r\n <Kpi label=\"Logged In Duration\" value={dashboard?.loggedInDuration ?? \"00:00:00\"} sub=\"Cumulative\" accent={KPI_ACCENTS[2]} />\r\n <Kpi label=\"Break Time\" value={dashboard?.breakTime ?? \"00:00:00\"} sub=\"Cumulative\" accent={KPI_ACCENTS[3]} />\r\n <Kpi label=\"First Login Time\" value={dashboard?.firstLoginTime ?? \"00:00:00\"} sub=\"Earliest today\" accent={KPI_ACCENTS[4]} />\r\n <Kpi label=\"Outbound Time\" value={dashboard?.outboundTime ?? \"00:00:00\"} sub=\"Active outbound\" accent={KPI_ACCENTS[5]} />\r\n </Box>\r\n\r\n {/* ═══ 4 HEAT PANELS (always one row) ═══ */}\r\n <Box sx={{ display: \"grid\", gridTemplateColumns: \"repeat(4, minmax(0, 1fr))\", gap: 1.5, mb: 1.5 }}>\r\n <HeatPanel title=\"IDLE Time\" accent=\"#F57C00\" total={dashboard?.agentsTime.totalIdleTime ?? \"00:00:00\"} agents={heatAgents} pick={(a) => a.idleTime} />\r\n <HeatPanel title=\"Talk Time\" accent=\"#00897B\" total={dashboard?.agentsTime.totalTalkTime ?? \"00:00:00\"} agents={heatAgents} pick={(a) => a.talkTime} />\r\n <HeatPanel title=\"Wrap Time\" accent=\"#5E35B1\" total={dashboard?.agentsTime.totalWrapTime ?? \"00:00:00\"} agents={heatAgents} pick={(a) => a.wrapTime} />\r\n <HeatPanel title=\"Call Handle Time\" accent=\"#1A5F6C\" total={dashboard?.agentsTime.totalHandleTime ?? \"00:00:00\"} agents={heatAgents} pick={(a) => a.handleTime} />\r\n </Box>\r\n\r\n {/* ═══ AGENT WISE PERFORMANCE TABLE ═══ */}\r\n <Box>\r\n <Typography sx={{ fontSize: 13, fontWeight: 800, color: C.t1, mb: 1 }}>Agent Wise Performance</Typography>\r\n <AppTable\r\n columns={columns}\r\n data={rows}\r\n layoutMode=\"grid\"\r\n enableTopToolbar={false}\r\n enableColumnActions={false}\r\n enableColumnFilters={false}\r\n enableColumnDragging={false}\r\n enableHiding={false}\r\n enableDensityToggle={false}\r\n enableFullScreenToggle={false}\r\n enableSorting\r\n enableSortingRemoval={false}\r\n enableMultiSort={false}\r\n manualPagination\r\n rowCount={total}\r\n onPaginationChange={setPagination}\r\n state={{ pagination, isLoading: loadingTable }}\r\n muiTableHeadCellProps={{\r\n sx: {\r\n ...headCellSx, fontFamily: FONT, px: \"12px\", py: \"8px\",\r\n display: \"flex\", alignItems: \"center\", textAlign: \"left\",\r\n \"& .Mui-TableHeadCell-Content\": { m: 0, p: 0, width: \"100%\", justifyContent: \"flex-start\" },\r\n \"& .Mui-TableHeadCell-Content-Wrapper\": { m: 0, p: 0 },\r\n \"& .Mui-TableHeadCell-Content-Labels\": { m: 0, p: 0 },\r\n },\r\n }}\r\n muiTableBodyCellProps={{\r\n sx: {\r\n ...bodyCellSx, fontFamily: FONT, px: \"12px\", py: \"8px\",\r\n display: \"flex\", alignItems: \"center\", justifyContent: \"flex-start\", textAlign: \"left\",\r\n },\r\n }}\r\n muiTableBodyRowProps={({ row }) => ({\r\n onClick: () => setSelectedAgent(row.original),\r\n sx: { cursor: \"pointer\", \"&:hover\": { backgroundColor: C.s2 } },\r\n })}\r\n />\r\n </Box>\r\n </Box>\r\n </Box>\r\n\r\n <BreakSessionsDialog\r\n open={!!breaksAgent}\r\n onClose={() => setBreaksAgent(null)}\r\n agentId={breaksAgent?.agentId ?? \"\"}\r\n agentName={breaksAgent?.agentName ?? \"\"}\r\n startDate={startDate}\r\n endDate={endDate}\r\n />\r\n </LocalizationProvider>\r\n );\r\n}\r\n\r\nconst AgentPerformanceReport: React.FC = () => (\r\n <SDKProvider>\r\n <AgentPerformanceReportContent />\r\n </SDKProvider>\r\n);\r\n\r\nexport default AgentPerformanceReport;\r\n","\"use client\";\n\nimport createSvgIcon from \"./utils/createSvgIcon.mjs\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nexport default createSvgIcon(/*#__PURE__*/_jsx(\"path\", {\n d: \"M12 4.5C7 4.5 2.73 7.61 1 12c1.73 4.39 6 7.5 11 7.5s9.27-3.11 11-7.5c-1.73-4.39-6-7.5-11-7.5M12 17c-2.76 0-5-2.24-5-5s2.24-5 5-5 5 2.24 5 5-2.24 5-5 5m0-8c-1.66 0-3 1.34-3 3s1.34 3 3 3 3-1.34 3-3-1.34-3-3-3\"\n}), 'Visibility');","import {\n AccessorFn,\n AccessorFnColumnDef,\n AccessorKeyColumnDef,\n DisplayColumnDef,\n GroupColumnDef,\n IdentifiedColumnDef,\n RowData,\n} from './types'\nimport { DeepKeys, DeepValue } from './utils'\n\n// type Person = {\n// firstName: string\n// lastName: string\n// age: number\n// visits: number\n// status: string\n// progress: number\n// createdAt: Date\n// nested: {\n// foo: [\n// {\n// bar: 'bar'\n// }\n// ]\n// bar: { subBar: boolean }[]\n// baz: {\n// foo: 'foo'\n// bar: {\n// baz: 'baz'\n// }\n// }\n// }\n// }\n\n// const test: DeepKeys<Person> = 'nested.foo.0.bar'\n// const test2: DeepKeys<Person> = 'nested.bar'\n\n// const helper = createColumnHelper<Person>()\n\n// helper.accessor('nested.foo', {\n// cell: info => info.getValue(),\n// })\n\n// helper.accessor('nested.foo.0.bar', {\n// cell: info => info.getValue(),\n// })\n\n// helper.accessor('nested.bar', {\n// cell: info => info.getValue(),\n// })\n\nexport type ColumnHelper<TData extends RowData> = {\n accessor: <\n TAccessor extends AccessorFn<TData> | DeepKeys<TData>,\n TValue extends TAccessor extends AccessorFn<TData, infer TReturn>\n ? TReturn\n : TAccessor extends DeepKeys<TData>\n ? DeepValue<TData, TAccessor>\n : never,\n >(\n accessor: TAccessor,\n column: TAccessor extends AccessorFn<TData>\n ? DisplayColumnDef<TData, TValue>\n : IdentifiedColumnDef<TData, TValue>\n ) => TAccessor extends AccessorFn<TData>\n ? AccessorFnColumnDef<TData, TValue>\n : AccessorKeyColumnDef<TData, TValue>\n display: (column: DisplayColumnDef<TData>) => DisplayColumnDef<TData, unknown>\n group: (column: GroupColumnDef<TData>) => GroupColumnDef<TData, unknown>\n}\n\nexport function createColumnHelper<\n TData extends RowData,\n>(): ColumnHelper<TData> {\n return {\n accessor: (accessor, column) => {\n return typeof accessor === 'function'\n ? ({\n ...column,\n accessorFn: accessor,\n } as any)\n : {\n ...column,\n accessorKey: accessor,\n }\n },\n display: column => column,\n group: column => column,\n }\n}\n","import { TableOptionsResolved, TableState, Updater } from './types'\n\nexport type PartialKeys<T, K extends keyof T> = Omit<T, K> & Partial<Pick<T, K>>\nexport type RequiredKeys<T, K extends keyof T> = Omit<T, K> &\n Required<Pick<T, K>>\nexport type Overwrite<T, U extends { [TKey in keyof T]?: any }> = Omit<\n T,\n keyof U\n> &\n U\n\nexport type UnionToIntersection<T> = (\n T extends any ? (x: T) => any : never\n) extends (x: infer R) => any\n ? R\n : never\n\nexport type IsAny<T, Y, N> = 1 extends 0 & T ? Y : N\nexport type IsKnown<T, Y, N> = unknown extends T ? N : Y\n\ntype ComputeRange<\n N extends number,\n Result extends Array<unknown> = [],\n> = Result['length'] extends N\n ? Result\n : ComputeRange<N, [...Result, Result['length']]>\ntype Index40 = ComputeRange<40>[number]\n\n// Is this type a tuple?\ntype IsTuple<T> = T extends readonly any[] & { length: infer Length }\n ? Length extends Index40\n ? T\n : never\n : never\n\n// If this type is a tuple, what indices are allowed?\ntype AllowedIndexes<\n Tuple extends ReadonlyArray<any>,\n Keys extends number = never,\n> = Tuple extends readonly []\n ? Keys\n : Tuple extends readonly [infer _, ...infer Tail]\n ? AllowedIndexes<Tail, Keys | Tail['length']>\n : Keys\n\nexport type DeepKeys<T, TDepth extends any[] = []> = TDepth['length'] extends 5\n ? never\n : unknown extends T\n ? string\n : T extends readonly any[] & IsTuple<T>\n ? AllowedIndexes<T> | DeepKeysPrefix<T, AllowedIndexes<T>, TDepth>\n : T extends any[]\n ? DeepKeys<T[number], [...TDepth, any]>\n : T extends Date\n ? never\n : T extends object\n ? (keyof T & string) | DeepKeysPrefix<T, keyof T, TDepth>\n : never\n\ntype DeepKeysPrefix<\n T,\n TPrefix,\n TDepth extends any[],\n> = TPrefix extends keyof T & (number | string)\n ? `${TPrefix}.${DeepKeys<T[TPrefix], [...TDepth, any]> & string}`\n : never\n\nexport type DeepValue<T, TProp> =\n T extends Record<string | number, any>\n ? TProp extends `${infer TBranch}.${infer TDeepProp}`\n ? DeepValue<T[TBranch], TDeepProp>\n : T[TProp & string]\n : never\n\nexport type NoInfer<T> = [T][T extends any ? 0 : never]\n\nexport type Getter<TValue> = <TTValue = TValue>() => NoInfer<TTValue>\n\n///\n\nexport function functionalUpdate<T>(updater: Updater<T>, input: T): T {\n return typeof updater === 'function'\n ? (updater as (input: T) => T)(input)\n : updater\n}\n\nexport function noop() {\n //\n}\n\nexport function makeStateUpdater<K extends keyof TableState>(\n key: K,\n instance: unknown\n) {\n return (updater: Updater<TableState[K]>) => {\n ;(instance as any).setState(<TTableState>(old: TTableState) => {\n return {\n ...old,\n [key]: functionalUpdate(updater, (old as any)[key]),\n }\n })\n }\n}\n\ntype AnyFunction = (...args: any) => any\n\nexport function isFunction<T extends AnyFunction>(d: any): d is T {\n return d instanceof Function\n}\n\nexport function isNumberArray(d: any): d is number[] {\n return Array.isArray(d) && d.every(val => typeof val === 'number')\n}\n\nexport function flattenBy<TNode>(\n arr: TNode[],\n getChildren: (item: TNode) => TNode[]\n) {\n const flat: TNode[] = []\n\n const recurse = (subArr: TNode[]) => {\n subArr.forEach(item => {\n flat.push(item)\n const children = getChildren(item)\n if (children?.length) {\n recurse(children)\n }\n })\n }\n\n recurse(arr)\n\n return flat\n}\n\nexport function memo<TDeps extends readonly any[], TDepArgs, TResult>(\n getDeps: (depArgs?: TDepArgs) => [...TDeps],\n fn: (...args: NoInfer<[...TDeps]>) => TResult,\n opts: {\n key: any\n debug?: () => any\n onChange?: (result: TResult) => void\n }\n): (depArgs?: TDepArgs) => TResult {\n let deps: any[] = []\n let result: TResult | undefined\n\n return depArgs => {\n let depTime: number\n if (opts.key && opts.debug) depTime = Date.now()\n\n const newDeps = getDeps(depArgs)\n\n const depsChanged =\n newDeps.length !== deps.length ||\n newDeps.some((dep: any, index: number) => deps[index] !== dep)\n\n if (!depsChanged) {\n return result!\n }\n\n deps = newDeps\n\n let resultTime: number\n if (opts.key && opts.debug) resultTime = Date.now()\n\n result = fn(...newDeps)\n opts?.onChange?.(result)\n\n if (opts.key && opts.debug) {\n if (opts?.debug()) {\n const depEndTime = Math.round((Date.now() - depTime!) * 100) / 100\n const resultEndTime = Math.round((Date.now() - resultTime!) * 100) / 100\n const resultFpsPercentage = resultEndTime / 16\n\n const pad = (str: number | string, num: number) => {\n str = String(str)\n while (str.length < num) {\n str = ' ' + str\n }\n return str\n }\n\n console.info(\n `%c⏱ ${pad(resultEndTime, 5)} /${pad(depEndTime, 5)} ms`,\n `\n font-size: .6rem;\n font-weight: bold;\n color: hsl(${Math.max(\n 0,\n Math.min(120 - 120 * resultFpsPercentage, 120)\n )}deg 100% 31%);`,\n opts?.key\n )\n }\n }\n\n return result!\n }\n}\n\nexport function getMemoOptions(\n tableOptions: Partial<TableOptionsResolved<any>>,\n debugLevel:\n | 'debugAll'\n | 'debugCells'\n | 'debugTable'\n | 'debugColumns'\n | 'debugRows'\n | 'debugHeaders',\n key: string,\n onChange?: (result: any) => void\n) {\n return {\n debug: () => tableOptions?.debugAll ?? tableOptions[debugLevel],\n key: process.env.NODE_ENV === 'development' && key,\n onChange,\n }\n}\n","import { RowData, Cell, Column, Row, Table } from '../types'\nimport { Getter, getMemoOptions, memo } from '../utils'\n\nexport interface CellContext<TData extends RowData, TValue> {\n cell: Cell<TData, TValue>\n column: Column<TData, TValue>\n getValue: Getter<TValue>\n renderValue: Getter<TValue | null>\n row: Row<TData>\n table: Table<TData>\n}\n\nexport interface CoreCell<TData extends RowData, TValue> {\n /**\n * The associated Column object for the cell.\n * @link [API Docs](https://tanstack.com/table/v8/docs/api/core/cell#column)\n * @link [Guide](https://tanstack.com/table/v8/docs/guide/cells)\n */\n column: Column<TData, TValue>\n /**\n * Returns the rendering context (or props) for cell-based components like cells and aggregated cells. Use these props with your framework's `flexRender` utility to render these using the template of your choice:\n * @link [API Docs](https://tanstack.com/table/v8/docs/api/core/cell#getcontext)\n * @link [Guide](https://tanstack.com/table/v8/docs/guide/cells)\n */\n getContext: () => CellContext<TData, TValue>\n /**\n * Returns the value for the cell, accessed via the associated column's accessor key or accessor function.\n * @link [API Docs](https://tanstack.com/table/v8/docs/api/core/cell#getvalue)\n * @link [Guide](https://tanstack.com/table/v8/docs/guide/cells)\n */\n getValue: CellContext<TData, TValue>['getValue']\n /**\n * The unique ID for the cell across the entire table.\n * @link [API Docs](https://tanstack.com/table/v8/docs/api/core/cell#id)\n * @link [Guide](https://tanstack.com/table/v8/docs/guide/cells)\n */\n id: string\n /**\n * Renders the value for a cell the same as `getValue`, but will return the `renderFallbackValue` if no value is found.\n * @link [API Docs](https://tanstack.com/table/v8/docs/api/core/cell#rendervalue)\n * @link [Guide](https://tanstack.com/table/v8/docs/guide/cells)\n */\n renderValue: CellContext<TData, TValue>['renderValue']\n /**\n * The associated Row object for the cell.\n * @link [API Docs](https://tanstack.com/table/v8/docs/api/core/cell#row)\n * @link [Guide](https://tanstack.com/table/v8/docs/guide/cells)\n */\n row: Row<TData>\n}\n\nexport function createCell<TData extends RowData, TValue>(\n table: Table<TData>,\n row: Row<TData>,\n column: Column<TData, TValue>,\n columnId: string\n): Cell<TData, TValue> {\n const getRenderValue = () =>\n cell.getValue() ?? table.options.renderFallbackValue\n\n const cell: CoreCell<TData, TValue> = {\n id: `${row.id}_${column.id}`,\n row,\n column,\n getValue: () => row.getValue(columnId),\n renderValue: getRenderValue,\n getContext: memo(\n () => [table, column, row, cell],\n (table, column, row, cell) => ({\n table,\n column,\n row,\n cell: cell as Cell<TData, TValue>,\n getValue: cell.getValue,\n renderValue: cell.renderValue,\n }),\n getMemoOptions(table.options, 'debugCells', 'cell.getContext')\n ),\n }\n\n table._features.forEach(feature => {\n feature.createCell?.(\n cell as Cell<TData, TValue>,\n column,\n row as Row<TData>,\n table\n )\n }, {})\n\n return cell as Cell<TData, TValue>\n}\n","import {\n Column,\n Table,\n AccessorFn,\n ColumnDef,\n RowData,\n ColumnDefResolved,\n} from '../types'\nimport { getMemoOptions, memo } from '../utils'\n\nexport interface CoreColumn<TData extends RowData, TValue> {\n /**\n * The resolved accessor function to use when extracting the value for the column from each row. Will only be defined if the column def has a valid accessor key or function defined.\n * @link [API Docs](https://tanstack.com/table/v8/docs/api/core/column#accessorfn)\n * @link [Guide](https://tanstack.com/table/v8/docs/guide/column-defs)\n */\n accessorFn?: AccessorFn<TData, TValue>\n /**\n * The original column def used to create the column.\n * @link [API Docs](https://tanstack.com/table/v8/docs/api/core/column#columndef)\n * @link [Guide](https://tanstack.com/table/v8/docs/guide/column-defs)\n */\n columnDef: ColumnDef<TData, TValue>\n /**\n * The child column (if the column is a group column). Will be an empty array if the column is not a group column.\n * @link [API Docs](https://tanstack.com/table/v8/docs/api/core/column#columns)\n * @link [Guide](https://tanstack.com/table/v8/docs/guide/column-defs)\n */\n columns: Column<TData, TValue>[]\n /**\n * The depth of the column (if grouped) relative to the root column def array.\n * @link [API Docs](https://tanstack.com/table/v8/docs/api/core/column#depth)\n * @link [Guide](https://tanstack.com/table/v8/docs/guide/column-defs)\n */\n depth: number\n /**\n * Returns the flattened array of this column and all child/grand-child columns for this column.\n * @link [API Docs](https://tanstack.com/table/v8/docs/api/core/column#getflatcolumns)\n * @link [Guide](https://tanstack.com/table/v8/docs/guide/column-defs)\n */\n getFlatColumns: () => Column<TData, TValue>[]\n /**\n * Returns an array of all leaf-node columns for this column. If a column has no children, it is considered the only leaf-node column.\n * @link [API Docs](https://tanstack.com/table/v8/docs/api/core/column#getleafcolumns)\n * @link [Guide](https://tanstack.com/table/v8/docs/guide/column-defs)\n */\n getLeafColumns: () => Column<TData, TValue>[]\n /**\n * The resolved unique identifier for the column resolved in this priority:\n - A manual `id` property from the column def\n - The accessor key from the column def\n - The header string from the column def\n * @link [API Docs](https://tanstack.com/table/v8/docs/api/core/column#id)\n * @link [Guide](https://tanstack.com/table/v8/docs/guide/column-defs)\n */\n id: string\n /**\n * The parent column for this column. Will be undefined if this is a root column.\n * @link [API Docs](https://tanstack.com/table/v8/docs/api/core/column#parent)\n * @link [Guide](https://tanstack.com/table/v8/docs/guide/column-defs)\n */\n parent?: Column<TData, TValue>\n}\n\nexport function createColumn<TData extends RowData, TValue>(\n table: Table<TData>,\n columnDef: ColumnDef<TData, TValue>,\n depth: number,\n parent?: Column<TData, TValue>\n): Column<TData, TValue> {\n const defaultColumn = table._getDefaultColumnDef()\n\n const resolvedColumnDef = {\n ...defaultColumn,\n ...columnDef,\n } as ColumnDefResolved<TData>\n\n const accessorKey = resolvedColumnDef.accessorKey\n\n let id =\n resolvedColumnDef.id ??\n (accessorKey\n ? typeof String.prototype.replaceAll === 'function'\n ? accessorKey.replaceAll('.', '_')\n : accessorKey.replace(/\\./g, '_')\n : undefined) ??\n (typeof resolvedColumnDef.header === 'string'\n ? resolvedColumnDef.header\n : undefined)\n\n let accessorFn: AccessorFn<TData> | undefined\n\n if (resolvedColumnDef.accessorFn) {\n accessorFn = resolvedColumnDef.accessorFn\n } else if (accessorKey) {\n // Support deep accessor keys\n if (accessorKey.includes('.')) {\n accessorFn = (originalRow: TData) => {\n let result = originalRow as Record<string, any>\n\n for (const key of accessorKey.split('.')) {\n result = result?.[key]\n if (process.env.NODE_ENV !== 'production' && result === undefined) {\n console.warn(\n `\"${key}\" in deeply nested key \"${accessorKey}\" returned undefined.`\n )\n }\n }\n\n return result\n }\n } else {\n accessorFn = (originalRow: TData) =>\n (originalRow as any)[resolvedColumnDef.accessorKey]\n }\n }\n\n if (!id) {\n if (process.env.NODE_ENV !== 'production') {\n throw new Error(\n resolvedColumnDef.accessorFn\n ? `Columns require an id when using an accessorFn`\n : `Columns require an id when using a non-string header`\n )\n }\n throw new Error()\n }\n\n let column: CoreColumn<TData, any> = {\n id: `${String(id)}`,\n accessorFn,\n parent: parent as any,\n depth,\n columnDef: resolvedColumnDef as ColumnDef<TData, any>,\n columns: [],\n getFlatColumns: memo(\n () => [true],\n () => {\n return [\n column as Column<TData, TValue>,\n ...column.columns?.flatMap(d => d.getFlatColumns()),\n ]\n },\n getMemoOptions(table.options, 'debugColumns', 'column.getFlatColumns')\n ),\n getLeafColumns: memo(\n () => [table._getOrderColumnsFn()],\n orderColumns => {\n if (column.columns?.length) {\n let leafColumns = column.columns.flatMap(column =>\n column.getLeafColumns()\n )\n\n return orderColumns(leafColumns)\n }\n\n return [column as Column<TData, TValue>]\n },\n getMemoOptions(table.options, 'debugColumns', 'column.getLeafColumns')\n ),\n }\n\n for (const feature of table._features) {\n feature.createColumn?.(column as Column<TData, TValue>, table)\n }\n\n // Yes, we have to convert table to unknown, because we know more than the compiler here.\n return column as Column<TData, TValue>\n}\n","import {\n RowData,\n Column,\n Header,\n HeaderGroup,\n Table,\n TableFeature,\n} from '../types'\nimport { getMemoOptions, memo } from '../utils'\n\nconst debug = 'debugHeaders'\n\nexport interface CoreHeaderGroup<TData extends RowData> {\n depth: number\n headers: Header<TData, unknown>[]\n id: string\n}\n\nexport interface HeaderContext<TData, TValue> {\n /**\n * An instance of a column.\n */\n column: Column<TData, TValue>\n /**\n * An instance of a header.\n */\n header: Header<TData, TValue>\n /**\n * The table instance.\n */\n table: Table<TData>\n}\n\nexport interface CoreHeader<TData extends RowData, TValue> {\n /**\n * The col-span for the header.\n * @link [API Docs](https://tanstack.com/table/v8/docs/api/core/header#colspan)\n * @link [Guide](https://tanstack.com/table/v8/docs/guide/headers)\n */\n colSpan: number\n /**\n * The header's associated column object.\n * @link [API Docs](https://tanstack.com/table/v8/docs/api/core/header#column)\n * @link [Guide](https://tanstack.com/table/v8/docs/guide/headers)\n */\n column: Column<TData, TValue>\n /**\n * The depth of the header, zero-indexed based.\n * @link [API Docs](https://tanstack.com/table/v8/docs/api/core/header#depth)\n * @link [Guide](https://tanstack.com/table/v8/docs/guide/headers)\n */\n depth: number\n /**\n * Returns the rendering context (or props) for column-based components like headers, footers and filters.\n * @link [API Docs](https://tanstack.com/table/v8/docs/api/core/header#getcontext)\n * @link [Guide](https://tanstack.com/table/v8/docs/guide/headers)\n */\n getContext: () => HeaderContext<TData, TValue>\n /**\n * Returns the leaf headers hierarchically nested under this header.\n * @link [API Docs](https://tanstack.com/table/v8/docs/api/core/header#getleafheaders)\n * @link [Guide](https://tanstack.com/table/v8/docs/guide/headers)\n */\n getLeafHeaders: () => Header<TData, unknown>[]\n /**\n * The header's associated header group object.\n * @link [API Docs](https://tanstack.com/table/v8/docs/api/core/header#headergroup)\n * @link [Guide](https://tanstack.com/table/v8/docs/guide/headers)\n */\n headerGroup: HeaderGroup<TData>\n /**\n * The unique identifier for the header.\n * @link [API Docs](https://tanstack.com/table/v8/docs/api/core/header#id)\n * @link [Guide](https://tanstack.com/table/v8/docs/guide/headers)\n */\n id: string\n /**\n * The index for the header within the header group.\n * @link [API Docs](https://tanstack.com/table/v8/docs/api/core/header#index)\n * @link [Guide](https://tanstack.com/table/v8/docs/guide/headers)\n */\n index: number\n /**\n * A boolean denoting if the header is a placeholder header.\n * @link [API Docs](https://tanstack.com/table/v8/docs/api/core/header#isplaceholder)\n * @link [Guide](https://tanstack.com/table/v8/docs/guide/headers)\n */\n isPlaceholder: boolean\n /**\n * If the header is a placeholder header, this will be a unique header ID that does not conflict with any other headers across the table.\n * @link [API Docs](https://tanstack.com/table/v8/docs/api/core/header#placeholderid)\n * @link [Guide](https://tanstack.com/table/v8/docs/guide/headers)\n */\n placeholderId?: string\n /**\n * The row-span for the header.\n * @link [API Docs](https://tanstack.com/table/v8/docs/api/core/header#rowspan)\n * @link [Guide](https://tanstack.com/table/v8/docs/guide/headers)\n */\n rowSpan: number\n /**\n * The header's hierarchical sub/child headers. Will be empty if the header's associated column is a leaf-column.\n * @link [API Docs](https://tanstack.com/table/v8/docs/api/core/header#subheaders)\n * @link [Guide](https://tanstack.com/table/v8/docs/guide/headers)\n */\n subHeaders: Header<TData, TValue>[]\n}\n\nexport interface HeadersInstance<TData extends RowData> {\n /**\n * Returns all header groups for the table.\n * @link [API Docs](https://tanstack.com/table/v8/docs/api/core/headers#getheadergroups)\n * @link [Guide](https://tanstack.com/table/v8/docs/guide/headers)\n */\n getHeaderGroups: () => HeaderGroup<TData>[]\n /**\n * If pinning, returns the header groups for the left pinned columns.\n * @link [API Docs](https://tanstack.com/table/v8/docs/api/core/headers#getleftheadergroups)\n * @link [Guide](https://tanstack.com/table/v8/docs/guide/headers)\n */\n getLeftHeaderGroups: () => HeaderGroup<TData>[]\n /**\n * If pinning, returns the header groups for columns that are not pinned.\n * @link [API Docs](https://tanstack.com/table/v8/docs/api/core/headers#getcenterheadergroups)\n * @link [Guide](https://tanstack.com/table/v8/docs/guide/headers)\n */\n getCenterHeaderGroups: () => HeaderGroup<TData>[]\n /**\n * If pinning, returns the header groups for the right pinned columns.\n * @link [API Docs](https://tanstack.com/table/v8/docs/api/core/headers#getrightheadergroups)\n * @link [Guide](https://tanstack.com/table/v8/docs/guide/headers)\n */\n getRightHeaderGroups: () => HeaderGroup<TData>[]\n\n /**\n * Returns the footer groups for the table.\n * @link [API Docs](https://tanstack.com/table/v8/docs/api/core/headers#getfootergroups)\n * @link [Guide](https://tanstack.com/table/v8/docs/guide/headers)\n */\n getFooterGroups: () => HeaderGroup<TData>[]\n /**\n * If pinning, returns the footer groups for the left pinned columns.\n * @link [API Docs](https://tanstack.com/table/v8/docs/api/core/headers#getleftfootergroups)\n * @link [Guide](https://tanstack.com/table/v8/docs/guide/headers)\n */\n getLeftFooterGroups: () => HeaderGroup<TData>[]\n /**\n * If pinning, returns the footer groups for columns that are not pinned.\n * @link [API Docs](https://tanstack.com/table/v8/docs/api/core/headers#getcenterfootergroups)\n * @link [Guide](https://tanstack.com/table/v8/docs/guide/headers)\n */\n getCenterFooterGroups: () => HeaderGroup<TData>[]\n /**\n * If pinning, returns the footer groups for the right pinned columns.\n * @link [API Docs](https://tanstack.com/table/v8/docs/api/core/headers#getrightfootergroups)\n * @link [Guide](https://tanstack.com/table/v8/docs/guide/headers)\n */\n getRightFooterGroups: () => HeaderGroup<TData>[]\n\n /**\n * Returns headers for all columns in the table, including parent headers.\n * @link [API Docs](https://tanstack.com/table/v8/docs/api/core/headers#getflatheaders)\n * @link [Guide](https://tanstack.com/table/v8/docs/guide/headers)\n */\n getFlatHeaders: () => Header<TData, unknown>[]\n /**\n * If pinning, returns headers for all left pinned columns in the table, including parent headers.\n * @link [API Docs](https://tanstack.com/table/v8/docs/api/core/headers#getleftflatheaders)\n * @link [Guide](https://tanstack.com/table/v8/docs/guide/headers)\n */\n getLeftFlatHeaders: () => Header<TData, unknown>[]\n /**\n * If pinning, returns headers for all columns that are not pinned, including parent headers.\n * @link [API Docs](https://tanstack.com/table/v8/docs/api/core/headers#getcenterflatheaders)\n * @link [Guide](https://tanstack.com/table/v8/docs/guide/headers)\n */\n getCenterFlatHeaders: () => Header<TData, unknown>[]\n /**\n * If pinning, returns headers for all right pinned columns in the table, including parent headers.\n * @link [API Docs](https://tanstack.com/table/v8/docs/api/core/headers#getrightflatheaders)\n * @link [Guide](https://tanstack.com/table/v8/docs/guide/headers)\n */\n getRightFlatHeaders: () => Header<TData, unknown>[]\n\n /**\n * Returns headers for all leaf columns in the table, (not including parent headers).\n * @link [API Docs](https://tanstack.com/table/v8/docs/api/core/headers#getleafheaders)\n * @link [Guide](https://tanstack.com/table/v8/docs/guide/headers)\n */\n getLeafHeaders: () => Header<TData, unknown>[]\n /**\n * If pinning, returns headers for all left pinned leaf columns in the table, (not including parent headers).\n * @link [API Docs](https://tanstack.com/table/v8/docs/api/core/headers#getleftleafheaders)\n * @link [Guide](https://tanstack.com/table/v8/docs/guide/headers)\n */\n getLeftLeafHeaders: () => Header<TData, unknown>[]\n /**\n * If pinning, returns headers for all columns that are not pinned, (not including parent headers).\n * @link [API Docs](https://tanstack.com/table/v8/docs/api/core/headers#getcenterleafheaders)\n * @link [Guide](https://tanstack.com/table/v8/docs/guide/headers)\n */\n getCenterLeafHeaders: () => Header<TData, unknown>[]\n /**\n * If pinning, returns headers for all right pinned leaf columns in the table, (not including parent headers).\n * @link [API Docs](https://tanstack.com/table/v8/docs/api/core/headers#getrightleafheaders)\n * @link [Guide](https://tanstack.com/table/v8/docs/guide/headers)\n */\n getRightLeafHeaders: () => Header<TData, unknown>[]\n}\n\n//\n\nfunction createHeader<TData extends RowData, TValue>(\n table: Table<TData>,\n column: Column<TData, TValue>,\n options: {\n id?: string\n isPlaceholder?: boolean\n placeholderId?: string\n index: number\n depth: number\n }\n): Header<TData, TValue> {\n const id = options.id ?? column.id\n\n let header: CoreHeader<TData, TValue> = {\n id,\n column,\n index: options.index,\n isPlaceholder: !!options.isPlaceholder,\n placeholderId: options.placeholderId,\n depth: options.depth,\n subHeaders: [],\n colSpan: 0,\n rowSpan: 0,\n headerGroup: null!,\n getLeafHeaders: (): Header<TData, unknown>[] => {\n const leafHeaders: Header<TData, unknown>[] = []\n\n const recurseHeader = (h: CoreHeader<TData, any>) => {\n if (h.subHeaders && h.subHeaders.length) {\n h.subHeaders.map(recurseHeader)\n }\n leafHeaders.push(h as Header<TData, unknown>)\n }\n\n recurseHeader(header)\n\n return leafHeaders\n },\n getContext: () => ({\n table,\n header: header as Header<TData, TValue>,\n column,\n }),\n }\n\n table._features.forEach(feature => {\n feature.createHeader?.(header as Header<TData, TValue>, table)\n })\n\n return header as Header<TData, TValue>\n}\n\nexport const Headers: TableFeature = {\n createTable: <TData extends RowData>(table: Table<TData>): void => {\n // Header Groups\n\n table.getHeaderGroups = memo(\n () => [\n table.getAllColumns(),\n table.getVisibleLeafColumns(),\n table.getState().columnPinning.left,\n table.getState().columnPinning.right,\n ],\n (allColumns, leafColumns, left, right) => {\n const leftColumns =\n left\n ?.map(columnId => leafColumns.find(d => d.id === columnId)!)\n .filter(Boolean) ?? []\n\n const rightColumns =\n right\n ?.map(columnId => leafColumns.find(d => d.id === columnId)!)\n .filter(Boolean) ?? []\n\n const centerColumns = leafColumns.filter(\n column => !left?.includes(column.id) && !right?.includes(column.id)\n )\n\n const headerGroups = buildHeaderGroups(\n allColumns,\n [...leftColumns, ...centerColumns, ...rightColumns],\n table\n )\n\n return headerGroups\n },\n getMemoOptions(table.options, debug, 'getHeaderGroups')\n )\n\n table.getCenterHeaderGroups = memo(\n () => [\n table.getAllColumns(),\n table.getVisibleLeafColumns(),\n table.getState().columnPinning.left,\n table.getState().columnPinning.right,\n ],\n (allColumns, leafColumns, left, right) => {\n leafColumns = leafColumns.filter(\n column => !left?.includes(column.id) && !right?.includes(column.id)\n )\n return buildHeaderGroups(allColumns, leafColumns, table, 'center')\n },\n getMemoOptions(table.options, debug, 'getCenterHeaderGroups')\n )\n\n table.getLeftHeaderGroups = memo(\n () => [\n table.getAllColumns(),\n table.getVisibleLeafColumns(),\n table.getState().columnPinning.left,\n ],\n (allColumns, leafColumns, left) => {\n const orderedLeafColumns =\n left\n ?.map(columnId => leafColumns.find(d => d.id === columnId)!)\n .filter(Boolean) ?? []\n\n return buildHeaderGroups(allColumns, orderedLeafColumns, table, 'left')\n },\n getMemoOptions(table.options, debug, 'getLeftHeaderGroups')\n )\n\n table.getRightHeaderGroups = memo(\n () => [\n table.getAllColumns(),\n table.getVisibleLeafColumns(),\n table.getState().columnPinning.right,\n ],\n (allColumns, leafColumns, right) => {\n const orderedLeafColumns =\n right\n ?.map(columnId => leafColumns.find(d => d.id === columnId)!)\n .filter(Boolean) ?? []\n\n return buildHeaderGroups(allColumns, orderedLeafColumns, table, 'right')\n },\n getMemoOptions(table.options, debug, 'getRightHeaderGroups')\n )\n\n // Footer Groups\n\n table.getFooterGroups = memo(\n () => [table.getHeaderGroups()],\n headerGroups => {\n return [...headerGroups].reverse()\n },\n getMemoOptions(table.options, debug, 'getFooterGroups')\n )\n\n table.getLeftFooterGroups = memo(\n () => [table.getLeftHeaderGroups()],\n headerGroups => {\n return [...headerGroups].reverse()\n },\n getMemoOptions(table.options, debug, 'getLeftFooterGroups')\n )\n\n table.getCenterFooterGroups = memo(\n () => [table.getCenterHeaderGroups()],\n headerGroups => {\n return [...headerGroups].reverse()\n },\n getMemoOptions(table.options, debug, 'getCenterFooterGroups')\n )\n\n table.getRightFooterGroups = memo(\n () => [table.getRightHeaderGroups()],\n headerGroups => {\n return [...headerGroups].reverse()\n },\n getMemoOptions(table.options, debug, 'getRightFooterGroups')\n )\n\n // Flat Headers\n\n table.getFlatHeaders = memo(\n () => [table.getHeaderGroups()],\n headerGroups => {\n return headerGroups\n .map(headerGroup => {\n return headerGroup.headers\n })\n .flat()\n },\n getMemoOptions(table.options, debug, 'getFlatHeaders')\n )\n\n table.getLeftFlatHeaders = memo(\n () => [table.getLeftHeaderGroups()],\n left => {\n return left\n .map(headerGroup => {\n return headerGroup.headers\n })\n .flat()\n },\n getMemoOptions(table.options, debug, 'getLeftFlatHeaders')\n )\n\n table.getCenterFlatHeaders = memo(\n () => [table.getCenterHeaderGroups()],\n left => {\n return left\n .map(headerGroup => {\n return headerGroup.headers\n })\n .flat()\n },\n getMemoOptions(table.options, debug, 'getCenterFlatHeaders')\n )\n\n table.getRightFlatHeaders = memo(\n () => [table.getRightHeaderGroups()],\n left => {\n return left\n .map(headerGroup => {\n return headerGroup.headers\n })\n .flat()\n },\n getMemoOptions(table.options, debug, 'getRightFlatHeaders')\n )\n\n // Leaf Headers\n\n table.getCenterLeafHeaders = memo(\n () => [table.getCenterFlatHeaders()],\n flatHeaders => {\n return flatHeaders.filter(header => !header.subHeaders?.length)\n },\n getMemoOptions(table.options, debug, 'getCenterLeafHeaders')\n )\n\n table.getLeftLeafHeaders = memo(\n () => [table.getLeftFlatHeaders()],\n flatHeaders => {\n return flatHeaders.filter(header => !header.subHeaders?.length)\n },\n getMemoOptions(table.options, debug, 'getLeftLeafHeaders')\n )\n\n table.getRightLeafHeaders = memo(\n () => [table.getRightFlatHeaders()],\n flatHeaders => {\n return flatHeaders.filter(header => !header.subHeaders?.length)\n },\n getMemoOptions(table.options, debug, 'getRightLeafHeaders')\n )\n\n table.getLeafHeaders = memo(\n () => [\n table.getLeftHeaderGroups(),\n table.getCenterHeaderGroups(),\n table.getRightHeaderGroups(),\n ],\n (left, center, right) => {\n return [\n ...(left[0]?.headers ?? []),\n ...(center[0]?.headers ?? []),\n ...(right[0]?.headers ?? []),\n ]\n .map(header => {\n return header.getLeafHeaders()\n })\n .flat()\n },\n getMemoOptions(table.options, debug, 'getLeafHeaders')\n )\n },\n}\n\nexport function buildHeaderGroups<TData extends RowData>(\n allColumns: Column<TData, unknown>[],\n columnsToGroup: Column<TData, unknown>[],\n table: Table<TData>,\n headerFamily?: 'center' | 'left' | 'right'\n) {\n // Find the max depth of the columns:\n // build the leaf column row\n // build each buffer row going up\n // placeholder for non-existent level\n // real column for existing level\n\n let maxDepth = 0\n\n const findMaxDepth = (columns: Column<TData, unknown>[], depth = 1) => {\n maxDepth = Math.max(maxDepth, depth)\n\n columns\n .filter(column => column.getIsVisible())\n .forEach(column => {\n if (column.columns?.length) {\n findMaxDepth(column.columns, depth + 1)\n }\n }, 0)\n }\n\n findMaxDepth(allColumns)\n\n let headerGroups: HeaderGroup<TData>[] = []\n\n const createHeaderGroup = (\n headersToGroup: Header<TData, unknown>[],\n depth: number\n ) => {\n // The header group we are creating\n const headerGroup: HeaderGroup<TData> = {\n depth,\n id: [headerFamily, `${depth}`].filter(Boolean).join('_'),\n headers: [],\n }\n\n // The parent columns we're going to scan next\n const pendingParentHeaders: Header<TData, unknown>[] = []\n\n // Scan each column for parents\n headersToGroup.forEach(headerToGroup => {\n // What is the latest (last) parent column?\n\n const latestPendingParentHeader = [...pendingParentHeaders].reverse()[0]\n\n const isLeafHeader = headerToGroup.column.depth === headerGroup.depth\n\n let column: Column<TData, unknown>\n let isPlaceholder = false\n\n if (isLeafHeader && headerToGroup.column.parent) {\n // The parent header is new\n column = headerToGroup.column.parent\n } else {\n // The parent header is repeated\n column = headerToGroup.column\n isPlaceholder = true\n }\n\n if (\n latestPendingParentHeader &&\n latestPendingParentHeader?.column === column\n ) {\n // This column is repeated. Add it as a sub header to the next batch\n latestPendingParentHeader.subHeaders.push(headerToGroup)\n } else {\n // This is a new header. Let's create it\n const header = createHeader(table, column, {\n id: [headerFamily, depth, column.id, headerToGroup?.id]\n .filter(Boolean)\n .join('_'),\n isPlaceholder,\n placeholderId: isPlaceholder\n ? `${pendingParentHeaders.filter(d => d.column === column).length}`\n : undefined,\n depth,\n index: pendingParentHeaders.length,\n })\n\n // Add the headerToGroup as a subHeader of the new header\n header.subHeaders.push(headerToGroup)\n // Add the new header to the pendingParentHeaders to get grouped\n // in the next batch\n pendingParentHeaders.push(header)\n }\n\n headerGroup.headers.push(headerToGroup)\n headerToGroup.headerGroup = headerGroup\n })\n\n headerGroups.push(headerGroup)\n\n if (depth > 0) {\n createHeaderGroup(pendingParentHeaders, depth - 1)\n }\n }\n\n const bottomHeaders = columnsToGroup.map((column, index) =>\n createHeader(table, column, {\n depth: maxDepth,\n index,\n })\n )\n\n createHeaderGroup(bottomHeaders, maxDepth - 1)\n\n headerGroups.reverse()\n\n // headerGroups = headerGroups.filter(headerGroup => {\n // return !headerGroup.headers.every(header => header.isPlaceholder)\n // })\n\n const recurseHeadersForSpans = (\n headers: Header<TData, unknown>[]\n ): { colSpan: number; rowSpan: number }[] => {\n const filteredHeaders = headers.filter(header =>\n header.column.getIsVisible()\n )\n\n return filteredHeaders.map(header => {\n let colSpan = 0\n let rowSpan = 0\n let childRowSpans = [0]\n\n if (header.subHeaders && header.subHeaders.length) {\n childRowSpans = []\n\n recurseHeadersForSpans(header.subHeaders).forEach(\n ({ colSpan: childColSpan, rowSpan: childRowSpan }) => {\n colSpan += childColSpan\n childRowSpans.push(childRowSpan)\n }\n )\n } else {\n colSpan = 1\n }\n\n const minChildRowSpan = Math.min(...childRowSpans)\n rowSpan = rowSpan + minChildRowSpan\n\n header.colSpan = colSpan\n header.rowSpan = rowSpan\n\n return { colSpan, rowSpan }\n })\n }\n\n recurseHeadersForSpans(headerGroups[0]?.headers ?? [])\n\n return headerGroups\n}\n","import { RowData, Cell, Row, Table } from '../types'\nimport { flattenBy, getMemoOptions, memo } from '../utils'\nimport { createCell } from './cell'\n\nexport interface CoreRow<TData extends RowData> {\n _getAllCellsByColumnId: () => Record<string, Cell<TData, unknown>>\n _uniqueValuesCache: Record<string, unknown>\n _valuesCache: Record<string, unknown>\n /**\n * The depth of the row (if nested or grouped) relative to the root row array.\n * @link [API Docs](https://tanstack.com/table/v8/docs/api/core/row#depth)\n * @link [Guide](https://tanstack.com/table/v8/docs/guide/rows)\n */\n depth: number\n /**\n * Returns all of the cells for the row.\n * @link [API Docs](https://tanstack.com/table/v8/docs/api/core/row#getallcells)\n * @link [Guide](https://tanstack.com/table/v8/docs/guide/rows)\n */\n getAllCells: () => Cell<TData, unknown>[]\n /**\n * Returns the leaf rows for the row, not including any parent rows.\n * @link [API Docs](https://tanstack.com/table/v8/docs/api/core/row#getleafrows)\n * @link [Guide](https://tanstack.com/table/v8/docs/guide/rows)\n */\n getLeafRows: () => Row<TData>[]\n /**\n * Returns the parent row for the row, if it exists.\n * @link [API Docs](https://tanstack.com/table/v8/docs/api/core/row#getparentrow)\n * @link [Guide](https://tanstack.com/table/v8/docs/guide/rows)\n */\n getParentRow: () => Row<TData> | undefined\n /**\n * Returns the parent rows for the row, all the way up to a root row.\n * @link [API Docs](https://tanstack.com/table/v8/docs/api/core/row#getparentrows)\n * @link [Guide](https://tanstack.com/table/v8/docs/guide/rows)\n */\n getParentRows: () => Row<TData>[]\n /**\n * Returns a unique array of values from the row for a given columnId.\n * @link [API Docs](https://tanstack.com/table/v8/docs/api/core/row#getuniquevalues)\n * @link [Guide](https://tanstack.com/table/v8/docs/guide/rows)\n */\n getUniqueValues: <TValue>(columnId: string) => TValue[]\n /**\n * Returns the value from the row for a given columnId.\n * @link [API Docs](https://tanstack.com/table/v8/docs/api/core/row#getvalue)\n * @link [Guide](https://tanstack.com/table/v8/docs/guide/rows)\n */\n getValue: <TValue>(columnId: string) => TValue\n /**\n * The resolved unique identifier for the row resolved via the `options.getRowId` option. Defaults to the row's index (or relative index if it is a subRow).\n * @link [API Docs](https://tanstack.com/table/v8/docs/api/core/row#id)\n * @link [Guide](https://tanstack.com/table/v8/docs/guide/rows)\n */\n id: string\n /**\n * The index of the row within its parent array (or the root data array).\n * @link [API Docs](https://tanstack.com/table/v8/docs/api/core/row#index)\n * @link [Guide](https://tanstack.com/table/v8/docs/guide/rows)\n */\n index: number\n /**\n * The original row object provided to the table. If the row is a grouped row, the original row object will be the first original in the group.\n * @link [API Docs](https://tanstack.com/table/v8/docs/api/core/row#original)\n * @link [Guide](https://tanstack.com/table/v8/docs/guide/rows)\n */\n original: TData\n /**\n * An array of the original subRows as returned by the `options.getSubRows` option.\n * @link [API Docs](https://tanstack.com/table/v8/docs/api/core/row#originalsubrows)\n * @link [Guide](https://tanstack.com/table/v8/docs/guide/rows)\n */\n originalSubRows?: TData[]\n /**\n * If nested, this row's parent row id.\n * @link [API Docs](https://tanstack.com/table/v8/docs/api/core/row#parentid)\n * @link [Guide](https://tanstack.com/table/v8/docs/guide/rows)\n */\n parentId?: string\n /**\n * Renders the value for the row in a given columnId the same as `getValue`, but will return the `renderFallbackValue` if no value is found.\n * @link [API Docs](https://tanstack.com/table/v8/docs/api/core/row#rendervalue)\n * @link [Guide](https://tanstack.com/table/v8/docs/guide/rows)\n */\n renderValue: <TValue>(columnId: string) => TValue\n /**\n * An array of subRows for the row as returned and created by the `options.getSubRows` option.\n * @link [API Docs](https://tanstack.com/table/v8/docs/api/core/row#subrows)\n * @link [Guide](https://tanstack.com/table/v8/docs/guide/rows)\n */\n subRows: Row<TData>[]\n}\n\nexport const createRow = <TData extends RowData>(\n table: Table<TData>,\n id: string,\n original: TData,\n rowIndex: number,\n depth: number,\n subRows?: Row<TData>[],\n parentId?: string\n): Row<TData> => {\n let row: CoreRow<TData> = {\n id,\n index: rowIndex,\n original,\n depth,\n parentId,\n _valuesCache: {},\n _uniqueValuesCache: {},\n getValue: columnId => {\n if (row._valuesCache.hasOwnProperty(columnId)) {\n return row._valuesCache[columnId]\n }\n\n const column = table.getColumn(columnId)\n\n if (!column?.accessorFn) {\n return undefined\n }\n\n row._valuesCache[columnId] = column.accessorFn(\n row.original as TData,\n rowIndex\n )\n\n return row._valuesCache[columnId] as any\n },\n getUniqueValues: columnId => {\n if (row._uniqueValuesCache.hasOwnProperty(columnId)) {\n return row._uniqueValuesCache[columnId]\n }\n\n const column = table.getColumn(columnId)\n\n if (!column?.accessorFn) {\n return undefined\n }\n\n if (!column.columnDef.getUniqueValues) {\n row._uniqueValuesCache[columnId] = [row.getValue(columnId)]\n return row._uniqueValuesCache[columnId]\n }\n\n row._uniqueValuesCache[columnId] = column.columnDef.getUniqueValues(\n row.original as TData,\n rowIndex\n )\n\n return row._uniqueValuesCache[columnId] as any\n },\n renderValue: columnId =>\n row.getValue(columnId) ?? table.options.renderFallbackValue,\n subRows: subRows ?? [],\n getLeafRows: () => flattenBy(row.subRows, d => d.subRows),\n getParentRow: () =>\n row.parentId ? table.getRow(row.parentId, true) : undefined,\n getParentRows: () => {\n let parentRows: Row<TData>[] = []\n let currentRow = row\n while (true) {\n const parentRow = currentRow.getParentRow()\n if (!parentRow) break\n parentRows.push(parentRow)\n currentRow = parentRow\n }\n return parentRows.reverse()\n },\n getAllCells: memo(\n () => [table.getAllLeafColumns()],\n leafColumns => {\n return leafColumns.map(column => {\n return createCell(table, row as Row<TData>, column, column.id)\n })\n },\n getMemoOptions(table.options, 'debugRows', 'getAllCells')\n ),\n\n _getAllCellsByColumnId: memo(\n () => [row.getAllCells()],\n allCells => {\n return allCells.reduce(\n (acc, cell) => {\n acc[cell.column.id] = cell\n return acc\n },\n {} as Record<string, Cell<TData, unknown>>\n )\n },\n getMemoOptions(table.options, 'debugRows', 'getAllCellsByColumnId')\n ),\n }\n\n for (let i = 0; i < table._features.length; i++) {\n const feature = table._features[i]\n feature?.createRow?.(row as Row<TData>, table)\n }\n\n return row as Row<TData>\n}\n","import { RowModel } from '..'\nimport { Column, RowData, Table, TableFeature } from '../types'\n\nexport interface FacetedColumn<TData extends RowData> {\n _getFacetedMinMaxValues?: () => undefined | [number, number]\n _getFacetedRowModel?: () => RowModel<TData>\n _getFacetedUniqueValues?: () => Map<any, number>\n /**\n * A function that **computes and returns** a min/max tuple derived from `column.getFacetedRowModel`. Useful for displaying faceted result values.\n * > ⚠️ Requires that you pass a valid `getFacetedMinMaxValues` function to `options.getFacetedMinMaxValues`. A default implementation is provided via the exported `getFacetedMinMaxValues` function.\n * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/column-faceting#getfacetedminmaxvalues)\n * @link [Guide](https://tanstack.com/table/v8/docs/guide/column-faceting)\n */\n getFacetedMinMaxValues: () => undefined | [number, number]\n /**\n * Returns the row model with all other column filters applied, excluding its own filter. Useful for displaying faceted result counts.\n * > ⚠️ Requires that you pass a valid `getFacetedRowModel` function to `options.facetedRowModel`. A default implementation is provided via the exported `getFacetedRowModel` function.\n * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/column-faceting#getfacetedrowmodel)\n * @link [Guide](https://tanstack.com/table/v8/docs/guide/column-faceting)\n */\n getFacetedRowModel: () => RowModel<TData>\n /**\n * A function that **computes and returns** a `Map` of unique values and their occurrences derived from `column.getFacetedRowModel`. Useful for displaying faceted result values.\n * > ⚠️ Requires that you pass a valid `getFacetedUniqueValues` function to `options.getFacetedUniqueValues`. A default implementation is provided via the exported `getFacetedUniqueValues` function.\n * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/column-faceting#getfaceteduniquevalues)\n * @link [Guide](https://tanstack.com/table/v8/docs/guide/column-faceting)\n */\n getFacetedUniqueValues: () => Map<any, number>\n}\n\nexport interface FacetedOptions<TData extends RowData> {\n getFacetedMinMaxValues?: (\n table: Table<TData>,\n columnId: string\n ) => () => undefined | [number, number]\n getFacetedRowModel?: (\n table: Table<TData>,\n columnId: string\n ) => () => RowModel<TData>\n getFacetedUniqueValues?: (\n table: Table<TData>,\n columnId: string\n ) => () => Map<any, number>\n}\n\n//\n\nexport const ColumnFaceting: TableFeature = {\n createColumn: <TData extends RowData>(\n column: Column<TData, unknown>,\n table: Table<TData>\n ): void => {\n column._getFacetedRowModel =\n table.options.getFacetedRowModel &&\n table.options.getFacetedRowModel(table, column.id)\n column.getFacetedRowModel = () => {\n if (!column._getFacetedRowModel) {\n return table.getPreFilteredRowModel()\n }\n\n return column._getFacetedRowModel()\n }\n column._getFacetedUniqueValues =\n table.options.getFacetedUniqueValues &&\n table.options.getFacetedUniqueValues(table, column.id)\n column.getFacetedUniqueValues = () => {\n if (!column._getFacetedUniqueValues) {\n return new Map()\n }\n\n return column._getFacetedUniqueValues()\n }\n column._getFacetedMinMaxValues =\n table.options.getFacetedMinMaxValues &&\n table.options.getFacetedMinMaxValues(table, column.id)\n column.getFacetedMinMaxValues = () => {\n if (!column._getFacetedMinMaxValues) {\n return undefined\n }\n\n return column._getFacetedMinMaxValues()\n }\n },\n}\n","import { FilterFn } from './features/ColumnFiltering'\n\nconst includesString: FilterFn<any> = (\n row,\n columnId: string,\n filterValue: string\n) => {\n const search = filterValue?.toString()?.toLowerCase()\n return Boolean(\n row\n .getValue<string | null>(columnId)\n ?.toString()\n ?.toLowerCase()\n ?.includes(search)\n )\n}\n\nincludesString.autoRemove = (val: any) => testFalsey(val)\n\nconst includesStringSensitive: FilterFn<any> = (\n row,\n columnId: string,\n filterValue: string\n) => {\n return Boolean(\n row.getValue<string | null>(columnId)?.toString()?.includes(filterValue)\n )\n}\n\nincludesStringSensitive.autoRemove = (val: any) => testFalsey(val)\n\nconst equalsString: FilterFn<any> = (\n row,\n columnId: string,\n filterValue: string\n) => {\n return (\n row.getValue<string | null>(columnId)?.toString()?.toLowerCase() ===\n filterValue?.toLowerCase()\n )\n}\n\nequalsString.autoRemove = (val: any) => testFalsey(val)\n\nconst arrIncludes: FilterFn<any> = (\n row,\n columnId: string,\n filterValue: unknown\n) => {\n return row.getValue<unknown[]>(columnId)?.includes(filterValue)\n}\n\narrIncludes.autoRemove = (val: any) => testFalsey(val) || !val?.length\n\nconst arrIncludesAll: FilterFn<any> = (\n row,\n columnId: string,\n filterValue: unknown[]\n) => {\n return !filterValue.some(\n val => !row.getValue<unknown[]>(columnId)?.includes(val)\n )\n}\n\narrIncludesAll.autoRemove = (val: any) => testFalsey(val) || !val?.length\n\nconst arrIncludesSome: FilterFn<any> = (\n row,\n columnId: string,\n filterValue: unknown[]\n) => {\n return filterValue.some(val =>\n row.getValue<unknown[]>(columnId)?.includes(val)\n )\n}\n\narrIncludesSome.autoRemove = (val: any) => testFalsey(val) || !val?.length\n\nconst equals: FilterFn<any> = (row, columnId: string, filterValue: unknown) => {\n return row.getValue(columnId) === filterValue\n}\n\nequals.autoRemove = (val: any) => testFalsey(val)\n\nconst weakEquals: FilterFn<any> = (\n row,\n columnId: string,\n filterValue: unknown\n) => {\n return row.getValue(columnId) == filterValue\n}\n\nweakEquals.autoRemove = (val: any) => testFalsey(val)\n\nconst inNumberRange: FilterFn<any> = (\n row,\n columnId: string,\n filterValue: [number, number]\n) => {\n let [min, max] = filterValue\n\n const rowValue = row.getValue<number>(columnId)\n return rowValue >= min && rowValue <= max\n}\n\ninNumberRange.resolveFilterValue = (val: [any, any]) => {\n let [unsafeMin, unsafeMax] = val\n\n let parsedMin =\n typeof unsafeMin !== 'number' ? parseFloat(unsafeMin as string) : unsafeMin\n let parsedMax =\n typeof unsafeMax !== 'number' ? parseFloat(unsafeMax as string) : unsafeMax\n\n let min =\n unsafeMin === null || Number.isNaN(parsedMin) ? -Infinity : parsedMin\n let max = unsafeMax === null || Number.isNaN(parsedMax) ? Infinity : parsedMax\n\n if (min > max) {\n const temp = min\n min = max\n max = temp\n }\n\n return [min, max] as const\n}\n\ninNumberRange.autoRemove = (val: any) =>\n testFalsey(val) || (testFalsey(val[0]) && testFalsey(val[1]))\n\n// Export\n\nexport const filterFns = {\n includesString,\n includesStringSensitive,\n equalsString,\n arrIncludes,\n arrIncludesAll,\n arrIncludesSome,\n equals,\n weakEquals,\n inNumberRange,\n}\n\nexport type BuiltInFilterFn = keyof typeof filterFns\n\n// Utils\n\nfunction testFalsey(val: any) {\n return val === undefined || val === null || val === ''\n}\n","import { RowModel } from '..'\nimport { BuiltInFilterFn, filterFns } from '../filterFns'\nimport {\n Column,\n FilterFns,\n FilterMeta,\n OnChangeFn,\n Row,\n RowData,\n Table,\n TableFeature,\n Updater,\n} from '../types'\nimport { functionalUpdate, isFunction, makeStateUpdater } from '../utils'\n\nexport interface ColumnFiltersTableState {\n columnFilters: ColumnFiltersState\n}\n\nexport type ColumnFiltersState = ColumnFilter[]\n\nexport interface ColumnFilter {\n id: string\n value: unknown\n}\n\nexport interface ResolvedColumnFilter<TData extends RowData> {\n filterFn: FilterFn<TData>\n id: string\n resolvedValue: unknown\n}\n\nexport interface FilterFn<TData extends RowData> {\n (\n row: Row<TData>,\n columnId: string,\n filterValue: any,\n addMeta: (meta: FilterMeta) => void\n ): boolean\n autoRemove?: ColumnFilterAutoRemoveTestFn<TData>\n resolveFilterValue?: TransformFilterValueFn<TData>\n}\n\nexport type TransformFilterValueFn<TData extends RowData> = (\n value: any,\n column?: Column<TData, unknown>\n) => unknown\n\nexport type ColumnFilterAutoRemoveTestFn<TData extends RowData> = (\n value: any,\n column?: Column<TData, unknown>\n) => boolean\n\nexport type CustomFilterFns<TData extends RowData> = Record<\n string,\n FilterFn<TData>\n>\n\nexport type FilterFnOption<TData extends RowData> =\n | 'auto'\n | BuiltInFilterFn\n | keyof FilterFns\n | FilterFn<TData>\n\nexport interface ColumnFiltersColumnDef<TData extends RowData> {\n /**\n * Enables/disables the **column** filter for this column.\n * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/column-filtering#enablecolumnfilter)\n * @link [Guide](https://tanstack.com/table/v8/docs/guide/column-filtering)\n */\n enableColumnFilter?: boolean\n /**\n * The filter function to use with this column. Can be the name of a built-in filter function or a custom filter function.\n * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/column-filtering#filterfn)\n * @link [Guide](https://tanstack.com/table/v8/docs/guide/column-filtering)\n */\n filterFn?: FilterFnOption<TData>\n}\n\nexport interface ColumnFiltersColumn<TData extends RowData> {\n /**\n * Returns an automatically calculated filter function for the column based off of the columns first known value.\n * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/column-filtering#getautofilterfn)\n * @link [Guide](https://tanstack.com/table/v8/docs/guide/column-filtering)\n */\n getAutoFilterFn: () => FilterFn<TData> | undefined\n /**\n * Returns whether or not the column can be **column** filtered.\n * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/column-filtering#getcanfilter)\n * @link [Guide](https://tanstack.com/table/v8/docs/guide/column-filtering)\n */\n getCanFilter: () => boolean\n /**\n * Returns the filter function (either user-defined or automatic, depending on configuration) for the columnId specified.\n * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/column-filtering#getfilterfn)\n * @link [Guide](https://tanstack.com/table/v8/docs/guide/column-filtering)\n */\n getFilterFn: () => FilterFn<TData> | undefined\n /**\n * Returns the index (including `-1`) of the column filter in the table's `state.columnFilters` array.\n * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/column-filtering#getfilterindex)\n * @link [Guide](https://tanstack.com/table/v8/docs/guide/column-filtering)\n */\n getFilterIndex: () => number\n /**\n * Returns the current filter value for the column.\n * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/column-filtering#getfiltervalue)\n * @link [Guide](https://tanstack.com/table/v8/docs/guide/column-filtering)\n */\n getFilterValue: () => unknown\n /**\n * Returns whether or not the column is currently filtered.\n * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/column-filtering#getisfiltered)\n * @link [Guide](https://tanstack.com/table/v8/docs/guide/column-filtering)\n */\n getIsFiltered: () => boolean\n /**\n * A function that sets the current filter value for the column. You can pass it a value or an updater function for immutability-safe operations on existing values.\n * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/column-filtering#setfiltervalue)\n * @link [Guide](https://tanstack.com/table/v8/docs/guide/column-filtering)\n */\n setFilterValue: (updater: Updater<any>) => void\n}\n\nexport interface ColumnFiltersRow<TData extends RowData> {\n /**\n * The column filters map for the row. This object tracks whether a row is passing/failing specific filters by their column ID.\n * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/column-filtering#columnfilters)\n * @link [Guide](https://tanstack.com/table/v8/docs/guide/column-filtering)\n */\n columnFilters: Record<string, boolean>\n /**\n * The column filters meta map for the row. This object tracks any filter meta for a row as optionally provided during the filtering process.\n * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/column-filtering#columnfiltersmeta)\n * @link [Guide](https://tanstack.com/table/v8/docs/guide/column-filtering)\n */\n columnFiltersMeta: Record<string, FilterMeta>\n}\n\ninterface ColumnFiltersOptionsBase<TData extends RowData> {\n /**\n * Enables/disables **column** filtering for all columns.\n * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/column-filtering#enablecolumnfilters)\n * @link [Guide](https://tanstack.com/table/v8/docs/guide/column-filtering)\n */\n enableColumnFilters?: boolean\n /**\n * Enables/disables all filtering for the table.\n * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/column-filtering#enablefilters)\n * @link [Guide](https://tanstack.com/table/v8/docs/guide/column-filtering)\n */\n enableFilters?: boolean\n /**\n * By default, filtering is done from parent rows down (so if a parent row is filtered out, all of its children will be filtered out as well). Setting this option to `true` will cause filtering to be done from leaf rows up (which means parent rows will be included so long as one of their child or grand-child rows is also included).\n * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/column-filtering#filterfromleafrows)\n * @link [Guide](https://tanstack.com/table/v8/docs/guide/column-filtering)\n */\n filterFromLeafRows?: boolean\n /**\n * If provided, this function is called **once** per table and should return a **new function** which will calculate and return the row model for the table when it's filtered.\n * - For server-side filtering, this function is unnecessary and can be ignored since the server should already return the filtered row model.\n * - For client-side filtering, this function is required. A default implementation is provided via any table adapter's `{ getFilteredRowModel }` export.\n * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/column-filtering#getfilteredrowmodel)\n * @link [Guide](https://tanstack.com/table/v8/docs/guide/column-filtering)\n */\n getFilteredRowModel?: (table: Table<any>) => () => RowModel<any>\n /**\n * Disables the `getFilteredRowModel` from being used to filter data. This may be useful if your table needs to dynamically support both client-side and server-side filtering.\n * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/column-filtering#manualfiltering)\n * @link [Guide](https://tanstack.com/table/v8/docs/guide/column-filtering)\n */\n manualFiltering?: boolean\n /**\n * By default, filtering is done for all rows (max depth of 100), no matter if they are root level parent rows or the child leaf rows of a parent row. Setting this option to `0` will cause filtering to only be applied to the root level parent rows, with all sub-rows remaining unfiltered. Similarly, setting this option to `1` will cause filtering to only be applied to child leaf rows 1 level deep, and so on.\n\n * This is useful for situations where you want a row's entire child hierarchy to be visible regardless of the applied filter.\n * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/column-filtering#maxleafrowfilterdepth)\n * @link [Guide](https://tanstack.com/table/v8/docs/guide/column-filtering)\n */\n maxLeafRowFilterDepth?: number\n /**\n * If provided, this function will be called with an `updaterFn` when `state.columnFilters` changes. This overrides the default internal state management, so you will need to persist the state change either fully or partially outside of the table.\n * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/column-filtering#oncolumnfilterschange)\n * @link [Guide](https://tanstack.com/table/v8/docs/guide/column-filtering)\n */\n onColumnFiltersChange?: OnChangeFn<ColumnFiltersState>\n}\n\ntype ResolvedFilterFns = keyof FilterFns extends never\n ? {\n filterFns?: Record<string, FilterFn<any>>\n }\n : {\n filterFns: Record<keyof FilterFns, FilterFn<any>>\n }\n\nexport interface ColumnFiltersOptions<TData extends RowData>\n extends ColumnFiltersOptionsBase<TData>,\n ResolvedFilterFns {}\n\nexport interface ColumnFiltersInstance<TData extends RowData> {\n _getFilteredRowModel?: () => RowModel<TData>\n /**\n * Returns the row model for the table after **column** filtering has been applied.\n * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/column-filtering#getfilteredrowmodel)\n * @link [Guide](https://tanstack.com/table/v8/docs/guide/column-filtering)\n */\n getFilteredRowModel: () => RowModel<TData>\n /**\n * Returns the row model for the table before any **column** filtering has been applied.\n * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/column-filtering#getprefilteredrowmodel)\n * @link [Guide](https://tanstack.com/table/v8/docs/guide/column-filtering)\n */\n getPreFilteredRowModel: () => RowModel<TData>\n /**\n * Resets the **columnFilters** state to `initialState.columnFilters`, or `true` can be passed to force a default blank state reset to `[]`.\n * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/column-filtering#resetcolumnfilters)\n * @link [Guide](https://tanstack.com/table/v8/docs/guide/column-filtering)\n */\n resetColumnFilters: (defaultState?: boolean) => void\n /**\n * Resets the **globalFilter** state to `initialState.globalFilter`, or `true` can be passed to force a default blank state reset to `undefined`.\n * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/column-filtering#resetglobalfilter)\n * @link [Guide](https://tanstack.com/table/v8/docs/guide/column-filtering)\n */\n resetGlobalFilter: (defaultState?: boolean) => void\n /**\n * Sets or updates the `state.columnFilters` state.\n * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/column-filtering#setcolumnfilters)\n * @link [Guide](https://tanstack.com/table/v8/docs/guide/column-filtering)\n */\n setColumnFilters: (updater: Updater<ColumnFiltersState>) => void\n /**\n * Sets or updates the `state.globalFilter` state.\n * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/column-filtering#setglobalfilter)\n * @link [Guide](https://tanstack.com/table/v8/docs/guide/column-filtering)\n */\n setGlobalFilter: (updater: Updater<any>) => void\n}\n\n//\n\nexport const ColumnFiltering: TableFeature = {\n getDefaultColumnDef: <\n TData extends RowData,\n >(): ColumnFiltersColumnDef<TData> => {\n return {\n filterFn: 'auto',\n }\n },\n\n getInitialState: (state): ColumnFiltersTableState => {\n return {\n columnFilters: [],\n ...state,\n }\n },\n\n getDefaultOptions: <TData extends RowData>(\n table: Table<TData>\n ): ColumnFiltersOptions<TData> => {\n return {\n onColumnFiltersChange: makeStateUpdater('columnFilters', table),\n filterFromLeafRows: false,\n maxLeafRowFilterDepth: 100,\n } as ColumnFiltersOptions<TData>\n },\n\n createColumn: <TData extends RowData>(\n column: Column<TData, unknown>,\n table: Table<TData>\n ): void => {\n column.getAutoFilterFn = () => {\n const firstRow = table.getCoreRowModel().flatRows[0]\n\n const value = firstRow?.getValue(column.id)\n\n if (typeof value === 'string') {\n return filterFns.includesString\n }\n\n if (typeof value === 'number') {\n return filterFns.inNumberRange\n }\n\n if (typeof value === 'boolean') {\n return filterFns.equals\n }\n\n if (value !== null && typeof value === 'object') {\n return filterFns.equals\n }\n\n if (Array.isArray(value)) {\n return filterFns.arrIncludes\n }\n\n return filterFns.weakEquals\n }\n column.getFilterFn = () => {\n return isFunction(column.columnDef.filterFn)\n ? column.columnDef.filterFn\n : column.columnDef.filterFn === 'auto'\n ? column.getAutoFilterFn()\n : // @ts-ignore\n table.options.filterFns?.[column.columnDef.filterFn as string] ??\n filterFns[column.columnDef.filterFn as BuiltInFilterFn]\n }\n column.getCanFilter = () => {\n return (\n (column.columnDef.enableColumnFilter ?? true) &&\n (table.options.enableColumnFilters ?? true) &&\n (table.options.enableFilters ?? true) &&\n !!column.accessorFn\n )\n }\n\n column.getIsFiltered = () => column.getFilterIndex() > -1\n\n column.getFilterValue = () =>\n table.getState().columnFilters?.find(d => d.id === column.id)?.value\n\n column.getFilterIndex = () =>\n table.getState().columnFilters?.findIndex(d => d.id === column.id) ?? -1\n\n column.setFilterValue = value => {\n table.setColumnFilters(old => {\n const filterFn = column.getFilterFn()\n const previousFilter = old?.find(d => d.id === column.id)\n\n const newFilter = functionalUpdate(\n value,\n previousFilter ? previousFilter.value : undefined\n )\n\n //\n if (\n shouldAutoRemoveFilter(filterFn as FilterFn<TData>, newFilter, column)\n ) {\n return old?.filter(d => d.id !== column.id) ?? []\n }\n\n const newFilterObj = { id: column.id, value: newFilter }\n\n if (previousFilter) {\n return (\n old?.map(d => {\n if (d.id === column.id) {\n return newFilterObj\n }\n return d\n }) ?? []\n )\n }\n\n if (old?.length) {\n return [...old, newFilterObj]\n }\n\n return [newFilterObj]\n })\n }\n },\n\n createRow: <TData extends RowData>(\n row: Row<TData>,\n _table: Table<TData>\n ): void => {\n row.columnFilters = {}\n row.columnFiltersMeta = {}\n },\n\n createTable: <TData extends RowData>(table: Table<TData>): void => {\n table.setColumnFilters = (updater: Updater<ColumnFiltersState>) => {\n const leafColumns = table.getAllLeafColumns()\n\n const updateFn = (old: ColumnFiltersState) => {\n return functionalUpdate(updater, old)?.filter(filter => {\n const column = leafColumns.find(d => d.id === filter.id)\n\n if (column) {\n const filterFn = column.getFilterFn()\n\n if (shouldAutoRemoveFilter(filterFn, filter.value, column)) {\n return false\n }\n }\n\n return true\n })\n }\n\n table.options.onColumnFiltersChange?.(updateFn)\n }\n\n table.resetColumnFilters = defaultState => {\n table.setColumnFilters(\n defaultState ? [] : table.initialState?.columnFilters ?? []\n )\n }\n\n table.getPreFilteredRowModel = () => table.getCoreRowModel()\n table.getFilteredRowModel = () => {\n if (!table._getFilteredRowModel && table.options.getFilteredRowModel) {\n table._getFilteredRowModel = table.options.getFilteredRowModel(table)\n }\n\n if (table.options.manualFiltering || !table._getFilteredRowModel) {\n return table.getPreFilteredRowModel()\n }\n\n return table._getFilteredRowModel()\n }\n },\n}\n\nexport function shouldAutoRemoveFilter<TData extends RowData>(\n filterFn?: FilterFn<TData>,\n value?: any,\n column?: Column<TData, unknown>\n) {\n return (\n (filterFn && filterFn.autoRemove\n ? filterFn.autoRemove(value, column)\n : false) ||\n typeof value === 'undefined' ||\n (typeof value === 'string' && !value)\n )\n}\n","import { AggregationFn } from './features/ColumnGrouping'\nimport { isNumberArray } from './utils'\n\nconst sum: AggregationFn<any> = (columnId, _leafRows, childRows) => {\n // It's faster to just add the aggregations together instead of\n // process leaf nodes individually\n return childRows.reduce((sum, next) => {\n const nextValue = next.getValue(columnId)\n return sum + (typeof nextValue === 'number' ? nextValue : 0)\n }, 0)\n}\n\nconst min: AggregationFn<any> = (columnId, _leafRows, childRows) => {\n let min: number | undefined\n\n childRows.forEach(row => {\n const value = row.getValue<number>(columnId)\n\n if (\n value != null &&\n (min! > value || (min === undefined && value >= value))\n ) {\n min = value\n }\n })\n\n return min\n}\n\nconst max: AggregationFn<any> = (columnId, _leafRows, childRows) => {\n let max: number | undefined\n\n childRows.forEach(row => {\n const value = row.getValue<number>(columnId)\n if (\n value != null &&\n (max! < value || (max === undefined && value >= value))\n ) {\n max = value\n }\n })\n\n return max\n}\n\nconst extent: AggregationFn<any> = (columnId, _leafRows, childRows) => {\n let min: number | undefined\n let max: number | undefined\n\n childRows.forEach(row => {\n const value = row.getValue<number>(columnId)\n if (value != null) {\n if (min === undefined) {\n if (value >= value) min = max = value\n } else {\n if (min > value) min = value\n if (max! < value) max = value\n }\n }\n })\n\n return [min, max]\n}\n\nconst mean: AggregationFn<any> = (columnId, leafRows) => {\n let count = 0\n let sum = 0\n\n leafRows.forEach(row => {\n let value = row.getValue<number>(columnId)\n if (value != null && (value = +value) >= value) {\n ++count, (sum += value)\n }\n })\n\n if (count) return sum / count\n\n return\n}\n\nconst median: AggregationFn<any> = (columnId, leafRows) => {\n if (!leafRows.length) {\n return\n }\n\n const values = leafRows.map(row => row.getValue(columnId))\n if (!isNumberArray(values)) {\n return\n }\n if (values.length === 1) {\n return values[0]\n }\n\n const mid = Math.floor(values.length / 2)\n const nums = values.sort((a, b) => a - b)\n return values.length % 2 !== 0 ? nums[mid] : (nums[mid - 1]! + nums[mid]!) / 2\n}\n\nconst unique: AggregationFn<any> = (columnId, leafRows) => {\n return Array.from(new Set(leafRows.map(d => d.getValue(columnId))).values())\n}\n\nconst uniqueCount: AggregationFn<any> = (columnId, leafRows) => {\n return new Set(leafRows.map(d => d.getValue(columnId))).size\n}\n\nconst count: AggregationFn<any> = (_columnId, leafRows) => {\n return leafRows.length\n}\n\nexport const aggregationFns = {\n sum,\n min,\n max,\n extent,\n mean,\n median,\n unique,\n uniqueCount,\n count,\n}\n\nexport type BuiltInAggregationFn = keyof typeof aggregationFns\n","import { RowModel } from '..'\nimport { BuiltInAggregationFn, aggregationFns } from '../aggregationFns'\nimport {\n AggregationFns,\n Cell,\n Column,\n ColumnDefTemplate,\n OnChangeFn,\n Row,\n RowData,\n Table,\n TableFeature,\n Updater,\n} from '../types'\nimport { isFunction, makeStateUpdater } from '../utils'\n\nexport type GroupingState = string[]\n\nexport interface GroupingTableState {\n grouping: GroupingState\n}\n\nexport type AggregationFn<TData extends RowData> = (\n columnId: string,\n leafRows: Row<TData>[],\n childRows: Row<TData>[]\n) => any\n\nexport type CustomAggregationFns = Record<string, AggregationFn<any>>\n\nexport type AggregationFnOption<TData extends RowData> =\n | 'auto'\n | keyof AggregationFns\n | BuiltInAggregationFn\n | AggregationFn<TData>\n\nexport interface GroupingColumnDef<TData extends RowData, TValue> {\n /**\n * The cell to display each row for the column if the cell is an aggregate. If a function is passed, it will be passed a props object with the context of the cell and should return the property type for your adapter (the exact type depends on the adapter being used).\n * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/grouping#aggregatedcell)\n * @link [Guide](https://tanstack.com/table/v8/docs/guide/grouping)\n */\n aggregatedCell?: ColumnDefTemplate<\n ReturnType<Cell<TData, TValue>['getContext']>\n >\n /**\n * The resolved aggregation function for the column.\n * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/grouping#aggregationfn)\n * @link [Guide](https://tanstack.com/table/v8/docs/guide/grouping)\n */\n aggregationFn?: AggregationFnOption<TData>\n /**\n * Enables/disables grouping for this column.\n * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/grouping#enablegrouping)\n * @link [Guide](https://tanstack.com/table/v8/docs/guide/grouping)\n */\n enableGrouping?: boolean\n /**\n * Specify a value to be used for grouping rows on this column. If this option is not specified, the value derived from `accessorKey` / `accessorFn` will be used instead.\n * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/grouping#getgroupingvalue)\n * @link [Guide](https://tanstack.com/table/v8/docs/guide/grouping)\n */\n getGroupingValue?: (row: TData) => any\n}\n\nexport interface GroupingColumn<TData extends RowData> {\n /**\n * Returns the aggregation function for the column.\n * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/grouping#getaggregationfn)\n * @link [Guide](https://tanstack.com/table/v8/docs/guide/grouping)\n */\n getAggregationFn: () => AggregationFn<TData> | undefined\n /**\n * Returns the automatically inferred aggregation function for the column.\n * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/grouping#getautoaggregationfn)\n * @link [Guide](https://tanstack.com/table/v8/docs/guide/grouping)\n */\n getAutoAggregationFn: () => AggregationFn<TData> | undefined\n /**\n * Returns whether or not the column can be grouped.\n * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/grouping#getcangroup)\n * @link [Guide](https://tanstack.com/table/v8/docs/guide/grouping)\n */\n getCanGroup: () => boolean\n /**\n * Returns the index of the column in the grouping state.\n * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/grouping#getgroupedindex)\n * @link [Guide](https://tanstack.com/table/v8/docs/guide/grouping)\n */\n getGroupedIndex: () => number\n /**\n * Returns whether or not the column is currently grouped.\n * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/grouping#getisgrouped)\n * @link [Guide](https://tanstack.com/table/v8/docs/guide/grouping)\n */\n getIsGrouped: () => boolean\n /**\n * Returns a function that toggles the grouping state of the column. This is useful for passing to the `onClick` prop of a button.\n * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/grouping#gettogglegroupinghandler)\n * @link [Guide](https://tanstack.com/table/v8/docs/guide/grouping)\n */\n getToggleGroupingHandler: () => () => void\n /**\n * Toggles the grouping state of the column.\n * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/grouping#togglegrouping)\n * @link [Guide](https://tanstack.com/table/v8/docs/guide/grouping)\n */\n toggleGrouping: () => void\n}\n\nexport interface GroupingRow {\n _groupingValuesCache: Record<string, any>\n /**\n * Returns the grouping value for any row and column (including leaf rows).\n * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/grouping#getgroupingvalue)\n * @link [Guide](https://tanstack.com/table/v8/docs/guide/grouping)\n */\n getGroupingValue: (columnId: string) => unknown\n /**\n * Returns whether or not the row is currently grouped.\n * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/grouping#getisgrouped)\n * @link [Guide](https://tanstack.com/table/v8/docs/guide/grouping)\n */\n getIsGrouped: () => boolean\n /**\n * If this row is grouped, this is the id of the column that this row is grouped by.\n * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/grouping#groupingcolumnid)\n * @link [Guide](https://tanstack.com/table/v8/docs/guide/grouping)\n */\n groupingColumnId?: string\n /**\n * If this row is grouped, this is the unique/shared value for the `groupingColumnId` for all of the rows in this group.\n * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/grouping#groupingvalue)\n * @link [Guide](https://tanstack.com/table/v8/docs/guide/grouping)\n */\n groupingValue?: unknown\n}\n\nexport interface GroupingCell {\n /**\n * Returns whether or not the cell is currently aggregated.\n * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/grouping#getisaggregated)\n * @link [Guide](https://tanstack.com/table/v8/docs/guide/grouping)\n */\n getIsAggregated: () => boolean\n /**\n * Returns whether or not the cell is currently grouped.\n * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/grouping#getisgrouped)\n * @link [Guide](https://tanstack.com/table/v8/docs/guide/grouping)\n */\n getIsGrouped: () => boolean\n /**\n * Returns whether or not the cell is currently a placeholder cell.\n * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/grouping#getisplaceholder)\n * @link [Guide](https://tanstack.com/table/v8/docs/guide/grouping)\n */\n getIsPlaceholder: () => boolean\n}\n\nexport interface ColumnDefaultOptions {\n enableGrouping: boolean\n onGroupingChange: OnChangeFn<GroupingState>\n}\n\ninterface GroupingOptionsBase {\n /**\n * Enables/disables grouping for the table.\n * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/grouping#enablegrouping)\n * @link [Guide](https://tanstack.com/table/v8/docs/guide/grouping)\n */\n enableGrouping?: boolean\n /**\n * Returns the row model after grouping has taken place, but no further.\n * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/grouping#getgroupedrowmodel)\n * @link [Guide](https://tanstack.com/table/v8/docs/guide/grouping)\n */\n getGroupedRowModel?: (table: Table<any>) => () => RowModel<any>\n /**\n * Grouping columns are automatically reordered by default to the start of the columns list. If you would rather remove them or leave them as-is, set the appropriate mode here.\n * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/grouping#groupedcolumnmode)\n * @link [Guide](https://tanstack.com/table/v8/docs/guide/grouping)\n */\n groupedColumnMode?: false | 'reorder' | 'remove'\n /**\n * Enables manual grouping. If this option is set to `true`, the table will not automatically group rows using `getGroupedRowModel()` and instead will expect you to manually group the rows before passing them to the table. This is useful if you are doing server-side grouping and aggregation.\n * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/grouping#manualgrouping)\n * @link [Guide](https://tanstack.com/table/v8/docs/guide/grouping)\n */\n manualGrouping?: boolean\n /**\n * If this function is provided, it will be called when the grouping state changes and you will be expected to manage the state yourself. You can pass the managed state back to the table via the `tableOptions.state.grouping` option.\n * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/grouping#ongroupingchange)\n * @link [Guide](https://tanstack.com/table/v8/docs/guide/grouping)\n */\n onGroupingChange?: OnChangeFn<GroupingState>\n}\n\ntype ResolvedAggregationFns = keyof AggregationFns extends never\n ? {\n aggregationFns?: Record<string, AggregationFn<any>>\n }\n : {\n aggregationFns: Record<keyof AggregationFns, AggregationFn<any>>\n }\n\nexport interface GroupingOptions\n extends GroupingOptionsBase,\n ResolvedAggregationFns {}\n\nexport type GroupingColumnMode = false | 'reorder' | 'remove'\n\nexport interface GroupingInstance<TData extends RowData> {\n _getGroupedRowModel?: () => RowModel<TData>\n /**\n * Returns the row model for the table after grouping has been applied.\n * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/grouping#getgroupedrowmodel)\n * @link [Guide](https://tanstack.com/table/v8/docs/guide/grouping)\n */\n getGroupedRowModel: () => RowModel<TData>\n /**\n * Returns the row model for the table before any grouping has been applied.\n * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/grouping#getpregroupedrowmodel)\n * @link [Guide](https://tanstack.com/table/v8/docs/guide/grouping)\n */\n getPreGroupedRowModel: () => RowModel<TData>\n /**\n * Resets the **grouping** state to `initialState.grouping`, or `true` can be passed to force a default blank state reset to `[]`.\n * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/grouping#resetgrouping)\n * @link [Guide](https://tanstack.com/table/v8/docs/guide/grouping)\n */\n resetGrouping: (defaultState?: boolean) => void\n /**\n * Updates the grouping state of the table via an update function or value.\n * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/grouping#setgrouping)\n * @link [Guide](https://tanstack.com/table/v8/docs/guide/grouping)\n */\n setGrouping: (updater: Updater<GroupingState>) => void\n}\n\n//\n\nexport const ColumnGrouping: TableFeature = {\n getDefaultColumnDef: <TData extends RowData>(): GroupingColumnDef<\n TData,\n unknown\n > => {\n return {\n aggregatedCell: props => (props.getValue() as any)?.toString?.() ?? null,\n aggregationFn: 'auto',\n }\n },\n\n getInitialState: (state): GroupingTableState => {\n return {\n grouping: [],\n ...state,\n }\n },\n\n getDefaultOptions: <TData extends RowData>(\n table: Table<TData>\n ): GroupingOptions => {\n return {\n onGroupingChange: makeStateUpdater('grouping', table),\n groupedColumnMode: 'reorder',\n }\n },\n\n createColumn: <TData extends RowData, TValue>(\n column: Column<TData, TValue>,\n table: Table<TData>\n ): void => {\n column.toggleGrouping = () => {\n table.setGrouping(old => {\n // Find any existing grouping for this column\n if (old?.includes(column.id)) {\n return old.filter(d => d !== column.id)\n }\n\n return [...(old ?? []), column.id]\n })\n }\n\n column.getCanGroup = () => {\n return (\n (column.columnDef.enableGrouping ?? true) &&\n (table.options.enableGrouping ?? true) &&\n (!!column.accessorFn || !!column.columnDef.getGroupingValue)\n )\n }\n\n column.getIsGrouped = () => {\n return table.getState().grouping?.includes(column.id)\n }\n\n column.getGroupedIndex = () => table.getState().grouping?.indexOf(column.id)\n\n column.getToggleGroupingHandler = () => {\n const canGroup = column.getCanGroup()\n\n return () => {\n if (!canGroup) return\n column.toggleGrouping()\n }\n }\n column.getAutoAggregationFn = () => {\n const firstRow = table.getCoreRowModel().flatRows[0]\n\n const value = firstRow?.getValue(column.id)\n\n if (typeof value === 'number') {\n return aggregationFns.sum\n }\n\n if (Object.prototype.toString.call(value) === '[object Date]') {\n return aggregationFns.extent\n }\n }\n column.getAggregationFn = () => {\n if (!column) {\n throw new Error()\n }\n\n return isFunction(column.columnDef.aggregationFn)\n ? column.columnDef.aggregationFn\n : column.columnDef.aggregationFn === 'auto'\n ? column.getAutoAggregationFn()\n : table.options.aggregationFns?.[\n column.columnDef.aggregationFn as string\n ] ??\n aggregationFns[\n column.columnDef.aggregationFn as BuiltInAggregationFn\n ]\n }\n },\n\n createTable: <TData extends RowData>(table: Table<TData>): void => {\n table.setGrouping = updater => table.options.onGroupingChange?.(updater)\n\n table.resetGrouping = defaultState => {\n table.setGrouping(defaultState ? [] : table.initialState?.grouping ?? [])\n }\n\n table.getPreGroupedRowModel = () => table.getFilteredRowModel()\n table.getGroupedRowModel = () => {\n if (!table._getGroupedRowModel && table.options.getGroupedRowModel) {\n table._getGroupedRowModel = table.options.getGroupedRowModel(table)\n }\n\n if (table.options.manualGrouping || !table._getGroupedRowModel) {\n return table.getPreGroupedRowModel()\n }\n\n return table._getGroupedRowModel()\n }\n },\n\n createRow: <TData extends RowData>(\n row: Row<TData>,\n table: Table<TData>\n ): void => {\n row.getIsGrouped = () => !!row.groupingColumnId\n row.getGroupingValue = columnId => {\n if (row._groupingValuesCache.hasOwnProperty(columnId)) {\n return row._groupingValuesCache[columnId]\n }\n\n const column = table.getColumn(columnId)\n\n if (!column?.columnDef.getGroupingValue) {\n return row.getValue(columnId)\n }\n\n row._groupingValuesCache[columnId] = column.columnDef.getGroupingValue(\n row.original\n )\n\n return row._groupingValuesCache[columnId]\n }\n row._groupingValuesCache = {}\n },\n\n createCell: <TData extends RowData, TValue>(\n cell: Cell<TData, TValue>,\n column: Column<TData, TValue>,\n row: Row<TData>,\n table: Table<TData>\n ): void => {\n const getRenderValue = () =>\n cell.getValue() ?? table.options.renderFallbackValue\n\n cell.getIsGrouped = () =>\n column.getIsGrouped() && column.id === row.groupingColumnId\n cell.getIsPlaceholder = () => !cell.getIsGrouped() && column.getIsGrouped()\n cell.getIsAggregated = () =>\n !cell.getIsGrouped() && !cell.getIsPlaceholder() && !!row.subRows?.length\n },\n}\n\nexport function orderColumns<TData extends RowData>(\n leafColumns: Column<TData, unknown>[],\n grouping: string[],\n groupedColumnMode?: GroupingColumnMode\n) {\n if (!grouping?.length || !groupedColumnMode) {\n return leafColumns\n }\n\n const nonGroupingColumns = leafColumns.filter(\n col => !grouping.includes(col.id)\n )\n\n if (groupedColumnMode === 'remove') {\n return nonGroupingColumns\n }\n\n const groupingColumns = grouping\n .map(g => leafColumns.find(col => col.id === g)!)\n .filter(Boolean)\n\n return [...groupingColumns, ...nonGroupingColumns]\n}\n","import { getMemoOptions, makeStateUpdater, memo } from '../utils'\n\nimport {\n Column,\n OnChangeFn,\n RowData,\n Table,\n TableFeature,\n Updater,\n} from '../types'\n\nimport { orderColumns } from './ColumnGrouping'\nimport { ColumnPinningPosition, _getVisibleLeafColumns } from '..'\n\nexport interface ColumnOrderTableState {\n columnOrder: ColumnOrderState\n}\n\nexport type ColumnOrderState = string[]\n\nexport interface ColumnOrderOptions {\n /**\n * If provided, this function will be called with an `updaterFn` when `state.columnOrder` changes. This overrides the default internal state management, so you will need to persist the state change either fully or partially outside of the table.\n * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/column-ordering#oncolumnorderchange)\n * @link [Guide](https://tanstack.com/table/v8/docs/guide/column-ordering)\n */\n onColumnOrderChange?: OnChangeFn<ColumnOrderState>\n}\n\nexport interface ColumnOrderColumn {\n /**\n * Returns the index of the column in the order of the visible columns. Optionally pass a `position` parameter to get the index of the column in a sub-section of the table\n * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/column-ordering#getindex)\n * @link [Guide](https://tanstack.com/table/v8/docs/guide/column-ordering)\n */\n getIndex: (position?: ColumnPinningPosition | 'center') => number\n /**\n * Returns `true` if the column is the first column in the order of the visible columns. Optionally pass a `position` parameter to check if the column is the first in a sub-section of the table.\n * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/column-ordering#getisfirstcolumn)\n * @link [Guide](https://tanstack.com/table/v8/docs/guide/column-ordering)\n */\n getIsFirstColumn: (position?: ColumnPinningPosition | 'center') => boolean\n /**\n * Returns `true` if the column is the last column in the order of the visible columns. Optionally pass a `position` parameter to check if the column is the last in a sub-section of the table.\n * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/column-ordering#getislastcolumn)\n * @link [Guide](https://tanstack.com/table/v8/docs/guide/column-ordering)\n */\n getIsLastColumn: (position?: ColumnPinningPosition | 'center') => boolean\n}\n\nexport interface ColumnOrderDefaultOptions {\n onColumnOrderChange: OnChangeFn<ColumnOrderState>\n}\n\nexport interface ColumnOrderInstance<TData extends RowData> {\n _getOrderColumnsFn: () => (\n columns: Column<TData, unknown>[]\n ) => Column<TData, unknown>[]\n /**\n * Resets the **columnOrder** state to `initialState.columnOrder`, or `true` can be passed to force a default blank state reset to `[]`.\n * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/column-ordering#resetcolumnorder)\n * @link [Guide](https://tanstack.com/table/v8/docs/guide/column-ordering)\n */\n resetColumnOrder: (defaultState?: boolean) => void\n /**\n * Sets or updates the `state.columnOrder` state.\n * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/column-ordering#setcolumnorder)\n * @link [Guide](https://tanstack.com/table/v8/docs/guide/column-ordering)\n */\n setColumnOrder: (updater: Updater<ColumnOrderState>) => void\n}\n\n//\n\nexport const ColumnOrdering: TableFeature = {\n getInitialState: (state): ColumnOrderTableState => {\n return {\n columnOrder: [],\n ...state,\n }\n },\n\n getDefaultOptions: <TData extends RowData>(\n table: Table<TData>\n ): ColumnOrderDefaultOptions => {\n return {\n onColumnOrderChange: makeStateUpdater('columnOrder', table),\n }\n },\n\n createColumn: <TData extends RowData>(\n column: Column<TData, unknown>,\n table: Table<TData>\n ): void => {\n column.getIndex = memo(\n position => [_getVisibleLeafColumns(table, position)],\n columns => columns.findIndex(d => d.id === column.id),\n getMemoOptions(table.options, 'debugColumns', 'getIndex')\n )\n column.getIsFirstColumn = position => {\n const columns = _getVisibleLeafColumns(table, position)\n return columns[0]?.id === column.id\n }\n column.getIsLastColumn = position => {\n const columns = _getVisibleLeafColumns(table, position)\n return columns[columns.length - 1]?.id === column.id\n }\n },\n\n createTable: <TData extends RowData>(table: Table<TData>): void => {\n table.setColumnOrder = updater =>\n table.options.onColumnOrderChange?.(updater)\n table.resetColumnOrder = defaultState => {\n table.setColumnOrder(\n defaultState ? [] : table.initialState.columnOrder ?? []\n )\n }\n table._getOrderColumnsFn = memo(\n () => [\n table.getState().columnOrder,\n table.getState().grouping,\n table.options.groupedColumnMode,\n ],\n (columnOrder, grouping, groupedColumnMode) =>\n (columns: Column<TData, unknown>[]) => {\n // Sort grouped columns to the start of the column list\n // before the headers are built\n let orderedColumns: Column<TData, unknown>[] = []\n\n // If there is no order, return the normal columns\n if (!columnOrder?.length) {\n orderedColumns = columns\n } else {\n const columnOrderCopy = [...columnOrder]\n\n // If there is an order, make a copy of the columns\n const columnsCopy = [...columns]\n\n // And make a new ordered array of the columns\n\n // Loop over the columns and place them in order into the new array\n while (columnsCopy.length && columnOrderCopy.length) {\n const targetColumnId = columnOrderCopy.shift()\n const foundIndex = columnsCopy.findIndex(\n d => d.id === targetColumnId\n )\n if (foundIndex > -1) {\n orderedColumns.push(columnsCopy.splice(foundIndex, 1)[0]!)\n }\n }\n\n // If there are any columns left, add them to the end\n orderedColumns = [...orderedColumns, ...columnsCopy]\n }\n\n return orderColumns(orderedColumns, grouping, groupedColumnMode)\n },\n getMemoOptions(table.options, 'debugTable', '_getOrderColumnsFn')\n )\n },\n}\n","import {\n OnChangeFn,\n Updater,\n Table,\n Column,\n Row,\n Cell,\n RowData,\n TableFeature,\n} from '../types'\nimport { getMemoOptions, makeStateUpdater, memo } from '../utils'\n\nexport type ColumnPinningPosition = false | 'left' | 'right'\n\nexport interface ColumnPinningState {\n left?: string[]\n right?: string[]\n}\n\nexport interface ColumnPinningTableState {\n columnPinning: ColumnPinningState\n}\n\nexport interface ColumnPinningOptions {\n /**\n * Enables/disables column pinning for the table. Defaults to `true`.\n * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/column-pinning#enablecolumnpinning)\n * @link [Guide](https://tanstack.com/table/v8/docs/guide/column-pinning)\n */\n enableColumnPinning?: boolean\n /**\n * @deprecated Use `enableColumnPinning` or `enableRowPinning` instead.\n * Enables/disables all pinning for the table. Defaults to `true`.\n * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/column-pinning#enablepinning)\n * @link [Guide](https://tanstack.com/table/v8/docs/guide/column-pinning)\n */\n enablePinning?: boolean\n /**\n * If provided, this function will be called with an `updaterFn` when `state.columnPinning` changes. This overrides the default internal state management, so you will also need to supply `state.columnPinning` from your own managed state.\n * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/column-pinning#oncolumnpinningchange)\n * @link [Guide](https://tanstack.com/table/v8/docs/guide/oncolumnpinningchange)\n */\n onColumnPinningChange?: OnChangeFn<ColumnPinningState>\n}\n\nexport interface ColumnPinningDefaultOptions {\n onColumnPinningChange: OnChangeFn<ColumnPinningState>\n}\n\nexport interface ColumnPinningColumnDef {\n /**\n * Enables/disables column pinning for this column. Defaults to `true`.\n * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/column-pinning#enablepinning-1)\n * @link [Guide](https://tanstack.com/table/v8/docs/guide/column-pinning)\n */\n enablePinning?: boolean\n}\n\nexport interface ColumnPinningColumn {\n /**\n * Returns whether or not the column can be pinned.\n * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/column-pinning#getcanpin)\n * @link [Guide](https://tanstack.com/table/v8/docs/guide/column-pinning)\n */\n getCanPin: () => boolean\n /**\n * Returns the pinned position of the column. (`'left'`, `'right'` or `false`)\n * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/column-pinning#getispinned)\n * @link [Guide](https://tanstack.com/table/v8/docs/guide/column-pinning)\n */\n getIsPinned: () => ColumnPinningPosition\n /**\n * Returns the numeric pinned index of the column within a pinned column group.\n * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/column-pinning#getpinnedindex)\n * @link [Guide](https://tanstack.com/table/v8/docs/guide/column-pinning)\n */\n getPinnedIndex: () => number\n /**\n * Pins a column to the `'left'` or `'right'`, or unpins the column to the center if `false` is passed.\n * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/column-pinning#pin)\n * @link [Guide](https://tanstack.com/table/v8/docs/guide/column-pinning)\n */\n pin: (position: ColumnPinningPosition) => void\n}\n\nexport interface ColumnPinningRow<TData extends RowData> {\n /**\n * Returns all center pinned (unpinned) leaf cells in the row.\n * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/column-pinning#getcentervisiblecells)\n * @link [Guide](https://tanstack.com/table/v8/docs/guide/column-pinning)\n */\n getCenterVisibleCells: () => Cell<TData, unknown>[]\n /**\n * Returns all left pinned leaf cells in the row.\n * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/column-pinning#getleftvisiblecells)\n * @link [Guide](https://tanstack.com/table/v8/docs/guide/column-pinning)\n */\n getLeftVisibleCells: () => Cell<TData, unknown>[]\n /**\n * Returns all right pinned leaf cells in the row.\n * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/column-pinning#getrightvisiblecells)\n * @link [Guide](https://tanstack.com/table/v8/docs/guide/column-pinning)\n */\n getRightVisibleCells: () => Cell<TData, unknown>[]\n}\n\nexport interface ColumnPinningInstance<TData extends RowData> {\n /**\n * Returns all center pinned (unpinned) leaf columns.\n * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/column-pinning#getcenterleafcolumns)\n * @link [Guide](https://tanstack.com/table/v8/docs/guide/column-pinning)\n */\n getCenterLeafColumns: () => Column<TData, unknown>[]\n /**\n * Returns whether or not any columns are pinned. Optionally specify to only check for pinned columns in either the `left` or `right` position.\n * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/column-pinning#getissomecolumnspinned)\n * @link [Guide](https://tanstack.com/table/v8/docs/guide/column-pinning)\n */\n getIsSomeColumnsPinned: (position?: ColumnPinningPosition) => boolean\n /**\n * Returns all left pinned leaf columns.\n * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/column-pinning#getleftleafcolumns)\n * @link [Guide](https://tanstack.com/table/v8/docs/guide/column-pinning)\n */\n getLeftLeafColumns: () => Column<TData, unknown>[]\n /**\n * Returns all right pinned leaf columns.\n * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/column-pinning#getrightleafcolumns)\n * @link [Guide](https://tanstack.com/table/v8/docs/guide/column-pinning)\n */\n getRightLeafColumns: () => Column<TData, unknown>[]\n /**\n * Resets the **columnPinning** state to `initialState.columnPinning`, or `true` can be passed to force a default blank state reset to `{ left: [], right: [], }`.\n * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/column-pinning#resetcolumnpinning)\n * @link [Guide](https://tanstack.com/table/v8/docs/guide/column-pinning)\n */\n resetColumnPinning: (defaultState?: boolean) => void\n /**\n * Sets or updates the `state.columnPinning` state.\n * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/column-pinning#setcolumnpinning)\n * @link [Guide](https://tanstack.com/table/v8/docs/guide/column-pinning)\n */\n setColumnPinning: (updater: Updater<ColumnPinningState>) => void\n}\n\n//\n\nconst getDefaultColumnPinningState = (): ColumnPinningState => ({\n left: [],\n right: [],\n})\n\nexport const ColumnPinning: TableFeature = {\n getInitialState: (state): ColumnPinningTableState => {\n return {\n columnPinning: getDefaultColumnPinningState(),\n ...state,\n }\n },\n\n getDefaultOptions: <TData extends RowData>(\n table: Table<TData>\n ): ColumnPinningDefaultOptions => {\n return {\n onColumnPinningChange: makeStateUpdater('columnPinning', table),\n }\n },\n\n createColumn: <TData extends RowData, TValue>(\n column: Column<TData, TValue>,\n table: Table<TData>\n ): void => {\n column.pin = position => {\n const columnIds = column\n .getLeafColumns()\n .map(d => d.id)\n .filter(Boolean) as string[]\n\n table.setColumnPinning(old => {\n if (position === 'right') {\n return {\n left: (old?.left ?? []).filter(d => !columnIds?.includes(d)),\n right: [\n ...(old?.right ?? []).filter(d => !columnIds?.includes(d)),\n ...columnIds,\n ],\n }\n }\n\n if (position === 'left') {\n return {\n left: [\n ...(old?.left ?? []).filter(d => !columnIds?.includes(d)),\n ...columnIds,\n ],\n right: (old?.right ?? []).filter(d => !columnIds?.includes(d)),\n }\n }\n\n return {\n left: (old?.left ?? []).filter(d => !columnIds?.includes(d)),\n right: (old?.right ?? []).filter(d => !columnIds?.includes(d)),\n }\n })\n }\n\n column.getCanPin = () => {\n const leafColumns = column.getLeafColumns()\n\n return leafColumns.some(\n d =>\n (d.columnDef.enablePinning ?? true) &&\n (table.options.enableColumnPinning ??\n table.options.enablePinning ??\n true)\n )\n }\n\n column.getIsPinned = () => {\n const leafColumnIds = column.getLeafColumns().map(d => d.id)\n\n const { left, right } = table.getState().columnPinning\n\n const isLeft = leafColumnIds.some(d => left?.includes(d))\n const isRight = leafColumnIds.some(d => right?.includes(d))\n\n return isLeft ? 'left' : isRight ? 'right' : false\n }\n\n column.getPinnedIndex = () => {\n const position = column.getIsPinned()\n\n return position\n ? table.getState().columnPinning?.[position]?.indexOf(column.id) ?? -1\n : 0\n }\n },\n\n createRow: <TData extends RowData>(\n row: Row<TData>,\n table: Table<TData>\n ): void => {\n row.getCenterVisibleCells = memo(\n () => [\n row._getAllVisibleCells(),\n table.getState().columnPinning.left,\n table.getState().columnPinning.right,\n ],\n (allCells, left, right) => {\n const leftAndRight: string[] = [...(left ?? []), ...(right ?? [])]\n\n return allCells.filter(d => !leftAndRight.includes(d.column.id))\n },\n getMemoOptions(table.options, 'debugRows', 'getCenterVisibleCells')\n )\n row.getLeftVisibleCells = memo(\n () => [row._getAllVisibleCells(), table.getState().columnPinning.left],\n (allCells, left) => {\n const cells = (left ?? [])\n .map(columnId => allCells.find(cell => cell.column.id === columnId)!)\n .filter(Boolean)\n .map(d => ({ ...d, position: 'left' }) as Cell<TData, unknown>)\n\n return cells\n },\n getMemoOptions(table.options, 'debugRows', 'getLeftVisibleCells')\n )\n row.getRightVisibleCells = memo(\n () => [row._getAllVisibleCells(), table.getState().columnPinning.right],\n (allCells, right) => {\n const cells = (right ?? [])\n .map(columnId => allCells.find(cell => cell.column.id === columnId)!)\n .filter(Boolean)\n .map(d => ({ ...d, position: 'right' }) as Cell<TData, unknown>)\n\n return cells\n },\n getMemoOptions(table.options, 'debugRows', 'getRightVisibleCells')\n )\n },\n\n createTable: <TData extends RowData>(table: Table<TData>): void => {\n table.setColumnPinning = updater =>\n table.options.onColumnPinningChange?.(updater)\n\n table.resetColumnPinning = defaultState =>\n table.setColumnPinning(\n defaultState\n ? getDefaultColumnPinningState()\n : table.initialState?.columnPinning ?? getDefaultColumnPinningState()\n )\n\n table.getIsSomeColumnsPinned = position => {\n const pinningState = table.getState().columnPinning\n\n if (!position) {\n return Boolean(pinningState.left?.length || pinningState.right?.length)\n }\n return Boolean(pinningState[position]?.length)\n }\n\n table.getLeftLeafColumns = memo(\n () => [table.getAllLeafColumns(), table.getState().columnPinning.left],\n (allColumns, left) => {\n return (left ?? [])\n .map(columnId => allColumns.find(column => column.id === columnId)!)\n .filter(Boolean)\n },\n getMemoOptions(table.options, 'debugColumns', 'getLeftLeafColumns')\n )\n\n table.getRightLeafColumns = memo(\n () => [table.getAllLeafColumns(), table.getState().columnPinning.right],\n (allColumns, right) => {\n return (right ?? [])\n .map(columnId => allColumns.find(column => column.id === columnId)!)\n .filter(Boolean)\n },\n getMemoOptions(table.options, 'debugColumns', 'getRightLeafColumns')\n )\n\n table.getCenterLeafColumns = memo(\n () => [\n table.getAllLeafColumns(),\n table.getState().columnPinning.left,\n table.getState().columnPinning.right,\n ],\n (allColumns, left, right) => {\n const leftAndRight: string[] = [...(left ?? []), ...(right ?? [])]\n\n return allColumns.filter(d => !leftAndRight.includes(d.id))\n },\n getMemoOptions(table.options, 'debugColumns', 'getCenterLeafColumns')\n )\n },\n}\n","import { _getVisibleLeafColumns } from '..'\nimport {\n RowData,\n Column,\n Header,\n OnChangeFn,\n Table,\n Updater,\n TableFeature,\n} from '../types'\nimport { getMemoOptions, makeStateUpdater, memo } from '../utils'\nimport { ColumnPinningPosition } from './ColumnPinning'\n\n//\n\nexport interface ColumnSizingTableState {\n columnSizing: ColumnSizingState\n columnSizingInfo: ColumnSizingInfoState\n}\n\nexport type ColumnSizingState = Record<string, number>\n\nexport interface ColumnSizingInfoState {\n columnSizingStart: [string, number][]\n deltaOffset: null | number\n deltaPercentage: null | number\n isResizingColumn: false | string\n startOffset: null | number\n startSize: null | number\n}\n\nexport type ColumnResizeMode = 'onChange' | 'onEnd'\n\nexport type ColumnResizeDirection = 'ltr' | 'rtl'\n\nexport interface ColumnSizingOptions {\n /**\n * Determines when the columnSizing state is updated. `onChange` updates the state when the user is dragging the resize handle. `onEnd` updates the state when the user releases the resize handle.\n * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/column-sizing#columnresizemode)\n * @link [Guide](https://tanstack.com/table/v8/docs/guide/column-sizing)\n */\n columnResizeMode?: ColumnResizeMode\n /**\n * Enables or disables column resizing for the column.\n * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/column-sizing#enablecolumnresizing)\n * @link [Guide](https://tanstack.com/table/v8/docs/guide/column-sizing)\n */\n enableColumnResizing?: boolean\n /**\n * Enables or disables right-to-left support for resizing the column. defaults to 'ltr'.\n * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/column-sizing#columnResizeDirection)\n * @link [Guide](https://tanstack.com/table/v8/docs/guide/column-sizing)\n */\n columnResizeDirection?: ColumnResizeDirection\n /**\n * If provided, this function will be called with an `updaterFn` when `state.columnSizing` changes. This overrides the default internal state management, so you will also need to supply `state.columnSizing` from your own managed state.\n * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/column-sizing#oncolumnsizingchange)\n * @link [Guide](https://tanstack.com/table/v8/docs/guide/column-sizing)\n */\n onColumnSizingChange?: OnChangeFn<ColumnSizingState>\n /**\n * If provided, this function will be called with an `updaterFn` when `state.columnSizingInfo` changes. This overrides the default internal state management, so you will also need to supply `state.columnSizingInfo` from your own managed state.\n * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/column-sizing#oncolumnsizinginfochange)\n * @link [Guide](https://tanstack.com/table/v8/docs/guide/column-sizing)\n */\n onColumnSizingInfoChange?: OnChangeFn<ColumnSizingInfoState>\n}\n\nexport type ColumnSizingDefaultOptions = Pick<\n ColumnSizingOptions,\n | 'columnResizeMode'\n | 'onColumnSizingChange'\n | 'onColumnSizingInfoChange'\n | 'columnResizeDirection'\n>\n\nexport interface ColumnSizingInstance {\n /**\n * If pinning, returns the total size of the center portion of the table by calculating the sum of the sizes of all unpinned/center leaf-columns.\n * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/column-sizing#getcentertotalsize)\n * @link [Guide](https://tanstack.com/table/v8/docs/guide/column-sizing)\n */\n getCenterTotalSize: () => number\n /**\n * Returns the total size of the left portion of the table by calculating the sum of the sizes of all left leaf-columns.\n * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/column-sizing#getlefttotalsize)\n * @link [Guide](https://tanstack.com/table/v8/docs/guide/column-sizing)\n */\n getLeftTotalSize: () => number\n /**\n * Returns the total size of the right portion of the table by calculating the sum of the sizes of all right leaf-columns.\n * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/column-sizing#getrighttotalsize)\n * @link [Guide](https://tanstack.com/table/v8/docs/guide/column-sizing)\n */\n getRightTotalSize: () => number\n /**\n * Returns the total size of the table by calculating the sum of the sizes of all leaf-columns.\n * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/column-sizing#gettotalsize)\n * @link [Guide](https://tanstack.com/table/v8/docs/guide/column-sizing)\n */\n getTotalSize: () => number\n /**\n * Resets column sizing to its initial state. If `defaultState` is `true`, the default state for the table will be used instead of the initialValue provided to the table.\n * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/column-sizing#resetcolumnsizing)\n * @link [Guide](https://tanstack.com/table/v8/docs/guide/column-sizing)\n */\n resetColumnSizing: (defaultState?: boolean) => void\n /**\n * Resets column sizing info to its initial state. If `defaultState` is `true`, the default state for the table will be used instead of the initialValue provided to the table.\n * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/column-sizing#resetheadersizeinfo)\n * @link [Guide](https://tanstack.com/table/v8/docs/guide/column-sizing)\n */\n resetHeaderSizeInfo: (defaultState?: boolean) => void\n /**\n * Sets the column sizing state using an updater function or a value. This will trigger the underlying `onColumnSizingChange` function if one is passed to the table options, otherwise the state will be managed automatically by the table.\n * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/column-sizing#setcolumnsizing)\n * @link [Guide](https://tanstack.com/table/v8/docs/guide/column-sizing)\n */\n setColumnSizing: (updater: Updater<ColumnSizingState>) => void\n /**\n * Sets the column sizing info state using an updater function or a value. This will trigger the underlying `onColumnSizingInfoChange` function if one is passed to the table options, otherwise the state will be managed automatically by the table.\n * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/column-sizing#setcolumnsizinginfo)\n * @link [Guide](https://tanstack.com/table/v8/docs/guide/column-sizing)\n */\n setColumnSizingInfo: (updater: Updater<ColumnSizingInfoState>) => void\n}\n\nexport interface ColumnSizingColumnDef {\n /**\n * Enables or disables column resizing for the column.\n * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/column-sizing#enableresizing)\n * @link [Guide](https://tanstack.com/table/v8/docs/guide/column-sizing)\n */\n enableResizing?: boolean\n /**\n * The maximum allowed size for the column\n * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/column-sizing#maxsize)\n * @link [Guide](https://tanstack.com/table/v8/docs/guide/column-sizing)\n */\n maxSize?: number\n /**\n * The minimum allowed size for the column\n * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/column-sizing#minsize)\n * @link [Guide](https://tanstack.com/table/v8/docs/guide/column-sizing)\n */\n minSize?: number\n /**\n * The desired size for the column\n * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/column-sizing#size)\n * @link [Guide](https://tanstack.com/table/v8/docs/guide/column-sizing)\n */\n size?: number\n}\n\nexport interface ColumnSizingColumn {\n /**\n * Returns `true` if the column can be resized.\n * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/column-sizing#getcanresize)\n * @link [Guide](https://tanstack.com/table/v8/docs/guide/column-sizing)\n */\n getCanResize: () => boolean\n /**\n * Returns `true` if the column is currently being resized.\n * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/column-sizing#getisresizing)\n * @link [Guide](https://tanstack.com/table/v8/docs/guide/column-sizing)\n */\n getIsResizing: () => boolean\n /**\n * Returns the current size of the column.\n * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/column-sizing#getsize)\n * @link [Guide](https://tanstack.com/table/v8/docs/guide/column-sizing)\n */\n getSize: () => number\n /**\n * Returns the offset measurement along the row-axis (usually the x-axis for standard tables) for the header. This is effectively a sum of the offset measurements of all preceding (left) headers in relation to the current column.\n * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/column-sizing#getstart)\n * @link [Guide](https://tanstack.com/table/v8/docs/guide/column-sizing)\n */\n getStart: (position?: ColumnPinningPosition | 'center') => number\n /**\n * Returns the offset measurement along the row-axis (usually the x-axis for standard tables) for the header. This is effectively a sum of the offset measurements of all succeeding (right) headers in relation to the current column.\n */\n getAfter: (position?: ColumnPinningPosition | 'center') => number\n /**\n * Resets the column to its initial size.\n * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/column-sizing#resetsize)\n * @link [Guide](https://tanstack.com/table/v8/docs/guide/column-sizing)\n */\n resetSize: () => void\n}\n\nexport interface ColumnSizingHeader {\n /**\n * Returns an event handler function that can be used to resize the header. It can be used as an:\n * - `onMouseDown` handler\n * - `onTouchStart` handler\n *\n * The dragging and release events are automatically handled for you.\n * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/column-sizing#getresizehandler)\n * @link [Guide](https://tanstack.com/table/v8/docs/guide/column-sizing)\n */\n getResizeHandler: (context?: Document) => (event: unknown) => void\n /**\n * Returns the current size of the header.\n * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/column-sizing#getsize)\n * @link [Guide](https://tanstack.com/table/v8/docs/guide/column-sizing)\n */\n getSize: () => number\n /**\n * Returns the offset measurement along the row-axis (usually the x-axis for standard tables) for the header. This is effectively a sum of the offset measurements of all preceding headers.\n * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/column-sizing#getstart)\n * @link [Guide](https://tanstack.com/table/v8/docs/guide/column-sizing)\n */\n getStart: (position?: ColumnPinningPosition) => number\n}\n\n//\n\nexport const defaultColumnSizing = {\n size: 150,\n minSize: 20,\n maxSize: Number.MAX_SAFE_INTEGER,\n}\n\nconst getDefaultColumnSizingInfoState = (): ColumnSizingInfoState => ({\n startOffset: null,\n startSize: null,\n deltaOffset: null,\n deltaPercentage: null,\n isResizingColumn: false,\n columnSizingStart: [],\n})\n\nexport const ColumnSizing: TableFeature = {\n getDefaultColumnDef: (): ColumnSizingColumnDef => {\n return defaultColumnSizing\n },\n getInitialState: (state): ColumnSizingTableState => {\n return {\n columnSizing: {},\n columnSizingInfo: getDefaultColumnSizingInfoState(),\n ...state,\n }\n },\n\n getDefaultOptions: <TData extends RowData>(\n table: Table<TData>\n ): ColumnSizingDefaultOptions => {\n return {\n columnResizeMode: 'onEnd',\n columnResizeDirection: 'ltr',\n onColumnSizingChange: makeStateUpdater('columnSizing', table),\n onColumnSizingInfoChange: makeStateUpdater('columnSizingInfo', table),\n }\n },\n\n createColumn: <TData extends RowData, TValue>(\n column: Column<TData, TValue>,\n table: Table<TData>\n ): void => {\n column.getSize = () => {\n const columnSize = table.getState().columnSizing[column.id]\n\n return Math.min(\n Math.max(\n column.columnDef.minSize ?? defaultColumnSizing.minSize,\n columnSize ?? column.columnDef.size ?? defaultColumnSizing.size\n ),\n column.columnDef.maxSize ?? defaultColumnSizing.maxSize\n )\n }\n\n column.getStart = memo(\n position => [\n position,\n _getVisibleLeafColumns(table, position),\n table.getState().columnSizing,\n ],\n (position, columns) =>\n columns\n .slice(0, column.getIndex(position))\n .reduce((sum, column) => sum + column.getSize(), 0),\n getMemoOptions(table.options, 'debugColumns', 'getStart')\n )\n\n column.getAfter = memo(\n position => [\n position,\n _getVisibleLeafColumns(table, position),\n table.getState().columnSizing,\n ],\n (position, columns) =>\n columns\n .slice(column.getIndex(position) + 1)\n .reduce((sum, column) => sum + column.getSize(), 0),\n getMemoOptions(table.options, 'debugColumns', 'getAfter')\n )\n\n column.resetSize = () => {\n table.setColumnSizing(({ [column.id]: _, ...rest }) => {\n return rest\n })\n }\n column.getCanResize = () => {\n return (\n (column.columnDef.enableResizing ?? true) &&\n (table.options.enableColumnResizing ?? true)\n )\n }\n column.getIsResizing = () => {\n return table.getState().columnSizingInfo.isResizingColumn === column.id\n }\n },\n\n createHeader: <TData extends RowData, TValue>(\n header: Header<TData, TValue>,\n table: Table<TData>\n ): void => {\n header.getSize = () => {\n let sum = 0\n\n const recurse = (header: Header<TData, TValue>) => {\n if (header.subHeaders.length) {\n header.subHeaders.forEach(recurse)\n } else {\n sum += header.column.getSize() ?? 0\n }\n }\n\n recurse(header)\n\n return sum\n }\n header.getStart = () => {\n if (header.index > 0) {\n const prevSiblingHeader = header.headerGroup.headers[header.index - 1]!\n return prevSiblingHeader.getStart() + prevSiblingHeader.getSize()\n }\n\n return 0\n }\n header.getResizeHandler = _contextDocument => {\n const column = table.getColumn(header.column.id)\n const canResize = column?.getCanResize()\n\n return (e: unknown) => {\n if (!column || !canResize) {\n return\n }\n\n ;(e as any).persist?.()\n\n if (isTouchStartEvent(e)) {\n // lets not respond to multiple touches (e.g. 2 or 3 fingers)\n if (e.touches && e.touches.length > 1) {\n return\n }\n }\n\n const startSize = header.getSize()\n\n const columnSizingStart: [string, number][] = header\n ? header.getLeafHeaders().map(d => [d.column.id, d.column.getSize()])\n : [[column.id, column.getSize()]]\n\n const clientX = isTouchStartEvent(e)\n ? Math.round(e.touches[0]!.clientX)\n : (e as MouseEvent).clientX\n\n const newColumnSizing: ColumnSizingState = {}\n\n const updateOffset = (\n eventType: 'move' | 'end',\n clientXPos?: number\n ) => {\n if (typeof clientXPos !== 'number') {\n return\n }\n\n table.setColumnSizingInfo(old => {\n const deltaDirection =\n table.options.columnResizeDirection === 'rtl' ? -1 : 1\n const deltaOffset =\n (clientXPos - (old?.startOffset ?? 0)) * deltaDirection\n const deltaPercentage = Math.max(\n deltaOffset / (old?.startSize ?? 0),\n -0.999999\n )\n\n old.columnSizingStart.forEach(([columnId, headerSize]) => {\n newColumnSizing[columnId] =\n Math.round(\n Math.max(headerSize + headerSize * deltaPercentage, 0) * 100\n ) / 100\n })\n\n return {\n ...old,\n deltaOffset,\n deltaPercentage,\n }\n })\n\n if (\n table.options.columnResizeMode === 'onChange' ||\n eventType === 'end'\n ) {\n table.setColumnSizing(old => ({\n ...old,\n ...newColumnSizing,\n }))\n }\n }\n\n const onMove = (clientXPos?: number) => updateOffset('move', clientXPos)\n\n const onEnd = (clientXPos?: number) => {\n updateOffset('end', clientXPos)\n\n table.setColumnSizingInfo(old => ({\n ...old,\n isResizingColumn: false,\n startOffset: null,\n startSize: null,\n deltaOffset: null,\n deltaPercentage: null,\n columnSizingStart: [],\n }))\n }\n\n const contextDocument =\n _contextDocument || typeof document !== 'undefined' ? document : null\n\n const mouseEvents = {\n moveHandler: (e: MouseEvent) => onMove(e.clientX),\n upHandler: (e: MouseEvent) => {\n contextDocument?.removeEventListener(\n 'mousemove',\n mouseEvents.moveHandler\n )\n contextDocument?.removeEventListener(\n 'mouseup',\n mouseEvents.upHandler\n )\n onEnd(e.clientX)\n },\n }\n\n const touchEvents = {\n moveHandler: (e: TouchEvent) => {\n if (e.cancelable) {\n e.preventDefault()\n e.stopPropagation()\n }\n onMove(e.touches[0]!.clientX)\n return false\n },\n upHandler: (e: TouchEvent) => {\n contextDocument?.removeEventListener(\n 'touchmove',\n touchEvents.moveHandler\n )\n contextDocument?.removeEventListener(\n 'touchend',\n touchEvents.upHandler\n )\n if (e.cancelable) {\n e.preventDefault()\n e.stopPropagation()\n }\n onEnd(e.touches[0]?.clientX)\n },\n }\n\n const passiveIfSupported = passiveEventSupported()\n ? { passive: false }\n : false\n\n if (isTouchStartEvent(e)) {\n contextDocument?.addEventListener(\n 'touchmove',\n touchEvents.moveHandler,\n passiveIfSupported\n )\n contextDocument?.addEventListener(\n 'touchend',\n touchEvents.upHandler,\n passiveIfSupported\n )\n } else {\n contextDocument?.addEventListener(\n 'mousemove',\n mouseEvents.moveHandler,\n passiveIfSupported\n )\n contextDocument?.addEventListener(\n 'mouseup',\n mouseEvents.upHandler,\n passiveIfSupported\n )\n }\n\n table.setColumnSizingInfo(old => ({\n ...old,\n startOffset: clientX,\n startSize,\n deltaOffset: 0,\n deltaPercentage: 0,\n columnSizingStart,\n isResizingColumn: column.id,\n }))\n }\n }\n },\n\n createTable: <TData extends RowData>(table: Table<TData>): void => {\n table.setColumnSizing = updater =>\n table.options.onColumnSizingChange?.(updater)\n table.setColumnSizingInfo = updater =>\n table.options.onColumnSizingInfoChange?.(updater)\n table.resetColumnSizing = defaultState => {\n table.setColumnSizing(\n defaultState ? {} : table.initialState.columnSizing ?? {}\n )\n }\n table.resetHeaderSizeInfo = defaultState => {\n table.setColumnSizingInfo(\n defaultState\n ? getDefaultColumnSizingInfoState()\n : table.initialState.columnSizingInfo ??\n getDefaultColumnSizingInfoState()\n )\n }\n table.getTotalSize = () =>\n table.getHeaderGroups()[0]?.headers.reduce((sum, header) => {\n return sum + header.getSize()\n }, 0) ?? 0\n table.getLeftTotalSize = () =>\n table.getLeftHeaderGroups()[0]?.headers.reduce((sum, header) => {\n return sum + header.getSize()\n }, 0) ?? 0\n table.getCenterTotalSize = () =>\n table.getCenterHeaderGroups()[0]?.headers.reduce((sum, header) => {\n return sum + header.getSize()\n }, 0) ?? 0\n table.getRightTotalSize = () =>\n table.getRightHeaderGroups()[0]?.headers.reduce((sum, header) => {\n return sum + header.getSize()\n }, 0) ?? 0\n },\n}\n\nlet passiveSupported: boolean | null = null\nexport function passiveEventSupported() {\n if (typeof passiveSupported === 'boolean') return passiveSupported\n\n let supported = false\n try {\n const options = {\n get passive() {\n supported = true\n return false\n },\n }\n\n const noop = () => {}\n\n window.addEventListener('test', noop, options)\n window.removeEventListener('test', noop)\n } catch (err) {\n supported = false\n }\n passiveSupported = supported\n return passiveSupported\n}\n\nfunction isTouchStartEvent(e: unknown): e is TouchEvent {\n return (e as TouchEvent).type === 'touchstart'\n}\n","import { ColumnPinningPosition } from '..'\nimport {\n Cell,\n Column,\n OnChangeFn,\n Table,\n Updater,\n Row,\n RowData,\n TableFeature,\n} from '../types'\nimport { getMemoOptions, makeStateUpdater, memo } from '../utils'\n\nexport type VisibilityState = Record<string, boolean>\n\nexport interface VisibilityTableState {\n columnVisibility: VisibilityState\n}\n\nexport interface VisibilityOptions {\n /**\n * Whether to enable column hiding. Defaults to `true`.\n * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/column-visibility#enablehiding)\n * @link [Guide](https://tanstack.com/table/v8/docs/guide/column-visibility)\n */\n enableHiding?: boolean\n /**\n * If provided, this function will be called with an `updaterFn` when `state.columnVisibility` changes. This overrides the default internal state management, so you will need to persist the state change either fully or partially outside of the table.\n * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/column-visibility#oncolumnvisibilitychange)\n * @link [Guide](https://tanstack.com/table/v8/docs/guide/column-visibility)\n */\n onColumnVisibilityChange?: OnChangeFn<VisibilityState>\n}\n\nexport type VisibilityDefaultOptions = Pick<\n VisibilityOptions,\n 'onColumnVisibilityChange'\n>\n\nexport interface VisibilityInstance<TData extends RowData> {\n /**\n * If column pinning, returns a flat array of leaf-node columns that are visible in the unpinned/center portion of the table.\n * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/column-visibility#getcentervisibleleafcolumns)\n * @link [Guide](https://tanstack.com/table/v8/docs/guide/column-visibility)\n */\n getCenterVisibleLeafColumns: () => Column<TData, unknown>[]\n /**\n * Returns whether all columns are visible\n * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/column-visibility#getisallcolumnsvisible)\n * @link [Guide](https://tanstack.com/table/v8/docs/guide/column-visibility)\n */\n getIsAllColumnsVisible: () => boolean\n /**\n * Returns whether any columns are visible\n * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/column-visibility#getissomecolumnsvisible)\n * @link [Guide](https://tanstack.com/table/v8/docs/guide/column-visibility)\n */\n getIsSomeColumnsVisible: () => boolean\n /**\n * If column pinning, returns a flat array of leaf-node columns that are visible in the left portion of the table.\n * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/column-visibility#getleftvisibleleafcolumns)\n * @link [Guide](https://tanstack.com/table/v8/docs/guide/column-visibility)\n */\n getLeftVisibleLeafColumns: () => Column<TData, unknown>[]\n /**\n * If column pinning, returns a flat array of leaf-node columns that are visible in the right portion of the table.\n * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/column-visibility#getrightvisibleleafcolumns)\n * @link [Guide](https://tanstack.com/table/v8/docs/guide/column-visibility)\n */\n getRightVisibleLeafColumns: () => Column<TData, unknown>[]\n /**\n * Returns a handler for toggling the visibility of all columns, meant to be bound to a `input[type=checkbox]` element.\n * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/column-visibility#gettoggleallcolumnsvisibilityhandler)\n * @link [Guide](https://tanstack.com/table/v8/docs/guide/column-visibility)\n */\n getToggleAllColumnsVisibilityHandler: () => (event: unknown) => void\n /**\n * Returns a flat array of columns that are visible, including parent columns.\n * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/column-visibility#getvisibleflatcolumns)\n * @link [Guide](https://tanstack.com/table/v8/docs/guide/column-visibility)\n */\n getVisibleFlatColumns: () => Column<TData, unknown>[]\n /**\n * Returns a flat array of leaf-node columns that are visible.\n * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/column-visibility#getvisibleleafcolumns)\n * @link [Guide](https://tanstack.com/table/v8/docs/guide/column-visibility)\n */\n getVisibleLeafColumns: () => Column<TData, unknown>[]\n /**\n * Resets the column visibility state to the initial state. If `defaultState` is provided, the state will be reset to `{}`\n * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/column-visibility#resetcolumnvisibility)\n * @link [Guide](https://tanstack.com/table/v8/docs/guide/column-visibility)\n */\n resetColumnVisibility: (defaultState?: boolean) => void\n /**\n * Sets or updates the `state.columnVisibility` state.\n * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/column-visibility#setcolumnvisibility)\n * @link [Guide](https://tanstack.com/table/v8/docs/guide/column-visibility)\n */\n setColumnVisibility: (updater: Updater<VisibilityState>) => void\n /**\n * Toggles the visibility of all columns.\n * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/column-visibility#toggleallcolumnsvisible)\n * @link [Guide](https://tanstack.com/table/v8/docs/guide/column-visibility)\n */\n toggleAllColumnsVisible: (value?: boolean) => void\n}\n\nexport interface VisibilityColumnDef {\n enableHiding?: boolean\n}\n\nexport interface VisibilityRow<TData extends RowData> {\n _getAllVisibleCells: () => Cell<TData, unknown>[]\n /**\n * Returns an array of cells that account for column visibility for the row.\n * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/column-visibility#getvisiblecells)\n * @link [Guide](https://tanstack.com/table/v8/docs/guide/column-visibility)\n */\n getVisibleCells: () => Cell<TData, unknown>[]\n}\n\nexport interface VisibilityColumn {\n /**\n * Returns whether the column can be hidden\n * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/column-visibility#getcanhide)\n * @link [Guide](https://tanstack.com/table/v8/docs/guide/column-visibility)\n */\n getCanHide: () => boolean\n /**\n * Returns whether the column is visible\n * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/column-visibility#getisvisible)\n * @link [Guide](https://tanstack.com/table/v8/docs/guide/column-visibility)\n */\n getIsVisible: () => boolean\n /**\n * Returns a function that can be used to toggle the column visibility. This function can be used to bind to an event handler to a checkbox.\n * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/column-visibility#gettogglevisibilityhandler)\n * @link [Guide](https://tanstack.com/table/v8/docs/guide/column-visibility)\n */\n getToggleVisibilityHandler: () => (event: unknown) => void\n /**\n * Toggles the visibility of the column.\n * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/column-visibility#togglevisibility)\n * @link [Guide](https://tanstack.com/table/v8/docs/guide/column-visibility)\n */\n toggleVisibility: (value?: boolean) => void\n}\n\n//\n\nexport const ColumnVisibility: TableFeature = {\n getInitialState: (state): VisibilityTableState => {\n return {\n columnVisibility: {},\n ...state,\n }\n },\n\n getDefaultOptions: <TData extends RowData>(\n table: Table<TData>\n ): VisibilityDefaultOptions => {\n return {\n onColumnVisibilityChange: makeStateUpdater('columnVisibility', table),\n }\n },\n\n createColumn: <TData extends RowData, TValue>(\n column: Column<TData, TValue>,\n table: Table<TData>\n ): void => {\n column.toggleVisibility = value => {\n if (column.getCanHide()) {\n table.setColumnVisibility(old => ({\n ...old,\n [column.id]: value ?? !column.getIsVisible(),\n }))\n }\n }\n column.getIsVisible = () => {\n const childColumns = column.columns\n return (\n (childColumns.length\n ? childColumns.some(c => c.getIsVisible())\n : table.getState().columnVisibility?.[column.id]) ?? true\n )\n }\n\n column.getCanHide = () => {\n return (\n (column.columnDef.enableHiding ?? true) &&\n (table.options.enableHiding ?? true)\n )\n }\n column.getToggleVisibilityHandler = () => {\n return (e: unknown) => {\n column.toggleVisibility?.(\n ((e as MouseEvent).target as HTMLInputElement).checked\n )\n }\n }\n },\n\n createRow: <TData extends RowData>(\n row: Row<TData>,\n table: Table<TData>\n ): void => {\n row._getAllVisibleCells = memo(\n () => [row.getAllCells(), table.getState().columnVisibility],\n cells => {\n return cells.filter(cell => cell.column.getIsVisible())\n },\n getMemoOptions(table.options, 'debugRows', '_getAllVisibleCells')\n )\n row.getVisibleCells = memo(\n () => [\n row.getLeftVisibleCells(),\n row.getCenterVisibleCells(),\n row.getRightVisibleCells(),\n ],\n (left, center, right) => [...left, ...center, ...right],\n getMemoOptions(table.options, 'debugRows', 'getVisibleCells')\n )\n },\n\n createTable: <TData extends RowData>(table: Table<TData>): void => {\n const makeVisibleColumnsMethod = (\n key: string,\n getColumns: () => Column<TData, unknown>[]\n ): (() => Column<TData, unknown>[]) => {\n return memo(\n () => [\n getColumns(),\n getColumns()\n .filter(d => d.getIsVisible())\n .map(d => d.id)\n .join('_'),\n ],\n columns => {\n return columns.filter(d => d.getIsVisible?.())\n },\n getMemoOptions(table.options, 'debugColumns', key)\n )\n }\n\n table.getVisibleFlatColumns = makeVisibleColumnsMethod(\n 'getVisibleFlatColumns',\n () => table.getAllFlatColumns()\n )\n table.getVisibleLeafColumns = makeVisibleColumnsMethod(\n 'getVisibleLeafColumns',\n () => table.getAllLeafColumns()\n )\n table.getLeftVisibleLeafColumns = makeVisibleColumnsMethod(\n 'getLeftVisibleLeafColumns',\n () => table.getLeftLeafColumns()\n )\n table.getRightVisibleLeafColumns = makeVisibleColumnsMethod(\n 'getRightVisibleLeafColumns',\n () => table.getRightLeafColumns()\n )\n table.getCenterVisibleLeafColumns = makeVisibleColumnsMethod(\n 'getCenterVisibleLeafColumns',\n () => table.getCenterLeafColumns()\n )\n\n table.setColumnVisibility = updater =>\n table.options.onColumnVisibilityChange?.(updater)\n\n table.resetColumnVisibility = defaultState => {\n table.setColumnVisibility(\n defaultState ? {} : table.initialState.columnVisibility ?? {}\n )\n }\n\n table.toggleAllColumnsVisible = value => {\n value = value ?? !table.getIsAllColumnsVisible()\n\n table.setColumnVisibility(\n table.getAllLeafColumns().reduce(\n (obj, column) => ({\n ...obj,\n [column.id]: !value ? !column.getCanHide?.() : value,\n }),\n {}\n )\n )\n }\n\n table.getIsAllColumnsVisible = () =>\n !table.getAllLeafColumns().some(column => !column.getIsVisible?.())\n\n table.getIsSomeColumnsVisible = () =>\n table.getAllLeafColumns().some(column => column.getIsVisible?.())\n\n table.getToggleAllColumnsVisibilityHandler = () => {\n return (e: unknown) => {\n table.toggleAllColumnsVisible(\n ((e as MouseEvent).target as HTMLInputElement)?.checked\n )\n }\n }\n },\n}\n\nexport function _getVisibleLeafColumns<TData extends RowData>(\n table: Table<TData>,\n position?: ColumnPinningPosition | 'center'\n) {\n return !position\n ? table.getVisibleLeafColumns()\n : position === 'center'\n ? table.getCenterVisibleLeafColumns()\n : position === 'left'\n ? table.getLeftVisibleLeafColumns()\n : table.getRightVisibleLeafColumns()\n}\n","import { RowModel } from '..'\nimport { Table, RowData, TableFeature } from '../types'\n\nexport interface GlobalFacetingInstance<TData extends RowData> {\n _getGlobalFacetedMinMaxValues?: () => undefined | [number, number]\n _getGlobalFacetedRowModel?: () => RowModel<TData>\n _getGlobalFacetedUniqueValues?: () => Map<any, number>\n /**\n * Currently, this function returns the built-in `includesString` filter function. In future releases, it may return more dynamic filter functions based on the nature of the data provided.\n * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/global-faceting#getglobalautofilterfn)\n * @link [Guide](https://tanstack.com/table/v8/docs/guide/global-faceting)\n */\n getGlobalFacetedMinMaxValues: () => undefined | [number, number]\n /**\n * Returns the row model for the table after **global** filtering has been applied.\n * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/global-faceting#getglobalfacetedrowmodel)\n * @link [Guide](https://tanstack.com/table/v8/docs/guide/global-faceting)\n */\n getGlobalFacetedRowModel: () => RowModel<TData>\n /**\n * Returns the faceted unique values for the global filter.\n * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/global-faceting#getglobalfaceteduniquevalues)\n * @link [Guide](https://tanstack.com/table/v8/docs/guide/global-faceting)\n */\n getGlobalFacetedUniqueValues: () => Map<any, number>\n}\n\n//\n\nexport const GlobalFaceting: TableFeature = {\n createTable: <TData extends RowData>(table: Table<TData>): void => {\n table._getGlobalFacetedRowModel =\n table.options.getFacetedRowModel &&\n table.options.getFacetedRowModel(table, '__global__')\n\n table.getGlobalFacetedRowModel = () => {\n if (table.options.manualFiltering || !table._getGlobalFacetedRowModel) {\n return table.getPreFilteredRowModel()\n }\n\n return table._getGlobalFacetedRowModel()\n }\n\n table._getGlobalFacetedUniqueValues =\n table.options.getFacetedUniqueValues &&\n table.options.getFacetedUniqueValues(table, '__global__')\n table.getGlobalFacetedUniqueValues = () => {\n if (!table._getGlobalFacetedUniqueValues) {\n return new Map()\n }\n\n return table._getGlobalFacetedUniqueValues()\n }\n\n table._getGlobalFacetedMinMaxValues =\n table.options.getFacetedMinMaxValues &&\n table.options.getFacetedMinMaxValues(table, '__global__')\n table.getGlobalFacetedMinMaxValues = () => {\n if (!table._getGlobalFacetedMinMaxValues) {\n return\n }\n\n return table._getGlobalFacetedMinMaxValues()\n }\n },\n}\n","import { FilterFn, FilterFnOption } from '..'\nimport { BuiltInFilterFn, filterFns } from '../filterFns'\nimport {\n Column,\n OnChangeFn,\n Table,\n Updater,\n RowData,\n TableFeature,\n} from '../types'\nimport { isFunction, makeStateUpdater } from '../utils'\n\nexport interface GlobalFilterTableState {\n globalFilter: any\n}\n\nexport interface GlobalFilterColumnDef {\n /**\n * Enables/disables the **global** filter for this column.\n * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/global-filtering#enableglobalfilter)\n * @link [Guide](https://tanstack.com/table/v8/docs/guide/global-filtering)\n */\n enableGlobalFilter?: boolean\n}\n\nexport interface GlobalFilterColumn {\n /**\n * Returns whether or not the column can be **globally** filtered. Set to `false` to disable a column from being scanned during global filtering.\n * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/global-filtering#getcanglobalfilter)\n * @link [Guide](https://tanstack.com/table/v8/docs/guide/global-filtering)\n */\n getCanGlobalFilter: () => boolean\n}\n\nexport interface GlobalFilterOptions<TData extends RowData> {\n /**\n * Enables/disables **global** filtering for all columns.\n * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/global-filtering#enableglobalfilter)\n * @link [Guide](https://tanstack.com/table/v8/docs/guide/global-filtering)\n */\n enableGlobalFilter?: boolean\n /**\n * If provided, this function will be called with the column and should return `true` or `false` to indicate whether this column should be used for global filtering.\n *\n * This is useful if the column can contain data that is not `string` or `number` (i.e. `undefined`).\n * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/global-filtering#getcolumncanglobalfilter)\n * @link [Guide](https://tanstack.com/table/v8/docs/guide/global-filtering)\n */\n getColumnCanGlobalFilter?: (column: Column<TData, unknown>) => boolean\n /**\n * The filter function to use for global filtering.\n * - A `string` referencing a built-in filter function\n * - A `string` that references a custom filter functions provided via the `tableOptions.filterFns` option\n * - A custom filter function\n * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/global-filtering#globalfilterfn)\n * @link [Guide](https://tanstack.com/table/v8/docs/guide/global-filtering)\n */\n globalFilterFn?: FilterFnOption<TData>\n /**\n * If provided, this function will be called with an `updaterFn` when `state.globalFilter` changes. This overrides the default internal state management, so you will need to persist the state change either fully or partially outside of the table.\n * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/global-filtering#onglobalfilterchange)\n * @link [Guide](https://tanstack.com/table/v8/docs/guide/global-filtering)\n */\n onGlobalFilterChange?: OnChangeFn<any>\n}\n\nexport interface GlobalFilterInstance<TData extends RowData> {\n /**\n * Currently, this function returns the built-in `includesString` filter function. In future releases, it may return more dynamic filter functions based on the nature of the data provided.\n * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/global-filtering#getglobalautofilterfn)\n * @link [Guide](https://tanstack.com/table/v8/docs/guide/global-filtering)\n */\n getGlobalAutoFilterFn: () => FilterFn<TData> | undefined\n /**\n * Returns the filter function (either user-defined or automatic, depending on configuration) for the global filter.\n * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/global-filtering#getglobalfilterfn)\n * @link [Guide](https://tanstack.com/table/v8/docs/guide/global-filtering)\n */\n getGlobalFilterFn: () => FilterFn<TData> | undefined\n /**\n * Resets the **globalFilter** state to `initialState.globalFilter`, or `true` can be passed to force a default blank state reset to `undefined`.\n * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/global-filtering#resetglobalfilter)\n * @link [Guide](https://tanstack.com/table/v8/docs/guide/global-filtering)\n */\n resetGlobalFilter: (defaultState?: boolean) => void\n /**\n * Sets or updates the `state.globalFilter` state.\n * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/global-filtering#setglobalfilter)\n * @link [Guide](https://tanstack.com/table/v8/docs/guide/global-filtering)\n */\n setGlobalFilter: (updater: Updater<any>) => void\n}\n\n//\n\nexport const GlobalFiltering: TableFeature = {\n getInitialState: (state): GlobalFilterTableState => {\n return {\n globalFilter: undefined,\n ...state,\n }\n },\n\n getDefaultOptions: <TData extends RowData>(\n table: Table<TData>\n ): GlobalFilterOptions<TData> => {\n return {\n onGlobalFilterChange: makeStateUpdater('globalFilter', table),\n globalFilterFn: 'auto',\n getColumnCanGlobalFilter: column => {\n const value = table\n .getCoreRowModel()\n .flatRows[0]?._getAllCellsByColumnId()\n [column.id]?.getValue()\n\n return typeof value === 'string' || typeof value === 'number'\n },\n } as GlobalFilterOptions<TData>\n },\n\n createColumn: <TData extends RowData>(\n column: Column<TData, unknown>,\n table: Table<TData>\n ): void => {\n column.getCanGlobalFilter = () => {\n return (\n (column.columnDef.enableGlobalFilter ?? true) &&\n (table.options.enableGlobalFilter ?? true) &&\n (table.options.enableFilters ?? true) &&\n (table.options.getColumnCanGlobalFilter?.(column) ?? true) &&\n !!column.accessorFn\n )\n }\n },\n\n createTable: <TData extends RowData>(table: Table<TData>): void => {\n table.getGlobalAutoFilterFn = () => {\n return filterFns.includesString\n }\n\n table.getGlobalFilterFn = () => {\n const { globalFilterFn: globalFilterFn } = table.options\n\n return isFunction(globalFilterFn)\n ? globalFilterFn\n : globalFilterFn === 'auto'\n ? table.getGlobalAutoFilterFn()\n : table.options.filterFns?.[globalFilterFn as string] ??\n filterFns[globalFilterFn as BuiltInFilterFn]\n }\n\n table.setGlobalFilter = updater => {\n table.options.onGlobalFilterChange?.(updater)\n }\n\n table.resetGlobalFilter = defaultState => {\n table.setGlobalFilter(\n defaultState ? undefined : table.initialState.globalFilter\n )\n }\n },\n}\n","import { RowModel } from '..'\nimport {\n OnChangeFn,\n Table,\n Row,\n Updater,\n RowData,\n TableFeature,\n} from '../types'\nimport { makeStateUpdater } from '../utils'\n\nexport type ExpandedStateList = Record<string, boolean>\nexport type ExpandedState = true | Record<string, boolean>\nexport interface ExpandedTableState {\n expanded: ExpandedState\n}\n\nexport interface ExpandedRow {\n /**\n * Returns whether the row can be expanded.\n * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/expanding#getcanexpand)\n * @link [Guide](https://tanstack.com/table/v8/docs/guide/expanding)\n */\n getCanExpand: () => boolean\n /**\n * Returns whether all parent rows of the row are expanded.\n * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/expanding#getisallparentsexpanded)\n * @link [Guide](https://tanstack.com/table/v8/docs/guide/expanding)\n */\n getIsAllParentsExpanded: () => boolean\n /**\n * Returns whether the row is expanded.\n * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/expanding#getisexpanded)\n * @link [Guide](https://tanstack.com/table/v8/docs/guide/expanding)\n */\n getIsExpanded: () => boolean\n /**\n * Returns a function that can be used to toggle the expanded state of the row. This function can be used to bind to an event handler to a button.\n * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/expanding#gettoggleexpandedhandler)\n * @link [Guide](https://tanstack.com/table/v8/docs/guide/expanding)\n */\n getToggleExpandedHandler: () => () => void\n /**\n * Toggles the expanded state (or sets it if `expanded` is provided) for the row.\n * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/expanding#toggleexpanded)\n * @link [Guide](https://tanstack.com/table/v8/docs/guide/expanding)\n */\n toggleExpanded: (expanded?: boolean) => void\n}\n\nexport interface ExpandedOptions<TData extends RowData> {\n /**\n * Enable this setting to automatically reset the expanded state of the table when expanding state changes.\n * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/expanding#autoresetexpanded)\n * @link [Guide](https://tanstack.com/table/v8/docs/guide/expanding)\n */\n autoResetExpanded?: boolean\n /**\n * Enable/disable expanding for all rows.\n * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/expanding#enableexpanding)\n * @link [Guide](https://tanstack.com/table/v8/docs/guide/expanding)\n */\n enableExpanding?: boolean\n /**\n * This function is responsible for returning the expanded row model. If this function is not provided, the table will not expand rows. You can use the default exported `getExpandedRowModel` function to get the expanded row model or implement your own.\n * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/expanding#getexpandedrowmodel)\n * @link [Guide](https://tanstack.com/table/v8/docs/guide/expanding)\n */\n getExpandedRowModel?: (table: Table<any>) => () => RowModel<any>\n /**\n * If provided, allows you to override the default behavior of determining whether a row is currently expanded.\n * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/expanding#getisrowexpanded)\n * @link [Guide](https://tanstack.com/table/v8/docs/guide/expanding)\n */\n getIsRowExpanded?: (row: Row<TData>) => boolean\n /**\n * If provided, allows you to override the default behavior of determining whether a row can be expanded.\n * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/expanding#getrowcanexpand)\n * @link [Guide](https://tanstack.com/table/v8/docs/guide/expanding)\n */\n getRowCanExpand?: (row: Row<TData>) => boolean\n /**\n * Enables manual row expansion. If this is set to `true`, `getExpandedRowModel` will not be used to expand rows and you would be expected to perform the expansion in your own data model. This is useful if you are doing server-side expansion.\n * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/expanding#manualexpanding)\n * @link [Guide](https://tanstack.com/table/v8/docs/guide/expanding)\n */\n manualExpanding?: boolean\n /**\n * This function is called when the `expanded` table state changes. If a function is provided, you will be responsible for managing this state on your own. To pass the managed state back to the table, use the `tableOptions.state.expanded` option.\n * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/expanding#onexpandedchange)\n * @link [Guide](https://tanstack.com/table/v8/docs/guide/expanding)\n */\n onExpandedChange?: OnChangeFn<ExpandedState>\n /**\n * If `true` expanded rows will be paginated along with the rest of the table (which means expanded rows may span multiple pages). If `false` expanded rows will not be considered for pagination (which means expanded rows will always render on their parents page. This also means more rows will be rendered than the set page size)\n * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/expanding#paginateexpandedrows)\n * @link [Guide](https://tanstack.com/table/v8/docs/guide/expanding)\n */\n paginateExpandedRows?: boolean\n}\n\nexport interface ExpandedInstance<TData extends RowData> {\n _autoResetExpanded: () => void\n _getExpandedRowModel?: () => RowModel<TData>\n /**\n * Returns whether there are any rows that can be expanded.\n * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/expanding#getcansomerowsexpand)\n * @link [Guide](https://tanstack.com/table/v8/docs/guide/expanding)\n */\n getCanSomeRowsExpand: () => boolean\n /**\n * Returns the maximum depth of the expanded rows.\n * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/expanding#getexpandeddepth)\n * @link [Guide](https://tanstack.com/table/v8/docs/guide/expanding)\n */\n getExpandedDepth: () => number\n /**\n * Returns the row model after expansion has been applied.\n * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/expanding#getexpandedrowmodel)\n * @link [Guide](https://tanstack.com/table/v8/docs/guide/expanding)\n */\n getExpandedRowModel: () => RowModel<TData>\n /**\n * Returns whether all rows are currently expanded.\n * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/expanding#getisallrowsexpanded)\n * @link [Guide](https://tanstack.com/table/v8/docs/guide/expanding)\n */\n getIsAllRowsExpanded: () => boolean\n /**\n * Returns whether there are any rows that are currently expanded.\n * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/expanding#getissomerowsexpanded)\n * @link [Guide](https://tanstack.com/table/v8/docs/guide/expanding)\n */\n getIsSomeRowsExpanded: () => boolean\n /**\n * Returns the row model before expansion has been applied.\n * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/expanding#getpreexpandedrowmodel)\n * @link [Guide](https://tanstack.com/table/v8/docs/guide/expanding)\n */\n getPreExpandedRowModel: () => RowModel<TData>\n /**\n * Returns a handler that can be used to toggle the expanded state of all rows. This handler is meant to be used with an `input[type=checkbox]` element.\n * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/expanding#gettoggleallrowsexpandedhandler)\n * @link [Guide](https://tanstack.com/table/v8/docs/guide/expanding)\n */\n getToggleAllRowsExpandedHandler: () => (event: unknown) => void\n /**\n * Resets the expanded state of the table to the initial state.\n * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/expanding#resetexpanded)\n * @link [Guide](https://tanstack.com/table/v8/docs/guide/expanding)\n */\n resetExpanded: (defaultState?: boolean) => void\n /**\n * Updates the expanded state of the table via an update function or value.\n * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/expanding#setexpanded)\n * @link [Guide](https://tanstack.com/table/v8/docs/guide/expanding)\n */\n setExpanded: (updater: Updater<ExpandedState>) => void\n /**\n * Toggles the expanded state for all rows.\n * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/expanding#toggleallrowsexpanded)\n * @link [Guide](https://tanstack.com/table/v8/docs/guide/expanding)\n */\n toggleAllRowsExpanded: (expanded?: boolean) => void\n}\n\n//\n\nexport const RowExpanding: TableFeature = {\n getInitialState: (state): ExpandedTableState => {\n return {\n expanded: {},\n ...state,\n }\n },\n\n getDefaultOptions: <TData extends RowData>(\n table: Table<TData>\n ): ExpandedOptions<TData> => {\n return {\n onExpandedChange: makeStateUpdater('expanded', table),\n paginateExpandedRows: true,\n }\n },\n\n createTable: <TData extends RowData>(table: Table<TData>): void => {\n let registered = false\n let queued = false\n\n table._autoResetExpanded = () => {\n if (!registered) {\n table._queue(() => {\n registered = true\n })\n return\n }\n\n if (\n table.options.autoResetAll ??\n table.options.autoResetExpanded ??\n !table.options.manualExpanding\n ) {\n if (queued) return\n queued = true\n table._queue(() => {\n table.resetExpanded()\n queued = false\n })\n }\n }\n table.setExpanded = updater => table.options.onExpandedChange?.(updater)\n table.toggleAllRowsExpanded = expanded => {\n if (expanded ?? !table.getIsAllRowsExpanded()) {\n table.setExpanded(true)\n } else {\n table.setExpanded({})\n }\n }\n table.resetExpanded = defaultState => {\n table.setExpanded(defaultState ? {} : table.initialState?.expanded ?? {})\n }\n table.getCanSomeRowsExpand = () => {\n return table\n .getPrePaginationRowModel()\n .flatRows.some(row => row.getCanExpand())\n }\n table.getToggleAllRowsExpandedHandler = () => {\n return (e: unknown) => {\n ;(e as any).persist?.()\n table.toggleAllRowsExpanded()\n }\n }\n table.getIsSomeRowsExpanded = () => {\n const expanded = table.getState().expanded\n return expanded === true || Object.values(expanded).some(Boolean)\n }\n table.getIsAllRowsExpanded = () => {\n const expanded = table.getState().expanded\n\n // If expanded is true, save some cycles and return true\n if (typeof expanded === 'boolean') {\n return expanded === true\n }\n\n if (!Object.keys(expanded).length) {\n return false\n }\n\n // If any row is not expanded, return false\n if (table.getRowModel().flatRows.some(row => !row.getIsExpanded())) {\n return false\n }\n\n // They must all be expanded :shrug:\n return true\n }\n table.getExpandedDepth = () => {\n let maxDepth = 0\n\n const rowIds =\n table.getState().expanded === true\n ? Object.keys(table.getRowModel().rowsById)\n : Object.keys(table.getState().expanded)\n\n rowIds.forEach(id => {\n const splitId = id.split('.')\n maxDepth = Math.max(maxDepth, splitId.length)\n })\n\n return maxDepth\n }\n table.getPreExpandedRowModel = () => table.getSortedRowModel()\n table.getExpandedRowModel = () => {\n if (!table._getExpandedRowModel && table.options.getExpandedRowModel) {\n table._getExpandedRowModel = table.options.getExpandedRowModel(table)\n }\n\n if (table.options.manualExpanding || !table._getExpandedRowModel) {\n return table.getPreExpandedRowModel()\n }\n\n return table._getExpandedRowModel()\n }\n },\n\n createRow: <TData extends RowData>(\n row: Row<TData>,\n table: Table<TData>\n ): void => {\n row.toggleExpanded = expanded => {\n table.setExpanded(old => {\n const exists = old === true ? true : !!old?.[row.id]\n\n let oldExpanded: ExpandedStateList = {}\n\n if (old === true) {\n Object.keys(table.getRowModel().rowsById).forEach(rowId => {\n oldExpanded[rowId] = true\n })\n } else {\n oldExpanded = old\n }\n\n expanded = expanded ?? !exists\n\n if (!exists && expanded) {\n return {\n ...oldExpanded,\n [row.id]: true,\n }\n }\n\n if (exists && !expanded) {\n const { [row.id]: _, ...rest } = oldExpanded\n return rest\n }\n\n return old\n })\n }\n row.getIsExpanded = () => {\n const expanded = table.getState().expanded\n\n return !!(\n table.options.getIsRowExpanded?.(row) ??\n (expanded === true || expanded?.[row.id])\n )\n }\n row.getCanExpand = () => {\n return (\n table.options.getRowCanExpand?.(row) ??\n ((table.options.enableExpanding ?? true) && !!row.subRows?.length)\n )\n }\n row.getIsAllParentsExpanded = () => {\n let isFullyExpanded = true\n let currentRow = row\n\n while (isFullyExpanded && currentRow.parentId) {\n currentRow = table.getRow(currentRow.parentId, true)\n isFullyExpanded = currentRow.getIsExpanded()\n }\n\n return isFullyExpanded\n }\n row.getToggleExpandedHandler = () => {\n const canExpand = row.getCanExpand()\n\n return () => {\n if (!canExpand) return\n row.toggleExpanded()\n }\n }\n },\n}\n","import {\n OnChangeFn,\n Table,\n RowModel,\n Updater,\n RowData,\n TableFeature,\n} from '../types'\nimport {\n functionalUpdate,\n getMemoOptions,\n makeStateUpdater,\n memo,\n} from '../utils'\n\nexport interface PaginationState {\n pageIndex: number\n pageSize: number\n}\n\nexport interface PaginationTableState {\n pagination: PaginationState\n}\n\nexport interface PaginationInitialTableState {\n pagination?: Partial<PaginationState>\n}\n\nexport interface PaginationOptions {\n /**\n * If set to `true`, pagination will be reset to the first page when page-altering state changes eg. `data` is updated, filters change, grouping changes, etc.\n * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/pagination#autoresetpageindex)\n * @link [Guide](https://tanstack.com/table/v8/docs/guide/pagination)\n */\n autoResetPageIndex?: boolean\n /**\n * Returns the row model after pagination has taken place, but no further.\n *\n * Pagination columns are automatically reordered by default to the start of the columns list. If you would rather remove them or leave them as-is, set the appropriate mode here.\n * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/pagination#getpaginationrowmodel)\n * @link [Guide](https://tanstack.com/table/v8/docs/guide/pagination)\n */\n getPaginationRowModel?: (table: Table<any>) => () => RowModel<any>\n /**\n * Enables manual pagination. If this option is set to `true`, the table will not automatically paginate rows using `getPaginationRowModel()` and instead will expect you to manually paginate the rows before passing them to the table. This is useful if you are doing server-side pagination and aggregation.\n * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/pagination#manualpagination)\n * @link [Guide](https://tanstack.com/table/v8/docs/guide/pagination)\n */\n manualPagination?: boolean\n /**\n * If this function is provided, it will be called when the pagination state changes and you will be expected to manage the state yourself. You can pass the managed state back to the table via the `tableOptions.state.pagination` option.\n * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/pagination#onpaginationchange)\n * @link [Guide](https://tanstack.com/table/v8/docs/guide/pagination)\n */\n onPaginationChange?: OnChangeFn<PaginationState>\n /**\n * When manually controlling pagination, you can supply a total `pageCount` value to the table if you know it (Or supply a `rowCount` and `pageCount` will be calculated). If you do not know how many pages there are, you can set this to `-1`.\n * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/pagination#pagecount)\n * @link [Guide](https://tanstack.com/table/v8/docs/guide/pagination)\n */\n pageCount?: number\n /**\n * When manually controlling pagination, you can supply a total `rowCount` value to the table if you know it. The `pageCount` can be calculated from this value and the `pageSize`.\n * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/pagination#rowcount)\n * @link [Guide](https://tanstack.com/table/v8/docs/guide/pagination)\n */\n rowCount?: number\n}\n\nexport interface PaginationDefaultOptions {\n onPaginationChange: OnChangeFn<PaginationState>\n}\n\nexport interface PaginationInstance<TData extends RowData> {\n _autoResetPageIndex: () => void\n _getPaginationRowModel?: () => RowModel<TData>\n /**\n * Returns whether the table can go to the next page.\n * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/pagination#getcannextpage)\n * @link [Guide](https://tanstack.com/table/v8/docs/guide/pagination)\n */\n getCanNextPage: () => boolean\n /**\n * Returns whether the table can go to the previous page.\n * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/pagination#getcanpreviouspage)\n * @link [Guide](https://tanstack.com/table/v8/docs/guide/pagination)\n */\n getCanPreviousPage: () => boolean\n /**\n * Returns the page count. If manually paginating or controlling the pagination state, this will come directly from the `options.pageCount` table option, otherwise it will be calculated from the table data using the total row count and current page size.\n * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/pagination#getpagecount)\n * @link [Guide](https://tanstack.com/table/v8/docs/guide/pagination)\n */\n getPageCount: () => number\n /**\n * Returns the row count. If manually paginating or controlling the pagination state, this will come directly from the `options.rowCount` table option, otherwise it will be calculated from the table data.\n * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/pagination#getrowcount)\n * @link [Guide](https://tanstack.com/table/v8/docs/guide/pagination)\n */\n getRowCount: () => number\n /**\n * Returns an array of page options (zero-index-based) for the current page size.\n * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/pagination#getpageoptions)\n * @link [Guide](https://tanstack.com/table/v8/docs/guide/pagination)\n */\n getPageOptions: () => number[]\n /**\n * Returns the row model for the table after pagination has been applied.\n * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/pagination#getpaginationrowmodel)\n * @link [Guide](https://tanstack.com/table/v8/docs/guide/pagination)\n */\n getPaginationRowModel: () => RowModel<TData>\n /**\n * Returns the row model for the table before any pagination has been applied.\n * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/pagination#getprepaginationrowmodel)\n * @link [Guide](https://tanstack.com/table/v8/docs/guide/pagination)\n */\n getPrePaginationRowModel: () => RowModel<TData>\n /**\n * Increments the page index by one, if possible.\n * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/pagination#nextpage)\n * @link [Guide](https://tanstack.com/table/v8/docs/guide/pagination)\n */\n nextPage: () => void\n /**\n * Decrements the page index by one, if possible.\n * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/pagination#previouspage)\n * @link [Guide](https://tanstack.com/table/v8/docs/guide/pagination)\n */\n previousPage: () => void\n /**\n * Sets the page index to `0`.\n * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/pagination#firstpage)\n * @link [Guide](https://tanstack.com/table/v8/docs/guide/pagination)\n */\n firstPage: () => void\n /**\n * Sets the page index to the last page.\n * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/pagination#lastpage)\n * @link [Guide](https://tanstack.com/table/v8/docs/guide/pagination)\n */\n lastPage: () => void\n /**\n * Resets the page index to its initial state. If `defaultState` is `true`, the page index will be reset to `0` regardless of initial state.\n * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/pagination#resetpageindex)\n * @link [Guide](https://tanstack.com/table/v8/docs/guide/pagination)\n */\n resetPageIndex: (defaultState?: boolean) => void\n /**\n * Resets the page size to its initial state. If `defaultState` is `true`, the page size will be reset to `10` regardless of initial state.\n * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/pagination#resetpagesize)\n * @link [Guide](https://tanstack.com/table/v8/docs/guide/pagination)\n */\n resetPageSize: (defaultState?: boolean) => void\n /**\n * Resets the **pagination** state to `initialState.pagination`, or `true` can be passed to force a default blank state reset to `[]`.\n * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/pagination#resetpagination)\n * @link [Guide](https://tanstack.com/table/v8/docs/guide/pagination)\n */\n resetPagination: (defaultState?: boolean) => void\n /**\n * @deprecated The page count no longer exists in the pagination state. Just pass as a table option instead.\n */\n setPageCount: (updater: Updater<number>) => void\n /**\n * Updates the page index using the provided function or value in the `state.pagination.pageIndex` state.\n * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/pagination#setpageindex)\n * @link [Guide](https://tanstack.com/table/v8/docs/guide/pagination)\n */\n setPageIndex: (updater: Updater<number>) => void\n /**\n * Updates the page size using the provided function or value in the `state.pagination.pageSize` state.\n * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/pagination#setpagesize)\n * @link [Guide](https://tanstack.com/table/v8/docs/guide/pagination)\n */\n setPageSize: (updater: Updater<number>) => void\n /**\n * Sets or updates the `state.pagination` state.\n * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/pagination#setpagination)\n * @link [Guide](https://tanstack.com/table/v8/docs/guide/pagination)\n */\n setPagination: (updater: Updater<PaginationState>) => void\n}\n\n//\n\nconst defaultPageIndex = 0\nconst defaultPageSize = 10\n\nconst getDefaultPaginationState = (): PaginationState => ({\n pageIndex: defaultPageIndex,\n pageSize: defaultPageSize,\n})\n\nexport const RowPagination: TableFeature = {\n getInitialState: (state): PaginationTableState => {\n return {\n ...state,\n pagination: {\n ...getDefaultPaginationState(),\n ...state?.pagination,\n },\n }\n },\n\n getDefaultOptions: <TData extends RowData>(\n table: Table<TData>\n ): PaginationDefaultOptions => {\n return {\n onPaginationChange: makeStateUpdater('pagination', table),\n }\n },\n\n createTable: <TData extends RowData>(table: Table<TData>): void => {\n let registered = false\n let queued = false\n\n table._autoResetPageIndex = () => {\n if (!registered) {\n table._queue(() => {\n registered = true\n })\n return\n }\n\n if (\n table.options.autoResetAll ??\n table.options.autoResetPageIndex ??\n !table.options.manualPagination\n ) {\n if (queued) return\n queued = true\n table._queue(() => {\n table.resetPageIndex()\n queued = false\n })\n }\n }\n table.setPagination = updater => {\n const safeUpdater: Updater<PaginationState> = old => {\n let newState = functionalUpdate(updater, old)\n\n return newState\n }\n\n return table.options.onPaginationChange?.(safeUpdater)\n }\n table.resetPagination = defaultState => {\n table.setPagination(\n defaultState\n ? getDefaultPaginationState()\n : table.initialState.pagination ?? getDefaultPaginationState()\n )\n }\n table.setPageIndex = updater => {\n table.setPagination(old => {\n let pageIndex = functionalUpdate(updater, old.pageIndex)\n\n const maxPageIndex =\n typeof table.options.pageCount === 'undefined' ||\n table.options.pageCount === -1\n ? Number.MAX_SAFE_INTEGER\n : table.options.pageCount - 1\n\n pageIndex = Math.max(0, Math.min(pageIndex, maxPageIndex))\n\n return {\n ...old,\n pageIndex,\n }\n })\n }\n table.resetPageIndex = defaultState => {\n table.setPageIndex(\n defaultState\n ? defaultPageIndex\n : table.initialState?.pagination?.pageIndex ?? defaultPageIndex\n )\n }\n table.resetPageSize = defaultState => {\n table.setPageSize(\n defaultState\n ? defaultPageSize\n : table.initialState?.pagination?.pageSize ?? defaultPageSize\n )\n }\n table.setPageSize = updater => {\n table.setPagination(old => {\n const pageSize = Math.max(1, functionalUpdate(updater, old.pageSize))\n const topRowIndex = old.pageSize * old.pageIndex!\n const pageIndex = Math.floor(topRowIndex / pageSize)\n\n return {\n ...old,\n pageIndex,\n pageSize,\n }\n })\n }\n //deprecated\n table.setPageCount = updater =>\n table.setPagination(old => {\n let newPageCount = functionalUpdate(\n updater,\n table.options.pageCount ?? -1\n )\n\n if (typeof newPageCount === 'number') {\n newPageCount = Math.max(-1, newPageCount)\n }\n\n return {\n ...old,\n pageCount: newPageCount,\n }\n })\n\n table.getPageOptions = memo(\n () => [table.getPageCount()],\n pageCount => {\n let pageOptions: number[] = []\n if (pageCount && pageCount > 0) {\n pageOptions = [...new Array(pageCount)].fill(null).map((_, i) => i)\n }\n return pageOptions\n },\n getMemoOptions(table.options, 'debugTable', 'getPageOptions')\n )\n\n table.getCanPreviousPage = () => table.getState().pagination.pageIndex > 0\n\n table.getCanNextPage = () => {\n const { pageIndex } = table.getState().pagination\n\n const pageCount = table.getPageCount()\n\n if (pageCount === -1) {\n return true\n }\n\n if (pageCount === 0) {\n return false\n }\n\n return pageIndex < pageCount - 1\n }\n\n table.previousPage = () => {\n return table.setPageIndex(old => old - 1)\n }\n\n table.nextPage = () => {\n return table.setPageIndex(old => {\n return old + 1\n })\n }\n\n table.firstPage = () => {\n return table.setPageIndex(0)\n }\n\n table.lastPage = () => {\n return table.setPageIndex(table.getPageCount() - 1)\n }\n\n table.getPrePaginationRowModel = () => table.getExpandedRowModel()\n table.getPaginationRowModel = () => {\n if (\n !table._getPaginationRowModel &&\n table.options.getPaginationRowModel\n ) {\n table._getPaginationRowModel =\n table.options.getPaginationRowModel(table)\n }\n\n if (table.options.manualPagination || !table._getPaginationRowModel) {\n return table.getPrePaginationRowModel()\n }\n\n return table._getPaginationRowModel()\n }\n\n table.getPageCount = () => {\n return (\n table.options.pageCount ??\n Math.ceil(table.getRowCount() / table.getState().pagination.pageSize)\n )\n }\n\n table.getRowCount = () => {\n return (\n table.options.rowCount ?? table.getPrePaginationRowModel().rows.length\n )\n }\n },\n}\n","import {\n OnChangeFn,\n Updater,\n Table,\n Row,\n RowData,\n TableFeature,\n} from '../types'\nimport { getMemoOptions, makeStateUpdater, memo } from '../utils'\n\nexport type RowPinningPosition = false | 'top' | 'bottom'\n\nexport interface RowPinningState {\n bottom?: string[]\n top?: string[]\n}\n\nexport interface RowPinningTableState {\n rowPinning: RowPinningState\n}\n\nexport interface RowPinningOptions<TData extends RowData> {\n /**\n * Enables/disables row pinning for the table. Defaults to `true`.\n * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/row-pinning#enablerowpinning)\n * @link [Guide](https://tanstack.com/table/v8/docs/guide/row-pinning)\n */\n enableRowPinning?: boolean | ((row: Row<TData>) => boolean)\n /**\n * When `false`, pinned rows will not be visible if they are filtered or paginated out of the table. When `true`, pinned rows will always be visible regardless of filtering or pagination. Defaults to `true`.\n * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/row-pinning#keeppinnedrows)\n * @link [Guide](https://tanstack.com/table/v8/docs/guide/row-pinning)\n */\n keepPinnedRows?: boolean\n /**\n * If provided, this function will be called with an `updaterFn` when `state.rowPinning` changes. This overrides the default internal state management, so you will also need to supply `state.rowPinning` from your own managed state.\n * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/row-pinning#onrowpinningchange)\n * @link [Guide](https://tanstack.com/table/v8/docs/guide/onrowpinningchange)\n */\n onRowPinningChange?: OnChangeFn<RowPinningState>\n}\n\nexport interface RowPinningDefaultOptions {\n onRowPinningChange: OnChangeFn<RowPinningState>\n}\n\nexport interface RowPinningRow {\n /**\n * Returns whether or not the row can be pinned.\n * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/row-pinning#getcanpin-1)\n * @link [Guide](https://tanstack.com/table/v8/docs/guide/row-pinning)\n */\n getCanPin: () => boolean\n /**\n * Returns the pinned position of the row. (`'top'`, `'bottom'` or `false`)\n * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/row-pinning#getispinned-1)\n * @link [Guide](https://tanstack.com/table/v8/docs/guide/row-pinning)\n */\n getIsPinned: () => RowPinningPosition\n /**\n * Returns the numeric pinned index of the row within a pinned row group.\n * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/row-pinning#getpinnedindex-1)\n * @link [Guide](https://tanstack.com/table/v8/docs/guide/row-pinning)\n */\n getPinnedIndex: () => number\n /**\n * Pins a row to the `'top'` or `'bottom'`, or unpins the row to the center if `false` is passed.\n * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/row-pinning#pin-1)\n * @link [Guide](https://tanstack.com/table/v8/docs/guide/row-pinning)\n */\n pin: (\n position: RowPinningPosition,\n includeLeafRows?: boolean,\n includeParentRows?: boolean\n ) => void\n}\n\nexport interface RowPinningInstance<TData extends RowData> {\n _getPinnedRows: (\n visiblePinnedRows: Array<Row<TData>>,\n pinnedRowIds: Array<string> | undefined,\n position: 'top' | 'bottom'\n ) => Row<TData>[]\n /**\n * Returns all bottom pinned rows.\n * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/row-pinning#getbottomrows)\n * @link [Guide](https://tanstack.com/table/v8/docs/guide/row-pinning)\n */\n getBottomRows: () => Row<TData>[]\n /**\n * Returns all rows that are not pinned to the top or bottom.\n * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/row-pinning#getcenterrows)\n * @link [Guide](https://tanstack.com/table/v8/docs/guide/row-pinning)\n */\n getCenterRows: () => Row<TData>[]\n /**\n * Returns whether or not any rows are pinned. Optionally specify to only check for pinned rows in either the `top` or `bottom` position.\n * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/row-pinning#getissomerowspinned)\n * @link [Guide](https://tanstack.com/table/v8/docs/guide/row-pinning)\n */\n getIsSomeRowsPinned: (position?: RowPinningPosition) => boolean\n /**\n * Returns all top pinned rows.\n * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/row-pinning#gettoprows)\n * @link [Guide](https://tanstack.com/table/v8/docs/guide/row-pinning)\n */\n getTopRows: () => Row<TData>[]\n /**\n * Resets the **rowPinning** state to `initialState.rowPinning`, or `true` can be passed to force a default blank state reset to `{ top: [], bottom: [], }`.\n * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/row-pinning#resetrowpinning)\n * @link [Guide](https://tanstack.com/table/v8/docs/guide/row-pinning)\n */\n resetRowPinning: (defaultState?: boolean) => void\n /**\n * Sets or updates the `state.rowPinning` state.\n * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/row-pinning#setrowpinning)\n * @link [Guide](https://tanstack.com/table/v8/docs/guide/row-pinning)\n */\n setRowPinning: (updater: Updater<RowPinningState>) => void\n}\n\n//\n\nconst getDefaultRowPinningState = (): RowPinningState => ({\n top: [],\n bottom: [],\n})\n\nexport const RowPinning: TableFeature = {\n getInitialState: (state): RowPinningTableState => {\n return {\n rowPinning: getDefaultRowPinningState(),\n ...state,\n }\n },\n\n getDefaultOptions: <TData extends RowData>(\n table: Table<TData>\n ): RowPinningDefaultOptions => {\n return {\n onRowPinningChange: makeStateUpdater('rowPinning', table),\n }\n },\n\n createRow: <TData extends RowData>(\n row: Row<TData>,\n table: Table<TData>\n ): void => {\n row.pin = (position, includeLeafRows, includeParentRows) => {\n const leafRowIds = includeLeafRows\n ? row.getLeafRows().map(({ id }) => id)\n : []\n const parentRowIds = includeParentRows\n ? row.getParentRows().map(({ id }) => id)\n : []\n const rowIds = new Set([...parentRowIds, row.id, ...leafRowIds])\n\n table.setRowPinning(old => {\n if (position === 'bottom') {\n return {\n top: (old?.top ?? []).filter(d => !rowIds?.has(d)),\n bottom: [\n ...(old?.bottom ?? []).filter(d => !rowIds?.has(d)),\n ...Array.from(rowIds),\n ],\n }\n }\n\n if (position === 'top') {\n return {\n top: [\n ...(old?.top ?? []).filter(d => !rowIds?.has(d)),\n ...Array.from(rowIds),\n ],\n bottom: (old?.bottom ?? []).filter(d => !rowIds?.has(d)),\n }\n }\n\n return {\n top: (old?.top ?? []).filter(d => !rowIds?.has(d)),\n bottom: (old?.bottom ?? []).filter(d => !rowIds?.has(d)),\n }\n })\n }\n row.getCanPin = () => {\n const { enableRowPinning, enablePinning } = table.options\n if (typeof enableRowPinning === 'function') {\n return enableRowPinning(row)\n }\n return enableRowPinning ?? enablePinning ?? true\n }\n row.getIsPinned = () => {\n const rowIds = [row.id]\n\n const { top, bottom } = table.getState().rowPinning\n\n const isTop = rowIds.some(d => top?.includes(d))\n const isBottom = rowIds.some(d => bottom?.includes(d))\n\n return isTop ? 'top' : isBottom ? 'bottom' : false\n }\n row.getPinnedIndex = () => {\n const position = row.getIsPinned()\n if (!position) return -1\n\n const visiblePinnedRowIds = (\n position === 'top' ? table.getTopRows() : table.getBottomRows()\n )?.map(({ id }) => id)\n\n return visiblePinnedRowIds?.indexOf(row.id) ?? -1\n }\n },\n\n createTable: <TData extends RowData>(table: Table<TData>): void => {\n table.setRowPinning = updater => table.options.onRowPinningChange?.(updater)\n\n table.resetRowPinning = defaultState =>\n table.setRowPinning(\n defaultState\n ? getDefaultRowPinningState()\n : table.initialState?.rowPinning ?? getDefaultRowPinningState()\n )\n\n table.getIsSomeRowsPinned = position => {\n const pinningState = table.getState().rowPinning\n\n if (!position) {\n return Boolean(pinningState.top?.length || pinningState.bottom?.length)\n }\n return Boolean(pinningState[position]?.length)\n }\n\n table._getPinnedRows = (visibleRows, pinnedRowIds, position) => {\n const rows =\n table.options.keepPinnedRows ?? true\n ? //get all rows that are pinned even if they would not be otherwise visible\n //account for expanded parent rows, but not pagination or filtering\n (pinnedRowIds ?? []).map(rowId => {\n const row = table.getRow(rowId, true)\n return row.getIsAllParentsExpanded() ? row : null\n })\n : //else get only visible rows that are pinned\n (pinnedRowIds ?? []).map(\n rowId => visibleRows.find(row => row.id === rowId)!\n )\n\n return rows.filter(Boolean).map(d => ({ ...d, position })) as Row<TData>[]\n }\n\n table.getTopRows = memo(\n () => [table.getRowModel().rows, table.getState().rowPinning.top],\n (allRows, topPinnedRowIds) =>\n table._getPinnedRows(allRows, topPinnedRowIds, 'top'),\n getMemoOptions(table.options, 'debugRows', 'getTopRows')\n )\n\n table.getBottomRows = memo(\n () => [table.getRowModel().rows, table.getState().rowPinning.bottom],\n (allRows, bottomPinnedRowIds) =>\n table._getPinnedRows(allRows, bottomPinnedRowIds, 'bottom'),\n getMemoOptions(table.options, 'debugRows', 'getBottomRows')\n )\n\n table.getCenterRows = memo(\n () => [\n table.getRowModel().rows,\n table.getState().rowPinning.top,\n table.getState().rowPinning.bottom,\n ],\n (allRows, top, bottom) => {\n const topAndBottom = new Set([...(top ?? []), ...(bottom ?? [])])\n return allRows.filter(d => !topAndBottom.has(d.id))\n },\n getMemoOptions(table.options, 'debugRows', 'getCenterRows')\n )\n },\n}\n","import {\n OnChangeFn,\n Table,\n Row,\n RowModel,\n Updater,\n RowData,\n TableFeature,\n} from '../types'\nimport { getMemoOptions, makeStateUpdater, memo } from '../utils'\n\nexport type RowSelectionState = Record<string, boolean>\n\nexport interface RowSelectionTableState {\n rowSelection: RowSelectionState\n}\n\nexport interface RowSelectionOptions<TData extends RowData> {\n /**\n * - Enables/disables multiple row selection for all rows in the table OR\n * - A function that given a row, returns whether to enable/disable multiple row selection for that row's children/grandchildren\n * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/row-selection#enablemultirowselection)\n * @link [Guide](https://tanstack.com/table/v8/docs/guide/row-selection)\n */\n enableMultiRowSelection?: boolean | ((row: Row<TData>) => boolean)\n /**\n * - Enables/disables row selection for all rows in the table OR\n * - A function that given a row, returns whether to enable/disable row selection for that row\n * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/row-selection#enablerowselection)\n * @link [Guide](https://tanstack.com/table/v8/docs/guide/row-selection)\n */\n enableRowSelection?: boolean | ((row: Row<TData>) => boolean)\n /**\n * Enables/disables automatic sub-row selection when a parent row is selected, or a function that enables/disables automatic sub-row selection for each row.\n * (Use in combination with expanding or grouping features)\n * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/row-selection#enablesubrowselection)\n * @link [Guide](https://tanstack.com/table/v8/docs/guide/row-selection)\n */\n enableSubRowSelection?: boolean | ((row: Row<TData>) => boolean)\n /**\n * If provided, this function will be called with an `updaterFn` when `state.rowSelection` changes. This overrides the default internal state management, so you will need to persist the state change either fully or partially outside of the table.\n * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/row-selection#onrowselectionchange)\n * @link [Guide](https://tanstack.com/table/v8/docs/guide/row-selection)\n */\n onRowSelectionChange?: OnChangeFn<RowSelectionState>\n // enableGroupingRowSelection?:\n // | boolean\n // | ((\n // row: Row<TData>\n // ) => boolean)\n // isAdditiveSelectEvent?: (e: unknown) => boolean\n // isInclusiveSelectEvent?: (e: unknown) => boolean\n // selectRowsFn?: (\n // table: Table<TData>,\n // rowModel: RowModel<TData>\n // ) => RowModel<TData>\n}\n\nexport interface RowSelectionRow {\n /**\n * Returns whether or not the row can multi-select.\n * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/row-selection#getcanmultiselect)\n * @link [Guide](https://tanstack.com/table/v8/docs/guide/row-selection)\n */\n getCanMultiSelect: () => boolean\n /**\n * Returns whether or not the row can be selected.\n * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/row-selection#getcanselect)\n * @link [Guide](https://tanstack.com/table/v8/docs/guide/row-selection)\n */\n getCanSelect: () => boolean\n /**\n * Returns whether or not the row can select sub rows automatically when the parent row is selected.\n * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/row-selection#getcanselectsubrows)\n * @link [Guide](https://tanstack.com/table/v8/docs/guide/row-selection)\n */\n getCanSelectSubRows: () => boolean\n /**\n * Returns whether or not all of the row's sub rows are selected.\n * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/row-selection#getisallsubrowsselected)\n * @link [Guide](https://tanstack.com/table/v8/docs/guide/row-selection)\n */\n getIsAllSubRowsSelected: () => boolean\n /**\n * Returns whether or not the row is selected.\n * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/row-selection#getisselected)\n * @link [Guide](https://tanstack.com/table/v8/docs/guide/row-selection)\n */\n getIsSelected: () => boolean\n /**\n * Returns whether or not some of the row's sub rows are selected.\n * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/row-selection#getissomeselected)\n * @link [Guide](https://tanstack.com/table/v8/docs/guide/row-selection)\n */\n getIsSomeSelected: () => boolean\n /**\n * Returns a handler that can be used to toggle the row.\n * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/row-selection#gettoggleselectedhandler)\n * @link [Guide](https://tanstack.com/table/v8/docs/guide/row-selection)\n */\n getToggleSelectedHandler: () => (event: unknown) => void\n /**\n * Selects/deselects the row.\n * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/row-selection#toggleselected)\n * @link [Guide](https://tanstack.com/table/v8/docs/guide/row-selection)\n */\n toggleSelected: (value?: boolean, opts?: { selectChildren?: boolean }) => void\n}\n\nexport interface RowSelectionInstance<TData extends RowData> {\n /**\n * Returns the row model of all rows that are selected after filtering has been applied.\n * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/row-selection#getfilteredselectedrowmodel)\n * @link [Guide](https://tanstack.com/table/v8/docs/guide/row-selection)\n */\n getFilteredSelectedRowModel: () => RowModel<TData>\n /**\n * Returns the row model of all rows that are selected after grouping has been applied.\n * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/row-selection#getgroupedselectedrowmodel)\n * @link [Guide](https://tanstack.com/table/v8/docs/guide/row-selection)\n */\n getGroupedSelectedRowModel: () => RowModel<TData>\n /**\n * Returns whether or not all rows on the current page are selected.\n * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/row-selection#getisallpagerowsselected)\n * @link [Guide](https://tanstack.com/table/v8/docs/guide/row-selection)\n */\n getIsAllPageRowsSelected: () => boolean\n /**\n * Returns whether or not all rows in the table are selected.\n * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/row-selection#getisallrowsselected)\n * @link [Guide](https://tanstack.com/table/v8/docs/guide/row-selection)\n */\n getIsAllRowsSelected: () => boolean\n /**\n * Returns whether or not any rows on the current page are selected.\n * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/row-selection#getissomepagerowsselected)\n * @link [Guide](https://tanstack.com/table/v8/docs/guide/row-selection)\n */\n getIsSomePageRowsSelected: () => boolean\n /**\n * Returns whether or not any rows in the table are selected.\n * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/row-selection#getissomerowsselected)\n * @link [Guide](https://tanstack.com/table/v8/docs/guide/row-selection)\n */\n getIsSomeRowsSelected: () => boolean\n /**\n * Returns the core row model of all rows before row selection has been applied.\n * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/row-selection#getpreselectedrowmodel)\n * @link [Guide](https://tanstack.com/table/v8/docs/guide/row-selection)\n */\n getPreSelectedRowModel: () => RowModel<TData>\n /**\n * Returns the row model of all rows that are selected.\n * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/row-selection#getselectedrowmodel)\n * @link [Guide](https://tanstack.com/table/v8/docs/guide/row-selection)\n */\n getSelectedRowModel: () => RowModel<TData>\n /**\n * Returns a handler that can be used to toggle all rows on the current page.\n * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/row-selection#gettoggleallpagerowsselectedhandler)\n * @link [Guide](https://tanstack.com/table/v8/docs/guide/row-selection)\n */\n getToggleAllPageRowsSelectedHandler: () => (event: unknown) => void\n /**\n * Returns a handler that can be used to toggle all rows in the table.\n * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/row-selection#gettoggleallrowsselectedhandler)\n * @link [Guide](https://tanstack.com/table/v8/docs/guide/row-selection)\n */\n getToggleAllRowsSelectedHandler: () => (event: unknown) => void\n /**\n * Resets the **rowSelection** state to the `initialState.rowSelection`, or `true` can be passed to force a default blank state reset to `{}`.\n * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/row-selection#resetrowselection)\n * @link [Guide](https://tanstack.com/table/v8/docs/guide/row-selection)\n */\n resetRowSelection: (defaultState?: boolean) => void\n /**\n * Sets or updates the `state.rowSelection` state.\n * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/row-selection#setrowselection)\n * @link [Guide](https://tanstack.com/table/v8/docs/guide/row-selection)\n */\n setRowSelection: (updater: Updater<RowSelectionState>) => void\n /**\n * Selects/deselects all rows on the current page.\n * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/row-selection#toggleallpagerowsselected)\n * @link [Guide](https://tanstack.com/table/v8/docs/guide/row-selection)\n */\n toggleAllPageRowsSelected: (value?: boolean) => void\n /**\n * Selects/deselects all rows in the table.\n * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/row-selection#toggleallrowsselected)\n * @link [Guide](https://tanstack.com/table/v8/docs/guide/row-selection)\n */\n toggleAllRowsSelected: (value?: boolean) => void\n}\n\n//\n\nexport const RowSelection: TableFeature = {\n getInitialState: (state): RowSelectionTableState => {\n return {\n rowSelection: {},\n ...state,\n }\n },\n\n getDefaultOptions: <TData extends RowData>(\n table: Table<TData>\n ): RowSelectionOptions<TData> => {\n return {\n onRowSelectionChange: makeStateUpdater('rowSelection', table),\n enableRowSelection: true,\n enableMultiRowSelection: true,\n enableSubRowSelection: true,\n // enableGroupingRowSelection: false,\n // isAdditiveSelectEvent: (e: unknown) => !!e.metaKey,\n // isInclusiveSelectEvent: (e: unknown) => !!e.shiftKey,\n }\n },\n\n createTable: <TData extends RowData>(table: Table<TData>): void => {\n table.setRowSelection = updater =>\n table.options.onRowSelectionChange?.(updater)\n table.resetRowSelection = defaultState =>\n table.setRowSelection(\n defaultState ? {} : table.initialState.rowSelection ?? {}\n )\n table.toggleAllRowsSelected = value => {\n table.setRowSelection(old => {\n value =\n typeof value !== 'undefined' ? value : !table.getIsAllRowsSelected()\n\n const rowSelection = { ...old }\n\n const preGroupedFlatRows = table.getPreGroupedRowModel().flatRows\n\n // We don't use `mutateRowIsSelected` here for performance reasons.\n // All of the rows are flat already, so it wouldn't be worth it\n if (value) {\n preGroupedFlatRows.forEach(row => {\n if (!row.getCanSelect()) {\n return\n }\n rowSelection[row.id] = true\n })\n } else {\n preGroupedFlatRows.forEach(row => {\n delete rowSelection[row.id]\n })\n }\n\n return rowSelection\n })\n }\n table.toggleAllPageRowsSelected = value =>\n table.setRowSelection(old => {\n const resolvedValue =\n typeof value !== 'undefined'\n ? value\n : !table.getIsAllPageRowsSelected()\n\n const rowSelection: RowSelectionState = { ...old }\n\n table.getRowModel().rows.forEach(row => {\n mutateRowIsSelected(rowSelection, row.id, resolvedValue, true, table)\n })\n\n return rowSelection\n })\n\n // addRowSelectionRange: rowId => {\n // const {\n // rows,\n // rowsById,\n // options: { selectGroupingRows, selectSubRows },\n // } = table\n\n // const findSelectedRow = (rows: Row[]) => {\n // let found\n // rows.find(d => {\n // if (d.getIsSelected()) {\n // found = d\n // return true\n // }\n // const subFound = findSelectedRow(d.subRows || [])\n // if (subFound) {\n // found = subFound\n // return true\n // }\n // return false\n // })\n // return found\n // }\n\n // const firstRow = findSelectedRow(rows) || rows[0]\n // const lastRow = rowsById[rowId]\n\n // let include = false\n // const selectedRowIds = {}\n\n // const addRow = (row: Row) => {\n // mutateRowIsSelected(selectedRowIds, row.id, true, {\n // rowsById,\n // selectGroupingRows: selectGroupingRows!,\n // selectSubRows: selectSubRows!,\n // })\n // }\n\n // table.rows.forEach(row => {\n // const isFirstRow = row.id === firstRow.id\n // const isLastRow = row.id === lastRow.id\n\n // if (isFirstRow || isLastRow) {\n // if (!include) {\n // include = true\n // } else if (include) {\n // addRow(row)\n // include = false\n // }\n // }\n\n // if (include) {\n // addRow(row)\n // }\n // })\n\n // table.setRowSelection(selectedRowIds)\n // },\n table.getPreSelectedRowModel = () => table.getCoreRowModel()\n table.getSelectedRowModel = memo(\n () => [table.getState().rowSelection, table.getCoreRowModel()],\n (rowSelection, rowModel) => {\n if (!Object.keys(rowSelection).length) {\n return {\n rows: [],\n flatRows: [],\n rowsById: {},\n }\n }\n\n return selectRowsFn(table, rowModel)\n },\n getMemoOptions(table.options, 'debugTable', 'getSelectedRowModel')\n )\n\n table.getFilteredSelectedRowModel = memo(\n () => [table.getState().rowSelection, table.getFilteredRowModel()],\n (rowSelection, rowModel) => {\n if (!Object.keys(rowSelection).length) {\n return {\n rows: [],\n flatRows: [],\n rowsById: {},\n }\n }\n\n return selectRowsFn(table, rowModel)\n },\n getMemoOptions(table.options, 'debugTable', 'getFilteredSelectedRowModel')\n )\n\n table.getGroupedSelectedRowModel = memo(\n () => [table.getState().rowSelection, table.getSortedRowModel()],\n (rowSelection, rowModel) => {\n if (!Object.keys(rowSelection).length) {\n return {\n rows: [],\n flatRows: [],\n rowsById: {},\n }\n }\n\n return selectRowsFn(table, rowModel)\n },\n getMemoOptions(table.options, 'debugTable', 'getGroupedSelectedRowModel')\n )\n\n ///\n\n // getGroupingRowCanSelect: rowId => {\n // const row = table.getRow(rowId)\n\n // if (!row) {\n // throw new Error()\n // }\n\n // if (typeof table.options.enableGroupingRowSelection === 'function') {\n // return table.options.enableGroupingRowSelection(row)\n // }\n\n // return table.options.enableGroupingRowSelection ?? false\n // },\n\n table.getIsAllRowsSelected = () => {\n const preGroupedFlatRows = table.getFilteredRowModel().flatRows\n const { rowSelection } = table.getState()\n\n let isAllRowsSelected = Boolean(\n preGroupedFlatRows.length && Object.keys(rowSelection).length\n )\n\n if (isAllRowsSelected) {\n if (\n preGroupedFlatRows.some(\n row => row.getCanSelect() && !rowSelection[row.id]\n )\n ) {\n isAllRowsSelected = false\n }\n }\n\n return isAllRowsSelected\n }\n\n table.getIsAllPageRowsSelected = () => {\n const paginationFlatRows = table\n .getPaginationRowModel()\n .flatRows.filter(row => row.getCanSelect())\n const { rowSelection } = table.getState()\n\n let isAllPageRowsSelected = !!paginationFlatRows.length\n\n if (\n isAllPageRowsSelected &&\n paginationFlatRows.some(row => !rowSelection[row.id])\n ) {\n isAllPageRowsSelected = false\n }\n\n return isAllPageRowsSelected\n }\n\n table.getIsSomeRowsSelected = () => {\n const totalSelected = Object.keys(\n table.getState().rowSelection ?? {}\n ).length\n return (\n totalSelected > 0 &&\n totalSelected < table.getFilteredRowModel().flatRows.length\n )\n }\n\n table.getIsSomePageRowsSelected = () => {\n const paginationFlatRows = table.getPaginationRowModel().flatRows\n return table.getIsAllPageRowsSelected()\n ? false\n : paginationFlatRows\n .filter(row => row.getCanSelect())\n .some(d => d.getIsSelected() || d.getIsSomeSelected())\n }\n\n table.getToggleAllRowsSelectedHandler = () => {\n return (e: unknown) => {\n table.toggleAllRowsSelected(\n ((e as MouseEvent).target as HTMLInputElement).checked\n )\n }\n }\n\n table.getToggleAllPageRowsSelectedHandler = () => {\n return (e: unknown) => {\n table.toggleAllPageRowsSelected(\n ((e as MouseEvent).target as HTMLInputElement).checked\n )\n }\n }\n },\n\n createRow: <TData extends RowData>(\n row: Row<TData>,\n table: Table<TData>\n ): void => {\n row.toggleSelected = (value, opts) => {\n const isSelected = row.getIsSelected()\n\n table.setRowSelection(old => {\n value = typeof value !== 'undefined' ? value : !isSelected\n\n if (row.getCanSelect() && isSelected === value) {\n return old\n }\n\n const selectedRowIds = { ...old }\n\n mutateRowIsSelected(\n selectedRowIds,\n row.id,\n value,\n opts?.selectChildren ?? true,\n table\n )\n\n return selectedRowIds\n })\n }\n row.getIsSelected = () => {\n const { rowSelection } = table.getState()\n return isRowSelected(row, rowSelection)\n }\n\n row.getIsSomeSelected = () => {\n const { rowSelection } = table.getState()\n return isSubRowSelected(row, rowSelection, table) === 'some'\n }\n\n row.getIsAllSubRowsSelected = () => {\n const { rowSelection } = table.getState()\n return isSubRowSelected(row, rowSelection, table) === 'all'\n }\n\n row.getCanSelect = () => {\n if (typeof table.options.enableRowSelection === 'function') {\n return table.options.enableRowSelection(row)\n }\n\n return table.options.enableRowSelection ?? true\n }\n\n row.getCanSelectSubRows = () => {\n if (typeof table.options.enableSubRowSelection === 'function') {\n return table.options.enableSubRowSelection(row)\n }\n\n return table.options.enableSubRowSelection ?? true\n }\n\n row.getCanMultiSelect = () => {\n if (typeof table.options.enableMultiRowSelection === 'function') {\n return table.options.enableMultiRowSelection(row)\n }\n\n return table.options.enableMultiRowSelection ?? true\n }\n row.getToggleSelectedHandler = () => {\n const canSelect = row.getCanSelect()\n\n return (e: unknown) => {\n if (!canSelect) return\n row.toggleSelected(\n ((e as MouseEvent).target as HTMLInputElement)?.checked\n )\n }\n }\n },\n}\n\nconst mutateRowIsSelected = <TData extends RowData>(\n selectedRowIds: Record<string, boolean>,\n id: string,\n value: boolean,\n includeChildren: boolean,\n table: Table<TData>\n) => {\n const row = table.getRow(id, true)\n\n // const isGrouped = row.getIsGrouped()\n\n // if ( // TODO: enforce grouping row selection rules\n // !isGrouped ||\n // (isGrouped && table.options.enableGroupingRowSelection)\n // ) {\n if (value) {\n if (!row.getCanMultiSelect()) {\n Object.keys(selectedRowIds).forEach(key => delete selectedRowIds[key])\n }\n if (row.getCanSelect()) {\n selectedRowIds[id] = true\n }\n } else {\n delete selectedRowIds[id]\n }\n // }\n\n if (includeChildren && row.subRows?.length && row.getCanSelectSubRows()) {\n row.subRows.forEach(row =>\n mutateRowIsSelected(selectedRowIds, row.id, value, includeChildren, table)\n )\n }\n}\n\nexport function selectRowsFn<TData extends RowData>(\n table: Table<TData>,\n rowModel: RowModel<TData>\n): RowModel<TData> {\n const rowSelection = table.getState().rowSelection\n\n const newSelectedFlatRows: Row<TData>[] = []\n const newSelectedRowsById: Record<string, Row<TData>> = {}\n\n // Filters top level and nested rows\n const recurseRows = (rows: Row<TData>[], depth = 0): Row<TData>[] => {\n return rows\n .map(row => {\n const isSelected = isRowSelected(row, rowSelection)\n\n if (isSelected) {\n newSelectedFlatRows.push(row)\n newSelectedRowsById[row.id] = row\n }\n\n if (row.subRows?.length) {\n row = {\n ...row,\n subRows: recurseRows(row.subRows, depth + 1),\n }\n }\n\n if (isSelected) {\n return row\n }\n })\n .filter(Boolean) as Row<TData>[]\n }\n\n return {\n rows: recurseRows(rowModel.rows),\n flatRows: newSelectedFlatRows,\n rowsById: newSelectedRowsById,\n }\n}\n\nexport function isRowSelected<TData extends RowData>(\n row: Row<TData>,\n selection: Record<string, boolean>\n): boolean {\n return selection[row.id] ?? false\n}\n\nexport function isSubRowSelected<TData extends RowData>(\n row: Row<TData>,\n selection: Record<string, boolean>,\n table: Table<TData>\n): boolean | 'some' | 'all' {\n if (!row.subRows?.length) return false\n\n let allChildrenSelected = true\n let someSelected = false\n\n row.subRows.forEach(subRow => {\n // Bail out early if we know both of these\n if (someSelected && !allChildrenSelected) {\n return\n }\n\n if (subRow.getCanSelect()) {\n if (isRowSelected(subRow, selection)) {\n someSelected = true\n } else {\n allChildrenSelected = false\n }\n }\n\n // Check row selection of nested subrows\n if (subRow.subRows && subRow.subRows.length) {\n const subRowChildrenSelected = isSubRowSelected(subRow, selection, table)\n if (subRowChildrenSelected === 'all') {\n someSelected = true\n } else if (subRowChildrenSelected === 'some') {\n someSelected = true\n allChildrenSelected = false\n } else {\n allChildrenSelected = false\n }\n }\n })\n\n return allChildrenSelected ? 'all' : someSelected ? 'some' : false\n}\n","import { SortingFn } from './features/RowSorting'\n\nexport const reSplitAlphaNumeric = /([0-9]+)/gm\n\nconst alphanumeric: SortingFn<any> = (rowA, rowB, columnId) => {\n return compareAlphanumeric(\n toString(rowA.getValue(columnId)).toLowerCase(),\n toString(rowB.getValue(columnId)).toLowerCase()\n )\n}\n\nconst alphanumericCaseSensitive: SortingFn<any> = (rowA, rowB, columnId) => {\n return compareAlphanumeric(\n toString(rowA.getValue(columnId)),\n toString(rowB.getValue(columnId))\n )\n}\n\n// The text filter is more basic (less numeric support)\n// but is much faster\nconst text: SortingFn<any> = (rowA, rowB, columnId) => {\n return compareBasic(\n toString(rowA.getValue(columnId)).toLowerCase(),\n toString(rowB.getValue(columnId)).toLowerCase()\n )\n}\n\n// The text filter is more basic (less numeric support)\n// but is much faster\nconst textCaseSensitive: SortingFn<any> = (rowA, rowB, columnId) => {\n return compareBasic(\n toString(rowA.getValue(columnId)),\n toString(rowB.getValue(columnId))\n )\n}\n\nconst datetime: SortingFn<any> = (rowA, rowB, columnId) => {\n const a = rowA.getValue<Date>(columnId)\n const b = rowB.getValue<Date>(columnId)\n\n // Can handle nullish values\n // Use > and < because == (and ===) doesn't work with\n // Date objects (would require calling getTime()).\n return a > b ? 1 : a < b ? -1 : 0\n}\n\nconst basic: SortingFn<any> = (rowA, rowB, columnId) => {\n return compareBasic(rowA.getValue(columnId), rowB.getValue(columnId))\n}\n\n// Utils\n\nfunction compareBasic(a: any, b: any) {\n return a === b ? 0 : a > b ? 1 : -1\n}\n\nfunction toString(a: any) {\n if (typeof a === 'number') {\n if (isNaN(a) || a === Infinity || a === -Infinity) {\n return ''\n }\n return String(a)\n }\n if (typeof a === 'string') {\n return a\n }\n return ''\n}\n\n// Mixed sorting is slow, but very inclusive of many edge cases.\n// It handles numbers, mixed alphanumeric combinations, and even\n// null, undefined, and Infinity\nfunction compareAlphanumeric(aStr: string, bStr: string) {\n // Split on number groups, but keep the delimiter\n // Then remove falsey split values\n const a = aStr.split(reSplitAlphaNumeric).filter(Boolean)\n const b = bStr.split(reSplitAlphaNumeric).filter(Boolean)\n\n // While\n while (a.length && b.length) {\n const aa = a.shift()!\n const bb = b.shift()!\n\n const an = parseInt(aa, 10)\n const bn = parseInt(bb, 10)\n\n const combo = [an, bn].sort()\n\n // Both are string\n if (isNaN(combo[0]!)) {\n if (aa > bb) {\n return 1\n }\n if (bb > aa) {\n return -1\n }\n continue\n }\n\n // One is a string, one is a number\n if (isNaN(combo[1]!)) {\n return isNaN(an) ? -1 : 1\n }\n\n // Both are numbers\n if (an > bn) {\n return 1\n }\n if (bn > an) {\n return -1\n }\n }\n\n return a.length - b.length\n}\n\n// Exports\n\nexport const sortingFns = {\n alphanumeric,\n alphanumericCaseSensitive,\n text,\n textCaseSensitive,\n datetime,\n basic,\n}\n\nexport type BuiltInSortingFn = keyof typeof sortingFns\n","import { RowModel } from '..'\nimport {\n BuiltInSortingFn,\n reSplitAlphaNumeric,\n sortingFns,\n} from '../sortingFns'\n\nimport {\n Column,\n OnChangeFn,\n Table,\n Row,\n Updater,\n RowData,\n SortingFns,\n TableFeature,\n} from '../types'\n\nimport { isFunction, makeStateUpdater } from '../utils'\n\nexport type SortDirection = 'asc' | 'desc'\n\nexport interface ColumnSort {\n desc: boolean\n id: string\n}\n\nexport type SortingState = ColumnSort[]\n\nexport interface SortingTableState {\n sorting: SortingState\n}\n\nexport interface SortingFn<TData extends RowData> {\n (rowA: Row<TData>, rowB: Row<TData>, columnId: string): number\n}\n\nexport type CustomSortingFns<TData extends RowData> = Record<\n string,\n SortingFn<TData>\n>\n\nexport type SortingFnOption<TData extends RowData> =\n | 'auto'\n | keyof SortingFns\n | BuiltInSortingFn\n | SortingFn<TData>\n\nexport interface SortingColumnDef<TData extends RowData> {\n /**\n * Enables/Disables multi-sorting for this column.\n * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/sorting#enablemultisort)\n * @link [Guide](https://tanstack.com/table/v8/docs/guide/sorting)\n */\n enableMultiSort?: boolean\n /**\n * Enables/Disables sorting for this column.\n * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/sorting#enablesorting)\n * @link [Guide](https://tanstack.com/table/v8/docs/guide/sorting)\n */\n enableSorting?: boolean\n /**\n * Inverts the order of the sorting for this column. This is useful for values that have an inverted best/worst scale where lower numbers are better, eg. a ranking (1st, 2nd, 3rd) or golf-like scoring\n * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/sorting#invertsorting)\n * @link [Guide](https://tanstack.com/table/v8/docs/guide/sorting)\n */\n invertSorting?: boolean\n /**\n * Set to `true` for sorting toggles on this column to start in the descending direction.\n * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/sorting#sortdescfirst)\n * @link [Guide](https://tanstack.com/table/v8/docs/guide/sorting)\n */\n sortDescFirst?: boolean\n /**\n * The sorting function to use with this column.\n * - A `string` referencing a built-in sorting function\n * - A custom sorting function\n * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/sorting#sortingfn)\n * @link [Guide](https://tanstack.com/table/v8/docs/guide/sorting)\n */\n sortingFn?: SortingFnOption<TData>\n /**\n * The priority of undefined values when sorting this column.\n * - `false`\n * - Undefined values will be considered tied and need to be sorted by the next column filter or original index (whichever applies)\n * - `-1`\n * - Undefined values will be sorted with higher priority (ascending) (if ascending, undefined will appear on the beginning of the list)\n * - `1`\n * - Undefined values will be sorted with lower priority (descending) (if ascending, undefined will appear on the end of the list)\n * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/sorting#sortundefined)\n * @link [Guide](https://tanstack.com/table/v8/docs/guide/sorting)\n */\n sortUndefined?: false | -1 | 1 | 'first' | 'last'\n}\n\nexport interface SortingColumn<TData extends RowData> {\n /**\n * Removes this column from the table's sorting state\n * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/sorting#clearsorting)\n * @link [Guide](https://tanstack.com/table/v8/docs/guide/sorting)\n */\n clearSorting: () => void\n /**\n * Returns a sort direction automatically inferred based on the columns values.\n * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/sorting#getautosortdir)\n * @link [Guide](https://tanstack.com/table/v8/docs/guide/sorting)\n */\n getAutoSortDir: () => SortDirection\n /**\n * Returns a sorting function automatically inferred based on the columns values.\n * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/sorting#getautosortingfn)\n * @link [Guide](https://tanstack.com/table/v8/docs/guide/sorting)\n */\n getAutoSortingFn: () => SortingFn<TData>\n /**\n * Returns whether this column can be multi-sorted.\n * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/sorting#getcanmultisort)\n * @link [Guide](https://tanstack.com/table/v8/docs/guide/sorting)\n */\n getCanMultiSort: () => boolean\n /**\n * Returns whether this column can be sorted.\n * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/sorting#getcansort)\n * @link [Guide](https://tanstack.com/table/v8/docs/guide/sorting)\n */\n getCanSort: () => boolean\n /**\n * Returns the first direction that should be used when sorting this column.\n * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/sorting#getfirstsortdir)\n * @link [Guide](https://tanstack.com/table/v8/docs/guide/sorting)\n */\n getFirstSortDir: () => SortDirection\n /**\n * Returns the current sort direction of this column.\n * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/sorting#getissorted)\n * @link [Guide](https://tanstack.com/table/v8/docs/guide/sorting)\n */\n getIsSorted: () => false | SortDirection\n /**\n * Returns the next sorting order.\n * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/sorting#getnextsortingorder)\n * @link [Guide](https://tanstack.com/table/v8/docs/guide/sorting)\n */\n getNextSortingOrder: () => SortDirection | false\n /**\n * Returns the index position of this column's sorting within the sorting state\n * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/sorting#getsortindex)\n * @link [Guide](https://tanstack.com/table/v8/docs/guide/sorting)\n */\n getSortIndex: () => number\n /**\n * Returns the resolved sorting function to be used for this column\n * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/sorting#getsortingfn)\n * @link [Guide](https://tanstack.com/table/v8/docs/guide/sorting)\n */\n getSortingFn: () => SortingFn<TData>\n /**\n * Returns a function that can be used to toggle this column's sorting state. This is useful for attaching a click handler to the column header.\n * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/sorting#gettogglesortinghandler)\n * @link [Guide](https://tanstack.com/table/v8/docs/guide/sorting)\n */\n getToggleSortingHandler: () => undefined | ((event: unknown) => void)\n /**\n * Toggles this columns sorting state. If `desc` is provided, it will force the sort direction to that value. If `isMulti` is provided, it will additivity multi-sort the column (or toggle it if it is already sorted).\n * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/sorting#togglesorting)\n * @link [Guide](https://tanstack.com/table/v8/docs/guide/sorting)\n */\n toggleSorting: (desc?: boolean, isMulti?: boolean) => void\n}\n\ninterface SortingOptionsBase {\n /**\n * Enables/disables the ability to remove multi-sorts\n * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/sorting#enablemultiremove)\n * @link [Guide](https://tanstack.com/table/v8/docs/guide/sorting)\n */\n enableMultiRemove?: boolean\n /**\n * Enables/Disables multi-sorting for the table.\n * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/sorting#enablemultisort)\n * @link [Guide](https://tanstack.com/table/v8/docs/guide/sorting)\n */\n enableMultiSort?: boolean\n /**\n * Enables/Disables sorting for the table.\n * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/sorting#enablesorting)\n * @link [Guide](https://tanstack.com/table/v8/docs/guide/sorting)\n */\n enableSorting?: boolean\n /**\n * Enables/Disables the ability to remove sorting for the table.\n * - If `true` then changing sort order will circle like: 'none' -> 'desc' -> 'asc' -> 'none' -> ...\n * - If `false` then changing sort order will circle like: 'none' -> 'desc' -> 'asc' -> 'desc' -> 'asc' -> ...\n * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/sorting#enablesortingremoval)\n * @link [Guide](https://tanstack.com/table/v8/docs/guide/sorting)\n */\n enableSortingRemoval?: boolean\n /**\n * This function is used to retrieve the sorted row model. If using server-side sorting, this function is not required. To use client-side sorting, pass the exported `getSortedRowModel()` from your adapter to your table or implement your own.\n * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/sorting#getsortedrowmodel)\n * @link [Guide](https://tanstack.com/table/v8/docs/guide/sorting)\n */\n getSortedRowModel?: (table: Table<any>) => () => RowModel<any>\n /**\n * Pass a custom function that will be used to determine if a multi-sort event should be triggered. It is passed the event from the sort toggle handler and should return `true` if the event should trigger a multi-sort.\n * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/sorting#ismultisortevent)\n * @link [Guide](https://tanstack.com/table/v8/docs/guide/sorting)\n */\n isMultiSortEvent?: (e: unknown) => boolean\n /**\n * Enables manual sorting for the table. If this is `true`, you will be expected to sort your data before it is passed to the table. This is useful if you are doing server-side sorting.\n * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/sorting#manualsorting)\n * @link [Guide](https://tanstack.com/table/v8/docs/guide/sorting)\n */\n manualSorting?: boolean\n /**\n * Set a maximum number of columns that can be multi-sorted.\n * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/sorting#maxmultisortcolcount)\n * @link [Guide](https://tanstack.com/table/v8/docs/guide/sorting)\n */\n maxMultiSortColCount?: number\n /**\n * If provided, this function will be called with an `updaterFn` when `state.sorting` changes. This overrides the default internal state management, so you will need to persist the state change either fully or partially outside of the table.\n * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/sorting#onsortingchange)\n * @link [Guide](https://tanstack.com/table/v8/docs/guide/sorting)\n */\n onSortingChange?: OnChangeFn<SortingState>\n /**\n * If `true`, all sorts will default to descending as their first toggle state.\n * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/sorting#sortdescfirst)\n * @link [Guide](https://tanstack.com/table/v8/docs/guide/sorting)\n */\n sortDescFirst?: boolean\n}\n\ntype ResolvedSortingFns = keyof SortingFns extends never\n ? {\n sortingFns?: Record<string, SortingFn<any>>\n }\n : {\n sortingFns: Record<keyof SortingFns, SortingFn<any>>\n }\n\nexport interface SortingOptions<TData extends RowData>\n extends SortingOptionsBase,\n ResolvedSortingFns {}\n\nexport interface SortingInstance<TData extends RowData> {\n _getSortedRowModel?: () => RowModel<TData>\n /**\n * Returns the row model for the table before any sorting has been applied.\n * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/sorting#getpresortedrowmodel)\n * @link [Guide](https://tanstack.com/table/v8/docs/guide/sorting)\n */\n getPreSortedRowModel: () => RowModel<TData>\n /**\n * Returns the row model for the table after sorting has been applied.\n * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/sorting#getsortedrowmodel)\n * @link [Guide](https://tanstack.com/table/v8/docs/guide/sorting)\n */\n getSortedRowModel: () => RowModel<TData>\n /**\n * Resets the **sorting** state to `initialState.sorting`, or `true` can be passed to force a default blank state reset to `[]`.\n * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/sorting#resetsorting)\n * @link [Guide](https://tanstack.com/table/v8/docs/guide/sorting)\n */\n resetSorting: (defaultState?: boolean) => void\n /**\n * Sets or updates the `state.sorting` state.\n * @link [API Docs](https://tanstack.com/table/v8/docs/api/features/sorting#setsorting)\n * @link [Guide](https://tanstack.com/table/v8/docs/guide/sorting)\n */\n setSorting: (updater: Updater<SortingState>) => void\n}\n\n//\n\nexport const RowSorting: TableFeature = {\n getInitialState: (state): SortingTableState => {\n return {\n sorting: [],\n ...state,\n }\n },\n\n getDefaultColumnDef: <TData extends RowData>(): SortingColumnDef<TData> => {\n return {\n sortingFn: 'auto',\n sortUndefined: 1,\n }\n },\n\n getDefaultOptions: <TData extends RowData>(\n table: Table<TData>\n ): SortingOptions<TData> => {\n return {\n onSortingChange: makeStateUpdater('sorting', table),\n isMultiSortEvent: (e: unknown) => {\n return (e as MouseEvent).shiftKey\n },\n }\n },\n\n createColumn: <TData extends RowData, TValue>(\n column: Column<TData, TValue>,\n table: Table<TData>\n ): void => {\n column.getAutoSortingFn = () => {\n const firstRows = table.getFilteredRowModel().flatRows.slice(10)\n\n let isString = false\n\n for (const row of firstRows) {\n const value = row?.getValue(column.id)\n\n if (Object.prototype.toString.call(value) === '[object Date]') {\n return sortingFns.datetime\n }\n\n if (typeof value === 'string') {\n isString = true\n\n if (value.split(reSplitAlphaNumeric).length > 1) {\n return sortingFns.alphanumeric\n }\n }\n }\n\n if (isString) {\n return sortingFns.text\n }\n\n return sortingFns.basic\n }\n column.getAutoSortDir = () => {\n const firstRow = table.getFilteredRowModel().flatRows[0]\n\n const value = firstRow?.getValue(column.id)\n\n if (typeof value === 'string') {\n return 'asc'\n }\n\n return 'desc'\n }\n column.getSortingFn = () => {\n if (!column) {\n throw new Error()\n }\n\n return isFunction(column.columnDef.sortingFn)\n ? column.columnDef.sortingFn\n : column.columnDef.sortingFn === 'auto'\n ? column.getAutoSortingFn()\n : table.options.sortingFns?.[column.columnDef.sortingFn as string] ??\n sortingFns[column.columnDef.sortingFn as BuiltInSortingFn]\n }\n column.toggleSorting = (desc, multi) => {\n // if (column.columns.length) {\n // column.columns.forEach((c, i) => {\n // if (c.id) {\n // table.toggleColumnSorting(c.id, undefined, multi || !!i)\n // }\n // })\n // return\n // }\n\n // this needs to be outside of table.setSorting to be in sync with rerender\n const nextSortingOrder = column.getNextSortingOrder()\n const hasManualValue = typeof desc !== 'undefined' && desc !== null\n\n table.setSorting(old => {\n // Find any existing sorting for this column\n const existingSorting = old?.find(d => d.id === column.id)\n const existingIndex = old?.findIndex(d => d.id === column.id)\n\n let newSorting: SortingState = []\n\n // What should we do with this sort action?\n let sortAction: 'add' | 'remove' | 'toggle' | 'replace'\n let nextDesc = hasManualValue ? desc : nextSortingOrder === 'desc'\n\n // Multi-mode\n if (old?.length && column.getCanMultiSort() && multi) {\n if (existingSorting) {\n sortAction = 'toggle'\n } else {\n sortAction = 'add'\n }\n } else {\n // Normal mode\n if (old?.length && existingIndex !== old.length - 1) {\n sortAction = 'replace'\n } else if (existingSorting) {\n sortAction = 'toggle'\n } else {\n sortAction = 'replace'\n }\n }\n\n // Handle toggle states that will remove the sorting\n if (sortAction === 'toggle') {\n // If we are \"actually\" toggling (not a manual set value), should we remove the sorting?\n if (!hasManualValue) {\n // Is our intention to remove?\n if (!nextSortingOrder) {\n sortAction = 'remove'\n }\n }\n }\n\n if (sortAction === 'add') {\n newSorting = [\n ...old,\n {\n id: column.id,\n desc: nextDesc,\n },\n ]\n // Take latest n columns\n newSorting.splice(\n 0,\n newSorting.length -\n (table.options.maxMultiSortColCount ?? Number.MAX_SAFE_INTEGER)\n )\n } else if (sortAction === 'toggle') {\n // This flips (or sets) the\n newSorting = old.map(d => {\n if (d.id === column.id) {\n return {\n ...d,\n desc: nextDesc,\n }\n }\n return d\n })\n } else if (sortAction === 'remove') {\n newSorting = old.filter(d => d.id !== column.id)\n } else {\n newSorting = [\n {\n id: column.id,\n desc: nextDesc,\n },\n ]\n }\n\n return newSorting\n })\n }\n\n column.getFirstSortDir = () => {\n const sortDescFirst =\n column.columnDef.sortDescFirst ??\n table.options.sortDescFirst ??\n column.getAutoSortDir() === 'desc'\n return sortDescFirst ? 'desc' : 'asc'\n }\n\n column.getNextSortingOrder = (multi?: boolean) => {\n const firstSortDirection = column.getFirstSortDir()\n const isSorted = column.getIsSorted()\n\n if (!isSorted) {\n return firstSortDirection\n }\n\n if (\n isSorted !== firstSortDirection &&\n (table.options.enableSortingRemoval ?? true) && // If enableSortRemove, enable in general\n (multi ? table.options.enableMultiRemove ?? true : true) // If multi, don't allow if enableMultiRemove))\n ) {\n return false\n }\n return isSorted === 'desc' ? 'asc' : 'desc'\n }\n\n column.getCanSort = () => {\n return (\n (column.columnDef.enableSorting ?? true) &&\n (table.options.enableSorting ?? true) &&\n !!column.accessorFn\n )\n }\n\n column.getCanMultiSort = () => {\n return (\n column.columnDef.enableMultiSort ??\n table.options.enableMultiSort ??\n !!column.accessorFn\n )\n }\n\n column.getIsSorted = () => {\n const columnSort = table.getState().sorting?.find(d => d.id === column.id)\n\n return !columnSort ? false : columnSort.desc ? 'desc' : 'asc'\n }\n\n column.getSortIndex = () =>\n table.getState().sorting?.findIndex(d => d.id === column.id) ?? -1\n\n column.clearSorting = () => {\n //clear sorting for just 1 column\n table.setSorting(old =>\n old?.length ? old.filter(d => d.id !== column.id) : []\n )\n }\n\n column.getToggleSortingHandler = () => {\n const canSort = column.getCanSort()\n\n return (e: unknown) => {\n if (!canSort) return\n ;(e as any).persist?.()\n column.toggleSorting?.(\n undefined,\n column.getCanMultiSort() ? table.options.isMultiSortEvent?.(e) : false\n )\n }\n }\n },\n\n createTable: <TData extends RowData>(table: Table<TData>): void => {\n table.setSorting = updater => table.options.onSortingChange?.(updater)\n table.resetSorting = defaultState => {\n table.setSorting(defaultState ? [] : table.initialState?.sorting ?? [])\n }\n table.getPreSortedRowModel = () => table.getGroupedRowModel()\n table.getSortedRowModel = () => {\n if (!table._getSortedRowModel && table.options.getSortedRowModel) {\n table._getSortedRowModel = table.options.getSortedRowModel(table)\n }\n\n if (table.options.manualSorting || !table._getSortedRowModel) {\n return table.getPreSortedRowModel()\n }\n\n return table._getSortedRowModel()\n }\n },\n}\n","import { functionalUpdate, getMemoOptions, memo, RequiredKeys } from '../utils'\n\nimport {\n Updater,\n TableOptionsResolved,\n TableState,\n Table,\n InitialTableState,\n Row,\n Column,\n RowModel,\n ColumnDef,\n TableOptions,\n RowData,\n TableMeta,\n ColumnDefResolved,\n GroupColumnDef,\n TableFeature,\n} from '../types'\n\n//\nimport { createColumn } from './column'\nimport { Headers } from './headers'\n//\n\nimport { ColumnFaceting } from '../features/ColumnFaceting'\nimport { ColumnFiltering } from '../features/ColumnFiltering'\nimport { ColumnGrouping } from '../features/ColumnGrouping'\nimport { ColumnOrdering } from '../features/ColumnOrdering'\nimport { ColumnPinning } from '../features/ColumnPinning'\nimport { ColumnSizing } from '../features/ColumnSizing'\nimport { ColumnVisibility } from '../features/ColumnVisibility'\nimport { GlobalFaceting } from '../features/GlobalFaceting'\nimport { GlobalFiltering } from '../features/GlobalFiltering'\nimport { RowExpanding } from '../features/RowExpanding'\nimport { RowPagination } from '../features/RowPagination'\nimport { RowPinning } from '../features/RowPinning'\nimport { RowSelection } from '../features/RowSelection'\nimport { RowSorting } from '../features/RowSorting'\n\nconst builtInFeatures = [\n Headers,\n ColumnVisibility,\n ColumnOrdering,\n ColumnPinning,\n ColumnFaceting,\n ColumnFiltering,\n GlobalFaceting, //depends on ColumnFaceting\n GlobalFiltering, //depends on ColumnFiltering\n RowSorting,\n ColumnGrouping, //depends on RowSorting\n RowExpanding,\n RowPagination,\n RowPinning,\n RowSelection,\n ColumnSizing,\n] as const\n\n//\n\nexport interface CoreTableState {}\n\nexport interface CoreOptions<TData extends RowData> {\n /**\n * An array of extra features that you can add to the table instance.\n * @link [API Docs](https://tanstack.com/table/v8/docs/api/core/table#_features)\n * @link [Guide](https://tanstack.com/table/v8/docs/guide/tables)\n */\n _features?: TableFeature[]\n /**\n * Set this option to override any of the `autoReset...` feature options.\n * @link [API Docs](https://tanstack.com/table/v8/docs/api/core/table#autoresetall)\n * @link [Guide](https://tanstack.com/table/v8/docs/guide/tables)\n */\n autoResetAll?: boolean\n /**\n * The array of column defs to use for the table.\n * @link [API Docs](https://tanstack.com/table/v8/docs/api/core/table#columns)\n * @link [Guide](https://tanstack.com/table/v8/docs/guide/tables)\n */\n columns: ColumnDef<TData, any>[]\n /**\n * The data for the table to display. This array should match the type you provided to `table.setRowType<...>`. Columns can access this data via string/index or a functional accessor. When the `data` option changes reference, the table will reprocess the data.\n * @link [API Docs](https://tanstack.com/table/v8/docs/api/core/table#data)\n * @link [Guide](https://tanstack.com/table/v8/docs/guide/tables)\n */\n data: TData[]\n /**\n * Set this option to `true` to output all debugging information to the console.\n * @link [API Docs](https://tanstack.com/table/v8/docs/api/core/table#debugall)\n * @link [Guide](https://tanstack.com/table/v8/docs/guide/tables)\n */\n debugAll?: boolean\n /**\n * Set this option to `true` to output cell debugging information to the console.\n * @link [API Docs](https://tanstack.com/table/v8/docs/api/core/table#debugcells]\n * @link [Guide](https://tanstack.com/table/v8/docs/guide/tables)\n */\n debugCells?: boolean\n /**\n * Set this option to `true` to output column debugging information to the console.\n * @link [API Docs](https://tanstack.com/table/v8/docs/api/core/table#debugcolumns)\n * @link [Guide](https://tanstack.com/table/v8/docs/guide/tables)\n */\n debugColumns?: boolean\n /**\n * Set this option to `true` to output header debugging information to the console.\n * @link [API Docs](https://tanstack.com/table/v8/docs/api/core/table#debugheaders)\n * @link [Guide](https://tanstack.com/table/v8/docs/guide/tables)\n */\n debugHeaders?: boolean\n /**\n * Set this option to `true` to output row debugging information to the console.\n * @link [API Docs](https://tanstack.com/table/v8/docs/api/core/table#debugrows)\n * @link [Guide](https://tanstack.com/table/v8/docs/guide/tables)\n */\n debugRows?: boolean\n /**\n * Set this option to `true` to output table debugging information to the console.\n * @link [API Docs](https://tanstack.com/table/v8/docs/api/core/table#debugtable)\n * @link [Guide](https://tanstack.com/table/v8/docs/guide/tables)\n */\n debugTable?: boolean\n /**\n * Default column options to use for all column defs supplied to the table.\n * @link [API Docs](https://tanstack.com/table/v8/docs/api/core/table#defaultcolumn)\n * @link [Guide](https://tanstack.com/table/v8/docs/guide/tables)\n */\n defaultColumn?: Partial<ColumnDef<TData, unknown>>\n /**\n * This required option is a factory for a function that computes and returns the core row model for the table.\n * @link [API Docs](https://tanstack.com/table/v8/docs/api/core/table#getcorerowmodel)\n * @link [Guide](https://tanstack.com/table/v8/docs/guide/tables)\n */\n getCoreRowModel: (table: Table<any>) => () => RowModel<any>\n /**\n * This optional function is used to derive a unique ID for any given row. If not provided the rows index is used (nested rows join together with `.` using their grandparents' index eg. `index.index.index`). If you need to identify individual rows that are originating from any server-side operations, it's suggested you use this function to return an ID that makes sense regardless of network IO/ambiguity eg. a userId, taskId, database ID field, etc.\n * @example getRowId: row => row.userId\n * @link [API Docs](https://tanstack.com/table/v8/docs/api/core/table#getrowid)\n * @link [Guide](https://tanstack.com/table/v8/docs/guide/tables)\n */\n getRowId?: (originalRow: TData, index: number, parent?: Row<TData>) => string\n /**\n * This optional function is used to access the sub rows for any given row. If you are using nested rows, you will need to use this function to return the sub rows object (or undefined) from the row.\n * @example getSubRows: row => row.subRows\n * @link [API Docs](https://tanstack.com/table/v8/docs/api/core/table#getsubrows)\n * @link [Guide](https://tanstack.com/table/v8/docs/guide/tables)\n */\n getSubRows?: (originalRow: TData, index: number) => undefined | TData[]\n /**\n * Use this option to optionally pass initial state to the table. This state will be used when resetting various table states either automatically by the table (eg. `options.autoResetPageIndex`) or via functions like `table.resetRowSelection()`. Most reset function allow you optionally pass a flag to reset to a blank/default state instead of the initial state.\n *\n * Table state will not be reset when this object changes, which also means that the initial state object does not need to be stable.\n *\n * @link [API Docs](https://tanstack.com/table/v8/docs/api/core/table#initialstate)\n * @link [Guide](https://tanstack.com/table/v8/docs/guide/tables)\n */\n initialState?: InitialTableState\n /**\n * This option is used to optionally implement the merging of table options.\n * @link [API Docs](https://tanstack.com/table/v8/docs/api/core/table#mergeoptions)\n * @link [Guide](https://tanstack.com/table/v8/docs/guide/tables)\n */\n mergeOptions?: (\n defaultOptions: TableOptions<TData>,\n options: Partial<TableOptions<TData>>\n ) => TableOptions<TData>\n /**\n * You can pass any object to `options.meta` and access it anywhere the `table` is available via `table.options.meta`.\n * @link [API Docs](https://tanstack.com/table/v8/docs/api/core/table#meta)\n * @link [Guide](https://tanstack.com/table/v8/docs/guide/tables)\n */\n meta?: TableMeta<TData>\n /**\n * The `onStateChange` option can be used to optionally listen to state changes within the table.\n * @link [API Docs](https://tanstack.com/table/v8/docs/api/core/table#onstatechange)\n * @link [Guide](https://tanstack.com/table/v8/docs/guide/tables)\n */\n onStateChange: (updater: Updater<TableState>) => void\n /**\n * Value used when the desired value is not found in the data.\n * @link [API Docs](https://tanstack.com/table/v8/docs/api/core/table#renderfallbackvalue)\n * @link [Guide](https://tanstack.com/table/v8/docs/guide/tables)\n */\n renderFallbackValue: any\n /**\n * The `state` option can be used to optionally _control_ part or all of the table state. The state you pass here will merge with and overwrite the internal automatically-managed state to produce the final state for the table. You can also listen to state changes via the `onStateChange` option.\n * > Note: Any state passed in here will override both the internal state and any other `initialState` you provide.\n * @link [API Docs](https://tanstack.com/table/v8/docs/api/core/table#state)\n * @link [Guide](https://tanstack.com/table/v8/docs/guide/tables)\n */\n state: Partial<TableState>\n}\n\nexport interface CoreInstance<TData extends RowData> {\n _features: readonly TableFeature[]\n _getAllFlatColumnsById: () => Record<string, Column<TData, unknown>>\n _getColumnDefs: () => ColumnDef<TData, unknown>[]\n _getCoreRowModel?: () => RowModel<TData>\n _getDefaultColumnDef: () => Partial<ColumnDef<TData, unknown>>\n _getRowId: (_: TData, index: number, parent?: Row<TData>) => string\n _queue: (cb: () => void) => void\n /**\n * Returns all columns in the table in their normalized and nested hierarchy.\n * @link [API Docs](https://tanstack.com/table/v8/docs/api/core/table#getallcolumns)\n * @link [Guide](https://tanstack.com/table/v8/docs/guide/tables)\n */\n getAllColumns: () => Column<TData, unknown>[]\n /**\n * Returns all columns in the table flattened to a single level.\n * @link [API Docs](https://tanstack.com/table/v8/docs/api/core/table#getallflatcolumns)\n * @link [Guide](https://tanstack.com/table/v8/docs/guide/tables)\n */\n getAllFlatColumns: () => Column<TData, unknown>[]\n /**\n * Returns all leaf-node columns in the table flattened to a single level. This does not include parent columns.\n * @link [API Docs](https://tanstack.com/table/v8/docs/api/core/table#getallleafcolumns)\n * @link [Guide](https://tanstack.com/table/v8/docs/guide/tables)\n */\n getAllLeafColumns: () => Column<TData, unknown>[]\n /**\n * Returns a single column by its ID.\n * @link [API Docs](https://tanstack.com/table/v8/docs/api/core/table#getcolumn)\n * @link [Guide](https://tanstack.com/table/v8/docs/guide/tables)\n */\n getColumn: (columnId: string) => Column<TData, unknown> | undefined\n /**\n * Returns the core row model before any processing has been applied.\n * @link [API Docs](https://tanstack.com/table/v8/docs/api/core/table#getcorerowmodel)\n * @link [Guide](https://tanstack.com/table/v8/docs/guide/tables)\n */\n getCoreRowModel: () => RowModel<TData>\n /**\n * Returns the row with the given ID.\n * @link [API Docs](https://tanstack.com/table/v8/docs/api/core/table#getrow)\n * @link [Guide](https://tanstack.com/table/v8/docs/guide/tables)\n */\n getRow: (id: string, searchAll?: boolean) => Row<TData>\n /**\n * Returns the final model after all processing from other used features has been applied. This is the row model that is most commonly used for rendering.\n * @link [API Docs](https://tanstack.com/table/v8/docs/api/core/table#getrowmodel)\n * @link [Guide](https://tanstack.com/table/v8/docs/guide/tables)\n */\n getRowModel: () => RowModel<TData>\n /**\n * Call this function to get the table's current state. It's recommended to use this function and its state, especially when managing the table state manually. It is the exact same state used internally by the table for every feature and function it provides.\n * @link [API Docs](https://tanstack.com/table/v8/docs/api/core/table#getstate)\n * @link [Guide](https://tanstack.com/table/v8/docs/guide/tables)\n */\n getState: () => TableState\n /**\n * This is the resolved initial state of the table.\n * @link [API Docs](https://tanstack.com/table/v8/docs/api/core/table#initialstate)\n * @link [Guide](https://tanstack.com/table/v8/docs/guide/tables)\n */\n initialState: TableState\n /**\n * A read-only reference to the table's current options.\n * @link [API Docs](https://tanstack.com/table/v8/docs/api/core/table#options)\n * @link [Guide](https://tanstack.com/table/v8/docs/guide/tables)\n */\n options: RequiredKeys<TableOptionsResolved<TData>, 'state'>\n /**\n * Call this function to reset the table state to the initial state.\n * @link [API Docs](https://tanstack.com/table/v8/docs/api/core/table#reset)\n * @link [Guide](https://tanstack.com/table/v8/docs/guide/tables)\n */\n reset: () => void\n /**\n * This function can be used to update the table options.\n * @link [API Docs](https://tanstack.com/table/v8/docs/api/core/table#setoptions)\n * @link [Guide](https://tanstack.com/table/v8/docs/guide/tables)\n */\n setOptions: (newOptions: Updater<TableOptionsResolved<TData>>) => void\n /**\n * Call this function to update the table state.\n * @link [API Docs](https://tanstack.com/table/v8/docs/api/core/table#setstate)\n * @link [Guide](https://tanstack.com/table/v8/docs/guide/tables)\n */\n setState: (updater: Updater<TableState>) => void\n}\n\nexport function createTable<TData extends RowData>(\n options: TableOptionsResolved<TData>\n): Table<TData> {\n if (\n process.env.NODE_ENV !== 'production' &&\n (options.debugAll || options.debugTable)\n ) {\n console.info('Creating Table Instance...')\n }\n\n const _features = [...builtInFeatures, ...(options._features ?? [])]\n\n let table = { _features } as unknown as Table<TData>\n\n const defaultOptions = table._features.reduce((obj, feature) => {\n return Object.assign(obj, feature.getDefaultOptions?.(table))\n }, {}) as TableOptionsResolved<TData>\n\n const mergeOptions = (options: TableOptionsResolved<TData>) => {\n if (table.options.mergeOptions) {\n return table.options.mergeOptions(defaultOptions, options)\n }\n\n return {\n ...defaultOptions,\n ...options,\n }\n }\n\n const coreInitialState: CoreTableState = {}\n\n let initialState = {\n ...coreInitialState,\n ...(options.initialState ?? {}),\n } as TableState\n\n table._features.forEach(feature => {\n initialState = (feature.getInitialState?.(initialState) ??\n initialState) as TableState\n })\n\n const queued: (() => void)[] = []\n let queuedTimeout = false\n\n const coreInstance: CoreInstance<TData> = {\n _features,\n options: {\n ...defaultOptions,\n ...options,\n },\n initialState,\n _queue: cb => {\n queued.push(cb)\n\n if (!queuedTimeout) {\n queuedTimeout = true\n\n // Schedule a microtask to run the queued callbacks after\n // the current call stack (render, etc) has finished.\n Promise.resolve()\n .then(() => {\n while (queued.length) {\n queued.shift()!()\n }\n queuedTimeout = false\n })\n .catch(error =>\n setTimeout(() => {\n throw error\n })\n )\n }\n },\n reset: () => {\n table.setState(table.initialState)\n },\n setOptions: updater => {\n const newOptions = functionalUpdate(updater, table.options)\n table.options = mergeOptions(newOptions) as RequiredKeys<\n TableOptionsResolved<TData>,\n 'state'\n >\n },\n\n getState: () => {\n return table.options.state as TableState\n },\n\n setState: (updater: Updater<TableState>) => {\n table.options.onStateChange?.(updater)\n },\n\n _getRowId: (row: TData, index: number, parent?: Row<TData>) =>\n table.options.getRowId?.(row, index, parent) ??\n `${parent ? [parent.id, index].join('.') : index}`,\n\n getCoreRowModel: () => {\n if (!table._getCoreRowModel) {\n table._getCoreRowModel = table.options.getCoreRowModel(table)\n }\n\n return table._getCoreRowModel!()\n },\n\n // The final calls start at the bottom of the model,\n // expanded rows, which then work their way up\n\n getRowModel: () => {\n return table.getPaginationRowModel()\n },\n //in next version, we should just pass in the row model as the optional 2nd arg\n getRow: (id: string, searchAll?: boolean) => {\n let row = (\n searchAll ? table.getPrePaginationRowModel() : table.getRowModel()\n ).rowsById[id]\n\n if (!row) {\n row = table.getCoreRowModel().rowsById[id]\n if (!row) {\n if (process.env.NODE_ENV !== 'production') {\n throw new Error(`getRow could not find row with ID: ${id}`)\n }\n throw new Error()\n }\n }\n\n return row\n },\n _getDefaultColumnDef: memo(\n () => [table.options.defaultColumn],\n defaultColumn => {\n defaultColumn = (defaultColumn ?? {}) as Partial<\n ColumnDef<TData, unknown>\n >\n\n return {\n header: props => {\n const resolvedColumnDef = props.header.column\n .columnDef as ColumnDefResolved<TData>\n\n if (resolvedColumnDef.accessorKey) {\n return resolvedColumnDef.accessorKey\n }\n\n if (resolvedColumnDef.accessorFn) {\n return resolvedColumnDef.id\n }\n\n return null\n },\n // footer: props => props.header.column.id,\n cell: props => props.renderValue<any>()?.toString?.() ?? null,\n ...table._features.reduce((obj, feature) => {\n return Object.assign(obj, feature.getDefaultColumnDef?.())\n }, {}),\n ...defaultColumn,\n } as Partial<ColumnDef<TData, unknown>>\n },\n getMemoOptions(options, 'debugColumns', '_getDefaultColumnDef')\n ),\n\n _getColumnDefs: () => table.options.columns,\n\n getAllColumns: memo(\n () => [table._getColumnDefs()],\n columnDefs => {\n const recurseColumns = (\n columnDefs: ColumnDef<TData, unknown>[],\n parent?: Column<TData, unknown>,\n depth = 0\n ): Column<TData, unknown>[] => {\n return columnDefs.map(columnDef => {\n const column = createColumn(table, columnDef, depth, parent)\n\n const groupingColumnDef = columnDef as GroupColumnDef<\n TData,\n unknown\n >\n\n column.columns = groupingColumnDef.columns\n ? recurseColumns(groupingColumnDef.columns, column, depth + 1)\n : []\n\n return column\n })\n }\n\n return recurseColumns(columnDefs)\n },\n getMemoOptions(options, 'debugColumns', 'getAllColumns')\n ),\n\n getAllFlatColumns: memo(\n () => [table.getAllColumns()],\n allColumns => {\n return allColumns.flatMap(column => {\n return column.getFlatColumns()\n })\n },\n getMemoOptions(options, 'debugColumns', 'getAllFlatColumns')\n ),\n\n _getAllFlatColumnsById: memo(\n () => [table.getAllFlatColumns()],\n flatColumns => {\n return flatColumns.reduce(\n (acc, column) => {\n acc[column.id] = column\n return acc\n },\n {} as Record<string, Column<TData, unknown>>\n )\n },\n getMemoOptions(options, 'debugColumns', 'getAllFlatColumnsById')\n ),\n\n getAllLeafColumns: memo(\n () => [table.getAllColumns(), table._getOrderColumnsFn()],\n (allColumns, orderColumns) => {\n let leafColumns = allColumns.flatMap(column => column.getLeafColumns())\n return orderColumns(leafColumns)\n },\n getMemoOptions(options, 'debugColumns', 'getAllLeafColumns')\n ),\n\n getColumn: columnId => {\n const column = table._getAllFlatColumnsById()[columnId]\n\n if (process.env.NODE_ENV !== 'production' && !column) {\n console.error(`[Table] Column with id '${columnId}' does not exist.`)\n }\n\n return column\n },\n }\n\n Object.assign(table, coreInstance)\n\n for (let index = 0; index < table._features.length; index++) {\n const feature = table._features[index]\n feature?.createTable?.(table)\n }\n\n return table\n}\n","import { createRow } from '../core/row'\nimport { Table, Row, RowModel, RowData } from '../types'\nimport { getMemoOptions, memo } from '../utils'\n\nexport function getCoreRowModel<TData extends RowData>(): (\n table: Table<TData>\n) => () => RowModel<TData> {\n return table =>\n memo(\n () => [table.options.data],\n (\n data\n ): {\n rows: Row<TData>[]\n flatRows: Row<TData>[]\n rowsById: Record<string, Row<TData>>\n } => {\n const rowModel: RowModel<TData> = {\n rows: [],\n flatRows: [],\n rowsById: {},\n }\n\n const accessRows = (\n originalRows: TData[],\n depth = 0,\n parentRow?: Row<TData>\n ): Row<TData>[] => {\n const rows = [] as Row<TData>[]\n\n for (let i = 0; i < originalRows.length; i++) {\n // This could be an expensive check at scale, so we should move it somewhere else, but where?\n // if (!id) {\n // if (process.env.NODE_ENV !== 'production') {\n // throw new Error(`getRowId expected an ID, but got ${id}`)\n // }\n // }\n\n // Make the row\n const row = createRow(\n table,\n table._getRowId(originalRows[i]!, i, parentRow),\n originalRows[i]!,\n i,\n depth,\n undefined,\n parentRow?.id\n )\n\n // Keep track of every row in a flat array\n rowModel.flatRows.push(row)\n // Also keep track of every row by its ID\n rowModel.rowsById[row.id] = row\n // Push table row into parent\n rows.push(row)\n\n // Get the original subrows\n if (table.options.getSubRows) {\n row.originalSubRows = table.options.getSubRows(\n originalRows[i]!,\n i\n )\n\n // Then recursively access them\n if (row.originalSubRows?.length) {\n row.subRows = accessRows(row.originalSubRows, depth + 1, row)\n }\n }\n }\n\n return rows\n }\n\n rowModel.rows = accessRows(data)\n\n return rowModel\n },\n getMemoOptions(table.options, 'debugTable', 'getRowModel', () =>\n table._autoResetPageIndex()\n )\n )\n}\n","import { Table, Row, RowModel, RowData } from '../types'\nimport { getMemoOptions, memo } from '../utils'\n\nexport function getExpandedRowModel<TData extends RowData>(): (\n table: Table<TData>\n) => () => RowModel<TData> {\n return table =>\n memo(\n () => [\n table.getState().expanded,\n table.getPreExpandedRowModel(),\n table.options.paginateExpandedRows,\n ],\n (expanded, rowModel, paginateExpandedRows) => {\n if (\n !rowModel.rows.length ||\n (expanded !== true && !Object.keys(expanded ?? {}).length)\n ) {\n return rowModel\n }\n\n if (!paginateExpandedRows) {\n // Only expand rows at this point if they are being paginated\n return rowModel\n }\n\n return expandRows(rowModel)\n },\n getMemoOptions(table.options, 'debugTable', 'getExpandedRowModel')\n )\n}\n\nexport function expandRows<TData extends RowData>(rowModel: RowModel<TData>) {\n const expandedRows: Row<TData>[] = []\n\n const handleRow = (row: Row<TData>) => {\n expandedRows.push(row)\n\n if (row.subRows?.length && row.getIsExpanded()) {\n row.subRows.forEach(handleRow)\n }\n }\n\n rowModel.rows.forEach(handleRow)\n\n return {\n rows: expandedRows,\n flatRows: rowModel.flatRows,\n rowsById: rowModel.rowsById,\n }\n}\n","import { Table, RowData } from '../types'\nimport { getMemoOptions, memo } from '../utils'\n\nexport function getFacetedMinMaxValues<TData extends RowData>(): (\n table: Table<TData>,\n columnId: string\n) => () => undefined | [number, number] {\n return (table, columnId) =>\n memo(\n () => [table.getColumn(columnId)?.getFacetedRowModel()],\n facetedRowModel => {\n if (!facetedRowModel) return undefined\n\n const uniqueValues = facetedRowModel.flatRows\n .flatMap(flatRow => flatRow.getUniqueValues(columnId) ?? [])\n .map(Number)\n .filter(value => !Number.isNaN(value))\n\n if (!uniqueValues.length) return\n\n let facetedMinValue = uniqueValues[0]!\n let facetedMaxValue = uniqueValues[uniqueValues.length - 1]!\n\n for (const value of uniqueValues) {\n if (value < facetedMinValue) facetedMinValue = value\n else if (value > facetedMaxValue) facetedMaxValue = value\n }\n\n return [facetedMinValue, facetedMaxValue]\n },\n getMemoOptions(table.options, 'debugTable', 'getFacetedMinMaxValues')\n )\n}\n","import { createRow } from '../core/row'\nimport { Row, RowModel, Table, RowData } from '../types'\n\nexport function filterRows<TData extends RowData>(\n rows: Row<TData>[],\n filterRowImpl: (row: Row<TData>) => any,\n table: Table<TData>\n) {\n if (table.options.filterFromLeafRows) {\n return filterRowModelFromLeafs(rows, filterRowImpl, table)\n }\n\n return filterRowModelFromRoot(rows, filterRowImpl, table)\n}\n\nfunction filterRowModelFromLeafs<TData extends RowData>(\n rowsToFilter: Row<TData>[],\n filterRow: (row: Row<TData>) => Row<TData>[],\n table: Table<TData>\n): RowModel<TData> {\n const newFilteredFlatRows: Row<TData>[] = []\n const newFilteredRowsById: Record<string, Row<TData>> = {}\n const maxDepth = table.options.maxLeafRowFilterDepth ?? 100\n\n const recurseFilterRows = (rowsToFilter: Row<TData>[], depth = 0) => {\n const rows: Row<TData>[] = []\n\n // Filter from children up first\n for (let i = 0; i < rowsToFilter.length; i++) {\n let row = rowsToFilter[i]!\n\n const newRow = createRow(\n table,\n row.id,\n row.original,\n row.index,\n row.depth,\n undefined,\n row.parentId\n )\n newRow.columnFilters = row.columnFilters\n\n if (row.subRows?.length && depth < maxDepth) {\n newRow.subRows = recurseFilterRows(row.subRows, depth + 1)\n row = newRow\n\n if (filterRow(row) && !newRow.subRows.length) {\n rows.push(row)\n newFilteredRowsById[row.id] = row\n newFilteredFlatRows.push(row)\n continue\n }\n\n if (filterRow(row) || newRow.subRows.length) {\n rows.push(row)\n newFilteredRowsById[row.id] = row\n newFilteredFlatRows.push(row)\n continue\n }\n } else {\n row = newRow\n if (filterRow(row)) {\n rows.push(row)\n newFilteredRowsById[row.id] = row\n newFilteredFlatRows.push(row)\n }\n }\n }\n\n return rows\n }\n\n return {\n rows: recurseFilterRows(rowsToFilter),\n flatRows: newFilteredFlatRows,\n rowsById: newFilteredRowsById,\n }\n}\n\nfunction filterRowModelFromRoot<TData extends RowData>(\n rowsToFilter: Row<TData>[],\n filterRow: (row: Row<TData>) => any,\n table: Table<TData>\n): RowModel<TData> {\n const newFilteredFlatRows: Row<TData>[] = []\n const newFilteredRowsById: Record<string, Row<TData>> = {}\n const maxDepth = table.options.maxLeafRowFilterDepth ?? 100\n\n // Filters top level and nested rows\n const recurseFilterRows = (rowsToFilter: Row<TData>[], depth = 0) => {\n // Filter from parents downward first\n\n const rows: Row<TData>[] = []\n\n // Apply the filter to any subRows\n for (let i = 0; i < rowsToFilter.length; i++) {\n let row = rowsToFilter[i]!\n\n const pass = filterRow(row)\n\n if (pass) {\n if (row.subRows?.length && depth < maxDepth) {\n const newRow = createRow(\n table,\n row.id,\n row.original,\n row.index,\n row.depth,\n undefined,\n row.parentId\n )\n newRow.subRows = recurseFilterRows(row.subRows, depth + 1)\n row = newRow\n }\n\n rows.push(row)\n newFilteredFlatRows.push(row)\n newFilteredRowsById[row.id] = row\n }\n }\n\n return rows\n }\n\n return {\n rows: recurseFilterRows(rowsToFilter),\n flatRows: newFilteredFlatRows,\n rowsById: newFilteredRowsById,\n }\n}\n","import { Table, RowModel, Row, RowData } from '../types'\nimport { getMemoOptions, memo } from '../utils'\nimport { filterRows } from './filterRowsUtils'\n\nexport function getFacetedRowModel<TData extends RowData>(): (\n table: Table<TData>,\n columnId: string\n) => () => RowModel<TData> {\n return (table, columnId) =>\n memo(\n () => [\n table.getPreFilteredRowModel(),\n table.getState().columnFilters,\n table.getState().globalFilter,\n table.getFilteredRowModel(),\n ],\n (preRowModel, columnFilters, globalFilter) => {\n if (\n !preRowModel.rows.length ||\n (!columnFilters?.length && !globalFilter)\n ) {\n return preRowModel\n }\n\n const filterableIds = [\n ...columnFilters.map(d => d.id).filter(d => d !== columnId),\n globalFilter ? '__global__' : undefined,\n ].filter(Boolean) as string[]\n\n const filterRowsImpl = (row: Row<TData>) => {\n // Horizontally filter rows through each column\n for (let i = 0; i < filterableIds.length; i++) {\n if (row.columnFilters[filterableIds[i]!] === false) {\n return false\n }\n }\n return true\n }\n\n return filterRows(preRowModel.rows, filterRowsImpl, table)\n },\n getMemoOptions(table.options, 'debugTable', 'getFacetedRowModel')\n )\n}\n","import { Table, RowData } from '../types'\nimport { getMemoOptions, memo } from '../utils'\n\nexport function getFacetedUniqueValues<TData extends RowData>(): (\n table: Table<TData>,\n columnId: string\n) => () => Map<any, number> {\n return (table, columnId) =>\n memo(\n () => [table.getColumn(columnId)?.getFacetedRowModel()],\n facetedRowModel => {\n if (!facetedRowModel) return new Map()\n\n let facetedUniqueValues = new Map<any, number>()\n\n for (let i = 0; i < facetedRowModel.flatRows.length; i++) {\n const values =\n facetedRowModel.flatRows[i]!.getUniqueValues<number>(columnId)\n\n for (let j = 0; j < values.length; j++) {\n const value = values[j]!\n\n if (facetedUniqueValues.has(value)) {\n facetedUniqueValues.set(\n value,\n (facetedUniqueValues.get(value) ?? 0) + 1\n )\n } else {\n facetedUniqueValues.set(value, 1)\n }\n }\n }\n\n return facetedUniqueValues\n },\n getMemoOptions(\n table.options,\n 'debugTable',\n `getFacetedUniqueValues_${columnId}`\n )\n )\n}\n","import { ResolvedColumnFilter } from '../features/ColumnFiltering'\nimport { Table, RowModel, Row, RowData } from '../types'\nimport { getMemoOptions, memo } from '../utils'\nimport { filterRows } from './filterRowsUtils'\n\nexport function getFilteredRowModel<TData extends RowData>(): (\n table: Table<TData>\n) => () => RowModel<TData> {\n return table =>\n memo(\n () => [\n table.getPreFilteredRowModel(),\n table.getState().columnFilters,\n table.getState().globalFilter,\n ],\n (rowModel, columnFilters, globalFilter) => {\n if (\n !rowModel.rows.length ||\n (!columnFilters?.length && !globalFilter)\n ) {\n for (let i = 0; i < rowModel.flatRows.length; i++) {\n rowModel.flatRows[i]!.columnFilters = {}\n rowModel.flatRows[i]!.columnFiltersMeta = {}\n }\n return rowModel\n }\n\n const resolvedColumnFilters: ResolvedColumnFilter<TData>[] = []\n const resolvedGlobalFilters: ResolvedColumnFilter<TData>[] = []\n\n ;(columnFilters ?? []).forEach(d => {\n const column = table.getColumn(d.id)\n\n if (!column) {\n return\n }\n\n const filterFn = column.getFilterFn()\n\n if (!filterFn) {\n if (process.env.NODE_ENV !== 'production') {\n console.warn(\n `Could not find a valid 'column.filterFn' for column with the ID: ${column.id}.`\n )\n }\n return\n }\n\n resolvedColumnFilters.push({\n id: d.id,\n filterFn,\n resolvedValue: filterFn.resolveFilterValue?.(d.value) ?? d.value,\n })\n })\n\n const filterableIds = (columnFilters ?? []).map(d => d.id)\n\n const globalFilterFn = table.getGlobalFilterFn()\n\n const globallyFilterableColumns = table\n .getAllLeafColumns()\n .filter(column => column.getCanGlobalFilter())\n\n if (\n globalFilter &&\n globalFilterFn &&\n globallyFilterableColumns.length\n ) {\n filterableIds.push('__global__')\n\n globallyFilterableColumns.forEach(column => {\n resolvedGlobalFilters.push({\n id: column.id,\n filterFn: globalFilterFn,\n resolvedValue:\n globalFilterFn.resolveFilterValue?.(globalFilter) ??\n globalFilter,\n })\n })\n }\n\n let currentColumnFilter\n let currentGlobalFilter\n\n // Flag the prefiltered row model with each filter state\n for (let j = 0; j < rowModel.flatRows.length; j++) {\n const row = rowModel.flatRows[j]!\n\n row.columnFilters = {}\n\n if (resolvedColumnFilters.length) {\n for (let i = 0; i < resolvedColumnFilters.length; i++) {\n currentColumnFilter = resolvedColumnFilters[i]!\n const id = currentColumnFilter.id\n\n // Tag the row with the column filter state\n row.columnFilters[id] = currentColumnFilter.filterFn(\n row,\n id,\n currentColumnFilter.resolvedValue,\n filterMeta => {\n row.columnFiltersMeta[id] = filterMeta\n }\n )\n }\n }\n\n if (resolvedGlobalFilters.length) {\n for (let i = 0; i < resolvedGlobalFilters.length; i++) {\n currentGlobalFilter = resolvedGlobalFilters[i]!\n const id = currentGlobalFilter.id\n // Tag the row with the first truthy global filter state\n if (\n currentGlobalFilter.filterFn(\n row,\n id,\n currentGlobalFilter.resolvedValue,\n filterMeta => {\n row.columnFiltersMeta[id] = filterMeta\n }\n )\n ) {\n row.columnFilters.__global__ = true\n break\n }\n }\n\n if (row.columnFilters.__global__ !== true) {\n row.columnFilters.__global__ = false\n }\n }\n }\n\n const filterRowsImpl = (row: Row<TData>) => {\n // Horizontally filter rows through each column\n for (let i = 0; i < filterableIds.length; i++) {\n if (row.columnFilters[filterableIds[i]!] === false) {\n return false\n }\n }\n return true\n }\n\n // Filter final rows using all of the active filters\n return filterRows(rowModel.rows, filterRowsImpl, table)\n },\n getMemoOptions(table.options, 'debugTable', 'getFilteredRowModel', () =>\n table._autoResetPageIndex()\n )\n )\n}\n","import { createRow } from '../core/row'\nimport { Row, RowData, RowModel, Table } from '../types'\nimport { flattenBy, getMemoOptions, memo } from '../utils'\nimport { GroupingState } from '../features/ColumnGrouping'\n\nexport function getGroupedRowModel<TData extends RowData>(): (\n table: Table<TData>\n) => () => RowModel<TData> {\n return table =>\n memo(\n () => [table.getState().grouping, table.getPreGroupedRowModel()],\n (grouping, rowModel) => {\n if (!rowModel.rows.length || !grouping.length) {\n rowModel.rows.forEach(row => {\n row.depth = 0\n row.parentId = undefined\n })\n return rowModel\n }\n\n // Filter the grouping list down to columns that exist\n const existingGrouping = grouping.filter(columnId =>\n table.getColumn(columnId)\n )\n\n const groupedFlatRows: Row<TData>[] = []\n const groupedRowsById: Record<string, Row<TData>> = {}\n // const onlyGroupedFlatRows: Row[] = [];\n // const onlyGroupedRowsById: Record<RowId, Row> = {};\n // const nonGroupedFlatRows: Row[] = [];\n // const nonGroupedRowsById: Record<RowId, Row> = {};\n\n // Recursively group the data\n const groupUpRecursively = (\n rows: Row<TData>[],\n depth = 0,\n parentId?: string\n ) => {\n // Grouping depth has been been met\n // Stop grouping and simply rewrite thd depth and row relationships\n if (depth >= existingGrouping.length) {\n return rows.map(row => {\n row.depth = depth\n\n groupedFlatRows.push(row)\n groupedRowsById[row.id] = row\n\n if (row.subRows) {\n row.subRows = groupUpRecursively(row.subRows, depth + 1, row.id)\n }\n\n return row\n })\n }\n\n const columnId: string = existingGrouping[depth]!\n\n // Group the rows together for this level\n const rowGroupsMap = groupBy(rows, columnId)\n\n // Perform aggregations for each group\n const aggregatedGroupedRows = Array.from(rowGroupsMap.entries()).map(\n ([groupingValue, groupedRows], index) => {\n let id = `${columnId}:${groupingValue}`\n id = parentId ? `${parentId}>${id}` : id\n\n // First, Recurse to group sub rows before aggregation\n const subRows = groupUpRecursively(groupedRows, depth + 1, id)\n\n subRows.forEach(subRow => {\n subRow.parentId = id\n })\n\n // Flatten the leaf rows of the rows in this group\n const leafRows = depth\n ? flattenBy(groupedRows, row => row.subRows)\n : groupedRows\n\n const row = createRow(\n table,\n id,\n leafRows[0]!.original,\n index,\n depth,\n undefined,\n parentId\n )\n\n Object.assign(row, {\n groupingColumnId: columnId,\n groupingValue,\n subRows,\n leafRows,\n getValue: (columnId: string) => {\n // Don't aggregate columns that are in the grouping\n if (existingGrouping.includes(columnId)) {\n if (row._valuesCache.hasOwnProperty(columnId)) {\n return row._valuesCache[columnId]\n }\n\n if (groupedRows[0]) {\n row._valuesCache[columnId] =\n groupedRows[0].getValue(columnId) ?? undefined\n }\n\n return row._valuesCache[columnId]\n }\n\n if (row._groupingValuesCache.hasOwnProperty(columnId)) {\n return row._groupingValuesCache[columnId]\n }\n\n // Aggregate the values\n const column = table.getColumn(columnId)\n const aggregateFn = column?.getAggregationFn()\n\n if (aggregateFn) {\n row._groupingValuesCache[columnId] = aggregateFn(\n columnId,\n leafRows,\n groupedRows\n )\n\n return row._groupingValuesCache[columnId]\n }\n },\n })\n\n subRows.forEach(subRow => {\n groupedFlatRows.push(subRow)\n groupedRowsById[subRow.id] = subRow\n // if (subRow.getIsGrouped?.()) {\n // onlyGroupedFlatRows.push(subRow);\n // onlyGroupedRowsById[subRow.id] = subRow;\n // } else {\n // nonGroupedFlatRows.push(subRow);\n // nonGroupedRowsById[subRow.id] = subRow;\n // }\n })\n\n return row\n }\n )\n\n return aggregatedGroupedRows\n }\n\n const groupedRows = groupUpRecursively(rowModel.rows, 0)\n\n groupedRows.forEach(subRow => {\n groupedFlatRows.push(subRow)\n groupedRowsById[subRow.id] = subRow\n // if (subRow.getIsGrouped?.()) {\n // onlyGroupedFlatRows.push(subRow);\n // onlyGroupedRowsById[subRow.id] = subRow;\n // } else {\n // nonGroupedFlatRows.push(subRow);\n // nonGroupedRowsById[subRow.id] = subRow;\n // }\n })\n\n return {\n rows: groupedRows,\n flatRows: groupedFlatRows,\n rowsById: groupedRowsById,\n }\n },\n getMemoOptions(table.options, 'debugTable', 'getGroupedRowModel', () => {\n table._queue(() => {\n table._autoResetExpanded()\n table._autoResetPageIndex()\n })\n })\n )\n}\n\nfunction groupBy<TData extends RowData>(rows: Row<TData>[], columnId: string) {\n const groupMap = new Map<any, Row<TData>[]>()\n\n return rows.reduce((map, row) => {\n const resKey = `${row.getGroupingValue(columnId)}`\n const previous = map.get(resKey)\n if (!previous) {\n map.set(resKey, [row])\n } else {\n previous.push(row)\n }\n return map\n }, groupMap)\n}\n","import { Table, RowModel, Row, RowData } from '../types'\nimport { getMemoOptions, memo } from '../utils'\nimport { expandRows } from './getExpandedRowModel'\n\nexport function getPaginationRowModel<TData extends RowData>(opts?: {\n initialSync: boolean\n}): (table: Table<TData>) => () => RowModel<TData> {\n return table =>\n memo(\n () => [\n table.getState().pagination,\n table.getPrePaginationRowModel(),\n table.options.paginateExpandedRows\n ? undefined\n : table.getState().expanded,\n ],\n (pagination, rowModel) => {\n if (!rowModel.rows.length) {\n return rowModel\n }\n\n const { pageSize, pageIndex } = pagination\n let { rows, flatRows, rowsById } = rowModel\n const pageStart = pageSize * pageIndex\n const pageEnd = pageStart + pageSize\n\n rows = rows.slice(pageStart, pageEnd)\n\n let paginatedRowModel: RowModel<TData>\n\n if (!table.options.paginateExpandedRows) {\n paginatedRowModel = expandRows({\n rows,\n flatRows,\n rowsById,\n })\n } else {\n paginatedRowModel = {\n rows,\n flatRows,\n rowsById,\n }\n }\n\n paginatedRowModel.flatRows = []\n\n const handleRow = (row: Row<TData>) => {\n paginatedRowModel.flatRows.push(row)\n if (row.subRows.length) {\n row.subRows.forEach(handleRow)\n }\n }\n\n paginatedRowModel.rows.forEach(handleRow)\n\n return paginatedRowModel\n },\n getMemoOptions(table.options, 'debugTable', 'getPaginationRowModel')\n )\n}\n","import { Table, Row, RowModel, RowData } from '../types'\nimport { SortingFn } from '../features/RowSorting'\nimport { getMemoOptions, memo } from '../utils'\n\nexport function getSortedRowModel<TData extends RowData>(): (\n table: Table<TData>\n) => () => RowModel<TData> {\n return table =>\n memo(\n () => [table.getState().sorting, table.getPreSortedRowModel()],\n (sorting, rowModel) => {\n if (!rowModel.rows.length || !sorting?.length) {\n return rowModel\n }\n\n const sortingState = table.getState().sorting\n\n const sortedFlatRows: Row<TData>[] = []\n\n // Filter out sortings that correspond to non existing columns\n const availableSorting = sortingState.filter(sort =>\n table.getColumn(sort.id)?.getCanSort()\n )\n\n const columnInfoById: Record<\n string,\n {\n sortUndefined?: false | -1 | 1 | 'first' | 'last'\n invertSorting?: boolean\n sortingFn: SortingFn<TData>\n }\n > = {}\n\n availableSorting.forEach(sortEntry => {\n const column = table.getColumn(sortEntry.id)\n if (!column) return\n\n columnInfoById[sortEntry.id] = {\n sortUndefined: column.columnDef.sortUndefined,\n invertSorting: column.columnDef.invertSorting,\n sortingFn: column.getSortingFn(),\n }\n })\n\n const sortData = (rows: Row<TData>[]) => {\n // This will also perform a stable sorting using the row index\n // if needed.\n const sortedData = rows.map(row => ({ ...row }))\n\n sortedData.sort((rowA, rowB) => {\n for (let i = 0; i < availableSorting.length; i += 1) {\n const sortEntry = availableSorting[i]!\n const columnInfo = columnInfoById[sortEntry.id]!\n const sortUndefined = columnInfo.sortUndefined\n const isDesc = sortEntry?.desc ?? false\n\n let sortInt = 0\n\n // All sorting ints should always return in ascending order\n if (sortUndefined) {\n const aValue = rowA.getValue(sortEntry.id)\n const bValue = rowB.getValue(sortEntry.id)\n\n const aUndefined = aValue === undefined\n const bUndefined = bValue === undefined\n\n if (aUndefined || bUndefined) {\n if (sortUndefined === 'first') return aUndefined ? -1 : 1\n if (sortUndefined === 'last') return aUndefined ? 1 : -1\n sortInt =\n aUndefined && bUndefined\n ? 0\n : aUndefined\n ? sortUndefined\n : -sortUndefined\n }\n }\n\n if (sortInt === 0) {\n sortInt = columnInfo.sortingFn(rowA, rowB, sortEntry.id)\n }\n\n // If sorting is non-zero, take care of desc and inversion\n if (sortInt !== 0) {\n if (isDesc) {\n sortInt *= -1\n }\n\n if (columnInfo.invertSorting) {\n sortInt *= -1\n }\n\n return sortInt\n }\n }\n\n return rowA.index - rowB.index\n })\n\n // If there are sub-rows, sort them\n sortedData.forEach(row => {\n sortedFlatRows.push(row)\n if (row.subRows?.length) {\n row.subRows = sortData(row.subRows)\n }\n })\n\n return sortedData\n }\n\n return {\n rows: sortData(rowModel.rows),\n flatRows: sortedFlatRows,\n rowsById: rowModel.rowsById,\n }\n },\n getMemoOptions(table.options, 'debugTable', 'getSortedRowModel', () =>\n table._autoResetPageIndex()\n )\n )\n}\n","import * as React from 'react'\nexport * from '@tanstack/table-core'\n\nimport {\n TableOptions,\n TableOptionsResolved,\n RowData,\n createTable,\n} from '@tanstack/table-core'\n\nexport type Renderable<TProps> = React.ReactNode | React.ComponentType<TProps>\n\n//\n\n/**\n * If rendering headers, cells, or footers with custom markup, use flexRender instead of `cell.getValue()` or `cell.renderValue()`.\n */\nexport function flexRender<TProps extends object>(\n Comp: Renderable<TProps>,\n props: TProps\n): React.ReactNode | React.JSX.Element {\n return !Comp ? null : isReactComponent<TProps>(Comp) ? (\n <Comp {...props} />\n ) : (\n Comp\n )\n}\n\nfunction isReactComponent<TProps>(\n component: unknown\n): component is React.ComponentType<TProps> {\n return (\n isClassComponent(component) ||\n typeof component === 'function' ||\n isExoticComponent(component)\n )\n}\n\nfunction isClassComponent(component: any) {\n return (\n typeof component === 'function' &&\n (() => {\n const proto = Object.getPrototypeOf(component)\n return proto.prototype && proto.prototype.isReactComponent\n })()\n )\n}\n\nfunction isExoticComponent(component: any) {\n return (\n typeof component === 'object' &&\n typeof component.$$typeof === 'symbol' &&\n ['react.memo', 'react.forward_ref'].includes(component.$$typeof.description)\n )\n}\n\nexport function useReactTable<TData extends RowData>(\n options: TableOptions<TData>\n) {\n // Compose in the generic options to the user options\n const resolvedOptions: TableOptionsResolved<TData> = {\n state: {}, // Dummy state\n onStateChange: () => {}, // noop\n renderFallbackValue: null,\n ...options,\n }\n\n // Create a new table and store it in state\n const [tableRef] = React.useState(() => ({\n current: createTable<TData>(resolvedOptions),\n }))\n\n // By default, manage table state here using the table's initial state\n const [state, setState] = React.useState(() => tableRef.current.initialState)\n\n // Compose the default state above with any user state. This will allow the user\n // to only control a subset of the state if desired.\n tableRef.current.setOptions(prev => ({\n ...prev,\n ...options,\n state: {\n ...state,\n ...options.state,\n },\n // Similarly, we'll maintain both our internal state and any user-provided\n // state.\n onStateChange: updater => {\n setState(updater)\n options.onStateChange?.(updater)\n },\n }))\n\n return tableRef.current\n}\n","const characterMap: Record<string, string> = {\n À: 'A',\n Á: 'A',\n Â: 'A',\n Ã: 'A',\n Ä: 'A',\n Å: 'A',\n Ấ: 'A',\n Ắ: 'A',\n Ẳ: 'A',\n Ẵ: 'A',\n Ặ: 'A',\n Æ: 'AE',\n Ầ: 'A',\n Ằ: 'A',\n Ȃ: 'A',\n Ç: 'C',\n Ḉ: 'C',\n È: 'E',\n É: 'E',\n Ê: 'E',\n Ë: 'E',\n Ế: 'E',\n Ḗ: 'E',\n Ề: 'E',\n Ḕ: 'E',\n Ḝ: 'E',\n Ȇ: 'E',\n Ì: 'I',\n Í: 'I',\n Î: 'I',\n Ï: 'I',\n Ḯ: 'I',\n Ȋ: 'I',\n Ð: 'D',\n Ñ: 'N',\n Ò: 'O',\n Ó: 'O',\n Ô: 'O',\n Õ: 'O',\n Ö: 'O',\n Ø: 'O',\n Ố: 'O',\n Ṍ: 'O',\n Ṓ: 'O',\n Ȏ: 'O',\n Ù: 'U',\n Ú: 'U',\n Û: 'U',\n Ü: 'U',\n Ý: 'Y',\n à: 'a',\n á: 'a',\n â: 'a',\n ã: 'a',\n ä: 'a',\n å: 'a',\n ấ: 'a',\n ắ: 'a',\n ẳ: 'a',\n ẵ: 'a',\n ặ: 'a',\n æ: 'ae',\n ầ: 'a',\n ằ: 'a',\n ȃ: 'a',\n ç: 'c',\n ḉ: 'c',\n è: 'e',\n é: 'e',\n ê: 'e',\n ë: 'e',\n ế: 'e',\n ḗ: 'e',\n ề: 'e',\n ḕ: 'e',\n ḝ: 'e',\n ȇ: 'e',\n ì: 'i',\n í: 'i',\n î: 'i',\n ï: 'i',\n ḯ: 'i',\n ȋ: 'i',\n ð: 'd',\n ñ: 'n',\n ò: 'o',\n ó: 'o',\n ô: 'o',\n õ: 'o',\n ö: 'o',\n ø: 'o',\n ố: 'o',\n ṍ: 'o',\n ṓ: 'o',\n ȏ: 'o',\n ù: 'u',\n ú: 'u',\n û: 'u',\n ü: 'u',\n ý: 'y',\n ÿ: 'y',\n Ā: 'A',\n ā: 'a',\n Ă: 'A',\n ă: 'a',\n Ą: 'A',\n ą: 'a',\n Ć: 'C',\n ć: 'c',\n Ĉ: 'C',\n ĉ: 'c',\n Ċ: 'C',\n ċ: 'c',\n Č: 'C',\n č: 'c',\n C̆: 'C',\n c̆: 'c',\n Ď: 'D',\n ď: 'd',\n Đ: 'D',\n đ: 'd',\n Ē: 'E',\n ē: 'e',\n Ĕ: 'E',\n ĕ: 'e',\n Ė: 'E',\n ė: 'e',\n Ę: 'E',\n ę: 'e',\n Ě: 'E',\n ě: 'e',\n Ĝ: 'G',\n Ǵ: 'G',\n ĝ: 'g',\n ǵ: 'g',\n Ğ: 'G',\n ğ: 'g',\n Ġ: 'G',\n ġ: 'g',\n Ģ: 'G',\n ģ: 'g',\n Ĥ: 'H',\n ĥ: 'h',\n Ħ: 'H',\n ħ: 'h',\n Ḫ: 'H',\n ḫ: 'h',\n Ĩ: 'I',\n ĩ: 'i',\n Ī: 'I',\n ī: 'i',\n Ĭ: 'I',\n ĭ: 'i',\n Į: 'I',\n į: 'i',\n İ: 'I',\n ı: 'i',\n IJ: 'IJ',\n ij: 'ij',\n Ĵ: 'J',\n ĵ: 'j',\n Ķ: 'K',\n ķ: 'k',\n Ḱ: 'K',\n ḱ: 'k',\n K̆: 'K',\n k̆: 'k',\n Ĺ: 'L',\n ĺ: 'l',\n Ļ: 'L',\n ļ: 'l',\n Ľ: 'L',\n ľ: 'l',\n Ŀ: 'L',\n ŀ: 'l',\n Ł: 'l',\n ł: 'l',\n Ḿ: 'M',\n ḿ: 'm',\n M̆: 'M',\n m̆: 'm',\n Ń: 'N',\n ń: 'n',\n Ņ: 'N',\n ņ: 'n',\n Ň: 'N',\n ň: 'n',\n ʼn: 'n',\n N̆: 'N',\n n̆: 'n',\n Ō: 'O',\n ō: 'o',\n Ŏ: 'O',\n ŏ: 'o',\n Ő: 'O',\n ő: 'o',\n Œ: 'OE',\n œ: 'oe',\n P̆: 'P',\n p̆: 'p',\n Ŕ: 'R',\n ŕ: 'r',\n Ŗ: 'R',\n ŗ: 'r',\n Ř: 'R',\n ř: 'r',\n R̆: 'R',\n r̆: 'r',\n Ȓ: 'R',\n ȓ: 'r',\n Ś: 'S',\n ś: 's',\n Ŝ: 'S',\n ŝ: 's',\n Ş: 'S',\n Ș: 'S',\n ș: 's',\n ş: 's',\n Š: 'S',\n š: 's',\n Ţ: 'T',\n ţ: 't',\n ț: 't',\n Ț: 'T',\n Ť: 'T',\n ť: 't',\n Ŧ: 'T',\n ŧ: 't',\n T̆: 'T',\n t̆: 't',\n Ũ: 'U',\n ũ: 'u',\n Ū: 'U',\n ū: 'u',\n Ŭ: 'U',\n ŭ: 'u',\n Ů: 'U',\n ů: 'u',\n Ű: 'U',\n ű: 'u',\n Ų: 'U',\n ų: 'u',\n Ȗ: 'U',\n ȗ: 'u',\n V̆: 'V',\n v̆: 'v',\n Ŵ: 'W',\n ŵ: 'w',\n Ẃ: 'W',\n ẃ: 'w',\n X̆: 'X',\n x̆: 'x',\n Ŷ: 'Y',\n ŷ: 'y',\n Ÿ: 'Y',\n Y̆: 'Y',\n y̆: 'y',\n Ź: 'Z',\n ź: 'z',\n Ż: 'Z',\n ż: 'z',\n Ž: 'Z',\n ž: 'z',\n ſ: 's',\n ƒ: 'f',\n Ơ: 'O',\n ơ: 'o',\n Ư: 'U',\n ư: 'u',\n Ǎ: 'A',\n ǎ: 'a',\n Ǐ: 'I',\n ǐ: 'i',\n Ǒ: 'O',\n ǒ: 'o',\n Ǔ: 'U',\n ǔ: 'u',\n Ǖ: 'U',\n ǖ: 'u',\n Ǘ: 'U',\n ǘ: 'u',\n Ǚ: 'U',\n ǚ: 'u',\n Ǜ: 'U',\n ǜ: 'u',\n Ứ: 'U',\n ứ: 'u',\n Ṹ: 'U',\n ṹ: 'u',\n Ǻ: 'A',\n ǻ: 'a',\n Ǽ: 'AE',\n ǽ: 'ae',\n Ǿ: 'O',\n ǿ: 'o',\n Þ: 'TH',\n þ: 'th',\n Ṕ: 'P',\n ṕ: 'p',\n Ṥ: 'S',\n ṥ: 's',\n X́: 'X',\n x́: 'x',\n Ѓ: 'Г',\n ѓ: 'г',\n Ќ: 'К',\n ќ: 'к',\n A̋: 'A',\n a̋: 'a',\n E̋: 'E',\n e̋: 'e',\n I̋: 'I',\n i̋: 'i',\n Ǹ: 'N',\n ǹ: 'n',\n Ồ: 'O',\n ồ: 'o',\n Ṑ: 'O',\n ṑ: 'o',\n Ừ: 'U',\n ừ: 'u',\n Ẁ: 'W',\n ẁ: 'w',\n Ỳ: 'Y',\n ỳ: 'y',\n Ȁ: 'A',\n ȁ: 'a',\n Ȅ: 'E',\n ȅ: 'e',\n Ȉ: 'I',\n ȉ: 'i',\n Ȍ: 'O',\n ȍ: 'o',\n Ȑ: 'R',\n ȑ: 'r',\n Ȕ: 'U',\n ȕ: 'u',\n B̌: 'B',\n b̌: 'b',\n Č̣: 'C',\n č̣: 'c',\n Ê̌: 'E',\n ê̌: 'e',\n F̌: 'F',\n f̌: 'f',\n Ǧ: 'G',\n ǧ: 'g',\n Ȟ: 'H',\n ȟ: 'h',\n J̌: 'J',\n ǰ: 'j',\n Ǩ: 'K',\n ǩ: 'k',\n M̌: 'M',\n m̌: 'm',\n P̌: 'P',\n p̌: 'p',\n Q̌: 'Q',\n q̌: 'q',\n Ř̩: 'R',\n ř̩: 'r',\n Ṧ: 'S',\n ṧ: 's',\n V̌: 'V',\n v̌: 'v',\n W̌: 'W',\n w̌: 'w',\n X̌: 'X',\n x̌: 'x',\n Y̌: 'Y',\n y̌: 'y',\n A̧: 'A',\n a̧: 'a',\n B̧: 'B',\n b̧: 'b',\n Ḑ: 'D',\n ḑ: 'd',\n Ȩ: 'E',\n ȩ: 'e',\n Ɛ̧: 'E',\n ɛ̧: 'e',\n Ḩ: 'H',\n ḩ: 'h',\n I̧: 'I',\n i̧: 'i',\n Ɨ̧: 'I',\n ɨ̧: 'i',\n M̧: 'M',\n m̧: 'm',\n O̧: 'O',\n o̧: 'o',\n Q̧: 'Q',\n q̧: 'q',\n U̧: 'U',\n u̧: 'u',\n X̧: 'X',\n x̧: 'x',\n Z̧: 'Z',\n z̧: 'z',\n}\n\nconst chars = Object.keys(characterMap).join('|')\nconst allAccents = new RegExp(chars, 'g')\n\nexport function removeAccents(str: string) {\n return str.replace(allAccents, match => {\n return characterMap[match]!\n })\n}\n","/**\n * @name match-sorter\n * @license MIT license.\n * @copyright (c) 2099 Kent C. Dodds\n * @author Kent C. Dodds <me@kentcdodds.com> (https://kentcdodds.com)\n */\n\n// This is a fork of match-sorter. Instead of offering\n// a unified API for filtering and sorting in a single pass,\n// match-sorter-utils provides the lower-level utilities of\n// ranking items and comparing ranks in a way that can\n// be incrementally applied to a system rather than\n// all-at-once.\n\n// 1. Use the rankItem function to rank an item\n// 2. Use the resulting rankingInfo.passed to filter\n// 3. Use the resulting rankingInfo.rank to sort\n\n// For bundling purposes (mainly remove-accents not being esm safe/ready),\n// we've also hard-coded remove-accents into this source.\n// The remove-accents package is still included as a dependency\n// for attribution purposes, but it will not be imported and bundled.\n\nimport { removeAccents } from './remove-accents'\n\nexport type AccessorAttributes = {\n threshold?: Ranking\n maxRanking: Ranking\n minRanking: Ranking\n}\n\nexport interface RankingInfo {\n rankedValue: any\n rank: Ranking\n accessorIndex: number\n accessorThreshold: Ranking | undefined\n passed: boolean\n}\n\nexport interface AccessorOptions<TItem> {\n accessor: AccessorFn<TItem>\n threshold?: Ranking\n maxRanking?: Ranking\n minRanking?: Ranking\n}\n\nexport type AccessorFn<TItem> = (item: TItem) => string | Array<string>\n\nexport type Accessor<TItem> = AccessorFn<TItem> | AccessorOptions<TItem>\n\nexport interface RankItemOptions<TItem = unknown> {\n accessors?: ReadonlyArray<Accessor<TItem>>\n threshold?: Ranking\n keepDiacritics?: boolean\n}\n\nexport const rankings = {\n CASE_SENSITIVE_EQUAL: 7,\n EQUAL: 6,\n STARTS_WITH: 5,\n WORD_STARTS_WITH: 4,\n CONTAINS: 3,\n ACRONYM: 2,\n MATCHES: 1,\n NO_MATCH: 0,\n} as const\n\nexport type Ranking = (typeof rankings)[keyof typeof rankings]\n\n/**\n * Gets the highest ranking for value for the given item based on its values for the given keys\n * @param {*} item - the item to rank\n * @param {String} value - the value to rank against\n * @param {Object} options - options to control the ranking\n * @return {{rank: Number, accessorIndex: Number, accessorThreshold: Number}} - the highest ranking\n */\nexport function rankItem<TItem>(\n item: TItem,\n value: string,\n options?: RankItemOptions<TItem>\n): RankingInfo {\n options = options || {}\n\n options.threshold = options.threshold ?? rankings.MATCHES\n\n if (!options.accessors) {\n // if keys is not specified, then we assume the item given is ready to be matched\n const rank = getMatchRanking(item as unknown as string, value, options)\n return {\n // ends up being duplicate of 'item' in matches but consistent\n rankedValue: item,\n rank,\n accessorIndex: -1,\n accessorThreshold: options.threshold,\n passed: rank >= options.threshold,\n }\n }\n\n const valuesToRank = getAllValuesToRank(item, options.accessors)\n\n const rankingInfo: RankingInfo = {\n rankedValue: item,\n rank: rankings.NO_MATCH as Ranking,\n accessorIndex: -1,\n accessorThreshold: options.threshold,\n passed: false,\n }\n\n for (let i = 0; i < valuesToRank.length; i++) {\n const rankValue = valuesToRank[i]!\n\n let newRank = getMatchRanking(rankValue.itemValue, value, options)\n\n const {\n minRanking,\n maxRanking,\n threshold = options.threshold,\n } = rankValue.attributes\n\n if (newRank < minRanking && newRank >= rankings.MATCHES) {\n newRank = minRanking\n } else if (newRank > maxRanking) {\n newRank = maxRanking\n }\n\n newRank = Math.min(newRank, maxRanking) as Ranking\n\n if (newRank >= threshold && newRank > rankingInfo.rank) {\n rankingInfo.rank = newRank\n rankingInfo.passed = true\n rankingInfo.accessorIndex = i\n rankingInfo.accessorThreshold = threshold\n rankingInfo.rankedValue = rankValue.itemValue\n }\n }\n\n return rankingInfo\n}\n\n/**\n * Gives a rankings score based on how well the two strings match.\n * @param {String} testString - the string to test against\n * @param {String} stringToRank - the string to rank\n * @param {Object} options - options for the match (like keepDiacritics for comparison)\n * @returns {Number} the ranking for how well stringToRank matches testString\n */\nfunction getMatchRanking<TItem>(\n testString: string,\n stringToRank: string,\n options: RankItemOptions<TItem>\n): Ranking {\n testString = prepareValueForComparison(testString, options)\n stringToRank = prepareValueForComparison(stringToRank, options)\n\n // too long\n if (stringToRank.length > testString.length) {\n return rankings.NO_MATCH\n }\n\n // case sensitive equals\n if (testString === stringToRank) {\n return rankings.CASE_SENSITIVE_EQUAL\n }\n\n // Lower casing before further comparison\n testString = testString.toLowerCase()\n stringToRank = stringToRank.toLowerCase()\n\n // case insensitive equals\n if (testString === stringToRank) {\n return rankings.EQUAL\n }\n\n // starts with\n if (testString.startsWith(stringToRank)) {\n return rankings.STARTS_WITH\n }\n\n // word starts with\n if (testString.includes(` ${stringToRank}`)) {\n return rankings.WORD_STARTS_WITH\n }\n\n // contains\n if (testString.includes(stringToRank)) {\n return rankings.CONTAINS\n } else if (stringToRank.length === 1) {\n // If the only character in the given stringToRank\n // isn't even contained in the testString, then\n // it's definitely not a match.\n return rankings.NO_MATCH\n }\n\n // acronym\n if (getAcronym(testString).includes(stringToRank)) {\n return rankings.ACRONYM\n }\n\n // will return a number between rankings.MATCHES and\n // rankings.MATCHES + 1 depending on how close of a match it is.\n return getClosenessRanking(testString, stringToRank)\n}\n\n/**\n * Generates an acronym for a string.\n *\n * @param {String} string the string for which to produce the acronym\n * @returns {String} the acronym\n */\nfunction getAcronym(string: string): string {\n let acronym = ''\n const wordsInString = string.split(' ')\n wordsInString.forEach(wordInString => {\n const splitByHyphenWords = wordInString.split('-')\n splitByHyphenWords.forEach(splitByHyphenWord => {\n acronym += splitByHyphenWord.substr(0, 1)\n })\n })\n return acronym\n}\n\n/**\n * Returns a score based on how spread apart the\n * characters from the stringToRank are within the testString.\n * A number close to rankings.MATCHES represents a loose match. A number close\n * to rankings.MATCHES + 1 represents a tighter match.\n * @param {String} testString - the string to test against\n * @param {String} stringToRank - the string to rank\n * @returns {Number} the number between rankings.MATCHES and\n * rankings.MATCHES + 1 for how well stringToRank matches testString\n */\nfunction getClosenessRanking(\n testString: string,\n stringToRank: string\n): Ranking {\n let matchingInOrderCharCount = 0\n let charNumber = 0\n function findMatchingCharacter(\n matchChar: undefined | string,\n string: string,\n index: number\n ) {\n for (let j = index, J = string.length; j < J; j++) {\n const stringChar = string[j]\n if (stringChar === matchChar) {\n matchingInOrderCharCount += 1\n return j + 1\n }\n }\n return -1\n }\n function getRanking(spread: number) {\n const spreadPercentage = 1 / spread\n const inOrderPercentage = matchingInOrderCharCount / stringToRank.length\n const ranking = rankings.MATCHES + inOrderPercentage * spreadPercentage\n return ranking as Ranking\n }\n const firstIndex = findMatchingCharacter(stringToRank[0], testString, 0)\n if (firstIndex < 0) {\n return rankings.NO_MATCH\n }\n charNumber = firstIndex\n for (let i = 1, I = stringToRank.length; i < I; i++) {\n const matchChar = stringToRank[i]\n charNumber = findMatchingCharacter(matchChar, testString, charNumber)\n const found = charNumber > -1\n if (!found) {\n return rankings.NO_MATCH\n }\n }\n\n const spread = charNumber - firstIndex\n return getRanking(spread)\n}\n\n/**\n * Sorts items that have a rank, index, and accessorIndex\n * @param {Object} a - the first item to sort\n * @param {Object} b - the second item to sort\n * @return {Number} -1 if a should come first, 1 if b should come first, 0 if equal\n */\nexport function compareItems<TItem>(a: RankingInfo, b: RankingInfo): number {\n return a.rank === b.rank ? 0 : a.rank > b.rank ? -1 : 1\n}\n\n/**\n * Prepares value for comparison by stringifying it, removing diacritics (if specified)\n * @param {String} value - the value to clean\n * @param {Object} options - {keepDiacritics: whether to remove diacritics}\n * @return {String} the prepared value\n */\nfunction prepareValueForComparison<TItem>(\n value: string,\n { keepDiacritics }: RankItemOptions<TItem>\n): string {\n // value might not actually be a string at this point (we don't get to choose)\n // so part of preparing the value for comparison is ensure that it is a string\n value = `${value}` // toString\n if (!keepDiacritics) {\n value = removeAccents(value)\n }\n return value\n}\n\n/**\n * Gets value for key in item at arbitrarily nested keypath\n * @param {Object} item - the item\n * @param {Object|Function} key - the potentially nested keypath or property callback\n * @return {Array} - an array containing the value(s) at the nested keypath\n */\nfunction getItemValues<TItem>(\n item: TItem,\n accessor: Accessor<TItem>\n): Array<string> {\n let accessorFn = accessor as AccessorFn<TItem>\n\n if (typeof accessor === 'object') {\n accessorFn = accessor.accessor\n }\n\n const value = accessorFn(item)\n\n // because `value` can also be undefined\n if (value == null) {\n return []\n }\n\n if (Array.isArray(value)) {\n return value\n }\n\n return [String(value)]\n}\n\n/**\n * Gets all the values for the given keys in the given item and returns an array of those values\n * @param item - the item from which the values will be retrieved\n * @param keys - the keys to use to retrieve the values\n * @return objects with {itemValue, attributes}\n */\nfunction getAllValuesToRank<TItem>(\n item: TItem,\n accessors: ReadonlyArray<Accessor<TItem>>\n) {\n const allValues: Array<{\n itemValue: string\n attributes: AccessorAttributes\n }> = []\n for (let j = 0, J = accessors.length; j < J; j++) {\n const accessor = accessors[j]!\n const attributes = getAccessorAttributes(accessor)\n const itemValues = getItemValues(item, accessor)\n for (let i = 0, I = itemValues.length; i < I; i++) {\n allValues.push({\n itemValue: itemValues[i]!,\n attributes,\n })\n }\n }\n return allValues\n}\n\nconst defaultKeyAttributes = {\n maxRanking: Infinity as Ranking,\n minRanking: -Infinity as Ranking,\n}\n/**\n * Gets all the attributes for the given accessor\n * @param accessor - the accessor from which the attributes will be retrieved\n * @return object containing the accessor's attributes\n */\nfunction getAccessorAttributes<TItem>(\n accessor: Accessor<TItem>\n): AccessorAttributes {\n if (typeof accessor === 'function') {\n return defaultKeyAttributes\n }\n return { ...defaultKeyAttributes, ...accessor }\n}\n","\"use client\";\n\nimport createSvgIcon from \"./utils/createSvgIcon.mjs\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nexport default createSvgIcon(/*#__PURE__*/_jsx(\"path\", {\n d: \"m20 12-1.41-1.41L13 16.17V4h-2v12.17l-5.58-5.59L4 12l8 8z\"\n}), 'ArrowDownward');","\"use client\";\n\nimport createSvgIcon from \"./utils/createSvgIcon.mjs\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nexport default createSvgIcon(/*#__PURE__*/_jsx(\"path\", {\n d: \"m10 17 5-5-5-5z\"\n}), 'ArrowRight');","\"use client\";\n\nimport createSvgIcon from \"./utils/createSvgIcon.mjs\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nexport default createSvgIcon(/*#__PURE__*/_jsx(\"path\", {\n d: \"M12 2C6.47 2 2 6.47 2 12s4.47 10 10 10 10-4.47 10-10S17.53 2 12 2m5 13.59L15.59 17 12 13.41 8.41 17 7 15.59 10.59 12 7 8.41 8.41 7 12 10.59 15.59 7 17 8.41 13.41 12z\"\n}), 'Cancel');","\"use client\";\n\nimport createSvgIcon from \"./utils/createSvgIcon.mjs\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nexport default createSvgIcon(/*#__PURE__*/_jsx(\"path\", {\n d: \"M5 13h14v-2H5zm-2 4h14v-2H3zM7 7v2h14V7z\"\n}), 'ClearAll');","\"use client\";\n\nimport createSvgIcon from \"./utils/createSvgIcon.mjs\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nexport default createSvgIcon(/*#__PURE__*/_jsx(\"path\", {\n d: \"M16 1H4c-1.1 0-2 .9-2 2v14h2V3h12zm3 4H8c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h11c1.1 0 2-.9 2-2V7c0-1.1-.9-2-2-2m0 16H8V7h11z\"\n}), 'ContentCopy');","\"use client\";\n\nimport createSvgIcon from \"./utils/createSvgIcon.mjs\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nexport default createSvgIcon(/*#__PURE__*/_jsx(\"path\", {\n d: \"M3 3h18v2H3zm0 16h18v2H3z\"\n}), 'DensityLarge');","\"use client\";\n\nimport createSvgIcon from \"./utils/createSvgIcon.mjs\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nexport default createSvgIcon(/*#__PURE__*/_jsx(\"path\", {\n d: \"M3 3h18v2H3zm0 16h18v2H3zm0-8h18v2H3z\"\n}), 'DensityMedium');","\"use client\";\n\nimport createSvgIcon from \"./utils/createSvgIcon.mjs\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nexport default createSvgIcon(/*#__PURE__*/_jsx(\"path\", {\n d: \"M3 2h18v2H3zm0 18h18v2H3zm0-6h18v2H3zm0-6h18v2H3z\"\n}), 'DensitySmall');","\"use client\";\n\nimport createSvgIcon from \"./utils/createSvgIcon.mjs\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nexport default createSvgIcon(/*#__PURE__*/_jsx(\"path\", {\n d: \"M20 9H4v2h16zM4 15h16v-2H4z\"\n}), 'DragHandle');","\"use client\";\n\nimport createSvgIcon from \"./utils/createSvgIcon.mjs\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nexport default createSvgIcon([/*#__PURE__*/_jsx(\"path\", {\n d: \"M8 8H6v7c0 1.1.9 2 2 2h9v-2H8z\"\n}, \"0\"), /*#__PURE__*/_jsx(\"path\", {\n d: \"M20 3h-8c-1.1 0-2 .9-2 2v6c0 1.1.9 2 2 2h8c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2m0 8h-8V7h8zM4 12H2v7c0 1.1.9 2 2 2h9v-2H4z\"\n}, \"1\")], 'DynamicFeed');","\"use client\";\n\nimport createSvgIcon from \"./utils/createSvgIcon.mjs\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nexport default createSvgIcon(/*#__PURE__*/_jsx(\"path\", {\n d: \"M16.59 8.59 12 13.17 7.41 8.59 6 10l6 6 6-6z\"\n}), 'ExpandMore');","\"use client\";\n\nimport createSvgIcon from \"./utils/createSvgIcon.mjs\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nexport default createSvgIcon(/*#__PURE__*/_jsx(\"path\", {\n d: \"M4.25 5.61C6.27 8.2 10 13 10 13v6c0 .55.45 1 1 1h2c.55 0 1-.45 1-1v-6s3.72-4.8 5.74-7.39c.51-.66.04-1.61-.79-1.61H5.04c-.83 0-1.3.95-.79 1.61\"\n}), 'FilterAlt');","\"use client\";\n\nimport createSvgIcon from \"./utils/createSvgIcon.mjs\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nexport default createSvgIcon(/*#__PURE__*/_jsx(\"path\", {\n d: \"M10 18h4v-2h-4zM3 6v2h18V6zm3 7h12v-2H6z\"\n}), 'FilterList');","\"use client\";\n\nimport createSvgIcon from \"./utils/createSvgIcon.mjs\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nexport default createSvgIcon(/*#__PURE__*/_jsx(\"path\", {\n d: \"M10.83 8H21V6H8.83zm5 5H18v-2h-4.17zM14 16.83V18h-4v-2h3.17l-3-3H6v-2h2.17l-3-3H3V6h.17L1.39 4.22 2.8 2.81l18.38 18.38-1.41 1.41z\"\n}), 'FilterListOff');","\"use client\";\n\nimport createSvgIcon from \"./utils/createSvgIcon.mjs\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nexport default createSvgIcon(/*#__PURE__*/_jsx(\"path\", {\n d: \"M18.41 16.59 13.82 12l4.59-4.59L17 6l-6 6 6 6zM6 6h2v12H6z\"\n}), 'FirstPage');","\"use client\";\n\nimport createSvgIcon from \"./utils/createSvgIcon.mjs\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nexport default createSvgIcon(/*#__PURE__*/_jsx(\"path\", {\n d: \"M7 14H5v5h5v-2H7zm-2-4h2V7h3V5H5zm12 7h-3v2h5v-5h-2zM14 5v2h3v3h2V5z\"\n}), 'Fullscreen');","\"use client\";\n\nimport createSvgIcon from \"./utils/createSvgIcon.mjs\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nexport default createSvgIcon(/*#__PURE__*/_jsx(\"path\", {\n d: \"M5 16h3v3h2v-5H5zm3-8H5v2h5V5H8zm6 11h2v-3h3v-2h-5zm2-11V5h-2v5h5V8z\"\n}), 'FullscreenExit');","\"use client\";\n\nimport createSvgIcon from \"./utils/createSvgIcon.mjs\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nexport default createSvgIcon([/*#__PURE__*/_jsx(\"path\", {\n d: \"M18 6.41 16.59 5 12 9.58 7.41 5 6 6.41l6 6z\"\n}, \"0\"), /*#__PURE__*/_jsx(\"path\", {\n d: \"m18 13-1.41-1.41L12 16.17l-4.59-4.58L6 13l6 6z\"\n}, \"1\")], 'KeyboardDoubleArrowDown');","\"use client\";\n\nimport createSvgIcon from \"./utils/createSvgIcon.mjs\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nexport default createSvgIcon(/*#__PURE__*/_jsx(\"path\", {\n d: \"M5.59 7.41 10.18 12l-4.59 4.59L7 18l6-6-6-6zM16 6h2v12h-2z\"\n}), 'LastPage');","\"use client\";\n\nimport createSvgIcon from \"./utils/createSvgIcon.mjs\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nexport default createSvgIcon(/*#__PURE__*/_jsx(\"path\", {\n d: \"M6 10c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2m12 0c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2m-6 0c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2\"\n}), 'MoreHoriz');","\"use client\";\n\nimport createSvgIcon from \"./utils/createSvgIcon.mjs\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nexport default createSvgIcon(/*#__PURE__*/_jsx(\"path\", {\n fillRule: \"evenodd\",\n d: \"M16 9V4h1c.55 0 1-.45 1-1s-.45-1-1-1H7c-.55 0-1 .45-1 1s.45 1 1 1h1v5c0 1.66-1.34 3-3 3v2h5.97v7l1 1 1-1v-7H19v-2c-1.66 0-3-1.34-3-3\"\n}), 'PushPin');","\"use client\";\n\nimport createSvgIcon from \"./utils/createSvgIcon.mjs\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nexport default createSvgIcon(/*#__PURE__*/_jsx(\"path\", {\n d: \"M12 5V2L8 6l4 4V7c3.31 0 6 2.69 6 6 0 2.97-2.17 5.43-5 5.91v2.02c3.95-.49 7-3.85 7-7.93 0-4.42-3.58-8-8-8m-6 8c0-1.65.67-3.15 1.76-4.24L6.34 7.34C4.9 8.79 4 10.79 4 13c0 4.08 3.05 7.44 7 7.93v-2.02c-2.83-.48-5-2.94-5-5.91\"\n}), 'RestartAlt');","\"use client\";\n\nimport createSvgIcon from \"./utils/createSvgIcon.mjs\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nexport default createSvgIcon(/*#__PURE__*/_jsx(\"path\", {\n d: \"M17 3H5c-1.11 0-2 .9-2 2v14c0 1.1.89 2 2 2h14c1.1 0 2-.9 2-2V7zm-5 16c-1.66 0-3-1.34-3-3s1.34-3 3-3 3 1.34 3 3-1.34 3-3 3m3-10H5V5h10z\"\n}), 'Save');","\"use client\";\n\nimport createSvgIcon from \"./utils/createSvgIcon.mjs\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nexport default createSvgIcon([/*#__PURE__*/_jsx(\"path\", {\n d: \"M15.5 14h-.79l-.28-.27C15.41 12.59 16 11.11 16 9.5 16 5.91 13.09 3 9.5 3 6.08 3 3.28 5.64 3.03 9h2.02C5.3 6.75 7.18 5 9.5 5 11.99 5 14 7.01 14 9.5S11.99 14 9.5 14c-.17 0-.33-.03-.5-.05v2.02c.17.02.33.03.5.03 1.61 0 3.09-.59 4.23-1.57l.27.28v.79l5 4.99L20.49 19z\"\n}, \"0\"), /*#__PURE__*/_jsx(\"path\", {\n d: \"M6.47 10.82 4 13.29l-2.47-2.47-.71.71L3.29 14 .82 16.47l.71.71L4 14.71l2.47 2.47.71-.71L4.71 14l2.47-2.47z\"\n}, \"1\")], 'SearchOff');","\"use client\";\n\nimport createSvgIcon from \"./utils/createSvgIcon.mjs\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nexport default createSvgIcon(/*#__PURE__*/_jsx(\"path\", {\n d: \"M3 18h6v-2H3zM3 6v2h18V6zm0 7h12v-2H3z\"\n}), 'Sort');","\"use client\";\n\nimport createSvgIcon from \"./utils/createSvgIcon.mjs\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nexport default createSvgIcon(/*#__PURE__*/_jsx(\"path\", {\n d: \"m18 12 4-4-4-4v3H3v2h15zM6 12l-4 4 4 4v-3h15v-2H6z\"\n}), 'SyncAlt');","\"use client\";\n\nimport createSvgIcon from \"./utils/createSvgIcon.mjs\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nexport default createSvgIcon(/*#__PURE__*/_jsx(\"path\", {\n d: \"M14.67 5v14H9.33V5zm1 14H21V5h-5.33zm-7.34 0V5H3v14z\"\n}), 'ViewColumn');","\"use client\";\n\nimport createSvgIcon from \"./utils/createSvgIcon.mjs\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nexport default createSvgIcon(/*#__PURE__*/_jsx(\"path\", {\n d: \"M12 7c2.76 0 5 2.24 5 5 0 .65-.13 1.26-.36 1.83l2.92 2.92c1.51-1.26 2.7-2.89 3.43-4.75-1.73-4.39-6-7.5-11-7.5-1.4 0-2.74.25-3.98.7l2.16 2.16C10.74 7.13 11.35 7 12 7M2 4.27l2.28 2.28.46.46C3.08 8.3 1.78 10.02 1 12c1.73 4.39 6 7.5 11 7.5 1.55 0 3.03-.3 4.38-.84l.42.42L19.73 22 21 20.73 3.27 3zM7.53 9.8l1.55 1.55c-.05.21-.08.43-.08.65 0 1.66 1.34 3 3 3 .22 0 .44-.03.65-.08l1.55 1.55c-.67.33-1.41.53-2.2.53-2.76 0-5-2.24-5-5 0-.79.2-1.53.53-2.2m4.31-.78 3.15 3.15.02-.16c0-1.66-1.34-3-3-3z\"\n}), 'VisibilityOff');","export type NoInfer<A extends any> = [A][A extends any ? 0 : never]\n\nexport type PartialKeys<T, K extends keyof T> = Omit<T, K> & Partial<Pick<T, K>>\n\nexport function memo<TDeps extends ReadonlyArray<any>, TResult>(\n getDeps: () => [...TDeps],\n fn: (...args: NoInfer<[...TDeps]>) => TResult,\n opts: {\n key: false | string\n debug?: () => boolean\n onChange?: (result: TResult) => void\n initialDeps?: TDeps\n },\n) {\n let deps = opts.initialDeps ?? []\n let result: TResult | undefined\n\n return (): TResult => {\n let depTime: number\n if (opts.key && opts.debug?.()) depTime = Date.now()\n\n const newDeps = getDeps()\n\n const depsChanged =\n newDeps.length !== deps.length ||\n newDeps.some((dep: any, index: number) => deps[index] !== dep)\n\n if (!depsChanged) {\n return result!\n }\n\n deps = newDeps\n\n let resultTime: number\n if (opts.key && opts.debug?.()) resultTime = Date.now()\n\n result = fn(...newDeps)\n\n if (opts.key && opts.debug?.()) {\n const depEndTime = Math.round((Date.now() - depTime!) * 100) / 100\n const resultEndTime = Math.round((Date.now() - resultTime!) * 100) / 100\n const resultFpsPercentage = resultEndTime / 16\n\n const pad = (str: number | string, num: number) => {\n str = String(str)\n while (str.length < num) {\n str = ' ' + str\n }\n return str\n }\n\n console.info(\n `%c⏱ ${pad(resultEndTime, 5)} /${pad(depEndTime, 5)} ms`,\n `\n font-size: .6rem;\n font-weight: bold;\n color: hsl(${Math.max(\n 0,\n Math.min(120 - 120 * resultFpsPercentage, 120),\n )}deg 100% 31%);`,\n opts?.key,\n )\n }\n\n opts?.onChange?.(result)\n\n return result\n }\n}\n\nexport function notUndefined<T>(value: T | undefined, msg?: string): T {\n if (value === undefined) {\n throw new Error(`Unexpected undefined${msg ? `: ${msg}` : ''}`)\n } else {\n return value\n }\n}\n\nexport const approxEqual = (a: number, b: number) => Math.abs(a - b) < 1\n\nexport const debounce = (\n targetWindow: Window & typeof globalThis,\n fn: Function,\n ms: number,\n) => {\n let timeoutId: number\n return function (this: any, ...args: Array<any>) {\n targetWindow.clearTimeout(timeoutId)\n timeoutId = targetWindow.setTimeout(() => fn.apply(this, args), ms)\n }\n}\n","import { approxEqual, debounce, memo, notUndefined } from './utils'\n\nexport * from './utils'\n\n//\n\ntype ScrollDirection = 'forward' | 'backward'\n\ntype ScrollAlignment = 'start' | 'center' | 'end' | 'auto'\n\ntype ScrollBehavior = 'auto' | 'smooth'\n\nexport interface ScrollToOptions {\n align?: ScrollAlignment\n behavior?: ScrollBehavior\n}\n\ntype ScrollToOffsetOptions = ScrollToOptions\n\ntype ScrollToIndexOptions = ScrollToOptions\n\nexport interface Range {\n startIndex: number\n endIndex: number\n overscan: number\n count: number\n}\n\ntype Key = number | string | bigint\n\nexport interface VirtualItem {\n key: Key\n index: number\n start: number\n end: number\n size: number\n lane: number\n}\n\nexport interface Rect {\n width: number\n height: number\n}\n\n//\n\nexport const defaultKeyExtractor = (index: number) => index\n\nexport const defaultRangeExtractor = (range: Range) => {\n const start = Math.max(range.startIndex - range.overscan, 0)\n const end = Math.min(range.endIndex + range.overscan, range.count - 1)\n\n const arr = []\n\n for (let i = start; i <= end; i++) {\n arr.push(i)\n }\n\n return arr\n}\n\nexport const observeElementRect = <T extends Element>(\n instance: Virtualizer<T, any>,\n cb: (rect: Rect) => void,\n) => {\n const element = instance.scrollElement\n if (!element) {\n return\n }\n const targetWindow = instance.targetWindow\n if (!targetWindow) {\n return\n }\n\n const handler = (rect: Rect) => {\n const { width, height } = rect\n cb({ width: Math.round(width), height: Math.round(height) })\n }\n\n handler(element.getBoundingClientRect())\n\n if (!targetWindow.ResizeObserver) {\n return () => {}\n }\n\n const observer = new targetWindow.ResizeObserver((entries) => {\n const entry = entries[0]\n if (entry?.borderBoxSize) {\n const box = entry.borderBoxSize[0]\n if (box) {\n handler({ width: box.inlineSize, height: box.blockSize })\n return\n }\n }\n handler(element.getBoundingClientRect())\n })\n\n observer.observe(element, { box: 'border-box' })\n\n return () => {\n observer.unobserve(element)\n }\n}\n\nconst addEventListenerOptions = {\n passive: true,\n}\n\nexport const observeWindowRect = (\n instance: Virtualizer<Window, any>,\n cb: (rect: Rect) => void,\n) => {\n const element = instance.scrollElement\n if (!element) {\n return\n }\n\n const handler = () => {\n cb({ width: element.innerWidth, height: element.innerHeight })\n }\n handler()\n\n element.addEventListener('resize', handler, addEventListenerOptions)\n\n return () => {\n element.removeEventListener('resize', handler)\n }\n}\n\nconst supportsScrollend =\n typeof window == 'undefined' ? true : 'onscrollend' in window\n\ntype ObserveOffsetCallBack = (offset: number, isScrolling: boolean) => void\n\nexport const observeElementOffset = <T extends Element>(\n instance: Virtualizer<T, any>,\n cb: ObserveOffsetCallBack,\n) => {\n const element = instance.scrollElement\n if (!element) {\n return\n }\n const targetWindow = instance.targetWindow\n if (!targetWindow) {\n return\n }\n\n let offset = 0\n const fallback =\n instance.options.useScrollendEvent && supportsScrollend\n ? () => undefined\n : debounce(\n targetWindow,\n () => {\n cb(offset, false)\n },\n instance.options.isScrollingResetDelay,\n )\n\n const createHandler = (isScrolling: boolean) => () => {\n const { horizontal, isRtl } = instance.options\n offset = horizontal\n ? element['scrollLeft'] * ((isRtl && -1) || 1)\n : element['scrollTop']\n fallback()\n cb(offset, isScrolling)\n }\n const handler = createHandler(true)\n const endHandler = createHandler(false)\n endHandler()\n\n element.addEventListener('scroll', handler, addEventListenerOptions)\n element.addEventListener('scrollend', endHandler, addEventListenerOptions)\n\n return () => {\n element.removeEventListener('scroll', handler)\n element.removeEventListener('scrollend', endHandler)\n }\n}\n\nexport const observeWindowOffset = (\n instance: Virtualizer<Window, any>,\n cb: ObserveOffsetCallBack,\n) => {\n const element = instance.scrollElement\n if (!element) {\n return\n }\n const targetWindow = instance.targetWindow\n if (!targetWindow) {\n return\n }\n\n let offset = 0\n const fallback =\n instance.options.useScrollendEvent && supportsScrollend\n ? () => undefined\n : debounce(\n targetWindow,\n () => {\n cb(offset, false)\n },\n instance.options.isScrollingResetDelay,\n )\n\n const createHandler = (isScrolling: boolean) => () => {\n offset = element[instance.options.horizontal ? 'scrollX' : 'scrollY']\n fallback()\n cb(offset, isScrolling)\n }\n const handler = createHandler(true)\n const endHandler = createHandler(false)\n endHandler()\n\n element.addEventListener('scroll', handler, addEventListenerOptions)\n element.addEventListener('scrollend', endHandler, addEventListenerOptions)\n\n return () => {\n element.removeEventListener('scroll', handler)\n element.removeEventListener('scrollend', endHandler)\n }\n}\n\nexport const measureElement = <TItemElement extends Element>(\n element: TItemElement,\n entry: ResizeObserverEntry | undefined,\n instance: Virtualizer<any, TItemElement>,\n) => {\n if (entry?.borderBoxSize) {\n const box = entry.borderBoxSize[0]\n if (box) {\n const size = Math.round(\n box[instance.options.horizontal ? 'inlineSize' : 'blockSize'],\n )\n return size\n }\n }\n return Math.round(\n element.getBoundingClientRect()[\n instance.options.horizontal ? 'width' : 'height'\n ],\n )\n}\n\nexport const windowScroll = <T extends Window>(\n offset: number,\n {\n adjustments = 0,\n behavior,\n }: { adjustments?: number; behavior?: ScrollBehavior },\n instance: Virtualizer<T, any>,\n) => {\n const toOffset = offset + adjustments\n\n instance.scrollElement?.scrollTo?.({\n [instance.options.horizontal ? 'left' : 'top']: toOffset,\n behavior,\n })\n}\n\nexport const elementScroll = <T extends Element>(\n offset: number,\n {\n adjustments = 0,\n behavior,\n }: { adjustments?: number; behavior?: ScrollBehavior },\n instance: Virtualizer<T, any>,\n) => {\n const toOffset = offset + adjustments\n\n instance.scrollElement?.scrollTo?.({\n [instance.options.horizontal ? 'left' : 'top']: toOffset,\n behavior,\n })\n}\n\nexport interface VirtualizerOptions<\n TScrollElement extends Element | Window,\n TItemElement extends Element,\n> {\n // Required from the user\n count: number\n getScrollElement: () => TScrollElement | null\n estimateSize: (index: number) => number\n\n // Required from the framework adapter (but can be overridden)\n scrollToFn: (\n offset: number,\n options: { adjustments?: number; behavior?: ScrollBehavior },\n instance: Virtualizer<TScrollElement, TItemElement>,\n ) => void\n observeElementRect: (\n instance: Virtualizer<TScrollElement, TItemElement>,\n cb: (rect: Rect) => void,\n ) => void | (() => void)\n observeElementOffset: (\n instance: Virtualizer<TScrollElement, TItemElement>,\n cb: ObserveOffsetCallBack,\n ) => void | (() => void)\n // Optional\n debug?: boolean\n initialRect?: Rect\n onChange?: (\n instance: Virtualizer<TScrollElement, TItemElement>,\n sync: boolean,\n ) => void\n measureElement?: (\n element: TItemElement,\n entry: ResizeObserverEntry | undefined,\n instance: Virtualizer<TScrollElement, TItemElement>,\n ) => number\n overscan?: number\n horizontal?: boolean\n paddingStart?: number\n paddingEnd?: number\n scrollPaddingStart?: number\n scrollPaddingEnd?: number\n initialOffset?: number | (() => number)\n getItemKey?: (index: number) => Key\n rangeExtractor?: (range: Range) => Array<number>\n scrollMargin?: number\n gap?: number\n indexAttribute?: string\n initialMeasurementsCache?: Array<VirtualItem>\n lanes?: number\n isScrollingResetDelay?: number\n useScrollendEvent?: boolean\n enabled?: boolean\n isRtl?: boolean\n}\n\nexport class Virtualizer<\n TScrollElement extends Element | Window,\n TItemElement extends Element,\n> {\n private unsubs: Array<void | (() => void)> = []\n options!: Required<VirtualizerOptions<TScrollElement, TItemElement>>\n scrollElement: TScrollElement | null = null\n targetWindow: (Window & typeof globalThis) | null = null\n isScrolling = false\n private scrollToIndexTimeoutId: number | null = null\n measurementsCache: Array<VirtualItem> = []\n private itemSizeCache = new Map<Key, number>()\n private pendingMeasuredCacheIndexes: Array<number> = []\n scrollRect: Rect | null = null\n scrollOffset: number | null = null\n scrollDirection: ScrollDirection | null = null\n private scrollAdjustments = 0\n shouldAdjustScrollPositionOnItemSizeChange:\n | undefined\n | ((\n item: VirtualItem,\n delta: number,\n instance: Virtualizer<TScrollElement, TItemElement>,\n ) => boolean)\n elementsCache = new Map<Key, TItemElement>()\n private observer = (() => {\n let _ro: ResizeObserver | null = null\n\n const get = () => {\n if (_ro) {\n return _ro\n }\n\n if (!this.targetWindow || !this.targetWindow.ResizeObserver) {\n return null\n }\n\n return (_ro = new this.targetWindow.ResizeObserver((entries) => {\n entries.forEach((entry) => {\n this._measureElement(entry.target as TItemElement, entry)\n })\n }))\n }\n\n return {\n disconnect: () => {\n get()?.disconnect()\n _ro = null\n },\n observe: (target: Element) =>\n get()?.observe(target, { box: 'border-box' }),\n unobserve: (target: Element) => get()?.unobserve(target),\n }\n })()\n range: { startIndex: number; endIndex: number } | null = null\n\n constructor(opts: VirtualizerOptions<TScrollElement, TItemElement>) {\n this.setOptions(opts)\n }\n\n setOptions = (opts: VirtualizerOptions<TScrollElement, TItemElement>) => {\n Object.entries(opts).forEach(([key, value]) => {\n if (typeof value === 'undefined') delete (opts as any)[key]\n })\n\n this.options = {\n debug: false,\n initialOffset: 0,\n overscan: 1,\n paddingStart: 0,\n paddingEnd: 0,\n scrollPaddingStart: 0,\n scrollPaddingEnd: 0,\n horizontal: false,\n getItemKey: defaultKeyExtractor,\n rangeExtractor: defaultRangeExtractor,\n onChange: () => {},\n measureElement,\n initialRect: { width: 0, height: 0 },\n scrollMargin: 0,\n gap: 0,\n indexAttribute: 'data-index',\n initialMeasurementsCache: [],\n lanes: 1,\n isScrollingResetDelay: 150,\n enabled: true,\n isRtl: false,\n useScrollendEvent: true,\n ...opts,\n }\n }\n\n private notify = (sync: boolean) => {\n this.options.onChange?.(this, sync)\n }\n\n private maybeNotify = memo(\n () => {\n this.calculateRange()\n\n return [\n this.isScrolling,\n this.range ? this.range.startIndex : null,\n this.range ? this.range.endIndex : null,\n ]\n },\n (isScrolling) => {\n this.notify(isScrolling)\n },\n {\n key: process.env.NODE_ENV !== 'production' && 'maybeNotify',\n debug: () => this.options.debug,\n initialDeps: [\n this.isScrolling,\n this.range ? this.range.startIndex : null,\n this.range ? this.range.endIndex : null,\n ] as [boolean, number | null, number | null],\n },\n )\n\n private cleanup = () => {\n this.unsubs.filter(Boolean).forEach((d) => d!())\n this.unsubs = []\n this.observer.disconnect()\n this.scrollElement = null\n this.targetWindow = null\n }\n\n _didMount = () => {\n return () => {\n this.cleanup()\n }\n }\n\n _willUpdate = () => {\n const scrollElement = this.options.enabled\n ? this.options.getScrollElement()\n : null\n\n if (this.scrollElement !== scrollElement) {\n this.cleanup()\n\n if (!scrollElement) {\n this.maybeNotify()\n return\n }\n\n this.scrollElement = scrollElement\n\n if (this.scrollElement && 'ownerDocument' in this.scrollElement) {\n this.targetWindow = this.scrollElement.ownerDocument.defaultView\n } else {\n this.targetWindow = this.scrollElement?.window ?? null\n }\n\n this.elementsCache.forEach((cached) => {\n this.observer.observe(cached)\n })\n\n this._scrollToOffset(this.getScrollOffset(), {\n adjustments: undefined,\n behavior: undefined,\n })\n\n this.unsubs.push(\n this.options.observeElementRect(this, (rect) => {\n this.scrollRect = rect\n this.maybeNotify()\n }),\n )\n\n this.unsubs.push(\n this.options.observeElementOffset(this, (offset, isScrolling) => {\n this.scrollAdjustments = 0\n this.scrollDirection = isScrolling\n ? this.getScrollOffset() < offset\n ? 'forward'\n : 'backward'\n : null\n this.scrollOffset = offset\n this.isScrolling = isScrolling\n\n this.maybeNotify()\n }),\n )\n }\n }\n\n private getSize = () => {\n if (!this.options.enabled) {\n this.scrollRect = null\n return 0\n }\n\n this.scrollRect = this.scrollRect ?? this.options.initialRect\n\n return this.scrollRect[this.options.horizontal ? 'width' : 'height']\n }\n\n private getScrollOffset = () => {\n if (!this.options.enabled) {\n this.scrollOffset = null\n return 0\n }\n\n this.scrollOffset =\n this.scrollOffset ??\n (typeof this.options.initialOffset === 'function'\n ? this.options.initialOffset()\n : this.options.initialOffset)\n\n return this.scrollOffset\n }\n\n private getFurthestMeasurement = (\n measurements: Array<VirtualItem>,\n index: number,\n ) => {\n const furthestMeasurementsFound = new Map<number, true>()\n const furthestMeasurements = new Map<number, VirtualItem>()\n for (let m = index - 1; m >= 0; m--) {\n const measurement = measurements[m]!\n\n if (furthestMeasurementsFound.has(measurement.lane)) {\n continue\n }\n\n const previousFurthestMeasurement = furthestMeasurements.get(\n measurement.lane,\n )\n if (\n previousFurthestMeasurement == null ||\n measurement.end > previousFurthestMeasurement.end\n ) {\n furthestMeasurements.set(measurement.lane, measurement)\n } else if (measurement.end < previousFurthestMeasurement.end) {\n furthestMeasurementsFound.set(measurement.lane, true)\n }\n\n if (furthestMeasurementsFound.size === this.options.lanes) {\n break\n }\n }\n\n return furthestMeasurements.size === this.options.lanes\n ? Array.from(furthestMeasurements.values()).sort((a, b) => {\n if (a.end === b.end) {\n return a.index - b.index\n }\n\n return a.end - b.end\n })[0]\n : undefined\n }\n\n private getMeasurementOptions = memo(\n () => [\n this.options.count,\n this.options.paddingStart,\n this.options.scrollMargin,\n this.options.getItemKey,\n this.options.enabled,\n ],\n (count, paddingStart, scrollMargin, getItemKey, enabled) => {\n this.pendingMeasuredCacheIndexes = []\n return {\n count,\n paddingStart,\n scrollMargin,\n getItemKey,\n enabled,\n }\n },\n {\n key: false,\n },\n )\n\n private getMeasurements = memo(\n () => [this.getMeasurementOptions(), this.itemSizeCache],\n (\n { count, paddingStart, scrollMargin, getItemKey, enabled },\n itemSizeCache,\n ) => {\n if (!enabled) {\n this.measurementsCache = []\n this.itemSizeCache.clear()\n return []\n }\n\n if (this.measurementsCache.length === 0) {\n this.measurementsCache = this.options.initialMeasurementsCache\n this.measurementsCache.forEach((item) => {\n this.itemSizeCache.set(item.key, item.size)\n })\n }\n\n const min =\n this.pendingMeasuredCacheIndexes.length > 0\n ? Math.min(...this.pendingMeasuredCacheIndexes)\n : 0\n this.pendingMeasuredCacheIndexes = []\n\n const measurements = this.measurementsCache.slice(0, min)\n\n for (let i = min; i < count; i++) {\n const key = getItemKey(i)\n\n const furthestMeasurement =\n this.options.lanes === 1\n ? measurements[i - 1]\n : this.getFurthestMeasurement(measurements, i)\n\n const start = furthestMeasurement\n ? furthestMeasurement.end + this.options.gap\n : paddingStart + scrollMargin\n\n const measuredSize = itemSizeCache.get(key)\n const size =\n typeof measuredSize === 'number'\n ? measuredSize\n : this.options.estimateSize(i)\n\n const end = start + size\n\n const lane = furthestMeasurement\n ? furthestMeasurement.lane\n : i % this.options.lanes\n\n measurements[i] = {\n index: i,\n start,\n size,\n end,\n key,\n lane,\n }\n }\n\n this.measurementsCache = measurements\n\n return measurements\n },\n {\n key: process.env.NODE_ENV !== 'production' && 'getMeasurements',\n debug: () => this.options.debug,\n },\n )\n\n calculateRange = memo(\n () => [this.getMeasurements(), this.getSize(), this.getScrollOffset()],\n (measurements, outerSize, scrollOffset) => {\n return (this.range =\n measurements.length > 0 && outerSize > 0\n ? calculateRange({\n measurements,\n outerSize,\n scrollOffset,\n })\n : null)\n },\n {\n key: process.env.NODE_ENV !== 'production' && 'calculateRange',\n debug: () => this.options.debug,\n },\n )\n\n private getIndexes = memo(\n () => [\n this.options.rangeExtractor,\n this.calculateRange(),\n this.options.overscan,\n this.options.count,\n ],\n (rangeExtractor, range, overscan, count) => {\n return range === null\n ? []\n : rangeExtractor({\n startIndex: range.startIndex,\n endIndex: range.endIndex,\n overscan,\n count,\n })\n },\n {\n key: process.env.NODE_ENV !== 'production' && 'getIndexes',\n debug: () => this.options.debug,\n },\n )\n\n indexFromElement = (node: TItemElement) => {\n const attributeName = this.options.indexAttribute\n const indexStr = node.getAttribute(attributeName)\n\n if (!indexStr) {\n console.warn(\n `Missing attribute name '${attributeName}={index}' on measured element.`,\n )\n return -1\n }\n\n return parseInt(indexStr, 10)\n }\n\n private _measureElement = (\n node: TItemElement,\n entry: ResizeObserverEntry | undefined,\n ) => {\n const index = this.indexFromElement(node)\n const item = this.measurementsCache[index]\n if (!item) {\n return\n }\n const key = item.key\n const prevNode = this.elementsCache.get(key)\n\n if (prevNode !== node) {\n if (prevNode) {\n this.observer.unobserve(prevNode)\n }\n this.observer.observe(node)\n this.elementsCache.set(key, node)\n }\n\n if (node.isConnected) {\n this.resizeItem(index, this.options.measureElement(node, entry, this))\n }\n }\n\n resizeItem = (index: number, size: number) => {\n const item = this.measurementsCache[index]\n if (!item) {\n return\n }\n const itemSize = this.itemSizeCache.get(item.key) ?? item.size\n const delta = size - itemSize\n\n if (delta !== 0) {\n if (\n this.shouldAdjustScrollPositionOnItemSizeChange !== undefined\n ? this.shouldAdjustScrollPositionOnItemSizeChange(item, delta, this)\n : item.start < this.getScrollOffset() + this.scrollAdjustments\n ) {\n if (process.env.NODE_ENV !== 'production' && this.options.debug) {\n console.info('correction', delta)\n }\n\n this._scrollToOffset(this.getScrollOffset(), {\n adjustments: (this.scrollAdjustments += delta),\n behavior: undefined,\n })\n }\n\n this.pendingMeasuredCacheIndexes.push(item.index)\n this.itemSizeCache = new Map(this.itemSizeCache.set(item.key, size))\n\n this.notify(false)\n }\n }\n\n measureElement = (node: TItemElement | null | undefined) => {\n if (!node) {\n this.elementsCache.forEach((cached, key) => {\n if (!cached.isConnected) {\n this.observer.unobserve(cached)\n this.elementsCache.delete(key)\n }\n })\n return\n }\n\n this._measureElement(node, undefined)\n }\n\n getVirtualItems = memo(\n () => [this.getIndexes(), this.getMeasurements()],\n (indexes, measurements) => {\n const virtualItems: Array<VirtualItem> = []\n\n for (let k = 0, len = indexes.length; k < len; k++) {\n const i = indexes[k]!\n const measurement = measurements[i]!\n\n virtualItems.push(measurement)\n }\n\n return virtualItems\n },\n {\n key: process.env.NODE_ENV !== 'production' && 'getVirtualItems',\n debug: () => this.options.debug,\n },\n )\n\n getVirtualItemForOffset = (offset: number) => {\n const measurements = this.getMeasurements()\n if (measurements.length === 0) {\n return undefined\n }\n return notUndefined(\n measurements[\n findNearestBinarySearch(\n 0,\n measurements.length - 1,\n (index: number) => notUndefined(measurements[index]).start,\n offset,\n )\n ],\n )\n }\n\n getOffsetForAlignment = (toOffset: number, align: ScrollAlignment) => {\n const size = this.getSize()\n const scrollOffset = this.getScrollOffset()\n\n if (align === 'auto') {\n if (toOffset >= scrollOffset + size) {\n align = 'end'\n }\n }\n\n if (align === 'end') {\n toOffset -= size\n }\n\n const scrollSizeProp = this.options.horizontal\n ? 'scrollWidth'\n : 'scrollHeight'\n const scrollSize = this.scrollElement\n ? 'document' in this.scrollElement\n ? this.scrollElement.document.documentElement[scrollSizeProp]\n : this.scrollElement[scrollSizeProp]\n : 0\n\n const maxOffset = scrollSize - size\n\n return Math.max(Math.min(maxOffset, toOffset), 0)\n }\n\n getOffsetForIndex = (index: number, align: ScrollAlignment = 'auto') => {\n index = Math.max(0, Math.min(index, this.options.count - 1))\n\n const item = this.measurementsCache[index]\n if (!item) {\n return undefined\n }\n\n const size = this.getSize()\n const scrollOffset = this.getScrollOffset()\n\n if (align === 'auto') {\n if (item.end >= scrollOffset + size - this.options.scrollPaddingEnd) {\n align = 'end'\n } else if (item.start <= scrollOffset + this.options.scrollPaddingStart) {\n align = 'start'\n } else {\n return [scrollOffset, align] as const\n }\n }\n\n const centerOffset =\n item.start - this.options.scrollPaddingStart + (item.size - size) / 2\n\n switch (align) {\n case 'center':\n return [this.getOffsetForAlignment(centerOffset, align), align] as const\n case 'end':\n return [\n this.getOffsetForAlignment(\n item.end + this.options.scrollPaddingEnd,\n align,\n ),\n align,\n ] as const\n default:\n return [\n this.getOffsetForAlignment(\n item.start - this.options.scrollPaddingStart,\n align,\n ),\n align,\n ] as const\n }\n }\n\n private isDynamicMode = () => this.elementsCache.size > 0\n\n private cancelScrollToIndex = () => {\n if (this.scrollToIndexTimeoutId !== null && this.targetWindow) {\n this.targetWindow.clearTimeout(this.scrollToIndexTimeoutId)\n this.scrollToIndexTimeoutId = null\n }\n }\n\n scrollToOffset = (\n toOffset: number,\n { align = 'start', behavior }: ScrollToOffsetOptions = {},\n ) => {\n this.cancelScrollToIndex()\n\n if (behavior === 'smooth' && this.isDynamicMode()) {\n console.warn(\n 'The `smooth` scroll behavior is not fully supported with dynamic size.',\n )\n }\n\n this._scrollToOffset(this.getOffsetForAlignment(toOffset, align), {\n adjustments: undefined,\n behavior,\n })\n }\n\n scrollToIndex = (\n index: number,\n { align: initialAlign = 'auto', behavior }: ScrollToIndexOptions = {},\n ) => {\n index = Math.max(0, Math.min(index, this.options.count - 1))\n\n this.cancelScrollToIndex()\n\n if (behavior === 'smooth' && this.isDynamicMode()) {\n console.warn(\n 'The `smooth` scroll behavior is not fully supported with dynamic size.',\n )\n }\n\n const offsetAndAlign = this.getOffsetForIndex(index, initialAlign)\n if (!offsetAndAlign) return\n\n const [offset, align] = offsetAndAlign\n\n this._scrollToOffset(offset, { adjustments: undefined, behavior })\n\n if (behavior !== 'smooth' && this.isDynamicMode() && this.targetWindow) {\n this.scrollToIndexTimeoutId = this.targetWindow.setTimeout(() => {\n this.scrollToIndexTimeoutId = null\n\n const elementInDOM = this.elementsCache.has(\n this.options.getItemKey(index),\n )\n\n if (elementInDOM) {\n const [latestOffset] = notUndefined(\n this.getOffsetForIndex(index, align),\n )\n\n if (!approxEqual(latestOffset, this.getScrollOffset())) {\n this.scrollToIndex(index, { align, behavior })\n }\n } else {\n this.scrollToIndex(index, { align, behavior })\n }\n })\n }\n }\n\n scrollBy = (delta: number, { behavior }: ScrollToOffsetOptions = {}) => {\n this.cancelScrollToIndex()\n\n if (behavior === 'smooth' && this.isDynamicMode()) {\n console.warn(\n 'The `smooth` scroll behavior is not fully supported with dynamic size.',\n )\n }\n\n this._scrollToOffset(this.getScrollOffset() + delta, {\n adjustments: undefined,\n behavior,\n })\n }\n\n getTotalSize = () => {\n const measurements = this.getMeasurements()\n\n let end: number\n // If there are no measurements, set the end to paddingStart\n if (measurements.length === 0) {\n end = this.options.paddingStart\n } else {\n // If lanes is 1, use the last measurement's end, otherwise find the maximum end value among all measurements\n end =\n this.options.lanes === 1\n ? (measurements[measurements.length - 1]?.end ?? 0)\n : Math.max(\n ...measurements.slice(-this.options.lanes).map((m) => m.end),\n )\n }\n\n return Math.max(\n end - this.options.scrollMargin + this.options.paddingEnd,\n 0,\n )\n }\n\n private _scrollToOffset = (\n offset: number,\n {\n adjustments,\n behavior,\n }: {\n adjustments: number | undefined\n behavior: ScrollBehavior | undefined\n },\n ) => {\n this.options.scrollToFn(offset, { behavior, adjustments }, this)\n }\n\n measure = () => {\n this.itemSizeCache = new Map()\n this.notify(false)\n }\n}\n\nconst findNearestBinarySearch = (\n low: number,\n high: number,\n getCurrentValue: (i: number) => number,\n value: number,\n) => {\n while (low <= high) {\n const middle = ((low + high) / 2) | 0\n const currentValue = getCurrentValue(middle)\n\n if (currentValue < value) {\n low = middle + 1\n } else if (currentValue > value) {\n high = middle - 1\n } else {\n return middle\n }\n }\n\n if (low > 0) {\n return low - 1\n } else {\n return 0\n }\n}\n\nfunction calculateRange({\n measurements,\n outerSize,\n scrollOffset,\n}: {\n measurements: Array<VirtualItem>\n outerSize: number\n scrollOffset: number\n}) {\n const count = measurements.length - 1\n const getOffset = (index: number) => measurements[index]!.start\n\n const startIndex = findNearestBinarySearch(0, count, getOffset, scrollOffset)\n let endIndex = startIndex\n\n while (\n endIndex < count &&\n measurements[endIndex]!.end < scrollOffset + outerSize\n ) {\n endIndex++\n }\n\n return { startIndex, endIndex }\n}\n","import * as React from 'react'\nimport { flushSync } from 'react-dom'\nimport {\n Virtualizer,\n elementScroll,\n observeElementOffset,\n observeElementRect,\n observeWindowOffset,\n observeWindowRect,\n windowScroll,\n} from '@tanstack/virtual-core'\nimport type { PartialKeys, VirtualizerOptions } from '@tanstack/virtual-core'\n\nexport * from '@tanstack/virtual-core'\n\nconst useIsomorphicLayoutEffect =\n typeof document !== 'undefined' ? React.useLayoutEffect : React.useEffect\n\nfunction useVirtualizerBase<\n TScrollElement extends Element | Window,\n TItemElement extends Element,\n>(\n options: VirtualizerOptions<TScrollElement, TItemElement>,\n): Virtualizer<TScrollElement, TItemElement> {\n const rerender = React.useReducer(() => ({}), {})[1]\n\n const resolvedOptions: VirtualizerOptions<TScrollElement, TItemElement> = {\n ...options,\n onChange: (instance, sync) => {\n if (sync) {\n flushSync(rerender)\n } else {\n rerender()\n }\n options.onChange?.(instance, sync)\n },\n }\n\n const [instance] = React.useState(\n () => new Virtualizer<TScrollElement, TItemElement>(resolvedOptions),\n )\n\n instance.setOptions(resolvedOptions)\n\n useIsomorphicLayoutEffect(() => {\n return instance._didMount()\n }, [])\n\n useIsomorphicLayoutEffect(() => {\n return instance._willUpdate()\n })\n\n return instance\n}\n\nexport function useVirtualizer<\n TScrollElement extends Element,\n TItemElement extends Element,\n>(\n options: PartialKeys<\n VirtualizerOptions<TScrollElement, TItemElement>,\n 'observeElementRect' | 'observeElementOffset' | 'scrollToFn'\n >,\n): Virtualizer<TScrollElement, TItemElement> {\n return useVirtualizerBase<TScrollElement, TItemElement>({\n observeElementRect: observeElementRect,\n observeElementOffset: observeElementOffset,\n scrollToFn: elementScroll,\n ...options,\n })\n}\n\nexport function useWindowVirtualizer<TItemElement extends Element>(\n options: PartialKeys<\n VirtualizerOptions<Window, TItemElement>,\n | 'getScrollElement'\n | 'observeElementRect'\n | 'observeElementOffset'\n | 'scrollToFn'\n >,\n): Virtualizer<Window, TItemElement> {\n return useVirtualizerBase<Window, TItemElement>({\n getScrollElement: () => (typeof document !== 'undefined' ? window : null),\n observeElementRect: observeWindowRect,\n observeElementOffset: observeWindowOffset,\n scrollToFn: windowScroll,\n initialOffset: () => (typeof document !== 'undefined' ? window.scrollY : 0),\n ...options,\n })\n}\n","const hasProp = (prop) => (obj) => obj !== null && typeof obj === \"object\" && prop in obj;\nconst hasMatch = hasProp(\"match\");\nconst chunkExists = (chunk) => typeof chunk !== \"undefined\";\nfunction clip({\n curr,\n next,\n prev,\n clipBy = 3\n}) {\n const words = curr.text.split(\" \");\n const len = words.length;\n if (curr.match || clipBy >= len) {\n return curr.text;\n }\n const ellipsis = \"...\";\n if (chunkExists(next) && chunkExists(prev) && hasMatch(prev) && hasMatch(next)) {\n if (len > clipBy * 2) {\n return [\n ...words.slice(0, clipBy),\n ellipsis,\n ...words.slice(-clipBy)\n ].join(\" \");\n }\n return curr.text;\n }\n if (chunkExists(next) && hasMatch(next)) {\n return [ellipsis, ...words.slice(-clipBy)].join(\" \");\n }\n if (chunkExists(prev) && hasMatch(prev)) {\n return [...words.slice(0, clipBy), ellipsis].join(\" \");\n }\n return curr.text;\n}\n\nconst escapeRegexp = (term) => term.replace(/[|\\\\{}()[\\]^$+*?.-]/g, (char) => `\\\\${char}`);\nconst termsToRegExpString = (terms) => terms.replace(/\\s{2,}/g, \" \").split(\" \").join(\"|\");\nconst regexpQuery = ({\n terms,\n matchExactly = false\n}) => {\n if (typeof terms !== \"string\") {\n throw new TypeError(\"Expected a string\");\n }\n const escapedTerms = escapeRegexp(terms.trim());\n return `(${matchExactly ? escapedTerms : termsToRegExpString(escapedTerms)})`;\n};\nconst buildRegexp = ({\n terms,\n matchExactly = false\n}) => {\n try {\n const fromString = /^([/~@;%#'])(.*?)\\1([gimsuy]*)$/.exec(terms);\n if (fromString) {\n return new RegExp(fromString[2], fromString[3]);\n }\n return new RegExp(regexpQuery({ terms, matchExactly }), \"ig\");\n } catch {\n throw new TypeError(\"Expected terms to be either a string or a RegExp!\");\n }\n};\n\nlet IDX = 36;\nlet HEX = \"\";\nwhile (IDX--) {\n HEX += IDX.toString(36);\n}\nfunction uid(len = 11) {\n let str = \"\";\n let num = len;\n while (num--) {\n str += HEX[Math.random() * 36 | 0];\n }\n return str;\n}\n\nconst hasLength = (str) => str.length > 0;\nconst highlightWords = ({\n text,\n query,\n clipBy,\n matchExactly = false\n}) => {\n const safeQuery = typeof query === \"string\" ? query.trim() : query;\n if (safeQuery === \"\") {\n return [\n {\n key: uid(),\n text,\n match: false\n }\n ];\n }\n const searchRegexp = buildRegexp({ terms: query, matchExactly });\n return text.split(searchRegexp).filter(hasLength).map((str) => ({\n // Compose the object for a match\n key: uid(),\n text: str,\n match: matchExactly ? str.toLowerCase() === safeQuery.toLowerCase() : searchRegexp.test(str)\n })).map((chunk, index, chunks) => ({\n // For each chunk, clip the text if needed\n ...chunk,\n // All the props first\n ...typeof clipBy === \"number\" && {\n // We only overwrite the text if there is a clip\n text: clip({\n curr: chunk,\n // We need the current chunk\n ...index < chunks.length - 1 && { next: chunks[index + 1] },\n // If this wasn't the last chunk, set the next chunk\n ...index > 0 && { prev: chunks[index - 1] },\n // If this wasn't the first chunk, set the previous chunk\n clipBy\n })\n }\n }));\n};\n\nexport { highlightWords as default };\n","'use client';\n\nimport _extends from \"@babel/runtime/helpers/esm/extends\";\nimport _objectWithoutPropertiesLoose from \"@babel/runtime/helpers/esm/objectWithoutPropertiesLoose\";\nconst _excluded = [\"desktopModeMediaQuery\"];\nimport * as React from 'react';\nimport PropTypes from 'prop-types';\nimport useMediaQuery from '@mui/material/useMediaQuery';\nimport { useThemeProps } from '@mui/material/styles';\nimport refType from '@mui/utils/refType';\nimport { DesktopTimePicker } from \"../DesktopTimePicker/index.mjs\";\nimport { MobileTimePicker } from \"../MobileTimePicker/index.mjs\";\nimport { DEFAULT_DESKTOP_MODE_MEDIA_QUERY } from \"../internals/utils/utils.mjs\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\n/**\n * Demos:\n *\n * - [TimePicker](https://mui.com/x/react-date-pickers/time-picker/)\n * - [Validation](https://mui.com/x/react-date-pickers/validation/)\n *\n * API:\n *\n * - [TimePicker API](https://mui.com/x/api/date-pickers/time-picker/)\n */\nconst TimePicker = /*#__PURE__*/React.forwardRef(function TimePicker(inProps, ref) {\n const props = useThemeProps({\n props: inProps,\n name: 'MuiTimePicker'\n });\n const {\n desktopModeMediaQuery = DEFAULT_DESKTOP_MODE_MEDIA_QUERY\n } = props,\n other = _objectWithoutPropertiesLoose(props, _excluded);\n\n // defaults to `true` in environments where `window.matchMedia` would not be available (i.e. test/jsdom)\n const isDesktop = useMediaQuery(desktopModeMediaQuery, {\n defaultMatches: true\n });\n if (isDesktop) {\n return /*#__PURE__*/_jsx(DesktopTimePicker, _extends({\n ref: ref\n }, other));\n }\n return /*#__PURE__*/_jsx(MobileTimePicker, _extends({\n ref: ref\n }, other));\n});\nif (process.env.NODE_ENV !== \"production\") TimePicker.displayName = \"TimePicker\";\nprocess.env.NODE_ENV !== \"production\" ? TimePicker.propTypes = {\n // ----------------------------- Warning --------------------------------\n // | These PropTypes are generated from the TypeScript type definitions |\n // | To update them edit the TypeScript types and run \"pnpm proptypes\" |\n // ----------------------------------------------------------------------\n /**\n * 12h/24h view for hour selection clock.\n * @default adapter.is12HourCycleInCurrentLocale()\n */\n ampm: PropTypes.bool,\n /**\n * Display ampm controls under the clock (instead of in the toolbar).\n * @default true on desktop, false on mobile\n */\n ampmInClock: PropTypes.bool,\n /**\n * If `true`, the main element is focused during the first mount.\n * This main element is:\n * - the element chosen by the visible view if any (i.e: the selected day on the `day` view).\n * - the `input` element if there is a field rendered.\n */\n autoFocus: PropTypes.bool,\n className: PropTypes.string,\n /**\n * If `true`, the Picker will close after submitting the full date.\n * @default false\n */\n closeOnSelect: PropTypes.bool,\n /**\n * The default value.\n * Used when the component is not controlled.\n */\n defaultValue: PropTypes.object,\n /**\n * CSS media query when `Mobile` mode will be changed to `Desktop`.\n * @default '@media (pointer: fine)'\n * @example '@media (min-width: 720px)' or theme.breakpoints.up(\"sm\")\n */\n desktopModeMediaQuery: PropTypes.string,\n /**\n * If `true`, the component is disabled.\n * When disabled, the value cannot be changed and no interaction is possible.\n * @default false\n */\n disabled: PropTypes.bool,\n /**\n * If `true`, disable values after the current date for date components, time for time components and both for date time components.\n * @default false\n */\n disableFuture: PropTypes.bool,\n /**\n * Do not ignore date part when validating min/max time.\n * @default false\n */\n disableIgnoringDatePartForTimeValidation: PropTypes.bool,\n /**\n * If `true`, the button to open the Picker will not be rendered (it will only render the field).\n * @deprecated Use the [field component](https://mui.com/x/react-date-pickers/fields/) instead.\n * @default false\n */\n disableOpenPicker: PropTypes.bool,\n /**\n * If `true`, disable values before the current date for date components, time for time components and both for date time components.\n * @default false\n */\n disablePast: PropTypes.bool,\n /**\n * Format of the date when rendered in the input(s).\n * Defaults to localized format based on the used `views`.\n */\n format: PropTypes.string,\n /**\n * Density of the format when rendered in the input.\n * Setting `formatDensity` to `\"spacious\"` will add a space before and after each `/`, `-` and `.` character.\n * @default \"dense\"\n */\n formatDensity: PropTypes.oneOf(['dense', 'spacious']),\n /**\n * Pass a ref to the `input` element.\n */\n inputRef: refType,\n /**\n * If `true`, keep the picker open when the value is edited from the field.\n * Useful to prevent the popper/dialog from closing while typing in the input.\n * This only affects changes with `source = \"field\"` and does not alter view interactions.\n * @default false\n */\n keepOpenDuringFieldFocus: PropTypes.bool,\n /**\n * The label content.\n */\n label: PropTypes.node,\n /**\n * Locale for components texts.\n * Allows overriding texts coming from `LocalizationProvider` and `theme`.\n */\n localeText: PropTypes.object,\n /**\n * Maximal selectable time.\n * The date part of the object will be ignored unless `props.disableIgnoringDatePartForTimeValidation === true`.\n */\n maxTime: PropTypes.object,\n /**\n * Minimal selectable time.\n * The date part of the object will be ignored unless `props.disableIgnoringDatePartForTimeValidation === true`.\n */\n minTime: PropTypes.object,\n /**\n * Step over minutes.\n * @default 1\n */\n minutesStep: PropTypes.number,\n /**\n * Name attribute used by the `input` element in the Field.\n */\n name: PropTypes.string,\n /**\n * Callback fired when the value is accepted.\n * @template TValue The value type. It will be the same type as `value` or `null`. It can be in `[start, end]` format in case of range value.\n * @template TError The validation error type. It will be either `string` or a `null`. It can be in `[start, end]` format in case of range value.\n * @param {TValue} value The value that was just accepted.\n * @param {FieldChangeHandlerContext<TError>} context Context about this acceptance:\n * - `validationError`: validation result of the current value\n * - `source`: source of the acceptance. One of 'field' | 'view' | 'unknown'\n * - `shortcut` (optional): the shortcut metadata if the value was accepted via a shortcut selection\n */\n onAccept: PropTypes.func,\n /**\n * Callback fired when the value changes.\n * @template TValue The value type. It will be the same type as `value` or `null`. It can be in `[start, end]` format in case of range value.\n * @template TError The validation error type. It will be either `string` or a `null`. It can be in `[start, end]` format in case of range value.\n * @param {TValue} value The new value.\n * @param {FieldChangeHandlerContext<TError>} context Context about this change:\n * - `validationError`: validation result of the current value\n * - `source`: source of the change. One of 'field' | 'view' | 'unknown'\n * - `shortcut` (optional): the shortcut metadata if the change was triggered by a shortcut selection\n */\n onChange: PropTypes.func,\n /**\n * Callback fired when the popup requests to be closed.\n * Use in controlled mode (see `open`).\n */\n onClose: PropTypes.func,\n /**\n * Callback fired when the error associated with the current value changes.\n * When a validation error is detected, the `error` parameter contains a non-null value.\n * This can be used to render an appropriate form error.\n * @template TError The validation error type. It will be either `string` or a `null`. It can be in `[start, end]` format in case of range value.\n * @template TValue The value type. It will be the same type as `value` or `null`. It can be in `[start, end]` format in case of range value.\n * @param {TError} error The reason why the current value is not valid.\n * @param {TValue} value The value associated with the error.\n */\n onError: PropTypes.func,\n /**\n * Callback fired when the popup requests to be opened.\n * Use in controlled mode (see `open`).\n */\n onOpen: PropTypes.func,\n /**\n * Callback fired when the selected sections change.\n * @param {FieldSelectedSections} newValue The new selected sections.\n */\n onSelectedSectionsChange: PropTypes.func,\n /**\n * Callback fired on view change.\n * @template TView Type of the view. It will vary based on the Picker type and the `views` it uses.\n * @param {TView} view The new view.\n */\n onViewChange: PropTypes.func,\n /**\n * Control the popup or dialog open state.\n * @default false\n */\n open: PropTypes.bool,\n /**\n * The default visible view.\n * Used when the component view is not controlled.\n * Must be a valid option from `views` list.\n */\n openTo: PropTypes.oneOf(['hours', 'meridiem', 'minutes', 'seconds']),\n /**\n * Force rendering in particular orientation.\n */\n orientation: PropTypes.oneOf(['landscape', 'portrait']),\n /**\n * If `true`, the component is read-only.\n * When read-only, the value cannot be changed but the user can interact with the interface.\n * @default false\n */\n readOnly: PropTypes.bool,\n /**\n * If `true`, disable heavy animations.\n * @default `@media(prefers-reduced-motion: reduce)` || `navigator.userAgent` matches Android <10 or iOS <13\n */\n reduceAnimations: PropTypes.bool,\n /**\n * The date used to generate the new value when both `value` and `defaultValue` are empty.\n * @default The closest valid date-time using the validation props, except callbacks like `shouldDisable<...>`.\n */\n referenceDate: PropTypes.object,\n /**\n * The currently selected sections.\n * This prop accepts four formats:\n * 1. If a number is provided, the section at this index will be selected.\n * 2. If a string of type `FieldSectionType` is provided, the first section with that name will be selected.\n * 3. If `\"all\"` is provided, all the sections will be selected.\n * 4. If `null` is provided, no section will be selected.\n * If not provided, the selected sections will be handled internally.\n */\n selectedSections: PropTypes.oneOfType([PropTypes.oneOf(['all', 'day', 'empty', 'hours', 'meridiem', 'minutes', 'month', 'seconds', 'weekDay', 'year']), PropTypes.number]),\n /**\n * Disable specific time.\n * @param {PickerValidDate} value The value to check.\n * @param {TimeView} view The clock type of the timeValue.\n * @returns {boolean} If `true` the time will be disabled.\n */\n shouldDisableTime: PropTypes.func,\n /**\n * If `true`, disabled digital clock items will not be rendered.\n * @default false\n */\n skipDisabled: PropTypes.bool,\n /**\n * The props used for each component slot.\n * @default {}\n */\n slotProps: PropTypes.object,\n /**\n * Overridable component slots.\n * @default {}\n */\n slots: PropTypes.object,\n /**\n * The system prop that allows defining system overrides as well as additional CSS styles.\n */\n sx: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.func, PropTypes.object, PropTypes.bool])), PropTypes.func, PropTypes.object]),\n /**\n * Amount of time options below or at which the single column time renderer is used.\n * @default 24\n */\n thresholdToRenderTimeInASingleColumn: PropTypes.number,\n /**\n * The time steps between two time unit options.\n * For example, if `timeSteps.minutes = 8`, then the available minute options will be `[0, 8, 16, 24, 32, 40, 48, 56]`.\n * When single column time renderer is used, only `timeSteps.minutes` will be used.\n * @default{ hours: 1, minutes: 5, seconds: 5 }\n */\n timeSteps: PropTypes.shape({\n hours: PropTypes.number,\n minutes: PropTypes.number,\n seconds: PropTypes.number\n }),\n /**\n * Choose which timezone to use for the value.\n * Example: \"default\", \"system\", \"UTC\", \"America/New_York\".\n * If you pass values from other timezones to some props, they will be converted to this timezone before being used.\n * @see See the {@link https://mui.com/x/react-date-pickers/timezone/ timezones documentation} for more details.\n * @default The timezone of the `value` or `defaultValue` prop is defined, 'default' otherwise.\n */\n timezone: PropTypes.string,\n /**\n * The selected value.\n * Used when the component is controlled.\n */\n value: PropTypes.object,\n /**\n * The visible view.\n * Used when the component view is controlled.\n * Must be a valid option from `views` list.\n */\n view: PropTypes.oneOf(['hours', 'meridiem', 'minutes', 'seconds']),\n /**\n * Define custom view renderers for each section.\n * If `null`, the section will only have field editing.\n * If `undefined`, internally defined view will be used.\n */\n viewRenderers: PropTypes.shape({\n hours: PropTypes.func,\n meridiem: PropTypes.func,\n minutes: PropTypes.func,\n seconds: PropTypes.func\n }),\n /**\n * Available views.\n */\n views: PropTypes.arrayOf(PropTypes.oneOf(['hours', 'minutes', 'seconds']).isRequired)\n} : void 0;\nexport { TimePicker };","'use client';\n\nimport _extends from \"@babel/runtime/helpers/esm/extends\";\nimport * as React from 'react';\nimport PropTypes from 'prop-types';\nimport resolveComponentProps from '@mui/utils/resolveComponentProps';\nimport refType from '@mui/utils/refType';\nimport { singleItemValueManager } from \"../internals/utils/valueManagers.mjs\";\nimport { TimeField } from \"../TimeField/index.mjs\";\nimport { useTimePickerDefaultizedProps } from \"../TimePicker/shared.mjs\";\nimport { usePickerAdapter } from \"../hooks/usePickerAdapter.mjs\";\nimport { extractValidationProps, validateTime } from \"../validation/index.mjs\";\nimport { useDesktopPicker } from \"../internals/hooks/useDesktopPicker/index.mjs\";\nimport { renderDigitalClockTimeView, renderMultiSectionDigitalClockTimeView } from \"../timeViewRenderers/index.mjs\";\nimport { resolveTimeFormat } from \"../internals/utils/time-utils.mjs\";\nimport { resolveTimeViewsResponse } from \"../internals/utils/date-time-utils.mjs\";\n/**\n * Demos:\n *\n * - [TimePicker](https://mui.com/x/react-date-pickers/time-picker/)\n * - [Validation](https://mui.com/x/react-date-pickers/validation/)\n *\n * API:\n *\n * - [DesktopTimePicker API](https://mui.com/x/api/date-pickers/desktop-time-picker/)\n */\nconst DesktopTimePicker = /*#__PURE__*/React.forwardRef(function DesktopTimePicker(inProps, ref) {\n const adapter = usePickerAdapter();\n\n // Props with the default values common to all time pickers\n const defaultizedProps = useTimePickerDefaultizedProps(inProps, 'MuiDesktopTimePicker');\n const {\n shouldRenderTimeInASingleColumn,\n views: resolvedViews,\n timeSteps\n } = resolveTimeViewsResponse(defaultizedProps);\n const renderTimeView = shouldRenderTimeInASingleColumn ? renderDigitalClockTimeView : renderMultiSectionDigitalClockTimeView;\n const viewRenderers = _extends({\n hours: renderTimeView,\n minutes: renderTimeView,\n seconds: renderTimeView,\n meridiem: renderTimeView\n }, defaultizedProps.viewRenderers);\n const ampmInClock = defaultizedProps.ampmInClock ?? true;\n // Need to avoid adding the `meridiem` view when unexpected renderer is specified\n const shouldHoursRendererContainMeridiemView = viewRenderers.hours?.name === renderMultiSectionDigitalClockTimeView.name;\n const views = !shouldHoursRendererContainMeridiemView ? resolvedViews.filter(view => view !== 'meridiem') : resolvedViews;\n\n // Props with the default values specific to the desktop variant\n const props = _extends({}, defaultizedProps, {\n ampmInClock,\n timeSteps,\n viewRenderers,\n format: resolveTimeFormat(adapter, defaultizedProps),\n // Setting only `hours` time view in case of single column time picker\n // Allows for easy view lifecycle management\n views: shouldRenderTimeInASingleColumn ? ['hours'] : views,\n slots: _extends({\n field: TimeField\n }, defaultizedProps.slots),\n slotProps: _extends({}, defaultizedProps.slotProps, {\n field: ownerState => _extends({}, resolveComponentProps(defaultizedProps.slotProps?.field, ownerState), extractValidationProps(defaultizedProps)),\n toolbar: _extends({\n hidden: true,\n ampmInClock\n }, defaultizedProps.slotProps?.toolbar)\n })\n });\n const {\n renderPicker\n } = useDesktopPicker({\n ref,\n props,\n valueManager: singleItemValueManager,\n valueType: 'time',\n validator: validateTime,\n steps: null\n });\n return renderPicker();\n});\nif (process.env.NODE_ENV !== \"production\") DesktopTimePicker.displayName = \"DesktopTimePicker\";\nDesktopTimePicker.propTypes = {\n // ----------------------------- Warning --------------------------------\n // | These PropTypes are generated from the TypeScript type definitions |\n // | To update them edit the TypeScript types and run \"pnpm proptypes\" |\n // ----------------------------------------------------------------------\n /**\n * 12h/24h view for hour selection clock.\n * @default adapter.is12HourCycleInCurrentLocale()\n */\n ampm: PropTypes.bool,\n /**\n * Display ampm controls under the clock (instead of in the toolbar).\n * @default true on desktop, false on mobile\n */\n ampmInClock: PropTypes.bool,\n /**\n * If `true`, the main element is focused during the first mount.\n * This main element is:\n * - the element chosen by the visible view if any (i.e: the selected day on the `day` view).\n * - the `input` element if there is a field rendered.\n */\n autoFocus: PropTypes.bool,\n className: PropTypes.string,\n /**\n * If `true`, the Picker will close after submitting the full date.\n * @default false\n */\n closeOnSelect: PropTypes.bool,\n /**\n * The default value.\n * Used when the component is not controlled.\n */\n defaultValue: PropTypes.object,\n /**\n * If `true`, the component is disabled.\n * When disabled, the value cannot be changed and no interaction is possible.\n * @default false\n */\n disabled: PropTypes.bool,\n /**\n * If `true`, disable values after the current date for date components, time for time components and both for date time components.\n * @default false\n */\n disableFuture: PropTypes.bool,\n /**\n * Do not ignore date part when validating min/max time.\n * @default false\n */\n disableIgnoringDatePartForTimeValidation: PropTypes.bool,\n /**\n * If `true`, the button to open the Picker will not be rendered (it will only render the field).\n * @deprecated Use the [field component](https://mui.com/x/react-date-pickers/fields/) instead.\n * @default false\n */\n disableOpenPicker: PropTypes.bool,\n /**\n * If `true`, disable values before the current date for date components, time for time components and both for date time components.\n * @default false\n */\n disablePast: PropTypes.bool,\n /**\n * Format of the date when rendered in the input(s).\n * Defaults to localized format based on the used `views`.\n */\n format: PropTypes.string,\n /**\n * Density of the format when rendered in the input.\n * Setting `formatDensity` to `\"spacious\"` will add a space before and after each `/`, `-` and `.` character.\n * @default \"dense\"\n */\n formatDensity: PropTypes.oneOf(['dense', 'spacious']),\n /**\n * Pass a ref to the `input` element.\n */\n inputRef: refType,\n /**\n * If `true`, keep the picker open when the value is edited from the field.\n * Useful to prevent the popper/dialog from closing while typing in the input.\n * This only affects changes with `source = \"field\"` and does not alter view interactions.\n * @default false\n */\n keepOpenDuringFieldFocus: PropTypes.bool,\n /**\n * The label content.\n */\n label: PropTypes.node,\n /**\n * Locale for components texts.\n * Allows overriding texts coming from `LocalizationProvider` and `theme`.\n */\n localeText: PropTypes.object,\n /**\n * Maximal selectable time.\n * The date part of the object will be ignored unless `props.disableIgnoringDatePartForTimeValidation === true`.\n */\n maxTime: PropTypes.object,\n /**\n * Minimal selectable time.\n * The date part of the object will be ignored unless `props.disableIgnoringDatePartForTimeValidation === true`.\n */\n minTime: PropTypes.object,\n /**\n * Step over minutes.\n * @default 1\n */\n minutesStep: PropTypes.number,\n /**\n * Name attribute used by the `input` element in the Field.\n */\n name: PropTypes.string,\n /**\n * Callback fired when the value is accepted.\n * @template TValue The value type. It will be the same type as `value` or `null`. It can be in `[start, end]` format in case of range value.\n * @template TError The validation error type. It will be either `string` or a `null`. It can be in `[start, end]` format in case of range value.\n * @param {TValue} value The value that was just accepted.\n * @param {FieldChangeHandlerContext<TError>} context Context about this acceptance:\n * - `validationError`: validation result of the current value\n * - `source`: source of the acceptance. One of 'field' | 'view' | 'unknown'\n * - `shortcut` (optional): the shortcut metadata if the value was accepted via a shortcut selection\n */\n onAccept: PropTypes.func,\n /**\n * Callback fired when the value changes.\n * @template TValue The value type. It will be the same type as `value` or `null`. It can be in `[start, end]` format in case of range value.\n * @template TError The validation error type. It will be either `string` or a `null`. It can be in `[start, end]` format in case of range value.\n * @param {TValue} value The new value.\n * @param {FieldChangeHandlerContext<TError>} context Context about this change:\n * - `validationError`: validation result of the current value\n * - `source`: source of the change. One of 'field' | 'view' | 'unknown'\n * - `shortcut` (optional): the shortcut metadata if the change was triggered by a shortcut selection\n */\n onChange: PropTypes.func,\n /**\n * Callback fired when the popup requests to be closed.\n * Use in controlled mode (see `open`).\n */\n onClose: PropTypes.func,\n /**\n * Callback fired when the error associated with the current value changes.\n * When a validation error is detected, the `error` parameter contains a non-null value.\n * This can be used to render an appropriate form error.\n * @template TError The validation error type. It will be either `string` or a `null`. It can be in `[start, end]` format in case of range value.\n * @template TValue The value type. It will be the same type as `value` or `null`. It can be in `[start, end]` format in case of range value.\n * @param {TError} error The reason why the current value is not valid.\n * @param {TValue} value The value associated with the error.\n */\n onError: PropTypes.func,\n /**\n * Callback fired when the popup requests to be opened.\n * Use in controlled mode (see `open`).\n */\n onOpen: PropTypes.func,\n /**\n * Callback fired when the selected sections change.\n * @param {FieldSelectedSections} newValue The new selected sections.\n */\n onSelectedSectionsChange: PropTypes.func,\n /**\n * Callback fired on view change.\n * @template TView Type of the view. It will vary based on the Picker type and the `views` it uses.\n * @param {TView} view The new view.\n */\n onViewChange: PropTypes.func,\n /**\n * Control the popup or dialog open state.\n * @default false\n */\n open: PropTypes.bool,\n /**\n * The default visible view.\n * Used when the component view is not controlled.\n * Must be a valid option from `views` list.\n */\n openTo: PropTypes.oneOf(['hours', 'meridiem', 'minutes', 'seconds']),\n /**\n * Force rendering in particular orientation.\n */\n orientation: PropTypes.oneOf(['landscape', 'portrait']),\n /**\n * If `true`, the component is read-only.\n * When read-only, the value cannot be changed but the user can interact with the interface.\n * @default false\n */\n readOnly: PropTypes.bool,\n /**\n * If `true`, disable heavy animations.\n * @default `@media(prefers-reduced-motion: reduce)` || `navigator.userAgent` matches Android <10 or iOS <13\n */\n reduceAnimations: PropTypes.bool,\n /**\n * The date used to generate the new value when both `value` and `defaultValue` are empty.\n * @default The closest valid date-time using the validation props, except callbacks like `shouldDisable<...>`.\n */\n referenceDate: PropTypes.object,\n /**\n * The currently selected sections.\n * This prop accepts four formats:\n * 1. If a number is provided, the section at this index will be selected.\n * 2. If a string of type `FieldSectionType` is provided, the first section with that name will be selected.\n * 3. If `\"all\"` is provided, all the sections will be selected.\n * 4. If `null` is provided, no section will be selected.\n * If not provided, the selected sections will be handled internally.\n */\n selectedSections: PropTypes.oneOfType([PropTypes.oneOf(['all', 'day', 'empty', 'hours', 'meridiem', 'minutes', 'month', 'seconds', 'weekDay', 'year']), PropTypes.number]),\n /**\n * Disable specific time.\n * @param {PickerValidDate} value The value to check.\n * @param {TimeView} view The clock type of the timeValue.\n * @returns {boolean} If `true` the time will be disabled.\n */\n shouldDisableTime: PropTypes.func,\n /**\n * If `true`, disabled digital clock items will not be rendered.\n * @default false\n */\n skipDisabled: PropTypes.bool,\n /**\n * The props used for each component slot.\n * @default {}\n */\n slotProps: PropTypes.object,\n /**\n * Overridable component slots.\n * @default {}\n */\n slots: PropTypes.object,\n /**\n * The system prop that allows defining system overrides as well as additional CSS styles.\n */\n sx: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.func, PropTypes.object, PropTypes.bool])), PropTypes.func, PropTypes.object]),\n /**\n * Amount of time options below or at which the single column time renderer is used.\n * @default 24\n */\n thresholdToRenderTimeInASingleColumn: PropTypes.number,\n /**\n * The time steps between two time unit options.\n * For example, if `timeSteps.minutes = 8`, then the available minute options will be `[0, 8, 16, 24, 32, 40, 48, 56]`.\n * When single column time renderer is used, only `timeSteps.minutes` will be used.\n * @default{ hours: 1, minutes: 5, seconds: 5 }\n */\n timeSteps: PropTypes.shape({\n hours: PropTypes.number,\n minutes: PropTypes.number,\n seconds: PropTypes.number\n }),\n /**\n * Choose which timezone to use for the value.\n * Example: \"default\", \"system\", \"UTC\", \"America/New_York\".\n * If you pass values from other timezones to some props, they will be converted to this timezone before being used.\n * @see See the {@link https://mui.com/x/react-date-pickers/timezone/ timezones documentation} for more details.\n * @default The timezone of the `value` or `defaultValue` prop is defined, 'default' otherwise.\n */\n timezone: PropTypes.string,\n /**\n * The selected value.\n * Used when the component is controlled.\n */\n value: PropTypes.object,\n /**\n * The visible view.\n * Used when the component view is controlled.\n * Must be a valid option from `views` list.\n */\n view: PropTypes.oneOf(['hours', 'meridiem', 'minutes', 'seconds']),\n /**\n * Define custom view renderers for each section.\n * If `null`, the section will only have field editing.\n * If `undefined`, internally defined view will be used.\n */\n viewRenderers: PropTypes.shape({\n hours: PropTypes.func,\n meridiem: PropTypes.func,\n minutes: PropTypes.func,\n seconds: PropTypes.func\n }),\n /**\n * Available views.\n */\n views: PropTypes.arrayOf(PropTypes.oneOf(['hours', 'minutes', 'seconds']).isRequired)\n};\nexport { DesktopTimePicker };","'use client';\n\nimport _objectWithoutPropertiesLoose from \"@babel/runtime/helpers/esm/objectWithoutPropertiesLoose\";\nconst _excluded = [\"slots\", \"slotProps\"];\nimport * as React from 'react';\nimport PropTypes from 'prop-types';\nimport { useThemeProps } from '@mui/material/styles';\nimport refType from '@mui/utils/refType';\nimport { useTimeField } from \"./useTimeField.mjs\";\nimport { PickerFieldUI, PickerFieldUIContextProvider, useFieldTextFieldProps } from \"../internals/components/PickerFieldUI.mjs\";\nimport { ClockIcon } from \"../icons/index.mjs\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\n/**\n * Demos:\n *\n * - [TimeField](http://mui.com/x/react-date-pickers/time-field/)\n * - [Fields](https://mui.com/x/react-date-pickers/fields/)\n *\n * API:\n *\n * - [TimeField API](https://mui.com/x/api/date-pickers/time-field/)\n */\nconst TimeField = /*#__PURE__*/React.forwardRef(function TimeField(inProps, inRef) {\n const themeProps = useThemeProps({\n props: inProps,\n name: 'MuiTimeField'\n });\n const {\n slots,\n slotProps\n } = themeProps,\n other = _objectWithoutPropertiesLoose(themeProps, _excluded);\n const textFieldProps = useFieldTextFieldProps({\n slotProps,\n ref: inRef,\n externalForwardedProps: other\n });\n const fieldResponse = useTimeField(textFieldProps);\n return /*#__PURE__*/_jsx(PickerFieldUIContextProvider, {\n slots: slots,\n slotProps: slotProps,\n inputRef: other.inputRef,\n children: /*#__PURE__*/_jsx(PickerFieldUI, {\n fieldResponse: fieldResponse,\n defaultOpenPickerIcon: ClockIcon\n })\n });\n});\nif (process.env.NODE_ENV !== \"production\") TimeField.displayName = \"TimeField\";\nprocess.env.NODE_ENV !== \"production\" ? TimeField.propTypes = {\n // ----------------------------- Warning --------------------------------\n // | These PropTypes are generated from the TypeScript type definitions |\n // | To update them edit the TypeScript types and run \"pnpm proptypes\" |\n // ----------------------------------------------------------------------\n /**\n * 12h/24h view for hour selection clock.\n * @default adapter.is12HourCycleInCurrentLocale()\n */\n ampm: PropTypes.bool,\n /**\n * Is `true` if the current values equals the empty value.\n * For a single item value, it means that `value === null`\n * For a range value, it means that `value === [null, null]`\n */\n areAllSectionsEmpty: PropTypes.bool,\n /**\n * If `true`, the `input` element is focused during the first mount.\n * @default false\n */\n autoFocus: PropTypes.bool,\n className: PropTypes.string,\n /**\n * If `true`, a clear button will be shown in the field allowing value clearing.\n * @default false\n */\n clearable: PropTypes.bool,\n /**\n * The position at which the clear button is placed.\n * If the field is not clearable, the button is not rendered.\n * @default 'end'\n */\n clearButtonPosition: PropTypes.oneOf(['end', 'start']),\n /**\n * The color of the component.\n * It supports both default and custom theme colors, which can be added as shown in the\n * [palette customization guide](https://mui.com/material-ui/customization/palette/#custom-colors).\n * @default 'primary'\n */\n color: PropTypes.oneOf(['error', 'info', 'primary', 'secondary', 'success', 'warning']),\n component: PropTypes.elementType,\n /**\n * The default value. Use when the component is not controlled.\n */\n defaultValue: PropTypes.object,\n /**\n * If `true`, the component is disabled.\n * When disabled, the value cannot be changed and no interaction is possible.\n * @default false\n */\n disabled: PropTypes.bool,\n /**\n * If `true`, disable values after the current date for date components, time for time components and both for date time components.\n * @default false\n */\n disableFuture: PropTypes.bool,\n /**\n * Do not ignore date part when validating min/max time.\n * @default false\n */\n disableIgnoringDatePartForTimeValidation: PropTypes.bool,\n /**\n * If `true`, disable values before the current date for date components, time for time components and both for date time components.\n * @default false\n */\n disablePast: PropTypes.bool,\n /**\n * End `InputAdornment` for this component.\n */\n endAdornment: PropTypes.node,\n /**\n * If `true`, the `input` will indicate an error.\n * @default false\n */\n error: PropTypes.bool,\n /**\n * The ref object used to imperatively interact with the field.\n */\n fieldRef: PropTypes.oneOfType([PropTypes.func, PropTypes.object]),\n /**\n * If `true`, the component is displayed in focused state.\n */\n focused: PropTypes.bool,\n /**\n * Format of the date when rendered in the input(s).\n */\n format: PropTypes.string,\n /**\n * Density of the format when rendered in the input.\n * Setting `formatDensity` to `\"spacious\"` will add a space before and after each `/`, `-` and `.` character.\n * @default \"dense\"\n */\n formatDensity: PropTypes.oneOf(['dense', 'spacious']),\n /**\n * If `true`, the input will take up the full width of its container.\n * @default false\n */\n fullWidth: PropTypes.bool,\n /**\n * The helper text content.\n */\n helperText: PropTypes.node,\n /**\n * If `true`, the label is hidden.\n * This is used to increase density for a `FilledInput`.\n * Be sure to add `aria-label` to the `input` element.\n * @default false\n */\n hiddenLabel: PropTypes.bool,\n /**\n * The id of the `input` element.\n */\n id: PropTypes.string,\n /**\n * Pass a ref to the `input` element.\n */\n inputRef: refType,\n /**\n * The label content.\n */\n label: PropTypes.node,\n /**\n * If `dense` or `normal`, will adjust vertical spacing of this and contained components.\n * @default 'none'\n */\n margin: PropTypes.oneOf(['dense', 'none', 'normal']),\n /**\n * Maximal selectable time.\n * The date part of the object will be ignored unless `props.disableIgnoringDatePartForTimeValidation === true`.\n */\n maxTime: PropTypes.object,\n /**\n * Minimal selectable time.\n * The date part of the object will be ignored unless `props.disableIgnoringDatePartForTimeValidation === true`.\n */\n minTime: PropTypes.object,\n /**\n * Step over minutes.\n * @default 1\n */\n minutesStep: PropTypes.number,\n /**\n * Name attribute of the `input` element.\n */\n name: PropTypes.string,\n onBlur: PropTypes.func,\n /**\n * Callback fired when the value changes.\n * @template TValue The value type. It will be the same type as `value` or `null`. It can be in `[start, end]` format in case of range value.\n * @template TError The validation error type. It will be either `string` or a `null`. It can be in `[start, end]` format in case of range value.\n * @param {TValue} value The new value.\n * @param {FieldChangeHandlerContext<TError>} context The context containing the validation result of the current value.\n */\n onChange: PropTypes.func,\n /**\n * Callback fired when the clear button is clicked.\n */\n onClear: PropTypes.func,\n onClick: PropTypes.func,\n /**\n * Callback fired when the error associated with the current value changes.\n * When a validation error is detected, the `error` parameter contains a non-null value.\n * This can be used to render an appropriate form error.\n * @template TError The validation error type. It will be either `string` or a `null`. It can be in `[start, end]` format in case of range value.\n * @template TValue The value type. It will be the same type as `value` or `null`. It can be in `[start, end]` format in case of range value.\n * @param {TError} error The reason why the current value is not valid.\n * @param {TValue} value The value associated with the error.\n */\n onError: PropTypes.func,\n onFocus: PropTypes.func,\n onInput: PropTypes.func,\n onKeyDown: PropTypes.func,\n onPaste: PropTypes.func,\n /**\n * Callback fired when the selected sections change.\n * @param {FieldSelectedSections} newValue The new selected sections.\n */\n onSelectedSectionsChange: PropTypes.func,\n /**\n * The position at which the opening button is placed.\n * If there is no Picker to open, the button is not rendered\n * @default 'end'\n */\n openPickerButtonPosition: PropTypes.oneOf(['end', 'start']),\n /**\n * If `true`, the component is read-only.\n * When read-only, the value cannot be changed but the user can interact with the interface.\n * @default false\n */\n readOnly: PropTypes.bool,\n /**\n * The date used to generate a part of the new value that is not present in the format when both `value` and `defaultValue` are empty.\n * For example, on time fields it will be used to determine the date to set.\n * @default The closest valid date using the validation props, except callbacks such as `shouldDisableDate`. Value is rounded to the most granular section used.\n */\n referenceDate: PropTypes.object,\n /**\n * If `true`, the label will indicate that the `input` is required.\n * @default false\n */\n required: PropTypes.bool,\n /**\n * The currently selected sections.\n * This prop accepts four formats:\n * 1. If a number is provided, the section at this index will be selected.\n * 2. If a string of type `FieldSectionType` is provided, the first section with that name will be selected.\n * 3. If `\"all\"` is provided, all the sections will be selected.\n * 4. If `null` is provided, no section will be selected.\n * If not provided, the selected sections will be handled internally.\n */\n selectedSections: PropTypes.oneOfType([PropTypes.oneOf(['all', 'day', 'empty', 'hours', 'meridiem', 'minutes', 'month', 'seconds', 'weekDay', 'year']), PropTypes.number]),\n /**\n * Disable specific time.\n * @param {PickerValidDate} value The value to check.\n * @param {TimeView} view The clock type of the timeValue.\n * @returns {boolean} If `true` the time will be disabled.\n */\n shouldDisableTime: PropTypes.func,\n /**\n * If `true`, the format will respect the leading zeroes (for example on dayjs, the format `M/D/YYYY` will render `8/16/2018`)\n * If `false`, the format will always add leading zeroes (for example on dayjs, the format `M/D/YYYY` will render `08/16/2018`)\n *\n * Warning n°1: Luxon is not able to respect the leading zeroes when using macro tokens (for example \"DD\"), so `shouldRespectLeadingZeros={true}` might lead to inconsistencies when using `AdapterLuxon`.\n *\n * Warning n°2: When `shouldRespectLeadingZeros={true}`, the field will add an invisible character on the sections containing a single digit to make sure `onChange` is fired.\n * If you need to get the clean value from the input, you can remove this character using `input.value.replace(/\\u200e/g, '')`.\n *\n * Warning n°3: When used in strict mode, dayjs and moment require to respect the leading zeros.\n * This mean that when using `shouldRespectLeadingZeros={false}`, if you retrieve the value directly from the input (not listening to `onChange`) and your format contains tokens without leading zeros, the value will not be parsed by your library.\n *\n * @default false\n */\n shouldRespectLeadingZeros: PropTypes.bool,\n /**\n * The size of the component.\n * @default 'medium'\n */\n size: PropTypes.oneOf(['medium', 'small']),\n /**\n * The props used for each component slot.\n * @default {}\n */\n slotProps: PropTypes.object,\n /**\n * Overridable component slots.\n * @default {}\n */\n slots: PropTypes.object,\n /**\n * Start `InputAdornment` for this component.\n */\n startAdornment: PropTypes.node,\n style: PropTypes.object,\n /**\n * The system prop that allows defining system overrides as well as additional CSS styles.\n */\n sx: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.func, PropTypes.object, PropTypes.bool])), PropTypes.func, PropTypes.object]),\n /**\n * Choose which timezone to use for the value.\n * Example: \"default\", \"system\", \"UTC\", \"America/New_York\".\n * If you pass values from other timezones to some props, they will be converted to this timezone before being used.\n * @see See the {@link https://mui.com/x/react-date-pickers/timezone/ timezones documentation} for more details.\n * @default The timezone of the `value` or `defaultValue` prop is defined, 'default' otherwise.\n */\n timezone: PropTypes.string,\n /**\n * The selected value.\n * Used when the component is controlled.\n */\n value: PropTypes.object,\n /**\n * The variant to use.\n * @default 'outlined'\n */\n variant: PropTypes.oneOf(['filled', 'outlined', 'standard'])\n} : void 0;\nexport { TimeField };","'use client';\n\nimport { useField } from \"../internals/hooks/useField/index.mjs\";\nimport { useTimeManager } from \"../managers/index.mjs\";\nexport const useTimeField = props => {\n const manager = useTimeManager(props);\n return useField({\n manager,\n props\n });\n};","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport * as React from 'react';\nimport { useThemeProps } from '@mui/material/styles';\nimport { TimePickerToolbar } from \"./TimePickerToolbar.mjs\";\nimport { applyDefaultViewProps } from \"../internals/utils/views.mjs\";\nimport { useApplyDefaultValuesToTimeValidationProps } from \"../managers/useTimeManager.mjs\";\nimport { usePickerAdapter } from \"../hooks/usePickerAdapter.mjs\";\nexport function useTimePickerDefaultizedProps(props, name) {\n const adapter = usePickerAdapter();\n const themeProps = useThemeProps({\n props,\n name\n });\n const validationProps = useApplyDefaultValuesToTimeValidationProps(themeProps);\n const ampm = themeProps.ampm ?? adapter.is12HourCycleInCurrentLocale();\n const localeText = React.useMemo(() => {\n if (themeProps.localeText?.toolbarTitle == null) {\n return themeProps.localeText;\n }\n return _extends({}, themeProps.localeText, {\n timePickerToolbarTitle: themeProps.localeText.toolbarTitle\n });\n }, [themeProps.localeText]);\n return _extends({}, themeProps, validationProps, {\n ampm,\n localeText\n }, applyDefaultViewProps({\n views: themeProps.views,\n openTo: themeProps.openTo,\n defaultViews: ['hours', 'minutes'],\n defaultOpenTo: 'hours'\n }), {\n slots: _extends({\n toolbar: TimePickerToolbar\n }, themeProps.slots),\n slotProps: _extends({}, themeProps.slotProps, {\n toolbar: _extends({\n ampm,\n ampmInClock: themeProps.ampmInClock\n }, themeProps.slotProps?.toolbar)\n })\n });\n}","'use client';\n\nimport _extends from \"@babel/runtime/helpers/esm/extends\";\nimport _objectWithoutPropertiesLoose from \"@babel/runtime/helpers/esm/objectWithoutPropertiesLoose\";\nconst _excluded = [\"ampm\", \"ampmInClock\", \"className\", \"classes\"];\nimport clsx from 'clsx';\nimport PropTypes from 'prop-types';\nimport { styled, useThemeProps } from '@mui/material/styles';\nimport composeClasses from '@mui/utils/composeClasses';\nimport { PickersToolbarText } from \"../internals/components/PickersToolbarText.mjs\";\nimport { PickersToolbarButton } from \"../internals/components/PickersToolbarButton.mjs\";\nimport { PickersToolbar } from \"../internals/components/PickersToolbar.mjs\";\nimport { arrayIncludes } from \"../internals/utils/utils.mjs\";\nimport { usePickerAdapter, usePickerContext, usePickerTranslations } from \"../hooks/index.mjs\";\nimport { useMeridiemMode } from \"../internals/hooks/date-helpers-hooks.mjs\";\nimport { getTimePickerToolbarUtilityClass, timePickerToolbarClasses } from \"./timePickerToolbarClasses.mjs\";\nimport { formatMeridiem } from \"../internals/utils/date-utils.mjs\";\nimport { useToolbarOwnerState } from \"../internals/hooks/useToolbarOwnerState.mjs\";\nimport { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nconst useUtilityClasses = (classes, ownerState) => {\n const {\n pickerOrientation,\n toolbarDirection\n } = ownerState;\n const slots = {\n root: ['root'],\n separator: ['separator'],\n hourMinuteLabel: ['hourMinuteLabel', pickerOrientation === 'landscape' && 'hourMinuteLabelLandscape', toolbarDirection === 'rtl' && 'hourMinuteLabelReverse'],\n ampmSelection: ['ampmSelection', pickerOrientation === 'landscape' && 'ampmLandscape'],\n ampmLabel: ['ampmLabel']\n };\n return composeClasses(slots, getTimePickerToolbarUtilityClass, classes);\n};\nconst TimePickerToolbarRoot = styled(PickersToolbar, {\n name: 'MuiTimePickerToolbar',\n slot: 'Root'\n})({});\nconst TimePickerToolbarSeparator = styled(PickersToolbarText, {\n name: 'MuiTimePickerToolbar',\n slot: 'Separator'\n})({\n outline: 0,\n margin: '0 4px 0 2px',\n cursor: 'default'\n});\nconst TimePickerToolbarHourMinuteLabel = styled('div', {\n name: 'MuiTimePickerToolbar',\n slot: 'HourMinuteLabel',\n overridesResolver: (props, styles) => [{\n [`&.${timePickerToolbarClasses.hourMinuteLabelLandscape}`]: styles.hourMinuteLabelLandscape,\n [`&.${timePickerToolbarClasses.hourMinuteLabelReverse}`]: styles.hourMinuteLabelReverse\n }, styles.hourMinuteLabel]\n})({\n display: 'flex',\n justifyContent: 'flex-end',\n alignItems: 'flex-end',\n variants: [{\n props: {\n toolbarDirection: 'rtl'\n },\n style: {\n flexDirection: 'row-reverse'\n }\n }, {\n props: {\n pickerOrientation: 'landscape'\n },\n style: {\n marginTop: 'auto'\n }\n }]\n});\nconst TimePickerToolbarAmPmSelection = styled('div', {\n name: 'MuiTimePickerToolbar',\n slot: 'AmPmSelection',\n overridesResolver: (props, styles) => [{\n [`.${timePickerToolbarClasses.ampmLabel}`]: styles.ampmLabel\n }, {\n [`&.${timePickerToolbarClasses.ampmLandscape}`]: styles.ampmLandscape\n }, styles.ampmSelection]\n})({\n display: 'flex',\n flexDirection: 'column',\n marginRight: 'auto',\n marginLeft: 12,\n [`& .${timePickerToolbarClasses.ampmLabel}`]: {\n fontSize: 17\n },\n variants: [{\n props: {\n pickerOrientation: 'landscape'\n },\n style: {\n margin: '4px 0 auto',\n flexDirection: 'row',\n justifyContent: 'space-around',\n flexBasis: '100%'\n }\n }]\n});\n\n/**\n * Demos:\n *\n * - [TimePicker](https://mui.com/x/react-date-pickers/time-picker/)\n * - [Custom components](https://mui.com/x/react-date-pickers/custom-components/)\n *\n * API:\n *\n * - [TimePickerToolbar API](https://mui.com/x/api/date-pickers/time-picker-toolbar/)\n */\nfunction TimePickerToolbar(inProps) {\n const props = useThemeProps({\n props: inProps,\n name: 'MuiTimePickerToolbar'\n });\n const {\n ampm,\n ampmInClock,\n className,\n classes: classesProp\n } = props,\n other = _objectWithoutPropertiesLoose(props, _excluded);\n const adapter = usePickerAdapter();\n const translations = usePickerTranslations();\n const ownerState = useToolbarOwnerState();\n const classes = useUtilityClasses(classesProp, ownerState);\n const {\n value,\n setValue,\n disabled,\n readOnly,\n view,\n setView,\n views\n } = usePickerContext();\n const showAmPmControl = Boolean(ampm && !ampmInClock && views.includes('hours'));\n const {\n meridiemMode,\n handleMeridiemChange\n } = useMeridiemMode(value, ampm, newValue => setValue(newValue, {\n changeImportance: 'set',\n source: 'view'\n }));\n const formatSection = format => {\n if (!adapter.isValid(value)) {\n return '--';\n }\n return adapter.format(value, format);\n };\n const separator = /*#__PURE__*/_jsx(TimePickerToolbarSeparator, {\n tabIndex: -1,\n value: \":\",\n variant: \"h3\",\n selected: false,\n className: classes.separator\n });\n return /*#__PURE__*/_jsxs(TimePickerToolbarRoot, _extends({\n landscapeDirection: \"row\",\n toolbarTitle: translations.timePickerToolbarTitle,\n ownerState: ownerState,\n className: clsx(classes.root, className)\n }, other, {\n children: [/*#__PURE__*/_jsxs(TimePickerToolbarHourMinuteLabel, {\n className: classes.hourMinuteLabel,\n ownerState: ownerState,\n children: [arrayIncludes(views, 'hours') && /*#__PURE__*/_jsx(PickersToolbarButton, {\n tabIndex: -1,\n variant: \"h3\",\n onClick: () => setView('hours'),\n selected: view === 'hours',\n value: formatSection(ampm ? 'hours12h' : 'hours24h')\n }), arrayIncludes(views, ['hours', 'minutes']) && separator, arrayIncludes(views, 'minutes') && /*#__PURE__*/_jsx(PickersToolbarButton, {\n tabIndex: -1,\n variant: \"h3\",\n onClick: () => setView('minutes'),\n selected: view === 'minutes',\n value: formatSection('minutes')\n }), arrayIncludes(views, ['minutes', 'seconds']) && separator, arrayIncludes(views, 'seconds') && /*#__PURE__*/_jsx(PickersToolbarButton, {\n variant: \"h3\",\n onClick: () => setView('seconds'),\n selected: view === 'seconds',\n value: formatSection('seconds')\n })]\n }), showAmPmControl && /*#__PURE__*/_jsxs(TimePickerToolbarAmPmSelection, {\n className: classes.ampmSelection,\n ownerState: ownerState,\n children: [/*#__PURE__*/_jsx(PickersToolbarButton, {\n disableRipple: true,\n variant: \"subtitle2\",\n selected: meridiemMode === 'am',\n typographyClassName: classes.ampmLabel,\n value: formatMeridiem(adapter, 'am'),\n onClick: readOnly ? undefined : () => handleMeridiemChange('am'),\n disabled: disabled\n }), /*#__PURE__*/_jsx(PickersToolbarButton, {\n disableRipple: true,\n variant: \"subtitle2\",\n selected: meridiemMode === 'pm',\n typographyClassName: classes.ampmLabel,\n value: formatMeridiem(adapter, 'pm'),\n onClick: readOnly ? undefined : () => handleMeridiemChange('pm'),\n disabled: disabled\n })]\n })]\n }));\n}\nprocess.env.NODE_ENV !== \"production\" ? TimePickerToolbar.propTypes = {\n // ----------------------------- Warning --------------------------------\n // | These PropTypes are generated from the TypeScript type definitions |\n // | To update them edit the TypeScript types and run \"pnpm proptypes\" |\n // ----------------------------------------------------------------------\n ampm: PropTypes.bool,\n ampmInClock: PropTypes.bool,\n /**\n * Override or extend the styles applied to the component.\n */\n classes: PropTypes.object,\n className: PropTypes.string,\n /**\n * If `true`, show the toolbar even in desktop mode.\n * @default `true` for Desktop, `false` for Mobile.\n */\n hidden: PropTypes.bool,\n /**\n * The system prop that allows defining system overrides as well as additional CSS styles.\n */\n sx: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.func, PropTypes.object, PropTypes.bool])), PropTypes.func, PropTypes.object]),\n titleId: PropTypes.string,\n /**\n * Toolbar date format.\n */\n toolbarFormat: PropTypes.string,\n /**\n * Toolbar value placeholder—it is displayed when the value is empty.\n * @default \"––\"\n */\n toolbarPlaceholder: PropTypes.node\n} : void 0;\nexport { TimePickerToolbar };","import generateUtilityClass from '@mui/utils/generateUtilityClass';\nimport generateUtilityClasses from '@mui/utils/generateUtilityClasses';\nexport function getTimePickerToolbarUtilityClass(slot) {\n return generateUtilityClass('MuiTimePickerToolbar', slot);\n}\nexport const timePickerToolbarClasses = generateUtilityClasses('MuiTimePickerToolbar', ['root', 'separator', 'hourMinuteLabel', 'hourMinuteLabelLandscape', 'hourMinuteLabelReverse', 'ampmSelection', 'ampmLandscape', 'ampmLabel']);","'use client';\n\nimport _extends from \"@babel/runtime/helpers/esm/extends\";\nimport * as React from 'react';\nimport PropTypes from 'prop-types';\nimport resolveComponentProps from '@mui/utils/resolveComponentProps';\nimport refType from '@mui/utils/refType';\nimport { singleItemValueManager } from \"../internals/utils/valueManagers.mjs\";\nimport { TimeField } from \"../TimeField/index.mjs\";\nimport { useTimePickerDefaultizedProps } from \"../TimePicker/shared.mjs\";\nimport { usePickerAdapter } from \"../hooks/usePickerAdapter.mjs\";\nimport { extractValidationProps, validateTime } from \"../validation/index.mjs\";\nimport { useMobilePicker } from \"../internals/hooks/useMobilePicker/index.mjs\";\nimport { renderTimeViewClock } from \"../timeViewRenderers/index.mjs\";\nimport { resolveTimeFormat } from \"../internals/utils/time-utils.mjs\";\n/**\n * Demos:\n *\n * - [TimePicker](https://mui.com/x/react-date-pickers/time-picker/)\n * - [Validation](https://mui.com/x/react-date-pickers/validation/)\n *\n * API:\n *\n * - [MobileTimePicker API](https://mui.com/x/api/date-pickers/mobile-time-picker/)\n */\nconst MobileTimePicker = /*#__PURE__*/React.forwardRef(function MobileTimePicker(inProps, ref) {\n const adapter = usePickerAdapter();\n\n // Props with the default values common to all time pickers\n const defaultizedProps = useTimePickerDefaultizedProps(inProps, 'MuiMobileTimePicker');\n const viewRenderers = _extends({\n hours: renderTimeViewClock,\n minutes: renderTimeViewClock,\n seconds: renderTimeViewClock\n }, defaultizedProps.viewRenderers);\n const ampmInClock = defaultizedProps.ampmInClock ?? false;\n\n // Props with the default values specific to the mobile variant\n const props = _extends({}, defaultizedProps, {\n ampmInClock,\n viewRenderers,\n format: resolveTimeFormat(adapter, defaultizedProps),\n slots: _extends({\n field: TimeField\n }, defaultizedProps.slots),\n slotProps: _extends({}, defaultizedProps.slotProps, {\n field: ownerState => _extends({}, resolveComponentProps(defaultizedProps.slotProps?.field, ownerState), extractValidationProps(defaultizedProps)),\n toolbar: _extends({\n hidden: false,\n ampmInClock\n }, defaultizedProps.slotProps?.toolbar)\n })\n });\n const {\n renderPicker\n } = useMobilePicker({\n ref,\n props,\n valueManager: singleItemValueManager,\n valueType: 'time',\n validator: validateTime,\n steps: null\n });\n return renderPicker();\n});\nif (process.env.NODE_ENV !== \"production\") MobileTimePicker.displayName = \"MobileTimePicker\";\nMobileTimePicker.propTypes = {\n // ----------------------------- Warning --------------------------------\n // | These PropTypes are generated from the TypeScript type definitions |\n // | To update them edit the TypeScript types and run \"pnpm proptypes\" |\n // ----------------------------------------------------------------------\n /**\n * 12h/24h view for hour selection clock.\n * @default adapter.is12HourCycleInCurrentLocale()\n */\n ampm: PropTypes.bool,\n /**\n * Display ampm controls under the clock (instead of in the toolbar).\n * @default true on desktop, false on mobile\n */\n ampmInClock: PropTypes.bool,\n /**\n * If `true`, the main element is focused during the first mount.\n * This main element is:\n * - the element chosen by the visible view if any (i.e: the selected day on the `day` view).\n * - the `input` element if there is a field rendered.\n */\n autoFocus: PropTypes.bool,\n className: PropTypes.string,\n /**\n * If `true`, the Picker will close after submitting the full date.\n * @default false\n */\n closeOnSelect: PropTypes.bool,\n /**\n * The default value.\n * Used when the component is not controlled.\n */\n defaultValue: PropTypes.object,\n /**\n * If `true`, the component is disabled.\n * When disabled, the value cannot be changed and no interaction is possible.\n * @default false\n */\n disabled: PropTypes.bool,\n /**\n * If `true`, disable values after the current date for date components, time for time components and both for date time components.\n * @default false\n */\n disableFuture: PropTypes.bool,\n /**\n * Do not ignore date part when validating min/max time.\n * @default false\n */\n disableIgnoringDatePartForTimeValidation: PropTypes.bool,\n /**\n * If `true`, the button to open the Picker will not be rendered (it will only render the field).\n * @deprecated Use the [field component](https://mui.com/x/react-date-pickers/fields/) instead.\n * @default false\n */\n disableOpenPicker: PropTypes.bool,\n /**\n * If `true`, disable values before the current date for date components, time for time components and both for date time components.\n * @default false\n */\n disablePast: PropTypes.bool,\n /**\n * Format of the date when rendered in the input(s).\n * Defaults to localized format based on the used `views`.\n */\n format: PropTypes.string,\n /**\n * Density of the format when rendered in the input.\n * Setting `formatDensity` to `\"spacious\"` will add a space before and after each `/`, `-` and `.` character.\n * @default \"dense\"\n */\n formatDensity: PropTypes.oneOf(['dense', 'spacious']),\n /**\n * Pass a ref to the `input` element.\n */\n inputRef: refType,\n /**\n * If `true`, keep the picker open when the value is edited from the field.\n * Useful to prevent the popper/dialog from closing while typing in the input.\n * This only affects changes with `source = \"field\"` and does not alter view interactions.\n * @default false\n */\n keepOpenDuringFieldFocus: PropTypes.bool,\n /**\n * The label content.\n */\n label: PropTypes.node,\n /**\n * Locale for components texts.\n * Allows overriding texts coming from `LocalizationProvider` and `theme`.\n */\n localeText: PropTypes.object,\n /**\n * Maximal selectable time.\n * The date part of the object will be ignored unless `props.disableIgnoringDatePartForTimeValidation === true`.\n */\n maxTime: PropTypes.object,\n /**\n * Minimal selectable time.\n * The date part of the object will be ignored unless `props.disableIgnoringDatePartForTimeValidation === true`.\n */\n minTime: PropTypes.object,\n /**\n * Step over minutes.\n * @default 1\n */\n minutesStep: PropTypes.number,\n /**\n * Name attribute used by the `input` element in the Field.\n */\n name: PropTypes.string,\n /**\n * Callback fired when the value is accepted.\n * @template TValue The value type. It will be the same type as `value` or `null`. It can be in `[start, end]` format in case of range value.\n * @template TError The validation error type. It will be either `string` or a `null`. It can be in `[start, end]` format in case of range value.\n * @param {TValue} value The value that was just accepted.\n * @param {FieldChangeHandlerContext<TError>} context Context about this acceptance:\n * - `validationError`: validation result of the current value\n * - `source`: source of the acceptance. One of 'field' | 'view' | 'unknown'\n * - `shortcut` (optional): the shortcut metadata if the value was accepted via a shortcut selection\n */\n onAccept: PropTypes.func,\n /**\n * Callback fired when the value changes.\n * @template TValue The value type. It will be the same type as `value` or `null`. It can be in `[start, end]` format in case of range value.\n * @template TError The validation error type. It will be either `string` or a `null`. It can be in `[start, end]` format in case of range value.\n * @param {TValue} value The new value.\n * @param {FieldChangeHandlerContext<TError>} context Context about this change:\n * - `validationError`: validation result of the current value\n * - `source`: source of the change. One of 'field' | 'view' | 'unknown'\n * - `shortcut` (optional): the shortcut metadata if the change was triggered by a shortcut selection\n */\n onChange: PropTypes.func,\n /**\n * Callback fired when the popup requests to be closed.\n * Use in controlled mode (see `open`).\n */\n onClose: PropTypes.func,\n /**\n * Callback fired when the error associated with the current value changes.\n * When a validation error is detected, the `error` parameter contains a non-null value.\n * This can be used to render an appropriate form error.\n * @template TError The validation error type. It will be either `string` or a `null`. It can be in `[start, end]` format in case of range value.\n * @template TValue The value type. It will be the same type as `value` or `null`. It can be in `[start, end]` format in case of range value.\n * @param {TError} error The reason why the current value is not valid.\n * @param {TValue} value The value associated with the error.\n */\n onError: PropTypes.func,\n /**\n * Callback fired when the popup requests to be opened.\n * Use in controlled mode (see `open`).\n */\n onOpen: PropTypes.func,\n /**\n * Callback fired when the selected sections change.\n * @param {FieldSelectedSections} newValue The new selected sections.\n */\n onSelectedSectionsChange: PropTypes.func,\n /**\n * Callback fired on view change.\n * @template TView Type of the view. It will vary based on the Picker type and the `views` it uses.\n * @param {TView} view The new view.\n */\n onViewChange: PropTypes.func,\n /**\n * Control the popup or dialog open state.\n * @default false\n */\n open: PropTypes.bool,\n /**\n * The default visible view.\n * Used when the component view is not controlled.\n * Must be a valid option from `views` list.\n */\n openTo: PropTypes.oneOf(['hours', 'minutes', 'seconds']),\n /**\n * Force rendering in particular orientation.\n */\n orientation: PropTypes.oneOf(['landscape', 'portrait']),\n /**\n * If `true`, the component is read-only.\n * When read-only, the value cannot be changed but the user can interact with the interface.\n * @default false\n */\n readOnly: PropTypes.bool,\n /**\n * If `true`, disable heavy animations.\n * @default `@media(prefers-reduced-motion: reduce)` || `navigator.userAgent` matches Android <10 or iOS <13\n */\n reduceAnimations: PropTypes.bool,\n /**\n * The date used to generate the new value when both `value` and `defaultValue` are empty.\n * @default The closest valid date-time using the validation props, except callbacks like `shouldDisable<...>`.\n */\n referenceDate: PropTypes.object,\n /**\n * The currently selected sections.\n * This prop accepts four formats:\n * 1. If a number is provided, the section at this index will be selected.\n * 2. If a string of type `FieldSectionType` is provided, the first section with that name will be selected.\n * 3. If `\"all\"` is provided, all the sections will be selected.\n * 4. If `null` is provided, no section will be selected.\n * If not provided, the selected sections will be handled internally.\n */\n selectedSections: PropTypes.oneOfType([PropTypes.oneOf(['all', 'day', 'empty', 'hours', 'meridiem', 'minutes', 'month', 'seconds', 'weekDay', 'year']), PropTypes.number]),\n /**\n * Disable specific time.\n * @param {PickerValidDate} value The value to check.\n * @param {TimeView} view The clock type of the timeValue.\n * @returns {boolean} If `true` the time will be disabled.\n */\n shouldDisableTime: PropTypes.func,\n /**\n * The props used for each component slot.\n * @default {}\n */\n slotProps: PropTypes.object,\n /**\n * Overridable component slots.\n * @default {}\n */\n slots: PropTypes.object,\n /**\n * The system prop that allows defining system overrides as well as additional CSS styles.\n */\n sx: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.func, PropTypes.object, PropTypes.bool])), PropTypes.func, PropTypes.object]),\n /**\n * Choose which timezone to use for the value.\n * Example: \"default\", \"system\", \"UTC\", \"America/New_York\".\n * If you pass values from other timezones to some props, they will be converted to this timezone before being used.\n * @see See the {@link https://mui.com/x/react-date-pickers/timezone/ timezones documentation} for more details.\n * @default The timezone of the `value` or `defaultValue` prop is defined, 'default' otherwise.\n */\n timezone: PropTypes.string,\n /**\n * The selected value.\n * Used when the component is controlled.\n */\n value: PropTypes.object,\n /**\n * The visible view.\n * Used when the component view is controlled.\n * Must be a valid option from `views` list.\n */\n view: PropTypes.oneOf(['hours', 'minutes', 'seconds']),\n /**\n * Define custom view renderers for each section.\n * If `null`, the section will only have field editing.\n * If `undefined`, internally defined view will be used.\n */\n viewRenderers: PropTypes.shape({\n hours: PropTypes.func,\n minutes: PropTypes.func,\n seconds: PropTypes.func\n }),\n /**\n * Available views.\n */\n views: PropTypes.arrayOf(PropTypes.oneOf(['hours', 'minutes', 'seconds']).isRequired)\n};\nexport { MobileTimePicker };","import { useMemo } from 'react';\nimport { type Row } from '@tanstack/react-table';\nimport {\n type DropdownOption,\n type MRT_Column,\n type MRT_ColumnDef,\n type MRT_ColumnOrderState,\n type MRT_DefinedColumnDef,\n type MRT_DefinedTableOptions,\n type MRT_FilterOption,\n type MRT_Header,\n type MRT_RowData,\n type MRT_TableInstance,\n} from '../types';\n\nexport const getColumnId = <TData extends MRT_RowData>(\n columnDef: MRT_ColumnDef<TData>,\n): string =>\n columnDef.id ?? columnDef.accessorKey?.toString?.() ?? columnDef.header;\n\nexport const getAllLeafColumnDefs = <TData extends MRT_RowData>(\n columns: MRT_ColumnDef<TData>[],\n): MRT_ColumnDef<TData>[] => {\n const allLeafColumnDefs: MRT_ColumnDef<TData>[] = [];\n const getLeafColumns = (cols: MRT_ColumnDef<TData>[]) => {\n cols.forEach((col) => {\n if (col.columns) {\n getLeafColumns(col.columns);\n } else {\n allLeafColumnDefs.push(col);\n }\n });\n };\n getLeafColumns(columns);\n return allLeafColumnDefs;\n};\n\nexport const prepareColumns = <TData extends MRT_RowData>({\n columnDefs,\n tableOptions,\n}: {\n columnDefs: MRT_ColumnDef<TData>[];\n tableOptions: MRT_DefinedTableOptions<TData>;\n}): MRT_DefinedColumnDef<TData>[] => {\n const {\n aggregationFns = {},\n defaultDisplayColumn,\n filterFns = {},\n sortingFns = {},\n state: { columnFilterFns = {} } = {},\n } = tableOptions;\n return columnDefs.map((columnDef) => {\n //assign columnId\n if (!columnDef.id) columnDef.id = getColumnId(columnDef);\n //assign columnDefType\n if (!columnDef.columnDefType) columnDef.columnDefType = 'data';\n if (columnDef.columns?.length) {\n columnDef.columnDefType = 'group';\n //recursively prepare columns if this is a group column\n columnDef.columns = prepareColumns({\n columnDefs: columnDef.columns,\n tableOptions,\n });\n } else if (columnDef.columnDefType === 'data') {\n //assign aggregationFns if multiple aggregationFns are provided\n if (Array.isArray(columnDef.aggregationFn)) {\n const aggFns = columnDef.aggregationFn as string[];\n columnDef.aggregationFn = (\n columnId: string,\n leafRows: Row<TData>[],\n childRows: Row<TData>[],\n ) =>\n aggFns.map((fn) =>\n aggregationFns[fn]?.(columnId, leafRows, childRows),\n );\n }\n\n //assign filterFns\n if (Object.keys(filterFns).includes(columnFilterFns[columnDef.id])) {\n columnDef.filterFn =\n filterFns[columnFilterFns[columnDef.id]] ?? filterFns.fuzzy;\n (columnDef as MRT_DefinedColumnDef<TData>)._filterFn =\n columnFilterFns[columnDef.id];\n }\n\n //assign sortingFns\n if (Object.keys(sortingFns).includes(columnDef.sortingFn as string)) {\n // @ts-expect-error\n columnDef.sortingFn = sortingFns[columnDef.sortingFn];\n }\n } else if (columnDef.columnDefType === 'display') {\n columnDef = {\n ...(defaultDisplayColumn as MRT_ColumnDef<TData>),\n ...columnDef,\n };\n }\n return columnDef;\n }) as MRT_DefinedColumnDef<TData>[];\n};\n\nexport const reorderColumn = <TData extends MRT_RowData>(\n draggedColumn: MRT_Column<TData>,\n targetColumn: MRT_Column<TData>,\n columnOrder: MRT_ColumnOrderState,\n): MRT_ColumnOrderState => {\n if (draggedColumn.getCanPin()) {\n draggedColumn.pin(targetColumn.getIsPinned());\n }\n const newColumnOrder = [...columnOrder];\n newColumnOrder.splice(\n newColumnOrder.indexOf(targetColumn.id),\n 0,\n newColumnOrder.splice(newColumnOrder.indexOf(draggedColumn.id), 1)[0],\n );\n return newColumnOrder;\n};\n\nexport const getDefaultColumnFilterFn = <TData extends MRT_RowData>(\n columnDef: MRT_ColumnDef<TData>,\n): MRT_FilterOption => {\n const { filterVariant } = columnDef;\n if (filterVariant === 'multi-select') return 'arrIncludesSome';\n if (filterVariant?.includes('range')) return 'betweenInclusive';\n if (filterVariant === 'select' || filterVariant === 'checkbox')\n return 'equals';\n return 'fuzzy';\n};\n\nexport const getColumnFilterInfo = <TData extends MRT_RowData>({\n header,\n table,\n}: {\n header: MRT_Header<TData>;\n table: MRT_TableInstance<TData>;\n}) => {\n const {\n options: { columnFilterModeOptions },\n } = table;\n const { column } = header;\n const { columnDef } = column;\n const { filterVariant } = columnDef;\n\n const isDateFilter = !!(\n filterVariant?.startsWith('date') || filterVariant?.startsWith('time')\n );\n const isAutocompleteFilter = filterVariant === 'autocomplete';\n const isRangeFilter =\n filterVariant?.includes('range') ||\n ['between', 'betweenInclusive', 'inNumberRange'].includes(\n columnDef._filterFn,\n );\n const isSelectFilter = filterVariant === 'select';\n const isMultiSelectFilter = filterVariant === 'multi-select';\n const isTextboxFilter =\n ['autocomplete', 'text'].includes(filterVariant!) ||\n (!isSelectFilter && !isMultiSelectFilter);\n const currentFilterOption = columnDef._filterFn;\n\n const allowedColumnFilterOptions =\n columnDef?.columnFilterModeOptions ?? columnFilterModeOptions;\n\n const facetedUniqueValues = column.getFacetedUniqueValues();\n\n return {\n allowedColumnFilterOptions,\n currentFilterOption,\n facetedUniqueValues,\n isAutocompleteFilter,\n isDateFilter,\n isMultiSelectFilter,\n isRangeFilter,\n isSelectFilter,\n isTextboxFilter,\n } as const;\n};\n\nexport const useDropdownOptions = <TData extends MRT_RowData>({\n header,\n table,\n}: {\n header: MRT_Header<TData>;\n table: MRT_TableInstance<TData>;\n}): DropdownOption[] | undefined => {\n const { column } = header;\n const { columnDef } = column;\n const {\n facetedUniqueValues,\n isAutocompleteFilter,\n isMultiSelectFilter,\n isSelectFilter,\n } = getColumnFilterInfo({ header, table });\n\n return useMemo<DropdownOption[] | undefined>(\n () =>\n columnDef.filterSelectOptions ??\n ((isSelectFilter || isMultiSelectFilter || isAutocompleteFilter) &&\n facetedUniqueValues\n ? Array.from(facetedUniqueValues.keys())\n .filter((value) => value !== null && value !== undefined)\n .sort((a, b) => a.localeCompare(b))\n : undefined),\n [\n columnDef.filterSelectOptions,\n facetedUniqueValues,\n isMultiSelectFilter,\n isSelectFilter,\n ],\n );\n};\n","import { type ReactNode, type JSX } from 'react';\nimport {\n createRow as _createRow,\n flexRender as _flexRender,\n type Renderable,\n} from '@tanstack/react-table';\nimport {\n type MRT_ColumnHelper,\n type MRT_DisplayColumnDef,\n type MRT_GroupColumnDef,\n type MRT_Row,\n type MRT_RowData,\n type MRT_TableInstance,\n} from '../types';\nimport { getAllLeafColumnDefs, getColumnId } from './column.utils';\n\nexport const flexRender = _flexRender as (\n Comp: Renderable<any>,\n props: any,\n) => JSX.Element | ReactNode;\n\nexport function createMRTColumnHelper<\n TData extends MRT_RowData,\n>(): MRT_ColumnHelper<TData> {\n return {\n accessor: (accessor, column) => {\n return typeof accessor === 'function'\n ? ({\n ...column,\n accessorFn: accessor,\n } as any)\n : {\n ...column,\n accessorKey: accessor,\n };\n },\n display: (column) => column as MRT_DisplayColumnDef<TData>,\n group: (column) => column as MRT_GroupColumnDef<TData>,\n };\n}\n\nexport const createRow = <TData extends MRT_RowData>(\n table: MRT_TableInstance<TData>,\n originalRow?: TData,\n rowIndex = -1,\n depth = 0,\n subRows?: MRT_Row<TData>[],\n parentId?: string,\n): MRT_Row<TData> =>\n _createRow(\n table as any,\n 'mrt-row-create',\n originalRow ??\n Object.assign(\n {},\n ...getAllLeafColumnDefs(table.options.columns).map((col) => ({\n [getColumnId(col)]: '',\n })),\n ),\n rowIndex,\n depth,\n subRows as any,\n parentId,\n ) as MRT_Row<TData>;\n","import { type RankingInfo, compareItems } from '@tanstack/match-sorter-utils';\nimport { type Row, sortingFns } from '@tanstack/react-table';\nimport { type MRT_Row, type MRT_RowData } from '../types';\n\nconst fuzzy = <TData extends MRT_RowData>(\n rowA: Row<TData>,\n rowB: Row<TData>,\n columnId: string,\n) => {\n let dir = 0;\n if (rowA.columnFiltersMeta[columnId]) {\n dir = compareItems(\n rowA.columnFiltersMeta[columnId] as RankingInfo,\n rowB.columnFiltersMeta[columnId] as RankingInfo,\n );\n }\n // Provide a fallback for when the item ranks are equal\n return dir === 0\n ? sortingFns.alphanumeric(rowA as Row<any>, rowB as Row<any>, columnId)\n : dir;\n};\n\nexport const MRT_SortingFns = {\n ...sortingFns,\n fuzzy,\n};\n\nexport const rankGlobalFuzzy = <TData extends MRT_RowData>(\n rowA: MRT_Row<TData>,\n rowB: MRT_Row<TData>,\n) =>\n Math.max(...Object.values(rowB.columnFiltersMeta).map((v: any) => v.rank)) -\n Math.max(...Object.values(rowA.columnFiltersMeta).map((v: any) => v.rank));\n","import { type DropdownOption } from '../types';\n\nexport const parseFromValuesOrFunc = <T, U>(\n fn: ((arg: U) => T) | T | undefined,\n arg: U,\n): T | undefined => (fn instanceof Function ? fn(arg) : fn);\n\nexport const getValueAndLabel = (\n option?: DropdownOption | null,\n): { label: string; value: string } => {\n let label: string = '';\n let value: string = '';\n if (option) {\n if (typeof option !== 'object') {\n label = option;\n value = option;\n } else {\n label = option.label ?? option.value;\n value = option.value ?? label;\n }\n }\n return { label, value };\n};\n","import { type ChangeEvent, type MouseEvent } from 'react';\nimport { rankGlobalFuzzy } from '../fns/sortingFns';\nimport {\n type MRT_Row,\n type MRT_RowData,\n type MRT_TableInstance,\n} from '../types';\nimport { parseFromValuesOrFunc } from './utils';\n\nexport const getMRT_Rows = <TData extends MRT_RowData>(\n table: MRT_TableInstance<TData>,\n all?: boolean,\n): MRT_Row<TData>[] => {\n const {\n getCenterRows,\n getPrePaginationRowModel,\n getRowModel,\n getState,\n getTopRows,\n options: {\n createDisplayMode,\n enablePagination,\n enableRowPinning,\n manualPagination,\n positionCreatingRow,\n rowPinningDisplayMode,\n },\n } = table;\n const { creatingRow, pagination } = getState();\n\n const isRankingRows = getIsRankingRows(table);\n\n let rows: MRT_Row<TData>[] = [];\n if (!isRankingRows) {\n rows =\n !enableRowPinning || rowPinningDisplayMode?.includes('sticky')\n ? all\n ? getPrePaginationRowModel().rows\n : getRowModel().rows\n : getCenterRows();\n } else {\n // fuzzy ranking adjustments\n rows = getPrePaginationRowModel().rows.sort((a, b) =>\n rankGlobalFuzzy(a, b),\n );\n if (enablePagination && !manualPagination && !all) {\n const start = pagination.pageIndex * pagination.pageSize;\n rows = rows.slice(start, start + pagination.pageSize);\n }\n if (enableRowPinning && !rowPinningDisplayMode?.includes('sticky')) {\n // \"re-center-ize\" the rows (no top or bottom pinned rows unless sticky)\n rows = rows.filter((row) => !row.getIsPinned());\n }\n }\n // row pinning adjustments\n if (enableRowPinning && rowPinningDisplayMode?.includes('sticky')) {\n const centerPinnedRowIds = rows\n .filter((row) => row.getIsPinned())\n .map((r) => r.id);\n\n rows = [\n ...getTopRows().filter((row) => !centerPinnedRowIds.includes(row.id)),\n ...rows,\n ];\n }\n // blank inserted creating row adjustments\n if (\n positionCreatingRow !== undefined &&\n creatingRow &&\n createDisplayMode === 'row'\n ) {\n const creatingRowIndex = !isNaN(+positionCreatingRow)\n ? +positionCreatingRow\n : positionCreatingRow === 'top'\n ? 0\n : rows.length;\n rows = [\n ...rows.slice(0, creatingRowIndex),\n creatingRow,\n ...rows.slice(creatingRowIndex),\n ];\n }\n\n return rows;\n};\n\nexport const getCanRankRows = <TData extends MRT_RowData>(\n table: MRT_TableInstance<TData>,\n) => {\n const {\n getState,\n options: {\n enableGlobalFilterRankedResults,\n manualExpanding,\n manualFiltering,\n manualGrouping,\n manualSorting,\n },\n } = table;\n const { expanded, globalFilterFn } = getState();\n\n return (\n !manualExpanding &&\n !manualFiltering &&\n !manualGrouping &&\n !manualSorting &&\n enableGlobalFilterRankedResults &&\n globalFilterFn === 'fuzzy' &&\n expanded !== true &&\n !Object.values(expanded).some(Boolean)\n );\n};\n\nexport const getIsRankingRows = <TData extends MRT_RowData>(\n table: MRT_TableInstance<TData>,\n) => {\n const { globalFilter, sorting } = table.getState();\n\n return (\n getCanRankRows(table) &&\n globalFilter &&\n !Object.values(sorting).some(Boolean)\n );\n};\n\nexport const getIsRowSelected = <TData extends MRT_RowData>({\n row,\n table,\n}: {\n row: MRT_Row<TData>;\n table: MRT_TableInstance<TData>;\n}) => {\n const {\n options: { enableRowSelection },\n } = table;\n\n return (\n row.getIsSelected() ||\n (parseFromValuesOrFunc(enableRowSelection, row) &&\n row.getCanSelectSubRows() &&\n row.getIsAllSubRowsSelected())\n );\n};\n\nexport const getMRT_RowSelectionHandler =\n <TData extends MRT_RowData>({\n row,\n staticRowIndex = 0,\n table,\n }: {\n row: MRT_Row<TData>;\n staticRowIndex?: number;\n table: MRT_TableInstance<TData>;\n }) =>\n (\n event: ChangeEvent<HTMLInputElement> | MouseEvent<HTMLTableRowElement>,\n value?: boolean,\n ) => {\n const {\n getState,\n options: {\n enableBatchRowSelection,\n enableMultiRowSelection,\n enableRowPinning,\n manualPagination,\n rowPinningDisplayMode,\n },\n refs: { lastSelectedRowId: lastSelectedRowId },\n } = table;\n const {\n pagination: { pageIndex, pageSize },\n } = getState();\n\n const paginationOffset = manualPagination ? 0 : pageSize * pageIndex;\n\n const wasCurrentRowChecked = getIsRowSelected({ row, table });\n\n // toggle selection of this row\n row.toggleSelected(value ?? !wasCurrentRowChecked);\n\n const changedRowIds = new Set<string>([row.id]);\n\n // if shift key is pressed, select all rows between last selected and this one\n if (\n enableBatchRowSelection &&\n enableMultiRowSelection &&\n (event as any).nativeEvent.shiftKey &&\n lastSelectedRowId.current !== null\n ) {\n const rows = getMRT_Rows(table, true);\n\n const lastIndex = rows.findIndex(\n (r) => r.id === lastSelectedRowId.current,\n );\n\n if (lastIndex !== -1) {\n const isLastIndexChecked = getIsRowSelected({\n row: rows?.[lastIndex],\n table,\n });\n\n const currentIndex = staticRowIndex + paginationOffset;\n const [start, end] =\n lastIndex < currentIndex\n ? [lastIndex, currentIndex]\n : [currentIndex, lastIndex];\n\n // toggle selection of all rows between last selected and this one\n // but only if the last selected row is not the same as the current one\n if (wasCurrentRowChecked !== isLastIndexChecked) {\n for (let i = start; i <= end; i++) {\n rows[i].toggleSelected(!wasCurrentRowChecked);\n changedRowIds.add(rows[i].id);\n }\n }\n }\n }\n\n // record the last selected row id\n lastSelectedRowId.current = row.id;\n\n // if all sub rows were selected, unselect them\n if (row.getCanSelectSubRows() && row.getIsAllSubRowsSelected()) {\n row.subRows?.forEach((r) => r.toggleSelected(false));\n }\n\n if (enableRowPinning && rowPinningDisplayMode?.includes('select')) {\n changedRowIds.forEach((rowId) => {\n const rowToTogglePin = table.getRow(rowId);\n rowToTogglePin.pin(\n !wasCurrentRowChecked //was not previously pinned or selected\n ? rowPinningDisplayMode?.includes('bottom')\n ? 'bottom'\n : 'top'\n : false,\n );\n });\n }\n };\n\nexport const getMRT_SelectAllHandler =\n <TData extends MRT_RowData>({ table }: { table: MRT_TableInstance<TData> }) =>\n (\n event: ChangeEvent<HTMLInputElement> | MouseEvent<HTMLButtonElement>,\n value?: boolean,\n forceAll?: boolean,\n ) => {\n const {\n options: { enableRowPinning, rowPinningDisplayMode, selectAllMode },\n refs: { lastSelectedRowId },\n } = table;\n\n selectAllMode === 'all' || forceAll\n ? table.toggleAllRowsSelected(value ?? (event as any).target.checked)\n : table.toggleAllPageRowsSelected(value ?? (event as any).target.checked);\n if (enableRowPinning && rowPinningDisplayMode?.includes('select')) {\n table.setRowPinning({ bottom: [], top: [] });\n }\n lastSelectedRowId.current = null;\n };\n","import {\n MRT_Header,\n type MRT_Cell,\n type MRT_RowData,\n type MRT_TableInstance,\n} from '../types';\nimport {\n getMRT_RowSelectionHandler,\n getMRT_SelectAllHandler,\n} from './row.utils';\nimport { parseFromValuesOrFunc } from './utils';\n\nconst isWinCtrlMacMeta = (event: React.KeyboardEvent<HTMLTableCellElement>) => {\n return (\n (event.ctrlKey && navigator.platform.toLowerCase().includes('win')) ||\n (event.metaKey && navigator.platform.toLowerCase().includes('mac'))\n );\n};\n\nexport const isCellEditable = <TData extends MRT_RowData>({\n cell,\n table,\n}: {\n cell: MRT_Cell<TData>;\n table: MRT_TableInstance<TData>;\n}) => {\n const { enableEditing } = table.options;\n const {\n column: { columnDef },\n row,\n } = cell;\n return (\n !cell.getIsPlaceholder() &&\n parseFromValuesOrFunc(enableEditing, row) &&\n parseFromValuesOrFunc(columnDef.enableEditing, row) !== false\n );\n};\n\nexport const openEditingCell = <TData extends MRT_RowData>({\n cell,\n table,\n}: {\n cell: MRT_Cell<TData>;\n table: MRT_TableInstance<TData>;\n}) => {\n const {\n options: { editDisplayMode },\n refs: { editInputRefs },\n } = table;\n const { column } = cell;\n\n if (isCellEditable({ cell, table }) && editDisplayMode === 'cell') {\n table.setEditingCell(cell);\n queueMicrotask(() => {\n const textField = editInputRefs.current?.[column.id];\n if (textField) {\n textField.focus();\n textField.select?.();\n }\n });\n }\n};\n\nexport const cellKeyboardShortcuts = <TData extends MRT_RowData = MRT_RowData>({\n cell,\n cellElements,\n cellValue,\n containerElement,\n event,\n header,\n parentElement,\n table,\n}: {\n cell?: MRT_Cell<TData>;\n header?: MRT_Header<TData>;\n cellElements?: Array<HTMLTableCellElement>;\n cellValue?: string;\n containerElement?: HTMLTableElement;\n event: React.KeyboardEvent<HTMLTableCellElement>;\n parentElement?: HTMLTableRowElement;\n table: MRT_TableInstance<TData>;\n}) => {\n if (!table.options.enableKeyboardShortcuts) return;\n if (event.isPropagationStopped()) return;\n const currentCell = event.currentTarget;\n\n if (cellValue && isWinCtrlMacMeta(event) && event.key === 'c') {\n navigator.clipboard.writeText(cellValue);\n } else if (['Enter', ' '].includes(event.key)) {\n if (cell?.column?.id === 'mrt-row-select') {\n event.preventDefault();\n getMRT_RowSelectionHandler({\n row: cell.row,\n table,\n //@ts-expect-error\n staticRowIndex: +event.target.getAttribute('data-index'),\n })(event as any);\n } else if (\n header?.column?.id === 'mrt-row-select' &&\n table.options.enableSelectAll\n ) {\n event.preventDefault();\n getMRT_SelectAllHandler({\n table,\n })(event as any);\n } else if (\n cell?.column?.id === 'mrt-row-expand' &&\n (cell.row.getCanExpand() ||\n table.options.renderDetailPanel?.({ row: cell.row, table }))\n ) {\n event.preventDefault();\n cell.row.toggleExpanded();\n } else if (\n header?.column?.id === 'mrt-row-expand' &&\n table.options.enableExpandAll\n ) {\n event.preventDefault();\n table.toggleAllRowsExpanded();\n } else if (cell?.column.id === 'mrt-row-pin') {\n event.preventDefault();\n cell.row.getIsPinned()\n ? cell.row.pin(false)\n : cell.row.pin(\n table.options.rowPinningDisplayMode?.includes('bottom')\n ? 'bottom'\n : 'top',\n );\n } else if (header && isWinCtrlMacMeta(event)) {\n const actionsButton = currentCell.querySelector(\n `button[aria-label=\"${table.options.localization.columnActions}\"]`,\n );\n if (actionsButton) {\n (actionsButton as HTMLButtonElement).click();\n }\n } else if (header?.column?.getCanSort()) {\n event.preventDefault();\n header.column.toggleSorting();\n }\n } else if (\n [\n 'ArrowRight',\n 'ArrowLeft',\n 'ArrowUp',\n 'ArrowDown',\n 'Home',\n 'End',\n 'PageUp',\n 'PageDown',\n ].includes(event.key)\n ) {\n event.preventDefault();\n\n const currentRow = parentElement || currentCell.closest('tr');\n const tableElement = containerElement || currentCell.closest('table');\n const allCells =\n cellElements ||\n Array.from(tableElement?.querySelectorAll('th, td') || []);\n const currentCellIndex = allCells.indexOf(currentCell);\n\n const currentIndex = parseInt(\n currentCell.getAttribute('data-index') || '0',\n );\n let nextCell: HTMLElement | undefined = undefined;\n\n //home/end first or last cell in row\n const findEdgeCell = (rowIndex: 'c' | 'f' | 'l', edge: 'f' | 'l') => {\n const row =\n rowIndex === 'c'\n ? currentRow\n : rowIndex === 'f'\n ? tableElement?.querySelector('tr')\n : tableElement?.lastElementChild?.lastElementChild;\n const rowCells = Array.from(row?.children || []);\n const targetCell =\n edge === 'f' ? rowCells[0] : rowCells[rowCells.length - 1];\n return targetCell as HTMLElement;\n };\n\n //page up/down first or last cell in column\n const findBottomTopCell = (columnIndex: number, edge: 'b' | 't') => {\n const row =\n edge === 't'\n ? tableElement?.querySelector('tr')\n : tableElement?.lastElementChild?.lastElementChild;\n const rowCells = Array.from(row?.children || []);\n const targetCell = rowCells[columnIndex];\n return targetCell as HTMLElement;\n };\n\n const findAdjacentCell = (\n columnIndex: number,\n searchDirection: 'f' | 'b',\n ) => {\n const searchArray =\n searchDirection === 'f'\n ? allCells.slice(currentCellIndex + 1)\n : allCells.slice(0, currentCellIndex).reverse();\n return searchArray.find((cell) =>\n cell.matches(`[data-index=\"${columnIndex}\"]`),\n ) as HTMLElement | undefined;\n };\n\n switch (event.key) {\n case 'ArrowRight':\n nextCell = findAdjacentCell(currentIndex + 1, 'f');\n break;\n case 'ArrowLeft':\n nextCell = findAdjacentCell(currentIndex - 1, 'b');\n break;\n case 'ArrowUp':\n nextCell = findAdjacentCell(currentIndex, 'b');\n break;\n case 'ArrowDown':\n nextCell = findAdjacentCell(currentIndex, 'f');\n break;\n case 'Home':\n nextCell = findEdgeCell(isWinCtrlMacMeta(event) ? 'f' : 'c', 'f');\n break;\n case 'End':\n nextCell = findEdgeCell(isWinCtrlMacMeta(event) ? 'l' : 'c', 'l');\n break;\n case 'PageUp':\n nextCell = findBottomTopCell(currentIndex, 't');\n break;\n case 'PageDown':\n nextCell = findBottomTopCell(currentIndex, 'b');\n break;\n }\n\n if (nextCell) {\n nextCell.focus();\n }\n }\n};\n","import {\n type MRT_DefinedTableOptions,\n type MRT_DisplayColumnIds,\n type MRT_Localization,\n type MRT_RowData,\n type MRT_StatefulTableOptions,\n} from '../types';\nimport { getAllLeafColumnDefs, getColumnId } from './column.utils';\n\nexport function defaultDisplayColumnProps<TData extends MRT_RowData>({\n header,\n id,\n size,\n tableOptions,\n}: {\n header?: keyof MRT_Localization;\n id: MRT_DisplayColumnIds;\n size: number;\n tableOptions: MRT_DefinedTableOptions<TData>;\n}) {\n const { defaultDisplayColumn, displayColumnDefOptions, localization } =\n tableOptions;\n return {\n ...defaultDisplayColumn,\n header: header ? localization[header]! : '',\n size,\n ...displayColumnDefOptions?.[id],\n id,\n } as const;\n}\n\nexport const showRowPinningColumn = <TData extends MRT_RowData>(\n tableOptions: MRT_StatefulTableOptions<TData>,\n): boolean => {\n const { enableRowPinning, rowPinningDisplayMode } = tableOptions;\n return !!(enableRowPinning && !rowPinningDisplayMode?.startsWith('select'));\n};\n\nexport const showRowDragColumn = <TData extends MRT_RowData>(\n tableOptions: MRT_StatefulTableOptions<TData>,\n): boolean => {\n const { enableRowDragging, enableRowOrdering } = tableOptions;\n return !!(enableRowDragging || enableRowOrdering);\n};\n\nexport const showRowExpandColumn = <TData extends MRT_RowData>(\n tableOptions: MRT_StatefulTableOptions<TData>,\n): boolean => {\n const {\n enableExpanding,\n enableGrouping,\n renderDetailPanel,\n state: { grouping },\n } = tableOptions;\n return !!(\n enableExpanding ||\n (enableGrouping && grouping?.length) ||\n renderDetailPanel\n );\n};\n\nexport const showRowActionsColumn = <TData extends MRT_RowData>(\n tableOptions: MRT_StatefulTableOptions<TData>,\n): boolean => {\n const {\n createDisplayMode,\n editDisplayMode,\n enableEditing,\n enableRowActions,\n state: { creatingRow },\n } = tableOptions;\n return !!(\n enableRowActions ||\n (creatingRow && createDisplayMode === 'row') ||\n (enableEditing && ['modal', 'row'].includes(editDisplayMode ?? ''))\n );\n};\n\nexport const showRowSelectionColumn = <TData extends MRT_RowData>(\n tableOptions: MRT_StatefulTableOptions<TData>,\n): boolean => !!tableOptions.enableRowSelection;\n\nexport const showRowNumbersColumn = <TData extends MRT_RowData>(\n tableOptions: MRT_StatefulTableOptions<TData>,\n): boolean => !!tableOptions.enableRowNumbers;\n\nexport const showRowSpacerColumn = <TData extends MRT_RowData>(\n tableOptions: MRT_StatefulTableOptions<TData>,\n): boolean => tableOptions.layoutMode === 'grid-no-grow';\n\nexport const getLeadingDisplayColumnIds = <TData extends MRT_RowData>(\n tableOptions: MRT_StatefulTableOptions<TData>,\n) =>\n [\n showRowPinningColumn(tableOptions) && 'mrt-row-pin',\n showRowDragColumn(tableOptions) && 'mrt-row-drag',\n tableOptions.positionActionsColumn === 'first' &&\n showRowActionsColumn(tableOptions) &&\n 'mrt-row-actions',\n tableOptions.positionExpandColumn === 'first' &&\n showRowExpandColumn(tableOptions) &&\n 'mrt-row-expand',\n showRowSelectionColumn(tableOptions) && 'mrt-row-select',\n showRowNumbersColumn(tableOptions) && 'mrt-row-numbers',\n ].filter(Boolean) as MRT_DisplayColumnIds[];\n\nexport const getTrailingDisplayColumnIds = <TData extends MRT_RowData>(\n tableOptions: MRT_StatefulTableOptions<TData>,\n) =>\n [\n tableOptions.positionActionsColumn === 'last' &&\n showRowActionsColumn(tableOptions) &&\n 'mrt-row-actions',\n tableOptions.positionExpandColumn === 'last' &&\n showRowExpandColumn(tableOptions) &&\n 'mrt-row-expand',\n showRowSpacerColumn(tableOptions) && 'mrt-row-spacer',\n ].filter(Boolean) as MRT_DisplayColumnIds[];\n\nexport const getDefaultColumnOrderIds = <TData extends MRT_RowData>(\n tableOptions: MRT_StatefulTableOptions<TData>,\n reset = false,\n) => {\n const {\n state: { columnOrder: currentColumnOrderIds = [] },\n } = tableOptions;\n\n const leadingDisplayColIds: string[] =\n getLeadingDisplayColumnIds(tableOptions);\n const trailingDisplayColIds: string[] =\n getTrailingDisplayColumnIds(tableOptions);\n\n const defaultColumnDefIds = getAllLeafColumnDefs(tableOptions.columns).map(\n (columnDef) => getColumnId(columnDef),\n );\n\n let allLeafColumnDefIds = reset\n ? defaultColumnDefIds\n : Array.from(new Set([...currentColumnOrderIds, ...defaultColumnDefIds]));\n\n allLeafColumnDefIds = allLeafColumnDefIds.filter(\n (colId) =>\n !leadingDisplayColIds.includes(colId) &&\n !trailingDisplayColIds.includes(colId),\n );\n\n return [\n ...leadingDisplayColIds,\n ...allLeafColumnDefIds,\n ...trailingDisplayColIds,\n ];\n};\n","import { aggregationFns } from '@tanstack/react-table';\n\nexport const MRT_AggregationFns = { ...aggregationFns };\n","import {\n type RankingInfo,\n rankItem,\n rankings,\n} from '@tanstack/match-sorter-utils';\nimport { type Row, filterFns } from '@tanstack/react-table';\nimport { type MRT_RowData } from '../types';\n\nconst fuzzy = <TData extends MRT_RowData>(\n row: Row<TData>,\n columnId: string,\n filterValue: number | string,\n addMeta: (item: RankingInfo) => void,\n): boolean => {\n const itemRank = rankItem(\n row.getValue<string | number | null>(columnId),\n filterValue as string,\n {\n threshold: rankings.MATCHES,\n },\n );\n addMeta(itemRank);\n return itemRank.passed;\n};\n\nfuzzy.autoRemove = (val: any) => !val;\n\nconst contains = <TData extends MRT_RowData>(\n row: Row<TData>,\n id: string,\n filterValue: number | string,\n): boolean =>\n !!row\n .getValue<number | string | null>(id)\n ?.toString()\n .toLowerCase()\n .trim()\n .includes(filterValue.toString().toLowerCase().trim());\n\ncontains.autoRemove = (val: any) => !val;\n\nconst startsWith = <TData extends MRT_RowData>(\n row: Row<TData>,\n id: string,\n filterValue: number | string,\n): boolean =>\n !!row\n .getValue<number | string | null>(id)\n ?.toString()\n .toLowerCase()\n .trim()\n .startsWith(filterValue.toString().toLowerCase().trim());\n\nstartsWith.autoRemove = (val: any) => !val;\n\nconst endsWith = <TData extends MRT_RowData>(\n row: Row<TData>,\n id: string,\n filterValue: number | string,\n): boolean =>\n !!row\n .getValue<number | string | null>(id)\n ?.toString()\n .toLowerCase()\n .trim()\n .endsWith(filterValue.toString().toLowerCase().trim());\n\nendsWith.autoRemove = (val: any) => !val;\n\nconst equals = <TData extends MRT_RowData>(\n row: Row<TData>,\n id: string,\n filterValue: number | string,\n): boolean =>\n row.getValue<number | string | null>(id)?.toString().toLowerCase().trim() ===\n filterValue.toString().toLowerCase().trim();\n\nequals.autoRemove = (val: any) => !val;\n\nconst notEquals = <TData extends MRT_RowData>(\n row: Row<TData>,\n id: string,\n filterValue: number | string,\n): boolean =>\n row.getValue<number | string | null>(id)?.toString().toLowerCase().trim() !==\n filterValue.toString().toLowerCase().trim();\n\nnotEquals.autoRemove = (val: any) => !val;\n\nconst greaterThan = <TData extends MRT_RowData>(\n row: Row<TData>,\n id: string,\n filterValue: number | string,\n): boolean =>\n !isNaN(+filterValue) && !isNaN(+row.getValue<number | string>(id))\n ? +(row.getValue<number | string | null>(id) ?? 0) > +filterValue\n : (row.getValue<number | string | null>(id) ?? '')\n ?.toString()\n .toLowerCase()\n .trim() > filterValue.toString().toLowerCase().trim();\n\ngreaterThan.autoRemove = (val: any) => !val;\n\nconst greaterThanOrEqualTo = <TData extends MRT_RowData>(\n row: Row<TData>,\n id: string,\n filterValue: number | string,\n): boolean => equals(row, id, filterValue) || greaterThan(row, id, filterValue);\n\ngreaterThanOrEqualTo.autoRemove = (val: any) => !val;\n\nconst lessThan = <TData extends MRT_RowData>(\n row: Row<TData>,\n id: string,\n filterValue: number | string,\n): boolean =>\n !isNaN(+filterValue) && !isNaN(+row.getValue<number | string>(id))\n ? +(row.getValue<number | string | null>(id) ?? 0) < +filterValue\n : (row.getValue<number | string | null>(id) ?? '')\n ?.toString()\n .toLowerCase()\n .trim() < filterValue.toString().toLowerCase().trim();\n\nlessThan.autoRemove = (val: any) => !val;\n\nconst lessThanOrEqualTo = <TData extends MRT_RowData>(\n row: Row<TData>,\n id: string,\n filterValue: number | string,\n): boolean => equals(row, id, filterValue) || lessThan(row, id, filterValue);\n\nlessThanOrEqualTo.autoRemove = (val: any) => !val;\n\nconst between = <TData extends MRT_RowData>(\n row: Row<TData>,\n id: string,\n filterValues: [number | string, number | string],\n): boolean =>\n ((['', undefined] as any[]).includes(filterValues[0]) ||\n greaterThan(row, id, filterValues[0])) &&\n ((!isNaN(+filterValues[0]) &&\n !isNaN(+filterValues[1]) &&\n +filterValues[0] > +filterValues[1]) ||\n (['', undefined] as any[]).includes(filterValues[1]) ||\n lessThan(row, id, filterValues[1]));\n\nbetween.autoRemove = (val: any) => !val;\n\nconst betweenInclusive = <TData extends MRT_RowData>(\n row: Row<TData>,\n id: string,\n filterValues: [number | string, number | string],\n): boolean =>\n ((['', undefined] as any[]).includes(filterValues[0]) ||\n greaterThanOrEqualTo(row, id, filterValues[0])) &&\n ((!isNaN(+filterValues[0]) &&\n !isNaN(+filterValues[1]) &&\n +filterValues[0] > +filterValues[1]) ||\n (['', undefined] as any[]).includes(filterValues[1]) ||\n lessThanOrEqualTo(row, id, filterValues[1]));\n\nbetweenInclusive.autoRemove = (val: any) => !val;\n\nconst empty = <TData extends MRT_RowData>(\n row: Row<TData>,\n id: string,\n _filterValue: number | string,\n): boolean => !row.getValue<number | string | null>(id)?.toString().trim();\n\nempty.autoRemove = (val: any) => !val;\n\nconst notEmpty = <TData extends MRT_RowData>(\n row: Row<TData>,\n id: string,\n _filterValue: number | string,\n): boolean => !!row.getValue<number | string | null>(id)?.toString().trim();\n\nnotEmpty.autoRemove = (val: any) => !val;\n\nexport const MRT_FilterFns = {\n ...filterFns,\n between,\n betweenInclusive,\n contains,\n empty,\n endsWith,\n equals,\n fuzzy,\n greaterThan,\n greaterThanOrEqualTo,\n lessThan,\n lessThanOrEqualTo,\n notEmpty,\n notEquals,\n startsWith,\n};\n","/******************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise, SuppressedError, Symbol, Iterator */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n if (typeof b !== \"function\" && b !== null)\r\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __esDecorate(ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) {\r\n function accept(f) { if (f !== void 0 && typeof f !== \"function\") throw new TypeError(\"Function expected\"); return f; }\r\n var kind = contextIn.kind, key = kind === \"getter\" ? \"get\" : kind === \"setter\" ? \"set\" : \"value\";\r\n var target = !descriptorIn && ctor ? contextIn[\"static\"] ? ctor : ctor.prototype : null;\r\n var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {});\r\n var _, done = false;\r\n for (var i = decorators.length - 1; i >= 0; i--) {\r\n var context = {};\r\n for (var p in contextIn) context[p] = p === \"access\" ? {} : contextIn[p];\r\n for (var p in contextIn.access) context.access[p] = contextIn.access[p];\r\n context.addInitializer = function (f) { if (done) throw new TypeError(\"Cannot add initializers after decoration has completed\"); extraInitializers.push(accept(f || null)); };\r\n var result = (0, decorators[i])(kind === \"accessor\" ? { get: descriptor.get, set: descriptor.set } : descriptor[key], context);\r\n if (kind === \"accessor\") {\r\n if (result === void 0) continue;\r\n if (result === null || typeof result !== \"object\") throw new TypeError(\"Object expected\");\r\n if (_ = accept(result.get)) descriptor.get = _;\r\n if (_ = accept(result.set)) descriptor.set = _;\r\n if (_ = accept(result.init)) initializers.unshift(_);\r\n }\r\n else if (_ = accept(result)) {\r\n if (kind === \"field\") initializers.unshift(_);\r\n else descriptor[key] = _;\r\n }\r\n }\r\n if (target) Object.defineProperty(target, contextIn.name, descriptor);\r\n done = true;\r\n};\r\n\r\nexport function __runInitializers(thisArg, initializers, value) {\r\n var useValue = arguments.length > 2;\r\n for (var i = 0; i < initializers.length; i++) {\r\n value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg);\r\n }\r\n return useValue ? value : void 0;\r\n};\r\n\r\nexport function __propKey(x) {\r\n return typeof x === \"symbol\" ? x : \"\".concat(x);\r\n};\r\n\r\nexport function __setFunctionName(f, name, prefix) {\r\n if (typeof name === \"symbol\") name = name.description ? \"[\".concat(name.description, \"]\") : \"\";\r\n return Object.defineProperty(f, \"name\", { configurable: true, value: prefix ? \"\".concat(prefix, \" \", name) : name });\r\n};\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === \"function\" ? Iterator : Object).prototype);\r\n return g.next = verb(0), g[\"throw\"] = verb(1), g[\"return\"] = verb(2), typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (g && (g = 0, op[0] && (_ = 0)), _) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n var desc = Object.getOwnPropertyDescriptor(m, k);\r\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\r\n desc = { enumerable: true, get: function() { return m[k]; } };\r\n }\r\n Object.defineProperty(o, k2, desc);\r\n}) : (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n o[k2] = m[k];\r\n});\r\n\r\nexport function __exportStar(m, o) {\r\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\r\n}\r\n\r\nexport function __values(o) {\r\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n if (m) return m.call(o);\r\n if (o && typeof o.length === \"number\") return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spreadArrays() {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n}\r\n\r\nexport function __spreadArray(to, from, pack) {\r\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\r\n if (ar || !(i in from)) {\r\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\r\n ar[i] = from[i];\r\n }\r\n }\r\n return to.concat(ar || Array.prototype.slice.call(from));\r\n}\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = Object.create((typeof AsyncIterator === \"function\" ? AsyncIterator : Object).prototype), verb(\"next\"), verb(\"throw\"), verb(\"return\", awaitReturn), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function awaitReturn(f) { return function (v) { return Promise.resolve(v).then(f, reject); }; }\r\n function verb(n, f) { if (g[n]) { i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; if (f) i[n] = f(i[n]); } }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: false } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nvar __setModuleDefault = Object.create ? (function(o, v) {\r\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\r\n}) : function(o, v) {\r\n o[\"default\"] = v;\r\n};\r\n\r\nvar ownKeys = function(o) {\r\n ownKeys = Object.getOwnPropertyNames || function (o) {\r\n var ar = [];\r\n for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;\r\n return ar;\r\n };\r\n return ownKeys(o);\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== \"default\") __createBinding(result, mod, k[i]);\r\n __setModuleDefault(result, mod);\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n\r\nexport function __classPrivateFieldGet(receiver, state, kind, f) {\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\r\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\r\n}\r\n\r\nexport function __classPrivateFieldSet(receiver, state, value, kind, f) {\r\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\r\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\r\n}\r\n\r\nexport function __classPrivateFieldIn(state, receiver) {\r\n if (receiver === null || (typeof receiver !== \"object\" && typeof receiver !== \"function\")) throw new TypeError(\"Cannot use 'in' operator on non-object\");\r\n return typeof state === \"function\" ? receiver === state : state.has(receiver);\r\n}\r\n\r\nexport function __addDisposableResource(env, value, async) {\r\n if (value !== null && value !== void 0) {\r\n if (typeof value !== \"object\" && typeof value !== \"function\") throw new TypeError(\"Object expected.\");\r\n var dispose, inner;\r\n if (async) {\r\n if (!Symbol.asyncDispose) throw new TypeError(\"Symbol.asyncDispose is not defined.\");\r\n dispose = value[Symbol.asyncDispose];\r\n }\r\n if (dispose === void 0) {\r\n if (!Symbol.dispose) throw new TypeError(\"Symbol.dispose is not defined.\");\r\n dispose = value[Symbol.dispose];\r\n if (async) inner = dispose;\r\n }\r\n if (typeof dispose !== \"function\") throw new TypeError(\"Object not disposable.\");\r\n if (inner) dispose = function() { try { inner.call(this); } catch (e) { return Promise.reject(e); } };\r\n env.stack.push({ value: value, dispose: dispose, async: async });\r\n }\r\n else if (async) {\r\n env.stack.push({ async: true });\r\n }\r\n return value;\r\n\r\n}\r\n\r\nvar _SuppressedError = typeof SuppressedError === \"function\" ? SuppressedError : function (error, suppressed, message) {\r\n var e = new Error(message);\r\n return e.name = \"SuppressedError\", e.error = error, e.suppressed = suppressed, e;\r\n};\r\n\r\nexport function __disposeResources(env) {\r\n function fail(e) {\r\n env.error = env.hasError ? new _SuppressedError(e, env.error, \"An error was suppressed during disposal.\") : e;\r\n env.hasError = true;\r\n }\r\n var r, s = 0;\r\n function next() {\r\n while (r = env.stack.pop()) {\r\n try {\r\n if (!r.async && s === 1) return s = 0, env.stack.push(r), Promise.resolve().then(next);\r\n if (r.dispose) {\r\n var result = r.dispose.call(r.value);\r\n if (r.async) return s |= 2, Promise.resolve(result).then(next, function(e) { fail(e); return next(); });\r\n }\r\n else s |= 1;\r\n }\r\n catch (e) {\r\n fail(e);\r\n }\r\n }\r\n if (s === 1) return env.hasError ? Promise.reject(env.error) : Promise.resolve();\r\n if (env.hasError) throw env.error;\r\n }\r\n return next();\r\n}\r\n\r\nexport function __rewriteRelativeImportExtension(path, preserveJsx) {\r\n if (typeof path === \"string\" && /^\\.\\.?\\//.test(path)) {\r\n return path.replace(/\\.(tsx)$|((?:\\.d)?)((?:\\.[^./]+?)?)\\.([cm]?)ts$/i, function (m, tsx, d, ext, cm) {\r\n return tsx ? preserveJsx ? \".jsx\" : \".js\" : d && (!ext || !cm) ? m : (d + ext + \".\" + cm.toLowerCase() + \"js\");\r\n });\r\n }\r\n return path;\r\n}\r\n\r\nexport default {\r\n __extends: __extends,\r\n __assign: __assign,\r\n __rest: __rest,\r\n __decorate: __decorate,\r\n __param: __param,\r\n __esDecorate: __esDecorate,\r\n __runInitializers: __runInitializers,\r\n __propKey: __propKey,\r\n __setFunctionName: __setFunctionName,\r\n __metadata: __metadata,\r\n __awaiter: __awaiter,\r\n __generator: __generator,\r\n __createBinding: __createBinding,\r\n __exportStar: __exportStar,\r\n __values: __values,\r\n __read: __read,\r\n __spread: __spread,\r\n __spreadArrays: __spreadArrays,\r\n __spreadArray: __spreadArray,\r\n __await: __await,\r\n __asyncGenerator: __asyncGenerator,\r\n __asyncDelegator: __asyncDelegator,\r\n __asyncValues: __asyncValues,\r\n __makeTemplateObject: __makeTemplateObject,\r\n __importStar: __importStar,\r\n __importDefault: __importDefault,\r\n __classPrivateFieldGet: __classPrivateFieldGet,\r\n __classPrivateFieldSet: __classPrivateFieldSet,\r\n __classPrivateFieldIn: __classPrivateFieldIn,\r\n __addDisposableResource: __addDisposableResource,\r\n __disposeResources: __disposeResources,\r\n __rewriteRelativeImportExtension: __rewriteRelativeImportExtension,\r\n};\r\n","import Box, { type BoxProps } from '@mui/material/Box';\nimport Button from '@mui/material/Button';\nimport CircularProgress from '@mui/material/CircularProgress';\nimport IconButton from '@mui/material/IconButton';\nimport Tooltip from '@mui/material/Tooltip';\nimport {\n type MRT_Row,\n type MRT_RowData,\n type MRT_TableInstance,\n} from '../../types';\nimport { parseFromValuesOrFunc } from '../../utils/utils';\n\nexport interface MRT_EditActionButtonsProps<TData extends MRT_RowData>\n extends BoxProps {\n row: MRT_Row<TData>;\n table: MRT_TableInstance<TData>;\n variant?: 'icon' | 'text';\n}\n\nexport const MRT_EditActionButtons = <TData extends MRT_RowData>({\n row,\n table,\n variant = 'icon',\n ...rest\n}: MRT_EditActionButtonsProps<TData>) => {\n const {\n getState,\n options: {\n icons: { CancelIcon, SaveIcon },\n localization,\n onCreatingRowCancel,\n onCreatingRowSave,\n onEditingRowCancel,\n onEditingRowSave,\n },\n refs: { editInputRefs },\n setCreatingRow,\n setEditingRow,\n } = table;\n const { creatingRow, editingRow, isSaving } = getState();\n\n const isCreating = creatingRow?.id === row.id;\n const isEditing = editingRow?.id === row.id;\n\n const handleCancel = () => {\n if (isCreating) {\n onCreatingRowCancel?.({ row, table });\n setCreatingRow(null);\n } else if (isEditing) {\n onEditingRowCancel?.({ row, table });\n setEditingRow(null);\n }\n row._valuesCache = {} as any; //reset values cache\n };\n\n const handleSubmitRow = () => {\n //look for auto-filled input values\n Object.values(editInputRefs.current ?? {})\n .filter((inputRef) => row.id === inputRef?.name?.split('_')?.[0])\n ?.forEach((input) => {\n if (\n input.value !== undefined &&\n Object.hasOwn(row?._valuesCache as object, input.name)\n ) {\n // @ts-expect-error\n row._valuesCache[input.name] = input.value;\n }\n });\n if (isCreating)\n onCreatingRowSave?.({\n exitCreatingMode: () => setCreatingRow(null),\n row,\n table,\n values: row._valuesCache,\n });\n else if (isEditing) {\n onEditingRowSave?.({\n exitEditingMode: () => setEditingRow(null),\n row,\n table,\n values: row?._valuesCache,\n });\n }\n };\n\n return (\n <Box\n onClick={(e) => e.stopPropagation()}\n sx={(theme) => ({\n display: 'flex',\n gap: '0.75rem',\n ...(parseFromValuesOrFunc(rest?.sx, theme) as any),\n })}\n >\n {variant === 'icon' ? (\n <>\n <Tooltip title={localization.cancel}>\n <IconButton aria-label={localization.cancel} onClick={handleCancel}>\n <CancelIcon />\n </IconButton>\n </Tooltip>\n {((isCreating && onCreatingRowSave) ||\n (isEditing && onEditingRowSave)) && (\n <Tooltip title={localization.save}>\n <IconButton\n aria-label={localization.save}\n color=\"info\"\n disabled={isSaving}\n onClick={handleSubmitRow}\n >\n {isSaving ? <CircularProgress size={18} /> : <SaveIcon />}\n </IconButton>\n </Tooltip>\n )}\n </>\n ) : (\n <>\n <Button onClick={handleCancel} sx={{ minWidth: '100px' }}>\n {localization.cancel}\n </Button>\n <Button\n disabled={isSaving}\n onClick={handleSubmitRow}\n sx={{ minWidth: '100px' }}\n variant=\"contained\"\n >\n {isSaving && <CircularProgress color=\"inherit\" size={18} />}\n {localization.save}\n </Button>\n </>\n )}\n </Box>\n );\n};\n","import { type CSSProperties } from 'react';\nimport { type TableCellProps } from '@mui/material/TableCell';\nimport { type TooltipProps } from '@mui/material/Tooltip';\nimport { alpha, darken, lighten } from '@mui/material/styles';\nimport { type Theme } from '@mui/material/styles';\nimport {\n type MRT_Column,\n type MRT_Header,\n type MRT_RowData,\n type MRT_TableInstance,\n type MRT_TableOptions,\n type MRT_Theme,\n} from '../types';\nimport { parseFromValuesOrFunc } from './utils';\n\nexport const parseCSSVarId = (id: string) => id.replace(/[^a-zA-Z0-9]/g, '_');\n\nexport const getMRTTheme = <TData extends MRT_RowData>(\n mrtTheme: MRT_TableOptions<TData>['mrtTheme'],\n muiTheme: Theme,\n): MRT_Theme => {\n const mrtThemeOverrides = parseFromValuesOrFunc(mrtTheme, muiTheme);\n const baseBackgroundColor =\n mrtThemeOverrides?.baseBackgroundColor ??\n (muiTheme.palette.mode === 'dark'\n ? lighten(muiTheme.palette.background.default, 0.05)\n : muiTheme.palette.background.default);\n return {\n baseBackgroundColor,\n cellNavigationOutlineColor: muiTheme.palette.primary.main,\n draggingBorderColor: muiTheme.palette.primary.main,\n matchHighlightColor:\n muiTheme.palette.mode === 'dark'\n ? darken(muiTheme.palette.warning.dark, 0.25)\n : lighten(muiTheme.palette.warning.light, 0.5),\n menuBackgroundColor: lighten(baseBackgroundColor, 0.07),\n pinnedRowBackgroundColor: alpha(muiTheme.palette.primary.main, 0.1),\n selectedRowBackgroundColor: alpha(muiTheme.palette.primary.main, 0.2),\n ...mrtThemeOverrides,\n };\n};\n\nexport const commonCellBeforeAfterStyles = {\n content: '\"\"',\n height: '100%',\n left: 0,\n position: 'absolute',\n top: 0,\n width: '100%',\n zIndex: -1,\n};\n\nexport const getCommonPinnedCellStyles = <TData extends MRT_RowData>({\n column,\n table,\n theme,\n}: {\n column?: MRT_Column<TData>;\n table: MRT_TableInstance<TData>;\n theme: Theme;\n}) => {\n const { baseBackgroundColor } = table.options.mrtTheme;\n const isPinned = column?.getIsPinned();\n\n return {\n '&[data-pinned=\"true\"]': {\n '&:before': {\n backgroundColor: alpha(\n darken(\n baseBackgroundColor,\n theme.palette.mode === 'dark' ? 0.05 : 0.01,\n ),\n 0.97,\n ),\n boxShadow: column\n ? isPinned === 'left' && column.getIsLastColumn(isPinned)\n ? `-4px 0 4px -4px ${alpha(theme.palette.grey[700], 0.5)} inset`\n : isPinned === 'right' && column.getIsFirstColumn(isPinned)\n ? `4px 0 4px -4px ${alpha(theme.palette.grey[700], 0.5)} inset`\n : undefined\n : undefined,\n ...commonCellBeforeAfterStyles,\n },\n },\n };\n};\n\nexport const getCommonMRTCellStyles = <TData extends MRT_RowData>({\n column,\n header,\n table,\n tableCellProps,\n theme,\n}: {\n column: MRT_Column<TData>;\n header?: MRT_Header<TData>;\n table: MRT_TableInstance<TData>;\n tableCellProps: TableCellProps;\n theme: Theme;\n}) => {\n const {\n getState,\n options: { enableColumnVirtualization, layoutMode },\n } = table;\n const { draggingColumn } = getState();\n const { columnDef } = column;\n const { columnDefType } = columnDef;\n\n const isColumnPinned =\n columnDef.columnDefType !== 'group' && column.getIsPinned();\n\n const widthStyles: CSSProperties = {\n minWidth: `max(calc(var(--${header ? 'header' : 'col'}-${parseCSSVarId(\n header?.id ?? column.id,\n )}-size) * 1px), ${columnDef.minSize ?? 30}px)`,\n width: `calc(var(--${header ? 'header' : 'col'}-${parseCSSVarId(\n header?.id ?? column.id,\n )}-size) * 1px)`,\n };\n\n if (layoutMode === 'grid') {\n widthStyles.flex = `${\n [0, false].includes(columnDef.grow!)\n ? 0\n : `var(--${header ? 'header' : 'col'}-${parseCSSVarId(\n header?.id ?? column.id,\n )}-size)`\n } 0 auto`;\n } else if (layoutMode === 'grid-no-grow') {\n widthStyles.flex = `${+(columnDef.grow || 0)} 0 auto`;\n }\n\n const pinnedStyles = isColumnPinned\n ? {\n ...getCommonPinnedCellStyles({ column, table, theme }),\n left:\n isColumnPinned === 'left'\n ? `${column.getStart('left')}px`\n : undefined,\n opacity: 0.97,\n position: 'sticky',\n right:\n isColumnPinned === 'right'\n ? `${column.getAfter('right')}px`\n : undefined,\n }\n : {};\n\n return {\n backgroundColor: 'inherit',\n backgroundImage: 'inherit',\n display: layoutMode?.startsWith('grid') ? 'flex' : undefined,\n justifyContent:\n columnDefType === 'group'\n ? 'center'\n : layoutMode?.startsWith('grid')\n ? tableCellProps.align\n : undefined,\n opacity:\n table.getState().draggingColumn?.id === column.id ||\n table.getState().hoveredColumn?.id === column.id\n ? 0.5\n : 1,\n position: 'relative',\n transition: enableColumnVirtualization\n ? 'none'\n : `padding 150ms ease-in-out`,\n zIndex:\n column.getIsResizing() || draggingColumn?.id === column.id\n ? 2\n : columnDefType !== 'group' && isColumnPinned\n ? 1\n : 0,\n '&:focus-visible': {\n outline: `2px solid ${table.options.mrtTheme.cellNavigationOutlineColor}`,\n outlineOffset: '-2px',\n },\n ...pinnedStyles,\n ...widthStyles,\n ...(parseFromValuesOrFunc(tableCellProps?.sx, theme) as any),\n };\n};\n\nexport const getCommonToolbarStyles = <TData extends MRT_RowData>({\n table,\n}: {\n table: MRT_TableInstance<TData>;\n theme: Theme;\n}) => ({\n alignItems: 'flex-start',\n backgroundColor: table.options.mrtTheme.baseBackgroundColor,\n display: 'grid',\n flexWrap: 'wrap-reverse',\n minHeight: '3.5rem',\n overflow: 'hidden',\n position: 'relative',\n transition: 'all 150ms ease-in-out',\n zIndex: 1,\n});\n\nexport const flipIconStyles = (theme: Theme) =>\n theme.direction === 'rtl'\n ? { style: { transform: 'scaleX(-1)' } }\n : undefined;\n\nexport const getCommonTooltipProps = (\n placement?: TooltipProps['placement'],\n): Partial<TooltipProps> => ({\n disableInteractive: true,\n enterDelay: 1000,\n enterNextDelay: 1000,\n placement,\n});\n","import { type ReactNode } from 'react';\nimport Box from '@mui/material/Box';\nimport IconButton from '@mui/material/IconButton';\nimport ListItemIcon from '@mui/material/ListItemIcon';\nimport MenuItem, { type MenuItemProps } from '@mui/material/MenuItem';\nimport { type MRT_RowData, type MRT_TableInstance } from '../../types';\n\nexport interface MRT_ActionMenuItemProps<TData extends MRT_RowData>\n extends MenuItemProps {\n icon: ReactNode;\n label: string;\n onOpenSubMenu?: MenuItemProps['onClick'] | MenuItemProps['onMouseEnter'];\n table: MRT_TableInstance<TData>;\n}\n\nexport const MRT_ActionMenuItem = <TData extends MRT_RowData>({\n icon,\n label,\n onOpenSubMenu,\n table,\n ...rest\n}: MRT_ActionMenuItemProps<TData>) => {\n const {\n options: {\n icons: { ArrowRightIcon },\n },\n } = table;\n\n return (\n <MenuItem\n sx={{\n alignItems: 'center',\n justifyContent: 'space-between',\n minWidth: '120px',\n my: 0,\n py: '6px',\n }}\n tabIndex={0}\n {...rest}\n >\n <Box\n sx={{\n alignItems: 'center',\n display: 'flex',\n }}\n >\n <ListItemIcon>{icon}</ListItemIcon>\n {label}\n </Box>\n {onOpenSubMenu && (\n <IconButton\n onClick={onOpenSubMenu as any}\n onMouseEnter={onOpenSubMenu as any}\n size=\"small\"\n sx={{ p: 0 }}\n >\n <ArrowRightIcon />\n </IconButton>\n )}\n </MenuItem>\n );\n};\n","import { ReactNode, useMemo, type MouseEvent } from 'react';\nimport Menu, { type MenuProps } from '@mui/material/Menu';\nimport { MRT_ActionMenuItem } from './MRT_ActionMenuItem';\nimport {\n type MRT_Row,\n type MRT_RowData,\n type MRT_TableInstance,\n} from '../../types';\nimport { parseFromValuesOrFunc } from '../../utils/utils';\n\nexport interface MRT_RowActionMenuProps<TData extends MRT_RowData>\n extends Partial<MenuProps> {\n anchorEl: HTMLElement | null;\n handleEdit: (event: MouseEvent) => void;\n row: MRT_Row<TData>;\n setAnchorEl: (anchorEl: HTMLElement | null) => void;\n staticRowIndex?: number;\n table: MRT_TableInstance<TData>;\n}\n\nexport const MRT_RowActionMenu = <TData extends MRT_RowData>({\n anchorEl,\n handleEdit,\n row,\n setAnchorEl,\n staticRowIndex,\n table,\n ...rest\n}: MRT_RowActionMenuProps<TData>) => {\n const {\n getState,\n options: {\n editDisplayMode,\n enableEditing,\n icons: { EditIcon },\n localization,\n mrtTheme: { menuBackgroundColor },\n renderRowActionMenuItems,\n },\n } = table;\n const { density } = getState();\n\n const menuItems = useMemo(() => {\n const items: ReactNode[] = [];\n const editItem = parseFromValuesOrFunc(enableEditing, row) &&\n ['modal', 'row'].includes(editDisplayMode!) && (\n <MRT_ActionMenuItem\n key={'edit'}\n icon={<EditIcon />}\n label={localization.edit}\n onClick={handleEdit}\n table={table}\n />\n );\n if (editItem) items.push(editItem);\n const rowActionMenuItems = renderRowActionMenuItems?.({\n closeMenu: () => setAnchorEl(null),\n row,\n staticRowIndex,\n table,\n });\n if (rowActionMenuItems?.length) items.push(...rowActionMenuItems);\n return items;\n }, [renderRowActionMenuItems, row, staticRowIndex, table]);\n\n if (!menuItems.length) return null;\n\n return (\n <Menu\n MenuListProps={{\n dense: density === 'compact',\n sx: {\n backgroundColor: menuBackgroundColor,\n },\n }}\n anchorEl={anchorEl}\n disableScrollLock\n onClick={(event) => event.stopPropagation()}\n onClose={() => setAnchorEl(null)}\n open={!!anchorEl}\n {...rest}\n >\n {menuItems}\n </Menu>\n );\n};\n","import { type MouseEvent, useState } from 'react';\nimport IconButton, { type IconButtonProps } from '@mui/material/IconButton';\nimport Tooltip from '@mui/material/Tooltip';\nimport { MRT_EditActionButtons } from './MRT_EditActionButtons';\nimport {\n type MRT_Cell,\n type MRT_Row,\n type MRT_RowData,\n type MRT_TableInstance,\n} from '../../types';\nimport { getCommonTooltipProps } from '../../utils/style.utils';\nimport { parseFromValuesOrFunc } from '../../utils/utils';\nimport { MRT_RowActionMenu } from '../menus/MRT_RowActionMenu';\n\nconst commonIconButtonStyles = {\n '&:hover': {\n opacity: 1,\n },\n height: '2rem',\n ml: '10px',\n opacity: 0.5,\n transition: 'opacity 150ms',\n width: '2rem',\n};\n\nexport interface MRT_ToggleRowActionMenuButtonProps<TData extends MRT_RowData>\n extends IconButtonProps {\n cell: MRT_Cell<TData>;\n row: MRT_Row<TData>;\n staticRowIndex?: number;\n table: MRT_TableInstance<TData>;\n}\n\nexport const MRT_ToggleRowActionMenuButton = <TData extends MRT_RowData>({\n cell,\n row,\n staticRowIndex,\n table,\n ...rest\n}: MRT_ToggleRowActionMenuButtonProps<TData>) => {\n const {\n getState,\n options: {\n createDisplayMode,\n editDisplayMode,\n enableEditing,\n icons: { EditIcon, MoreHorizIcon },\n localization,\n renderRowActionMenuItems,\n renderRowActions,\n },\n setEditingRow,\n } = table;\n\n const { creatingRow, editingRow } = getState();\n\n const isCreating = creatingRow?.id === row.id;\n const isEditing = editingRow?.id === row.id;\n\n const showEditActionButtons =\n (isCreating && createDisplayMode === 'row') ||\n (isEditing && editDisplayMode === 'row');\n\n const [anchorEl, setAnchorEl] = useState<HTMLElement | null>(null);\n\n const handleOpenRowActionMenu = (event: MouseEvent<HTMLElement>) => {\n event.stopPropagation();\n event.preventDefault();\n setAnchorEl(event.currentTarget);\n };\n\n const handleStartEditMode = (event: MouseEvent) => {\n event.stopPropagation();\n setEditingRow({ ...row });\n setAnchorEl(null);\n };\n\n return (\n <>\n {renderRowActions && !showEditActionButtons ? (\n renderRowActions({ cell, row, staticRowIndex, table })\n ) : showEditActionButtons ? (\n <MRT_EditActionButtons row={row} table={table} />\n ) : !renderRowActionMenuItems &&\n parseFromValuesOrFunc(enableEditing, row) &&\n ['modal', 'row'].includes(editDisplayMode!) ? (\n <Tooltip placement=\"right\" title={localization.edit}>\n <IconButton\n aria-label={localization.edit}\n onClick={handleStartEditMode}\n sx={commonIconButtonStyles}\n {...rest}\n >\n <EditIcon />\n </IconButton>\n </Tooltip>\n ) : renderRowActionMenuItems?.({\n row,\n staticRowIndex,\n table,\n } as any)?.length ? (\n <>\n <Tooltip {...getCommonTooltipProps()} title={localization.rowActions}>\n <IconButton\n aria-label={localization.rowActions}\n onClick={handleOpenRowActionMenu}\n size=\"small\"\n sx={commonIconButtonStyles}\n {...rest}\n >\n <MoreHorizIcon />\n </IconButton>\n </Tooltip>\n <MRT_RowActionMenu\n anchorEl={anchorEl}\n handleEdit={handleStartEditMode}\n row={row}\n setAnchorEl={setAnchorEl}\n staticRowIndex={staticRowIndex}\n table={table}\n />\n </>\n ) : null}\n </>\n );\n};\n","import { MRT_ToggleRowActionMenuButton } from '../../components/buttons/MRT_ToggleRowActionMenuButton';\nimport {\n type MRT_ColumnDef,\n type MRT_RowData,\n type MRT_StatefulTableOptions,\n} from '../../types';\nimport { defaultDisplayColumnProps } from '../../utils/displayColumn.utils';\n\nexport const getMRT_RowActionsColumnDef = <TData extends MRT_RowData>(\n tableOptions: MRT_StatefulTableOptions<TData>,\n): MRT_ColumnDef<TData> => {\n return {\n Cell: ({ cell, row, staticRowIndex, table }) => (\n <MRT_ToggleRowActionMenuButton\n cell={cell}\n row={row}\n staticRowIndex={staticRowIndex}\n table={table}\n />\n ),\n ...defaultDisplayColumnProps({\n header: 'actions',\n id: 'mrt-row-actions',\n size: 70,\n tableOptions,\n }),\n };\n};\n","import { type DragEventHandler } from 'react';\nimport IconButton, { type IconButtonProps } from '@mui/material/IconButton';\nimport Tooltip from '@mui/material/Tooltip';\nimport { type MRT_RowData, type MRT_TableInstance } from '../../types';\nimport { getCommonTooltipProps } from '../../utils/style.utils';\nimport { parseFromValuesOrFunc } from '../../utils/utils';\n\nexport interface MRT_GrabHandleButtonProps<TData extends MRT_RowData>\n extends IconButtonProps {\n iconButtonProps?: IconButtonProps;\n location?: 'column' | 'row';\n onDragEnd: DragEventHandler<HTMLButtonElement>;\n onDragStart: DragEventHandler<HTMLButtonElement>;\n table: MRT_TableInstance<TData>;\n}\n\nexport const MRT_GrabHandleButton = <TData extends MRT_RowData>({\n location,\n table,\n ...rest\n}: MRT_GrabHandleButtonProps<TData>) => {\n const {\n options: {\n icons: { DragHandleIcon },\n localization,\n },\n } = table;\n\n return (\n <Tooltip\n {...getCommonTooltipProps('top')}\n title={rest?.title ?? localization.move}\n >\n <IconButton\n aria-label={rest.title ?? localization.move}\n disableRipple\n draggable=\"true\"\n size=\"small\"\n {...rest}\n onClick={(e) => {\n e.stopPropagation();\n rest?.onClick?.(e);\n }}\n sx={(theme) => ({\n '&:active': {\n cursor: 'grabbing',\n },\n '&:hover': {\n backgroundColor: 'transparent',\n opacity: 1,\n },\n cursor: 'grab',\n m: '0 -0.1rem',\n opacity: location === 'row' ? 1 : 0.5,\n p: '2px',\n transition: 'all 150ms ease-in-out',\n ...(parseFromValuesOrFunc(rest?.sx, theme) as any),\n })}\n title={undefined}\n >\n <DragHandleIcon />\n </IconButton>\n </Tooltip>\n );\n};\n","import { type DragEvent, type RefObject } from 'react';\nimport { type IconButtonProps } from '@mui/material/IconButton';\nimport {\n type MRT_Row,\n type MRT_RowData,\n type MRT_TableInstance,\n} from '../../types';\nimport { parseFromValuesOrFunc } from '../../utils/utils';\nimport { MRT_GrabHandleButton } from '../buttons/MRT_GrabHandleButton';\n\nexport interface MRT_TableBodyRowGrabHandleProps<TData extends MRT_RowData>\n extends IconButtonProps {\n row: MRT_Row<TData>;\n rowRef: RefObject<HTMLTableRowElement | null>;\n table: MRT_TableInstance<TData>;\n}\n\nexport const MRT_TableBodyRowGrabHandle = <TData extends MRT_RowData>({\n row,\n rowRef,\n table,\n ...rest\n}: MRT_TableBodyRowGrabHandleProps<TData>) => {\n const {\n options: { muiRowDragHandleProps },\n } = table;\n\n const iconButtonProps = {\n ...parseFromValuesOrFunc(muiRowDragHandleProps, {\n row,\n table,\n }),\n ...rest,\n };\n\n const handleDragStart = (event: DragEvent<HTMLButtonElement>) => {\n iconButtonProps?.onDragStart?.(event);\n try {\n event.dataTransfer.setDragImage(rowRef.current as HTMLElement, 0, 0);\n } catch (e) {\n console.error(e);\n }\n table.setDraggingRow(row as any);\n };\n\n const handleDragEnd = (event: DragEvent<HTMLButtonElement>) => {\n iconButtonProps?.onDragEnd?.(event);\n table.setDraggingRow(null);\n table.setHoveredRow(null);\n };\n\n return (\n <MRT_GrabHandleButton\n {...iconButtonProps}\n location=\"row\"\n onDragEnd={handleDragEnd}\n onDragStart={handleDragStart}\n table={table}\n />\n );\n};\n","import { type RefObject } from 'react';\nimport { MRT_TableBodyRowGrabHandle } from '../../components/body/MRT_TableBodyRowGrabHandle';\nimport {\n type MRT_ColumnDef,\n type MRT_RowData,\n type MRT_StatefulTableOptions,\n} from '../../types';\nimport { defaultDisplayColumnProps } from '../../utils/displayColumn.utils';\n\nexport const getMRT_RowDragColumnDef = <TData extends MRT_RowData>(\n tableOptions: MRT_StatefulTableOptions<TData>,\n): MRT_ColumnDef<TData> => {\n return {\n Cell: ({ row, rowRef, table }) => (\n <MRT_TableBodyRowGrabHandle\n row={row}\n rowRef={rowRef as RefObject<HTMLTableRowElement | null>}\n table={table}\n />\n ),\n grow: false,\n ...defaultDisplayColumnProps({\n header: 'move',\n id: 'mrt-row-drag',\n size: 60,\n tableOptions,\n }),\n };\n};\n","import IconButton, { type IconButtonProps } from '@mui/material/IconButton';\nimport Tooltip from '@mui/material/Tooltip';\nimport { type MRT_RowData, type MRT_TableInstance } from '../../types';\nimport { getCommonTooltipProps } from '../../utils/style.utils';\nimport { parseFromValuesOrFunc } from '../../utils/utils';\n\nexport interface MRT_ExpandAllButtonProps<TData extends MRT_RowData>\n extends IconButtonProps {\n table: MRT_TableInstance<TData>;\n}\n\nexport const MRT_ExpandAllButton = <TData extends MRT_RowData>({\n table,\n ...rest\n}: MRT_ExpandAllButtonProps<TData>) => {\n const {\n getCanSomeRowsExpand,\n getIsAllRowsExpanded,\n getIsSomeRowsExpanded,\n getState,\n options: {\n icons: { KeyboardDoubleArrowDownIcon },\n localization,\n muiExpandAllButtonProps,\n renderDetailPanel,\n },\n toggleAllRowsExpanded,\n } = table;\n const { density, isLoading } = getState();\n\n const iconButtonProps = {\n ...parseFromValuesOrFunc(muiExpandAllButtonProps, {\n table,\n }),\n ...rest,\n };\n\n const isAllRowsExpanded = getIsAllRowsExpanded();\n\n return (\n <Tooltip\n {...getCommonTooltipProps()}\n title={\n iconButtonProps?.title ??\n (isAllRowsExpanded ? localization.collapseAll : localization.expandAll)\n }\n >\n <span>\n <IconButton\n aria-label={localization.expandAll}\n disabled={\n isLoading || (!renderDetailPanel && !getCanSomeRowsExpand())\n }\n onClick={() => toggleAllRowsExpanded(!isAllRowsExpanded)}\n {...iconButtonProps}\n sx={(theme) => ({\n height: density === 'compact' ? '1.75rem' : '2.25rem',\n mt: density !== 'compact' ? '-0.25rem' : undefined,\n width: density === 'compact' ? '1.75rem' : '2.25rem',\n ...(parseFromValuesOrFunc(iconButtonProps?.sx, theme) as any),\n })}\n title={undefined}\n >\n {iconButtonProps?.children ?? (\n <KeyboardDoubleArrowDownIcon\n style={{\n transform: `rotate(${\n isAllRowsExpanded ? -180 : getIsSomeRowsExpanded() ? -90 : 0\n }deg)`,\n transition: 'transform 150ms',\n }}\n />\n )}\n </IconButton>\n </span>\n </Tooltip>\n );\n};\n","import { type MouseEvent } from 'react';\nimport IconButton, { type IconButtonProps } from '@mui/material/IconButton';\nimport Tooltip from '@mui/material/Tooltip';\nimport { useTheme } from '@mui/material/styles';\nimport {\n type MRT_Row,\n type MRT_RowData,\n type MRT_TableInstance,\n} from '../../types';\nimport { getCommonTooltipProps } from '../../utils/style.utils';\nimport { parseFromValuesOrFunc } from '../../utils/utils';\n\nexport interface MRT_ExpandButtonProps<TData extends MRT_RowData>\n extends IconButtonProps {\n row: MRT_Row<TData>;\n staticRowIndex?: number;\n table: MRT_TableInstance<TData>;\n}\n\nexport const MRT_ExpandButton = <TData extends MRT_RowData>({\n row,\n staticRowIndex,\n table,\n}: MRT_ExpandButtonProps<TData>) => {\n const theme = useTheme();\n const {\n getState,\n options: {\n icons: { ExpandMoreIcon },\n localization,\n muiExpandButtonProps,\n positionExpandColumn,\n renderDetailPanel,\n },\n } = table;\n const { density } = getState();\n\n const iconButtonProps = parseFromValuesOrFunc(muiExpandButtonProps, {\n row,\n staticRowIndex,\n table,\n });\n\n const canExpand = row.getCanExpand();\n const isExpanded = row.getIsExpanded();\n\n const handleToggleExpand = (event: MouseEvent<HTMLButtonElement>) => {\n event.stopPropagation();\n row.toggleExpanded();\n iconButtonProps?.onClick?.(event);\n };\n\n const detailPanel = !!renderDetailPanel?.({ row, table });\n\n return (\n <Tooltip\n disableHoverListener={!canExpand && !detailPanel}\n {...getCommonTooltipProps()}\n title={\n iconButtonProps?.title ??\n (isExpanded ? localization.collapse : localization.expand)\n }\n >\n <span>\n <IconButton\n aria-label={localization.expand}\n disabled={!canExpand && !detailPanel}\n {...iconButtonProps}\n onClick={handleToggleExpand}\n sx={(theme) => ({\n height: density === 'compact' ? '1.75rem' : '2.25rem',\n opacity: !canExpand && !detailPanel ? 0.3 : 1,\n [theme.direction === 'rtl' || positionExpandColumn === 'last'\n ? 'mr'\n : 'ml']: `${row.depth * 16}px`,\n width: density === 'compact' ? '1.75rem' : '2.25rem',\n ...(parseFromValuesOrFunc(iconButtonProps?.sx, theme) as any),\n })}\n title={undefined}\n >\n {iconButtonProps?.children ?? (\n <ExpandMoreIcon\n style={{\n transform: `rotate(${\n !canExpand && !renderDetailPanel\n ? positionExpandColumn === 'last' ||\n theme.direction === 'rtl'\n ? 90\n : -90\n : isExpanded\n ? -180\n : 0\n }deg)`,\n transition: 'transform 150ms',\n }}\n />\n )}\n </IconButton>\n </span>\n </Tooltip>\n );\n};\n","import { type ReactNode } from 'react';\nimport Stack from '@mui/material/Stack';\nimport Tooltip from '@mui/material/Tooltip';\nimport { MRT_ExpandAllButton } from '../../components/buttons/MRT_ExpandAllButton';\nimport { MRT_ExpandButton } from '../../components/buttons/MRT_ExpandButton';\nimport {\n type MRT_ColumnDef,\n type MRT_RowData,\n type MRT_StatefulTableOptions,\n} from '../../types';\nimport { defaultDisplayColumnProps } from '../../utils/displayColumn.utils';\nimport { getCommonTooltipProps } from '../../utils/style.utils';\n\nexport const getMRT_RowExpandColumnDef = <TData extends MRT_RowData>(\n tableOptions: MRT_StatefulTableOptions<TData>,\n): MRT_ColumnDef<TData> => {\n const {\n defaultColumn,\n enableExpandAll,\n groupedColumnMode,\n positionExpandColumn,\n renderDetailPanel,\n state: { grouping },\n } = tableOptions;\n\n const alignProps =\n positionExpandColumn === 'last'\n ? ({\n align: 'right',\n } as const)\n : undefined;\n\n return {\n Cell: ({ cell, column, row, staticRowIndex, table }) => {\n const expandButtonProps = { row, staticRowIndex, table };\n const subRowsLength = row.subRows?.length;\n if (groupedColumnMode === 'remove' && row.groupingColumnId) {\n return (\n <Stack alignItems=\"center\" flexDirection=\"row\" gap=\"0.25rem\">\n <MRT_ExpandButton {...expandButtonProps} />\n <Tooltip\n {...getCommonTooltipProps('right')}\n title={table.getColumn(row.groupingColumnId).columnDef.header}\n >\n <span>{row.groupingValue as ReactNode}</span>\n </Tooltip>\n {!!subRowsLength && <span>({subRowsLength})</span>}\n </Stack>\n );\n } else {\n return (\n <>\n <MRT_ExpandButton {...expandButtonProps} />\n {column.columnDef.GroupedCell?.({ cell, column, row, table })}\n </>\n );\n }\n },\n Header: enableExpandAll\n ? ({ table }) => {\n return (\n <>\n <MRT_ExpandAllButton table={table} />\n {groupedColumnMode === 'remove' &&\n grouping\n ?.map(\n (groupedColumnId) =>\n table.getColumn(groupedColumnId).columnDef.header,\n )\n ?.join(', ')}\n </>\n );\n }\n : undefined,\n muiTableBodyCellProps: alignProps,\n muiTableHeadCellProps: alignProps,\n ...defaultDisplayColumnProps({\n header: 'expand',\n id: 'mrt-row-expand',\n size:\n groupedColumnMode === 'remove'\n ? (defaultColumn?.size ?? 180)\n : renderDetailPanel\n ? enableExpandAll\n ? 60\n : 70\n : 100,\n tableOptions,\n }),\n };\n};\n","import {\n type MRT_ColumnDef,\n type MRT_RowData,\n type MRT_StatefulTableOptions,\n} from '../../types';\nimport { defaultDisplayColumnProps } from '../../utils/displayColumn.utils';\n\nexport const getMRT_RowNumbersColumnDef = <TData extends MRT_RowData>(\n tableOptions: MRT_StatefulTableOptions<TData>,\n): MRT_ColumnDef<TData> => {\n const { localization, rowNumberDisplayMode } = tableOptions;\n const {\n pagination: { pageIndex, pageSize },\n } = tableOptions.state;\n\n return {\n Cell: ({ row, staticRowIndex }) =>\n ((rowNumberDisplayMode === 'static'\n ? (staticRowIndex || 0) + (pageSize || 0) * (pageIndex || 0)\n : row.index) ?? 0) + 1,\n Header: () => localization.rowNumber,\n grow: false,\n ...defaultDisplayColumnProps({\n header: 'rowNumbers',\n id: 'mrt-row-numbers',\n size: 50,\n tableOptions,\n }),\n };\n};\n","import { type MouseEvent, useState } from 'react';\nimport { type RowPinningPosition } from '@tanstack/react-table';\nimport IconButton, { type IconButtonProps } from '@mui/material/IconButton';\nimport Tooltip from '@mui/material/Tooltip';\nimport {\n type MRT_Row,\n type MRT_RowData,\n type MRT_TableInstance,\n} from '../../types';\nimport { getCommonTooltipProps } from '../../utils/style.utils';\nimport { parseFromValuesOrFunc } from '../../utils/utils';\n\nexport interface MRT_RowPinButtonProps<TData extends MRT_RowData>\n extends IconButtonProps {\n pinningPosition: RowPinningPosition;\n row: MRT_Row<TData>;\n table: MRT_TableInstance<TData>;\n}\n\nexport const MRT_RowPinButton = <TData extends MRT_RowData>({\n pinningPosition,\n row,\n table,\n ...rest\n}: MRT_RowPinButtonProps<TData>) => {\n const {\n options: {\n icons: { CloseIcon, PushPinIcon },\n localization,\n rowPinningDisplayMode,\n },\n } = table;\n\n const isPinned = row.getIsPinned();\n\n const [tooltipOpened, setTooltipOpened] = useState(false);\n\n const handleTogglePin = (event: MouseEvent<HTMLButtonElement>) => {\n setTooltipOpened(false);\n event.stopPropagation();\n row.pin(isPinned ? false : pinningPosition);\n };\n\n return (\n <Tooltip\n {...getCommonTooltipProps()}\n open={tooltipOpened}\n title={isPinned ? localization.unpin : localization.pin}\n >\n <IconButton\n aria-label={localization.pin}\n onBlur={() => setTooltipOpened(false)}\n onClick={handleTogglePin}\n onFocus={() => setTooltipOpened(true)}\n onMouseEnter={() => setTooltipOpened(true)}\n onMouseLeave={() => setTooltipOpened(false)}\n size=\"small\"\n {...rest}\n sx={(theme) => ({\n height: '24px',\n width: '24px',\n ...(parseFromValuesOrFunc(rest?.sx, theme) as any),\n })}\n >\n {isPinned ? (\n <CloseIcon />\n ) : (\n <PushPinIcon\n fontSize=\"small\"\n style={{\n transform: `rotate(${\n rowPinningDisplayMode === 'sticky'\n ? 135\n : pinningPosition === 'top'\n ? 180\n : 0\n }deg)`,\n }}\n />\n )}\n </IconButton>\n </Tooltip>\n );\n};\n","import Box from '@mui/material/Box';\nimport { type IconButtonProps } from '@mui/material/IconButton';\nimport {\n type MRT_Row,\n type MRT_RowData,\n type MRT_TableInstance,\n} from '../../types';\nimport { parseFromValuesOrFunc } from '../../utils/utils';\nimport { MRT_RowPinButton } from '../buttons/MRT_RowPinButton';\n\nexport interface MRT_TableBodyRowPinButtonProps<TData extends MRT_RowData>\n extends IconButtonProps {\n row: MRT_Row<TData>;\n table: MRT_TableInstance<TData>;\n}\n\nexport const MRT_TableBodyRowPinButton = <TData extends MRT_RowData>({\n row,\n table,\n ...rest\n}: MRT_TableBodyRowPinButtonProps<TData>) => {\n const {\n getState,\n options: { enableRowPinning, rowPinningDisplayMode },\n } = table;\n const { density } = getState();\n\n const canPin = parseFromValuesOrFunc(enableRowPinning, row as any);\n\n if (!canPin) return null;\n\n const rowPinButtonProps = {\n row,\n table,\n ...rest,\n };\n\n if (rowPinningDisplayMode === 'top-and-bottom' && !row.getIsPinned()) {\n return (\n <Box\n sx={{\n display: 'flex',\n flexDirection: density === 'compact' ? 'row' : 'column',\n }}\n >\n <MRT_RowPinButton pinningPosition=\"top\" {...rowPinButtonProps} />\n <MRT_RowPinButton pinningPosition=\"bottom\" {...rowPinButtonProps} />\n </Box>\n );\n }\n\n return (\n <MRT_RowPinButton\n pinningPosition={rowPinningDisplayMode === 'bottom' ? 'bottom' : 'top'}\n {...rowPinButtonProps}\n />\n );\n};\n","import { MRT_TableBodyRowPinButton } from '../../components/body/MRT_TableBodyRowPinButton';\nimport {\n type MRT_ColumnDef,\n type MRT_RowData,\n type MRT_StatefulTableOptions,\n} from '../../types';\nimport { defaultDisplayColumnProps } from '../../utils/displayColumn.utils';\n\nexport const getMRT_RowPinningColumnDef = <TData extends MRT_RowData>(\n tableOptions: MRT_StatefulTableOptions<TData>,\n): MRT_ColumnDef<TData> => {\n return {\n Cell: ({ row, table }) => (\n <MRT_TableBodyRowPinButton row={row} table={table} />\n ),\n grow: false,\n ...defaultDisplayColumnProps({\n header: 'pin',\n id: 'mrt-row-pin',\n size: 60,\n tableOptions,\n }),\n };\n};\n","import { type MouseEvent } from 'react';\nimport Checkbox, { type CheckboxProps } from '@mui/material/Checkbox';\nimport Radio, { type RadioProps } from '@mui/material/Radio';\nimport Tooltip from '@mui/material/Tooltip';\nimport { type Theme } from '@mui/material/styles';\nimport {\n type MRT_Row,\n type MRT_RowData,\n type MRT_TableInstance,\n} from '../../types';\nimport {\n getIsRowSelected,\n getMRT_RowSelectionHandler,\n getMRT_SelectAllHandler,\n} from '../../utils/row.utils';\nimport { getCommonTooltipProps } from '../../utils/style.utils';\nimport { parseFromValuesOrFunc } from '../../utils/utils';\n\nexport interface MRT_SelectCheckboxProps<TData extends MRT_RowData>\n extends CheckboxProps {\n row?: MRT_Row<TData>;\n staticRowIndex?: number;\n table: MRT_TableInstance<TData>;\n}\n\nexport const MRT_SelectCheckbox = <TData extends MRT_RowData>({\n row,\n staticRowIndex,\n table,\n ...rest\n}: MRT_SelectCheckboxProps<TData>) => {\n const {\n getState,\n options: {\n enableMultiRowSelection,\n localization,\n muiSelectAllCheckboxProps,\n muiSelectCheckboxProps,\n selectAllMode,\n },\n } = table;\n const { density, isLoading } = getState();\n\n const selectAll = !row;\n\n const allRowsSelected = selectAll\n ? selectAllMode === 'page'\n ? table.getIsAllPageRowsSelected()\n : table.getIsAllRowsSelected()\n : undefined;\n\n const isChecked = selectAll\n ? allRowsSelected\n : getIsRowSelected({ row, table });\n\n const checkboxProps = {\n ...(selectAll\n ? parseFromValuesOrFunc(muiSelectAllCheckboxProps, { table })\n : parseFromValuesOrFunc(muiSelectCheckboxProps, {\n row,\n staticRowIndex,\n table,\n })),\n ...rest,\n };\n\n const onSelectionChange = row\n ? getMRT_RowSelectionHandler({\n row,\n staticRowIndex,\n table,\n })\n : undefined;\n\n const onSelectAllChange = getMRT_SelectAllHandler({ table });\n\n const commonProps = {\n 'aria-label': selectAll\n ? localization.toggleSelectAll\n : localization.toggleSelectRow,\n checked: isChecked,\n disabled:\n isLoading || (row && !row.getCanSelect()) || row?.id === 'mrt-row-create',\n inputProps: {\n 'aria-label': selectAll\n ? localization.toggleSelectAll\n : localization.toggleSelectRow,\n },\n onChange: (event) => {\n event.stopPropagation();\n selectAll ? onSelectAllChange(event) : onSelectionChange!(event);\n },\n size: (density === 'compact' ? 'small' : 'medium') as 'medium' | 'small',\n ...checkboxProps,\n onClick: (e: MouseEvent<HTMLButtonElement>) => {\n e.stopPropagation();\n checkboxProps?.onClick?.(e);\n },\n sx: (theme: Theme) => ({\n height: density === 'compact' ? '1.75rem' : '2.5rem',\n m: density !== 'compact' ? '-0.4rem' : undefined,\n width: density === 'compact' ? '1.75rem' : '2.5rem',\n zIndex: 0,\n ...parseFromValuesOrFunc(checkboxProps?.sx, theme),\n }),\n title: undefined,\n } as CheckboxProps | RadioProps;\n\n return (\n <Tooltip\n {...getCommonTooltipProps()}\n title={\n checkboxProps?.title ??\n (selectAll\n ? localization.toggleSelectAll\n : localization.toggleSelectRow)\n }\n >\n {enableMultiRowSelection === false ? (\n <Radio {...(commonProps as any)} />\n ) : (\n <Checkbox\n indeterminate={\n !isChecked && selectAll\n ? table.getIsSomeRowsSelected()\n : row?.getIsSomeSelected() && row.getCanSelectSubRows()\n }\n {...commonProps}\n />\n )}\n </Tooltip>\n );\n};\n","import { MRT_SelectCheckbox } from '../../components/inputs/MRT_SelectCheckbox';\nimport {\n type MRT_ColumnDef,\n type MRT_RowData,\n type MRT_StatefulTableOptions,\n} from '../../types';\nimport { defaultDisplayColumnProps } from '../../utils/displayColumn.utils';\n\nexport const getMRT_RowSelectColumnDef = <TData extends MRT_RowData>(\n tableOptions: MRT_StatefulTableOptions<TData>,\n): MRT_ColumnDef<TData> => {\n const { enableMultiRowSelection, enableSelectAll } = tableOptions;\n\n return {\n Cell: ({ row, staticRowIndex, table }) => (\n <MRT_SelectCheckbox\n row={row}\n staticRowIndex={staticRowIndex}\n table={table}\n />\n ),\n Header:\n enableSelectAll && enableMultiRowSelection\n ? ({ table }) => <MRT_SelectCheckbox table={table} />\n : undefined,\n grow: false,\n ...defaultDisplayColumnProps({\n header: 'select',\n id: 'mrt-row-select',\n size: enableSelectAll ? 60 : 70,\n tableOptions,\n }),\n };\n};\n","import ArrowDownwardIcon from '@mui/icons-material/ArrowDownward';\nimport ArrowRightIcon from '@mui/icons-material/ArrowRight';\nimport CancelIcon from '@mui/icons-material/Cancel';\nimport ChevronLeftIcon from '@mui/icons-material/ChevronLeft';\nimport ChevronRightIcon from '@mui/icons-material/ChevronRight';\nimport ClearAllIcon from '@mui/icons-material/ClearAll';\nimport CloseIcon from '@mui/icons-material/Close';\nimport ContentCopy from '@mui/icons-material/ContentCopy';\nimport DensityLargeIcon from '@mui/icons-material/DensityLarge';\nimport DensityMediumIcon from '@mui/icons-material/DensityMedium';\nimport DensitySmallIcon from '@mui/icons-material/DensitySmall';\nimport DragHandleIcon from '@mui/icons-material/DragHandle';\nimport DynamicFeedIcon from '@mui/icons-material/DynamicFeed';\nimport EditIcon from '@mui/icons-material/Edit';\nimport ExpandMoreIcon from '@mui/icons-material/ExpandMore';\nimport FilterAltIcon from '@mui/icons-material/FilterAlt';\nimport FilterListIcon from '@mui/icons-material/FilterList';\nimport FilterListOffIcon from '@mui/icons-material/FilterListOff';\nimport FirstPageIcon from '@mui/icons-material/FirstPage';\nimport FullscreenIcon from '@mui/icons-material/Fullscreen';\nimport FullscreenExitIcon from '@mui/icons-material/FullscreenExit';\nimport KeyboardDoubleArrowDownIcon from '@mui/icons-material/KeyboardDoubleArrowDown';\nimport LastPageIcon from '@mui/icons-material/LastPage';\nimport MoreHorizIcon from '@mui/icons-material/MoreHoriz';\nimport MoreVertIcon from '@mui/icons-material/MoreVert';\nimport PushPinIcon from '@mui/icons-material/PushPin';\nimport RestartAltIcon from '@mui/icons-material/RestartAlt';\nimport SaveIcon from '@mui/icons-material/Save';\nimport SearchIcon from '@mui/icons-material/Search';\nimport SearchOffIcon from '@mui/icons-material/SearchOff';\nimport SortIcon from '@mui/icons-material/Sort';\nimport SyncAltIcon from '@mui/icons-material/SyncAlt';\nimport ViewColumnIcon from '@mui/icons-material/ViewColumn';\nimport VisibilityOffIcon from '@mui/icons-material/VisibilityOff';\n\nexport const MRT_Default_Icons = {\n ArrowDownwardIcon,\n ArrowRightIcon,\n CancelIcon,\n ChevronLeftIcon,\n ChevronRightIcon,\n ClearAllIcon,\n CloseIcon,\n ContentCopy,\n DensityLargeIcon,\n DensityMediumIcon,\n DensitySmallIcon,\n DragHandleIcon,\n DynamicFeedIcon,\n EditIcon,\n ExpandMoreIcon,\n FilterAltIcon,\n FilterListIcon,\n FilterListOffIcon,\n FirstPageIcon,\n FullscreenExitIcon,\n FullscreenIcon,\n KeyboardDoubleArrowDownIcon,\n LastPageIcon,\n MoreHorizIcon,\n MoreVertIcon,\n PushPinIcon,\n RestartAltIcon,\n SaveIcon,\n SearchIcon,\n SearchOffIcon,\n SortIcon,\n SyncAltIcon,\n ViewColumnIcon,\n VisibilityOffIcon,\n} as const;\n\nexport type MRT_Icons = Record<keyof typeof MRT_Default_Icons, any>;\n","import { type MRT_Localization } from '..';\n\nexport const MRT_Localization_EN: MRT_Localization = {\n language: 'en',\n actions: 'Actions',\n and: 'and',\n cancel: 'Cancel',\n changeFilterMode: 'Change filter mode',\n changeSearchMode: 'Change search mode',\n clearFilter: 'Clear filter',\n clearSearch: 'Clear search',\n clearSelection: 'Clear selection',\n clearSort: 'Clear sort',\n clickToCopy: 'Click to copy',\n copy: 'Copy',\n collapse: 'Collapse',\n collapseAll: 'Collapse all',\n columnActions: 'Column Actions',\n copiedToClipboard: 'Copied to clipboard',\n dropToGroupBy: 'Drop to group by {column}',\n edit: 'Edit',\n expand: 'Expand',\n expandAll: 'Expand all',\n filterArrIncludes: 'Includes',\n filterArrIncludesAll: 'Includes all',\n filterArrIncludesSome: 'Includes',\n filterBetween: 'Between',\n filterBetweenInclusive: 'Between Inclusive',\n filterByColumn: 'Filter by {column}',\n filterContains: 'Contains',\n filterEmpty: 'Empty',\n filterEndsWith: 'Ends With',\n filterEquals: 'Equals',\n filterEqualsString: 'Equals',\n filterFuzzy: 'Fuzzy',\n filterGreaterThan: 'Greater Than',\n filterGreaterThanOrEqualTo: 'Greater Than Or Equal To',\n filterInNumberRange: 'Between',\n filterIncludesString: 'Contains',\n filterIncludesStringSensitive: 'Contains',\n filterLessThan: 'Less Than',\n filterLessThanOrEqualTo: 'Less Than Or Equal To',\n filterMode: 'Filter Mode: {filterType}',\n filterNotEmpty: 'Not Empty',\n filterNotEquals: 'Not Equals',\n filterStartsWith: 'Starts With',\n filterWeakEquals: 'Equals',\n filteringByColumn: 'Filtering by {column} - {filterType} {filterValue}',\n goToFirstPage: 'Go to first page',\n goToLastPage: 'Go to last page',\n goToNextPage: 'Go to next page',\n goToPreviousPage: 'Go to previous page',\n grab: 'Grab',\n groupByColumn: 'Group by {column}',\n groupedBy: 'Grouped by ',\n hideAll: 'Hide all',\n hideColumn: 'Hide {column} column',\n max: 'Max',\n min: 'Min',\n move: 'Move',\n noRecordsToDisplay: 'No records to display',\n noResultsFound: 'No results found',\n of: 'of',\n or: 'or',\n pin: 'Pin',\n pinToLeft: 'Pin to left',\n pinToRight: 'Pin to right',\n resetColumnSize: 'Reset column size',\n resetOrder: 'Reset order',\n rowActions: 'Row Actions',\n rowNumber: '#',\n rowNumbers: 'Row Numbers',\n rowsPerPage: 'Rows per page',\n save: 'Save',\n search: 'Search',\n selectedCountOfRowCountRowsSelected:\n '{selectedCount} of {rowCount} row(s) selected',\n select: 'Select',\n showAll: 'Show all',\n showAllColumns: 'Show all columns',\n showHideColumns: 'Show/Hide columns',\n showHideFilters: 'Show/Hide filters',\n showHideSearch: 'Show/Hide search',\n sortByColumnAsc: 'Sort by {column} ascending',\n sortByColumnDesc: 'Sort by {column} descending',\n sortedByColumnAsc: 'Sorted by {column} ascending',\n sortedByColumnDesc: 'Sorted by {column} descending',\n thenBy: ', then by ',\n toggleDensity: 'Toggle density',\n toggleFullScreen: 'Toggle full screen',\n toggleSelectAll: 'Toggle select all',\n toggleSelectRow: 'Toggle select row',\n toggleVisibility: 'Toggle visibility',\n ungroupByColumn: 'Ungroup by {column}',\n unpin: 'Unpin',\n unpinAll: 'Unpin all',\n};\n","import { useId, useMemo } from 'react';\nimport {\n getCoreRowModel,\n getExpandedRowModel,\n getFacetedMinMaxValues,\n getFacetedRowModel,\n getFacetedUniqueValues,\n getFilteredRowModel,\n getGroupedRowModel,\n getPaginationRowModel,\n getSortedRowModel,\n} from '@tanstack/react-table';\nimport { useTheme } from '@mui/material/styles';\nimport { MRT_AggregationFns } from '../fns/aggregationFns';\nimport { MRT_FilterFns } from '../fns/filterFns';\nimport { MRT_SortingFns } from '../fns/sortingFns';\nimport { MRT_Default_Icons } from '../icons';\nimport { MRT_Localization_EN } from '../locales/en';\nimport {\n type MRT_DefinedTableOptions,\n type MRT_RowData,\n type MRT_TableOptions,\n} from '../types';\nimport { getMRTTheme } from '../utils/style.utils';\n\nexport const MRT_DefaultColumn = {\n filterVariant: 'text',\n maxSize: 1000,\n minSize: 40,\n size: 180,\n} as const;\n\nexport const MRT_DefaultDisplayColumn = {\n columnDefType: 'display',\n enableClickToCopy: false,\n enableColumnActions: false,\n enableColumnDragging: false,\n enableColumnFilter: false,\n enableColumnOrdering: false,\n enableEditing: false,\n enableGlobalFilter: false,\n enableGrouping: false,\n enableHiding: false,\n enableResizing: false,\n enableSorting: false,\n} as const;\n\nexport const useMRT_TableOptions: <TData extends MRT_RowData>(\n tableOptions: MRT_TableOptions<TData>,\n) => MRT_DefinedTableOptions<TData> = <TData extends MRT_RowData>({\n aggregationFns,\n autoResetExpanded = false,\n columnFilterDisplayMode = 'subheader',\n columnResizeDirection,\n columnResizeMode = 'onChange',\n createDisplayMode = 'modal',\n defaultColumn,\n defaultDisplayColumn,\n editDisplayMode = 'modal',\n enableBatchRowSelection = true,\n enableBottomToolbar = true,\n enableColumnActions = true,\n enableColumnFilters = true,\n enableColumnOrdering = false,\n enableColumnPinning = false,\n enableColumnResizing = false,\n enableColumnVirtualization,\n enableDensityToggle = true,\n enableExpandAll = true,\n enableExpanding,\n enableFacetedValues = false,\n enableFilterMatchHighlighting = true,\n enableFilters = true,\n enableFullScreenToggle = true,\n enableGlobalFilter = true,\n enableGlobalFilterRankedResults = true,\n enableGrouping = false,\n enableHiding = true,\n enableKeyboardShortcuts = true,\n enableMultiRowSelection = true,\n enableMultiSort = true,\n enablePagination = true,\n enableRowPinning = false,\n enableRowSelection = false,\n enableRowVirtualization,\n enableSelectAll = true,\n enableSorting = true,\n enableStickyHeader = false,\n enableTableFooter = true,\n enableTableHead = true,\n enableToolbarInternalActions = true,\n enableTopToolbar = true,\n filterFns,\n icons,\n id = useId(),\n layoutMode,\n localization,\n manualFiltering,\n manualGrouping,\n manualPagination,\n manualSorting,\n mrtTheme,\n paginationDisplayMode = 'default',\n positionActionsColumn = 'first',\n positionCreatingRow = 'top',\n positionExpandColumn = 'first',\n positionGlobalFilter = 'right',\n positionPagination = 'bottom',\n positionToolbarAlertBanner = 'top',\n positionToolbarDropZone = 'top',\n rowNumberDisplayMode = 'static',\n rowPinningDisplayMode = 'sticky',\n selectAllMode = 'page',\n sortingFns,\n ...rest\n}: MRT_TableOptions<TData>) => {\n const theme = useTheme();\n\n icons = useMemo(() => ({ ...MRT_Default_Icons, ...icons }), [icons]);\n localization = useMemo(\n () => ({\n ...MRT_Localization_EN,\n ...localization,\n }),\n [localization],\n );\n mrtTheme = useMemo(() => getMRTTheme(mrtTheme, theme), [mrtTheme, theme]);\n aggregationFns = useMemo(\n () => ({ ...MRT_AggregationFns, ...aggregationFns }),\n [],\n );\n filterFns = useMemo(() => ({ ...MRT_FilterFns, ...filterFns }), []);\n sortingFns = useMemo(() => ({ ...MRT_SortingFns, ...sortingFns }), []);\n defaultColumn = useMemo(\n () => ({ ...MRT_DefaultColumn, ...defaultColumn }),\n [defaultColumn],\n );\n defaultDisplayColumn = useMemo(\n () => ({\n ...MRT_DefaultDisplayColumn,\n ...defaultDisplayColumn,\n }),\n [defaultDisplayColumn],\n );\n //cannot be changed after initialization\n [enableColumnVirtualization, enableRowVirtualization] = useMemo(\n () => [enableColumnVirtualization, enableRowVirtualization],\n [],\n );\n\n if (!columnResizeDirection) {\n columnResizeDirection = theme.direction || 'ltr';\n }\n\n layoutMode =\n layoutMode || (enableColumnResizing ? 'grid-no-grow' : 'semantic');\n if (\n layoutMode === 'semantic' &&\n (enableRowVirtualization || enableColumnVirtualization)\n ) {\n layoutMode = 'grid';\n }\n\n if (enableRowVirtualization) {\n enableStickyHeader = true;\n }\n\n if (enablePagination === false && manualPagination === undefined) {\n manualPagination = true;\n }\n\n if (!rest.data?.length) {\n manualFiltering = true;\n manualGrouping = true;\n manualPagination = true;\n manualSorting = true;\n }\n\n return {\n aggregationFns,\n autoResetExpanded,\n columnFilterDisplayMode,\n columnResizeDirection,\n columnResizeMode,\n createDisplayMode,\n defaultColumn,\n defaultDisplayColumn,\n editDisplayMode,\n enableBatchRowSelection,\n enableBottomToolbar,\n enableColumnActions,\n enableColumnFilters,\n enableColumnOrdering,\n enableColumnPinning,\n enableColumnResizing,\n enableColumnVirtualization,\n enableDensityToggle,\n enableExpandAll,\n enableExpanding,\n enableFacetedValues,\n enableFilterMatchHighlighting,\n enableFilters,\n enableFullScreenToggle,\n enableGlobalFilter,\n enableGlobalFilterRankedResults,\n enableGrouping,\n enableHiding,\n enableKeyboardShortcuts,\n enableMultiRowSelection,\n enableMultiSort,\n enablePagination,\n enableRowPinning,\n enableRowSelection,\n enableRowVirtualization,\n enableSelectAll,\n enableSorting,\n enableStickyHeader,\n enableTableFooter,\n enableTableHead,\n enableToolbarInternalActions,\n enableTopToolbar,\n filterFns,\n getCoreRowModel: getCoreRowModel(),\n getExpandedRowModel:\n enableExpanding || enableGrouping ? getExpandedRowModel() : undefined,\n getFacetedMinMaxValues: enableFacetedValues\n ? getFacetedMinMaxValues()\n : undefined,\n getFacetedRowModel: enableFacetedValues ? getFacetedRowModel() : undefined,\n getFacetedUniqueValues: enableFacetedValues\n ? getFacetedUniqueValues()\n : undefined,\n getFilteredRowModel:\n (enableColumnFilters || enableGlobalFilter || enableFilters) &&\n !manualFiltering\n ? getFilteredRowModel()\n : undefined,\n getGroupedRowModel:\n enableGrouping && !manualGrouping ? getGroupedRowModel() : undefined,\n getPaginationRowModel:\n enablePagination && !manualPagination\n ? getPaginationRowModel()\n : undefined,\n getSortedRowModel:\n enableSorting && !manualSorting ? getSortedRowModel() : undefined,\n getSubRows: (row) => row?.subRows,\n icons,\n id,\n layoutMode,\n localization,\n manualFiltering,\n manualGrouping,\n manualPagination,\n manualSorting,\n mrtTheme,\n paginationDisplayMode,\n positionActionsColumn,\n positionCreatingRow,\n positionExpandColumn,\n positionGlobalFilter,\n positionPagination,\n positionToolbarAlertBanner,\n positionToolbarDropZone,\n rowNumberDisplayMode,\n rowPinningDisplayMode,\n selectAllMode,\n sortingFns,\n ...rest,\n } as MRT_DefinedTableOptions<TData>;\n};\n","import { MRT_DefaultDisplayColumn } from '../useMRT_TableOptions';\nimport {\n type MRT_ColumnDef,\n type MRT_RowData,\n type MRT_StatefulTableOptions,\n} from '../../types';\nimport { defaultDisplayColumnProps } from '../../utils/displayColumn.utils';\n\nconst blankColProps = {\n children: null,\n sx: {\n minWidth: 0,\n p: 0,\n width: 0,\n },\n};\n\nexport const getMRT_RowSpacerColumnDef = <TData extends MRT_RowData>(\n tableOptions: MRT_StatefulTableOptions<TData>,\n): MRT_ColumnDef<TData> => {\n return {\n ...defaultDisplayColumnProps({\n id: 'mrt-row-spacer',\n size: 0,\n tableOptions,\n }),\n grow: true,\n ...MRT_DefaultDisplayColumn,\n muiTableBodyCellProps: blankColProps,\n muiTableFooterCellProps: blankColProps,\n muiTableHeadCellProps: blankColProps,\n };\n};\n","import { useEffect, useReducer, useRef } from 'react';\nimport {\n type MRT_RowData,\n type MRT_SortingState,\n type MRT_TableInstance,\n} from '../types';\nimport { getDefaultColumnOrderIds } from '../utils/displayColumn.utils';\nimport { getCanRankRows } from '../utils/row.utils';\n\nexport const useMRT_Effects = <TData extends MRT_RowData>(\n table: MRT_TableInstance<TData>,\n) => {\n const {\n getIsSomeRowsPinned,\n getPrePaginationRowModel,\n getState,\n options: { enablePagination, enableRowPinning, rowCount },\n } = table;\n const {\n columnOrder,\n density,\n globalFilter,\n isFullScreen,\n isLoading,\n pagination,\n showSkeletons,\n sorting,\n } = getState();\n\n const totalColumnCount = table.options.columns.length;\n const totalRowCount = rowCount ?? getPrePaginationRowModel().rows.length;\n\n const rerender = useReducer(() => ({}), {})[1];\n const initialBodyHeight = useRef<string>(null);\n const previousTop = useRef<number>(null);\n\n useEffect(() => {\n if (typeof window !== 'undefined') {\n initialBodyHeight.current = document.body.style.height;\n }\n }, []);\n\n //hide scrollbars when table is in full screen mode, preserve body scroll position after full screen exit\n useEffect(() => {\n if (typeof window !== 'undefined') {\n if (isFullScreen) {\n previousTop.current = document.body.getBoundingClientRect().top; //save scroll position\n document.body.style.height = '100dvh'; //hide page scrollbars when table is in full screen mode\n } else {\n document.body.style.height = initialBodyHeight.current as string;\n if (!previousTop.current) return;\n //restore scroll position\n window.scrollTo({\n behavior: 'instant',\n top: -1 * (previousTop.current as number),\n });\n }\n }\n }, [isFullScreen]);\n\n //recalculate column order when columns change or features are toggled on/off\n useEffect(() => {\n if (totalColumnCount !== columnOrder.length) {\n table.setColumnOrder(getDefaultColumnOrderIds(table.options));\n }\n }, [totalColumnCount]);\n\n //if page index is out of bounds, set it to the last page\n useEffect(() => {\n if (!enablePagination || isLoading || showSkeletons) return;\n const { pageIndex, pageSize } = pagination;\n const totalPages: number =\n totalRowCount > 0 ? Math.ceil(totalRowCount / pageSize) : 1;\n const isOutOfBounds: boolean = pageIndex < 0 || pageIndex >= totalPages;\n\n if (isOutOfBounds) {\n table.setPageIndex(totalPages - 1);\n }\n }, [totalRowCount, enablePagination, isLoading, showSkeletons]);\n\n //turn off sort when global filter is looking for ranked results\n const appliedSort = useRef<MRT_SortingState>(sorting);\n useEffect(() => {\n if (sorting.length) {\n appliedSort.current = sorting;\n }\n }, [sorting]);\n\n useEffect(() => {\n if (!getCanRankRows(table)) return;\n if (globalFilter) {\n table.setSorting([]);\n } else {\n table.setSorting(() => appliedSort.current || []);\n }\n }, [globalFilter]);\n\n //fix pinned row top style when density changes\n useEffect(() => {\n if (enableRowPinning && getIsSomeRowsPinned()) {\n setTimeout(() => {\n rerender();\n }, 150);\n }\n }, [density]);\n};\n","import { useMemo, useRef, useState } from 'react';\nimport { useReactTable } from '@tanstack/react-table';\nimport {\n type MRT_Cell,\n type MRT_Column,\n type MRT_ColumnDef,\n type MRT_ColumnFilterFnsState,\n type MRT_ColumnOrderState,\n type MRT_ColumnSizingInfoState,\n type MRT_DefinedTableOptions,\n type MRT_DensityState,\n type MRT_FilterOption,\n type MRT_GroupingState,\n type MRT_PaginationState,\n type MRT_Row,\n type MRT_RowData,\n type MRT_StatefulTableOptions,\n type MRT_TableInstance,\n type MRT_TableState,\n type MRT_Updater,\n} from '../types';\nimport {\n getAllLeafColumnDefs,\n getColumnId,\n getDefaultColumnFilterFn,\n prepareColumns,\n} from '../utils/column.utils';\nimport {\n getDefaultColumnOrderIds,\n showRowActionsColumn,\n showRowDragColumn,\n showRowExpandColumn,\n showRowNumbersColumn,\n showRowPinningColumn,\n showRowSelectionColumn,\n showRowSpacerColumn,\n} from '../utils/displayColumn.utils';\nimport { createRow } from '../utils/tanstack.helpers';\nimport { getMRT_RowActionsColumnDef } from './display-columns/getMRT_RowActionsColumnDef';\nimport { getMRT_RowDragColumnDef } from './display-columns/getMRT_RowDragColumnDef';\nimport { getMRT_RowExpandColumnDef } from './display-columns/getMRT_RowExpandColumnDef';\nimport { getMRT_RowNumbersColumnDef } from './display-columns/getMRT_RowNumbersColumnDef';\nimport { getMRT_RowPinningColumnDef } from './display-columns/getMRT_RowPinningColumnDef';\nimport { getMRT_RowSelectColumnDef } from './display-columns/getMRT_RowSelectColumnDef';\nimport { getMRT_RowSpacerColumnDef } from './display-columns/getMRT_RowSpacerColumnDef';\nimport { useMRT_Effects } from './useMRT_Effects';\n\n/**\n * The MRT hook that wraps the TanStack useReactTable hook and adds additional functionality\n * @param definedTableOptions - table options with proper defaults set\n * @returns the MRT table instance\n */\nexport const useMRT_TableInstance = <TData extends MRT_RowData>(\n definedTableOptions: MRT_DefinedTableOptions<TData>,\n): MRT_TableInstance<TData> => {\n const lastSelectedRowId = useRef<null | string>(null);\n const actionCellRef = useRef<HTMLTableCellElement>(null);\n const bottomToolbarRef = useRef<HTMLDivElement>(null);\n const editInputRefs = useRef<Record<string, HTMLInputElement>>({});\n const filterInputRefs = useRef<Record<string, HTMLInputElement>>({});\n const searchInputRef = useRef<HTMLInputElement>(null);\n const tableContainerRef = useRef<HTMLDivElement>(null);\n const tableHeadCellRefs = useRef<Record<string, HTMLTableCellElement>>({});\n const tablePaperRef = useRef<HTMLDivElement>(null);\n const topToolbarRef = useRef<HTMLDivElement>(null);\n const tableHeadRef = useRef<HTMLTableSectionElement>(null);\n const tableFooterRef = useRef<HTMLTableSectionElement>(null);\n\n //transform initial state with proper column order\n const initialState: Partial<MRT_TableState<TData>> = useMemo(() => {\n const initState = definedTableOptions.initialState ?? {};\n initState.columnOrder =\n initState.columnOrder ??\n getDefaultColumnOrderIds({\n ...definedTableOptions,\n state: {\n ...definedTableOptions.initialState,\n ...definedTableOptions.state,\n },\n } as MRT_StatefulTableOptions<TData>);\n initState.globalFilterFn = definedTableOptions.globalFilterFn ?? 'fuzzy';\n return initState;\n }, []);\n\n definedTableOptions.initialState = initialState;\n\n const [actionCell, setActionCell] = useState<MRT_Cell<TData> | null>(\n initialState.actionCell ?? null,\n );\n const [creatingRow, _setCreatingRow] = useState<MRT_Row<TData> | null>(\n initialState.creatingRow ?? null,\n );\n const [columnFilterFns, setColumnFilterFns] =\n useState<MRT_ColumnFilterFnsState>(() =>\n Object.assign(\n {},\n ...getAllLeafColumnDefs(\n definedTableOptions.columns as MRT_ColumnDef<TData>[],\n ).map((col) => ({\n [getColumnId(col)]:\n col.filterFn instanceof Function\n ? (col.filterFn.name ?? 'custom')\n : (col.filterFn ??\n initialState?.columnFilterFns?.[getColumnId(col)] ??\n getDefaultColumnFilterFn(col)),\n })),\n ),\n );\n const [columnOrder, onColumnOrderChange] = useState<MRT_ColumnOrderState>(\n initialState.columnOrder ?? [],\n );\n const [columnSizingInfo, onColumnSizingInfoChange] =\n useState<MRT_ColumnSizingInfoState>(\n initialState.columnSizingInfo ?? ({} as MRT_ColumnSizingInfoState),\n );\n const [density, setDensity] = useState<MRT_DensityState>(\n initialState?.density ?? 'comfortable',\n );\n const [draggingColumn, setDraggingColumn] =\n useState<MRT_Column<TData> | null>(initialState.draggingColumn ?? null);\n const [draggingRow, setDraggingRow] = useState<MRT_Row<TData> | null>(\n initialState.draggingRow ?? null,\n );\n const [editingCell, setEditingCell] = useState<MRT_Cell<TData> | null>(\n initialState.editingCell ?? null,\n );\n const [editingRow, setEditingRow] = useState<MRT_Row<TData> | null>(\n initialState.editingRow ?? null,\n );\n const [globalFilterFn, setGlobalFilterFn] = useState<MRT_FilterOption>(\n initialState.globalFilterFn ?? 'fuzzy',\n );\n const [grouping, onGroupingChange] = useState<MRT_GroupingState>(\n initialState.grouping ?? [],\n );\n const [hoveredColumn, setHoveredColumn] = useState<Partial<\n MRT_Column<TData>\n > | null>(initialState.hoveredColumn ?? null);\n const [hoveredRow, setHoveredRow] = useState<Partial<MRT_Row<TData>> | null>(\n initialState.hoveredRow ?? null,\n );\n const [isFullScreen, setIsFullScreen] = useState<boolean>(\n initialState?.isFullScreen ?? false,\n );\n const [pagination, onPaginationChange] = useState<MRT_PaginationState>(\n initialState?.pagination ?? { pageIndex: 0, pageSize: 10 },\n );\n const [showAlertBanner, setShowAlertBanner] = useState<boolean>(\n initialState?.showAlertBanner ?? false,\n );\n const [showColumnFilters, setShowColumnFilters] = useState<boolean>(\n initialState?.showColumnFilters ?? false,\n );\n const [showGlobalFilter, setShowGlobalFilter] = useState<boolean>(\n initialState?.showGlobalFilter ?? false,\n );\n const [showToolbarDropZone, setShowToolbarDropZone] = useState<boolean>(\n initialState?.showToolbarDropZone ?? false,\n );\n\n definedTableOptions.state = {\n actionCell,\n columnFilterFns,\n columnOrder,\n columnSizingInfo,\n creatingRow,\n density,\n draggingColumn,\n draggingRow,\n editingCell,\n editingRow,\n globalFilterFn,\n grouping,\n hoveredColumn,\n hoveredRow,\n isFullScreen,\n pagination,\n showAlertBanner,\n showColumnFilters,\n showGlobalFilter,\n showToolbarDropZone,\n ...definedTableOptions.state,\n };\n\n //The table options now include all state needed to help determine column visibility and order logic\n const statefulTableOptions =\n definedTableOptions as MRT_StatefulTableOptions<TData>;\n\n //don't recompute columnDefs while resizing column or dragging column/row\n const columnDefsRef = useRef<MRT_ColumnDef<TData>[]>([]);\n statefulTableOptions.columns =\n statefulTableOptions.state.columnSizingInfo.isResizingColumn ||\n statefulTableOptions.state.draggingColumn ||\n statefulTableOptions.state.draggingRow\n ? columnDefsRef.current\n : prepareColumns({\n columnDefs: [\n ...([\n showRowPinningColumn(statefulTableOptions) &&\n getMRT_RowPinningColumnDef(statefulTableOptions),\n showRowDragColumn(statefulTableOptions) &&\n getMRT_RowDragColumnDef(statefulTableOptions),\n showRowActionsColumn(statefulTableOptions) &&\n getMRT_RowActionsColumnDef(statefulTableOptions),\n showRowExpandColumn(statefulTableOptions) &&\n getMRT_RowExpandColumnDef(statefulTableOptions),\n showRowSelectionColumn(statefulTableOptions) &&\n getMRT_RowSelectColumnDef(statefulTableOptions),\n showRowNumbersColumn(statefulTableOptions) &&\n getMRT_RowNumbersColumnDef(statefulTableOptions),\n ].filter(Boolean) as MRT_ColumnDef<TData>[]),\n ...statefulTableOptions.columns,\n ...([\n showRowSpacerColumn(statefulTableOptions) &&\n getMRT_RowSpacerColumnDef(statefulTableOptions),\n ].filter(Boolean) as MRT_ColumnDef<TData>[]),\n ],\n tableOptions: statefulTableOptions,\n });\n columnDefsRef.current = statefulTableOptions.columns;\n\n //if loading, generate blank rows to show skeleton loaders\n statefulTableOptions.data = useMemo(\n () =>\n (statefulTableOptions.state.isLoading ||\n statefulTableOptions.state.showSkeletons) &&\n !statefulTableOptions.data.length\n ? [\n ...Array(\n Math.min(statefulTableOptions.state.pagination.pageSize, 20),\n ).fill(null),\n ].map(() =>\n Object.assign(\n {},\n ...getAllLeafColumnDefs(statefulTableOptions.columns).map(\n (col) => ({\n [getColumnId(col)]: null,\n }),\n ),\n ),\n )\n : statefulTableOptions.data,\n [\n statefulTableOptions.data,\n statefulTableOptions.state.isLoading,\n statefulTableOptions.state.showSkeletons,\n ],\n );\n\n //@ts-expect-error\n const table = useReactTable({\n onColumnOrderChange,\n onColumnSizingInfoChange,\n onGroupingChange,\n onPaginationChange,\n ...statefulTableOptions,\n globalFilterFn: statefulTableOptions.filterFns?.[globalFilterFn ?? 'fuzzy'],\n }) as MRT_TableInstance<TData>;\n\n table.refs = {\n actionCellRef,\n bottomToolbarRef,\n editInputRefs,\n filterInputRefs,\n lastSelectedRowId,\n searchInputRef,\n tableContainerRef,\n tableFooterRef,\n tableHeadCellRefs,\n tableHeadRef,\n tablePaperRef,\n topToolbarRef,\n };\n\n table.setActionCell =\n statefulTableOptions.onActionCellChange ?? setActionCell;\n table.setCreatingRow = (row: MRT_Updater<MRT_Row<TData> | null | true>) => {\n let _row = row;\n if (row === true) {\n _row = createRow(table);\n }\n statefulTableOptions?.onCreatingRowChange?.(\n _row as MRT_Row<TData> | null,\n ) ?? _setCreatingRow(_row as MRT_Row<TData> | null);\n };\n table.setColumnFilterFns =\n statefulTableOptions.onColumnFilterFnsChange ?? setColumnFilterFns;\n table.setDensity = statefulTableOptions.onDensityChange ?? setDensity;\n table.setDraggingColumn =\n statefulTableOptions.onDraggingColumnChange ?? setDraggingColumn;\n table.setDraggingRow =\n statefulTableOptions.onDraggingRowChange ?? setDraggingRow;\n table.setEditingCell =\n statefulTableOptions.onEditingCellChange ?? setEditingCell;\n table.setEditingRow =\n statefulTableOptions.onEditingRowChange ?? setEditingRow;\n table.setGlobalFilterFn =\n statefulTableOptions.onGlobalFilterFnChange ?? setGlobalFilterFn;\n table.setHoveredColumn =\n statefulTableOptions.onHoveredColumnChange ?? setHoveredColumn;\n table.setHoveredRow =\n statefulTableOptions.onHoveredRowChange ?? setHoveredRow;\n table.setIsFullScreen =\n statefulTableOptions.onIsFullScreenChange ?? setIsFullScreen;\n table.setShowAlertBanner =\n statefulTableOptions.onShowAlertBannerChange ?? setShowAlertBanner;\n table.setShowColumnFilters =\n statefulTableOptions.onShowColumnFiltersChange ?? setShowColumnFilters;\n table.setShowGlobalFilter =\n statefulTableOptions.onShowGlobalFilterChange ?? setShowGlobalFilter;\n table.setShowToolbarDropZone =\n statefulTableOptions.onShowToolbarDropZoneChange ?? setShowToolbarDropZone;\n\n useMRT_Effects(table);\n\n return table;\n};\n","import {\n type MRT_RowData,\n type MRT_TableInstance,\n type MRT_TableOptions,\n} from '../types';\nimport { useMRT_TableInstance } from './useMRT_TableInstance';\nimport { useMRT_TableOptions } from './useMRT_TableOptions';\n\nexport const useMaterialReactTable = <TData extends MRT_RowData>(\n tableOptions: MRT_TableOptions<TData>,\n): MRT_TableInstance<TData> =>\n useMRT_TableInstance(useMRT_TableOptions(tableOptions));\n","import { type Range, defaultRangeExtractor } from '@tanstack/react-virtual';\n\n/**\n * When scroll, the `draggingRow` or `draggingColumn` can be removed from document because of virtualization,\n * then, the `dragEnd` event on `MRT_TableBodyRowGrabHandle` or `MRT_TableHeadCellGrabHandle` will not fire.\n * We should keep the `draggingRow` or `draggingColumn` in `getVirtualItems()` to avoid this thing.\n */\nexport const extraIndexRangeExtractor = (\n range: Range,\n draggingIndex?: number,\n) => {\n const newIndexes = defaultRangeExtractor(range);\n if (draggingIndex === undefined) return newIndexes;\n if (\n draggingIndex >= 0 &&\n draggingIndex < Math.max(range.startIndex - range.overscan, 0)\n ) {\n newIndexes.unshift(draggingIndex);\n }\n if (draggingIndex >= 0 && draggingIndex > range.endIndex + range.overscan) {\n newIndexes.push(draggingIndex);\n }\n return newIndexes;\n};\n","import { useCallback, useMemo } from 'react';\nimport { type Range, useVirtualizer } from '@tanstack/react-virtual';\nimport {\n type MRT_ColumnVirtualizer,\n type MRT_RowData,\n type MRT_TableInstance,\n} from '../types';\nimport { parseFromValuesOrFunc } from '../utils/utils';\nimport { extraIndexRangeExtractor } from '../utils/virtualization.utils';\n\nexport const useMRT_ColumnVirtualizer = <\n TData extends MRT_RowData,\n TScrollElement extends Element | Window = HTMLDivElement,\n TItemElement extends Element = HTMLTableCellElement,\n>(\n table: MRT_TableInstance<TData>,\n): MRT_ColumnVirtualizer | undefined => {\n const {\n getState,\n options: {\n columnVirtualizerInstanceRef,\n columnVirtualizerOptions,\n enableColumnPinning,\n enableColumnVirtualization,\n },\n refs: { tableContainerRef },\n } = table;\n const { columnPinning, columnVisibility, draggingColumn } = getState();\n\n if (!enableColumnVirtualization) return undefined;\n\n const columnVirtualizerProps = parseFromValuesOrFunc(\n columnVirtualizerOptions,\n {\n table,\n },\n );\n\n const visibleColumns = table.getVisibleLeafColumns();\n\n const [leftPinnedIndexes, rightPinnedIndexes] = useMemo(\n () =>\n enableColumnPinning\n ? [\n table.getLeftVisibleLeafColumns().map((c) => c.getPinnedIndex()),\n table\n .getRightVisibleLeafColumns()\n .map(\n (column) => visibleColumns.length - column.getPinnedIndex() - 1,\n )\n .sort((a, b) => a - b),\n ]\n : [[], []],\n [columnPinning, columnVisibility, enableColumnPinning],\n );\n\n const numPinnedLeft = leftPinnedIndexes.length;\n const numPinnedRight = rightPinnedIndexes.length;\n\n const draggingColumnIndex = useMemo(\n () =>\n draggingColumn?.id\n ? visibleColumns.findIndex((c) => c.id === draggingColumn?.id)\n : undefined,\n [draggingColumn?.id],\n );\n\n const columnVirtualizer = useVirtualizer({\n count: visibleColumns.length,\n estimateSize: (index) => visibleColumns[index].getSize(),\n getScrollElement: () => tableContainerRef.current,\n horizontal: true,\n overscan: 3,\n rangeExtractor: useCallback(\n (range: Range) => {\n const newIndexes = extraIndexRangeExtractor(range, draggingColumnIndex);\n if (!numPinnedLeft && !numPinnedRight) {\n return newIndexes;\n }\n return [\n ...new Set([\n ...leftPinnedIndexes,\n ...newIndexes,\n ...rightPinnedIndexes,\n ]),\n ];\n },\n [leftPinnedIndexes, rightPinnedIndexes, draggingColumnIndex],\n ),\n ...columnVirtualizerProps,\n }) as unknown as MRT_ColumnVirtualizer<TScrollElement, TItemElement>;\n\n const virtualColumns = columnVirtualizer.getVirtualItems();\n columnVirtualizer.virtualColumns = virtualColumns as any;\n const numColumns = virtualColumns.length;\n\n if (numColumns) {\n const totalSize = columnVirtualizer.getTotalSize();\n\n const leftNonPinnedStart = virtualColumns[numPinnedLeft]?.start || 0;\n const leftNonPinnedEnd =\n virtualColumns[leftPinnedIndexes.length - 1]?.end || 0;\n\n const rightNonPinnedStart =\n virtualColumns[numColumns - numPinnedRight]?.start || 0;\n const rightNonPinnedEnd =\n virtualColumns[numColumns - numPinnedRight - 1]?.end || 0;\n\n columnVirtualizer.virtualPaddingLeft =\n leftNonPinnedStart - leftNonPinnedEnd;\n\n columnVirtualizer.virtualPaddingRight =\n totalSize -\n rightNonPinnedEnd -\n (numPinnedRight ? totalSize - rightNonPinnedStart : 0);\n }\n\n if (columnVirtualizerInstanceRef) {\n //@ts-expect-error\n columnVirtualizerInstanceRef.current = columnVirtualizer;\n }\n\n return columnVirtualizer as any;\n};\n","import { useCallback, useMemo } from 'react';\nimport { type Range, useVirtualizer } from '@tanstack/react-virtual';\nimport {\n type MRT_Row,\n type MRT_RowData,\n type MRT_RowVirtualizer,\n type MRT_TableInstance,\n} from '../types';\nimport { parseFromValuesOrFunc } from '../utils/utils';\nimport { extraIndexRangeExtractor } from '../utils/virtualization.utils';\n\nexport const useMRT_RowVirtualizer = <\n TData extends MRT_RowData,\n TScrollElement extends Element | Window = HTMLDivElement,\n TItemElement extends Element = HTMLTableRowElement,\n>(\n table: MRT_TableInstance<TData>,\n rows?: MRT_Row<TData>[],\n): MRT_RowVirtualizer<TScrollElement, TItemElement> | undefined => {\n const {\n getRowModel,\n getState,\n options: {\n enableRowVirtualization,\n renderDetailPanel,\n rowVirtualizerInstanceRef,\n rowVirtualizerOptions,\n },\n refs: { tableContainerRef },\n } = table;\n const { density, draggingRow, expanded } = getState();\n\n if (!enableRowVirtualization) return undefined;\n\n const rowVirtualizerProps = parseFromValuesOrFunc(rowVirtualizerOptions, {\n table,\n });\n\n const realRows = rows ?? getRowModel().rows;\n /**\n * when filtering, should find the correct index in filtered rows\n */\n const draggingRowIndex = useMemo(\n () =>\n draggingRow?.id\n ? realRows.findIndex((r) => r.id === draggingRow?.id)\n : undefined,\n [realRows, draggingRow?.id],\n );\n\n const rowCount = realRows.length;\n\n const normalRowHeight =\n density === 'compact' ? 37 : density === 'comfortable' ? 58 : 73;\n\n const rowVirtualizer = useVirtualizer({\n count: renderDetailPanel ? rowCount * 2 : rowCount,\n estimateSize: (index) =>\n renderDetailPanel && index % 2 === 1\n ? expanded === true\n ? 100\n : 0\n : normalRowHeight,\n getScrollElement: () => tableContainerRef.current,\n measureElement:\n typeof window !== 'undefined' &&\n navigator.userAgent.indexOf('Firefox') === -1\n ? (element) => element?.getBoundingClientRect().height\n : undefined,\n overscan: 4,\n rangeExtractor: useCallback(\n (range: Range) => {\n return extraIndexRangeExtractor(range, draggingRowIndex);\n },\n [draggingRowIndex],\n ),\n ...rowVirtualizerProps,\n }) as unknown as MRT_RowVirtualizer<TScrollElement, TItemElement>;\n\n rowVirtualizer.virtualRows = rowVirtualizer.getVirtualItems() as any;\n\n if (rowVirtualizerInstanceRef) {\n //@ts-expect-error\n rowVirtualizerInstanceRef.current = rowVirtualizer;\n }\n\n return rowVirtualizer;\n};\n","import { useMemo } from 'react';\nimport {\n type MRT_Row,\n type MRT_RowData,\n type MRT_TableInstance,\n} from '../types';\nimport { getMRT_Rows } from '../utils/row.utils';\n\nexport const useMRT_Rows = <TData extends MRT_RowData>(\n table: MRT_TableInstance<TData>,\n): MRT_Row<TData>[] => {\n const {\n getRowModel,\n getState,\n options: { data, enableGlobalFilterRankedResults, positionCreatingRow },\n } = table;\n const {\n creatingRow,\n expanded,\n globalFilter,\n pagination,\n rowPinning,\n sorting,\n } = getState();\n\n const rows = useMemo(\n () => getMRT_Rows(table),\n [\n creatingRow,\n data,\n enableGlobalFilterRankedResults,\n expanded,\n getRowModel().rows,\n globalFilter,\n pagination.pageIndex,\n pagination.pageSize,\n positionCreatingRow,\n rowPinning,\n sorting,\n ],\n );\n\n return rows;\n};\n","import { type ReactNode, type RefObject } from 'react';\nimport Box from '@mui/material/Box';\nimport {\n type MRT_Cell,\n type MRT_RowData,\n type MRT_TableInstance,\n} from '../../types';\nimport highlightWords from 'highlight-words';\n\nconst allowedTypes = ['string', 'number'];\n\nexport interface MRT_TableBodyCellValueProps<TData extends MRT_RowData> {\n cell: MRT_Cell<TData>;\n rowRef?: RefObject<HTMLTableRowElement | null>;\n staticColumnIndex?: number;\n staticRowIndex?: number;\n table: MRT_TableInstance<TData>;\n}\n\nexport const MRT_TableBodyCellValue = <TData extends MRT_RowData>({\n cell,\n rowRef,\n staticColumnIndex,\n staticRowIndex,\n table,\n}: MRT_TableBodyCellValueProps<TData>) => {\n const {\n getState,\n options: {\n enableFilterMatchHighlighting,\n mrtTheme: { matchHighlightColor },\n },\n } = table;\n const { column, row } = cell;\n const { columnDef } = column;\n const { globalFilter, globalFilterFn } = getState();\n const filterValue = column.getFilterValue();\n\n let renderedCellValue =\n cell.getIsAggregated() && columnDef.AggregatedCell\n ? columnDef.AggregatedCell({\n cell,\n column,\n row,\n table,\n staticColumnIndex,\n staticRowIndex,\n })\n : row.getIsGrouped() && !cell.getIsGrouped()\n ? null\n : cell.getIsGrouped() && columnDef.GroupedCell\n ? columnDef.GroupedCell({\n cell,\n column,\n row,\n table,\n staticColumnIndex,\n staticRowIndex,\n })\n : undefined;\n\n const isGroupedValue = renderedCellValue !== undefined;\n\n if (!isGroupedValue) {\n renderedCellValue = cell.renderValue() as ReactNode | number | string;\n }\n\n if (\n enableFilterMatchHighlighting &&\n columnDef.enableFilterMatchHighlighting !== false &&\n String(renderedCellValue) &&\n allowedTypes.includes(typeof renderedCellValue) &&\n ((filterValue &&\n allowedTypes.includes(typeof filterValue) &&\n ['autocomplete', 'text'].includes(columnDef.filterVariant!)) ||\n (globalFilter &&\n allowedTypes.includes(typeof globalFilter) &&\n column.getCanGlobalFilter()))\n ) {\n const chunks = highlightWords?.({\n matchExactly:\n (filterValue ? columnDef._filterFn : globalFilterFn) !== 'fuzzy',\n query: (filterValue ?? globalFilter ?? '').toString(),\n text: renderedCellValue?.toString() as string,\n });\n if (chunks?.length > 1 || chunks?.[0]?.match) {\n renderedCellValue = (\n <span aria-label={renderedCellValue as string} role=\"note\">\n {chunks?.map(({ key, match, text }) => (\n <Box\n aria-hidden=\"true\"\n component=\"span\"\n key={key}\n sx={\n match\n ? {\n backgroundColor: matchHighlightColor,\n borderRadius: '2px',\n color: (theme) =>\n theme.palette.mode === 'dark'\n ? theme.palette.common.white\n : theme.palette.common.black,\n padding: '2px 1px',\n }\n : undefined\n }\n >\n {text}\n </Box>\n )) ?? renderedCellValue}\n </span>\n );\n }\n }\n\n if (columnDef.Cell && !isGroupedValue) {\n renderedCellValue = columnDef.Cell({\n cell,\n column,\n renderedCellValue,\n row,\n rowRef,\n staticColumnIndex,\n staticRowIndex,\n table,\n });\n }\n\n return renderedCellValue;\n};\n","import { type MouseEvent, useState } from 'react';\nimport Button, { type ButtonProps } from '@mui/material/Button';\nimport Tooltip from '@mui/material/Tooltip';\nimport {\n type MRT_Cell,\n type MRT_RowData,\n type MRT_TableInstance,\n} from '../../types';\nimport { getCommonTooltipProps } from '../../utils/style.utils';\nimport { parseFromValuesOrFunc } from '../../utils/utils';\n\nexport interface MRT_CopyButtonProps<TData extends MRT_RowData>\n extends ButtonProps {\n cell: MRT_Cell<TData>;\n table: MRT_TableInstance<TData>;\n}\n\nexport const MRT_CopyButton = <TData extends MRT_RowData>({\n cell,\n table,\n ...rest\n}: MRT_CopyButtonProps<TData>) => {\n const {\n options: { localization, muiCopyButtonProps },\n } = table;\n const { column, row } = cell;\n const { columnDef } = column;\n\n const [copied, setCopied] = useState(false);\n\n const handleCopy = (event: MouseEvent, text: unknown) => {\n event.stopPropagation();\n navigator.clipboard.writeText(text as string);\n setCopied(true);\n setTimeout(() => setCopied(false), 4000);\n };\n\n const buttonProps = {\n ...parseFromValuesOrFunc(muiCopyButtonProps, {\n cell,\n column,\n row,\n table,\n }),\n ...parseFromValuesOrFunc(columnDef.muiCopyButtonProps, {\n cell,\n column,\n row,\n table,\n }),\n ...rest,\n };\n\n return (\n <Tooltip\n {...getCommonTooltipProps('top')}\n title={\n buttonProps?.title ??\n (copied ? localization.copiedToClipboard : localization.clickToCopy)\n }\n >\n <Button\n onClick={(e) => handleCopy(e, cell.getValue())}\n size=\"small\"\n type=\"button\"\n variant=\"text\"\n {...buttonProps}\n sx={(theme) => ({\n backgroundColor: 'transparent',\n border: 'none',\n color: 'inherit',\n cursor: 'copy',\n fontFamily: 'inherit',\n fontSize: 'inherit',\n letterSpacing: 'inherit',\n m: '-0.25rem',\n minWidth: 'unset',\n py: 0,\n textAlign: 'inherit',\n textTransform: 'inherit',\n ...(parseFromValuesOrFunc(buttonProps?.sx, theme) as any),\n })}\n title={undefined}\n />\n </Tooltip>\n );\n};\n","import {\n type ChangeEvent,\n type FocusEvent,\n type KeyboardEvent,\n useState,\n} from 'react';\nimport MenuItem from '@mui/material/MenuItem';\nimport TextField from '@mui/material/TextField';\nimport { type TextFieldProps } from '@mui/material/TextField';\nimport {\n type MRT_Cell,\n type MRT_RowData,\n type MRT_TableInstance,\n} from '../../types';\nimport { getValueAndLabel, parseFromValuesOrFunc } from '../../utils/utils';\n\nexport interface MRT_EditCellTextFieldProps<TData extends MRT_RowData>\n extends TextFieldProps<'standard'> {\n cell: MRT_Cell<TData>;\n table: MRT_TableInstance<TData>;\n}\n\nexport const MRT_EditCellTextField = <TData extends MRT_RowData>({\n cell,\n table,\n ...rest\n}: MRT_EditCellTextFieldProps<TData>) => {\n const {\n getState,\n options: { createDisplayMode, editDisplayMode, muiEditTextFieldProps },\n refs: { editInputRefs },\n setCreatingRow,\n setEditingCell,\n setEditingRow,\n } = table;\n const { column, row } = cell;\n const { columnDef } = column;\n const { creatingRow, editingRow } = getState();\n const { editSelectOptions, editVariant } = columnDef;\n\n const isCreating = creatingRow?.id === row.id;\n const isEditing = editingRow?.id === row.id;\n\n const [value, setValue] = useState(() => cell.getValue<string>());\n const [completesComposition, setCompletesComposition] = useState(true);\n\n const textFieldProps: TextFieldProps = {\n ...parseFromValuesOrFunc(muiEditTextFieldProps, {\n cell,\n column,\n row,\n table,\n }),\n ...parseFromValuesOrFunc(columnDef.muiEditTextFieldProps, {\n cell,\n column,\n row,\n table,\n }),\n ...rest,\n };\n\n const selectOptions = parseFromValuesOrFunc(editSelectOptions, {\n cell,\n column,\n row,\n table,\n });\n\n const isSelectEdit = editVariant === 'select' || textFieldProps?.select;\n\n const saveInputValueToRowCache = (newValue: string) => {\n //@ts-expect-error\n row._valuesCache[column.id] = newValue;\n if (isCreating) {\n setCreatingRow(row);\n } else if (isEditing) {\n setEditingRow(row);\n }\n };\n\n const handleChange = (event: ChangeEvent<HTMLInputElement>) => {\n textFieldProps.onChange?.(event);\n setValue(event.target.value);\n if (isSelectEdit) {\n saveInputValueToRowCache(event.target.value);\n }\n };\n\n const handleBlur = (event: FocusEvent<HTMLInputElement>) => {\n textFieldProps.onBlur?.(event);\n saveInputValueToRowCache(value);\n setEditingCell(null);\n };\n\n const handleEnterKeyDown = (event: KeyboardEvent<HTMLInputElement>) => {\n textFieldProps.onKeyDown?.(event);\n if (event.key === 'Enter' && !event.shiftKey && completesComposition) {\n editInputRefs.current?.[column.id]?.blur();\n }\n };\n\n if (columnDef.Edit) {\n return <>{columnDef.Edit?.({ cell, column, row, table })}</>;\n }\n\n return (\n <TextField\n disabled={parseFromValuesOrFunc(columnDef.enableEditing, row) === false}\n fullWidth\n inputRef={(inputRef) => {\n if (inputRef) {\n editInputRefs.current![column.id] = isSelectEdit\n ? inputRef.node\n : inputRef;\n if (textFieldProps.inputRef) {\n textFieldProps.inputRef = inputRef;\n }\n }\n }}\n label={\n ['custom', 'modal'].includes(\n (isCreating ? createDisplayMode : editDisplayMode) as string,\n )\n ? columnDef.header\n : undefined\n }\n margin=\"none\"\n name={column.id}\n placeholder={\n !['custom', 'modal'].includes(\n (isCreating ? createDisplayMode : editDisplayMode) as string,\n )\n ? columnDef.header\n : undefined\n }\n select={isSelectEdit}\n size=\"small\"\n value={value ?? ''}\n variant=\"standard\"\n {...textFieldProps}\n InputProps={{\n ...(textFieldProps.variant !== 'outlined'\n ? { disableUnderline: editDisplayMode === 'table' }\n : {}),\n ...textFieldProps.InputProps,\n sx: (theme) => ({\n mb: 0,\n ...(parseFromValuesOrFunc(\n textFieldProps?.InputProps?.sx,\n theme,\n ) as any),\n }),\n }}\n SelectProps={{\n MenuProps: { disableScrollLock: true },\n ...textFieldProps.SelectProps,\n }}\n inputProps={{\n autoComplete: 'off',\n ...textFieldProps.inputProps,\n }}\n onBlur={handleBlur}\n onChange={handleChange}\n onClick={(e) => {\n e.stopPropagation();\n textFieldProps?.onClick?.(e);\n }}\n onKeyDown={handleEnterKeyDown}\n onCompositionStart={() => setCompletesComposition(false)}\n onCompositionEnd={() => setCompletesComposition(true)}\n >\n {textFieldProps.children ??\n selectOptions?.map((option) => {\n const { label, value } = getValueAndLabel(option);\n return (\n <MenuItem\n key={value}\n sx={{\n alignItems: 'center',\n display: 'flex',\n gap: '0.5rem',\n m: 0,\n }}\n value={value}\n >\n {label}\n </MenuItem>\n );\n })}\n </TextField>\n );\n};\n","import {\n type DragEvent,\n type MouseEvent,\n type RefObject,\n memo,\n useEffect,\n useMemo,\n useState,\n} from 'react';\nimport Skeleton from '@mui/material/Skeleton';\nimport TableCell, { type TableCellProps } from '@mui/material/TableCell';\nimport { useTheme } from '@mui/material/styles';\nimport { MRT_TableBodyCellValue } from './MRT_TableBodyCellValue';\nimport {\n type MRT_Cell,\n type MRT_RowData,\n type MRT_TableInstance,\n} from '../../types';\nimport {\n isCellEditable,\n cellKeyboardShortcuts,\n openEditingCell,\n} from '../../utils/cell.utils';\nimport { getCommonMRTCellStyles } from '../../utils/style.utils';\nimport { parseFromValuesOrFunc } from '../../utils/utils';\nimport { MRT_CopyButton } from '../buttons/MRT_CopyButton';\nimport { MRT_EditCellTextField } from '../inputs/MRT_EditCellTextField';\n\nexport interface MRT_TableBodyCellProps<TData extends MRT_RowData>\n extends TableCellProps {\n cell: MRT_Cell<TData>;\n numRows?: number;\n rowRef: RefObject<HTMLTableRowElement | null>;\n staticColumnIndex?: number;\n staticRowIndex: number;\n table: MRT_TableInstance<TData>;\n}\n\nexport const MRT_TableBodyCell = <TData extends MRT_RowData>({\n cell,\n numRows,\n rowRef,\n staticColumnIndex,\n staticRowIndex,\n table,\n ...rest\n}: MRT_TableBodyCellProps<TData>) => {\n const theme = useTheme();\n const {\n getState,\n options: {\n columnResizeDirection,\n columnResizeMode,\n createDisplayMode,\n editDisplayMode,\n enableCellActions,\n enableClickToCopy,\n enableColumnOrdering,\n enableColumnPinning,\n enableGrouping,\n enableKeyboardShortcuts,\n layoutMode,\n mrtTheme: { draggingBorderColor },\n muiSkeletonProps,\n muiTableBodyCellProps,\n },\n setHoveredColumn,\n } = table;\n const {\n actionCell,\n columnSizingInfo,\n creatingRow,\n density,\n draggingColumn,\n draggingRow,\n editingCell,\n editingRow,\n hoveredColumn,\n hoveredRow,\n isLoading,\n showSkeletons,\n } = getState();\n const { column, row } = cell;\n const { columnDef } = column;\n const { columnDefType } = columnDef;\n\n const args = { cell, column, row, table };\n const tableCellProps = {\n ...parseFromValuesOrFunc(muiTableBodyCellProps, args),\n ...parseFromValuesOrFunc(columnDef.muiTableBodyCellProps, args),\n ...rest,\n };\n\n const skeletonProps = parseFromValuesOrFunc(muiSkeletonProps, {\n cell,\n column,\n row,\n table,\n });\n\n const [skeletonWidth, setSkeletonWidth] = useState(100);\n useEffect(() => {\n if ((!isLoading && !showSkeletons) || skeletonWidth !== 100) return;\n const size = column.getSize();\n setSkeletonWidth(\n columnDefType === 'display'\n ? size / 2\n : Math.round(Math.random() * (size - size / 3) + size / 3),\n );\n }, [isLoading, showSkeletons]);\n\n const draggingBorders = useMemo(() => {\n const isDraggingColumn = draggingColumn?.id === column.id;\n const isHoveredColumn = hoveredColumn?.id === column.id;\n const isDraggingRow = draggingRow?.id === row.id;\n const isHoveredRow = hoveredRow?.id === row.id;\n const isFirstColumn = column.getIsFirstColumn();\n const isLastColumn = column.getIsLastColumn();\n const isLastRow = numRows && staticRowIndex === numRows - 1;\n const isResizingColumn = columnSizingInfo.isResizingColumn === column.id;\n const showResizeBorder =\n isResizingColumn && columnResizeMode === 'onChange';\n\n const borderStyle = showResizeBorder\n ? `2px solid ${draggingBorderColor} !important`\n : isDraggingColumn || isDraggingRow\n ? `1px dashed ${theme.palette.grey[500]} !important`\n : isHoveredColumn || isHoveredRow || isResizingColumn\n ? `2px dashed ${draggingBorderColor} !important`\n : undefined;\n\n if (showResizeBorder) {\n return columnResizeDirection === 'ltr'\n ? { borderRight: borderStyle }\n : { borderLeft: borderStyle };\n }\n\n return borderStyle\n ? {\n borderBottom:\n isDraggingRow || isHoveredRow || (isLastRow && !isResizingColumn)\n ? borderStyle\n : undefined,\n borderLeft:\n isDraggingColumn ||\n isHoveredColumn ||\n ((isDraggingRow || isHoveredRow) && isFirstColumn)\n ? borderStyle\n : undefined,\n borderRight:\n isDraggingColumn ||\n isHoveredColumn ||\n ((isDraggingRow || isHoveredRow) && isLastColumn)\n ? borderStyle\n : undefined,\n borderTop: isDraggingRow || isHoveredRow ? borderStyle : undefined,\n }\n : undefined;\n }, [\n columnSizingInfo.isResizingColumn,\n draggingColumn,\n draggingRow,\n hoveredColumn,\n hoveredRow,\n staticRowIndex,\n ]);\n\n const isColumnPinned =\n enableColumnPinning &&\n columnDef.columnDefType !== 'group' &&\n column.getIsPinned();\n\n const isEditable = isCellEditable({ cell, table });\n\n const isEditing =\n isEditable &&\n !['custom', 'modal'].includes(editDisplayMode as string) &&\n (editDisplayMode === 'table' ||\n editingRow?.id === row.id ||\n editingCell?.id === cell.id) &&\n !row.getIsGrouped();\n\n const isCreating =\n isEditable && createDisplayMode === 'row' && creatingRow?.id === row.id;\n\n const showClickToCopyButton =\n (parseFromValuesOrFunc(enableClickToCopy, cell) === true ||\n parseFromValuesOrFunc(columnDef.enableClickToCopy, cell) === true) &&\n !['context-menu', false].includes(\n // @ts-expect-error\n parseFromValuesOrFunc(columnDef.enableClickToCopy, cell),\n );\n\n const isRightClickable = parseFromValuesOrFunc(enableCellActions, cell);\n\n const cellValueProps = {\n cell,\n table,\n staticColumnIndex,\n staticRowIndex,\n };\n\n const handleDoubleClick = (event: MouseEvent<HTMLTableCellElement>) => {\n tableCellProps?.onDoubleClick?.(event);\n openEditingCell({ cell, table });\n };\n\n const handleDragEnter = (e: DragEvent<HTMLTableCellElement>) => {\n tableCellProps?.onDragEnter?.(e);\n if (enableGrouping && hoveredColumn?.id === 'drop-zone') {\n setHoveredColumn(null);\n }\n if (enableColumnOrdering && draggingColumn) {\n setHoveredColumn(\n columnDef.enableColumnOrdering !== false ? column : null,\n );\n }\n };\n\n const handleDragOver = (e: DragEvent) => {\n if (columnDef.enableColumnOrdering !== false) {\n e.preventDefault();\n }\n };\n\n const handleContextMenu = (e: MouseEvent<HTMLTableCellElement>) => {\n tableCellProps?.onContextMenu?.(e);\n if (isRightClickable) {\n e.preventDefault();\n table.setActionCell(cell);\n table.refs.actionCellRef.current = e.currentTarget;\n }\n };\n\n const handleKeyDown = (event: React.KeyboardEvent<HTMLTableCellElement>) => {\n tableCellProps?.onKeyDown?.(event);\n cellKeyboardShortcuts({\n cell,\n cellValue: cell.getValue<string>(),\n event,\n table,\n });\n };\n\n return (\n <TableCell\n align={theme.direction === 'rtl' ? 'right' : 'left'}\n data-index={staticColumnIndex}\n data-pinned={!!isColumnPinned || undefined}\n tabIndex={enableKeyboardShortcuts ? 0 : undefined}\n {...tableCellProps}\n onKeyDown={handleKeyDown}\n onContextMenu={handleContextMenu}\n onDoubleClick={handleDoubleClick}\n onDragEnter={handleDragEnter}\n onDragOver={handleDragOver}\n sx={(theme) => ({\n '&:hover': {\n outline:\n actionCell?.id === cell.id ||\n (editDisplayMode === 'cell' && isEditable) ||\n (editDisplayMode === 'table' && (isCreating || isEditing))\n ? `1px solid ${theme.palette.grey[500]}`\n : undefined,\n textOverflow: 'clip',\n },\n alignItems: layoutMode?.startsWith('grid') ? 'center' : undefined,\n cursor: isRightClickable\n ? 'context-menu'\n : isEditable && editDisplayMode === 'cell'\n ? 'pointer'\n : 'inherit',\n outline:\n actionCell?.id === cell.id\n ? `1px solid ${theme.palette.grey[500]}`\n : undefined,\n outlineOffset: '-1px',\n overflow: 'hidden',\n p:\n density === 'compact'\n ? columnDefType === 'display'\n ? '0 0.5rem'\n : '0.5rem'\n : density === 'comfortable'\n ? columnDefType === 'display'\n ? '0.5rem 0.75rem'\n : '1rem'\n : columnDefType === 'display'\n ? '1rem 1.25rem'\n : '1.5rem',\n\n textOverflow: columnDefType !== 'display' ? 'ellipsis' : undefined,\n whiteSpace:\n row.getIsPinned() || density === 'compact' ? 'nowrap' : 'normal',\n ...getCommonMRTCellStyles({\n column,\n table,\n tableCellProps,\n theme,\n }),\n ...draggingBorders,\n })}\n >\n {tableCellProps.children ?? (\n <>\n {cell.getIsPlaceholder() ? (\n (columnDef.PlaceholderCell?.({ cell, column, row, table }) ?? null)\n ) : showSkeletons !== false && (isLoading || showSkeletons) ? (\n <Skeleton\n animation=\"wave\"\n height={20}\n width={skeletonWidth}\n {...skeletonProps}\n />\n ) : columnDefType === 'display' &&\n (['mrt-row-expand', 'mrt-row-numbers', 'mrt-row-select'].includes(\n column.id,\n ) ||\n !row.getIsGrouped()) ? (\n columnDef.Cell?.({\n cell,\n column,\n renderedCellValue: cell.renderValue() as any,\n row,\n rowRef,\n staticColumnIndex,\n staticRowIndex,\n table,\n })\n ) : isCreating || isEditing ? (\n <MRT_EditCellTextField cell={cell} table={table} />\n ) : showClickToCopyButton && columnDef.enableClickToCopy !== false ? (\n <MRT_CopyButton cell={cell} table={table}>\n <MRT_TableBodyCellValue {...cellValueProps} />\n </MRT_CopyButton>\n ) : (\n <MRT_TableBodyCellValue {...cellValueProps} />\n )}\n {cell.getIsGrouped() && !columnDef.GroupedCell && (\n <> ({row.subRows?.length})</>\n )}\n </>\n )}\n </TableCell>\n );\n};\n\nexport const Memo_MRT_TableBodyCell = memo(\n MRT_TableBodyCell,\n (prev, next) => next.cell === prev.cell,\n) as typeof MRT_TableBodyCell;\n","import { type RefObject } from 'react';\nimport Collapse from '@mui/material/Collapse';\nimport TableCell, { type TableCellProps } from '@mui/material/TableCell';\nimport TableRow from '@mui/material/TableRow';\nimport {\n type MRT_Row,\n type MRT_RowData,\n type MRT_RowVirtualizer,\n type MRT_TableInstance,\n type MRT_VirtualItem,\n} from '../../types';\nimport { parseFromValuesOrFunc } from '../../utils/utils';\n\nexport interface MRT_TableDetailPanelProps<TData extends MRT_RowData>\n extends TableCellProps {\n parentRowRef: RefObject<HTMLTableRowElement | null>;\n row: MRT_Row<TData>;\n rowVirtualizer?: MRT_RowVirtualizer;\n staticRowIndex: number;\n table: MRT_TableInstance<TData>;\n virtualRow?: MRT_VirtualItem;\n}\n\nexport const MRT_TableDetailPanel = <TData extends MRT_RowData>({\n parentRowRef,\n row,\n rowVirtualizer,\n staticRowIndex,\n table,\n virtualRow,\n ...rest\n}: MRT_TableDetailPanelProps<TData>) => {\n const {\n getState,\n getVisibleLeafColumns,\n options: {\n layoutMode,\n mrtTheme: { baseBackgroundColor },\n muiDetailPanelProps,\n muiTableBodyRowProps,\n renderDetailPanel,\n },\n } = table;\n const { isLoading } = getState();\n\n const tableRowProps = parseFromValuesOrFunc(muiTableBodyRowProps, {\n isDetailPanel: true,\n row,\n staticRowIndex,\n table,\n });\n\n const tableCellProps = {\n ...parseFromValuesOrFunc(muiDetailPanelProps, {\n row,\n table,\n }),\n ...rest,\n };\n\n const DetailPanel = !isLoading && renderDetailPanel?.({ row, table });\n\n return (\n <TableRow\n className=\"Mui-TableBodyCell-DetailPanel\"\n data-index={renderDetailPanel ? staticRowIndex * 2 + 1 : staticRowIndex}\n ref={(node: HTMLTableRowElement) => {\n if (node) {\n rowVirtualizer?.measureElement?.(node);\n }\n }}\n {...tableRowProps}\n sx={(theme) => ({\n display: layoutMode?.startsWith('grid') ? 'flex' : undefined,\n position: virtualRow ? 'absolute' : undefined,\n top: virtualRow\n ? `${parentRowRef.current?.getBoundingClientRect()?.height}px`\n : undefined,\n transform: virtualRow\n ? `translateY(${virtualRow?.start}px)`\n : undefined,\n width: '100%',\n ...(parseFromValuesOrFunc(tableRowProps?.sx, theme) as any),\n })}\n >\n <TableCell\n className=\"Mui-TableBodyCell-DetailPanel\"\n colSpan={getVisibleLeafColumns().length}\n {...tableCellProps}\n sx={(theme) => ({\n backgroundColor: virtualRow ? baseBackgroundColor : undefined,\n borderBottom: !row.getIsExpanded() ? 'none' : undefined,\n display: layoutMode?.startsWith('grid') ? 'flex' : undefined,\n py: !!DetailPanel && row.getIsExpanded() ? '1rem' : 0,\n transition: !virtualRow ? 'all 150ms ease-in-out' : undefined,\n width: `100%`,\n ...(parseFromValuesOrFunc(tableCellProps?.sx, theme) as any),\n })}\n >\n {virtualRow ? (\n row.getIsExpanded() && DetailPanel\n ) : (\n <Collapse in={row.getIsExpanded()} mountOnEnter unmountOnExit>\n {DetailPanel}\n </Collapse>\n )}\n </TableCell>\n </TableRow>\n );\n};\n","import { type DragEvent, memo, useMemo, useRef } from 'react';\nimport { type VirtualItem } from '@tanstack/react-virtual';\nimport TableRow, { type TableRowProps } from '@mui/material/TableRow';\nimport {\n type Theme,\n alpha,\n darken,\n lighten,\n useTheme,\n} from '@mui/material/styles';\nimport { MRT_TableBodyCell, Memo_MRT_TableBodyCell } from './MRT_TableBodyCell';\nimport { MRT_TableDetailPanel } from './MRT_TableDetailPanel';\nimport {\n type MRT_Cell,\n type MRT_ColumnVirtualizer,\n type MRT_Row,\n type MRT_RowData,\n type MRT_RowVirtualizer,\n type MRT_TableInstance,\n type MRT_VirtualItem,\n} from '../../types';\nimport { getIsRowSelected } from '../../utils/row.utils';\nimport {\n commonCellBeforeAfterStyles,\n getCommonPinnedCellStyles,\n} from '../../utils/style.utils';\nimport { parseFromValuesOrFunc } from '../../utils/utils';\n\nexport interface MRT_TableBodyRowProps<TData extends MRT_RowData>\n extends TableRowProps {\n columnVirtualizer?: MRT_ColumnVirtualizer;\n numRows?: number;\n pinnedRowIds?: string[];\n row: MRT_Row<TData>;\n rowVirtualizer?: MRT_RowVirtualizer;\n staticRowIndex: number;\n table: MRT_TableInstance<TData>;\n virtualRow?: VirtualItem;\n}\n\nexport const MRT_TableBodyRow = <TData extends MRT_RowData>({\n columnVirtualizer,\n numRows,\n pinnedRowIds,\n row,\n rowVirtualizer,\n staticRowIndex,\n table,\n virtualRow,\n ...rest\n}: MRT_TableBodyRowProps<TData>) => {\n const theme = useTheme();\n\n const {\n getState,\n options: {\n enableRowOrdering,\n enableRowPinning,\n enableStickyFooter,\n enableStickyHeader,\n layoutMode,\n memoMode,\n mrtTheme: {\n baseBackgroundColor,\n pinnedRowBackgroundColor,\n selectedRowBackgroundColor,\n },\n muiTableBodyRowProps,\n renderDetailPanel,\n rowPinningDisplayMode,\n },\n refs: { tableFooterRef, tableHeadRef },\n setHoveredRow,\n } = table;\n const {\n density,\n draggingColumn,\n draggingRow,\n editingCell,\n editingRow,\n hoveredRow,\n isFullScreen,\n rowPinning,\n } = getState();\n\n const visibleCells = row.getVisibleCells();\n\n const { virtualColumns, virtualPaddingLeft, virtualPaddingRight } =\n columnVirtualizer ?? {};\n\n const isRowSelected = getIsRowSelected({ row, table });\n const isRowPinned = enableRowPinning && row.getIsPinned();\n const isDraggingRow = draggingRow?.id === row.id;\n const isHoveredRow = hoveredRow?.id === row.id;\n\n const tableRowProps = {\n ...parseFromValuesOrFunc(muiTableBodyRowProps, {\n row,\n staticRowIndex,\n table,\n }),\n ...rest,\n };\n\n const [bottomPinnedIndex, topPinnedIndex] = useMemo(() => {\n if (\n !enableRowPinning ||\n !rowPinningDisplayMode?.includes('sticky') ||\n !pinnedRowIds ||\n !row.getIsPinned()\n )\n return [];\n return [\n [...pinnedRowIds].reverse().indexOf(row.id),\n pinnedRowIds.indexOf(row.id),\n ];\n }, [pinnedRowIds, rowPinning]);\n\n const tableHeadHeight =\n ((enableStickyHeader || isFullScreen) &&\n tableHeadRef.current?.clientHeight) ||\n 0;\n const tableFooterHeight =\n (enableStickyFooter && tableFooterRef.current?.clientHeight) || 0;\n\n const sx = parseFromValuesOrFunc(tableRowProps?.sx, theme as any);\n\n const defaultRowHeight =\n density === 'compact' ? 37 : density === 'comfortable' ? 53 : 69;\n\n const customRowHeight =\n // @ts-expect-error\n parseInt(tableRowProps?.style?.height ?? sx?.height, 10) || undefined;\n\n const rowHeight = customRowHeight || defaultRowHeight;\n\n const handleDragEnter = (_e: DragEvent) => {\n if (enableRowOrdering && draggingRow) {\n setHoveredRow(row);\n }\n };\n\n const handleDragOver = (e: DragEvent) => {\n e.preventDefault();\n };\n\n const rowRef = useRef<HTMLTableRowElement | null>(null);\n\n const cellHighlightColor = isRowSelected\n ? selectedRowBackgroundColor\n : isRowPinned\n ? pinnedRowBackgroundColor\n : undefined;\n\n const cellHighlightColorHover =\n tableRowProps?.hover !== false\n ? isRowSelected\n ? cellHighlightColor\n : theme.palette.mode === 'dark'\n ? `${lighten(baseBackgroundColor, 0.3)}`\n : `${darken(baseBackgroundColor, 0.3)}`\n : undefined;\n\n return (\n <>\n <TableRow\n data-index={renderDetailPanel ? staticRowIndex * 2 : staticRowIndex}\n data-pinned={!!isRowPinned || undefined}\n data-selected={isRowSelected || undefined}\n onDragEnter={handleDragEnter}\n onDragOver={handleDragOver}\n ref={(node: HTMLTableRowElement) => {\n if (node) {\n rowRef.current = node;\n rowVirtualizer?.measureElement(node);\n }\n }}\n selected={isRowSelected}\n {...tableRowProps}\n style={{\n transform: virtualRow\n ? `translateY(${virtualRow.start}px)`\n : undefined,\n ...tableRowProps?.style,\n }}\n sx={(theme: Theme) => ({\n '&:hover td:after': cellHighlightColorHover\n ? {\n backgroundColor: alpha(cellHighlightColorHover, 0.3),\n ...commonCellBeforeAfterStyles,\n }\n : undefined,\n backgroundColor: `${baseBackgroundColor} !important`,\n bottom:\n !virtualRow && bottomPinnedIndex !== undefined && isRowPinned\n ? `${\n bottomPinnedIndex * rowHeight +\n (enableStickyFooter ? tableFooterHeight - 1 : 0)\n }px`\n : undefined,\n boxSizing: 'border-box',\n display: layoutMode?.startsWith('grid') ? 'flex' : undefined,\n opacity: isRowPinned ? 0.97 : isDraggingRow || isHoveredRow ? 0.5 : 1,\n position: virtualRow\n ? 'absolute'\n : rowPinningDisplayMode?.includes('sticky') && isRowPinned\n ? 'sticky'\n : 'relative',\n td: {\n ...getCommonPinnedCellStyles({ table, theme }),\n },\n 'td:after': cellHighlightColor\n ? {\n backgroundColor: cellHighlightColor,\n ...commonCellBeforeAfterStyles,\n }\n : undefined,\n top: virtualRow\n ? 0\n : topPinnedIndex !== undefined && isRowPinned\n ? `${\n topPinnedIndex * rowHeight +\n (enableStickyHeader || isFullScreen ? tableHeadHeight - 1 : 0)\n }px`\n : undefined,\n transition: virtualRow ? 'none' : 'all 150ms ease-in-out',\n width: '100%',\n zIndex:\n rowPinningDisplayMode?.includes('sticky') && isRowPinned ? 2 : 0,\n ...(sx as any),\n })}\n >\n {virtualPaddingLeft ? (\n <td style={{ display: 'flex', width: virtualPaddingLeft }} />\n ) : null}\n {(virtualColumns ?? visibleCells).map(\n (cellOrVirtualCell, staticColumnIndex) => {\n let cell = cellOrVirtualCell as MRT_Cell<TData>;\n if (columnVirtualizer) {\n staticColumnIndex = (cellOrVirtualCell as MRT_VirtualItem).index;\n cell = visibleCells[staticColumnIndex];\n }\n const props = {\n cell,\n numRows,\n rowRef,\n staticColumnIndex,\n staticRowIndex,\n table,\n };\n const key = `${cell.id}-${staticRowIndex}`;\n return cell ? (\n memoMode === 'cells' &&\n cell.column.columnDef.columnDefType === 'data' &&\n !draggingColumn &&\n !draggingRow &&\n editingCell?.id !== cell.id &&\n editingRow?.id !== row.id ? (\n <Memo_MRT_TableBodyCell key={key} {...props} />\n ) : (\n <MRT_TableBodyCell key={key} {...props} />\n )\n ) : null;\n },\n )}\n {virtualPaddingRight ? (\n <td style={{ display: 'flex', width: virtualPaddingRight }} />\n ) : null}\n </TableRow>\n {renderDetailPanel && !row.getIsGrouped() && (\n <MRT_TableDetailPanel\n parentRowRef={rowRef}\n row={row}\n rowVirtualizer={rowVirtualizer}\n staticRowIndex={staticRowIndex}\n table={table}\n virtualRow={virtualRow}\n />\n )}\n </>\n );\n};\n\nexport const Memo_MRT_TableBodyRow = memo(\n MRT_TableBodyRow,\n (prev, next) =>\n prev.row === next.row && prev.staticRowIndex === next.staticRowIndex,\n) as typeof MRT_TableBodyRow;\n","import { memo, useMemo } from 'react';\nimport { type VirtualItem } from '@tanstack/react-virtual';\nimport TableBody, { type TableBodyProps } from '@mui/material/TableBody';\nimport Typography from '@mui/material/Typography';\nimport { MRT_TableBodyRow, Memo_MRT_TableBodyRow } from './MRT_TableBodyRow';\nimport { useMRT_RowVirtualizer } from '../../hooks/useMRT_RowVirtualizer';\nimport { useMRT_Rows } from '../../hooks/useMRT_Rows';\nimport {\n type MRT_ColumnVirtualizer,\n type MRT_Row,\n type MRT_RowData,\n type MRT_TableInstance,\n} from '../../types';\nimport { parseFromValuesOrFunc } from '../../utils/utils';\n\nexport interface MRT_TableBodyProps<TData extends MRT_RowData>\n extends TableBodyProps {\n columnVirtualizer?: MRT_ColumnVirtualizer;\n table: MRT_TableInstance<TData>;\n}\n\nexport const MRT_TableBody = <TData extends MRT_RowData>({\n columnVirtualizer,\n table,\n ...rest\n}: MRT_TableBodyProps<TData>) => {\n const {\n getBottomRows,\n getIsSomeRowsPinned,\n getRowModel,\n getState,\n getTopRows,\n options: {\n enableStickyFooter,\n enableStickyHeader,\n layoutMode,\n localization,\n memoMode,\n muiTableBodyProps,\n renderDetailPanel,\n renderEmptyRowsFallback,\n rowPinningDisplayMode,\n },\n refs: { tableFooterRef, tableHeadRef, tablePaperRef },\n } = table;\n const { columnFilters, globalFilter, isFullScreen, rowPinning } = getState();\n\n const tableBodyProps = {\n ...parseFromValuesOrFunc(muiTableBodyProps, { table }),\n ...rest,\n };\n\n const tableHeadHeight =\n ((enableStickyHeader || isFullScreen) &&\n tableHeadRef.current?.clientHeight) ||\n 0;\n const tableFooterHeight =\n (enableStickyFooter && tableFooterRef.current?.clientHeight) || 0;\n\n const pinnedRowIds = useMemo(() => {\n if (!rowPinning.bottom?.length && !rowPinning.top?.length) return [];\n return getRowModel()\n .rows.filter((row) => row.getIsPinned())\n .map((r) => r.id);\n }, [rowPinning, getRowModel().rows]);\n\n const rows = useMRT_Rows(table);\n\n const rowVirtualizer = useMRT_RowVirtualizer(table, rows);\n\n const { virtualRows } = rowVirtualizer ?? {};\n\n const commonRowProps = {\n columnVirtualizer,\n numRows: rows.length,\n table,\n };\n\n return (\n <>\n {!rowPinningDisplayMode?.includes('sticky') &&\n getIsSomeRowsPinned('top') && (\n <TableBody\n {...tableBodyProps}\n sx={(theme) => ({\n display: layoutMode?.startsWith('grid') ? 'grid' : undefined,\n position: 'sticky',\n top: tableHeadHeight - 1,\n zIndex: 1,\n ...(parseFromValuesOrFunc(tableBodyProps?.sx, theme) as any),\n })}\n >\n {getTopRows().map((row, staticRowIndex) => {\n const props = {\n ...commonRowProps,\n row,\n staticRowIndex,\n };\n return memoMode === 'rows' ? (\n <Memo_MRT_TableBodyRow key={row.id} {...props} />\n ) : (\n <MRT_TableBodyRow key={row.id} {...props} />\n );\n })}\n </TableBody>\n )}\n <TableBody\n {...tableBodyProps}\n sx={(theme) => ({\n display: layoutMode?.startsWith('grid') ? 'grid' : undefined,\n height: rowVirtualizer\n ? `${rowVirtualizer.getTotalSize()}px`\n : undefined,\n minHeight: !rows.length ? '100px' : undefined,\n position: 'relative',\n ...(parseFromValuesOrFunc(tableBodyProps?.sx, theme) as any),\n })}\n >\n {tableBodyProps?.children ??\n (!rows.length ? (\n <tr\n style={{\n display: layoutMode?.startsWith('grid') ? 'grid' : undefined,\n }}\n >\n <td\n colSpan={table.getVisibleLeafColumns().length}\n style={{\n display: layoutMode?.startsWith('grid') ? 'grid' : undefined,\n }}\n >\n {renderEmptyRowsFallback?.({ table }) ?? (\n <Typography\n sx={{\n color: 'text.secondary',\n fontStyle: 'italic',\n maxWidth: `min(100vw, ${\n tablePaperRef.current?.clientWidth ?? 360\n }px)`,\n py: '2rem',\n textAlign: 'center',\n width: '100%',\n }}\n >\n {globalFilter || columnFilters.length\n ? localization.noResultsFound\n : localization.noRecordsToDisplay}\n </Typography>\n )}\n </td>\n </tr>\n ) : (\n <>\n {(virtualRows ?? rows).map((rowOrVirtualRow, staticRowIndex) => {\n let row = rowOrVirtualRow as MRT_Row<TData>;\n if (rowVirtualizer) {\n if (renderDetailPanel) {\n if (rowOrVirtualRow.index % 2 === 1) {\n return null;\n } else {\n staticRowIndex = rowOrVirtualRow.index / 2;\n }\n } else {\n staticRowIndex = rowOrVirtualRow.index;\n }\n row = rows[staticRowIndex];\n }\n const props = {\n ...commonRowProps,\n pinnedRowIds,\n row,\n rowVirtualizer,\n staticRowIndex,\n virtualRow: rowVirtualizer\n ? (rowOrVirtualRow as VirtualItem)\n : undefined,\n };\n const key = `${row.id}-${row.index}`;\n return memoMode === 'rows' ? (\n <Memo_MRT_TableBodyRow key={key} {...props} />\n ) : (\n <MRT_TableBodyRow key={key} {...props} />\n );\n })}\n </>\n ))}\n </TableBody>\n {!rowPinningDisplayMode?.includes('sticky') &&\n getIsSomeRowsPinned('bottom') && (\n <TableBody\n {...tableBodyProps}\n sx={(theme) => ({\n bottom: tableFooterHeight - 1,\n display: layoutMode?.startsWith('grid') ? 'grid' : undefined,\n position: 'sticky',\n zIndex: 1,\n ...(parseFromValuesOrFunc(tableBodyProps?.sx, theme) as any),\n })}\n >\n {getBottomRows().map((row, staticRowIndex) => {\n const props = {\n ...commonRowProps,\n row,\n staticRowIndex,\n };\n return memoMode === 'rows' ? (\n <Memo_MRT_TableBodyRow key={row.id} {...props} />\n ) : (\n <MRT_TableBodyRow key={row.id} {...props} />\n );\n })}\n </TableBody>\n )}\n </>\n );\n};\n\nexport const Memo_MRT_TableBody = memo(\n MRT_TableBody,\n (prev, next) => prev.table.options.data === next.table.options.data,\n) as typeof MRT_TableBody;\n","import TableCell, { type TableCellProps } from '@mui/material/TableCell';\nimport { useTheme } from '@mui/material/styles';\nimport {\n type MRT_Header,\n type MRT_RowData,\n type MRT_TableInstance,\n} from '../../types';\nimport { getCommonMRTCellStyles } from '../../utils/style.utils';\nimport { parseFromValuesOrFunc } from '../../utils/utils';\nimport { cellKeyboardShortcuts } from '../../utils/cell.utils';\n\nexport interface MRT_TableFooterCellProps<TData extends MRT_RowData>\n extends TableCellProps {\n footer: MRT_Header<TData>;\n staticColumnIndex?: number;\n table: MRT_TableInstance<TData>;\n}\n\nexport const MRT_TableFooterCell = <TData extends MRT_RowData>({\n footer,\n staticColumnIndex,\n table,\n ...rest\n}: MRT_TableFooterCellProps<TData>) => {\n const theme = useTheme();\n const {\n getState,\n options: {\n enableColumnPinning,\n muiTableFooterCellProps,\n enableKeyboardShortcuts,\n },\n } = table;\n const { density } = getState();\n const { column } = footer;\n const { columnDef } = column;\n const { columnDefType } = columnDef;\n\n const isColumnPinned =\n enableColumnPinning &&\n columnDef.columnDefType !== 'group' &&\n column.getIsPinned();\n\n const args = { column, table };\n const tableCellProps = {\n ...parseFromValuesOrFunc(muiTableFooterCellProps, args),\n ...parseFromValuesOrFunc(columnDef.muiTableFooterCellProps, args),\n ...rest,\n };\n\n const handleKeyDown = (event: React.KeyboardEvent<HTMLTableCellElement>) => {\n tableCellProps?.onKeyDown?.(event);\n cellKeyboardShortcuts({\n event,\n cellValue: footer.column.columnDef.footer,\n table,\n });\n };\n\n return (\n <TableCell\n align={\n columnDefType === 'group'\n ? 'center'\n : theme.direction === 'rtl'\n ? 'right'\n : 'left'\n }\n colSpan={footer.colSpan}\n data-index={staticColumnIndex}\n data-pinned={!!isColumnPinned || undefined}\n tabIndex={enableKeyboardShortcuts ? 0 : undefined}\n variant=\"footer\"\n {...tableCellProps}\n onKeyDown={handleKeyDown}\n sx={(theme) => ({\n fontWeight: 'bold',\n p:\n density === 'compact'\n ? '0.5rem'\n : density === 'comfortable'\n ? '1rem'\n : '1.5rem',\n verticalAlign: 'top',\n ...getCommonMRTCellStyles({\n column,\n header: footer,\n table,\n tableCellProps,\n theme,\n }),\n ...(parseFromValuesOrFunc(tableCellProps?.sx, theme) as any),\n })}\n >\n {tableCellProps.children ??\n (footer.isPlaceholder\n ? null\n : (parseFromValuesOrFunc(columnDef.Footer, {\n column,\n footer,\n table,\n }) ??\n columnDef.footer ??\n null))}\n </TableCell>\n );\n};\n","import TableRow, { type TableRowProps } from '@mui/material/TableRow';\nimport { MRT_TableFooterCell } from './MRT_TableFooterCell';\nimport {\n type MRT_ColumnVirtualizer,\n type MRT_Header,\n type MRT_HeaderGroup,\n type MRT_RowData,\n type MRT_TableInstance,\n type MRT_VirtualItem,\n} from '../../types';\nimport { parseFromValuesOrFunc } from '../../utils/utils';\n\nexport interface MRT_TableFooterRowProps<TData extends MRT_RowData>\n extends TableRowProps {\n columnVirtualizer?: MRT_ColumnVirtualizer;\n footerGroup: MRT_HeaderGroup<TData>;\n table: MRT_TableInstance<TData>;\n}\n\nexport const MRT_TableFooterRow = <TData extends MRT_RowData>({\n columnVirtualizer,\n footerGroup,\n table,\n ...rest\n}: MRT_TableFooterRowProps<TData>) => {\n const {\n options: {\n layoutMode,\n mrtTheme: { baseBackgroundColor },\n muiTableFooterRowProps,\n },\n } = table;\n\n const { virtualColumns, virtualPaddingLeft, virtualPaddingRight } =\n columnVirtualizer ?? {};\n\n // if no content in row, skip row\n if (\n !footerGroup.headers?.some(\n (header) =>\n (typeof header.column.columnDef.footer === 'string' &&\n !!header.column.columnDef.footer) ||\n header.column.columnDef.Footer,\n )\n ) {\n return null;\n }\n\n const tableRowProps = {\n ...parseFromValuesOrFunc(muiTableFooterRowProps, {\n footerGroup,\n table,\n }),\n ...rest,\n };\n\n return (\n <TableRow\n {...tableRowProps}\n sx={(theme) => ({\n backgroundColor: baseBackgroundColor,\n display: layoutMode?.startsWith('grid') ? 'flex' : undefined,\n position: 'relative',\n width: '100%',\n ...(parseFromValuesOrFunc(tableRowProps?.sx, theme) as any),\n })}\n >\n {virtualPaddingLeft ? (\n <th style={{ display: 'flex', width: virtualPaddingLeft }} />\n ) : null}\n {(virtualColumns ?? footerGroup.headers).map(\n (footerOrVirtualFooter, staticColumnIndex) => {\n let footer = footerOrVirtualFooter as MRT_Header<TData>;\n if (columnVirtualizer) {\n staticColumnIndex = (footerOrVirtualFooter as MRT_VirtualItem)\n .index;\n footer = footerGroup.headers[staticColumnIndex];\n }\n\n return footer ? (\n <MRT_TableFooterCell\n footer={footer}\n key={footer.id}\n staticColumnIndex={staticColumnIndex}\n table={table}\n />\n ) : null;\n },\n )}\n {virtualPaddingRight ? (\n <th style={{ display: 'flex', width: virtualPaddingRight }} />\n ) : null}\n </TableRow>\n );\n};\n","import TableFooter, { type TableFooterProps } from '@mui/material/TableFooter';\nimport { MRT_TableFooterRow } from './MRT_TableFooterRow';\nimport {\n type MRT_ColumnVirtualizer,\n type MRT_RowData,\n type MRT_TableInstance,\n} from '../../types';\nimport { parseFromValuesOrFunc } from '../../utils/utils';\n\nexport interface MRT_TableFooterProps<TData extends MRT_RowData>\n extends TableFooterProps {\n columnVirtualizer?: MRT_ColumnVirtualizer;\n table: MRT_TableInstance<TData>;\n}\n\nexport const MRT_TableFooter = <TData extends MRT_RowData>({\n columnVirtualizer,\n table,\n ...rest\n}: MRT_TableFooterProps<TData>) => {\n const {\n getState,\n options: { enableStickyFooter, layoutMode, muiTableFooterProps },\n refs: { tableFooterRef },\n } = table;\n const { isFullScreen } = getState();\n\n const tableFooterProps = {\n ...parseFromValuesOrFunc(muiTableFooterProps, {\n table,\n }),\n ...rest,\n };\n\n const stickFooter =\n (isFullScreen || enableStickyFooter) && enableStickyFooter !== false;\n\n const footerGroups = table.getFooterGroups();\n\n //if no footer cells at all, skip footer\n if (\n !footerGroups.some((footerGroup) =>\n footerGroup.headers?.some(\n (header) =>\n (typeof header.column.columnDef.footer === 'string' &&\n !!header.column.columnDef.footer) ||\n header.column.columnDef.Footer,\n ),\n )\n ) {\n return null;\n }\n\n return (\n <TableFooter\n {...tableFooterProps}\n ref={(ref: HTMLTableSectionElement) => {\n tableFooterRef.current = ref;\n if (tableFooterProps?.ref) {\n // @ts-expect-error\n tableFooterProps.ref.current = ref;\n }\n }}\n sx={(theme) => ({\n bottom: stickFooter ? 0 : undefined,\n display: layoutMode?.startsWith('grid') ? 'grid' : undefined,\n opacity: stickFooter ? 0.97 : undefined,\n outline: stickFooter\n ? theme.palette.mode === 'light'\n ? `1px solid ${theme.palette.grey[300]}`\n : `1px solid ${theme.palette.grey[700]}`\n : undefined,\n position: stickFooter ? 'sticky' : 'relative',\n zIndex: stickFooter ? 1 : undefined,\n ...(parseFromValuesOrFunc(tableFooterProps?.sx, theme) as any),\n })}\n >\n {footerGroups.map((footerGroup) => (\n <MRT_TableFooterRow\n columnVirtualizer={columnVirtualizer}\n footerGroup={footerGroup as any}\n key={footerGroup.id}\n table={table}\n />\n ))}\n </TableFooter>\n );\n};\n","import { useMemo } from 'react';\nimport Menu, { type MenuProps } from '@mui/material/Menu';\nimport { MRT_ActionMenuItem } from './MRT_ActionMenuItem';\nimport {\n type MRT_FilterOption,\n type MRT_Header,\n type MRT_InternalFilterOption,\n type MRT_Localization,\n type MRT_RowData,\n type MRT_TableInstance,\n} from '../../types';\n\nexport const mrtFilterOptions = (\n localization: MRT_Localization,\n): MRT_InternalFilterOption[] => [\n {\n divider: false,\n label: localization.filterFuzzy,\n option: 'fuzzy',\n symbol: '≈',\n },\n {\n divider: false,\n label: localization.filterContains,\n option: 'contains',\n symbol: '*',\n },\n {\n divider: false,\n label: localization.filterStartsWith,\n option: 'startsWith',\n symbol: 'a',\n },\n {\n divider: true,\n label: localization.filterEndsWith,\n option: 'endsWith',\n symbol: 'z',\n },\n {\n divider: false,\n label: localization.filterEquals,\n option: 'equals',\n symbol: '=',\n },\n {\n divider: true,\n label: localization.filterNotEquals,\n option: 'notEquals',\n symbol: '≠',\n },\n {\n divider: false,\n label: localization.filterBetween,\n option: 'between',\n symbol: '⇿',\n },\n {\n divider: true,\n label: localization.filterBetweenInclusive,\n option: 'betweenInclusive',\n symbol: '⬌',\n },\n {\n divider: false,\n label: localization.filterGreaterThan,\n option: 'greaterThan',\n symbol: '>',\n },\n {\n divider: false,\n label: localization.filterGreaterThanOrEqualTo,\n option: 'greaterThanOrEqualTo',\n symbol: '≥',\n },\n {\n divider: false,\n label: localization.filterLessThan,\n option: 'lessThan',\n symbol: '<',\n },\n {\n divider: true,\n label: localization.filterLessThanOrEqualTo,\n option: 'lessThanOrEqualTo',\n symbol: '≤',\n },\n {\n divider: false,\n label: localization.filterEmpty,\n option: 'empty',\n symbol: '∅',\n },\n {\n divider: false,\n label: localization.filterNotEmpty,\n option: 'notEmpty',\n symbol: '!∅',\n },\n];\n\nconst rangeModes = ['between', 'betweenInclusive', 'inNumberRange'];\nconst emptyModes = ['empty', 'notEmpty'];\nconst arrModes = ['arrIncludesSome', 'arrIncludesAll', 'arrIncludes'];\nconst rangeVariants = ['range-slider', 'date-range', 'datetime-range', 'range'];\n\nexport interface MRT_FilterOptionMenuProps<TData extends MRT_RowData>\n extends Partial<MenuProps> {\n anchorEl: HTMLElement | null;\n header?: MRT_Header<TData>;\n onSelect?: () => void;\n setAnchorEl: (anchorEl: HTMLElement | null) => void;\n setFilterValue?: (filterValue: any) => void;\n table: MRT_TableInstance<TData>;\n}\n\nexport const MRT_FilterOptionMenu = <TData extends MRT_RowData>({\n anchorEl,\n header,\n onSelect,\n setAnchorEl,\n setFilterValue,\n table,\n ...rest\n}: MRT_FilterOptionMenuProps<TData>) => {\n const {\n getState,\n options: {\n columnFilterModeOptions,\n globalFilterModeOptions,\n localization,\n mrtTheme: { menuBackgroundColor },\n renderColumnFilterModeMenuItems,\n renderGlobalFilterModeMenuItems,\n },\n setColumnFilterFns,\n setGlobalFilterFn,\n } = table;\n const { density, globalFilterFn } = getState();\n const { column } = header ?? {};\n const { columnDef } = column ?? {};\n const currentFilterValue = column?.getFilterValue();\n\n let allowedColumnFilterOptions =\n columnDef?.columnFilterModeOptions ?? columnFilterModeOptions;\n\n if (rangeVariants.includes(columnDef?.filterVariant as string)) {\n allowedColumnFilterOptions = [\n ...rangeModes,\n ...(allowedColumnFilterOptions ?? []),\n ].filter((option) => rangeModes.includes(option));\n }\n\n const internalFilterOptions = useMemo(\n () =>\n mrtFilterOptions(localization).filter((filterOption) =>\n columnDef\n ? allowedColumnFilterOptions === undefined ||\n allowedColumnFilterOptions?.includes(filterOption.option)\n : (!globalFilterModeOptions ||\n globalFilterModeOptions.includes(filterOption.option)) &&\n ['contains', 'fuzzy', 'startsWith'].includes(filterOption.option),\n ),\n [],\n );\n\n const handleSelectFilterMode = (option: MRT_FilterOption) => {\n const prevFilterMode = columnDef?._filterFn ?? '';\n if (!header || !column) {\n // global filter mode\n setGlobalFilterFn(option);\n } else if (option !== prevFilterMode) {\n // column filter mode\n setColumnFilterFns((prev: { [key: string]: any }) => ({\n ...prev,\n [header.id]: option,\n }));\n\n // reset filter value and/or perform new filter render\n if (emptyModes.includes(option)) {\n // will now be empty/notEmpty filter mode\n if (\n currentFilterValue !== ' ' &&\n !emptyModes.includes(prevFilterMode)\n ) {\n column.setFilterValue(' ');\n } else if (currentFilterValue) {\n column.setFilterValue(currentFilterValue); // perform new filter render\n }\n } else if (\n columnDef?.filterVariant === 'multi-select' ||\n arrModes.includes(option as string)\n ) {\n // will now be array filter mode\n if (\n currentFilterValue instanceof String ||\n (currentFilterValue as Array<any>)?.length\n ) {\n column.setFilterValue([]);\n setFilterValue?.([]);\n } else if (currentFilterValue) {\n column.setFilterValue(currentFilterValue); // perform new filter render\n }\n } else if (\n columnDef?.filterVariant?.includes('range') ||\n rangeModes.includes(option as MRT_FilterOption)\n ) {\n // will now be range filter mode\n if (\n !Array.isArray(currentFilterValue) ||\n (!(currentFilterValue as Array<any>)?.every((v) => v === '') &&\n !rangeModes.includes(prevFilterMode))\n ) {\n column.setFilterValue(['', '']);\n setFilterValue?.('');\n } else {\n column.setFilterValue(currentFilterValue); // perform new filter render\n }\n } else {\n // will now be single value filter mode\n if (Array.isArray(currentFilterValue)) {\n column.setFilterValue('');\n setFilterValue?.('');\n } else if (\n currentFilterValue === ' ' &&\n emptyModes.includes(prevFilterMode)\n ) {\n column.setFilterValue(undefined);\n } else {\n column.setFilterValue(currentFilterValue); // perform new filter render\n }\n }\n }\n setAnchorEl(null);\n onSelect?.();\n };\n\n const filterOption =\n !!header && columnDef ? columnDef._filterFn : globalFilterFn;\n\n return (\n <Menu\n MenuListProps={{\n dense: density === 'compact',\n sx: {\n backgroundColor: menuBackgroundColor,\n },\n }}\n anchorEl={anchorEl}\n anchorOrigin={{ horizontal: 'right', vertical: 'center' }}\n disableScrollLock\n onClose={() => setAnchorEl(null)}\n open={!!anchorEl}\n {...rest}\n >\n {(header && column && columnDef\n ? (columnDef.renderColumnFilterModeMenuItems?.({\n column: column as any,\n internalFilterOptions,\n onSelectFilterMode: handleSelectFilterMode,\n table,\n }) ??\n renderColumnFilterModeMenuItems?.({\n column: column as any,\n internalFilterOptions,\n onSelectFilterMode: handleSelectFilterMode,\n table,\n }))\n : renderGlobalFilterModeMenuItems?.({\n internalFilterOptions,\n onSelectFilterMode: handleSelectFilterMode,\n table,\n })) ??\n internalFilterOptions.map(\n ({ divider, label, option, symbol }, index) => (\n <MRT_ActionMenuItem\n divider={divider}\n icon={symbol}\n key={index}\n label={label}\n onClick={() => handleSelectFilterMode(option as MRT_FilterOption)}\n selected={option === filterOption}\n table={table}\n value={option}\n />\n ),\n )}\n </Menu>\n );\n};\n","import { type MouseEvent, useState } from 'react';\nimport Menu, { type MenuProps } from '@mui/material/Menu';\nimport { MRT_ActionMenuItem } from './MRT_ActionMenuItem';\nimport { MRT_FilterOptionMenu } from './MRT_FilterOptionMenu';\nimport {\n type MRT_Header,\n type MRT_RowData,\n type MRT_TableInstance,\n} from '../../types';\n\nexport interface MRT_ColumnActionMenuProps<TData extends MRT_RowData>\n extends Partial<MenuProps> {\n anchorEl: HTMLElement | null;\n header: MRT_Header<TData>;\n setAnchorEl: (anchorEl: HTMLElement | null) => void;\n table: MRT_TableInstance<TData>;\n}\n\nexport const MRT_ColumnActionMenu = <TData extends MRT_RowData>({\n anchorEl,\n header,\n setAnchorEl,\n table,\n ...rest\n}: MRT_ColumnActionMenuProps<TData>) => {\n const {\n getAllLeafColumns,\n getState,\n options: {\n columnFilterDisplayMode,\n columnFilterModeOptions,\n enableColumnFilterModes,\n enableColumnFilters,\n enableColumnPinning,\n enableColumnResizing,\n enableGrouping,\n enableHiding,\n enableSorting,\n enableSortingRemoval,\n icons: {\n ClearAllIcon,\n DynamicFeedIcon,\n FilterListIcon,\n FilterListOffIcon,\n PushPinIcon,\n RestartAltIcon,\n SortIcon,\n ViewColumnIcon,\n VisibilityOffIcon,\n },\n localization,\n mrtTheme: { menuBackgroundColor },\n renderColumnActionsMenuItems,\n },\n refs: { filterInputRefs },\n setColumnFilterFns,\n setColumnOrder,\n setColumnSizingInfo,\n setShowColumnFilters,\n } = table;\n const { column } = header;\n const { columnDef } = column;\n const { columnSizing, columnVisibility, density, showColumnFilters } =\n getState();\n const columnFilterValue = column.getFilterValue();\n\n const [filterMenuAnchorEl, setFilterMenuAnchorEl] =\n useState<HTMLElement | null>(null);\n\n const handleClearSort = () => {\n column.clearSorting();\n setAnchorEl(null);\n };\n\n const handleSortAsc = () => {\n column.toggleSorting(false);\n setAnchorEl(null);\n };\n\n const handleSortDesc = () => {\n column.toggleSorting(true);\n setAnchorEl(null);\n };\n\n const handleResetColumnSize = () => {\n setColumnSizingInfo((old) => ({ ...old, isResizingColumn: false }));\n column.resetSize();\n setAnchorEl(null);\n };\n\n const handleHideColumn = () => {\n column.toggleVisibility(false);\n setAnchorEl(null);\n };\n\n const handlePinColumn = (pinDirection: 'left' | 'right' | false) => {\n column.pin(pinDirection);\n setAnchorEl(null);\n };\n\n const handleGroupByColumn = () => {\n column.toggleGrouping();\n setColumnOrder((old: any) => ['mrt-row-expand', ...old]);\n setAnchorEl(null);\n };\n\n const handleClearFilter = () => {\n column.setFilterValue(undefined);\n setAnchorEl(null);\n if (['empty', 'notEmpty'].includes(columnDef._filterFn)) {\n setColumnFilterFns((prev) => ({\n ...prev,\n [header.id]: allowedColumnFilterOptions?.[0] ?? 'fuzzy',\n }));\n }\n };\n\n const handleFilterByColumn = () => {\n setShowColumnFilters(true);\n queueMicrotask(() => filterInputRefs.current?.[`${column.id}-0`]?.focus());\n setAnchorEl(null);\n };\n\n const handleShowAllColumns = () => {\n getAllLeafColumns()\n .filter((col) => col.columnDef.enableHiding !== false)\n .forEach((col) => col.toggleVisibility(true));\n setAnchorEl(null);\n };\n\n const handleOpenFilterModeMenu = (event: MouseEvent<HTMLElement>) => {\n event.stopPropagation();\n setFilterMenuAnchorEl(event.currentTarget);\n };\n\n const isSelectFilter = !!columnDef.filterSelectOptions;\n\n const allowedColumnFilterOptions =\n columnDef?.columnFilterModeOptions ?? columnFilterModeOptions;\n\n const showFilterModeSubMenu =\n enableColumnFilterModes &&\n columnDef.enableColumnFilterModes !== false &&\n !isSelectFilter &&\n (allowedColumnFilterOptions === undefined ||\n !!allowedColumnFilterOptions?.length);\n\n const internalColumnMenuItems = [\n ...(enableSorting && column.getCanSort()\n ? [\n enableSortingRemoval !== false && (\n <MRT_ActionMenuItem\n disabled={column.getIsSorted() === false}\n icon={<ClearAllIcon />}\n key={0}\n label={localization.clearSort}\n onClick={handleClearSort}\n table={table}\n />\n ),\n <MRT_ActionMenuItem\n disabled={column.getIsSorted() === 'asc'}\n icon={\n <SortIcon style={{ transform: 'rotate(180deg) scaleX(-1)' }} />\n }\n key={1}\n label={localization.sortByColumnAsc?.replace(\n '{column}',\n String(columnDef.header),\n )}\n onClick={handleSortAsc}\n table={table}\n />,\n <MRT_ActionMenuItem\n disabled={column.getIsSorted() === 'desc'}\n divider={enableColumnFilters || enableGrouping || enableHiding}\n icon={<SortIcon />}\n key={2}\n label={localization.sortByColumnDesc?.replace(\n '{column}',\n String(columnDef.header),\n )}\n onClick={handleSortDesc}\n table={table}\n />,\n ]\n : []),\n ...(enableColumnFilters && column.getCanFilter()\n ? [\n <MRT_ActionMenuItem\n disabled={\n !columnFilterValue ||\n (Array.isArray(columnFilterValue) &&\n !columnFilterValue.filter((value) => value).length)\n }\n icon={<FilterListOffIcon />}\n key={3}\n label={localization.clearFilter}\n onClick={handleClearFilter}\n table={table}\n />,\n columnFilterDisplayMode === 'subheader' && (\n <MRT_ActionMenuItem\n disabled={showColumnFilters && !enableColumnFilterModes}\n divider={enableGrouping || enableHiding}\n icon={<FilterListIcon />}\n key={4}\n label={localization.filterByColumn?.replace(\n '{column}',\n String(columnDef.header),\n )}\n onClick={\n showColumnFilters\n ? handleOpenFilterModeMenu\n : handleFilterByColumn\n }\n onOpenSubMenu={\n showFilterModeSubMenu ? handleOpenFilterModeMenu : undefined\n }\n table={table}\n />\n ),\n showFilterModeSubMenu && (\n <MRT_FilterOptionMenu\n anchorEl={filterMenuAnchorEl}\n header={header}\n key={5}\n onSelect={handleFilterByColumn}\n setAnchorEl={setFilterMenuAnchorEl}\n table={table}\n />\n ),\n ].filter(Boolean)\n : []),\n ...(enableGrouping && column.getCanGroup()\n ? [\n <MRT_ActionMenuItem\n divider={enableColumnPinning}\n icon={<DynamicFeedIcon />}\n key={6}\n label={localization[\n column.getIsGrouped() ? 'ungroupByColumn' : 'groupByColumn'\n ]?.replace('{column}', String(columnDef.header))}\n onClick={handleGroupByColumn}\n table={table}\n />,\n ]\n : []),\n ...(enableColumnPinning && column.getCanPin()\n ? [\n <MRT_ActionMenuItem\n disabled={column.getIsPinned() === 'left' || !column.getCanPin()}\n icon={<PushPinIcon style={{ transform: 'rotate(90deg)' }} />}\n key={7}\n label={localization.pinToLeft}\n onClick={() => handlePinColumn('left')}\n table={table}\n />,\n <MRT_ActionMenuItem\n disabled={column.getIsPinned() === 'right' || !column.getCanPin()}\n icon={<PushPinIcon style={{ transform: 'rotate(-90deg)' }} />}\n key={8}\n label={localization.pinToRight}\n onClick={() => handlePinColumn('right')}\n table={table}\n />,\n <MRT_ActionMenuItem\n disabled={!column.getIsPinned()}\n divider={enableHiding}\n icon={<PushPinIcon />}\n key={9}\n label={localization.unpin}\n onClick={() => handlePinColumn(false)}\n table={table}\n />,\n ]\n : []),\n ...(enableColumnResizing && column.getCanResize()\n ? [\n <MRT_ActionMenuItem\n disabled={columnSizing[column.id] === undefined}\n icon={<RestartAltIcon />}\n key={10}\n label={localization.resetColumnSize}\n onClick={handleResetColumnSize}\n table={table}\n />,\n ]\n : []),\n ...(enableHiding\n ? [\n <MRT_ActionMenuItem\n disabled={!column.getCanHide()}\n icon={<VisibilityOffIcon />}\n key={11}\n label={localization.hideColumn?.replace(\n '{column}',\n String(columnDef.header),\n )}\n onClick={handleHideColumn}\n table={table}\n />,\n <MRT_ActionMenuItem\n disabled={\n !Object.values(columnVisibility).filter((visible) => !visible)\n .length\n }\n icon={<ViewColumnIcon />}\n key={12}\n label={localization.showAllColumns?.replace(\n '{column}',\n String(columnDef.header),\n )}\n onClick={handleShowAllColumns}\n table={table}\n />,\n ]\n : []),\n ].filter(Boolean);\n\n return (\n <Menu\n MenuListProps={{\n dense: density === 'compact',\n sx: {\n backgroundColor: menuBackgroundColor,\n },\n }}\n anchorEl={anchorEl}\n disableScrollLock\n onClose={() => setAnchorEl(null)}\n open={!!anchorEl}\n {...rest}\n >\n {columnDef.renderColumnActionsMenuItems?.({\n closeMenu: () => setAnchorEl(null),\n column,\n internalColumnMenuItems,\n table,\n }) ??\n renderColumnActionsMenuItems?.({\n closeMenu: () => setAnchorEl(null),\n column,\n internalColumnMenuItems,\n table,\n }) ??\n internalColumnMenuItems}\n </Menu>\n );\n};\n","import { type MouseEvent, useState } from 'react';\nimport IconButton, { type IconButtonProps } from '@mui/material/IconButton';\nimport Tooltip from '@mui/material/Tooltip';\nimport {\n type MRT_Header,\n type MRT_RowData,\n type MRT_TableInstance,\n} from '../../types';\nimport { getCommonTooltipProps } from '../../utils/style.utils';\nimport { parseFromValuesOrFunc } from '../../utils/utils';\nimport { MRT_ColumnActionMenu } from '../menus/MRT_ColumnActionMenu';\n\nexport interface MRT_TableHeadCellColumnActionsButtonProps<\n TData extends MRT_RowData,\n> extends IconButtonProps {\n header: MRT_Header<TData>;\n table: MRT_TableInstance<TData>;\n}\n\nexport const MRT_TableHeadCellColumnActionsButton = <\n TData extends MRT_RowData,\n>({\n header,\n table,\n ...rest\n}: MRT_TableHeadCellColumnActionsButtonProps<TData>) => {\n const {\n options: {\n icons: { MoreVertIcon },\n localization,\n muiColumnActionsButtonProps,\n },\n } = table;\n const { column } = header;\n const { columnDef } = column;\n\n const [anchorEl, setAnchorEl] = useState<HTMLElement | null>(null);\n\n const handleClick = (event: MouseEvent<HTMLElement>) => {\n event.stopPropagation();\n event.preventDefault();\n setAnchorEl(event.currentTarget);\n };\n\n const iconButtonProps = {\n ...parseFromValuesOrFunc(muiColumnActionsButtonProps, {\n column,\n table,\n }),\n ...parseFromValuesOrFunc(columnDef.muiColumnActionsButtonProps, {\n column,\n table,\n }),\n ...rest,\n };\n\n return (\n <>\n <Tooltip\n {...getCommonTooltipProps('top')}\n title={iconButtonProps?.title ?? localization.columnActions}\n >\n <IconButton\n aria-label={localization.columnActions}\n onClick={handleClick}\n size=\"small\"\n {...iconButtonProps}\n sx={(theme) => ({\n '&:hover': {\n opacity: 1,\n },\n height: '2rem',\n m: '-8px -4px',\n opacity: 0.3,\n transition: 'all 150ms',\n width: '2rem',\n ...(parseFromValuesOrFunc(iconButtonProps?.sx, theme) as any),\n })}\n title={undefined}\n >\n {iconButtonProps?.children ?? (\n <MoreVertIcon style={{ transform: 'scale(0.9)' }} />\n )}\n </IconButton>\n </Tooltip>\n {anchorEl && (\n <MRT_ColumnActionMenu\n anchorEl={anchorEl}\n header={header}\n setAnchorEl={setAnchorEl}\n table={table}\n />\n )}\n </>\n );\n};\n","import Checkbox, { type CheckboxProps } from '@mui/material/Checkbox';\nimport FormControlLabel from '@mui/material/FormControlLabel';\nimport Tooltip from '@mui/material/Tooltip';\nimport {\n type MRT_Column,\n type MRT_RowData,\n type MRT_TableInstance,\n} from '../../types';\nimport { getCommonTooltipProps } from '../../utils/style.utils';\nimport { parseFromValuesOrFunc } from '../../utils/utils';\n\nexport interface MRT_FilterCheckboxProps<TData extends MRT_RowData>\n extends CheckboxProps {\n column: MRT_Column<TData>;\n table: MRT_TableInstance<TData>;\n}\n\nexport const MRT_FilterCheckbox = <TData extends MRT_RowData>({\n column,\n table,\n ...rest\n}: MRT_FilterCheckboxProps<TData>) => {\n const {\n getState,\n options: { localization, muiFilterCheckboxProps },\n } = table;\n const { density } = getState();\n const { columnDef } = column;\n\n const checkboxProps = {\n ...parseFromValuesOrFunc(muiFilterCheckboxProps, {\n column,\n table,\n }),\n ...parseFromValuesOrFunc(columnDef.muiFilterCheckboxProps, {\n column,\n table,\n }),\n ...rest,\n };\n\n const filterLabel = localization.filterByColumn?.replace(\n '{column}',\n columnDef.header,\n );\n\n return (\n <Tooltip\n {...getCommonTooltipProps()}\n title={checkboxProps?.title ?? filterLabel}\n >\n <FormControlLabel\n control={\n <Checkbox\n checked={column.getFilterValue() === 'true'}\n color={\n column.getFilterValue() === undefined ? 'default' : 'primary'\n }\n indeterminate={column.getFilterValue() === undefined}\n size={density === 'compact' ? 'small' : 'medium'}\n {...checkboxProps}\n onChange={(e, checked) => {\n column.setFilterValue(\n column.getFilterValue() === undefined\n ? 'true'\n : column.getFilterValue() === 'true'\n ? 'false'\n : undefined,\n );\n checkboxProps?.onChange?.(e, checked);\n }}\n onClick={(e) => {\n e.stopPropagation();\n checkboxProps?.onClick?.(e);\n }}\n sx={(theme) => ({\n height: '2.5rem',\n width: '2.5rem',\n ...(parseFromValuesOrFunc(checkboxProps?.sx, theme) as any),\n })}\n />\n }\n disableTypography\n label={checkboxProps.title ?? filterLabel}\n sx={{ color: 'text.secondary', fontWeight: 'normal', mt: '-4px' }}\n title={undefined}\n />\n </Tooltip>\n );\n};\n","import {\n type ChangeEvent,\n type MouseEvent,\n SyntheticEvent,\n useCallback,\n useEffect,\n useRef,\n useState,\n} from 'react';\nimport Autocomplete, { AutocompleteInputChangeReason } from '@mui/material/Autocomplete';\nimport Box from '@mui/material/Box';\nimport Checkbox from '@mui/material/Checkbox';\nimport Chip from '@mui/material/Chip';\nimport IconButton from '@mui/material/IconButton';\nimport InputAdornment from '@mui/material/InputAdornment';\nimport MenuItem from '@mui/material/MenuItem';\nimport TextField, { type TextFieldProps } from '@mui/material/TextField';\nimport Tooltip from '@mui/material/Tooltip';\nimport { debounce } from '@mui/material/utils';\nimport { DatePicker } from '@mui/x-date-pickers/DatePicker';\nimport { DateTimePicker } from '@mui/x-date-pickers/DateTimePicker';\nimport { TimePicker } from '@mui/x-date-pickers/TimePicker';\nimport {\n type DropdownOption,\n type MRT_Header,\n type MRT_RowData,\n type MRT_TableInstance,\n} from '../../types';\nimport {\n getColumnFilterInfo,\n useDropdownOptions,\n} from '../../utils/column.utils';\nimport { getValueAndLabel, parseFromValuesOrFunc } from '../../utils/utils';\nimport { MRT_FilterOptionMenu } from '../menus/MRT_FilterOptionMenu';\n\nexport interface MRT_FilterTextFieldProps<TData extends MRT_RowData>\n extends TextFieldProps<'standard'> {\n header: MRT_Header<TData>;\n rangeFilterIndex?: number;\n table: MRT_TableInstance<TData>;\n}\n\nexport const MRT_FilterTextField = <TData extends MRT_RowData>({\n header,\n rangeFilterIndex,\n table,\n ...rest\n}: MRT_FilterTextFieldProps<TData>) => {\n const {\n options: {\n enableColumnFilterModes,\n icons: { CloseIcon, FilterListIcon },\n localization,\n manualFiltering,\n muiFilterAutocompleteProps,\n muiFilterDatePickerProps,\n muiFilterDateTimePickerProps,\n muiFilterTextFieldProps,\n muiFilterTimePickerProps,\n },\n refs: { filterInputRefs },\n setColumnFilterFns,\n } = table;\n const { column } = header;\n const { columnDef } = column;\n const { filterVariant } = columnDef;\n\n const args = { column, rangeFilterIndex, table };\n\n const textFieldProps = {\n ...parseFromValuesOrFunc(muiFilterTextFieldProps, args),\n ...parseFromValuesOrFunc(columnDef.muiFilterTextFieldProps, args),\n ...rest,\n };\n\n const autocompleteProps = {\n ...parseFromValuesOrFunc(muiFilterAutocompleteProps, args),\n ...parseFromValuesOrFunc(columnDef.muiFilterAutocompleteProps, args),\n };\n\n const datePickerProps = {\n ...parseFromValuesOrFunc(muiFilterDatePickerProps, args),\n ...parseFromValuesOrFunc(columnDef.muiFilterDatePickerProps, args),\n } as any;\n\n const dateTimePickerProps = {\n ...parseFromValuesOrFunc(muiFilterDateTimePickerProps, args),\n ...parseFromValuesOrFunc(columnDef.muiFilterDateTimePickerProps, args),\n } as any;\n\n const timePickerProps = {\n ...parseFromValuesOrFunc(muiFilterTimePickerProps, args),\n ...parseFromValuesOrFunc(columnDef.muiFilterTimePickerProps, args),\n } as any;\n\n const {\n allowedColumnFilterOptions,\n currentFilterOption,\n facetedUniqueValues,\n isAutocompleteFilter,\n isDateFilter,\n isMultiSelectFilter,\n isRangeFilter,\n isSelectFilter,\n isTextboxFilter,\n } = getColumnFilterInfo({ header, table });\n\n const dropdownOptions = useDropdownOptions({ header, table });\n\n const filterChipLabel = ['empty', 'notEmpty'].includes(currentFilterOption)\n ? localization[\n `filter${\n currentFilterOption?.charAt?.(0)?.toUpperCase() +\n currentFilterOption?.slice(1)\n }` as keyof typeof localization\n ]\n : '';\n\n const filterPlaceholder = !isRangeFilter\n ? (textFieldProps?.placeholder ??\n localization.filterByColumn?.replace(\n '{column}',\n String(columnDef.header),\n ))\n : rangeFilterIndex === 0\n ? localization.min\n : rangeFilterIndex === 1\n ? localization.max\n : '';\n\n const showChangeModeButton = !!(\n enableColumnFilterModes &&\n columnDef.enableColumnFilterModes !== false &&\n !rangeFilterIndex &&\n (allowedColumnFilterOptions === undefined ||\n !!allowedColumnFilterOptions?.length)\n );\n\n const [anchorEl, setAnchorEl] = useState<HTMLElement | null>(null);\n const [filterValue, setFilterValue] = useState<string | string[]>(() =>\n isMultiSelectFilter\n ? (column.getFilterValue() as string[]) || []\n : isRangeFilter\n ? (column.getFilterValue() as [string, string])?.[\n rangeFilterIndex as number\n ] || ''\n : isAutocompleteFilter \n ? typeof column.getFilterValue() === 'string' ? column.getFilterValue() as string : ''\n : ((column.getFilterValue() as string) ?? ''),\n );\n const [autocompleteValue, setAutocompleteValue] =\n useState<DropdownOption | null>(\n () => isAutocompleteFilter ? ((column.getFilterValue() || null) as DropdownOption | null) : null,\n );\n\n const handleChangeDebounced = useCallback(\n debounce(\n (newValue: any) => {\n if (isRangeFilter) {\n column.setFilterValue((old: Array<Date | null | number | string>) => {\n const newFilterValues = old ?? ['', ''];\n newFilterValues[rangeFilterIndex as number] = newValue ?? undefined;\n return newFilterValues;\n });\n } else {\n column.setFilterValue(newValue ?? undefined);\n }\n },\n isTextboxFilter ? (manualFiltering ? 400 : 200) : 1,\n ),\n [],\n );\n\n const handleChange = (newValue: any) => {\n setFilterValue(newValue ?? '');\n handleChangeDebounced(newValue);\n };\n\n const handleTextFieldChange = (event: ChangeEvent<HTMLInputElement>) => {\n const newValue =\n textFieldProps.type === 'date'\n ? event.target.valueAsDate\n : textFieldProps.type === 'number'\n ? event.target.valueAsNumber\n : event.target.value;\n handleChange(newValue);\n textFieldProps?.onChange?.(event);\n };\n\n const handleAutocompleteInputChange = (_event: SyntheticEvent, newValue: string, _reason: AutocompleteInputChangeReason) => {\n handleChange(newValue)\n };\n\n const handleAutocompleteChange = (newValue: DropdownOption | null) => {\n setAutocompleteValue(newValue);\n handleChangeDebounced(getValueAndLabel(newValue).value);\n };\n\n const handleClear = () => {\n if (isMultiSelectFilter) {\n setFilterValue([]);\n column.setFilterValue([]);\n } else if (isRangeFilter) {\n setFilterValue('');\n column.setFilterValue((old: [string | undefined, string | undefined]) => {\n const newFilterValues = (Array.isArray(old) && old) || ['', ''];\n newFilterValues[rangeFilterIndex as number] = undefined;\n return newFilterValues;\n });\n } else if (isAutocompleteFilter) {\n setAutocompleteValue(null)\n setFilterValue('')\n // when using 'autocomplete' this function is called only inside effect and only if the filterValue === undefined\n // so the following call is excessive; should be uncommented if the handleClear becomes part of the Autocomplete component callbacks\n // column.setFilterValue(undefined)\n } else {\n setFilterValue('');\n column.setFilterValue(undefined);\n }\n };\n\n const handleClearEmptyFilterChip = () => {\n setFilterValue('');\n column.setFilterValue(undefined);\n setColumnFilterFns((prev) => ({\n ...prev,\n [header.id]: allowedColumnFilterOptions?.[0] ?? 'fuzzy',\n }));\n };\n\n const handleFilterMenuOpen = (event: MouseEvent<HTMLElement>) => {\n setAnchorEl(event.currentTarget);\n };\n\n const isMounted = useRef(false);\n\n useEffect(() => {\n if (isMounted.current) {\n const filterValue = column.getFilterValue();\n if (filterValue === undefined) {\n handleClear();\n } else if (isRangeFilter && rangeFilterIndex !== undefined) {\n setFilterValue((filterValue as [string, string])[rangeFilterIndex]);\n } else {\n setFilterValue(filterValue as string);\n }\n }\n isMounted.current = true;\n }, [column.getFilterValue()]);\n\n if (columnDef.Filter) {\n return (\n <>{columnDef.Filter?.({ column, header, rangeFilterIndex, table })}</>\n );\n }\n\n const endAdornment =\n !isAutocompleteFilter && !isDateFilter && !filterChipLabel ? (\n <InputAdornment\n position=\"end\"\n sx={{\n mr: isSelectFilter || isMultiSelectFilter ? '20px' : undefined,\n visibility: (filterValue?.length ?? 0) > 0 ? 'visible' : 'hidden',\n }}\n >\n <Tooltip placement=\"right\" title={localization.clearFilter ?? ''}>\n <span>\n <IconButton\n aria-label={localization.clearFilter}\n disabled={!filterValue?.toString()?.length}\n onClick={handleClear}\n size=\"small\"\n sx={{\n height: '2rem',\n transform: 'scale(0.9)',\n width: '2rem',\n }}\n >\n <CloseIcon />\n </IconButton>\n </span>\n </Tooltip>\n </InputAdornment>\n ) : null;\n\n const startAdornment = showChangeModeButton ? (\n <InputAdornment position=\"start\">\n <Tooltip title={localization.changeFilterMode}>\n <span>\n <IconButton\n aria-label={localization.changeFilterMode}\n onClick={handleFilterMenuOpen}\n size=\"small\"\n sx={{ height: '1.75rem', width: '1.75rem' }}\n >\n <FilterListIcon />\n </IconButton>\n </span>\n </Tooltip>\n {filterChipLabel && (\n <Chip label={filterChipLabel} onDelete={handleClearEmptyFilterChip} />\n )}\n </InputAdornment>\n ) : null;\n\n const commonTextFieldProps: TextFieldProps<any> = {\n fullWidth: true,\n helperText: showChangeModeButton ? (\n <label>\n {localization.filterMode.replace(\n '{filterType}',\n localization[\n `filter${\n currentFilterOption?.charAt(0)?.toUpperCase() +\n currentFilterOption?.slice(1)\n }` as keyof typeof localization\n ],\n )}\n </label>\n ) : null,\n inputRef: (inputRef) => {\n filterInputRefs.current![`${column.id}-${rangeFilterIndex ?? 0}`] =\n inputRef;\n if (textFieldProps.inputRef) {\n textFieldProps.inputRef = inputRef;\n }\n },\n margin: 'none',\n placeholder:\n filterChipLabel || isSelectFilter || isMultiSelectFilter\n ? undefined\n : filterPlaceholder,\n variant: 'standard',\n ...textFieldProps,\n slotProps: {\n ...textFieldProps.slotProps,\n formHelperText: {\n sx: {\n fontSize: '0.75rem',\n lineHeight: '0.8rem',\n whiteSpace: 'nowrap',\n },\n ...textFieldProps.slotProps?.formHelperText,\n },\n input: endAdornment //hack because mui looks for presence of endAdornment key instead of undefined\n ? {endAdornment, startAdornment, ...textFieldProps.slotProps?.input}\n : {startAdornment, ...textFieldProps.slotProps?.input},\n htmlInput: {\n 'aria-label': filterPlaceholder,\n autoComplete: 'off',\n disabled: !!filterChipLabel,\n sx: {\n textOverflow: 'ellipsis',\n width: filterChipLabel ? 0 : undefined,\n },\n title: filterPlaceholder,\n ...textFieldProps.slotProps?.htmlInput,\n },\n },\n onKeyDown: (e) => {\n e.stopPropagation();\n textFieldProps.onKeyDown?.(e);\n },\n sx: (theme) => ({\n minWidth: isDateFilter\n ? '160px'\n : enableColumnFilterModes && rangeFilterIndex === 0\n ? '110px'\n : isRangeFilter\n ? '100px'\n : !filterChipLabel\n ? '120px'\n : 'auto',\n mx: '-2px',\n p: 0,\n width: 'calc(100% + 4px)',\n ...(parseFromValuesOrFunc(textFieldProps?.sx, theme) as any),\n }),\n };\n\n const commonDatePickerProps = {\n onChange: (newDate: any) => {\n handleChange(newDate);\n },\n value: filterValue || null,\n };\n\n return (\n <>\n {filterVariant?.startsWith('time') ? (\n <TimePicker\n {...commonDatePickerProps}\n {...timePickerProps}\n slotProps={{\n field: {\n clearable: true,\n onClear: () => handleClear(),\n ...timePickerProps?.slotProps?.field,\n },\n textField: {\n ...commonTextFieldProps,\n ...timePickerProps?.slotProps?.textField,\n },\n }}\n />\n ) : filterVariant?.startsWith('datetime') ? (\n <DateTimePicker\n {...commonDatePickerProps}\n {...dateTimePickerProps}\n slotProps={{\n field: {\n clearable: true,\n onClear: () => handleClear(),\n ...dateTimePickerProps?.slotProps?.field,\n },\n textField: {\n ...commonTextFieldProps,\n ...dateTimePickerProps?.slotProps?.textField,\n },\n }}\n />\n ) : filterVariant?.startsWith('date') ? (\n <DatePicker\n {...commonDatePickerProps}\n {...datePickerProps}\n slotProps={{\n field: {\n clearable: true,\n onClear: () => handleClear(),\n ...datePickerProps?.slotProps?.field,\n },\n textField: {\n ...commonTextFieldProps,\n ...datePickerProps?.slotProps?.textField,\n },\n }}\n />\n ) : isAutocompleteFilter ? (\n <Autocomplete\n freeSolo\n getOptionLabel={(option: DropdownOption) =>\n getValueAndLabel(option).label\n }\n onChange={(_e, newValue) =>\n handleAutocompleteChange(newValue as DropdownOption | null)\n }\n options={\n dropdownOptions?.map((option) => getValueAndLabel(option)) ?? []\n }\n inputValue={filterValue as string}\n onInputChange={handleAutocompleteInputChange}\n {...autocompleteProps}\n renderInput={(builtinTextFieldProps: TextFieldProps) => (\n <TextField\n {...commonTextFieldProps}\n {...builtinTextFieldProps}\n slotProps={{\n ...builtinTextFieldProps.slotProps,\n ...commonTextFieldProps.slotProps,\n input: {\n ...builtinTextFieldProps.InputProps,\n ...builtinTextFieldProps.slotProps?.input,\n startAdornment:\n //@ts-expect-error\n commonTextFieldProps?.slotProps?.input?.startAdornment,\n },\n htmlInput: {\n ...builtinTextFieldProps.inputProps,\n ...builtinTextFieldProps.slotProps?.htmlInput,\n ...commonTextFieldProps?.slotProps?.htmlInput,\n },\n }}\n onClick={(e: MouseEvent<HTMLInputElement>) => e.stopPropagation()}\n />\n )}\n value={autocompleteValue}\n />\n ) : (\n <TextField\n select={isSelectFilter || isMultiSelectFilter}\n {...commonTextFieldProps}\n slotProps={{\n ...commonTextFieldProps.slotProps,\n inputLabel: {\n shrink: isSelectFilter || isMultiSelectFilter,\n ...(commonTextFieldProps.slotProps?.inputLabel as any),\n },\n select: {\n MenuProps: { disableScrollLock: true },\n displayEmpty: true,\n multiple: isMultiSelectFilter,\n renderValue: isMultiSelectFilter\n ? (selected: any) =>\n !Array.isArray(selected) || selected?.length === 0 ? (\n <Box sx={{ opacity: 0.5 }}>{filterPlaceholder}</Box>\n ) : (\n <Box\n sx={{ display: 'flex', flexWrap: 'wrap', gap: '2px' }}\n >\n {selected.map((value: string) => {\n const selectedValue = dropdownOptions?.find(\n (option) =>\n getValueAndLabel(option).value === value,\n );\n return (\n <Chip\n key={value}\n label={getValueAndLabel(selectedValue).label}\n />\n );\n })}\n </Box>\n )\n : undefined,\n ...commonTextFieldProps.slotProps?.select,\n },\n }}\n onChange={handleTextFieldChange}\n onClick={(e: MouseEvent<HTMLInputElement>) => e.stopPropagation()}\n value={\n isMultiSelectFilter\n ? Array.isArray(filterValue)\n ? filterValue\n : []\n : filterValue\n }\n >\n {(isSelectFilter || isMultiSelectFilter) && [\n <MenuItem disabled divider hidden key=\"p\" value=\"\">\n <Box sx={{ opacity: 0.5 }}>{filterPlaceholder}</Box>\n </MenuItem>,\n ...[\n textFieldProps.children ??\n dropdownOptions?.map((option, index) => {\n const { label, value } = getValueAndLabel(option);\n return (\n <MenuItem\n key={`${index}-${value}`}\n sx={{\n alignItems: 'center',\n display: 'flex',\n gap: '0.5rem',\n m: 0,\n }}\n value={value}\n >\n {isMultiSelectFilter && (\n <Checkbox\n checked={(\n (column.getFilterValue() ?? []) as string[]\n ).includes(value)}\n sx={{ mr: '0.5rem' }}\n />\n )}\n {label}{' '}\n {!columnDef.filterSelectOptions &&\n `(${facetedUniqueValues.get(value)})`}\n </MenuItem>\n );\n }),\n ],\n ]}\n </TextField>\n )}\n <MRT_FilterOptionMenu\n anchorEl={anchorEl}\n header={header}\n setAnchorEl={setAnchorEl}\n setFilterValue={setFilterValue}\n table={table}\n />\n </>\n );\n};\n","import Box, { type BoxProps } from '@mui/material/Box';\nimport { MRT_FilterTextField } from './MRT_FilterTextField';\nimport {\n type MRT_Header,\n type MRT_RowData,\n type MRT_TableInstance,\n} from '../../types';\nimport { parseFromValuesOrFunc } from '../../utils/utils';\n\nexport interface MRT_FilterRangeFieldsProps<TData extends MRT_RowData>\n extends BoxProps {\n header: MRT_Header<TData>;\n table: MRT_TableInstance<TData>;\n}\n\nexport const MRT_FilterRangeFields = <TData extends MRT_RowData>({\n header,\n table,\n ...rest\n}: MRT_FilterRangeFieldsProps<TData>) => {\n return (\n <Box\n {...rest}\n sx={(theme) => ({\n display: 'grid',\n gap: '1rem',\n gridTemplateColumns: '1fr 1fr',\n ...(parseFromValuesOrFunc(rest?.sx, theme) as any),\n })}\n >\n {[0, 1].map((rangeFilterIndex) => (\n <MRT_FilterTextField\n header={header}\n key={rangeFilterIndex}\n rangeFilterIndex={rangeFilterIndex}\n table={table}\n />\n ))}\n </Box>\n );\n};\n","import { useEffect, useRef, useState } from 'react';\nimport FormHelperText from '@mui/material/FormHelperText';\nimport Slider, { type SliderProps } from '@mui/material/Slider';\nimport Stack from '@mui/material/Stack';\nimport {\n type MRT_Header,\n type MRT_RowData,\n type MRT_TableInstance,\n} from '../../types';\nimport { parseFromValuesOrFunc } from '../../utils/utils';\n\nexport interface MRT_FilterRangeSliderProps<TData extends MRT_RowData>\n extends SliderProps {\n header: MRT_Header<TData>;\n table: MRT_TableInstance<TData>;\n}\n\nexport const MRT_FilterRangeSlider = <TData extends MRT_RowData>({\n header,\n table,\n ...rest\n}: MRT_FilterRangeSliderProps<TData>) => {\n const {\n options: { enableColumnFilterModes, localization, muiFilterSliderProps },\n refs: { filterInputRefs },\n } = table;\n const { column } = header;\n const { columnDef } = column;\n\n const currentFilterOption = columnDef._filterFn;\n\n const showChangeModeButton =\n enableColumnFilterModes && columnDef.enableColumnFilterModes !== false;\n\n const sliderProps = {\n ...parseFromValuesOrFunc(muiFilterSliderProps, { column, table }),\n ...parseFromValuesOrFunc(columnDef.muiFilterSliderProps, { column, table }),\n ...rest,\n };\n\n let [min, max] =\n sliderProps.min !== undefined && sliderProps.max !== undefined\n ? [sliderProps.min, sliderProps.max]\n : (column.getFacetedMinMaxValues() ?? [0, 1]);\n\n //fix potential TanStack Table bugs where min or max is an array\n if (Array.isArray(min)) min = min[0];\n if (Array.isArray(max)) max = max[0];\n if (min === null) min = 0;\n if (max === null) max = 1;\n\n const [filterValues, setFilterValues] = useState([min, max]);\n const columnFilterValue = column.getFilterValue();\n\n const isMounted = useRef(false);\n\n // prevent moving the focus to the next/prev cell when using the arrow keys\n const handleKeyDown = (event: React.KeyboardEvent) => {\n if (event.key === 'ArrowLeft' || event.key === 'ArrowRight') {\n event.stopPropagation();\n }\n };\n\n useEffect(() => {\n if (isMounted.current) {\n if (columnFilterValue === undefined) {\n setFilterValues([min, max]);\n } else if (Array.isArray(columnFilterValue)) {\n setFilterValues(columnFilterValue);\n }\n }\n isMounted.current = true;\n }, [columnFilterValue, min, max]);\n\n return (\n <Stack>\n <Slider\n disableSwap\n max={max}\n min={min}\n onChange={(_event, values) => {\n setFilterValues(values as [number, number]);\n }}\n onChangeCommitted={(_event, value) => {\n if (Array.isArray(value)) {\n if (value[0] <= min && value[1] >= max) {\n //if the user has selected the entire range, remove the filter\n column.setFilterValue(undefined);\n } else {\n column.setFilterValue(value as [number, number]);\n }\n }\n }}\n onKeyDown={handleKeyDown}\n value={filterValues}\n valueLabelDisplay=\"auto\"\n {...sliderProps}\n slotProps={{\n input: {\n ref: (node) => {\n if (node) {\n filterInputRefs.current![`${column.id}-0`] = node;\n // @ts-expect-error\n if (sliderProps?.slotProps?.input?.ref) {\n //@ts-expect-error\n sliderProps.slotProps.input.ref = node;\n }\n }\n },\n },\n }}\n sx={(theme) => ({\n m: 'auto',\n minWidth: `${column.getSize() - 50}px`,\n mt: !showChangeModeButton ? '10px' : '6px',\n px: '4px',\n width: 'calc(100% - 8px)',\n ...(parseFromValuesOrFunc(sliderProps?.sx, theme) as any),\n })}\n />\n {showChangeModeButton ? (\n <FormHelperText\n sx={{\n fontSize: '0.75rem',\n lineHeight: '0.8rem',\n m: '-3px -6px',\n whiteSpace: 'nowrap',\n }}\n >\n {localization.filterMode.replace(\n '{filterType}',\n localization[\n `filter${\n currentFilterOption?.charAt(0)?.toUpperCase() +\n currentFilterOption?.slice(1)\n }` as keyof typeof localization\n ],\n )}\n </FormHelperText>\n ) : null}\n </Stack>\n );\n};\n","import Collapse, { type CollapseProps } from '@mui/material/Collapse';\nimport {\n type MRT_Header,\n type MRT_RowData,\n type MRT_TableInstance,\n} from '../../types';\nimport { getColumnFilterInfo } from '../../utils/column.utils';\nimport { MRT_FilterCheckbox } from '../inputs/MRT_FilterCheckbox';\nimport { MRT_FilterRangeFields } from '../inputs/MRT_FilterRangeFields';\nimport { MRT_FilterRangeSlider } from '../inputs/MRT_FilterRangeSlider';\nimport { MRT_FilterTextField } from '../inputs/MRT_FilterTextField';\n\nexport interface MRT_TableHeadCellFilterContainerProps<\n TData extends MRT_RowData,\n> extends CollapseProps {\n header: MRT_Header<TData>;\n table: MRT_TableInstance<TData>;\n}\n\nexport const MRT_TableHeadCellFilterContainer = <TData extends MRT_RowData>({\n header,\n table,\n ...rest\n}: MRT_TableHeadCellFilterContainerProps<TData>) => {\n const {\n getState,\n options: { columnFilterDisplayMode },\n } = table;\n const { showColumnFilters } = getState();\n const { column } = header;\n const { columnDef } = column;\n const { isRangeFilter } = getColumnFilterInfo({ header, table });\n\n return (\n <Collapse\n in={showColumnFilters || columnFilterDisplayMode === 'popover'}\n mountOnEnter\n unmountOnExit\n {...rest}\n >\n {columnDef.filterVariant === 'checkbox' ? (\n <MRT_FilterCheckbox column={column} table={table} />\n ) : columnDef.filterVariant === 'range-slider' ? (\n <MRT_FilterRangeSlider header={header} table={table} />\n ) : isRangeFilter ? (\n <MRT_FilterRangeFields header={header} table={table} />\n ) : (\n <MRT_FilterTextField header={header} table={table} />\n )}\n </Collapse>\n );\n};\n","import { type MouseEvent, useState } from 'react';\nimport Box from '@mui/material/Box';\nimport Grow from '@mui/material/Grow';\nimport IconButton, { type IconButtonProps } from '@mui/material/IconButton';\nimport Popover from '@mui/material/Popover';\nimport Tooltip from '@mui/material/Tooltip';\nimport { MRT_TableHeadCellFilterContainer } from './MRT_TableHeadCellFilterContainer';\nimport {\n type MRT_Header,\n type MRT_RowData,\n type MRT_TableInstance,\n} from '../../types';\nimport {\n getColumnFilterInfo,\n useDropdownOptions,\n} from '../../utils/column.utils';\nimport { getValueAndLabel, parseFromValuesOrFunc } from '../../utils/utils';\n\nexport interface MRT_TableHeadCellFilterLabelProps<TData extends MRT_RowData>\n extends IconButtonProps {\n header: MRT_Header<TData>;\n table: MRT_TableInstance<TData>;\n}\n\nexport const MRT_TableHeadCellFilterLabel = <TData extends MRT_RowData = {}>({\n header,\n table,\n ...rest\n}: MRT_TableHeadCellFilterLabelProps<TData>) => {\n const {\n options: {\n columnFilterDisplayMode,\n icons: { FilterAltIcon },\n localization,\n },\n refs: { filterInputRefs },\n setShowColumnFilters,\n } = table;\n const { column } = header;\n const { columnDef } = column;\n\n const filterValue = column.getFilterValue() as [string, string] | string;\n\n const [anchorEl, setAnchorEl] = useState<HTMLButtonElement | null>(null);\n\n const {\n currentFilterOption,\n isMultiSelectFilter,\n isRangeFilter,\n isSelectFilter,\n } = getColumnFilterInfo({ header, table });\n\n const dropdownOptions = useDropdownOptions({ header, table });\n\n const getSelectLabel = (index?: number) =>\n getValueAndLabel(\n dropdownOptions?.find(\n (option) =>\n getValueAndLabel(option).value ===\n (index !== undefined ? filterValue[index] : filterValue),\n ),\n ).label;\n\n const isFilterActive =\n (Array.isArray(filterValue) && filterValue.some(Boolean)) ||\n (!!filterValue && !Array.isArray(filterValue));\n\n const filterTooltip =\n columnFilterDisplayMode === 'popover' && !isFilterActive\n ? localization.filterByColumn?.replace(\n '{column}',\n String(columnDef.header),\n )\n : localization.filteringByColumn\n .replace('{column}', String(columnDef.header))\n .replace(\n '{filterType}',\n currentFilterOption\n ? localization[\n `filter${\n currentFilterOption.charAt(0).toUpperCase() +\n currentFilterOption.slice(1)\n }` as keyof typeof localization\n ]\n : '',\n )\n .replace(\n '{filterValue}',\n `\"${\n Array.isArray(filterValue)\n ? (filterValue as [string, string])\n .map((value, index) =>\n isMultiSelectFilter ? getSelectLabel(index) : value,\n )\n .join(\n `\" ${isRangeFilter ? localization.and : localization.or} \"`,\n )\n : isSelectFilter\n ? getSelectLabel()\n : (filterValue as string)\n }\"`,\n )\n .replace('\" \"', '');\n\n return (\n <>\n <Grow\n in={\n columnFilterDisplayMode === 'popover' ||\n (!!filterValue && !isRangeFilter) ||\n (isRangeFilter && (!!filterValue?.[0] || !!filterValue?.[1]))\n }\n unmountOnExit\n >\n <Box component=\"span\" sx={{ flex: '0 0' }}>\n <Tooltip placement=\"top\" title={filterTooltip}>\n <IconButton\n disableRipple\n onClick={(event: MouseEvent<HTMLButtonElement>) => {\n if (columnFilterDisplayMode === 'popover') {\n setAnchorEl(event.currentTarget);\n } else {\n setShowColumnFilters(true);\n }\n queueMicrotask(() => {\n filterInputRefs.current?.[`${column.id}-0`]?.focus?.();\n filterInputRefs.current?.[`${column.id}-0`]?.select?.();\n });\n event.stopPropagation();\n }}\n size=\"small\"\n {...rest}\n sx={(theme) => ({\n height: '16px',\n ml: '4px',\n opacity: isFilterActive ? 1 : 0.3,\n p: '8px',\n transform: 'scale(0.75)',\n transition: 'all 150ms ease-in-out',\n width: '16px',\n ...(parseFromValuesOrFunc(rest?.sx, theme) as any),\n })}\n >\n <FilterAltIcon />\n </IconButton>\n </Tooltip>\n </Box>\n </Grow>\n {columnFilterDisplayMode === 'popover' && (\n <Popover\n anchorEl={anchorEl}\n anchorOrigin={{\n horizontal: 'center',\n vertical: 'top',\n }}\n disableScrollLock\n onClick={(event) => event.stopPropagation()}\n onClose={(event) => {\n //@ts-expect-error\n event.stopPropagation();\n setAnchorEl(null);\n }}\n onKeyDown={(event) => event.key === 'Enter' && setAnchorEl(null)}\n open={!!anchorEl}\n slotProps={{ paper: { sx: { overflow: 'visible' } } }}\n transformOrigin={{\n horizontal: 'center',\n vertical: 'bottom',\n }}\n >\n <Box sx={{ p: '1rem' }}>\n <MRT_TableHeadCellFilterContainer header={header} table={table} />\n </Box>\n </Popover>\n )}\n </>\n );\n};\n","import { type DragEvent, type RefObject } from 'react';\nimport { type IconButtonProps } from '@mui/material/IconButton';\nimport {\n type MRT_Column,\n type MRT_RowData,\n type MRT_TableInstance,\n} from '../../types';\nimport { reorderColumn } from '../../utils/column.utils';\nimport { parseFromValuesOrFunc } from '../../utils/utils';\nimport { MRT_GrabHandleButton } from '../buttons/MRT_GrabHandleButton';\n\nexport interface MRT_TableHeadCellGrabHandleProps<TData extends MRT_RowData>\n extends IconButtonProps {\n column: MRT_Column<TData>;\n table: MRT_TableInstance<TData>;\n tableHeadCellRef: RefObject<HTMLTableCellElement | null>;\n}\n\nexport const MRT_TableHeadCellGrabHandle = <TData extends MRT_RowData>({\n column,\n table,\n tableHeadCellRef,\n ...rest\n}: MRT_TableHeadCellGrabHandleProps<TData>) => {\n const {\n getState,\n options: { enableColumnOrdering, muiColumnDragHandleProps },\n setColumnOrder,\n setColumnPinning,\n setDraggingColumn,\n setHoveredColumn,\n } = table;\n const { columnDef } = column;\n const { columnOrder, draggingColumn, hoveredColumn } = getState();\n\n const iconButtonProps = {\n ...parseFromValuesOrFunc(muiColumnDragHandleProps, { column, table }),\n ...parseFromValuesOrFunc(columnDef.muiColumnDragHandleProps, {\n column,\n table,\n }),\n ...rest,\n };\n\n const handleDragStart = (event: DragEvent<HTMLButtonElement>) => {\n iconButtonProps?.onDragStart?.(event);\n setDraggingColumn(column);\n try {\n event.dataTransfer.setDragImage(\n tableHeadCellRef.current as HTMLElement,\n 0,\n 0,\n );\n } catch (e) {\n console.error(e);\n }\n };\n\n const handleDragEnd = (event: DragEvent<HTMLButtonElement>) => {\n iconButtonProps?.onDragEnd?.(event);\n if (hoveredColumn?.id === 'drop-zone') {\n column.toggleGrouping();\n } else if (\n enableColumnOrdering &&\n hoveredColumn &&\n hoveredColumn?.id !== draggingColumn?.id\n ) {\n const reorderedColumns = reorderColumn(column, hoveredColumn as MRT_Column<TData>, columnOrder);\n setColumnOrder(reorderedColumns);\n setColumnPinning(({ left = [], right = [] }) => ({\n left: reorderedColumns.filter(header => left.includes(header)),\n right: reorderedColumns.filter(header => right.includes(header)),\n }));\n }\n setDraggingColumn(null);\n setHoveredColumn(null);\n };\n\n return (\n <MRT_GrabHandleButton\n {...iconButtonProps}\n onDragEnd={handleDragEnd}\n onDragStart={handleDragStart}\n table={table}\n />\n );\n};\n","import Box from '@mui/material/Box';\nimport Divider, { type DividerProps } from '@mui/material/Divider';\nimport {\n type MRT_Header,\n type MRT_RowData,\n type MRT_TableInstance,\n} from '../../types';\nimport { parseFromValuesOrFunc } from '../../utils/utils';\n\nexport interface MRT_TableHeadCellResizeHandleProps<TData extends MRT_RowData>\n extends DividerProps {\n header: MRT_Header<TData>;\n table: MRT_TableInstance<TData>;\n}\n\nexport const MRT_TableHeadCellResizeHandle = <TData extends MRT_RowData>({\n header,\n table,\n ...rest\n}: MRT_TableHeadCellResizeHandleProps<TData>) => {\n const {\n getState,\n options: { columnResizeDirection, columnResizeMode },\n setColumnSizingInfo,\n } = table;\n const { density } = getState();\n const { column } = header;\n\n const handler = header.getResizeHandler();\n\n const mx =\n density === 'compact'\n ? '-8px'\n : density === 'comfortable'\n ? '-16px'\n : '-24px';\n\n const lr = column.columnDef.columnDefType === 'display' ? '4px' : '0';\n\n return (\n <Box\n className=\"Mui-TableHeadCell-ResizeHandle-Wrapper\"\n onDoubleClick={() => {\n setColumnSizingInfo((old) => ({\n ...old,\n isResizingColumn: false,\n }));\n column.resetSize();\n }}\n onMouseDown={handler}\n onTouchStart={handler}\n style={{\n transform:\n column.getIsResizing() && columnResizeMode === 'onEnd'\n ? `translateX(${\n (columnResizeDirection === 'rtl' ? -1 : 1) *\n (getState().columnSizingInfo.deltaOffset ?? 0)\n }px)`\n : undefined,\n }}\n sx={(theme) => ({\n '&:active > hr': {\n backgroundColor: theme.palette.info.main,\n opacity:\n header.subHeaders.length || columnResizeMode === 'onEnd' ? 1 : 0,\n },\n cursor: 'col-resize',\n left: columnResizeDirection === 'rtl' ? lr : undefined,\n ml: columnResizeDirection === 'rtl' ? mx : undefined,\n mr: columnResizeDirection === 'ltr' ? mx : undefined,\n position: 'absolute',\n px: '4px',\n right: columnResizeDirection === 'ltr' ? lr : undefined,\n })}\n >\n <Divider\n className=\"Mui-TableHeadCell-ResizeHandle-Divider\"\n flexItem\n orientation=\"vertical\"\n sx={(theme) => ({\n borderRadius: '2px',\n borderWidth: '2px',\n height: '24px',\n touchAction: 'none',\n transform: 'translateX(4px)',\n transition: column.getIsResizing()\n ? undefined\n : 'all 150ms ease-in-out',\n userSelect: 'none',\n zIndex: 4,\n ...(parseFromValuesOrFunc(rest?.sx, theme) as any),\n })}\n />\n </Box>\n );\n};\n","import Badge from '@mui/material/Badge';\nimport TableSortLabel, {\n type TableSortLabelProps,\n} from '@mui/material/TableSortLabel';\nimport Tooltip from '@mui/material/Tooltip';\nimport {\n type MRT_Header,\n type MRT_RowData,\n type MRT_TableInstance,\n} from '../../types';\nimport { parseFromValuesOrFunc } from '../../utils/utils';\n\nexport interface MRT_TableHeadCellSortLabelProps<TData extends MRT_RowData>\n extends TableSortLabelProps {\n header: MRT_Header<TData>;\n table: MRT_TableInstance<TData>;\n}\n\nexport const MRT_TableHeadCellSortLabel = <TData extends MRT_RowData>({\n header,\n table,\n ...rest\n}: MRT_TableHeadCellSortLabelProps<TData>) => {\n const {\n getState,\n options: {\n icons: { ArrowDownwardIcon, SyncAltIcon },\n localization,\n },\n } = table;\n const { column } = header;\n const { columnDef } = column;\n const { isLoading, showSkeletons, sorting } = getState();\n\n const isSorted = !!column.getIsSorted();\n\n const sortTooltip =\n isLoading || showSkeletons\n ? ''\n : column.getIsSorted()\n ? column.getIsSorted() === 'desc'\n ? localization.sortedByColumnDesc.replace(\n '{column}',\n columnDef.header,\n )\n : localization.sortedByColumnAsc.replace('{column}', columnDef.header)\n : column.getNextSortingOrder() === 'desc'\n ? localization.sortByColumnDesc.replace('{column}', columnDef.header)\n : localization.sortByColumnAsc.replace('{column}', columnDef.header);\n\n const direction = isSorted\n ? (column.getIsSorted() as 'asc' | 'desc')\n : undefined;\n\n return (\n <Tooltip placement=\"top\" title={sortTooltip}>\n <Badge\n badgeContent={sorting.length > 1 ? column.getSortIndex() + 1 : 0}\n overlap=\"circular\"\n >\n <TableSortLabel\n IconComponent={\n !isSorted\n ? (props) => (\n <SyncAltIcon\n {...props}\n direction={direction}\n style={{\n transform: 'rotate(-90deg) scaleX(0.9) translateX(-1px)',\n }}\n />\n )\n : ArrowDownwardIcon\n }\n active\n aria-label={sortTooltip}\n direction={direction}\n onClick={(e) => {\n e.stopPropagation();\n header.column.getToggleSortingHandler()?.(e);\n }}\n {...rest}\n sx={(theme) => ({\n '.MuiTableSortLabel-icon': {\n color: `${\n theme.palette.mode === 'dark'\n ? theme.palette.text.primary\n : theme.palette.text.secondary\n } !important`,\n },\n flex: '0 0',\n opacity: isSorted ? 1 : 0.3,\n transition: 'all 150ms ease-in-out',\n width: '3ch',\n ...(parseFromValuesOrFunc(rest?.sx, theme) as any),\n })}\n />\n </Badge>\n </Tooltip>\n );\n};\n","import { type DragEvent, useMemo } from 'react';\nimport Box from '@mui/material/Box';\nimport TableCell, { type TableCellProps } from '@mui/material/TableCell';\nimport { useTheme } from '@mui/material/styles';\nimport { type Theme } from '@mui/material/styles';\nimport { MRT_TableHeadCellColumnActionsButton } from './MRT_TableHeadCellColumnActionsButton';\nimport { MRT_TableHeadCellFilterContainer } from './MRT_TableHeadCellFilterContainer';\nimport { MRT_TableHeadCellFilterLabel } from './MRT_TableHeadCellFilterLabel';\nimport { MRT_TableHeadCellGrabHandle } from './MRT_TableHeadCellGrabHandle';\nimport { MRT_TableHeadCellResizeHandle } from './MRT_TableHeadCellResizeHandle';\nimport { MRT_TableHeadCellSortLabel } from './MRT_TableHeadCellSortLabel';\nimport {\n type MRT_ColumnVirtualizer,\n type MRT_Header,\n type MRT_RowData,\n type MRT_TableInstance,\n} from '../../types';\nimport { getCommonMRTCellStyles } from '../../utils/style.utils';\nimport { parseFromValuesOrFunc } from '../../utils/utils';\nimport { cellKeyboardShortcuts } from '../../utils/cell.utils';\n\nexport interface MRT_TableHeadCellProps<TData extends MRT_RowData>\n extends TableCellProps {\n columnVirtualizer?: MRT_ColumnVirtualizer;\n header: MRT_Header<TData>;\n staticColumnIndex?: number;\n table: MRT_TableInstance<TData>;\n}\n\nexport const MRT_TableHeadCell = <TData extends MRT_RowData>({\n columnVirtualizer,\n header,\n staticColumnIndex,\n table,\n ...rest\n}: MRT_TableHeadCellProps<TData>) => {\n const theme = useTheme();\n const {\n getState,\n options: {\n columnFilterDisplayMode,\n columnResizeDirection,\n columnResizeMode,\n enableKeyboardShortcuts,\n enableColumnActions,\n enableColumnDragging,\n enableColumnOrdering,\n enableColumnPinning,\n enableGrouping,\n enableMultiSort,\n layoutMode,\n mrtTheme: { draggingBorderColor },\n muiTableHeadCellProps,\n },\n refs: { tableHeadCellRefs },\n setHoveredColumn,\n } = table;\n const {\n columnSizingInfo,\n density,\n draggingColumn,\n grouping,\n hoveredColumn,\n showColumnFilters,\n } = getState();\n const { column } = header;\n const { columnDef } = column;\n const { columnDefType } = columnDef;\n\n const tableCellProps = {\n ...parseFromValuesOrFunc(muiTableHeadCellProps, { column, table }),\n ...parseFromValuesOrFunc(columnDef.muiTableHeadCellProps, {\n column,\n table,\n }),\n ...rest,\n };\n\n const isColumnPinned =\n enableColumnPinning &&\n columnDef.columnDefType !== 'group' &&\n column.getIsPinned();\n\n const showColumnActions =\n (enableColumnActions || columnDef.enableColumnActions) &&\n columnDef.enableColumnActions !== false;\n\n const showDragHandle =\n enableColumnDragging !== false &&\n columnDef.enableColumnDragging !== false &&\n (enableColumnDragging ||\n (enableColumnOrdering && columnDef.enableColumnOrdering !== false) ||\n (enableGrouping &&\n columnDef.enableGrouping !== false &&\n !grouping.includes(column.id)));\n\n const headerPL = useMemo(() => {\n let pl = 0;\n if (column.getCanSort()) pl += 1;\n if (showColumnActions) pl += 1.75;\n if (showDragHandle) pl += 1.5;\n return pl;\n }, [showColumnActions, showDragHandle]);\n\n const draggingBorders = useMemo(() => {\n const showResizeBorder =\n columnSizingInfo.isResizingColumn === column.id &&\n columnResizeMode === 'onChange' &&\n !header.subHeaders.length;\n\n const borderStyle = showResizeBorder\n ? `2px solid ${draggingBorderColor} !important`\n : draggingColumn?.id === column.id\n ? `1px dashed ${theme.palette.grey[500]}`\n : hoveredColumn?.id === column.id\n ? `2px dashed ${draggingBorderColor}`\n : undefined;\n\n if (showResizeBorder) {\n return columnResizeDirection === 'ltr'\n ? { borderRight: borderStyle }\n : { borderLeft: borderStyle };\n }\n const draggingBorders = borderStyle\n ? {\n borderLeft: borderStyle,\n borderRight: borderStyle,\n borderTop: borderStyle,\n }\n : undefined;\n\n return draggingBorders;\n }, [draggingColumn, hoveredColumn, columnSizingInfo.isResizingColumn]);\n\n const handleDragEnter = (_e: DragEvent) => {\n if (enableGrouping && hoveredColumn?.id === 'drop-zone') {\n setHoveredColumn(null);\n }\n if (enableColumnOrdering && draggingColumn && columnDefType !== 'group') {\n setHoveredColumn(\n columnDef.enableColumnOrdering !== false ? column : null,\n );\n }\n };\n\n const handleDragOver = (e: DragEvent) => {\n if (columnDef.enableColumnOrdering !== false) {\n e.preventDefault();\n }\n };\n\n const handleKeyDown = (event: React.KeyboardEvent<HTMLTableCellElement>) => {\n tableCellProps?.onKeyDown?.(event);\n cellKeyboardShortcuts({\n event,\n cellValue: header.column.columnDef.header,\n table,\n header,\n });\n };\n\n const HeaderElement =\n parseFromValuesOrFunc(columnDef.Header, {\n column,\n header,\n table,\n }) ?? columnDef.header;\n\n return (\n <TableCell\n align={\n columnDefType === 'group'\n ? 'center'\n : theme.direction === 'rtl'\n ? 'right'\n : 'left'\n }\n aria-sort={\n column.getIsSorted()\n ? column.getIsSorted() === 'asc'\n ? 'ascending'\n : 'descending'\n : 'none'\n }\n colSpan={header.colSpan}\n data-can-sort={column.getCanSort() || undefined}\n data-index={staticColumnIndex}\n data-pinned={!!isColumnPinned || undefined}\n data-sort={column.getIsSorted() || undefined}\n onDragEnter={handleDragEnter}\n onDragOver={handleDragOver}\n ref={(node: HTMLTableCellElement) => {\n if (node) {\n tableHeadCellRefs.current![column.id] = node;\n if (columnDefType !== 'group') {\n columnVirtualizer?.measureElement?.(node);\n }\n }\n }}\n tabIndex={enableKeyboardShortcuts ? 0 : undefined}\n {...tableCellProps}\n onKeyDown={handleKeyDown}\n sx={(theme: Theme) => ({\n '& :hover': {\n '.MuiButtonBase-root': {\n opacity: 1,\n },\n },\n flexDirection: layoutMode?.startsWith('grid') ? 'column' : undefined,\n fontWeight: 'bold',\n overflow: 'visible',\n p:\n density === 'compact'\n ? '0.5rem'\n : density === 'comfortable'\n ? columnDefType === 'display'\n ? '0.75rem'\n : '1rem'\n : columnDefType === 'display'\n ? '1rem 1.25rem'\n : '1.5rem',\n pb:\n columnDefType === 'display'\n ? 0\n : showColumnFilters || density === 'compact'\n ? '0.4rem'\n : '0.6rem',\n pt:\n columnDefType === 'group' || density === 'compact'\n ? '0.25rem'\n : density === 'comfortable'\n ? '.75rem'\n : '1.25rem',\n userSelect: enableMultiSort && column.getCanSort() ? 'none' : undefined,\n verticalAlign: 'top',\n ...getCommonMRTCellStyles({\n column,\n header,\n table,\n tableCellProps,\n theme,\n }),\n ...draggingBorders,\n })}\n >\n {header.isPlaceholder\n ? null\n : (tableCellProps.children ?? (\n <Box\n className=\"Mui-TableHeadCell-Content\"\n sx={{\n alignItems: 'center',\n display: 'flex',\n flexDirection:\n tableCellProps?.align === 'right' ? 'row-reverse' : 'row',\n justifyContent:\n columnDefType === 'group' ||\n tableCellProps?.align === 'center'\n ? 'center'\n : column.getCanResize()\n ? 'space-between'\n : 'flex-start',\n position: 'relative',\n width: '100%',\n }}\n >\n <Box\n className=\"Mui-TableHeadCell-Content-Labels\"\n onClick={column.getToggleSortingHandler()}\n sx={{\n alignItems: 'center',\n cursor:\n column.getCanSort() && columnDefType !== 'group'\n ? 'pointer'\n : undefined,\n display: 'flex',\n flexDirection:\n tableCellProps?.align === 'right' ? 'row-reverse' : 'row',\n overflow: columnDefType === 'data' ? 'hidden' : undefined,\n pl:\n tableCellProps?.align === 'center'\n ? `${headerPL}rem`\n : undefined,\n }}\n >\n <Box\n className=\"Mui-TableHeadCell-Content-Wrapper\"\n sx={{\n '&:hover': {\n textOverflow: 'clip',\n },\n minWidth: `${Math.min(columnDef.header?.length ?? 0, 4)}ch`,\n overflow: columnDefType === 'data' ? 'hidden' : undefined,\n textOverflow: 'ellipsis',\n whiteSpace:\n (columnDef.header?.length ?? 0) < 20\n ? 'nowrap'\n : 'normal',\n }}\n >\n {HeaderElement}\n </Box>\n {column.getCanFilter() && (\n <MRT_TableHeadCellFilterLabel header={header} table={table} />\n )}\n {column.getCanSort() && (\n <MRT_TableHeadCellSortLabel header={header} table={table} />\n )}\n </Box>\n {columnDefType !== 'group' && (\n <Box\n className=\"Mui-TableHeadCell-Content-Actions\"\n sx={{\n whiteSpace: 'nowrap',\n }}\n >\n {showDragHandle && (\n <MRT_TableHeadCellGrabHandle\n column={column}\n table={table}\n tableHeadCellRef={{\n current: tableHeadCellRefs.current?.[column.id]!,\n }}\n />\n )}\n {showColumnActions && (\n <MRT_TableHeadCellColumnActionsButton\n header={header}\n table={table}\n />\n )}\n </Box>\n )}\n {column.getCanResize() && (\n <MRT_TableHeadCellResizeHandle header={header} table={table} />\n )}\n </Box>\n ))}\n {columnFilterDisplayMode === 'subheader' && column.getCanFilter() && (\n <MRT_TableHeadCellFilterContainer header={header} table={table} />\n )}\n </TableCell>\n );\n};\n","import TableRow, { type TableRowProps } from '@mui/material/TableRow';\nimport { alpha } from '@mui/material/styles';\nimport { MRT_TableHeadCell } from './MRT_TableHeadCell';\nimport {\n type MRT_ColumnVirtualizer,\n type MRT_Header,\n type MRT_HeaderGroup,\n type MRT_RowData,\n type MRT_TableInstance,\n type MRT_VirtualItem,\n} from '../../types';\nimport { parseFromValuesOrFunc } from '../../utils/utils';\n\nexport interface MRT_TableHeadRowProps<TData extends MRT_RowData>\n extends TableRowProps {\n columnVirtualizer?: MRT_ColumnVirtualizer;\n headerGroup: MRT_HeaderGroup<TData>;\n table: MRT_TableInstance<TData>;\n}\n\nexport const MRT_TableHeadRow = <TData extends MRT_RowData>({\n columnVirtualizer,\n headerGroup,\n table,\n ...rest\n}: MRT_TableHeadRowProps<TData>) => {\n const {\n options: {\n enableStickyHeader,\n layoutMode,\n mrtTheme: { baseBackgroundColor },\n muiTableHeadRowProps,\n },\n } = table;\n\n const { virtualColumns, virtualPaddingLeft, virtualPaddingRight } =\n columnVirtualizer ?? {};\n\n const tableRowProps = {\n ...parseFromValuesOrFunc(muiTableHeadRowProps, {\n headerGroup,\n table,\n }),\n ...rest,\n };\n\n return (\n <TableRow\n {...tableRowProps}\n sx={(theme) => ({\n backgroundColor: baseBackgroundColor,\n boxShadow: `4px 0 8px ${alpha(theme.palette.common.black, 0.1)}`,\n display: layoutMode?.startsWith('grid') ? 'flex' : undefined,\n position:\n enableStickyHeader && layoutMode === 'semantic'\n ? 'sticky'\n : 'relative',\n top: 0,\n ...(parseFromValuesOrFunc(tableRowProps?.sx, theme) as any),\n })}\n >\n {virtualPaddingLeft ? (\n <th style={{ display: 'flex', width: virtualPaddingLeft }} />\n ) : null}\n {(virtualColumns ?? headerGroup.headers).map(\n (headerOrVirtualHeader, staticColumnIndex) => {\n let header = headerOrVirtualHeader as MRT_Header<TData>;\n if (columnVirtualizer) {\n staticColumnIndex = (headerOrVirtualHeader as MRT_VirtualItem)\n .index;\n header = headerGroup.headers[staticColumnIndex];\n }\n\n return header ? (\n <MRT_TableHeadCell\n columnVirtualizer={columnVirtualizer}\n header={header}\n key={header.id}\n staticColumnIndex={staticColumnIndex}\n table={table}\n />\n ) : null;\n },\n )}\n {virtualPaddingRight ? (\n <th style={{ display: 'flex', width: virtualPaddingRight }} />\n ) : null}\n </TableRow>\n );\n};\n","import { Fragment, useMemo } from 'react';\nimport Alert, { type AlertProps } from '@mui/material/Alert';\nimport AlertTitle from '@mui/material/AlertTitle';\nimport Box from '@mui/material/Box';\nimport Button from '@mui/material/Button';\nimport Chip from '@mui/material/Chip';\nimport Collapse from '@mui/material/Collapse';\nimport Stack from '@mui/material/Stack';\nimport { type MRT_RowData, type MRT_TableInstance } from '../../types';\nimport { getMRT_SelectAllHandler } from '../../utils/row.utils';\nimport { parseFromValuesOrFunc } from '../../utils/utils';\nimport { MRT_SelectCheckbox } from '../inputs/MRT_SelectCheckbox';\n\nexport interface MRT_ToolbarAlertBannerProps<TData extends MRT_RowData>\n extends AlertProps {\n stackAlertBanner?: boolean;\n table: MRT_TableInstance<TData>;\n}\n\nexport const MRT_ToolbarAlertBanner = <TData extends MRT_RowData>({\n stackAlertBanner,\n table,\n ...rest\n}: MRT_ToolbarAlertBannerProps<TData>) => {\n const {\n getFilteredSelectedRowModel,\n getCoreRowModel,\n getState,\n options: {\n enableRowSelection,\n enableSelectAll,\n localization,\n manualPagination,\n muiToolbarAlertBannerChipProps,\n muiToolbarAlertBannerProps,\n positionToolbarAlertBanner,\n renderToolbarAlertBannerContent,\n rowCount,\n },\n refs: { tablePaperRef },\n } = table;\n const { density, grouping, rowSelection, showAlertBanner } = getState();\n\n const alertProps = {\n ...parseFromValuesOrFunc(muiToolbarAlertBannerProps, {\n table,\n }),\n ...rest,\n };\n\n const chipProps = parseFromValuesOrFunc(muiToolbarAlertBannerChipProps, {\n table,\n });\n\n const totalRowCount = rowCount ?? getCoreRowModel().rows.length;\n const filteredRowCount = getFilteredSelectedRowModel().rows.length;\n\n const selectedRowCount = useMemo(\n () =>\n manualPagination\n ? Object.values(rowSelection).filter(Boolean).length\n : filteredRowCount,\n [rowSelection, totalRowCount, manualPagination, filteredRowCount],\n );\n const selectedAlert =\n selectedRowCount > 0 ? (\n <Stack alignItems=\"center\" direction=\"row\" gap=\"16px\">\n {localization.selectedCountOfRowCountRowsSelected\n ?.replace('{selectedCount}', selectedRowCount.toLocaleString(localization.language))\n ?.replace('{rowCount}', totalRowCount.toLocaleString(localization.language))}\n <Button\n onClick={(event) =>\n getMRT_SelectAllHandler({ table })(event, false, true)\n }\n size=\"small\"\n sx={{ p: '2px' }}\n >\n {localization.clearSelection}\n </Button>\n </Stack>\n ) : null;\n\n const groupedAlert =\n grouping.length > 0 ? (\n <span>\n {localization.groupedBy}{' '}\n {grouping.map((columnId, index) => (\n <Fragment key={`${index}-${columnId}`}>\n {index > 0 ? localization.thenBy : ''}\n <Chip\n label={table.getColumn(columnId).columnDef.header}\n onDelete={() => table.getColumn(columnId).toggleGrouping()}\n {...chipProps}\n />\n </Fragment>\n ))}\n </span>\n ) : null;\n\n return (\n <Collapse\n in={showAlertBanner || !!selectedAlert || !!groupedAlert}\n timeout={stackAlertBanner ? 200 : 0}\n >\n <Alert\n color=\"info\"\n icon={false}\n {...alertProps}\n sx={(theme) => ({\n '& .MuiAlert-message': {\n maxWidth: `calc(${\n tablePaperRef.current?.clientWidth ?? 360\n }px - 1rem)`,\n width: '100%',\n },\n borderRadius: 0,\n fontSize: '1rem',\n left: 0,\n mb: stackAlertBanner\n ? 0\n : positionToolbarAlertBanner === 'bottom'\n ? '-1rem'\n : undefined,\n p: 0,\n position: 'relative',\n right: 0,\n top: 0,\n width: '100%',\n zIndex: 2,\n ...(parseFromValuesOrFunc(alertProps?.sx, theme) as any),\n })}\n >\n {renderToolbarAlertBannerContent?.({\n groupedAlert,\n selectedAlert,\n table,\n }) ?? (\n <>\n {alertProps?.title && <AlertTitle>{alertProps.title}</AlertTitle>}\n <Stack\n sx={{\n p:\n positionToolbarAlertBanner !== 'head-overlay'\n ? '0.5rem 1rem'\n : density === 'spacious'\n ? '0.75rem 1.25rem'\n : density === 'comfortable'\n ? '0.5rem 0.75rem'\n : '0.25rem 0.5rem',\n }}\n >\n {alertProps?.children}\n {alertProps?.children && (selectedAlert || groupedAlert) && (\n <br />\n )}\n <Box sx={{ display: 'flex' }}>\n {enableRowSelection &&\n enableSelectAll &&\n positionToolbarAlertBanner === 'head-overlay' && (\n <MRT_SelectCheckbox table={table} />\n )}{' '}\n {selectedAlert}\n </Box>\n {selectedAlert && groupedAlert && <br />}\n {groupedAlert}\n </Stack>\n </>\n )}\n </Alert>\n </Collapse>\n );\n};\n","import TableHead, { type TableHeadProps } from '@mui/material/TableHead';\nimport { MRT_TableHeadRow } from './MRT_TableHeadRow';\nimport {\n type MRT_ColumnVirtualizer,\n type MRT_RowData,\n type MRT_TableInstance,\n} from '../../types';\nimport { parseFromValuesOrFunc } from '../../utils/utils';\nimport { MRT_ToolbarAlertBanner } from '../toolbar/MRT_ToolbarAlertBanner';\n\nexport interface MRT_TableHeadProps<TData extends MRT_RowData>\n extends TableHeadProps {\n columnVirtualizer?: MRT_ColumnVirtualizer;\n table: MRT_TableInstance<TData>;\n}\n\nexport const MRT_TableHead = <TData extends MRT_RowData>({\n columnVirtualizer,\n table,\n ...rest\n}: MRT_TableHeadProps<TData>) => {\n const {\n getState,\n options: {\n enableStickyHeader,\n layoutMode,\n muiTableHeadProps,\n positionToolbarAlertBanner,\n },\n refs: { tableHeadRef },\n } = table;\n const { isFullScreen, showAlertBanner } = getState();\n\n const tableHeadProps = {\n ...parseFromValuesOrFunc(muiTableHeadProps, { table }),\n ...rest,\n };\n\n const stickyHeader = enableStickyHeader || isFullScreen;\n\n return (\n <TableHead\n {...tableHeadProps}\n ref={(ref: HTMLTableSectionElement) => {\n tableHeadRef.current = ref;\n if (tableHeadProps?.ref) {\n // @ts-expect-error\n tableHeadProps.ref.current = ref;\n }\n }}\n sx={(theme) => ({\n display: layoutMode?.startsWith('grid') ? 'grid' : undefined,\n opacity: 0.97,\n position: stickyHeader ? 'sticky' : 'relative',\n top: stickyHeader && layoutMode?.startsWith('grid') ? 0 : undefined,\n zIndex: stickyHeader ? 2 : undefined,\n ...(parseFromValuesOrFunc(tableHeadProps?.sx, theme) as any),\n })}\n >\n {positionToolbarAlertBanner === 'head-overlay' &&\n (showAlertBanner || table.getSelectedRowModel().rows.length > 0) ? (\n <tr\n style={{\n display: layoutMode?.startsWith('grid') ? 'grid' : undefined,\n }}\n >\n <th\n colSpan={table.getVisibleLeafColumns().length}\n style={{\n display: layoutMode?.startsWith('grid') ? 'grid' : undefined,\n padding: 0,\n }}\n >\n <MRT_ToolbarAlertBanner table={table} />\n </th>\n </tr>\n ) : (\n table\n .getHeaderGroups()\n .map((headerGroup) => (\n <MRT_TableHeadRow\n columnVirtualizer={columnVirtualizer}\n headerGroup={headerGroup as any}\n key={headerGroup.id}\n table={table}\n />\n ))\n )}\n </TableHead>\n );\n};\n","import { useMemo } from 'react';\nimport Table, { type TableProps } from '@mui/material/Table';\nimport { useMRT_ColumnVirtualizer } from '../../hooks/useMRT_ColumnVirtualizer';\nimport { type MRT_RowData, type MRT_TableInstance } from '../../types';\nimport { parseCSSVarId } from '../../utils/style.utils';\nimport { parseFromValuesOrFunc } from '../../utils/utils';\nimport { MRT_TableBody, Memo_MRT_TableBody } from '../body/MRT_TableBody';\nimport { MRT_TableFooter } from '../footer/MRT_TableFooter';\nimport { MRT_TableHead } from '../head/MRT_TableHead';\n\nexport interface MRT_TableProps<TData extends MRT_RowData> extends TableProps {\n table: MRT_TableInstance<TData>;\n}\n\nexport const MRT_Table = <TData extends MRT_RowData>({\n table,\n ...rest\n}: MRT_TableProps<TData>) => {\n const {\n getFlatHeaders,\n getState,\n options: {\n columns,\n enableStickyHeader,\n enableTableFooter,\n enableTableHead,\n layoutMode,\n memoMode,\n muiTableProps,\n renderCaption,\n },\n } = table;\n const { columnSizing, columnSizingInfo, columnVisibility, isFullScreen } =\n getState();\n\n const tableProps = {\n ...parseFromValuesOrFunc(muiTableProps, { table }),\n ...rest,\n };\n\n const Caption = parseFromValuesOrFunc(renderCaption, { table });\n\n const columnSizeVars = useMemo(() => {\n const headers = getFlatHeaders();\n const colSizes: { [key: string]: number } = {};\n for (let i = 0; i < headers.length; i++) {\n const header = headers[i];\n const colSize = header.getSize();\n colSizes[`--header-${parseCSSVarId(header.id)}-size`] = colSize;\n colSizes[`--col-${parseCSSVarId(header.column.id)}-size`] = colSize;\n }\n return colSizes;\n }, [columns, columnSizing, columnSizingInfo, columnVisibility]);\n\n const columnVirtualizer = useMRT_ColumnVirtualizer(table);\n\n const commonTableGroupProps = {\n columnVirtualizer,\n table,\n };\n\n return (\n <Table\n stickyHeader={enableStickyHeader || isFullScreen}\n {...tableProps}\n style={{ ...columnSizeVars, ...tableProps?.style }}\n sx={(theme) => ({\n borderCollapse: 'separate',\n display: layoutMode?.startsWith('grid') ? 'grid' : undefined,\n position: 'relative',\n ...(parseFromValuesOrFunc(tableProps?.sx, theme) as any),\n })}\n >\n {!!Caption && <caption>{Caption}</caption>}\n {enableTableHead && <MRT_TableHead {...commonTableGroupProps} />}\n {memoMode === 'table-body' || columnSizingInfo.isResizingColumn ? (\n <Memo_MRT_TableBody {...commonTableGroupProps} />\n ) : (\n <MRT_TableBody {...commonTableGroupProps} />\n )}\n {enableTableFooter && <MRT_TableFooter {...commonTableGroupProps} />}\n </Table>\n );\n};\n","import Box from '@mui/material/Box';\nimport CircularProgress, {\n type CircularProgressProps,\n} from '@mui/material/CircularProgress';\nimport { alpha } from '@mui/material/styles';\nimport { type MRT_RowData, type MRT_TableInstance } from '../../types';\nimport { parseFromValuesOrFunc } from '../../utils/utils';\n\nexport interface MRT_TableLoadingOverlayProps<TData extends MRT_RowData>\n extends CircularProgressProps {\n table: MRT_TableInstance<TData>;\n}\n\nexport const MRT_TableLoadingOverlay = <TData extends MRT_RowData>({\n table,\n ...rest\n}: MRT_TableLoadingOverlayProps<TData>) => {\n const {\n options: {\n id,\n localization,\n mrtTheme: { baseBackgroundColor },\n muiCircularProgressProps,\n },\n } = table;\n\n const circularProgressProps = {\n ...parseFromValuesOrFunc(muiCircularProgressProps, { table }),\n ...rest,\n };\n\n return (\n <Box\n sx={{\n alignItems: 'center',\n backgroundColor: alpha(baseBackgroundColor, 0.5),\n bottom: 0,\n display: 'flex',\n justifyContent: 'center',\n left: 0,\n maxHeight: '100vh',\n position: 'absolute',\n right: 0,\n top: 0,\n width: '100%',\n zIndex: 3,\n }}\n >\n {circularProgressProps?.Component ?? (\n <CircularProgress\n aria-label={localization.noRecordsToDisplay}\n id={`mrt-progress-${id}`}\n {...circularProgressProps}\n />\n )}\n </Box>\n );\n};\n","import Menu, { type MenuProps } from '@mui/material/Menu';\nimport { MRT_ActionMenuItem } from './MRT_ActionMenuItem';\nimport { type MRT_RowData, type MRT_TableInstance } from '../../types';\nimport { openEditingCell } from '../../utils/cell.utils';\nimport { parseFromValuesOrFunc } from '../../utils/utils';\n\nexport interface MRT_CellActionMenuProps<TData extends MRT_RowData>\n extends Partial<MenuProps> {\n table: MRT_TableInstance<TData>;\n}\n\nexport const MRT_CellActionMenu = <TData extends MRT_RowData>({\n table,\n ...rest\n}: MRT_CellActionMenuProps<TData>) => {\n const {\n getState,\n options: {\n editDisplayMode,\n enableClickToCopy,\n enableEditing,\n icons: { ContentCopy, EditIcon },\n localization,\n mrtTheme: { menuBackgroundColor },\n renderCellActionMenuItems,\n },\n refs: { actionCellRef },\n } = table;\n const { actionCell, density } = getState();\n const cell = actionCell!;\n const { row } = cell;\n const { column } = cell;\n const { columnDef } = column;\n\n const handleClose = (event?: any) => {\n event?.stopPropagation();\n table.setActionCell(null);\n actionCellRef.current = null;\n };\n\n const internalMenuItems = [\n (parseFromValuesOrFunc(enableClickToCopy, cell) === 'context-menu' ||\n parseFromValuesOrFunc(columnDef.enableClickToCopy, cell) ===\n 'context-menu') && (\n <MRT_ActionMenuItem\n icon={<ContentCopy />}\n key={'mrt-copy'}\n label={localization.copy}\n onClick={(event) => {\n event.stopPropagation();\n navigator.clipboard.writeText(cell.getValue() as string);\n handleClose();\n }}\n table={table}\n />\n ),\n parseFromValuesOrFunc(enableEditing, row) && editDisplayMode === 'cell' && (\n <MRT_ActionMenuItem\n icon={<EditIcon />}\n key={'mrt-edit'}\n label={localization.edit}\n onClick={() => {\n openEditingCell({ cell, table });\n handleClose();\n }}\n table={table}\n />\n ),\n ].filter(Boolean);\n\n const renderActionProps = {\n cell,\n closeMenu: handleClose,\n column,\n internalMenuItems,\n row,\n table,\n };\n\n const menuItems =\n columnDef.renderCellActionMenuItems?.(renderActionProps) ??\n renderCellActionMenuItems?.(renderActionProps);\n\n return (\n (!!menuItems?.length || !!internalMenuItems?.length) && (\n <Menu\n MenuListProps={{\n dense: density === 'compact',\n sx: {\n backgroundColor: menuBackgroundColor,\n },\n }}\n anchorEl={actionCellRef.current}\n disableScrollLock\n onClick={(event) => event.stopPropagation()}\n onClose={handleClose}\n open={!!cell}\n transformOrigin={{ horizontal: -100, vertical: 8 }}\n {...rest}\n >\n {menuItems ?? internalMenuItems}\n </Menu>\n )\n );\n};\n","import Dialog, { type DialogProps } from '@mui/material/Dialog';\nimport DialogActions from '@mui/material/DialogActions';\nimport DialogContent from '@mui/material/DialogContent';\nimport DialogTitle from '@mui/material/DialogTitle';\nimport Stack from '@mui/material/Stack';\nimport {\n type MRT_Row,\n type MRT_RowData,\n type MRT_TableInstance,\n} from '../../types';\nimport { parseFromValuesOrFunc } from '../../utils/utils';\nimport { MRT_EditActionButtons } from '../buttons/MRT_EditActionButtons';\nimport { MRT_EditCellTextField } from '../inputs/MRT_EditCellTextField';\n\nexport interface MRT_EditRowModalProps<TData extends MRT_RowData>\n extends Partial<DialogProps> {\n open: boolean;\n table: MRT_TableInstance<TData>;\n}\n\nexport const MRT_EditRowModal = <TData extends MRT_RowData>({\n open,\n table,\n ...rest\n}: MRT_EditRowModalProps<TData>) => {\n const {\n getState,\n options: {\n localization,\n muiCreateRowModalProps,\n muiEditRowDialogProps,\n onCreatingRowCancel,\n onEditingRowCancel,\n renderCreateRowDialogContent,\n renderEditRowDialogContent,\n },\n setCreatingRow,\n setEditingRow,\n } = table;\n const { creatingRow, editingRow } = getState();\n const row = (creatingRow ?? editingRow) as MRT_Row<TData>;\n\n const dialogProps = {\n ...parseFromValuesOrFunc(muiEditRowDialogProps, { row, table }),\n ...(creatingRow &&\n parseFromValuesOrFunc(muiCreateRowModalProps, { row, table })),\n ...rest,\n };\n\n const internalEditComponents = row\n .getAllCells()\n .filter((cell) => cell.column.columnDef.columnDefType === 'data')\n .map((cell) => (\n <MRT_EditCellTextField\n cell={cell as any}\n key={cell.id}\n table={table as any}\n />\n ));\n\n return (\n <Dialog\n fullWidth\n maxWidth=\"xs\"\n onClose={(event, reason) => {\n if (creatingRow) {\n onCreatingRowCancel?.({ row, table });\n setCreatingRow(null);\n } else {\n onEditingRowCancel?.({ row, table });\n setEditingRow(null);\n }\n row._valuesCache = {} as any; //reset values cache\n dialogProps.onClose?.(event, reason);\n }}\n open={open}\n {...dialogProps}\n >\n {((creatingRow &&\n renderCreateRowDialogContent?.({\n internalEditComponents,\n row,\n table,\n })) ||\n renderEditRowDialogContent?.({\n internalEditComponents,\n row,\n table,\n })) ?? (\n <>\n <DialogTitle sx={{ textAlign: 'center' }}>\n {localization.edit}\n </DialogTitle>\n <DialogContent>\n <form onSubmit={(e) => e.preventDefault()}>\n <Stack\n sx={{\n gap: '32px',\n paddingTop: '16px',\n width: '100%',\n }}\n >\n {internalEditComponents}\n </Stack>\n </form>\n </DialogContent>\n <DialogActions sx={{ p: '1.25rem' }}>\n <MRT_EditActionButtons row={row} table={table} variant=\"text\" />\n </DialogActions>\n </>\n )}\n </Dialog>\n );\n};\n","import { useEffect, useLayoutEffect, useState } from 'react';\nimport TableContainer, {\n type TableContainerProps,\n} from '@mui/material/TableContainer';\nimport { MRT_Table } from './MRT_Table';\nimport { MRT_TableLoadingOverlay } from './MRT_TableLoadingOverlay';\nimport { type MRT_RowData, type MRT_TableInstance } from '../../types';\nimport { parseFromValuesOrFunc } from '../../utils/utils';\nimport { MRT_CellActionMenu } from '../menus/MRT_CellActionMenu';\nimport { MRT_EditRowModal } from '../modals/MRT_EditRowModal';\n\nconst useIsomorphicLayoutEffect =\n typeof window !== 'undefined' ? useLayoutEffect : useEffect;\n\nexport interface MRT_TableContainerProps<TData extends MRT_RowData>\n extends TableContainerProps {\n table: MRT_TableInstance<TData>;\n}\n\nexport const MRT_TableContainer = <TData extends MRT_RowData>({\n table,\n ...rest\n}: MRT_TableContainerProps<TData>) => {\n const {\n getState,\n options: {\n createDisplayMode,\n editDisplayMode,\n enableCellActions,\n enableStickyHeader,\n muiTableContainerProps,\n },\n refs: { bottomToolbarRef, tableContainerRef, topToolbarRef },\n } = table;\n const {\n actionCell,\n creatingRow,\n editingRow,\n isFullScreen,\n isLoading,\n showLoadingOverlay,\n } = getState();\n\n const loading =\n showLoadingOverlay !== false && (isLoading || showLoadingOverlay);\n\n const [totalToolbarHeight, setTotalToolbarHeight] = useState(0);\n\n const tableContainerProps = {\n ...parseFromValuesOrFunc(muiTableContainerProps, {\n table,\n }),\n ...rest,\n };\n\n useIsomorphicLayoutEffect(() => {\n const topToolbarHeight =\n typeof document !== 'undefined'\n ? (topToolbarRef.current?.offsetHeight ?? 0)\n : 0;\n\n const bottomToolbarHeight =\n typeof document !== 'undefined'\n ? (bottomToolbarRef?.current?.offsetHeight ?? 0)\n : 0;\n\n setTotalToolbarHeight(topToolbarHeight + bottomToolbarHeight);\n });\n\n const createModalOpen = createDisplayMode === 'modal' && creatingRow;\n const editModalOpen = editDisplayMode === 'modal' && editingRow;\n\n return (\n <TableContainer\n aria-busy={loading}\n aria-describedby={loading ? 'mrt-progress' : undefined}\n {...tableContainerProps}\n ref={(node: HTMLDivElement) => {\n if (node) {\n tableContainerRef.current = node;\n if (tableContainerProps?.ref) {\n //@ts-expect-error\n tableContainerProps.ref.current = node;\n }\n }\n }}\n style={{\n maxHeight: isFullScreen\n ? `calc(100vh - ${totalToolbarHeight}px)`\n : undefined,\n ...tableContainerProps?.style,\n }}\n sx={(theme) => ({\n maxHeight: enableStickyHeader\n ? `clamp(350px, calc(100vh - ${totalToolbarHeight}px), 9999px)`\n : undefined,\n maxWidth: '100%',\n overflow: 'auto',\n position: 'relative',\n ...(parseFromValuesOrFunc(tableContainerProps?.sx, theme) as any),\n })}\n >\n {loading ? <MRT_TableLoadingOverlay table={table} /> : null}\n <MRT_Table table={table} />\n {(createModalOpen || editModalOpen) && (\n <MRT_EditRowModal open table={table} />\n )}\n {enableCellActions && actionCell && <MRT_CellActionMenu table={table} />}\n </TableContainer>\n );\n};\n","import Collapse from '@mui/material/Collapse';\nimport LinearProgress, {\n type LinearProgressProps,\n} from '@mui/material/LinearProgress';\nimport { type MRT_RowData, type MRT_TableInstance } from '../../types';\nimport { parseFromValuesOrFunc } from '../../utils/utils';\n\nexport interface MRT_LinearProgressBarProps<TData extends MRT_RowData>\n extends LinearProgressProps {\n isTopToolbar: boolean;\n table: MRT_TableInstance<TData>;\n}\n\nexport const MRT_LinearProgressBar = <TData extends MRT_RowData>({\n isTopToolbar,\n table,\n ...rest\n}: MRT_LinearProgressBarProps<TData>) => {\n const {\n getState,\n options: { muiLinearProgressProps },\n } = table;\n const { isSaving, showProgressBars } = getState();\n\n const linearProgressProps = {\n ...parseFromValuesOrFunc(muiLinearProgressProps, {\n isTopToolbar,\n table,\n }),\n ...rest,\n };\n\n return (\n <Collapse\n in={showProgressBars !== false && (showProgressBars || isSaving)}\n mountOnEnter\n sx={{\n bottom: isTopToolbar ? 0 : undefined,\n position: 'absolute',\n top: !isTopToolbar ? 0 : undefined,\n width: '100%',\n }}\n unmountOnExit\n >\n <LinearProgress\n aria-busy=\"true\"\n aria-label=\"Loading\"\n sx={{ position: 'relative' }}\n {...linearProgressProps}\n />\n </Collapse>\n );\n};\n","import Box from '@mui/material/Box';\nimport IconButton from '@mui/material/IconButton';\nimport InputLabel from '@mui/material/InputLabel';\nimport MenuItem from '@mui/material/MenuItem';\nimport Pagination, { type PaginationProps } from '@mui/material/Pagination';\nimport PaginationItem from '@mui/material/PaginationItem';\nimport Select, { type SelectProps } from '@mui/material/Select';\nimport Tooltip from '@mui/material/Tooltip';\nimport Typography from '@mui/material/Typography';\nimport { useTheme } from '@mui/material/styles';\nimport useMediaQuery from '@mui/material/useMediaQuery';\nimport { type MRT_RowData, type MRT_TableInstance } from '../../types';\nimport { flipIconStyles, getCommonTooltipProps } from '../../utils/style.utils';\nimport { parseFromValuesOrFunc } from '../../utils/utils';\n\nconst defaultRowsPerPage = [5, 10, 15, 20, 25, 30, 50, 100];\n\nexport interface MRT_TablePaginationProps<TData extends MRT_RowData>\n extends Partial<\n PaginationProps & {\n SelectProps?: Partial<SelectProps>;\n disabled?: boolean;\n rowsPerPageOptions?: { label: string; value: number }[] | number[];\n showRowsPerPage?: boolean;\n }\n > {\n position?: 'bottom' | 'top';\n table: MRT_TableInstance<TData>;\n}\n\nexport const MRT_TablePagination = <TData extends MRT_RowData>({\n position = 'bottom',\n table,\n ...rest\n}: MRT_TablePaginationProps<TData>) => {\n const theme = useTheme();\n const isMobile = useMediaQuery('(max-width: 720px)');\n\n const {\n getState,\n options: {\n enableToolbarInternalActions,\n icons: { ChevronLeftIcon, ChevronRightIcon, FirstPageIcon, LastPageIcon },\n id,\n localization,\n muiPaginationProps,\n paginationDisplayMode,\n },\n } = table;\n const {\n pagination: { pageIndex = 0, pageSize = 10 },\n } = getState();\n\n const paginationProps = {\n ...parseFromValuesOrFunc(muiPaginationProps, {\n table,\n }),\n ...rest,\n };\n\n const totalRowCount = table.getRowCount();\n const numberOfPages = table.getPageCount();\n const showFirstLastPageButtons = numberOfPages > 2;\n const firstRowIndex = pageIndex * pageSize;\n const lastRowIndex = Math.min(pageIndex * pageSize + pageSize, totalRowCount);\n\n const {\n SelectProps = {},\n disabled = false,\n rowsPerPageOptions = defaultRowsPerPage,\n showFirstButton = showFirstLastPageButtons,\n showLastButton = showFirstLastPageButtons,\n showRowsPerPage = true,\n ...restPaginationProps\n } = paginationProps ?? {};\n\n const disableBack = pageIndex <= 0 || disabled;\n const disableNext = lastRowIndex >= totalRowCount || disabled;\n\n if (isMobile && SelectProps?.native !== false) {\n SelectProps.native = true;\n }\n\n const tooltipProps = getCommonTooltipProps();\n\n return (\n <Box\n className=\"MuiTablePagination-root\"\n sx={{\n alignItems: 'center',\n display: 'flex',\n flexWrap: 'wrap',\n gap: '8px',\n justifyContent: { md: 'space-between', sm: 'center' },\n justifySelf: 'flex-end',\n mt:\n position === 'top' && enableToolbarInternalActions\n ? '3rem'\n : undefined,\n position: 'relative',\n px: '8px',\n py: '12px',\n zIndex: 2,\n }}\n >\n {showRowsPerPage && (\n <Box sx={{ alignItems: 'center', display: 'flex', gap: '8px' }}>\n <InputLabel htmlFor={`mrt-rows-per-page-${id}`} sx={{ mb: 0 }}>\n {localization.rowsPerPage}\n </InputLabel>\n <Select\n MenuProps={{ disableScrollLock: true }}\n disableUnderline\n disabled={disabled}\n inputProps={{\n 'aria-label': localization.rowsPerPage,\n id: `mrt-rows-per-page-${id}`,\n }}\n label={localization.rowsPerPage}\n onChange={(event) =>\n table.setPageSize(+(event.target.value as any))\n }\n sx={{ mb: 0 }}\n value={pageSize}\n variant=\"standard\"\n {...SelectProps}\n >\n {rowsPerPageOptions.map((option) => {\n const value = typeof option !== 'number' ? option.value : option;\n const label =\n typeof option !== 'number' ? option.label : `${option}`;\n return (\n SelectProps?.children ??\n (SelectProps?.native ? (\n <option key={value} value={value}>\n {label}\n </option>\n ) : (\n <MenuItem key={value} sx={{ m: 0 }} value={value}>\n {label}\n </MenuItem>\n ))\n );\n })}\n </Select>\n </Box>\n )}\n {paginationDisplayMode === 'pages' ? (\n <Pagination\n count={numberOfPages}\n disabled={disabled}\n onChange={(_e, newPageIndex) => table.setPageIndex(newPageIndex - 1)}\n page={pageIndex + 1}\n renderItem={(item) => (\n <PaginationItem\n slots={{\n first: FirstPageIcon,\n last: LastPageIcon,\n next: ChevronRightIcon,\n previous: ChevronLeftIcon,\n }}\n {...item}\n />\n )}\n showFirstButton={showFirstButton}\n showLastButton={showLastButton}\n {...restPaginationProps}\n />\n ) : paginationDisplayMode === 'default' ? (\n <>\n <Typography\n align=\"center\"\n component=\"span\"\n sx={{ m: '0 4px', minWidth: '8ch' }}\n variant=\"body2\"\n >{`${\n lastRowIndex === 0\n ? 0\n : (firstRowIndex + 1).toLocaleString(localization.language)\n }-${lastRowIndex.toLocaleString(localization.language)} ${\n localization.of\n } ${totalRowCount.toLocaleString(localization.language)}`}</Typography>\n <Box gap=\"xs\">\n {showFirstButton && (\n <Tooltip {...tooltipProps} title={localization.goToFirstPage}>\n <span>\n <IconButton\n aria-label={localization.goToFirstPage}\n disabled={disableBack}\n onClick={() => table.firstPage()}\n size=\"small\"\n >\n <FirstPageIcon {...flipIconStyles(theme)} />\n </IconButton>\n </span>\n </Tooltip>\n )}\n <Tooltip {...tooltipProps} title={localization.goToPreviousPage}>\n <span>\n <IconButton\n aria-label={localization.goToPreviousPage}\n disabled={disableBack}\n onClick={() => table.previousPage()}\n size=\"small\"\n >\n <ChevronLeftIcon {...flipIconStyles(theme)} />\n </IconButton>\n </span>\n </Tooltip>\n <Tooltip {...tooltipProps} title={localization.goToNextPage}>\n <span>\n <IconButton\n aria-label={localization.goToNextPage}\n disabled={disableNext}\n onClick={() => table.nextPage()}\n size=\"small\"\n >\n <ChevronRightIcon {...flipIconStyles(theme)} />\n </IconButton>\n </span>\n </Tooltip>\n {showLastButton && (\n <Tooltip {...tooltipProps} title={localization.goToLastPage}>\n <span>\n <IconButton\n aria-label={localization.goToLastPage}\n disabled={disableNext}\n onClick={() => table.lastPage()}\n size=\"small\"\n >\n <LastPageIcon {...flipIconStyles(theme)} />\n </IconButton>\n </span>\n </Tooltip>\n )}\n </Box>\n </>\n ) : null}\n </Box>\n );\n};\n","import { type DragEvent, useEffect } from 'react';\nimport Box, { type BoxProps } from '@mui/material/Box';\nimport Fade from '@mui/material/Fade';\nimport Typography from '@mui/material/Typography';\nimport { alpha } from '@mui/material/styles';\nimport { type MRT_RowData, type MRT_TableInstance } from '../../types';\nimport { parseFromValuesOrFunc } from '../../utils/utils';\n\nexport interface MRT_ToolbarDropZoneProps<TData extends MRT_RowData>\n extends BoxProps {\n table: MRT_TableInstance<TData>;\n}\n\nexport const MRT_ToolbarDropZone = <TData extends MRT_RowData>({\n table,\n ...rest\n}: MRT_ToolbarDropZoneProps<TData>) => {\n const {\n getState,\n options: { enableGrouping, localization },\n setHoveredColumn,\n setShowToolbarDropZone,\n } = table;\n\n const { draggingColumn, grouping, hoveredColumn, showToolbarDropZone } =\n getState();\n\n const handleDragEnter = (_event: DragEvent<HTMLDivElement>) => {\n setHoveredColumn({ id: 'drop-zone' });\n };\n\n const handleDragOver = (e: DragEvent) => {\n e.preventDefault();\n };\n\n useEffect(() => {\n if (table.options.state?.showToolbarDropZone !== undefined) {\n setShowToolbarDropZone(\n !!enableGrouping &&\n !!draggingColumn &&\n draggingColumn.columnDef.enableGrouping !== false &&\n !grouping.includes(draggingColumn.id),\n );\n }\n }, [enableGrouping, draggingColumn, grouping]);\n\n return (\n <Fade in={showToolbarDropZone}>\n <Box\n className=\"Mui-ToolbarDropZone\"\n onDragEnter={handleDragEnter}\n onDragOver={handleDragOver}\n {...rest}\n sx={(theme) => ({\n alignItems: 'center',\n backdropFilter: 'blur(4px)',\n backgroundColor: alpha(\n theme.palette.info.main,\n hoveredColumn?.id === 'drop-zone' ? 0.2 : 0.1,\n ),\n border: `dashed ${theme.palette.info.main} 2px`,\n boxSizing: 'border-box',\n display: 'flex',\n height: '100%',\n justifyContent: 'center',\n position: 'absolute',\n width: '100%',\n zIndex: 4,\n ...(parseFromValuesOrFunc(rest?.sx, theme) as any),\n })}\n >\n <Typography fontStyle=\"italic\">\n {localization.dropToGroupBy.replace(\n '{column}',\n draggingColumn?.columnDef?.header ?? '',\n )}\n </Typography>\n </Box>\n </Fade>\n );\n};\n","import Box, { type BoxProps } from '@mui/material/Box';\nimport { alpha } from '@mui/material/styles';\nimport useMediaQuery from '@mui/material/useMediaQuery';\nimport { MRT_LinearProgressBar } from './MRT_LinearProgressBar';\nimport { MRT_TablePagination } from './MRT_TablePagination';\nimport { MRT_ToolbarAlertBanner } from './MRT_ToolbarAlertBanner';\nimport { MRT_ToolbarDropZone } from './MRT_ToolbarDropZone';\nimport { type MRT_RowData, type MRT_TableInstance } from '../../types';\nimport { getCommonToolbarStyles } from '../../utils/style.utils';\nimport { parseFromValuesOrFunc } from '../../utils/utils';\n\nexport interface MRT_BottomToolbarProps<TData extends MRT_RowData>\n extends BoxProps {\n table: MRT_TableInstance<TData>;\n}\n\nexport const MRT_BottomToolbar = <TData extends MRT_RowData>({\n table,\n ...rest\n}: MRT_BottomToolbarProps<TData>) => {\n const {\n getState,\n options: {\n enablePagination,\n muiBottomToolbarProps,\n positionPagination,\n positionToolbarAlertBanner,\n positionToolbarDropZone,\n renderBottomToolbarCustomActions,\n },\n refs: { bottomToolbarRef },\n } = table;\n const { isFullScreen } = getState();\n\n const isMobile = useMediaQuery('(max-width:720px)');\n\n const toolbarProps = {\n ...parseFromValuesOrFunc(muiBottomToolbarProps, { table }),\n ...rest,\n };\n\n const stackAlertBanner = isMobile || !!renderBottomToolbarCustomActions;\n\n return (\n <Box\n {...toolbarProps}\n ref={(node: HTMLDivElement) => {\n if (node) {\n bottomToolbarRef.current = node;\n if (toolbarProps?.ref) {\n // @ts-expect-error\n toolbarProps.ref.current = node;\n }\n }\n }}\n sx={(theme) => ({\n ...getCommonToolbarStyles({ table, theme }),\n bottom: isFullScreen ? '0' : undefined,\n boxShadow: `0 1px 2px -1px ${alpha(\n theme.palette.grey[700],\n 0.5,\n )} inset`,\n left: 0,\n position: isFullScreen ? 'fixed' : 'relative',\n right: 0,\n ...(parseFromValuesOrFunc(toolbarProps?.sx, theme) as any),\n })}\n >\n <MRT_LinearProgressBar isTopToolbar={false} table={table} />\n {positionToolbarAlertBanner === 'bottom' && (\n <MRT_ToolbarAlertBanner\n stackAlertBanner={stackAlertBanner}\n table={table}\n />\n )}\n {['both', 'bottom'].includes(positionToolbarDropZone ?? '') && (\n <MRT_ToolbarDropZone table={table} />\n )}\n <Box\n sx={{\n alignItems: 'center',\n boxSizing: 'border-box',\n display: 'flex',\n justifyContent: 'space-between',\n p: '0.5rem',\n width: '100%',\n }}\n >\n {renderBottomToolbarCustomActions ? (\n renderBottomToolbarCustomActions({ table })\n ) : (\n <span />\n )}\n <Box\n sx={{\n display: 'flex',\n justifyContent: 'flex-end',\n position: stackAlertBanner ? 'relative' : 'absolute',\n right: 0,\n top: 0,\n }}\n >\n {enablePagination &&\n ['both', 'bottom'].includes(positionPagination ?? '') && (\n <MRT_TablePagination position=\"bottom\" table={table} />\n )}\n </Box>\n </Box>\n </Box>\n );\n};\n","import Box, { type BoxProps } from '@mui/material/Box';\nimport IconButton from '@mui/material/IconButton';\nimport Tooltip from '@mui/material/Tooltip';\nimport {\n type MRT_Column,\n type MRT_RowData,\n type MRT_TableInstance,\n} from '../../types';\nimport { parseFromValuesOrFunc } from '../../utils/utils';\n\nexport interface MRT_ColumnPinningButtonsProps<TData extends MRT_RowData>\n extends BoxProps {\n column: MRT_Column<TData>;\n table: MRT_TableInstance<TData>;\n}\n\nexport const MRT_ColumnPinningButtons = <TData extends MRT_RowData>({\n column,\n table,\n ...rest\n}: MRT_ColumnPinningButtonsProps<TData>) => {\n const {\n options: {\n icons: { PushPinIcon },\n localization,\n },\n } = table;\n\n const handlePinColumn = (pinDirection: 'left' | 'right' | false) => {\n column.pin(pinDirection);\n };\n\n return (\n <Box\n {...rest}\n sx={(theme) => ({\n minWidth: '70px',\n textAlign: 'center',\n ...(parseFromValuesOrFunc(rest?.sx, theme) as any),\n })}\n >\n {column.getIsPinned() ? (\n <Tooltip title={localization.unpin}>\n <IconButton onClick={() => handlePinColumn(false)} size=\"small\">\n <PushPinIcon />\n </IconButton>\n </Tooltip>\n ) : (\n <>\n <Tooltip title={localization.pinToLeft}>\n <IconButton onClick={() => handlePinColumn('left')} size=\"small\">\n <PushPinIcon\n style={{\n transform: 'rotate(90deg)',\n }}\n />\n </IconButton>\n </Tooltip>\n <Tooltip title={localization.pinToRight}>\n <IconButton onClick={() => handlePinColumn('right')} size=\"small\">\n <PushPinIcon\n style={{\n transform: 'rotate(-90deg)',\n }}\n />\n </IconButton>\n </Tooltip>\n </>\n )}\n </Box>\n );\n};\n","import {\n type Dispatch,\n type DragEvent,\n type SetStateAction,\n useRef,\n useState,\n} from 'react';\nimport Box from '@mui/material/Box';\nimport FormControlLabel from '@mui/material/FormControlLabel';\nimport MenuItem, { type MenuItemProps } from '@mui/material/MenuItem';\nimport Switch from '@mui/material/Switch';\nimport Tooltip from '@mui/material/Tooltip';\nimport Typography from '@mui/material/Typography';\nimport {\n type MRT_Column,\n type MRT_RowData,\n type MRT_TableInstance,\n} from '../../types';\nimport { reorderColumn } from '../../utils/column.utils';\nimport { getCommonTooltipProps } from '../../utils/style.utils';\nimport { parseFromValuesOrFunc } from '../../utils/utils';\nimport { MRT_ColumnPinningButtons } from '../buttons/MRT_ColumnPinningButtons';\nimport { MRT_GrabHandleButton } from '../buttons/MRT_GrabHandleButton';\n\nexport interface MRT_ShowHideColumnsMenuItemsProps<TData extends MRT_RowData>\n extends MenuItemProps {\n allColumns: MRT_Column<TData>[];\n column: MRT_Column<TData>;\n hoveredColumn: MRT_Column<TData> | null;\n isNestedColumns: boolean;\n setHoveredColumn: Dispatch<SetStateAction<MRT_Column<TData> | null>>;\n table: MRT_TableInstance<TData>;\n}\n\nexport const MRT_ShowHideColumnsMenuItems = <TData extends MRT_RowData>({\n allColumns,\n column,\n hoveredColumn,\n isNestedColumns,\n setHoveredColumn,\n table,\n ...rest\n}: MRT_ShowHideColumnsMenuItemsProps<TData>) => {\n const {\n getState,\n options: {\n enableColumnOrdering,\n enableColumnPinning,\n enableHiding,\n localization,\n mrtTheme: { draggingBorderColor },\n },\n setColumnOrder,\n setColumnPinning,\n } = table;\n const { columnOrder } = getState();\n const { columnDef } = column;\n const { columnDefType } = columnDef;\n\n const switchChecked = column.getIsVisible();\n\n const handleToggleColumnHidden = (column: MRT_Column<TData>) => {\n if (columnDefType === 'group') {\n column?.columns?.forEach?.((childColumn: MRT_Column<TData>) => {\n childColumn.toggleVisibility(!switchChecked);\n });\n } else {\n column.toggleVisibility();\n }\n };\n\n const menuItemRef = useRef<HTMLElement>(null);\n\n const [isDragging, setIsDragging] = useState(false);\n\n const handleDragStart = (e: DragEvent<HTMLButtonElement>) => {\n setIsDragging(true);\n try {\n e.dataTransfer.setDragImage(menuItemRef.current as HTMLElement, 0, 0);\n } catch (e) {\n console.error(e);\n }\n };\n\n const handleDragEnd = (_e: DragEvent<HTMLButtonElement>) => {\n setIsDragging(false);\n setHoveredColumn(null);\n if (hoveredColumn) {\n const reorderedColumns = reorderColumn(column, hoveredColumn, columnOrder);\n setColumnOrder(reorderedColumns);\n setColumnPinning(({ left = [], right = [] }) => ({\n left: reorderedColumns.filter(header => left.includes(header)),\n right: reorderedColumns.filter(header => right.includes(header)),\n }));\n }\n };\n\n const handleDragEnter = (_e: DragEvent) => {\n if (!isDragging && columnDef.enableColumnOrdering !== false) {\n setHoveredColumn(column);\n }\n };\n\n if (!columnDef.header || columnDef.visibleInShowHideMenu === false) {\n return null;\n }\n\n return (\n <>\n <MenuItem\n disableRipple\n onDragEnter={handleDragEnter}\n ref={menuItemRef as any}\n {...rest}\n sx={(theme) => ({\n alignItems: 'center',\n justifyContent: 'flex-start',\n my: 0,\n opacity: isDragging ? 0.5 : 1,\n outline: isDragging\n ? `2px dashed ${theme.palette.grey[500]}`\n : hoveredColumn?.id === column.id\n ? `2px dashed ${draggingBorderColor}`\n : 'none',\n outlineOffset: '-2px',\n pl: `${(column.depth + 0.5) * 2}rem`,\n py: '6px',\n ...(parseFromValuesOrFunc(rest?.sx, theme) as any),\n })}\n >\n <Box\n sx={{\n display: 'flex',\n flexWrap: 'nowrap',\n gap: '8px',\n }}\n >\n {columnDefType !== 'group' &&\n enableColumnOrdering &&\n !isNestedColumns &&\n (columnDef.enableColumnOrdering !== false ? (\n <MRT_GrabHandleButton\n onDragEnd={handleDragEnd}\n onDragStart={handleDragStart}\n table={table}\n />\n ) : (\n <Box sx={{ width: '28px' }} />\n ))}\n {enableColumnPinning &&\n (column.getCanPin() ? (\n <MRT_ColumnPinningButtons column={column} table={table} />\n ) : (\n <Box sx={{ width: '70px' }} />\n ))}\n {enableHiding ? (\n <FormControlLabel\n checked={switchChecked}\n componentsProps={{\n typography: {\n sx: {\n mb: 0,\n opacity: columnDefType !== 'display' ? 1 : 0.5,\n },\n },\n }}\n control={\n <Tooltip\n {...getCommonTooltipProps()}\n title={localization.toggleVisibility}\n >\n <Switch />\n </Tooltip>\n }\n disabled={!column.getCanHide()}\n label={columnDef.header}\n onChange={() => handleToggleColumnHidden(column)}\n />\n ) : (\n <Typography sx={{ alignSelf: 'center' }}>\n {columnDef.header}\n </Typography>\n )}\n </Box>\n </MenuItem>\n {column.columns?.map((c: MRT_Column<TData>, i) => (\n <MRT_ShowHideColumnsMenuItems\n allColumns={allColumns}\n column={c}\n hoveredColumn={hoveredColumn}\n isNestedColumns={isNestedColumns}\n key={`${i}-${c.id}`}\n setHoveredColumn={setHoveredColumn}\n table={table}\n />\n ))}\n </>\n );\n};\n","import { useMemo, useState } from 'react';\nimport Box from '@mui/material/Box';\nimport Button from '@mui/material/Button';\nimport Divider from '@mui/material/Divider';\nimport Menu, { type MenuProps } from '@mui/material/Menu';\nimport { MRT_ShowHideColumnsMenuItems } from './MRT_ShowHideColumnsMenuItems';\nimport {\n type MRT_Column,\n type MRT_RowData,\n type MRT_TableInstance,\n} from '../../types';\nimport { getDefaultColumnOrderIds } from '../../utils/displayColumn.utils';\n\nexport interface MRT_ShowHideColumnsMenuProps<TData extends MRT_RowData>\n extends Partial<MenuProps> {\n anchorEl: HTMLElement | null;\n isSubMenu?: boolean;\n setAnchorEl: (anchorEl: HTMLElement | null) => void;\n table: MRT_TableInstance<TData>;\n}\n\nexport const MRT_ShowHideColumnsMenu = <TData extends MRT_RowData>({\n anchorEl,\n setAnchorEl,\n table,\n ...rest\n}: MRT_ShowHideColumnsMenuProps<TData>) => {\n const {\n getAllColumns,\n getAllLeafColumns,\n getCenterLeafColumns,\n getIsAllColumnsVisible,\n getIsSomeColumnsPinned,\n getIsSomeColumnsVisible,\n getLeftLeafColumns,\n getRightLeafColumns,\n getState,\n initialState,\n options: {\n enableColumnOrdering,\n enableColumnPinning,\n enableHiding,\n localization,\n mrtTheme: { menuBackgroundColor },\n },\n } = table;\n const { columnOrder, columnPinning, density } = getState();\n\n const handleToggleAllColumns = (value?: boolean) => {\n getAllLeafColumns()\n .filter((col) => col.columnDef.enableHiding !== false)\n .forEach((col) => col.toggleVisibility(value));\n };\n\n const allColumns = useMemo(() => {\n const columns = getAllColumns();\n if (\n columnOrder.length > 0 &&\n !columns.some((col) => col.columnDef.columnDefType === 'group')\n ) {\n return [\n ...getLeftLeafColumns(),\n ...Array.from(new Set(columnOrder)).map((colId) =>\n getCenterLeafColumns().find((col) => col?.id === colId),\n ),\n ...getRightLeafColumns(),\n ].filter(Boolean);\n }\n return columns;\n }, [\n columnOrder,\n columnPinning,\n getAllColumns(),\n getCenterLeafColumns(),\n getLeftLeafColumns(),\n getRightLeafColumns(),\n ]) as MRT_Column<TData>[];\n\n const isNestedColumns = allColumns.some(\n (col) => col.columnDef.columnDefType === 'group',\n );\n\n const hasColumnOrderChanged = useMemo(\n () =>\n columnOrder.length !== initialState.columnOrder.length ||\n !columnOrder.every(\n (column, index) => column === initialState.columnOrder[index],\n ),\n\n [columnOrder, initialState.columnOrder],\n );\n\n const [hoveredColumn, setHoveredColumn] = useState<MRT_Column<TData> | null>(\n null,\n );\n\n return (\n <Menu\n MenuListProps={{\n dense: density === 'compact',\n sx: {\n backgroundColor: menuBackgroundColor,\n },\n }}\n anchorEl={anchorEl}\n disableScrollLock\n onClose={() => setAnchorEl(null)}\n open={!!anchorEl}\n {...rest}\n >\n <Box\n sx={{\n display: 'flex',\n justifyContent: 'space-between',\n p: '0.5rem',\n pt: 0,\n }}\n >\n {enableHiding && (\n <Button\n disabled={!getIsSomeColumnsVisible()}\n onClick={() => handleToggleAllColumns(false)}\n >\n {localization.hideAll}\n </Button>\n )}\n {enableColumnOrdering && (\n <Button\n onClick={() =>\n table.setColumnOrder(\n getDefaultColumnOrderIds(table.options, true),\n )\n }\n disabled={!hasColumnOrderChanged}\n >\n {localization.resetOrder}\n </Button>\n )}\n {enableColumnPinning && (\n <Button\n disabled={!getIsSomeColumnsPinned()}\n onClick={() => table.resetColumnPinning(true)}\n >\n {localization.unpinAll}\n </Button>\n )}\n {enableHiding && (\n <Button\n disabled={getIsAllColumnsVisible()}\n onClick={() => handleToggleAllColumns(true)}\n >\n {localization.showAll}\n </Button>\n )}\n </Box>\n <Divider />\n {allColumns.map((column, index) => (\n <MRT_ShowHideColumnsMenuItems\n allColumns={allColumns}\n column={column}\n hoveredColumn={hoveredColumn}\n isNestedColumns={isNestedColumns}\n key={`${index}-${column.id}`}\n setHoveredColumn={setHoveredColumn}\n table={table}\n />\n ))}\n </Menu>\n );\n};\n","import { type MouseEvent, useState } from 'react';\nimport IconButton, { type IconButtonProps } from '@mui/material/IconButton';\nimport Tooltip from '@mui/material/Tooltip';\nimport { type MRT_RowData, type MRT_TableInstance } from '../../types';\nimport { MRT_ShowHideColumnsMenu } from '../menus/MRT_ShowHideColumnsMenu';\n\nexport interface MRT_ShowHideColumnsButtonProps<TData extends MRT_RowData>\n extends IconButtonProps {\n table: MRT_TableInstance<TData>;\n}\n\nexport const MRT_ShowHideColumnsButton = <TData extends MRT_RowData>({\n table,\n ...rest\n}: MRT_ShowHideColumnsButtonProps<TData>) => {\n const {\n options: {\n icons: { ViewColumnIcon },\n localization,\n },\n } = table;\n\n const [anchorEl, setAnchorEl] = useState<HTMLElement | null>(null);\n\n const handleClick = (event: MouseEvent<HTMLElement>) => {\n setAnchorEl(event.currentTarget);\n };\n\n return (\n <>\n <Tooltip title={rest?.title ?? localization.showHideColumns}>\n <IconButton\n aria-label={localization.showHideColumns}\n onClick={handleClick}\n {...rest}\n title={undefined}\n >\n <ViewColumnIcon />\n </IconButton>\n </Tooltip>\n {anchorEl && (\n <MRT_ShowHideColumnsMenu\n anchorEl={anchorEl}\n setAnchorEl={setAnchorEl}\n table={table}\n />\n )}\n </>\n );\n};\n","import IconButton, { type IconButtonProps } from '@mui/material/IconButton';\nimport Tooltip from '@mui/material/Tooltip';\nimport { type MRT_RowData, type MRT_TableInstance } from '../../types';\n\nexport interface MRT_ToggleDensePaddingButtonProps<TData extends MRT_RowData>\n extends IconButtonProps {\n table: MRT_TableInstance<TData>;\n}\n\nexport const MRT_ToggleDensePaddingButton = <TData extends MRT_RowData>({\n table,\n ...rest\n}: MRT_ToggleDensePaddingButtonProps<TData>) => {\n const {\n getState,\n options: {\n icons: { DensityLargeIcon, DensityMediumIcon, DensitySmallIcon },\n localization,\n },\n setDensity,\n } = table;\n const { density } = getState();\n\n const handleToggleDensePadding = () => {\n const nextDensity =\n density === 'comfortable'\n ? 'compact'\n : density === 'compact'\n ? 'spacious'\n : 'comfortable';\n setDensity(nextDensity);\n };\n\n return (\n <Tooltip title={rest?.title ?? localization.toggleDensity}>\n <IconButton\n aria-label={localization.toggleDensity}\n onClick={handleToggleDensePadding}\n {...rest}\n title={undefined}\n >\n {density === 'compact' ? (\n <DensitySmallIcon />\n ) : density === 'comfortable' ? (\n <DensityMediumIcon />\n ) : (\n <DensityLargeIcon />\n )}\n </IconButton>\n </Tooltip>\n );\n};\n","import IconButton, { type IconButtonProps } from '@mui/material/IconButton';\nimport Tooltip from '@mui/material/Tooltip';\nimport { type MRT_RowData, type MRT_TableInstance } from '../../types';\n\nexport interface MRT_ToggleFiltersButtonProps<TData extends MRT_RowData>\n extends IconButtonProps {\n table: MRT_TableInstance<TData>;\n}\n\nexport const MRT_ToggleFiltersButton = <TData extends MRT_RowData>({\n table,\n ...rest\n}: MRT_ToggleFiltersButtonProps<TData>) => {\n const {\n getState,\n options: {\n icons: { FilterListIcon, FilterListOffIcon },\n localization,\n },\n setShowColumnFilters,\n } = table;\n const { showColumnFilters } = getState();\n\n const handleToggleShowFilters = () => {\n setShowColumnFilters(!showColumnFilters);\n };\n\n return (\n <Tooltip title={rest?.title ?? localization.showHideFilters}>\n <IconButton\n aria-label={localization.showHideFilters}\n onClick={handleToggleShowFilters}\n {...rest}\n title={undefined}\n >\n {showColumnFilters ? <FilterListOffIcon /> : <FilterListIcon />}\n </IconButton>\n </Tooltip>\n );\n};\n","import { useState } from 'react';\nimport IconButton, { type IconButtonProps } from '@mui/material/IconButton';\nimport Tooltip from '@mui/material/Tooltip';\nimport { type MRT_RowData, type MRT_TableInstance } from '../../types';\n\nexport interface MRT_ToggleFullScreenButtonProps<TData extends MRT_RowData>\n extends IconButtonProps {\n table: MRT_TableInstance<TData>;\n}\n\nexport const MRT_ToggleFullScreenButton = <TData extends MRT_RowData>({\n table,\n ...rest\n}: MRT_ToggleFullScreenButtonProps<TData>) => {\n const {\n getState,\n options: {\n icons: { FullscreenExitIcon, FullscreenIcon },\n localization,\n },\n setIsFullScreen,\n } = table;\n const { isFullScreen } = getState();\n\n const [tooltipOpened, setTooltipOpened] = useState(false);\n\n const handleToggleFullScreen = () => {\n setTooltipOpened(false);\n setIsFullScreen(!isFullScreen);\n };\n\n return (\n <Tooltip\n open={tooltipOpened}\n title={rest?.title ?? localization.toggleFullScreen}\n >\n <IconButton\n aria-label={localization.toggleFullScreen}\n onBlur={() => setTooltipOpened(false)}\n onClick={handleToggleFullScreen}\n onFocus={() => setTooltipOpened(true)}\n onMouseEnter={() => setTooltipOpened(true)}\n onMouseLeave={() => setTooltipOpened(false)}\n {...rest}\n title={undefined}\n >\n {isFullScreen ? <FullscreenExitIcon /> : <FullscreenIcon />}\n </IconButton>\n </Tooltip>\n );\n};\n","import IconButton, { type IconButtonProps } from '@mui/material/IconButton';\nimport Tooltip from '@mui/material/Tooltip';\nimport { type MRT_RowData, type MRT_TableInstance } from '../../types';\n\nexport interface MRT_ToggleGlobalFilterButtonProps<TData extends MRT_RowData>\n extends IconButtonProps {\n table: MRT_TableInstance<TData>;\n}\n\nexport const MRT_ToggleGlobalFilterButton = <TData extends MRT_RowData>({\n table,\n ...rest\n}: MRT_ToggleGlobalFilterButtonProps<TData>) => {\n const {\n getState,\n options: {\n icons: { SearchIcon, SearchOffIcon },\n\n localization,\n },\n refs: { searchInputRef },\n setShowGlobalFilter,\n } = table;\n const { globalFilter, showGlobalFilter } = getState();\n\n const handleToggleSearch = () => {\n setShowGlobalFilter(!showGlobalFilter);\n queueMicrotask(() => searchInputRef.current?.focus());\n };\n\n return (\n <Tooltip title={rest?.title ?? localization.showHideSearch}>\n <IconButton\n aria-label={rest?.title ?? localization.showHideSearch}\n disabled={!!globalFilter && showGlobalFilter}\n onClick={handleToggleSearch}\n {...rest}\n title={undefined}\n >\n {showGlobalFilter ? <SearchOffIcon /> : <SearchIcon />}\n </IconButton>\n </Tooltip>\n );\n};\n","import Box, { type BoxProps } from '@mui/material/Box';\nimport { type MRT_RowData, type MRT_TableInstance } from '../../types';\nimport { parseFromValuesOrFunc } from '../../utils/utils';\nimport { MRT_ShowHideColumnsButton } from '../buttons/MRT_ShowHideColumnsButton';\nimport { MRT_ToggleDensePaddingButton } from '../buttons/MRT_ToggleDensePaddingButton';\nimport { MRT_ToggleFiltersButton } from '../buttons/MRT_ToggleFiltersButton';\nimport { MRT_ToggleFullScreenButton } from '../buttons/MRT_ToggleFullScreenButton';\nimport { MRT_ToggleGlobalFilterButton } from '../buttons/MRT_ToggleGlobalFilterButton';\n\nexport interface MRT_ToolbarInternalButtonsProps<TData extends MRT_RowData>\n extends BoxProps {\n table: MRT_TableInstance<TData>;\n}\n\nexport const MRT_ToolbarInternalButtons = <TData extends MRT_RowData>({\n table,\n ...rest\n}: MRT_ToolbarInternalButtonsProps<TData>) => {\n const {\n options: {\n columnFilterDisplayMode,\n enableColumnFilters,\n enableColumnOrdering,\n enableColumnPinning,\n enableDensityToggle,\n enableFilters,\n enableFullScreenToggle,\n enableGlobalFilter,\n enableHiding,\n initialState,\n renderToolbarInternalActions,\n },\n } = table;\n\n return (\n <Box\n {...rest}\n sx={(theme) => ({\n alignItems: 'center',\n display: 'flex',\n zIndex: 3,\n ...(parseFromValuesOrFunc(rest?.sx, theme) as any),\n })}\n >\n {renderToolbarInternalActions?.({\n table,\n }) ?? (\n <>\n {enableFilters &&\n enableGlobalFilter &&\n !initialState?.showGlobalFilter && (\n <MRT_ToggleGlobalFilterButton table={table} />\n )}\n {enableFilters &&\n enableColumnFilters &&\n columnFilterDisplayMode !== 'popover' && (\n <MRT_ToggleFiltersButton table={table} />\n )}\n {(enableHiding || enableColumnOrdering || enableColumnPinning) && (\n <MRT_ShowHideColumnsButton table={table} />\n )}\n {enableDensityToggle && (\n <MRT_ToggleDensePaddingButton table={table} />\n )}\n {enableFullScreenToggle && (\n <MRT_ToggleFullScreenButton table={table} />\n )}\n </>\n )}\n </Box>\n );\n};\n","import {\n type ChangeEvent,\n type MouseEvent,\n useCallback,\n useEffect,\n useRef,\n useState,\n} from 'react';\nimport Collapse from '@mui/material/Collapse';\nimport IconButton from '@mui/material/IconButton';\nimport InputAdornment from '@mui/material/InputAdornment';\nimport TextField, { type TextFieldProps } from '@mui/material/TextField';\nimport Tooltip from '@mui/material/Tooltip';\nimport { debounce } from '@mui/material/utils';\nimport { type MRT_RowData, type MRT_TableInstance } from '../../types';\nimport { parseFromValuesOrFunc } from '../../utils/utils';\nimport { MRT_FilterOptionMenu } from '../menus/MRT_FilterOptionMenu';\n\nexport interface MRT_GlobalFilterTextFieldProps<TData extends MRT_RowData>\n extends TextFieldProps<'standard'> {\n table: MRT_TableInstance<TData>;\n}\n\nexport const MRT_GlobalFilterTextField = <TData extends MRT_RowData>({\n table,\n ...rest\n}: MRT_GlobalFilterTextFieldProps<TData>) => {\n const {\n getState,\n options: {\n enableGlobalFilterModes,\n icons: { CloseIcon, SearchIcon },\n localization,\n manualFiltering,\n muiSearchTextFieldProps,\n },\n refs: { searchInputRef },\n setGlobalFilter,\n } = table;\n const { globalFilter, showGlobalFilter } = getState();\n\n const textFieldProps = {\n ...parseFromValuesOrFunc(muiSearchTextFieldProps, {\n table,\n }),\n ...rest,\n };\n\n const isMounted = useRef(false);\n const [anchorEl, setAnchorEl] = useState<HTMLElement | null>(null);\n const [searchValue, setSearchValue] = useState(globalFilter ?? '');\n\n const handleChangeDebounced = useCallback(\n debounce(\n (event: ChangeEvent<HTMLInputElement>) => {\n setGlobalFilter(event.target.value ?? undefined);\n },\n manualFiltering ? 500 : 250,\n ),\n [],\n );\n\n const handleChange = (event: ChangeEvent<HTMLInputElement>) => {\n setSearchValue(event.target.value);\n handleChangeDebounced(event);\n };\n\n const handleGlobalFilterMenuOpen = (event: MouseEvent<HTMLElement>) => {\n setAnchorEl(event.currentTarget);\n };\n\n const handleClear = () => {\n setSearchValue('');\n setGlobalFilter(undefined);\n };\n\n useEffect(() => {\n if (isMounted.current) {\n if (globalFilter === undefined) {\n handleClear();\n } else {\n setSearchValue(globalFilter);\n }\n }\n isMounted.current = true;\n }, [globalFilter]);\n\n return (\n <Collapse\n in={showGlobalFilter}\n mountOnEnter\n orientation=\"horizontal\"\n unmountOnExit\n >\n <TextField\n inputProps={{\n autoComplete: 'off',\n ...textFieldProps.inputProps,\n }}\n onChange={handleChange}\n placeholder={localization.search}\n size=\"small\"\n value={searchValue ?? ''}\n variant=\"outlined\"\n {...textFieldProps}\n InputProps={{\n endAdornment: (\n <InputAdornment position=\"end\">\n <Tooltip title={localization.clearSearch ?? ''}>\n <span>\n <IconButton\n aria-label={localization.clearSearch}\n disabled={!searchValue?.length}\n onClick={handleClear}\n size=\"small\"\n >\n <CloseIcon />\n </IconButton>\n </span>\n </Tooltip>\n </InputAdornment>\n ),\n startAdornment: enableGlobalFilterModes ? (\n <InputAdornment position=\"start\">\n <Tooltip title={localization.changeSearchMode}>\n <IconButton\n aria-label={localization.changeSearchMode}\n onClick={handleGlobalFilterMenuOpen}\n size=\"small\"\n sx={{ height: '1.75rem', width: '1.75rem' }}\n >\n <SearchIcon />\n </IconButton>\n </Tooltip>\n </InputAdornment>\n ) : (\n <SearchIcon style={{ marginRight: '4px' }} />\n ),\n ...textFieldProps.InputProps,\n sx: (theme) => ({\n mb: 0,\n ...(parseFromValuesOrFunc(\n textFieldProps?.InputProps?.sx,\n theme,\n ) as any),\n }),\n }}\n inputRef={(inputRef) => {\n searchInputRef.current = inputRef;\n if (textFieldProps?.inputRef) {\n textFieldProps.inputRef = inputRef;\n }\n }}\n />\n <MRT_FilterOptionMenu\n anchorEl={anchorEl}\n onSelect={handleClear}\n setAnchorEl={setAnchorEl}\n table={table}\n />\n </Collapse>\n );\n};\n","import Box from '@mui/material/Box';\nimport useMediaQuery from '@mui/material/useMediaQuery';\nimport { MRT_LinearProgressBar } from './MRT_LinearProgressBar';\nimport { MRT_TablePagination } from './MRT_TablePagination';\nimport { MRT_ToolbarAlertBanner } from './MRT_ToolbarAlertBanner';\nimport { MRT_ToolbarDropZone } from './MRT_ToolbarDropZone';\nimport { MRT_ToolbarInternalButtons } from './MRT_ToolbarInternalButtons';\nimport { type MRT_RowData, type MRT_TableInstance } from '../../types';\nimport { getCommonToolbarStyles } from '../../utils/style.utils';\nimport { parseFromValuesOrFunc } from '../../utils/utils';\nimport { MRT_GlobalFilterTextField } from '../inputs/MRT_GlobalFilterTextField';\n\nexport interface MRT_TopToolbarProps<TData extends MRT_RowData> {\n table: MRT_TableInstance<TData>;\n}\n\nexport const MRT_TopToolbar = <TData extends MRT_RowData>({\n table,\n}: MRT_TopToolbarProps<TData>) => {\n const {\n getState,\n options: {\n enableGlobalFilter,\n enablePagination,\n enableToolbarInternalActions,\n muiTopToolbarProps,\n positionGlobalFilter,\n positionPagination,\n positionToolbarAlertBanner,\n positionToolbarDropZone,\n renderTopToolbarCustomActions,\n },\n refs: { topToolbarRef },\n } = table;\n\n const { isFullScreen, showGlobalFilter } = getState();\n\n const isMobile = useMediaQuery('(max-width:720px)');\n const isTablet = useMediaQuery('(max-width:1024px)');\n\n const toolbarProps = parseFromValuesOrFunc(muiTopToolbarProps, { table });\n\n const stackAlertBanner =\n isMobile ||\n !!renderTopToolbarCustomActions ||\n (showGlobalFilter && isTablet);\n\n const globalFilterProps = {\n sx: !isTablet\n ? {\n zIndex: 2,\n }\n : undefined,\n table,\n };\n\n return (\n <Box\n {...toolbarProps}\n ref={(ref: HTMLDivElement) => {\n topToolbarRef.current = ref;\n if (toolbarProps?.ref) {\n // @ts-expect-error\n toolbarProps.ref.current = ref;\n }\n }}\n sx={(theme) => ({\n ...getCommonToolbarStyles({ table, theme }),\n position: isFullScreen ? 'sticky' : 'relative',\n top: isFullScreen ? '0' : undefined,\n ...(parseFromValuesOrFunc(toolbarProps?.sx, theme) as any),\n })}\n >\n {positionToolbarAlertBanner === 'top' && (\n <MRT_ToolbarAlertBanner\n stackAlertBanner={stackAlertBanner}\n table={table}\n />\n )}\n {['both', 'top'].includes(positionToolbarDropZone ?? '') && (\n <MRT_ToolbarDropZone table={table} />\n )}\n <Box\n sx={{\n alignItems: 'flex-start',\n boxSizing: 'border-box',\n display: 'flex',\n gap: '0.5rem',\n justifyContent: 'space-between',\n p: '0.5rem',\n position: stackAlertBanner ? 'relative' : 'absolute',\n right: 0,\n top: 0,\n width: '100%',\n }}\n >\n {enableGlobalFilter && positionGlobalFilter === 'left' && (\n <MRT_GlobalFilterTextField {...globalFilterProps} />\n )}\n {renderTopToolbarCustomActions?.({ table }) ?? <span />}\n {enableToolbarInternalActions ? (\n <Box\n sx={{\n alignItems: 'center',\n display: 'flex',\n flexWrap: 'wrap-reverse',\n gap: '0.5rem',\n justifyContent: 'flex-end',\n }}\n >\n {enableGlobalFilter && positionGlobalFilter === 'right' && (\n <MRT_GlobalFilterTextField {...globalFilterProps} />\n )}\n <MRT_ToolbarInternalButtons table={table} />\n </Box>\n ) : (\n enableGlobalFilter &&\n positionGlobalFilter === 'right' && (\n <MRT_GlobalFilterTextField {...globalFilterProps} />\n )\n )}\n </Box>\n {enablePagination &&\n ['both', 'top'].includes(positionPagination ?? '') && (\n <MRT_TablePagination position=\"top\" table={table} />\n )}\n <MRT_LinearProgressBar isTopToolbar table={table} />\n </Box>\n );\n};\n","import Paper, { type PaperProps } from '@mui/material/Paper';\nimport { useTheme } from '@mui/material/styles';\nimport { MRT_TableContainer } from './MRT_TableContainer';\nimport { type MRT_RowData, type MRT_TableInstance } from '../../types';\nimport { parseFromValuesOrFunc } from '../../utils/utils';\nimport { MRT_BottomToolbar } from '../toolbar/MRT_BottomToolbar';\nimport { MRT_TopToolbar } from '../toolbar/MRT_TopToolbar';\n\nexport interface MRT_TablePaperProps<TData extends MRT_RowData>\n extends PaperProps {\n table: MRT_TableInstance<TData>;\n}\n\nexport const MRT_TablePaper = <TData extends MRT_RowData>({\n table,\n ...rest\n}: MRT_TablePaperProps<TData>) => {\n const {\n getState,\n options: {\n enableBottomToolbar,\n enableTopToolbar,\n mrtTheme: { baseBackgroundColor },\n muiTablePaperProps,\n renderBottomToolbar,\n renderTopToolbar,\n },\n refs: { tablePaperRef },\n } = table;\n const { isFullScreen } = getState();\n\n const paperProps = {\n ...parseFromValuesOrFunc(muiTablePaperProps, { table }),\n ...rest,\n };\n\n const theme = useTheme();\n\n return (\n <Paper\n elevation={2}\n onKeyDown={(e) => e.key === 'Escape' && table.setIsFullScreen(false)}\n {...paperProps}\n ref={(ref: HTMLDivElement) => {\n tablePaperRef.current = ref;\n if (paperProps?.ref) {\n //@ts-expect-error\n paperProps.ref.current = ref;\n }\n }}\n style={{\n ...(isFullScreen\n ? {\n bottom: 0,\n height: '100dvh',\n left: 0,\n margin: 0,\n maxHeight: '100dvh',\n maxWidth: '100dvw',\n padding: 0,\n position: 'fixed',\n right: 0,\n top: 0,\n width: '100dvw',\n zIndex: theme.zIndex.modal,\n }\n : {}),\n ...paperProps?.style,\n }}\n sx={(theme) => ({\n backgroundColor: baseBackgroundColor,\n backgroundImage: 'unset',\n overflow: 'hidden',\n transition: 'all 100ms ease-in-out',\n ...(parseFromValuesOrFunc(paperProps?.sx, theme) as any),\n })}\n >\n {enableTopToolbar &&\n (parseFromValuesOrFunc(renderTopToolbar, { table }) ?? (\n <MRT_TopToolbar table={table} />\n ))}\n <MRT_TableContainer table={table} />\n {enableBottomToolbar &&\n (parseFromValuesOrFunc(renderBottomToolbar, { table }) ?? (\n <MRT_BottomToolbar table={table} />\n ))}\n </Paper>\n );\n};\n","import { useMaterialReactTable } from '../hooks/useMaterialReactTable';\nimport {\n type MRT_RowData,\n type MRT_TableInstance,\n type MRT_TableOptions,\n type Xor,\n} from '../types';\nimport { MRT_TablePaper } from './table/MRT_TablePaper';\n\ntype TableInstanceProp<TData extends MRT_RowData> = {\n table: MRT_TableInstance<TData>;\n};\n\nexport type MaterialReactTableProps<TData extends MRT_RowData> = Xor<\n TableInstanceProp<TData>,\n MRT_TableOptions<TData>\n>;\n\nconst isTableInstanceProp = <TData extends MRT_RowData>(\n props: MaterialReactTableProps<TData>,\n): props is TableInstanceProp<TData> =>\n (props as TableInstanceProp<TData>).table !== undefined;\n\nexport const MaterialReactTable = <TData extends MRT_RowData>(\n props: MaterialReactTableProps<TData>,\n) => {\n let table: MRT_TableInstance<TData>;\n\n if (isTableInstanceProp(props)) {\n table = props.table;\n } else {\n table = useMaterialReactTable(props);\n }\n\n return <MRT_TablePaper table={table} />;\n};\n","import { Box } from \"@mui/material\";\r\nimport {\r\n MaterialReactTable,\r\n useMaterialReactTable,\r\n type MRT_ColumnDef,\r\n type MRT_RowData,\r\n type MRT_TableOptions,\r\n} from \"material-react-table\";\r\n\r\n/**\r\n * Shared MRT styling — mirror of the main app's tableStyles so the SDK table\r\n * looks/behaves like the rest of the reports UI.\r\n */\r\nconst mrtStylingProps: Partial<MRT_TableOptions<MRT_RowData>> = {\r\n muiTableProps: {\r\n sx: {\r\n border: \"1px solid white\",\r\n borderRadius: \"20px\",\r\n boxShadow: \"0px 4px 10px rgba(0, 0, 0, 0.1)\",\r\n },\r\n },\r\n muiTableHeadCellProps: {\r\n sx: {\r\n backgroundColor: \"#f1f1f1\",\r\n color: \"#333\",\r\n fontWeight: 600,\r\n fontSize: \"14px\",\r\n \"& .Mui-TableHeadCell-Content\": {\r\n flexDirection: \"row-reverse\",\r\n justifyContent: \"flex-end\",\r\n },\r\n },\r\n },\r\n muiTableBodyCellProps: {\r\n sx: { padding: \"4px 12px\", fontSize: \"14px\" },\r\n },\r\n muiTableBodyRowProps: {\r\n sx: {\r\n \"&:nth-of-type(even)\": { backgroundColor: \"#fff\" },\r\n \"&:hover\": { backgroundColor: \"#f0f7f8\" },\r\n },\r\n },\r\n};\r\n\r\n/** Shared MRT config (behavior + styling) — spread into useMaterialReactTable. */\r\nconst COLUMN_FILTERS: Partial<MRT_TableOptions<MRT_RowData>> = {\r\n enableFilters: true,\r\n enableColumnFilterModes: false,\r\n enablePagination: true,\r\n enableBottomToolbar: true,\r\n enableSorting: false,\r\n positionExpandColumn: \"last\" as const,\r\n columnFilterDisplayMode: \"popover\" as const,\r\n enableGlobalFilterModes: true,\r\n globalFilterFn: \"contains\",\r\n globalFilterModeOptions: [\"startsWith\"],\r\n initialState: { showGlobalFilter: true },\r\n muiSearchTextFieldProps: {\r\n placeholder: \"Search\",\r\n sx: { borderRadius: \"50%\" },\r\n },\r\n ...mrtStylingProps,\r\n};\r\n\r\nconst TopToolbarContainer = () => (\r\n <Box sx={{ backgroundColor: \"#fff\", display: \"flex\", alignItems: \"center\", justifyContent: \"space-between\" }} />\r\n);\r\n\r\ntype AppTableOptions<T extends MRT_RowData> = Omit<\r\n MRT_TableOptions<T>,\r\n \"columns\" | \"data\"\r\n> & {\r\n columns: MRT_ColumnDef<T>[];\r\n data: T[];\r\n};\r\n\r\n/**\r\n * Hook — use when you need direct access to the `table` instance.\r\n */\r\nexport function useAppTable<T extends MRT_RowData>({\r\n columns,\r\n data,\r\n ...overrides\r\n}: AppTableOptions<T>) {\r\n return useMaterialReactTable({\r\n columns,\r\n data,\r\n ...(COLUMN_FILTERS as Partial<MRT_TableOptions<T>>),\r\n renderTopToolbar: () => <TopToolbarContainer />,\r\n ...overrides,\r\n });\r\n}\r\n\r\n/**\r\n * Component — use for simple tables that don't need external table access.\r\n */\r\nexport default function AppTable<T extends MRT_RowData>(\r\n props: AppTableOptions<T>\r\n) {\r\n const table = useAppTable(props);\r\n return <MaterialReactTable table={table} />;\r\n}\r\n","import { useEffect, useState } from \"react\";\r\nimport {\r\n Box, Typography, IconButton, CircularProgress, Dialog, DialogTitle, DialogContent,\r\n} from \"@mui/material\";\r\nimport FileDownloadIcon from \"@mui/icons-material/FileDownload\";\r\nimport CloseIcon from \"@mui/icons-material/Close\";\r\nimport dayjs, { type Dayjs } from \"dayjs\";\r\nimport AppButton from \"../common/components/AppButton\";\r\nimport BreakSessionsTable from \"../common/components/BreakSessionsTable\";\r\nimport { getAgentBreakSessions, exportAgentBreakSessionsToExcel } from \"../agentDetailReport/useAgentDetailReport\";\r\nimport type { BreakSessionResponse } from \"../agentDetailReport/types\";\r\n\r\nconst FONT = \"'Inter', 'Segoe UI', 'Roboto', -apple-system, BlinkMacSystemFont, sans-serif\";\r\nconst C = { red: \"#cc2a2a\" };\r\n\r\n// Format start/end date range the way the breaks endpoint expects (ISO, end clamped to \"now\" for today).\r\nfunction fmtRange(startDate: Dayjs | null, endDate: Dayjs | null) {\r\n const sd = startDate ?? dayjs();\r\n const ed = endDate ?? dayjs();\r\n return {\r\n start_date: sd.startOf(\"day\").format(\"YYYY-MM-DDTHH:mm:ss\"),\r\n end_date: ed.isSame(dayjs(), \"day\")\r\n ? dayjs().format(\"YYYY-MM-DDTHH:mm:ss\")\r\n : ed.endOf(\"day\").format(\"YYYY-MM-DDTHH:mm:ss\"),\r\n };\r\n}\r\n\r\ninterface Props {\r\n open: boolean;\r\n onClose: () => void;\r\n agentId: string;\r\n agentName: string;\r\n startDate: Dayjs | null;\r\n endDate: Dayjs | null;\r\n}\r\n\r\n/**\r\n * Break-sessions drill-down dialog — lists an agent's individual breaks grouped\r\n * by date, with an Excel export. Fetches on open via the break-sessions endpoint.\r\n */\r\nexport default function BreakSessionsDialog({ open, onClose, agentId, agentName, startDate, endDate }: Props) {\r\n const [breakSessions, setBreakSessions] = useState<BreakSessionResponse[]>([]);\r\n const [loading, setLoading] = useState(false);\r\n const [error, setError] = useState(\"\");\r\n\r\n useEffect(() => {\r\n if (!open || !agentId) return;\r\n let active = true;\r\n setBreakSessions([]);\r\n setError(\"\");\r\n setLoading(true);\r\n getAgentBreakSessions(agentId, fmtRange(startDate, endDate))\r\n .then((data) => { if (active) setBreakSessions(Array.isArray(data) ? data : []); })\r\n .catch(() => { if (active) setBreakSessions([]); })\r\n .finally(() => { if (active) setLoading(false); });\r\n return () => { active = false; };\r\n }, [open, agentId, startDate, endDate]);\r\n\r\n const handleExport = async () => {\r\n if (!agentId) return;\r\n try {\r\n await exportAgentBreakSessionsToExcel(agentId, fmtRange(startDate, endDate));\r\n } catch (err: any) {\r\n setError(err?.message || \"Failed to export breaks Excel\");\r\n }\r\n };\r\n\r\n return (\r\n <Dialog\r\n open={open}\r\n onClose={(_e, reason) => { if (reason !== \"backdropClick\") onClose(); }}\r\n maxWidth=\"md\"\r\n fullWidth\r\n slotProps={{ paper: { sx: { borderRadius: \"12px\", fontFamily: FONT, overflow: \"hidden\", boxShadow: \"0 8px 32px rgba(0,0,0,0.18)\", maxWidth: 640 } } }}\r\n >\r\n <DialogTitle\r\n sx={{\r\n fontFamily: FONT,\r\n background: \"linear-gradient(135deg, var(--primary-color-dark, #14505b), var(--primary-color, #1A5F6C))\",\r\n color: \"#fff\",\r\n display: \"flex\",\r\n justifyContent: \"space-between\",\r\n alignItems: \"center\",\r\n py: 1.5,\r\n px: 2.5,\r\n }}\r\n >\r\n <Box>\r\n <Typography variant=\"h6\" sx={{ fontFamily: FONT, fontWeight: 700, fontSize: \"0.95rem\", letterSpacing: \"0.3px\" }}>\r\n Break Sessions\r\n </Typography>\r\n <Typography variant=\"body2\" sx={{ fontFamily: FONT, opacity: 0.9, fontSize: \"0.76rem\", mt: 0.3 }}>\r\n {agentName} &bull; {breakSessions.length} break{breakSessions.length !== 1 ? \"s\" : \"\"}\r\n </Typography>\r\n </Box>\r\n <Box sx={{ display: \"flex\", alignItems: \"center\", gap: 0.5 }}>\r\n <AppButton\r\n size=\"small\"\r\n startIcon={<FileDownloadIcon sx={{ fontSize: \"0.85rem !important\" }} />}\r\n disabled={loading || breakSessions.length === 0}\r\n onClick={handleExport}\r\n sx={{ whiteSpace: \"nowrap\" }}\r\n >\r\n Export to Excel\r\n </AppButton>\r\n <IconButton\r\n onClick={onClose}\r\n size=\"small\"\r\n sx={{ color: \"#fff\", backgroundColor: \"rgba(255,255,255,0.1)\", \"&:hover\": { backgroundColor: \"rgba(255,255,255,0.2)\" } }}\r\n >\r\n <CloseIcon fontSize=\"small\" />\r\n </IconButton>\r\n </Box>\r\n </DialogTitle>\r\n\r\n <DialogContent sx={{ p: 0, backgroundColor: \"#f8fafb\" }}>\r\n {error && (\r\n <Typography sx={{ fontFamily: FONT, color: C.red, fontSize: \"0.78rem\", px: 2, pt: 1.5 }}>{error}</Typography>\r\n )}\r\n {loading ? (\r\n <Box sx={{ p: 4, textAlign: \"center\" }}>\r\n <CircularProgress size={28} sx={{ color: \"var(--primary-color, #1A5F6C)\" }} />\r\n </Box>\r\n ) : breakSessions.length > 0 ? (\r\n <Box sx={{ p: 1.5 }}>\r\n <BreakSessionsTable breaks={breakSessions} maxHeight={360} showRemarksStatus={false} />\r\n </Box>\r\n ) : (\r\n <Box sx={{ p: 4, textAlign: \"center\" }}>\r\n <Typography sx={{ fontFamily: FONT, color: \"#9e9e9e\", fontStyle: \"italic\", fontSize: \"0.82rem\" }}>\r\n No breaks found\r\n </Typography>\r\n </Box>\r\n )}\r\n </DialogContent>\r\n </Dialog>\r\n );\r\n}\r\n"],"mappings":"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EACHC,QAAG;EACHC,QAAG;EACHC,QAAG;EACHC,QAAG;EACHC,QAAG;EACHC,QAAG;EACHC,QAAG;EACHC,QAAG;EACHC,QAAG;EACHC,QAAG;EACHC,QAAG;EACHC,QAAG;EACHC,QAAG;EACHC,QAAG;EACHC,QAAG;EACHC,QAAG;EACHC,QAAG;EACHC,QAAG;EACHC,QAAG;EACHC,QAAG;EACHC,QAAG;EACHC,QAAG;EACHC,QAAG;EACHC,QAAG;EACHC,QAAG;EACHC,QAAG;EACHC,QAAG;EACHC,QAAG;EACHC,QAAG;EACHC,QAAG;EACHC,QAAG;EACHC,QAAG;EACHC,QAAG;EACHC,QAAG;EACHC,QAAG;EACHC,QAAG;EACHC,QAAG;EACHC,QAAG;EACHC,QAAG;EACHC,QAAG;EACHC,QAAG;EACHC,QAAG;EACHC,QAAG;EACHC,QAAG;EACHC,QAAG;EACHC,QAAG;EACHC,QAAG;EACHC,QAAG;EACHC,QAAG;EACHC,QAAG;EACHC,QAAG;EACHC,QAAG;EACHC,QAAG;EACHC,QAAG;EACHC,QAAG;EACHC,QAAG;EACHC,QAAG;EACHC,QAAG;EACHC,QAAG;EACHC,QAAG;EACHC,QAAG;EACHC,QAAG;EACHC,QAAG;EACHC,QAAG;EACHC,QAAG;EACHC,QAAG;EACHC,QAAG;EACHC,QAAG;EACHC,QAAG;EACHC,QAAG;EACHC,QAAG;EACHC,QAAG;EACHC,QAAG;EACHC,QAAG;EACHC,QAAG;EACHC,QAAG;EACHC,QAAG;EACHC,QAAG;EACHC,QAAG;EACHC,QAAG;EACHC,QAAG;EACHC,QAAG;EACHC,SAAI;EACJC,SAAI;EACJC,QAAG;EACHC,QAAG;EACHC,QAAG;EACHC,QAAG;EACHC,QAAG;EACHC,QAAG;EACHC,QAAG;EACHC,QAAG;EACHC,QAAG;EACHC,QAAG;EACHC,QAAG;EACHC,QAAG;EACHC,QAAG;EACHC,QAAG;EACHC,QAAG;EACHC,QAAG;EACHC,QAAG;EACHC,QAAG;EACHC,QAAG;EACHC,QAAG;EACHC,QAAG;EACHC,QAAG;EACHC,QAAG;EACHC,QAAG;EACHC,QAAG;EACHC,QAAG;EACHC,QAAG;EACHC,QAAG;EACHC,QAAG;EACHC,QAAG;EACHC,QAAG;EACHC,QAAG;EACHC,QAAG;EACHC,QAAG;EACHC,QAAG;EACHC,QAAG;EACHC,QAAG;EACHC,QAAG;EACHC,QAAG;EACHC,QAAG;EACHC,QAAG;EACHC,QAAG;EACHC,QAAG;EACHC,QAAG;EACHC,QAAG;EACHC,QAAG;EACHC,QAAG;EACHC,QAAG;EACHC,SAAI;EACJC,SAAI;EACJC,QAAG;EACHC,QAAG;EACHC,QAAG;EACHC,QAAG;EACHC,QAAG;EACHC,QAAG;EACHC,QAAG;EACHC,QAAG;EACHC,QAAG;EACHC,QAAG;EACHC,QAAG;EACHC,QAAG;EACHC,SAAI;EACJC,SAAI;EACJC,QAAG;EACHC,QAAG;EACHC,QAAG;EACHC,QAAG;EACHC,QAAG;EACHC,QAAG;EACHC,QAAG;EACHC,SAAI;EACJC,SAAI;EACJC,QAAG;EACHC,QAAG;EACHC,QAAG;EACHC,QAAG;EACHC,QAAG;EACHC,QAAG;EACHC,QAAG;EACHC,QAAG;EACHC,SAAI;EACJC,SAAI;EACJC,QAAG;EACHC,QAAG;EACHC,QAAG;EACHC,QAAG;EACHC,QAAG;EACHC,QAAG;EACHC,SAAI;EACJC,SAAI;EACJC,QAAG;EACHC,QAAG;EACHC,QAAG;EACHC,QAAG;EACHC,QAAG;EACHC,QAAG;EACHC,QAAG;EACHC,QAAG;EACHC,QAAG;EACHC,QAAG;EACHC,QAAG;EACHC,QAAG;EACHC,QAAG;EACHC,QAAG;EACHC,QAAG;EACHC,QAAG;EACHC,QAAG;EACHC,QAAG;EACHC,QAAG;EACHC,QAAG;EACHC,SAAI;EACJC,SAAI;EACJC,QAAG;EACHC,QAAG;EACHC,QAAG;EACHC,QAAG;EACHC,QAAG;EACHC,QAAG;EACHC,QAAG;EACHC,QAAG;EACHC,QAAG;EACHC,QAAG;EACHC,QAAG;EACHC,QAAG;EACHC,QAAG;EACHC,QAAG;EACHC,SAAI;EACJC,SAAI;EACJC,QAAG;EACHC,QAAG;EACHC,QAAG;EACHC,QAAG;EACHC,SAAI;EACJC,SAAI;EACJC,QAAG;EACHC,QAAG;EACHC,QAAG;EACHC,SAAI;EACJC,SAAI;EACJC,QAAG;EACHC,QAAG;EACHC,QAAG;EACHC,QAAG;EACHC,QAAG;EACHC,QAAG;EACHC,QAAG;EACHC,QAAG;EACHC,QAAG;EACHC,QAAG;EACHC,QAAG;EACHC,QAAG;EACHC,QAAG;EACHC,QAAG;EACHC,QAAG;EACHC,QAAG;EACHC,QAAG;EACHC,QAAG;EACHC,QAAG;EACHC,QAAG;EACHC,QAAG;EACHC,QAAG;EACHC,QAAG;EACHC,QAAG;EACHC,QAAG;EACHC,QAAG;EACHC,QAAG;EACHC,QAAG;EACHC,QAAG;EACHC,QAAG;EACHC,QAAG;EACHC,QAAG;EACHC,QAAG;EACHC,QAAG;EACHC,QAAG;EACHC,QAAG;EACHC,QAAG;EACHC,QAAG;EACHC,QAAG;EACHC,QAAG;EACHC,QAAG;EACHC,QAAG;EACHC,QAAG;EACHC,QAAG;EACHC,SAAI;EACJC,SAAI;EACJC,QAAG;EACHC,QAAG;EACHC,QAAG;EACHC,QAAG;EACHC,SAAI;EACJC,SAAI;EACJC,SAAI;EACJC,SAAI;EACJC,SAAI;EACJC,SAAI;EACJC,QAAG;EACHC,QAAG;EACHC,QAAG;EACHC,QAAG;EACHC,QAAG;EACHC,QAAG;EACHC,QAAG;EACHC,QAAG;EACHC,QAAG;EACHC,QAAG;EACHC,QAAG;EACHC,QAAG;EACHC,QAAG;EACHC,QAAG;EACHC,QAAG;EACHC,QAAG;EACHC,QAAG;EACHC,QAAG;EACHC,QAAG;EACHC,QAAG;EACHC,QAAG;EACHC,QAAG;EACHC,QAAG;EACHC,QAAG;EACHC,SAAI;EACJC,SAAI;EACJC,cAAI;EACJC,cAAI;EACJC,cAAI;EACJC,cAAI;EACJC,SAAI;EACJC,SAAI;EACJC,QAAG;EACHC,QAAG;EACHC,QAAG;EACHC,QAAG;EACHC,SAAI;EACJC,QAAG;EACHC,QAAG;EACHC,QAAG;EACHC,SAAI;EACJC,SAAI;EACJC,SAAI;EACJC,SAAI;EACJC,SAAI;EACJC,SAAI;EACJC,cAAI;EAC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","names":["useState","useEffect","useMemo","useCallback","import_dayjs","functionalUpdate","updater","input","makeStateUpdater","key","instance","updater","setState","old","functionalUpdate","isFunction","d","Function","isNumberArray","Array","isArray","every","val","flattenBy","arr","getChildren","flat","recurse","subArr","forEach","item","push","children","length","memo","getDeps","fn","opts","deps","result","depArgs","depTime","debug","Date","now","newDeps","depsChanged","some","dep","index","resultTime","onChange","depEndTime","Math","round","resultEndTime","resultFpsPercentage","pad","str","num","String","console","info","max","min","getMemoOptions","tableOptions","debugLevel","_tableOptions$debugAl","debugAll","createCell","table","row","column","columnId","getRenderValue","_cell$getValue","cell","getValue","options","renderFallbackValue","id","renderValue","getContext","_features","feature","createColumn","columnDef","depth","parent","_ref","_resolvedColumnDef$id","defaultColumn","_getDefaultColumnDef","resolvedColumnDef","accessorKey","prototype","replaceAll","replace","undefined","header","accessorFn","includes","originalRow","split","_result","warn","process","Error","columns","getFlatColumns","_column$columns","flatMap","getLeafColumns","_getOrderColumnsFn","orderColumns","_column$columns2","leafColumns","createHeader","_options$id","isPlaceholder","placeholderId","subHeaders","colSpan","rowSpan","headerGroup","getLeafHeaders","leafHeaders","recurseHeader","h","map","Headers","createTable","getHeaderGroups","getAllColumns","getVisibleLeafColumns","getState","columnPinning","left","right","allColumns","_left$map$filter","_right$map$filter","leftColumns","find","filter","Boolean","rightColumns","centerColumns","headerGroups","buildHeaderGroups","getCenterHeaderGroups","getLeftHeaderGroups","_left$map$filter2","orderedLeafColumns","getRightHeaderGroups","_right$map$filter2","getFooterGroups","reverse","getLeftFooterGroups","getCenterFooterGroups","getRightFooterGroups","getFlatHeaders","headers","getLeftFlatHeaders","getCenterFlatHeaders","getRightFlatHeaders","getCenterLeafHeaders","flatHeaders","_header$subHeaders","getLeftLeafHeaders","_header$subHeaders2","getRightLeafHeaders","_header$subHeaders3","center","_left$0$headers","_left$","_center$0$headers","_center$","_right$0$headers","_right$","columnsToGroup","headerFamily","_headerGroups$0$heade","_headerGroups$","maxDepth","findMaxDepth","getIsVisible","createHeaderGroup","headersToGroup","join","pendingParentHeaders","headerToGroup","latestPendingParentHeader","isLeafHeader","bottomHeaders","recurseHeadersForSpans","filteredHeaders","childRowSpans","childColSpan","childRowSpan","minChildRowSpan","createRow","original","rowIndex","subRows","parentId","_valuesCache","_uniqueValuesCache","hasOwnProperty","getColumn","getUniqueValues","_row$getValue","getLeafRows","getParentRow","getRow","getParentRows","parentRows","currentRow","parentRow","getAllCells","getAllLeafColumns","_getAllCellsByColumnId","allCells","reduce","acc","i","ColumnFaceting","_getFacetedRowModel","getFacetedRowModel","getPreFilteredRowModel","_getFacetedUniqueValues","getFacetedUniqueValues","Map","_getFacetedMinMaxValues","getFacetedMinMaxValues","includesString","filterValue","_filterValue$toString","search","toString","toLowerCase","autoRemove","testFalsey","includesStringSensitive","_row$getValue2","equalsString","_row$getValue3","arrIncludes","_row$getValue4","arrIncludesAll","_row$getValue5","arrIncludesSome","_row$getValue6","equals","weakEquals","inNumberRange","rowValue","resolveFilterValue","unsafeMin","unsafeMax","parsedMin","parseFloat","parsedMax","Number","isNaN","Infinity","temp","filterFns","ColumnFiltering","getDefaultColumnDef","filterFn","getInitialState","state","columnFilters","getDefaultOptions","onColumnFiltersChange","filterFromLeafRows","maxLeafRowFilterDepth","getAutoFilterFn","firstRow","getCoreRowModel","flatRows","value","getFilterFn","_table$options$filter","_table$options$filter2","getCanFilter","_column$columnDef$ena","_table$options$enable","_table$options$enable2","enableColumnFilter","enableColumnFilters","enableFilters","getIsFiltered","getFilterIndex","getFilterValue","_table$getState$colum","_table$getState$colum2","_table$getState$colum3","findIndex","setFilterValue","setColumnFilters","previousFilter","newFilter","shouldAutoRemoveFilter","_old$filter","newFilterObj","_old$map","_table","columnFiltersMeta","updateFn","_functionalUpdate","resetColumnFilters","defaultState","_table$initialState$c","_table$initialState","initialState","getFilteredRowModel","_getFilteredRowModel","manualFiltering","sum","_leafRows","childRows","next","nextValue","extent","mean","leafRows","count","median","values","mid","floor","nums","sort","a","b","unique","from","Set","uniqueCount","size","_columnId","aggregationFns","ColumnGrouping","aggregatedCell","props","_toString","_props$getValue","aggregationFn","grouping","onGroupingChange","groupedColumnMode","toggleGrouping","setGrouping","getCanGroup","enableGrouping","getGroupingValue","getIsGrouped","_table$getState$group","getGroupedIndex","_table$getState$group2","indexOf","getToggleGroupingHandler","canGroup","getAutoAggregationFn","Object","call","getAggregationFn","_table$options$aggreg","_table$options$aggreg2","resetGrouping","_table$initialState$g","getPreGroupedRowModel","getGroupedRowModel","_getGroupedRowModel","manualGrouping","groupingColumnId","_groupingValuesCache","getIsPlaceholder","getIsAggregated","_row$subRows","nonGroupingColumns","col","groupingColumns","g","ColumnOrdering","columnOrder","onColumnOrderChange","getIndex","position","_getVisibleLeafColumns","getIsFirstColumn","_columns$","getIsLastColumn","_columns","setColumnOrder","resetColumnOrder","orderedColumns","columnOrderCopy","columnsCopy","targetColumnId","shift","foundIndex","splice","getDefaultColumnPinningState","ColumnPinning","onColumnPinningChange","pin","columnIds","setColumnPinning","_old$left3","_old$right3","_old$left","_old$right","_old$left2","_old$right2","getCanPin","_d$columnDef$enablePi","enablePinning","enableColumnPinning","getIsPinned","leafColumnIds","isLeft","isRight","getPinnedIndex","getCenterVisibleCells","_getAllVisibleCells","leftAndRight","getLeftVisibleCells","cells","getRightVisibleCells","resetColumnPinning","getIsSomeColumnsPinned","_pinningState$positio","pinningState","_pinningState$left","_pinningState$right","getLeftLeafColumns","getRightLeafColumns","getCenterLeafColumns","defaultColumnSizing","minSize","maxSize","MAX_SAFE_INTEGER","getDefaultColumnSizingInfoState","startOffset","startSize","deltaOffset","deltaPercentage","isResizingColumn","columnSizingStart","ColumnSizing","columnSizing","columnSizingInfo","columnResizeMode","columnResizeDirection","onColumnSizingChange","onColumnSizingInfoChange","getSize","_column$columnDef$min","_column$columnDef$max","columnSize","getStart","slice","getAfter","resetSize","setColumnSizing","_ref2","_","rest","getCanResize","enableResizing","enableColumnResizing","getIsResizing","_header$column$getSiz","prevSiblingHeader","getResizeHandler","_contextDocument","canResize","e","persist","isTouchStartEvent","touches","clientX","newColumnSizing","updateOffset","eventType","clientXPos","setColumnSizingInfo","_old$startOffset","_old$startSize","deltaDirection","_ref3","headerSize","onMove","onEnd","contextDocument","document","mouseEvents","moveHandler","upHandler","removeEventListener","touchEvents","cancelable","preventDefault","stopPropagation","_e$touches$","passiveIfSupported","passiveEventSupported","passive","addEventListener","resetColumnSizing","resetHeaderSizeInfo","_table$initialState$c2","getTotalSize","_table$getHeaderGroup","_table$getHeaderGroup2","getLeftTotalSize","_table$getLeftHeaderG","_table$getLeftHeaderG2","getCenterTotalSize","_table$getCenterHeade","_table$getCenterHeade2","getRightTotalSize","_table$getRightHeader","_table$getRightHeader2","passiveSupported","supported","noop","window","err","type","ColumnVisibility","columnVisibility","onColumnVisibilityChange","toggleVisibility","getCanHide","setColumnVisibility","childColumns","c","enableHiding","getToggleVisibilityHandler","target","checked","getVisibleCells","makeVisibleColumnsMethod","getColumns","getVisibleFlatColumns","getAllFlatColumns","getLeftVisibleLeafColumns","getRightVisibleLeafColumns","getCenterVisibleLeafColumns","resetColumnVisibility","toggleAllColumnsVisible","_value","getIsAllColumnsVisible","obj","getIsSomeColumnsVisible","getToggleAllColumnsVisibilityHandler","_target","GlobalFaceting","_getGlobalFacetedRowModel","getGlobalFacetedRowModel","_getGlobalFacetedUniqueValues","getGlobalFacetedUniqueValues","_getGlobalFacetedMinMaxValues","getGlobalFacetedMinMaxValues","GlobalFiltering","globalFilter","onGlobalFilterChange","globalFilterFn","getColumnCanGlobalFilter","_table$getCoreRowMode","getCanGlobalFilter","_table$options$getCol","enableGlobalFilter","getGlobalAutoFilterFn","getGlobalFilterFn","setGlobalFilter","resetGlobalFilter","RowExpanding","expanded","onExpandedChange","paginateExpandedRows","registered","queued","_autoResetExpanded","_table$options$autoRe","_queue","autoResetAll","autoResetExpanded","manualExpanding","resetExpanded","setExpanded","toggleAllRowsExpanded","getIsAllRowsExpanded","_table$initialState$e","getCanSomeRowsExpand","getPrePaginationRowModel","getCanExpand","getToggleAllRowsExpandedHandler","getIsSomeRowsExpanded","keys","getRowModel","getIsExpanded","getExpandedDepth","rowIds","rowsById","splitId","getPreExpandedRowModel","getSortedRowModel","getExpandedRowModel","_getExpandedRowModel","toggleExpanded","_expanded","exists","oldExpanded","rowId","_table$options$getIsR","getIsRowExpanded","_table$options$getRow","getRowCanExpand","enableExpanding","getIsAllParentsExpanded","isFullyExpanded","getToggleExpandedHandler","canExpand","defaultPageIndex","defaultPageSize","getDefaultPaginationState","pageIndex","pageSize","RowPagination","pagination","onPaginationChange","_autoResetPageIndex","autoResetPageIndex","manualPagination","resetPageIndex","setPagination","safeUpdater","newState","resetPagination","_table$initialState$p","setPageIndex","maxPageIndex","pageCount","_table$initialState$p2","resetPageSize","_table$initialState$p3","_table$initialState2","setPageSize","topRowIndex","setPageCount","_table$options$pageCo","newPageCount","getPageOptions","getPageCount","pageOptions","fill","getCanPreviousPage","getCanNextPage","previousPage","nextPage","firstPage","lastPage","getPaginationRowModel","_getPaginationRowModel","_table$options$pageCo2","ceil","getRowCount","_table$options$rowCou","rowCount","rows","getDefaultRowPinningState","top","bottom","RowPinning","rowPinning","onRowPinningChange","includeLeafRows","includeParentRows","leafRowIds","parentRowIds","setRowPinning","_old$top3","_old$bottom3","_old$top","_old$bottom","has","_old$top2","_old$bottom2","enableRowPinning","isTop","isBottom","_ref4","_visiblePinnedRowIds$","visiblePinnedRowIds","getTopRows","getBottomRows","_ref5","resetRowPinning","_table$initialState$r","getIsSomeRowsPinned","_pinningState$top","_pinningState$bottom","_getPinnedRows","visibleRows","pinnedRowIds","_table$options$keepPi","keepPinnedRows","allRows","topPinnedRowIds","bottomPinnedRowIds","getCenterRows","topAndBottom","RowSelection","rowSelection","onRowSelectionChange","enableRowSelection","enableMultiRowSelection","enableSubRowSelection","setRowSelection","resetRowSelection","toggleAllRowsSelected","getIsAllRowsSelected","preGroupedFlatRows","getCanSelect","toggleAllPageRowsSelected","resolvedValue","getIsAllPageRowsSelected","mutateRowIsSelected","getPreSelectedRowModel","getSelectedRowModel","rowModel","selectRowsFn","getFilteredSelectedRowModel","getGroupedSelectedRowModel","isAllRowsSelected","paginationFlatRows","isAllPageRowsSelected","getIsSomeRowsSelected","_table$getState$rowSe","totalSelected","getIsSomePageRowsSelected","getIsSelected","getIsSomeSelected","getToggleAllRowsSelectedHandler","getToggleAllPageRowsSelectedHandler","toggleSelected","isSelected","_opts$selectChildren","selectedRowIds","selectChildren","isRowSelected","isSubRowSelected","getIsAllSubRowsSelected","getCanSelectSubRows","getCanMultiSelect","_table$options$enable3","getToggleSelectedHandler","canSelect","includeChildren","newSelectedFlatRows","newSelectedRowsById","recurseRows","_row$subRows2","selection","_selection$row$id","_row$subRows3","allChildrenSelected","someSelected","subRow","subRowChildrenSelected","reSplitAlphaNumeric","alphanumeric","rowA","rowB","compareAlphanumeric","alphanumericCaseSensitive","text","compareBasic","textCaseSensitive","datetime","basic","aStr","bStr","aa","bb","an","parseInt","bn","combo","sortingFns","RowSorting","sorting","sortingFn","sortUndefined","onSortingChange","isMultiSortEvent","shiftKey","getAutoSortingFn","firstRows","isString","getAutoSortDir","getSortingFn","_table$options$sortin","_table$options$sortin2","toggleSorting","desc","multi","nextSortingOrder","getNextSortingOrder","hasManualValue","setSorting","existingSorting","existingIndex","newSorting","sortAction","nextDesc","getCanMultiSort","_table$options$maxMul","maxMultiSortColCount","getFirstSortDir","_column$columnDef$sor","sortDescFirst","firstSortDirection","isSorted","getIsSorted","enableSortingRemoval","enableMultiRemove","getCanSort","enableSorting","_column$columnDef$ena2","enableMultiSort","_table$getState$sorti","columnSort","getSortIndex","_table$getState$sorti2","_table$getState$sorti3","clearSorting","getToggleSortingHandler","canSort","resetSorting","_table$initialState$s","getPreSortedRowModel","_getSortedRowModel","manualSorting","builtInFeatures","_options$_features","_options$initialState","debugTable","defaultOptions","assign","mergeOptions","coreInitialState","_feature$getInitialSt","queuedTimeout","coreInstance","cb","Promise","resolve","then","catch","error","setTimeout","reset","setOptions","newOptions","onStateChange","_getRowId","getRowId","_getCoreRowModel","searchAll","_defaultColumn","_props$renderValue$to","_props$renderValue","_getColumnDefs","columnDefs","recurseColumns","groupingColumnDef","_getAllFlatColumnsById","flatColumns","data","accessRows","originalRows","getSubRows","_row$originalSubRows","originalSubRows","expandRows","expandedRows","handleRow","_table$getColumn","facetedRowModel","uniqueValues","flatRow","_flatRow$getUniqueVal","facetedMinValue","facetedMaxValue","filterRows","filterRowImpl","filterRowModelFromLeafs","filterRowModelFromRoot","rowsToFilter","filterRow","_table$options$maxLea","newFilteredFlatRows","newFilteredRowsById","recurseFilterRows","newRow","_table$options$maxLea2","pass","preRowModel","filterableIds","filterRowsImpl","facetedUniqueValues","j","_facetedUniqueValues$","set","get","resolvedColumnFilters","resolvedGlobalFilters","_filterFn$resolveFilt","globallyFilterableColumns","_globalFilterFn$resol","currentColumnFilter","currentGlobalFilter","filterMeta","__global__","existingGrouping","groupedFlatRows","groupedRowsById","groupUpRecursively","rowGroupsMap","groupBy","aggregatedGroupedRows","entries","groupingValue","groupedRows","_groupedRows$0$getVal","aggregateFn","groupMap","resKey","previous","pageStart","pageEnd","paginatedRowModel","sortingState","sortedFlatRows","availableSorting","columnInfoById","sortEntry","invertSorting","sortData","sortedData","_sortEntry$desc","columnInfo","isDesc","sortInt","aValue","bValue","aUndefined","bUndefined","useReactTable","options","resolvedOptions","state","onStateChange","renderFallbackValue","tableRef","useState","current","createTable","setState","initialState","setOptions","prev","updater","characterMap","À","Á","Â","Ã","Ä","Å","Ấ","Ắ","Ẳ","Ẵ","Ặ","Æ","Ầ","Ằ","Ȃ","Ç","Ḉ","È","É","Ê","Ë","Ế","Ḗ","Ề","Ḕ","Ḝ","Ȇ","Ì","Í","Î","Ï","Ḯ","Ȋ","Ð","Ñ","Ò","Ó","Ô","Õ","Ö","Ø","Ố","Ṍ","Ṓ","Ȏ","Ù","Ú","Û","Ü","Ý","à","á","â","ã","ä","å","ấ","ắ","ẳ","ẵ","ặ","æ","ầ","ằ","ȃ","ç","ḉ","è","é","ê","ë","ế","ḗ","ề","ḕ","ḝ","ȇ","ì","í","î","ï","ḯ","ȋ","ð","ñ","ò","ó","ô","õ","ö","ø","ố","ṍ","ṓ","ȏ","ù","ú","û","ü","ý","ÿ","Ā","ā","Ă","ă","Ą","ą","Ć","ć","Ĉ","ĉ","Ċ","ċ","Č","č","C̆","c̆","Ď","ď","Đ","đ","Ē","ē","Ĕ","ĕ","Ė","ė","Ę","ę","Ě","ě","Ĝ","Ǵ","ĝ","ǵ","Ğ","ğ","Ġ","ġ","Ģ","ģ","Ĥ","ĥ","Ħ","ħ","Ḫ","ḫ","Ĩ","ĩ","Ī","ī","Ĭ","ĭ","Į","į","İ","ı","IJ","ij","Ĵ","ĵ","Ķ","ķ","Ḱ","ḱ","K̆","k̆","Ĺ","ĺ","Ļ","ļ","Ľ","ľ","Ŀ","ŀ","Ł","ł","Ḿ","ḿ","M̆","m̆","Ń","ń","Ņ","ņ","Ň","ň","ʼn","N̆","n̆","Ō","ō","Ŏ","ŏ","Ő","ő","Œ","œ","P̆","p̆","Ŕ","ŕ","Ŗ","ŗ","Ř","ř","R̆","r̆","Ȓ","ȓ","Ś","ś","Ŝ","ŝ","Ş","Ș","ș","ş","Š","š","Ţ","ţ","ț","Ț","Ť","ť","Ŧ","ŧ","T̆","t̆","Ũ","ũ","Ū","ū","Ŭ","ŭ","Ů","ů","Ű","ű","Ų","ų","Ȗ","ȗ","V̆","v̆","Ŵ","ŵ","Ẃ","ẃ","X̆","x̆","Ŷ","ŷ","Ÿ","Y̆","y̆","Ź","ź","Ż","ż","Ž","ž","ſ","ƒ","Ơ","ơ","Ư","ư","Ǎ","ǎ","Ǐ","ǐ","Ǒ","ǒ","Ǔ","ǔ","Ǖ","ǖ","Ǘ","ǘ","Ǚ","ǚ","Ǜ","ǜ","Ứ","ứ","Ṹ","ṹ","Ǻ","ǻ","Ǽ","ǽ","Ǿ","ǿ","Þ","þ","Ṕ","ṕ","Ṥ","ṥ","X́","x́","Ѓ","ѓ","Ќ","ќ","A̋","a̋","E̋","e̋","I̋","i̋","Ǹ","ǹ","Ồ","ồ","Ṑ","ṑ","Ừ","ừ","Ẁ","ẁ","Ỳ","ỳ","Ȁ","ȁ","Ȅ","ȅ","Ȉ","ȉ","Ȍ","ȍ","Ȑ","ȑ","Ȕ","ȕ","B̌","b̌","Č̣","č̣","Ê̌","ê̌","F̌","f̌","Ǧ","ǧ","Ȟ","ȟ","J̌","ǰ","Ǩ","ǩ","M̌","m̌","P̌","p̌","Q̌","q̌","Ř̩","ř̩","Ṧ","ṧ","V̌","v̌","W̌","w̌","X̌","x̌","Y̌","y̌","A̧","a̧","B̧","b̧","Ḑ","ḑ","Ȩ","ȩ","Ɛ̧","ɛ̧","Ḩ","ḩ","I̧","i̧","Ɨ̧","ɨ̧","M̧","m̧","O̧","o̧","Q̧","q̧","U̧","u̧","X̧","x̧","Z̧","z̧","chars","Object","keys","join","allAccents","RegExp","removeAccents","str","replace","match","rankings","CASE_SENSITIVE_EQUAL","EQUAL","STARTS_WITH","WORD_STARTS_WITH","CONTAINS","ACRONYM","MATCHES","NO_MATCH","rankItem","item","value","options","_options$threshold","threshold","accessors","rank","getMatchRanking","rankedValue","accessorIndex","accessorThreshold","passed","valuesToRank","getAllValuesToRank","rankingInfo","i","length","rankValue","newRank","itemValue","minRanking","maxRanking","attributes","Math","min","testString","stringToRank","prepareValueForComparison","toLowerCase","startsWith","includes","getAcronym","getClosenessRanking","string","acronym","wordsInString","split","forEach","wordInString","splitByHyphenWords","splitByHyphenWord","substr","matchingInOrderCharCount","charNumber","findMatchingCharacter","matchChar","index","j","J","stringChar","getRanking","spread","spreadPercentage","inOrderPercentage","ranking","firstIndex","I","found","compareItems","a","b","_ref","keepDiacritics","getItemValues","accessor","accessorFn","Array","isArray","String","allValues","getAccessorAttributes","itemValues","push","defaultKeyAttributes","Infinity","_jsx","_jsx","_jsx","_jsx","_jsx","_jsx","_jsx","_jsx","_jsx","_jsx","_jsx","_jsx","_jsx","_jsx","_jsx","_jsx","_jsx","_jsx","_jsx","_jsx","_jsx","_jsx","_jsx","_jsx","_jsx","_jsx","_jsx","_jsx","memo","_a","opts","memo","_a","count","min","instance","text","import_prop_types","React","import_prop_types","React","React","_jsx","TimeField","PropTypes","React","import_prop_types","_jsx","_excluded","PropTypes","_a","DesktopTimePicker","_a","PropTypes","import_prop_types","React","MobileTimePicker","_a","PropTypes","_jsx","_excluded","TimePicker","PropTypes","aggregationFns","filterFns","sortingFns","_a","useMemo","createRow","_createRow","fuzzy","_a","cell","equals","_a","_b","_jsx","_jsxs","_Fragment","useMemo","useState","theme","aggregationFns","filterFns","sortingFns","useReducer","useEffect","_c","_d","createRow","text","value","memo","isRowSelected","filterOption","filterValue","_f","min","max","draggingBorders","getCoreRowModel","Fragment","useIsomorphicLayoutEffect","useLayoutEffect","column","e","jsx","useEffect","useState","jsx","jsxs","dayjs","useState","useEffect","jsx","jsxs","C","FONT","dayjs","count","useState","_a","_b","useCallback","useEffect","useMemo"]}