{"version":3,"file":"static/js/2577_274062e264637c86d58d.js","mappings":"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","sources":["file:////home/runner/work/platform/platform/common/temp/node_modules/.pnpm/@mui+x-data-grid@6.11.2_qchtxliwazkzklksn27jn4dp6y/node_modules/@mui/x-data-grid/hooks/features/headerFiltering/gridHeaderFilteringSelectors.js","file:////home/runner/work/platform/platform/common/temp/node_modules/.pnpm/@mui+x-data-grid@6.11.2_qchtxliwazkzklksn27jn4dp6y/node_modules/@mui/x-data-grid/hooks/features/keyboardNavigation/useGridKeyboardNavigation.js","file:////home/runner/work/platform/platform/common/temp/node_modules/.pnpm/@mui+x-data-grid@6.11.2_qchtxliwazkzklksn27jn4dp6y/node_modules/@mui/x-data-grid/hooks/features/pagination/gridPaginationSelector.js","file:////home/runner/work/platform/platform/common/temp/node_modules/.pnpm/@mui+x-data-grid@6.11.2_qchtxliwazkzklksn27jn4dp6y/node_modules/@mui/x-data-grid/hooks/features/pagination/gridPaginationUtils.js","file:////home/runner/work/platform/platform/common/temp/node_modules/.pnpm/@mui+x-data-grid@6.11.2_qchtxliwazkzklksn27jn4dp6y/node_modules/@mui/x-data-grid/hooks/features/pagination/useGridPagination.js","file:////home/runner/work/platform/platform/common/temp/node_modules/.pnpm/@mui+x-data-grid@6.11.2_qchtxliwazkzklksn27jn4dp6y/node_modules/@mui/x-data-grid/hooks/features/preferencesPanel/gridPreferencePanelSelector.js","file:////home/runner/work/platform/platform/common/temp/node_modules/.pnpm/@mui+x-data-grid@6.11.2_qchtxliwazkzklksn27jn4dp6y/node_modules/@mui/x-data-grid/hooks/features/preferencesPanel/gridPreferencePanelsValue.js","file:////home/runner/work/platform/platform/common/temp/node_modules/.pnpm/@mui+x-data-grid@6.11.2_qchtxliwazkzklksn27jn4dp6y/node_modules/@mui/x-data-grid/hooks/features/preferencesPanel/useGridPreferencesPanel.js","file:////home/runner/work/platform/platform/common/temp/node_modules/.pnpm/@mui+x-data-grid@6.11.2_qchtxliwazkzklksn27jn4dp6y/node_modules/@mui/x-data-grid/hooks/features/rowSelection/gridRowSelectionSelector.js","file:////home/runner/work/platform/platform/common/temp/node_modules/.pnpm/@mui+x-data-grid@6.11.2_qchtxliwazkzklksn27jn4dp6y/node_modules/@mui/x-data-grid/hooks/features/rowSelection/useGridRowSelection.js","file:////home/runner/work/platform/platform/common/temp/node_modules/.pnpm/@mui+x-data-grid@6.11.2_qchtxliwazkzklksn27jn4dp6y/node_modules/@mui/x-data-grid/hooks/features/rowSelection/useGridRowSelectionPreProcessors.js","file:////home/runner/work/platform/platform/common/temp/node_modules/.pnpm/@mui+x-data-grid@6.11.2_qchtxliwazkzklksn27jn4dp6y/node_modules/@mui/x-data-grid/hooks/features/rows/gridRowsMetaSelector.js","file:////home/runner/work/platform/platform/common/temp/node_modules/.pnpm/@mui+x-data-grid@6.11.2_qchtxliwazkzklksn27jn4dp6y/node_modules/@mui/x-data-grid/hooks/features/rows/gridRowsSelector.js","file:////home/runner/work/platform/platform/common/temp/node_modules/.pnpm/@mui+x-data-grid@6.11.2_qchtxliwazkzklksn27jn4dp6y/node_modules/@mui/x-data-grid/hooks/features/rows/gridRowsUtils.js","file:////home/runner/work/platform/platform/common/temp/node_modules/.pnpm/@mui+x-data-grid@6.11.2_qchtxliwazkzklksn27jn4dp6y/node_modules/@mui/x-data-grid/hooks/features/rows/useGridParamsApi.js","file:////home/runner/work/platform/platform/common/temp/node_modules/.pnpm/@mui+x-data-grid@6.11.2_qchtxliwazkzklksn27jn4dp6y/node_modules/@mui/x-data-grid/hooks/features/rows/useGridRows.js","file:////home/runner/work/platform/platform/common/temp/node_modules/.pnpm/@mui+x-data-grid@6.11.2_qchtxliwazkzklksn27jn4dp6y/node_modules/@mui/x-data-grid/hooks/features/rows/useGridRowsMeta.js","file:////home/runner/work/platform/platform/common/temp/node_modules/.pnpm/@mui+x-data-grid@6.11.2_qchtxliwazkzklksn27jn4dp6y/node_modules/@mui/x-data-grid/hooks/features/rows/useGridRowsPreProcessors.js","file:////home/runner/work/platform/platform/common/temp/node_modules/.pnpm/@mui+x-data-grid@6.11.2_qchtxliwazkzklksn27jn4dp6y/node_modules/@mui/x-data-grid/hooks/features/scroll/useGridScroll.js","file:////home/runner/work/platform/platform/common/temp/node_modules/.pnpm/@mui+x-data-grid@6.11.2_qchtxliwazkzklksn27jn4dp6y/node_modules/@mui/x-data-grid/hooks/features/sorting/gridSortingSelector.js","file:////home/runner/work/platform/platform/common/temp/node_modules/.pnpm/@mui+x-data-grid@6.11.2_qchtxliwazkzklksn27jn4dp6y/node_modules/@mui/x-data-grid/hooks/features/sorting/gridSortingUtils.js","file:////home/runner/work/platform/platform/common/temp/node_modules/.pnpm/@mui+x-data-grid@6.11.2_qchtxliwazkzklksn27jn4dp6y/node_modules/@mui/x-data-grid/hooks/features/sorting/useGridSorting.js","file:////home/runner/work/platform/platform/common/temp/node_modules/.pnpm/@mui+x-data-grid@6.11.2_qchtxliwazkzklksn27jn4dp6y/node_modules/@mui/x-data-grid/hooks/features/statePersistence/useGridStatePersistence.js","file:////home/runner/work/platform/platform/common/temp/node_modules/.pnpm/@mui+x-data-grid@6.11.2_qchtxliwazkzklksn27jn4dp6y/node_modules/@mui/x-data-grid/hooks/features/virtualization/useGridVirtualScroller.js"],"sourcesContent":["/* eslint-disable @typescript-eslint/naming-convention */\nimport { createSelector } from '../../../utils/createSelector';\nexport const unstable_gridHeaderFilteringStateSelector = state => state.headerFiltering;\nexport const unstable_gridHeaderFilteringEditFieldSelector = createSelector(unstable_gridHeaderFilteringStateSelector, headerFilteringState => headerFilteringState.editing);\nexport const unstable_gridHeaderFilteringMenuSelector = createSelector(unstable_gridHeaderFilteringStateSelector, headerFilteringState => headerFilteringState.menuOpen);","import * as React from 'react';\nimport { useTheme } from '@mui/material/styles';\nimport { gridVisibleColumnDefinitionsSelector } from '../columns/gridColumnsSelector';\nimport { useGridLogger } from '../../utils/useGridLogger';\nimport { useGridApiEventHandler } from '../../utils/useGridApiEventHandler';\nimport { gridExpandedSortedRowEntriesSelector } from '../filter/gridFilterSelector';\nimport { useGridVisibleRows } from '../../utils/useGridVisibleRows';\nimport { GRID_CHECKBOX_SELECTION_COL_DEF } from '../../../colDef/gridCheckboxSelectionColDef';\nimport { gridClasses } from '../../../constants/gridClasses';\nimport { GridCellModes } from '../../../models/gridEditRowModel';\nimport { isNavigationKey } from '../../../utils/keyboardUtils';\nimport { GRID_DETAIL_PANEL_TOGGLE_FIELD } from '../../../constants/gridDetailPanelToggleField';\nimport { gridPinnedRowsSelector } from '../rows/gridRowsSelector';\nimport { unstable_gridFocusColumnGroupHeaderSelector } from '../focus';\nimport { gridColumnGroupsHeaderMaxDepthSelector } from '../columnGrouping/gridColumnGroupsSelector';\nimport { unstable_gridHeaderFilteringEditFieldSelector, unstable_gridHeaderFilteringMenuSelector } from '../headerFiltering/gridHeaderFilteringSelectors';\nimport { useGridRegisterPipeProcessor } from '../../core/pipeProcessing';\nfunction enrichPageRowsWithPinnedRows(apiRef, rows) {\n const pinnedRows = gridPinnedRowsSelector(apiRef) || {};\n return [...(pinnedRows.top || []), ...rows, ...(pinnedRows.bottom || [])];\n}\nconst getLeftColumnIndex = ({\n currentColIndex,\n firstColIndex,\n lastColIndex,\n direction\n}) => {\n if (direction === 'rtl') {\n if (currentColIndex < lastColIndex) {\n return currentColIndex + 1;\n }\n } else if (direction === 'ltr') {\n if (currentColIndex > firstColIndex) {\n return currentColIndex - 1;\n }\n }\n return null;\n};\nconst getRightColumnIndex = ({\n currentColIndex,\n firstColIndex,\n lastColIndex,\n direction\n}) => {\n if (direction === 'rtl') {\n if (currentColIndex > firstColIndex) {\n return currentColIndex - 1;\n }\n } else if (direction === 'ltr') {\n if (currentColIndex < lastColIndex) {\n return currentColIndex + 1;\n }\n }\n return null;\n};\n\n/**\n * @requires useGridSorting (method) - can be after\n * @requires useGridFilter (state) - can be after\n * @requires useGridColumns (state, method) - can be after\n * @requires useGridDimensions (method) - can be after\n * @requires useGridFocus (method) - can be after\n * @requires useGridScroll (method) - can be after\n * @requires useGridColumnSpanning (method) - can be after\n */\nexport const useGridKeyboardNavigation = (apiRef, props) => {\n const logger = useGridLogger(apiRef, 'useGridKeyboardNavigation');\n const initialCurrentPageRows = useGridVisibleRows(apiRef, props).rows;\n const theme = useTheme();\n const currentPageRows = React.useMemo(() => enrichPageRowsWithPinnedRows(apiRef, initialCurrentPageRows), [apiRef, initialCurrentPageRows]);\n const headerFilteringEnabled =\n // @ts-expect-error // TODO move relevant code to the `DataGridPro`\n props.signature !== 'DataGrid' && props.unstable_headerFilters;\n\n /**\n * @param {number} colIndex Index of the column to focus\n * @param {number} rowIndex index of the row to focus\n * @param {string} closestColumnToUse Which closest column cell to use when the cell is spanned by `colSpan`.\n * TODO replace with apiRef.current.moveFocusToRelativeCell()\n */\n const goToCell = React.useCallback((colIndex, rowId, closestColumnToUse = 'left') => {\n const visibleSortedRows = gridExpandedSortedRowEntriesSelector(apiRef);\n const nextCellColSpanInfo = apiRef.current.unstable_getCellColSpanInfo(rowId, colIndex);\n if (nextCellColSpanInfo && nextCellColSpanInfo.spannedByColSpan) {\n if (closestColumnToUse === 'left') {\n colIndex = nextCellColSpanInfo.leftVisibleCellIndex;\n } else if (closestColumnToUse === 'right') {\n colIndex = nextCellColSpanInfo.rightVisibleCellIndex;\n }\n }\n // `scrollToIndexes` requires a rowIndex relative to all visible rows.\n // Those rows do not include pinned rows, but pinned rows do not need scroll anyway.\n const rowIndexRelativeToAllRows = visibleSortedRows.findIndex(row => row.id === rowId);\n logger.debug(`Navigating to cell row ${rowIndexRelativeToAllRows}, col ${colIndex}`);\n apiRef.current.scrollToIndexes({\n colIndex,\n rowIndex: rowIndexRelativeToAllRows\n });\n const field = apiRef.current.getVisibleColumns()[colIndex].field;\n apiRef.current.setCellFocus(rowId, field);\n }, [apiRef, logger]);\n const goToHeader = React.useCallback((colIndex, event) => {\n logger.debug(`Navigating to header col ${colIndex}`);\n apiRef.current.scrollToIndexes({\n colIndex\n });\n const field = apiRef.current.getVisibleColumns()[colIndex].field;\n apiRef.current.setColumnHeaderFocus(field, event);\n }, [apiRef, logger]);\n const goToHeaderFilter = React.useCallback((colIndex, event) => {\n logger.debug(`Navigating to header filter col ${colIndex}`);\n apiRef.current.scrollToIndexes({\n colIndex\n });\n const field = apiRef.current.getVisibleColumns()[colIndex].field;\n apiRef.current.setColumnHeaderFilterFocus(field, event);\n }, [apiRef, logger]);\n const goToGroupHeader = React.useCallback((colIndex, depth, event) => {\n logger.debug(`Navigating to header col ${colIndex}`);\n apiRef.current.scrollToIndexes({\n colIndex\n });\n const {\n field\n } = apiRef.current.getVisibleColumns()[colIndex];\n apiRef.current.setColumnGroupHeaderFocus(field, depth, event);\n }, [apiRef, logger]);\n const getRowIdFromIndex = React.useCallback(rowIndex => {\n return currentPageRows == null ? void 0 : currentPageRows[rowIndex].id;\n }, [currentPageRows]);\n const handleColumnHeaderKeyDown = React.useCallback((params, event) => {\n const headerTitleNode = event.currentTarget.querySelector(`.${gridClasses.columnHeaderTitleContainerContent}`);\n const isFromInsideContent = !!headerTitleNode && headerTitleNode.contains(event.target);\n if (isFromInsideContent && params.field !== GRID_CHECKBOX_SELECTION_COL_DEF.field) {\n // When focus is on a nested input, keyboard events have no effect to avoid conflicts with native events.\n // There is one exception for the checkBoxHeader\n return;\n }\n const dimensions = apiRef.current.getRootDimensions();\n if (!dimensions) {\n return;\n }\n const viewportPageSize = apiRef.current.getViewportPageSize();\n const colIndexBefore = params.field ? apiRef.current.getColumnIndex(params.field) : 0;\n const firstRowIndexInPage = 0;\n const lastRowIndexInPage = currentPageRows.length - 1;\n const firstColIndex = 0;\n const lastColIndex = gridVisibleColumnDefinitionsSelector(apiRef).length - 1;\n const columnGroupMaxDepth = gridColumnGroupsHeaderMaxDepthSelector(apiRef);\n let shouldPreventDefault = true;\n switch (event.key) {\n case 'ArrowDown':\n {\n if (firstRowIndexInPage !== null) {\n if (headerFilteringEnabled) {\n goToHeaderFilter(colIndexBefore, event);\n } else {\n goToCell(colIndexBefore, getRowIdFromIndex(firstRowIndexInPage));\n }\n }\n break;\n }\n case 'ArrowRight':\n {\n const rightColIndex = getRightColumnIndex({\n currentColIndex: colIndexBefore,\n firstColIndex,\n lastColIndex,\n direction: theme.direction\n });\n if (rightColIndex !== null) {\n goToHeader(rightColIndex, event);\n }\n break;\n }\n case 'ArrowLeft':\n {\n const leftColIndex = getLeftColumnIndex({\n currentColIndex: colIndexBefore,\n firstColIndex,\n lastColIndex,\n direction: theme.direction\n });\n if (leftColIndex !== null) {\n goToHeader(leftColIndex, event);\n }\n break;\n }\n case 'ArrowUp':\n {\n if (columnGroupMaxDepth > 0) {\n goToGroupHeader(colIndexBefore, columnGroupMaxDepth - 1, event);\n }\n break;\n }\n case 'PageDown':\n {\n if (firstRowIndexInPage !== null && lastRowIndexInPage !== null) {\n goToCell(colIndexBefore, getRowIdFromIndex(Math.min(firstRowIndexInPage + viewportPageSize, lastRowIndexInPage)));\n }\n break;\n }\n case 'Home':\n {\n goToHeader(firstColIndex, event);\n break;\n }\n case 'End':\n {\n goToHeader(lastColIndex, event);\n break;\n }\n case 'Enter':\n {\n if (event.ctrlKey || event.metaKey) {\n apiRef.current.toggleColumnMenu(params.field);\n }\n break;\n }\n case ' ':\n {\n // prevent Space event from scrolling\n break;\n }\n default:\n {\n shouldPreventDefault = false;\n }\n }\n if (shouldPreventDefault) {\n event.preventDefault();\n }\n }, [apiRef, currentPageRows.length, headerFilteringEnabled, goToHeaderFilter, goToCell, getRowIdFromIndex, theme.direction, goToHeader, goToGroupHeader]);\n const handleHeaderFilterKeyDown = React.useCallback((params, event) => {\n const dimensions = apiRef.current.getRootDimensions();\n if (!dimensions) {\n return;\n }\n const isEditing = unstable_gridHeaderFilteringEditFieldSelector(apiRef) === params.field;\n const isHeaderMenuOpen = unstable_gridHeaderFilteringMenuSelector(apiRef) === params.field;\n if (isEditing || isHeaderMenuOpen || !isNavigationKey(event.key)) {\n return;\n }\n const viewportPageSize = apiRef.current.getViewportPageSize();\n const colIndexBefore = params.field ? apiRef.current.getColumnIndex(params.field) : 0;\n const firstRowIndexInPage = 0;\n const lastRowIndexInPage = currentPageRows.length - 1;\n const firstColIndex = 0;\n const lastColIndex = gridVisibleColumnDefinitionsSelector(apiRef).length - 1;\n let shouldPreventDefault = true;\n switch (event.key) {\n case 'ArrowDown':\n {\n const rowId = getRowIdFromIndex(firstRowIndexInPage);\n if (firstRowIndexInPage !== null && rowId != null) {\n goToCell(colIndexBefore, rowId);\n }\n break;\n }\n case 'ArrowRight':\n {\n const rightColIndex = getRightColumnIndex({\n currentColIndex: colIndexBefore,\n firstColIndex,\n lastColIndex,\n direction: theme.direction\n });\n if (rightColIndex !== null) {\n goToHeaderFilter(rightColIndex, event);\n }\n break;\n }\n case 'ArrowLeft':\n {\n const leftColIndex = getLeftColumnIndex({\n currentColIndex: colIndexBefore,\n firstColIndex,\n lastColIndex,\n direction: theme.direction\n });\n if (leftColIndex !== null) {\n goToHeaderFilter(leftColIndex, event);\n } else {\n apiRef.current.setColumnHeaderFilterFocus(params.field, event);\n }\n break;\n }\n case 'ArrowUp':\n {\n goToHeader(colIndexBefore, event);\n break;\n }\n case 'PageDown':\n {\n if (firstRowIndexInPage !== null && lastRowIndexInPage !== null) {\n goToCell(colIndexBefore, getRowIdFromIndex(Math.min(firstRowIndexInPage + viewportPageSize, lastRowIndexInPage)));\n }\n break;\n }\n case 'Home':\n {\n goToHeaderFilter(firstColIndex, event);\n break;\n }\n case 'End':\n {\n goToHeaderFilter(lastColIndex, event);\n break;\n }\n case ' ':\n {\n // prevent Space event from scrolling\n break;\n }\n default:\n {\n shouldPreventDefault = false;\n }\n }\n if (shouldPreventDefault) {\n event.preventDefault();\n }\n }, [apiRef, currentPageRows.length, goToHeaderFilter, theme.direction, goToHeader, goToCell, getRowIdFromIndex]);\n const handleColumnGroupHeaderKeyDown = React.useCallback((params, event) => {\n const dimensions = apiRef.current.getRootDimensions();\n if (!dimensions) {\n return;\n }\n const focusedColumnGroup = unstable_gridFocusColumnGroupHeaderSelector(apiRef);\n if (focusedColumnGroup === null) {\n return;\n }\n const {\n field: currentField,\n depth: currentDepth\n } = focusedColumnGroup;\n const {\n fields,\n depth,\n maxDepth\n } = params;\n const viewportPageSize = apiRef.current.getViewportPageSize();\n const currentColIndex = apiRef.current.getColumnIndex(currentField);\n const colIndexBefore = currentField ? apiRef.current.getColumnIndex(currentField) : 0;\n const firstRowIndexInPage = 0;\n const lastRowIndexInPage = currentPageRows.length - 1;\n const firstColIndex = 0;\n const lastColIndex = gridVisibleColumnDefinitionsSelector(apiRef).length - 1;\n let shouldPreventDefault = true;\n switch (event.key) {\n case 'ArrowDown':\n {\n if (depth === maxDepth - 1) {\n goToHeader(currentColIndex, event);\n } else {\n goToGroupHeader(currentColIndex, currentDepth + 1, event);\n }\n break;\n }\n case 'ArrowUp':\n {\n if (depth > 0) {\n goToGroupHeader(currentColIndex, currentDepth - 1, event);\n }\n break;\n }\n case 'ArrowRight':\n {\n const remainingRightColumns = fields.length - fields.indexOf(currentField) - 1;\n if (currentColIndex + remainingRightColumns + 1 <= lastColIndex) {\n goToGroupHeader(currentColIndex + remainingRightColumns + 1, currentDepth, event);\n }\n break;\n }\n case 'ArrowLeft':\n {\n const remainingLeftColumns = fields.indexOf(currentField);\n if (currentColIndex - remainingLeftColumns - 1 >= firstColIndex) {\n goToGroupHeader(currentColIndex - remainingLeftColumns - 1, currentDepth, event);\n }\n break;\n }\n case 'PageDown':\n {\n if (firstRowIndexInPage !== null && lastRowIndexInPage !== null) {\n goToCell(colIndexBefore, getRowIdFromIndex(Math.min(firstRowIndexInPage + viewportPageSize, lastRowIndexInPage)));\n }\n break;\n }\n case 'Home':\n {\n goToGroupHeader(firstColIndex, currentDepth, event);\n break;\n }\n case 'End':\n {\n goToGroupHeader(lastColIndex, currentDepth, event);\n break;\n }\n case ' ':\n {\n // prevent Space event from scrolling\n break;\n }\n default:\n {\n shouldPreventDefault = false;\n }\n }\n if (shouldPreventDefault) {\n event.preventDefault();\n }\n }, [apiRef, currentPageRows.length, goToHeader, goToGroupHeader, goToCell, getRowIdFromIndex]);\n const handleCellKeyDown = React.useCallback((params, event) => {\n // Ignore portal\n if (!event.currentTarget.contains(event.target)) {\n return;\n }\n\n // Get the most recent params because the cell mode may have changed by another listener\n const cellParams = apiRef.current.getCellParams(params.id, params.field);\n if (cellParams.cellMode === GridCellModes.Edit || !isNavigationKey(event.key)) {\n return;\n }\n const canUpdateFocus = apiRef.current.unstable_applyPipeProcessors('canUpdateFocus', true, {\n event,\n cell: cellParams\n });\n if (!canUpdateFocus) {\n return;\n }\n const dimensions = apiRef.current.getRootDimensions();\n if (currentPageRows.length === 0 || !dimensions) {\n return;\n }\n const direction = theme.direction;\n const viewportPageSize = apiRef.current.getViewportPageSize();\n const colIndexBefore = params.field ? apiRef.current.getColumnIndex(params.field) : 0;\n const rowIndexBefore = currentPageRows.findIndex(row => row.id === params.id);\n const firstRowIndexInPage = 0;\n const lastRowIndexInPage = currentPageRows.length - 1;\n const firstColIndex = 0;\n const lastColIndex = gridVisibleColumnDefinitionsSelector(apiRef).length - 1;\n let shouldPreventDefault = true;\n switch (event.key) {\n case 'ArrowDown':\n {\n // \"Enter\" is only triggered by the row / cell editing feature\n if (rowIndexBefore < lastRowIndexInPage) {\n goToCell(colIndexBefore, getRowIdFromIndex(rowIndexBefore + 1));\n }\n break;\n }\n case 'ArrowUp':\n {\n if (rowIndexBefore > firstRowIndexInPage) {\n goToCell(colIndexBefore, getRowIdFromIndex(rowIndexBefore - 1));\n } else if (headerFilteringEnabled) {\n goToHeaderFilter(colIndexBefore, event);\n } else {\n goToHeader(colIndexBefore, event);\n }\n break;\n }\n case 'ArrowRight':\n {\n const rightColIndex = getRightColumnIndex({\n currentColIndex: colIndexBefore,\n firstColIndex,\n lastColIndex,\n direction\n });\n if (rightColIndex !== null) {\n goToCell(rightColIndex, getRowIdFromIndex(rowIndexBefore), direction === 'rtl' ? 'left' : 'right');\n }\n break;\n }\n case 'ArrowLeft':\n {\n const leftColIndex = getLeftColumnIndex({\n currentColIndex: colIndexBefore,\n firstColIndex,\n lastColIndex,\n direction\n });\n if (leftColIndex !== null) {\n goToCell(leftColIndex, getRowIdFromIndex(rowIndexBefore), direction === 'rtl' ? 'right' : 'left');\n }\n break;\n }\n case 'Tab':\n {\n // \"Tab\" is only triggered by the row / cell editing feature\n if (event.shiftKey && colIndexBefore > firstColIndex) {\n goToCell(colIndexBefore - 1, getRowIdFromIndex(rowIndexBefore), 'left');\n } else if (!event.shiftKey && colIndexBefore < lastColIndex) {\n goToCell(colIndexBefore + 1, getRowIdFromIndex(rowIndexBefore), 'right');\n }\n break;\n }\n case ' ':\n {\n const field = params.field;\n if (field === GRID_DETAIL_PANEL_TOGGLE_FIELD) {\n break;\n }\n const colDef = params.colDef;\n if (colDef && colDef.type === 'treeDataGroup') {\n break;\n }\n if (!event.shiftKey && rowIndexBefore < lastRowIndexInPage) {\n goToCell(colIndexBefore, getRowIdFromIndex(Math.min(rowIndexBefore + viewportPageSize, lastRowIndexInPage)));\n }\n break;\n }\n case 'PageDown':\n {\n if (rowIndexBefore < lastRowIndexInPage) {\n goToCell(colIndexBefore, getRowIdFromIndex(Math.min(rowIndexBefore + viewportPageSize, lastRowIndexInPage)));\n }\n break;\n }\n case 'PageUp':\n {\n // Go to the first row before going to header\n const nextRowIndex = Math.max(rowIndexBefore - viewportPageSize, firstRowIndexInPage);\n if (nextRowIndex !== rowIndexBefore && nextRowIndex >= firstRowIndexInPage) {\n goToCell(colIndexBefore, getRowIdFromIndex(nextRowIndex));\n } else {\n goToHeader(colIndexBefore, event);\n }\n break;\n }\n case 'Home':\n {\n if (event.ctrlKey || event.metaKey || event.shiftKey) {\n goToCell(firstColIndex, getRowIdFromIndex(firstRowIndexInPage));\n } else {\n goToCell(firstColIndex, getRowIdFromIndex(rowIndexBefore));\n }\n break;\n }\n case 'End':\n {\n if (event.ctrlKey || event.metaKey || event.shiftKey) {\n goToCell(lastColIndex, getRowIdFromIndex(lastRowIndexInPage));\n } else {\n goToCell(lastColIndex, getRowIdFromIndex(rowIndexBefore));\n }\n break;\n }\n default:\n {\n shouldPreventDefault = false;\n }\n }\n if (shouldPreventDefault) {\n event.preventDefault();\n }\n }, [apiRef, currentPageRows, theme.direction, goToCell, getRowIdFromIndex, headerFilteringEnabled, goToHeaderFilter, goToHeader]);\n const checkIfCanStartEditing = React.useCallback((initialValue, {\n event\n }) => {\n if (event.key === ' ') {\n // Space scrolls to the last row\n return false;\n }\n return initialValue;\n }, []);\n useGridRegisterPipeProcessor(apiRef, 'canStartEditing', checkIfCanStartEditing);\n useGridApiEventHandler(apiRef, 'columnHeaderKeyDown', handleColumnHeaderKeyDown);\n useGridApiEventHandler(apiRef, 'headerFilterKeyDown', handleHeaderFilterKeyDown);\n useGridApiEventHandler(apiRef, 'columnGroupHeaderKeyDown', handleColumnGroupHeaderKeyDown);\n useGridApiEventHandler(apiRef, 'cellKeyDown', handleCellKeyDown);\n};","import { createSelector, createSelectorMemoized } from '../../../utils/createSelector';\nimport { gridFilteredTopLevelRowCountSelector, gridExpandedSortedRowEntriesSelector, gridExpandedSortedRowIdsSelector, gridFilteredSortedTopLevelRowEntriesSelector } from '../filter/gridFilterSelector';\nimport { gridRowMaximumTreeDepthSelector, gridRowTreeSelector } from '../rows/gridRowsSelector';\nimport { getPageCount } from './gridPaginationUtils';\n\n/**\n * @category Pagination\n * @ignore - do not document.\n */\nexport const gridPaginationSelector = state => state.pagination;\n\n/**\n * Get the pagination model\n * @category Pagination\n */\nexport const gridPaginationModelSelector = createSelector(gridPaginationSelector, pagination => pagination.paginationModel);\n\n/**\n * Get the index of the page to render if the pagination is enabled\n * @category Pagination\n */\nexport const gridPageSelector = createSelector(gridPaginationModelSelector, paginationModel => paginationModel.page);\n\n/**\n * Get the maximum amount of rows to display on a single page if the pagination is enabled\n * @category Pagination\n */\nexport const gridPageSizeSelector = createSelector(gridPaginationModelSelector, paginationModel => paginationModel.pageSize);\n\n/**\n * Get the amount of pages needed to display all the rows if the pagination is enabled\n * @category Pagination\n */\nexport const gridPageCountSelector = createSelector(gridPaginationModelSelector, gridFilteredTopLevelRowCountSelector, (paginationModel, visibleTopLevelRowCount) => getPageCount(visibleTopLevelRowCount, paginationModel.pageSize));\n\n/**\n * Get the index of the first and the last row to include in the current page if the pagination is enabled.\n * @category Pagination\n */\nexport const gridPaginationRowRangeSelector = createSelectorMemoized(gridPaginationModelSelector, gridRowTreeSelector, gridRowMaximumTreeDepthSelector, gridExpandedSortedRowEntriesSelector, gridFilteredSortedTopLevelRowEntriesSelector, (paginationModel, rowTree, rowTreeDepth, visibleSortedRowEntries, visibleSortedTopLevelRowEntries) => {\n const visibleTopLevelRowCount = visibleSortedTopLevelRowEntries.length;\n const topLevelFirstRowIndex = Math.min(paginationModel.pageSize * paginationModel.page, visibleTopLevelRowCount - 1);\n const topLevelLastRowIndex = Math.min(topLevelFirstRowIndex + paginationModel.pageSize - 1, visibleTopLevelRowCount - 1);\n\n // The range contains no element\n if (topLevelFirstRowIndex === -1 || topLevelLastRowIndex === -1) {\n return null;\n }\n\n // The tree is flat, there is no need to look for children\n if (rowTreeDepth < 2) {\n return {\n firstRowIndex: topLevelFirstRowIndex,\n lastRowIndex: topLevelLastRowIndex\n };\n }\n const topLevelFirstRow = visibleSortedTopLevelRowEntries[topLevelFirstRowIndex];\n const topLevelRowsInCurrentPageCount = topLevelLastRowIndex - topLevelFirstRowIndex + 1;\n const firstRowIndex = visibleSortedRowEntries.findIndex(row => row.id === topLevelFirstRow.id);\n let lastRowIndex = firstRowIndex;\n let topLevelRowAdded = 0;\n while (lastRowIndex < visibleSortedRowEntries.length && topLevelRowAdded <= topLevelRowsInCurrentPageCount) {\n var _rowTree$row$id;\n const row = visibleSortedRowEntries[lastRowIndex];\n const depth = (_rowTree$row$id = rowTree[row.id]) == null ? void 0 : _rowTree$row$id.depth;\n if (depth === undefined) {\n lastRowIndex += 1;\n } else {\n if (topLevelRowAdded < topLevelRowsInCurrentPageCount || depth > 0) {\n lastRowIndex += 1;\n }\n if (depth === 0) {\n topLevelRowAdded += 1;\n }\n }\n }\n return {\n firstRowIndex,\n lastRowIndex: lastRowIndex - 1\n };\n});\n\n/**\n * Get the id and the model of each row to include in the current page if the pagination is enabled.\n * @category Pagination\n */\nexport const gridPaginatedVisibleSortedGridRowEntriesSelector = createSelectorMemoized(gridExpandedSortedRowEntriesSelector, gridPaginationRowRangeSelector, (visibleSortedRowEntries, paginationRange) => {\n if (!paginationRange) {\n return [];\n }\n return visibleSortedRowEntries.slice(paginationRange.firstRowIndex, paginationRange.lastRowIndex + 1);\n});\n\n/**\n * Get the id of each row to include in the current page if the pagination is enabled.\n * @category Pagination\n */\nexport const gridPaginatedVisibleSortedGridRowIdsSelector = createSelectorMemoized(gridExpandedSortedRowIdsSelector, gridPaginationRowRangeSelector, (visibleSortedRowIds, paginationRange) => {\n if (!paginationRange) {\n return [];\n }\n return visibleSortedRowIds.slice(paginationRange.firstRowIndex, paginationRange.lastRowIndex + 1);\n});","import { buildWarning } from '../../../utils/warning';\nimport { GridSignature } from '../../utils';\nconst MAX_PAGE_SIZE = 100;\nexport const defaultPageSize = autoPageSize => autoPageSize ? 0 : 100;\nexport const getPageCount = (rowCount, pageSize) => {\n if (pageSize > 0 && rowCount > 0) {\n return Math.ceil(rowCount / pageSize);\n }\n return 0;\n};\nexport const noRowCountInServerMode = buildWarning([\"MUI: the 'rowCount' prop is undefined while using paginationMode='server'\", 'For more detail, see http://mui.com/components/data-grid/pagination/#basic-implementation'], 'error');\nexport const getDefaultGridPaginationModel = autoPageSize => ({\n page: 0,\n pageSize: autoPageSize ? 0 : 100\n});\nexport const getValidPage = (page, pageCount = 0) => {\n if (pageCount === 0) {\n return page;\n }\n return Math.max(Math.min(page, pageCount - 1), 0);\n};\nexport const throwIfPageSizeExceedsTheLimit = (pageSize, signatureProp) => {\n if (signatureProp === GridSignature.DataGrid && pageSize > MAX_PAGE_SIZE) {\n throw new Error(['MUI: `pageSize` cannot exceed 100 in the MIT version of the DataGrid.', 'You need to upgrade to DataGridPro or DataGridPremium component to unlock this feature.'].join('\\n'));\n }\n};","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport * as React from 'react';\nimport { gridFilteredTopLevelRowCountSelector } from '../filter';\nimport { gridDensityFactorSelector } from '../density';\nimport { useGridLogger, useGridSelector, useGridApiMethod, useGridApiEventHandler } from '../../utils';\nimport { useGridRegisterPipeProcessor } from '../../core/pipeProcessing';\nimport { gridPaginationModelSelector } from './gridPaginationSelector';\nimport { calculatePinnedRowsHeight } from '../rows/gridRowsUtils';\nimport { getPageCount, noRowCountInServerMode, defaultPageSize, throwIfPageSizeExceedsTheLimit, getDefaultGridPaginationModel, getValidPage } from './gridPaginationUtils';\nexport const paginationStateInitializer = (state, props) => {\n var _props$paginationMode, _props$initialState;\n const paginationModel = _extends({}, getDefaultGridPaginationModel(props.autoPageSize), (_props$paginationMode = props.paginationModel) != null ? _props$paginationMode : (_props$initialState = props.initialState) == null || (_props$initialState = _props$initialState.pagination) == null ? void 0 : _props$initialState.paginationModel);\n throwIfPageSizeExceedsTheLimit(paginationModel.pageSize, props.signature);\n return _extends({}, state, {\n pagination: {\n paginationModel\n }\n });\n};\nconst mergeStateWithPaginationModel = (rowCount, signature, paginationModelProp) => paginationState => {\n var _paginationModelProp$;\n let paginationModel = paginationState.paginationModel;\n const pageSize = (_paginationModelProp$ = paginationModelProp == null ? void 0 : paginationModelProp.pageSize) != null ? _paginationModelProp$ : paginationModel.pageSize;\n const pageCount = getPageCount(rowCount, pageSize);\n if (paginationModelProp && ((paginationModelProp == null ? void 0 : paginationModelProp.page) !== paginationModel.page || (paginationModelProp == null ? void 0 : paginationModelProp.pageSize) !== paginationModel.pageSize)) {\n paginationModel = paginationModelProp;\n }\n const validPage = getValidPage(paginationModel.page, pageCount);\n if (validPage !== paginationModel.page) {\n paginationModel = _extends({}, paginationModel, {\n page: validPage\n });\n }\n throwIfPageSizeExceedsTheLimit(paginationModel.pageSize, signature);\n return {\n paginationModel\n };\n};\n\n/**\n * @requires useGridFilter (state)\n * @requires useGridDimensions (event) - can be after\n */\nexport const useGridPagination = (apiRef, props) => {\n var _props$initialState3;\n const logger = useGridLogger(apiRef, 'useGridPagination');\n const visibleTopLevelRowCount = useGridSelector(apiRef, gridFilteredTopLevelRowCountSelector);\n const densityFactor = useGridSelector(apiRef, gridDensityFactorSelector);\n const rowHeight = Math.floor(props.rowHeight * densityFactor);\n apiRef.current.registerControlState({\n stateId: 'pagination',\n propModel: props.paginationModel,\n propOnChange: props.onPaginationModelChange,\n stateSelector: gridPaginationModelSelector,\n changeEvent: 'paginationModelChange'\n });\n\n /**\n * API METHODS\n */\n const setPage = React.useCallback(page => {\n const currentModel = gridPaginationModelSelector(apiRef);\n if (page === currentModel.page) {\n return;\n }\n logger.debug(`Setting page to ${page}`);\n apiRef.current.setPaginationModel({\n page,\n pageSize: currentModel.pageSize\n });\n }, [apiRef, logger]);\n const setPageSize = React.useCallback(pageSize => {\n const currentModel = gridPaginationModelSelector(apiRef);\n if (pageSize === currentModel.pageSize) {\n return;\n }\n logger.debug(`Setting page size to ${pageSize}`);\n apiRef.current.setPaginationModel({\n pageSize,\n page: currentModel.page\n });\n }, [apiRef, logger]);\n const setPaginationModel = React.useCallback(paginationModel => {\n var _props$rowCount;\n const currentModel = gridPaginationModelSelector(apiRef);\n if (paginationModel === currentModel) {\n return;\n }\n logger.debug(\"Setting 'paginationModel' to\", paginationModel);\n apiRef.current.updateControlState('pagination', mergeStateWithPaginationModel((_props$rowCount = props.rowCount) != null ? _props$rowCount : visibleTopLevelRowCount, props.signature, paginationModel), 'setPaginationModel');\n apiRef.current.forceUpdate();\n }, [apiRef, logger, props.rowCount, props.signature, visibleTopLevelRowCount]);\n const pageApi = {\n setPage,\n setPageSize,\n setPaginationModel\n };\n useGridApiMethod(apiRef, pageApi, 'public');\n\n /**\n * PRE-PROCESSING\n */\n const stateExportPreProcessing = React.useCallback((prevState, context) => {\n var _props$initialState2;\n const paginationModel = gridPaginationModelSelector(apiRef);\n const shouldExportPaginationModel =\n // Always export if the `exportOnlyDirtyModels` property is not activated\n !context.exportOnlyDirtyModels ||\n // Always export if the `paginationModel` is controlled\n props.paginationModel != null ||\n // Always export if the `paginationModel` has been initialized\n ((_props$initialState2 = props.initialState) == null || (_props$initialState2 = _props$initialState2.pagination) == null ? void 0 : _props$initialState2.paginationModel) != null ||\n // Export if `page` or `pageSize` is not equal to the default value\n paginationModel.page !== 0 && paginationModel.pageSize !== defaultPageSize(props.autoPageSize);\n if (!shouldExportPaginationModel) {\n return prevState;\n }\n return _extends({}, prevState, {\n pagination: _extends({}, prevState.pagination, {\n paginationModel\n })\n });\n }, [apiRef, props.paginationModel, (_props$initialState3 = props.initialState) == null || (_props$initialState3 = _props$initialState3.pagination) == null ? void 0 : _props$initialState3.paginationModel, props.autoPageSize]);\n const stateRestorePreProcessing = React.useCallback((params, context) => {\n var _context$stateToResto, _context$stateToResto2, _props$rowCount2;\n const paginationModel = (_context$stateToResto = context.stateToRestore.pagination) != null && _context$stateToResto.paginationModel ? _extends({}, getDefaultGridPaginationModel(props.autoPageSize), (_context$stateToResto2 = context.stateToRestore.pagination) == null ? void 0 : _context$stateToResto2.paginationModel) : gridPaginationModelSelector(apiRef);\n apiRef.current.updateControlState('pagination', mergeStateWithPaginationModel((_props$rowCount2 = props.rowCount) != null ? _props$rowCount2 : visibleTopLevelRowCount, props.signature, paginationModel), 'stateRestorePreProcessing');\n return params;\n }, [apiRef, props.autoPageSize, props.rowCount, props.signature, visibleTopLevelRowCount]);\n useGridRegisterPipeProcessor(apiRef, 'exportState', stateExportPreProcessing);\n useGridRegisterPipeProcessor(apiRef, 'restoreState', stateRestorePreProcessing);\n\n /**\n * EVENTS\n */\n const handlePaginationModelChange = () => {\n var _apiRef$current$virtu;\n const paginationModel = gridPaginationModelSelector(apiRef);\n if ((_apiRef$current$virtu = apiRef.current.virtualScrollerRef) != null && _apiRef$current$virtu.current) {\n apiRef.current.scrollToIndexes({\n rowIndex: paginationModel.page * paginationModel.pageSize\n });\n }\n apiRef.current.forceUpdate();\n };\n const handleUpdateAutoPageSize = React.useCallback(() => {\n const dimensions = apiRef.current.getRootDimensions();\n if (!props.autoPageSize || !dimensions) {\n return;\n }\n const pinnedRowsHeight = calculatePinnedRowsHeight(apiRef);\n const maximumPageSizeWithoutScrollBar = Math.floor((dimensions.viewportInnerSize.height - pinnedRowsHeight.top - pinnedRowsHeight.bottom) / rowHeight);\n apiRef.current.setPageSize(maximumPageSizeWithoutScrollBar);\n }, [apiRef, props.autoPageSize, rowHeight]);\n useGridApiEventHandler(apiRef, 'viewportInnerSizeChange', handleUpdateAutoPageSize);\n useGridApiEventHandler(apiRef, 'paginationModelChange', handlePaginationModelChange);\n\n /**\n * EFFECTS\n */\n React.useEffect(() => {\n if (process.env.NODE_ENV !== 'production') {\n if (props.paginationMode === 'server' && props.rowCount == null) {\n noRowCountInServerMode();\n }\n }\n }, [props.rowCount, props.paginationMode]);\n React.useEffect(() => {\n var _props$rowCount3;\n apiRef.current.updateControlState('pagination', mergeStateWithPaginationModel((_props$rowCount3 = props.rowCount) != null ? _props$rowCount3 : visibleTopLevelRowCount, props.signature, props.paginationModel));\n }, [apiRef, props.paginationModel, props.rowCount, props.paginationMode, visibleTopLevelRowCount, props.signature]);\n React.useEffect(() => {\n handleUpdateAutoPageSize();\n }, [handleUpdateAutoPageSize]);\n};","export const gridPreferencePanelStateSelector = state => state.preferencePanel;","var GridPreferencePanelsValue = /*#__PURE__*/function (GridPreferencePanelsValue) {\n GridPreferencePanelsValue[\"filters\"] = \"filters\";\n GridPreferencePanelsValue[\"columns\"] = \"columns\";\n return GridPreferencePanelsValue;\n}(GridPreferencePanelsValue || {});\nexport { GridPreferencePanelsValue };","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport * as React from 'react';\nimport { useGridApiMethod } from '../../utils/useGridApiMethod';\nimport { useGridLogger } from '../../utils/useGridLogger';\nimport { useGridRegisterPipeProcessor } from '../../core/pipeProcessing';\nimport { gridPreferencePanelStateSelector } from './gridPreferencePanelSelector';\nexport const preferencePanelStateInitializer = (state, props) => {\n var _props$initialState$p, _props$initialState;\n return _extends({}, state, {\n preferencePanel: (_props$initialState$p = (_props$initialState = props.initialState) == null ? void 0 : _props$initialState.preferencePanel) != null ? _props$initialState$p : {\n open: false\n }\n });\n};\n\n/**\n * TODO: Add a single `setPreferencePanel` method to avoid multiple `setState`\n */\nexport const useGridPreferencesPanel = (apiRef, props) => {\n var _props$initialState3;\n const logger = useGridLogger(apiRef, 'useGridPreferencesPanel');\n const hideTimeout = React.useRef();\n const immediateTimeout = React.useRef();\n\n /**\n * API METHODS\n */\n const hidePreferences = React.useCallback(() => {\n logger.debug('Hiding Preferences Panel');\n const preferencePanelState = gridPreferencePanelStateSelector(apiRef.current.state);\n if (preferencePanelState.openedPanelValue) {\n apiRef.current.publishEvent('preferencePanelClose', {\n openedPanelValue: preferencePanelState.openedPanelValue\n });\n }\n apiRef.current.setState(state => _extends({}, state, {\n preferencePanel: {\n open: false\n }\n }));\n apiRef.current.forceUpdate();\n }, [apiRef, logger]);\n\n // This is to prevent the preferences from closing when you open a select box or another panel,\n // The issue is in MUI core V4 => Fixed in V5\n const doNotHidePanel = React.useCallback(() => {\n immediateTimeout.current = setTimeout(() => clearTimeout(hideTimeout.current), 0);\n }, []);\n\n // This is a hack for the issue with Core V4, by delaying hiding the panel on the clickAwayListener,\n // we can cancel the action if the trigger element still need the panel...\n const hidePreferencesDelayed = React.useCallback(() => {\n hideTimeout.current = setTimeout(hidePreferences, 100);\n }, [hidePreferences]);\n const showPreferences = React.useCallback((newValue, panelId, labelId) => {\n logger.debug('Opening Preferences Panel');\n doNotHidePanel();\n apiRef.current.setState(state => _extends({}, state, {\n preferencePanel: _extends({}, state.preferencePanel, {\n open: true,\n openedPanelValue: newValue,\n panelId,\n labelId\n })\n }));\n apiRef.current.publishEvent('preferencePanelOpen', {\n openedPanelValue: newValue\n });\n apiRef.current.forceUpdate();\n }, [logger, doNotHidePanel, apiRef]);\n useGridApiMethod(apiRef, {\n showPreferences,\n hidePreferences: hidePreferencesDelayed\n }, 'public');\n\n /**\n * PRE-PROCESSING\n */\n const stateExportPreProcessing = React.useCallback((prevState, context) => {\n var _props$initialState2;\n const preferencePanelToExport = gridPreferencePanelStateSelector(apiRef.current.state);\n const shouldExportPreferencePanel =\n // Always export if the `exportOnlyDirtyModels` property is not activated\n !context.exportOnlyDirtyModels ||\n // Always export if the panel was initialized\n ((_props$initialState2 = props.initialState) == null ? void 0 : _props$initialState2.preferencePanel) != null ||\n // Always export if the panel is opened\n preferencePanelToExport.open;\n if (!shouldExportPreferencePanel) {\n return prevState;\n }\n return _extends({}, prevState, {\n preferencePanel: preferencePanelToExport\n });\n }, [apiRef, (_props$initialState3 = props.initialState) == null ? void 0 : _props$initialState3.preferencePanel]);\n const stateRestorePreProcessing = React.useCallback((params, context) => {\n const preferencePanel = context.stateToRestore.preferencePanel;\n if (preferencePanel != null) {\n apiRef.current.setState(state => _extends({}, state, {\n preferencePanel\n }));\n }\n return params;\n }, [apiRef]);\n useGridRegisterPipeProcessor(apiRef, 'exportState', stateExportPreProcessing);\n useGridRegisterPipeProcessor(apiRef, 'restoreState', stateRestorePreProcessing);\n\n /**\n * EFFECTS\n */\n React.useEffect(() => {\n return () => {\n clearTimeout(hideTimeout.current);\n clearTimeout(immediateTimeout.current);\n };\n }, []);\n};","import { createSelector, createSelectorMemoized } from '../../../utils/createSelector';\nimport { gridRowsLookupSelector } from '../rows/gridRowsSelector';\nexport const gridRowSelectionStateSelector = state => state.rowSelection;\nexport const selectedGridRowsCountSelector = createSelector(gridRowSelectionStateSelector, selection => selection.length);\nexport const selectedGridRowsSelector = createSelectorMemoized(gridRowSelectionStateSelector, gridRowsLookupSelector, (selectedRows, rowsLookup) => new Map(selectedRows.map(id => [id, rowsLookup[id]])));\nexport const selectedIdsLookupSelector = createSelectorMemoized(gridRowSelectionStateSelector, selection => selection.reduce((lookup, rowId) => {\n lookup[rowId] = rowId;\n return lookup;\n}, {}));","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport * as React from 'react';\nimport { GridSignature, useGridApiEventHandler } from '../../utils/useGridApiEventHandler';\nimport { useGridApiMethod } from '../../utils/useGridApiMethod';\nimport { useGridLogger } from '../../utils/useGridLogger';\nimport { gridRowsLookupSelector } from '../rows/gridRowsSelector';\nimport { gridRowSelectionStateSelector, selectedGridRowsSelector, selectedIdsLookupSelector } from './gridRowSelectionSelector';\nimport { gridPaginatedVisibleSortedGridRowIdsSelector } from '../pagination';\nimport { gridFocusCellSelector } from '../focus/gridFocusStateSelector';\nimport { gridExpandedSortedRowIdsSelector } from '../filter/gridFilterSelector';\nimport { GRID_CHECKBOX_SELECTION_COL_DEF, GRID_ACTIONS_COLUMN_TYPE } from '../../../colDef';\nimport { GridCellModes } from '../../../models/gridEditRowModel';\nimport { isKeyboardEvent, isNavigationKey } from '../../../utils/keyboardUtils';\nimport { useGridVisibleRows } from '../../utils/useGridVisibleRows';\nimport { GRID_DETAIL_PANEL_TOGGLE_FIELD } from '../../../constants/gridDetailPanelToggleField';\nimport { gridClasses } from '../../../constants/gridClasses';\nconst getSelectionModelPropValue = (selectionModelProp, prevSelectionModel) => {\n if (selectionModelProp == null) {\n return selectionModelProp;\n }\n if (Array.isArray(selectionModelProp)) {\n return selectionModelProp;\n }\n if (prevSelectionModel && prevSelectionModel[0] === selectionModelProp) {\n return prevSelectionModel;\n }\n return [selectionModelProp];\n};\nexport const rowSelectionStateInitializer = (state, props) => {\n var _getSelectionModelPro;\n return _extends({}, state, {\n rowSelection: props.rowSelection ? (_getSelectionModelPro = getSelectionModelPropValue(props.rowSelectionModel)) != null ? _getSelectionModelPro : [] : []\n });\n};\n\n/**\n * @requires useGridRows (state, method) - can be after\n * @requires useGridParamsApi (method) - can be after\n * @requires useGridFocus (state) - can be after\n * @requires useGridKeyboardNavigation (`cellKeyDown` event must first be consumed by it)\n */\nexport const useGridRowSelection = (apiRef, props) => {\n const logger = useGridLogger(apiRef, 'useGridSelection');\n const runIfRowSelectionIsEnabled = callback => (...args) => {\n if (props.rowSelection) {\n callback(...args);\n }\n };\n const propRowSelectionModel = React.useMemo(() => {\n return getSelectionModelPropValue(props.rowSelectionModel, gridRowSelectionStateSelector(apiRef.current.state));\n }, [apiRef, props.rowSelectionModel]);\n const lastRowToggled = React.useRef(null);\n apiRef.current.registerControlState({\n stateId: 'rowSelection',\n propModel: propRowSelectionModel,\n propOnChange: props.onRowSelectionModelChange,\n stateSelector: gridRowSelectionStateSelector,\n changeEvent: 'rowSelectionChange'\n });\n const {\n checkboxSelection,\n disableMultipleRowSelection,\n disableRowSelectionOnClick,\n isRowSelectable: propIsRowSelectable\n } = props;\n const canHaveMultipleSelection = !disableMultipleRowSelection || checkboxSelection;\n const visibleRows = useGridVisibleRows(apiRef, props);\n const expandMouseRowRangeSelection = React.useCallback(id => {\n var _lastRowToggled$curre;\n let endId = id;\n const startId = (_lastRowToggled$curre = lastRowToggled.current) != null ? _lastRowToggled$curre : id;\n const isSelected = apiRef.current.isRowSelected(id);\n if (isSelected) {\n const visibleRowIds = gridExpandedSortedRowIdsSelector(apiRef);\n const startIndex = visibleRowIds.findIndex(rowId => rowId === startId);\n const endIndex = visibleRowIds.findIndex(rowId => rowId === endId);\n if (startIndex === endIndex) {\n return;\n }\n if (startIndex > endIndex) {\n endId = visibleRowIds[endIndex + 1];\n } else {\n endId = visibleRowIds[endIndex - 1];\n }\n }\n lastRowToggled.current = id;\n apiRef.current.selectRowRange({\n startId,\n endId\n }, !isSelected);\n }, [apiRef]);\n\n /**\n * API METHODS\n */\n const setRowSelectionModel = React.useCallback(model => {\n if (props.signature === GridSignature.DataGrid && !props.checkboxSelection && Array.isArray(model) && model.length > 1) {\n throw new Error(['MUI: `rowSelectionModel` can only contain 1 item in DataGrid.', 'You need to upgrade to DataGridPro or DataGridPremium component to unlock multiple selection.'].join('\\n'));\n }\n const currentModel = gridRowSelectionStateSelector(apiRef.current.state);\n if (currentModel !== model) {\n logger.debug(`Setting selection model`);\n apiRef.current.setState(state => _extends({}, state, {\n rowSelection: props.rowSelection ? model : []\n }));\n apiRef.current.forceUpdate();\n }\n }, [apiRef, logger, props.rowSelection, props.signature, props.checkboxSelection]);\n const isRowSelected = React.useCallback(id => gridRowSelectionStateSelector(apiRef.current.state).includes(id), [apiRef]);\n const isRowSelectable = React.useCallback(id => {\n if (propIsRowSelectable && !propIsRowSelectable(apiRef.current.getRowParams(id))) {\n return false;\n }\n const rowNode = apiRef.current.getRowNode(id);\n if ((rowNode == null ? void 0 : rowNode.type) === 'footer' || (rowNode == null ? void 0 : rowNode.type) === 'pinnedRow') {\n return false;\n }\n return true;\n }, [apiRef, propIsRowSelectable]);\n const getSelectedRows = React.useCallback(() => selectedGridRowsSelector(apiRef), [apiRef]);\n const selectRow = React.useCallback((id, isSelected = true, resetSelection = false) => {\n if (!apiRef.current.isRowSelectable(id)) {\n return;\n }\n lastRowToggled.current = id;\n if (resetSelection) {\n logger.debug(`Setting selection for row ${id}`);\n apiRef.current.setRowSelectionModel(isSelected ? [id] : []);\n } else {\n logger.debug(`Toggling selection for row ${id}`);\n const selection = gridRowSelectionStateSelector(apiRef.current.state);\n const newSelection = selection.filter(el => el !== id);\n if (isSelected) {\n newSelection.push(id);\n }\n const isSelectionValid = newSelection.length < 2 || canHaveMultipleSelection;\n if (isSelectionValid) {\n apiRef.current.setRowSelectionModel(newSelection);\n }\n }\n }, [apiRef, logger, canHaveMultipleSelection]);\n const selectRows = React.useCallback((ids, isSelected = true, resetSelection = false) => {\n logger.debug(`Setting selection for several rows`);\n const selectableIds = ids.filter(id => apiRef.current.isRowSelectable(id));\n let newSelection;\n if (resetSelection) {\n newSelection = isSelected ? selectableIds : [];\n } else {\n // We clone the existing object to avoid mutating the same object returned by the selector to others part of the project\n const selectionLookup = _extends({}, selectedIdsLookupSelector(apiRef));\n selectableIds.forEach(id => {\n if (isSelected) {\n selectionLookup[id] = id;\n } else {\n delete selectionLookup[id];\n }\n });\n newSelection = Object.values(selectionLookup);\n }\n const isSelectionValid = newSelection.length < 2 || canHaveMultipleSelection;\n if (isSelectionValid) {\n apiRef.current.setRowSelectionModel(newSelection);\n }\n }, [apiRef, logger, canHaveMultipleSelection]);\n const selectRowRange = React.useCallback(({\n startId,\n endId\n }, isSelected = true, resetSelection = false) => {\n if (!apiRef.current.getRow(startId) || !apiRef.current.getRow(endId)) {\n return;\n }\n logger.debug(`Expanding selection from row ${startId} to row ${endId}`);\n\n // Using rows from all pages allow to select a range across several pages\n const allPagesRowIds = gridExpandedSortedRowIdsSelector(apiRef);\n const startIndex = allPagesRowIds.indexOf(startId);\n const endIndex = allPagesRowIds.indexOf(endId);\n const [start, end] = startIndex > endIndex ? [endIndex, startIndex] : [startIndex, endIndex];\n const rowsBetweenStartAndEnd = allPagesRowIds.slice(start, end + 1);\n apiRef.current.selectRows(rowsBetweenStartAndEnd, isSelected, resetSelection);\n }, [apiRef, logger]);\n const selectionPublicApi = {\n selectRow,\n setRowSelectionModel,\n getSelectedRows,\n isRowSelected,\n isRowSelectable\n };\n const selectionPrivateApi = {\n selectRows,\n selectRowRange\n };\n useGridApiMethod(apiRef, selectionPublicApi, 'public');\n useGridApiMethod(apiRef, selectionPrivateApi, props.signature === GridSignature.DataGrid ? 'private' : 'public');\n\n /**\n * EVENTS\n */\n const removeOutdatedSelection = React.useCallback(() => {\n if (props.keepNonExistentRowsSelected) {\n return;\n }\n const currentSelection = gridRowSelectionStateSelector(apiRef.current.state);\n const rowsLookup = gridRowsLookupSelector(apiRef);\n\n // We clone the existing object to avoid mutating the same object returned by the selector to others part of the project\n const selectionLookup = _extends({}, selectedIdsLookupSelector(apiRef));\n let hasChanged = false;\n currentSelection.forEach(id => {\n if (!rowsLookup[id]) {\n delete selectionLookup[id];\n hasChanged = true;\n }\n });\n if (hasChanged) {\n apiRef.current.setRowSelectionModel(Object.values(selectionLookup));\n }\n }, [apiRef, props.keepNonExistentRowsSelected]);\n const handleSingleRowSelection = React.useCallback((id, event) => {\n const hasCtrlKey = event.metaKey || event.ctrlKey;\n\n // multiple selection is only allowed if:\n // - it is a checkboxSelection\n // - it is a keyboard selection\n // - Ctrl is pressed\n\n const isMultipleSelectionDisabled = !checkboxSelection && !hasCtrlKey && !isKeyboardEvent(event);\n const resetSelection = !canHaveMultipleSelection || isMultipleSelectionDisabled;\n const isSelected = apiRef.current.isRowSelected(id);\n if (resetSelection) {\n apiRef.current.selectRow(id, !isMultipleSelectionDisabled ? !isSelected : true, true);\n } else {\n apiRef.current.selectRow(id, !isSelected, false);\n }\n }, [apiRef, canHaveMultipleSelection, checkboxSelection]);\n const handleRowClick = React.useCallback((params, event) => {\n var _closest;\n if (disableRowSelectionOnClick) {\n return;\n }\n const field = (_closest = event.target.closest(`.${gridClasses.cell}`)) == null ? void 0 : _closest.getAttribute('data-field');\n if (field === GRID_CHECKBOX_SELECTION_COL_DEF.field) {\n // click on checkbox should not trigger row selection\n return;\n }\n if (field === GRID_DETAIL_PANEL_TOGGLE_FIELD) {\n // click to open the detail panel should not select the row\n return;\n }\n if (field) {\n const column = apiRef.current.getColumn(field);\n if ((column == null ? void 0 : column.type) === GRID_ACTIONS_COLUMN_TYPE) {\n return;\n }\n }\n const rowNode = apiRef.current.getRowNode(params.id);\n if (rowNode.type === 'pinnedRow') {\n return;\n }\n if (event.shiftKey && (canHaveMultipleSelection || checkboxSelection)) {\n expandMouseRowRangeSelection(params.id);\n } else {\n handleSingleRowSelection(params.id, event);\n }\n }, [disableRowSelectionOnClick, canHaveMultipleSelection, checkboxSelection, apiRef, expandMouseRowRangeSelection, handleSingleRowSelection]);\n const preventSelectionOnShift = React.useCallback((params, event) => {\n if (canHaveMultipleSelection && event.shiftKey) {\n var _window$getSelection;\n (_window$getSelection = window.getSelection()) == null ? void 0 : _window$getSelection.removeAllRanges();\n }\n }, [canHaveMultipleSelection]);\n const handleRowSelectionCheckboxChange = React.useCallback((params, event) => {\n if (event.nativeEvent.shiftKey) {\n expandMouseRowRangeSelection(params.id);\n } else {\n apiRef.current.selectRow(params.id, params.value);\n }\n }, [apiRef, expandMouseRowRangeSelection]);\n const handleHeaderSelectionCheckboxChange = React.useCallback(params => {\n const shouldLimitSelectionToCurrentPage = props.checkboxSelectionVisibleOnly && props.pagination;\n const rowsToBeSelected = shouldLimitSelectionToCurrentPage ? gridPaginatedVisibleSortedGridRowIdsSelector(apiRef) : gridExpandedSortedRowIdsSelector(apiRef);\n apiRef.current.selectRows(rowsToBeSelected, params.value);\n }, [apiRef, props.checkboxSelectionVisibleOnly, props.pagination]);\n const handleCellKeyDown = React.useCallback((params, event) => {\n // Get the most recent cell mode because it may have been changed by another listener\n if (apiRef.current.getCellMode(params.id, params.field) === GridCellModes.Edit) {\n return;\n }\n\n // Ignore portal\n // Do not apply shortcuts if the focus is not on the cell root component\n if (!event.currentTarget.contains(event.target)) {\n return;\n }\n if (isNavigationKey(event.key) && event.shiftKey) {\n // The cell that has focus after the keyboard navigation\n const focusCell = gridFocusCellSelector(apiRef);\n if (focusCell && focusCell.id !== params.id) {\n event.preventDefault();\n const isNextRowSelected = apiRef.current.isRowSelected(focusCell.id);\n if (!canHaveMultipleSelection) {\n apiRef.current.selectRow(focusCell.id, !isNextRowSelected, true);\n return;\n }\n const newRowIndex = apiRef.current.getRowIndexRelativeToVisibleRows(focusCell.id);\n const previousRowIndex = apiRef.current.getRowIndexRelativeToVisibleRows(params.id);\n let start;\n let end;\n if (newRowIndex > previousRowIndex) {\n if (isNextRowSelected) {\n // We are navigating to the bottom of the page and adding selected rows\n start = previousRowIndex;\n end = newRowIndex - 1;\n } else {\n // We are navigating to the bottom of the page and removing selected rows\n start = previousRowIndex;\n end = newRowIndex;\n }\n } else {\n // eslint-disable-next-line no-lonely-if\n if (isNextRowSelected) {\n // We are navigating to the top of the page and removing selected rows\n start = newRowIndex + 1;\n end = previousRowIndex;\n } else {\n // We are navigating to the top of the page and adding selected rows\n start = newRowIndex;\n end = previousRowIndex;\n }\n }\n const rowsBetweenStartAndEnd = visibleRows.rows.slice(start, end + 1).map(row => row.id);\n apiRef.current.selectRows(rowsBetweenStartAndEnd, !isNextRowSelected);\n return;\n }\n }\n if (event.key === ' ' && event.shiftKey) {\n event.preventDefault();\n handleSingleRowSelection(params.id, event);\n return;\n }\n if (event.key === 'a' && (event.ctrlKey || event.metaKey)) {\n event.preventDefault();\n selectRows(apiRef.current.getAllRowIds(), true);\n }\n }, [apiRef, handleSingleRowSelection, selectRows, visibleRows.rows, canHaveMultipleSelection]);\n useGridApiEventHandler(apiRef, 'sortedRowsSet', runIfRowSelectionIsEnabled(removeOutdatedSelection));\n useGridApiEventHandler(apiRef, 'rowClick', runIfRowSelectionIsEnabled(handleRowClick));\n useGridApiEventHandler(apiRef, 'rowSelectionCheckboxChange', runIfRowSelectionIsEnabled(handleRowSelectionCheckboxChange));\n useGridApiEventHandler(apiRef, 'headerSelectionCheckboxChange', handleHeaderSelectionCheckboxChange);\n useGridApiEventHandler(apiRef, 'cellMouseDown', runIfRowSelectionIsEnabled(preventSelectionOnShift));\n useGridApiEventHandler(apiRef, 'cellKeyDown', runIfRowSelectionIsEnabled(handleCellKeyDown));\n\n /**\n * EFFECTS\n */\n React.useEffect(() => {\n if (propRowSelectionModel !== undefined) {\n apiRef.current.setRowSelectionModel(propRowSelectionModel);\n }\n }, [apiRef, propRowSelectionModel, props.rowSelection]);\n React.useEffect(() => {\n if (!props.rowSelection) {\n apiRef.current.setRowSelectionModel([]);\n }\n }, [apiRef, props.rowSelection]);\n const isStateControlled = propRowSelectionModel != null;\n React.useEffect(() => {\n if (isStateControlled || !props.rowSelection) {\n return;\n }\n\n // props.isRowSelectable changed\n const currentSelection = gridRowSelectionStateSelector(apiRef.current.state);\n if (isRowSelectable) {\n const newSelection = currentSelection.filter(id => isRowSelectable(id));\n if (newSelection.length < currentSelection.length) {\n apiRef.current.setRowSelectionModel(newSelection);\n }\n }\n }, [apiRef, isRowSelectable, isStateControlled, props.rowSelection]);\n React.useEffect(() => {\n if (!props.rowSelection || isStateControlled) {\n return;\n }\n const currentSelection = gridRowSelectionStateSelector(apiRef.current.state);\n if (!canHaveMultipleSelection && currentSelection.length > 1) {\n // See https://github.com/mui/mui-x/issues/8455\n apiRef.current.setRowSelectionModel([]);\n }\n }, [apiRef, canHaveMultipleSelection, checkboxSelection, isStateControlled, props.rowSelection]);\n};","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport * as React from 'react';\nimport { unstable_composeClasses as composeClasses } from '@mui/utils';\nimport { useGridRegisterPipeProcessor } from '../../core/pipeProcessing';\nimport { getDataGridUtilityClass } from '../../../constants';\nimport { GRID_CHECKBOX_SELECTION_COL_DEF, GRID_CHECKBOX_SELECTION_FIELD } from '../../../colDef';\nconst useUtilityClasses = ownerState => {\n const {\n classes\n } = ownerState;\n return React.useMemo(() => {\n const slots = {\n cellCheckbox: ['cellCheckbox'],\n columnHeaderCheckbox: ['columnHeaderCheckbox']\n };\n return composeClasses(slots, getDataGridUtilityClass, classes);\n }, [classes]);\n};\nexport const useGridRowSelectionPreProcessors = (apiRef, props) => {\n const ownerState = {\n classes: props.classes\n };\n const classes = useUtilityClasses(ownerState);\n const updateSelectionColumn = React.useCallback(columnsState => {\n const selectionColumn = _extends({}, GRID_CHECKBOX_SELECTION_COL_DEF, {\n cellClassName: classes.cellCheckbox,\n headerClassName: classes.columnHeaderCheckbox,\n headerName: apiRef.current.getLocaleText('checkboxSelectionHeaderName')\n });\n const shouldHaveSelectionColumn = props.checkboxSelection;\n const haveSelectionColumn = columnsState.lookup[GRID_CHECKBOX_SELECTION_FIELD] != null;\n if (shouldHaveSelectionColumn && !haveSelectionColumn) {\n columnsState.lookup[GRID_CHECKBOX_SELECTION_FIELD] = selectionColumn;\n columnsState.orderedFields = [GRID_CHECKBOX_SELECTION_FIELD, ...columnsState.orderedFields];\n } else if (!shouldHaveSelectionColumn && haveSelectionColumn) {\n delete columnsState.lookup[GRID_CHECKBOX_SELECTION_FIELD];\n columnsState.orderedFields = columnsState.orderedFields.filter(field => field !== GRID_CHECKBOX_SELECTION_FIELD);\n } else if (shouldHaveSelectionColumn && haveSelectionColumn) {\n columnsState.lookup[GRID_CHECKBOX_SELECTION_FIELD] = _extends({}, selectionColumn, columnsState.lookup[GRID_CHECKBOX_SELECTION_FIELD]);\n }\n return columnsState;\n }, [apiRef, classes, props.checkboxSelection]);\n useGridRegisterPipeProcessor(apiRef, 'hydrateColumns', updateSelectionColumn);\n};","export const gridRowsMetaSelector = state => state.rowsMeta;","import { createSelector, createSelectorMemoized } from '../../../utils/createSelector';\nconst gridRowsStateSelector = state => state.rows;\nexport const gridRowCountSelector = createSelector(gridRowsStateSelector, rows => rows.totalRowCount);\nexport const gridRowsLoadingSelector = createSelector(gridRowsStateSelector, rows => rows.loading);\nexport const gridTopLevelRowCountSelector = createSelector(gridRowsStateSelector, rows => rows.totalTopLevelRowCount);\n\n// TODO rows v6: Rename\nexport const gridRowsLookupSelector = createSelector(gridRowsStateSelector, rows => rows.dataRowIdToModelLookup);\nexport const gridRowsDataRowIdToIdLookupSelector = createSelector(gridRowsStateSelector, rows => rows.dataRowIdToIdLookup);\nexport const gridRowTreeSelector = createSelector(gridRowsStateSelector, rows => rows.tree);\nexport const gridRowGroupingNameSelector = createSelector(gridRowsStateSelector, rows => rows.groupingName);\nexport const gridRowTreeDepthsSelector = createSelector(gridRowsStateSelector, rows => rows.treeDepths);\nexport const gridRowMaximumTreeDepthSelector = createSelectorMemoized(gridRowsStateSelector, rows => {\n const entries = Object.entries(rows.treeDepths);\n if (entries.length === 0) {\n return 1;\n }\n return entries.filter(([, nodeCount]) => nodeCount > 0).map(([depth]) => Number(depth)).sort((a, b) => b - a)[0] + 1;\n});\nexport const gridDataRowIdsSelector = createSelector(gridRowsStateSelector, rows => rows.dataRowIds);\n\n/**\n * @ignore - do not document.\n */\nexport const gridAdditionalRowGroupsSelector = createSelector(gridRowsStateSelector, rows => rows == null ? void 0 : rows.additionalRowGroups);\n\n/**\n * @ignore - do not document.\n */\nexport const gridPinnedRowsSelector = createSelectorMemoized(gridAdditionalRowGroupsSelector, additionalRowGroups => {\n var _rawPinnedRows$bottom, _rawPinnedRows$top;\n const rawPinnedRows = additionalRowGroups == null ? void 0 : additionalRowGroups.pinnedRows;\n return {\n bottom: rawPinnedRows == null || (_rawPinnedRows$bottom = rawPinnedRows.bottom) == null ? void 0 : _rawPinnedRows$bottom.map(rowEntry => {\n var _rowEntry$model;\n return {\n id: rowEntry.id,\n model: (_rowEntry$model = rowEntry.model) != null ? _rowEntry$model : {}\n };\n }),\n top: rawPinnedRows == null || (_rawPinnedRows$top = rawPinnedRows.top) == null ? void 0 : _rawPinnedRows$top.map(rowEntry => {\n var _rowEntry$model2;\n return {\n id: rowEntry.id,\n model: (_rowEntry$model2 = rowEntry.model) != null ? _rowEntry$model2 : {}\n };\n })\n };\n});\n\n/**\n * @ignore - do not document.\n */\nexport const gridPinnedRowsCountSelector = createSelector(gridPinnedRowsSelector, pinnedRows => {\n var _pinnedRows$top, _pinnedRows$bottom;\n return ((pinnedRows == null || (_pinnedRows$top = pinnedRows.top) == null ? void 0 : _pinnedRows$top.length) || 0) + ((pinnedRows == null || (_pinnedRows$bottom = pinnedRows.bottom) == null ? void 0 : _pinnedRows$bottom.length) || 0);\n});","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport { gridPinnedRowsSelector } from './gridRowsSelector';\nimport { gridDensityFactorSelector } from '../density/densitySelector';\nexport const GRID_ROOT_GROUP_ID = `auto-generated-group-node-root`;\nexport const GRID_ID_AUTOGENERATED = Symbol('mui.id_autogenerated');\nexport const buildRootGroup = () => ({\n type: 'group',\n id: GRID_ROOT_GROUP_ID,\n depth: -1,\n groupingField: null,\n groupingKey: null,\n isAutoGenerated: true,\n children: [],\n childrenFromPath: {},\n childrenExpanded: true,\n parent: null\n});\n\n/**\n * A helper function to check if the id provided is valid.\n * @param {GridRowId} id Id as [[GridRowId]].\n * @param {GridRowModel | Partial} row Row as [[GridRowModel]].\n * @param {string} detailErrorMessage A custom error message to display for invalid IDs\n */\nexport function checkGridRowIdIsValid(id, row, detailErrorMessage = 'A row was provided without id in the rows prop:') {\n if (id == null) {\n throw new Error(['MUI: The data grid component requires all rows to have a unique `id` property.', 'Alternatively, you can use the `getRowId` prop to specify a custom id for each row.', detailErrorMessage, JSON.stringify(row)].join('\\n'));\n }\n}\nexport const getRowIdFromRowModel = (rowModel, getRowId, detailErrorMessage) => {\n const id = getRowId ? getRowId(rowModel) : rowModel.id;\n checkGridRowIdIsValid(id, rowModel, detailErrorMessage);\n return id;\n};\nexport const createRowsInternalCache = ({\n rows,\n getRowId,\n loading,\n rowCount\n}) => {\n const updates = {\n type: 'full',\n rows: []\n };\n const dataRowIdToModelLookup = {};\n const dataRowIdToIdLookup = {};\n for (let i = 0; i < rows.length; i += 1) {\n const model = rows[i];\n const id = getRowIdFromRowModel(model, getRowId);\n dataRowIdToModelLookup[id] = model;\n dataRowIdToIdLookup[id] = id;\n updates.rows.push(id);\n }\n return {\n rowsBeforePartialUpdates: rows,\n loadingPropBeforePartialUpdates: loading,\n rowCountPropBeforePartialUpdates: rowCount,\n updates,\n dataRowIdToIdLookup,\n dataRowIdToModelLookup\n };\n};\nexport const getTopLevelRowCount = ({\n tree,\n rowCountProp = 0\n}) => {\n const rootGroupNode = tree[GRID_ROOT_GROUP_ID];\n return Math.max(rowCountProp, rootGroupNode.children.length + (rootGroupNode.footerId == null ? 0 : 1));\n};\nexport const getRowsStateFromCache = ({\n apiRef,\n rowCountProp = 0,\n loadingProp,\n previousTree,\n previousTreeDepths\n}) => {\n const cache = apiRef.current.caches.rows;\n\n // 1. Apply the \"rowTreeCreation\" family processing.\n const {\n tree: unProcessedTree,\n treeDepths: unProcessedTreeDepths,\n dataRowIds: unProcessedDataRowIds,\n groupingName\n } = apiRef.current.applyStrategyProcessor('rowTreeCreation', {\n previousTree,\n previousTreeDepths,\n updates: cache.updates,\n dataRowIdToIdLookup: cache.dataRowIdToIdLookup,\n dataRowIdToModelLookup: cache.dataRowIdToModelLookup\n });\n\n // 2. Apply the \"hydrateRows\" pipe-processing.\n const groupingParamsWithHydrateRows = apiRef.current.unstable_applyPipeProcessors('hydrateRows', {\n tree: unProcessedTree,\n treeDepths: unProcessedTreeDepths,\n dataRowIdToIdLookup: cache.dataRowIdToIdLookup,\n dataRowIds: unProcessedDataRowIds,\n dataRowIdToModelLookup: cache.dataRowIdToModelLookup\n });\n\n // 3. Reset the cache updates\n apiRef.current.caches.rows.updates = {\n type: 'partial',\n actions: {\n insert: [],\n modify: [],\n remove: []\n },\n idToActionLookup: {}\n };\n return _extends({}, groupingParamsWithHydrateRows, {\n totalRowCount: Math.max(rowCountProp, groupingParamsWithHydrateRows.dataRowIds.length),\n totalTopLevelRowCount: getTopLevelRowCount({\n tree: groupingParamsWithHydrateRows.tree,\n rowCountProp\n }),\n groupingName,\n loading: loadingProp\n });\n};\nexport const isAutoGeneratedRow = rowNode => rowNode.type === 'skeletonRow' || rowNode.type === 'footer' || rowNode.type === 'group' && rowNode.isAutoGenerated || rowNode.type === 'pinnedRow' && rowNode.isAutoGenerated;\nexport const getTreeNodeDescendants = (tree, parentId, skipAutoGeneratedRows) => {\n const node = tree[parentId];\n if (node.type !== 'group') {\n return [];\n }\n const validDescendants = [];\n for (let i = 0; i < node.children.length; i += 1) {\n const child = node.children[i];\n if (!skipAutoGeneratedRows || !isAutoGeneratedRow(tree[child])) {\n validDescendants.push(child);\n }\n validDescendants.push(...getTreeNodeDescendants(tree, child, skipAutoGeneratedRows));\n }\n if (!skipAutoGeneratedRows && node.footerId != null) {\n validDescendants.push(node.footerId);\n }\n return validDescendants;\n};\nexport const updateCacheWithNewRows = ({\n previousCache,\n getRowId,\n updates\n}) => {\n var _previousCache$update, _previousCache$update2, _previousCache$update3;\n if (previousCache.updates.type === 'full') {\n throw new Error('MUI: Unable to prepare a partial update if a full update is not applied yet');\n }\n\n // Remove duplicate updates.\n // A server can batch updates, and send several updates for the same row in one fn call.\n const uniqueUpdates = new Map();\n updates.forEach(update => {\n const id = getRowIdFromRowModel(update, getRowId, 'A row was provided without id when calling updateRows():');\n if (uniqueUpdates.has(id)) {\n uniqueUpdates.set(id, _extends({}, uniqueUpdates.get(id), update));\n } else {\n uniqueUpdates.set(id, update);\n }\n });\n const partialUpdates = {\n type: 'partial',\n actions: {\n insert: [...((_previousCache$update = previousCache.updates.actions.insert) != null ? _previousCache$update : [])],\n modify: [...((_previousCache$update2 = previousCache.updates.actions.modify) != null ? _previousCache$update2 : [])],\n remove: [...((_previousCache$update3 = previousCache.updates.actions.remove) != null ? _previousCache$update3 : [])]\n },\n idToActionLookup: _extends({}, previousCache.updates.idToActionLookup)\n };\n const dataRowIdToModelLookup = _extends({}, previousCache.dataRowIdToModelLookup);\n const dataRowIdToIdLookup = _extends({}, previousCache.dataRowIdToIdLookup);\n const alreadyAppliedActionsToRemove = {\n insert: {},\n modify: {},\n remove: {}\n };\n\n // Depending on the action already applied to the data row,\n // We might want drop the already-applied-update.\n // For instance:\n // - if you delete then insert, then you don't want to apply the deletion in the tree.\n // - if you insert, then modify, then you just want to apply the insertion in the tree.\n uniqueUpdates.forEach((partialRow, id) => {\n const actionAlreadyAppliedToRow = partialUpdates.idToActionLookup[id];\n\n // Action === \"delete\"\n // eslint-disable-next-line no-underscore-dangle\n if (partialRow._action === 'delete') {\n // If the data row has been removed since the last state update,\n // Then do nothing.\n if (actionAlreadyAppliedToRow === 'remove' || !dataRowIdToModelLookup[id]) {\n return;\n }\n\n // If the data row has been inserted / modified since the last state update,\n // Then drop this \"insert\" / \"modify\" update.\n if (actionAlreadyAppliedToRow != null) {\n alreadyAppliedActionsToRemove[actionAlreadyAppliedToRow][id] = true;\n }\n\n // Remove the data row from the lookups and add it to the \"delete\" update.\n partialUpdates.actions.remove.push(id);\n delete dataRowIdToModelLookup[id];\n delete dataRowIdToIdLookup[id];\n return;\n }\n const oldRow = dataRowIdToModelLookup[id];\n\n // Action === \"modify\"\n if (oldRow) {\n // If the data row has been removed since the last state update,\n // Then drop this \"remove\" update and add it to the \"modify\" update instead.\n if (actionAlreadyAppliedToRow === 'remove') {\n alreadyAppliedActionsToRemove.remove[id] = true;\n partialUpdates.actions.modify.push(id);\n }\n // If the date has not been inserted / modified since the last state update,\n // Then add it to the \"modify\" update (if it has been inserted it should just remain \"inserted\").\n else if (actionAlreadyAppliedToRow == null) {\n partialUpdates.actions.modify.push(id);\n }\n\n // Update the data row lookups.\n dataRowIdToModelLookup[id] = _extends({}, oldRow, partialRow);\n return;\n }\n\n // Action === \"insert\"\n // If the data row has been removed since the last state update,\n // Then drop the \"remove\" update and add it to the \"insert\" update instead.\n if (actionAlreadyAppliedToRow === 'remove') {\n alreadyAppliedActionsToRemove.remove[id] = true;\n partialUpdates.actions.insert.push(id);\n }\n // If the data row has not been inserted since the last state update,\n // Then add it to the \"insert\" update.\n // `actionAlreadyAppliedToRow` can't be equal to \"modify\", otherwise we would have an `oldRow` above.\n else if (actionAlreadyAppliedToRow == null) {\n partialUpdates.actions.insert.push(id);\n }\n\n // Update the data row lookups.\n dataRowIdToModelLookup[id] = partialRow;\n dataRowIdToIdLookup[id] = id;\n });\n const actionTypeWithActionsToRemove = Object.keys(alreadyAppliedActionsToRemove);\n for (let i = 0; i < actionTypeWithActionsToRemove.length; i += 1) {\n const actionType = actionTypeWithActionsToRemove[i];\n const idsToRemove = alreadyAppliedActionsToRemove[actionType];\n if (Object.keys(idsToRemove).length > 0) {\n partialUpdates.actions[actionType] = partialUpdates.actions[actionType].filter(id => !idsToRemove[id]);\n }\n }\n return {\n dataRowIdToModelLookup,\n dataRowIdToIdLookup,\n updates: partialUpdates,\n rowsBeforePartialUpdates: previousCache.rowsBeforePartialUpdates,\n loadingPropBeforePartialUpdates: previousCache.loadingPropBeforePartialUpdates,\n rowCountPropBeforePartialUpdates: previousCache.rowCountPropBeforePartialUpdates\n };\n};\nexport function calculatePinnedRowsHeight(apiRef) {\n var _pinnedRows$top, _pinnedRows$bottom;\n const pinnedRows = gridPinnedRowsSelector(apiRef);\n const topPinnedRowsHeight = (pinnedRows == null || (_pinnedRows$top = pinnedRows.top) == null ? void 0 : _pinnedRows$top.reduce((acc, value) => {\n acc += apiRef.current.unstable_getRowHeight(value.id);\n return acc;\n }, 0)) || 0;\n const bottomPinnedRowsHeight = (pinnedRows == null || (_pinnedRows$bottom = pinnedRows.bottom) == null ? void 0 : _pinnedRows$bottom.reduce((acc, value) => {\n acc += apiRef.current.unstable_getRowHeight(value.id);\n return acc;\n }, 0)) || 0;\n return {\n top: topPinnedRowsHeight,\n bottom: bottomPinnedRowsHeight\n };\n}\nexport function getMinimalContentHeight(apiRef, rowHeight) {\n const densityFactor = gridDensityFactorSelector(apiRef);\n return 2 * Math.floor(rowHeight * densityFactor);\n}","import * as React from 'react';\nimport { getGridCellElement, getGridColumnHeaderElement, getGridRowElement } from '../../../utils/domUtils';\nimport { GRID_ID_AUTOGENERATED } from './gridRowsUtils';\nimport { useGridApiMethod } from '../../utils/useGridApiMethod';\nimport { gridFocusCellSelector, gridTabIndexCellSelector } from '../focus/gridFocusStateSelector';\nexport class MissingRowIdError extends Error {}\n\n/**\n * @requires useGridColumns (method)\n * @requires useGridRows (method)\n * @requires useGridFocus (state)\n * @requires useGridEditing (method)\n * TODO: Impossible priority - useGridEditing also needs to be after useGridParamsApi\n * TODO: Impossible priority - useGridFocus also needs to be after useGridParamsApi\n */\nexport function useGridParamsApi(apiRef, props) {\n const {\n getRowId\n } = props;\n const getColumnHeaderParams = React.useCallback(field => ({\n field,\n colDef: apiRef.current.getColumn(field)\n }), [apiRef]);\n const getRowParams = React.useCallback(id => {\n const row = apiRef.current.getRow(id);\n if (!row) {\n throw new MissingRowIdError(`No row with id #${id} found`);\n }\n const params = {\n id,\n columns: apiRef.current.getAllColumns(),\n row\n };\n return params;\n }, [apiRef]);\n const getBaseCellParams = React.useCallback((id, field) => {\n const row = apiRef.current.getRow(id);\n const rowNode = apiRef.current.getRowNode(id);\n if (!row || !rowNode) {\n throw new MissingRowIdError(`No row with id #${id} found`);\n }\n const cellFocus = gridFocusCellSelector(apiRef);\n const cellTabIndex = gridTabIndexCellSelector(apiRef);\n const params = {\n id,\n field,\n row,\n rowNode,\n value: row[field],\n colDef: apiRef.current.getColumn(field),\n cellMode: apiRef.current.getCellMode(id, field),\n api: apiRef.current,\n hasFocus: cellFocus !== null && cellFocus.field === field && cellFocus.id === id,\n tabIndex: cellTabIndex && cellTabIndex.field === field && cellTabIndex.id === id ? 0 : -1\n };\n return params;\n }, [apiRef]);\n const getCellParams = React.useCallback((id, field) => {\n const colDef = apiRef.current.getColumn(field);\n const value = apiRef.current.getCellValue(id, field);\n const row = apiRef.current.getRow(id);\n const rowNode = apiRef.current.getRowNode(id);\n if (!row || !rowNode) {\n throw new MissingRowIdError(`No row with id #${id} found`);\n }\n const cellFocus = gridFocusCellSelector(apiRef);\n const cellTabIndex = gridTabIndexCellSelector(apiRef);\n const params = {\n id,\n field,\n row,\n rowNode,\n colDef,\n cellMode: apiRef.current.getCellMode(id, field),\n hasFocus: cellFocus !== null && cellFocus.field === field && cellFocus.id === id,\n tabIndex: cellTabIndex && cellTabIndex.field === field && cellTabIndex.id === id ? 0 : -1,\n value,\n formattedValue: value,\n isEditable: false\n };\n if (colDef && colDef.valueFormatter) {\n params.formattedValue = colDef.valueFormatter({\n id,\n field: params.field,\n value: params.value,\n api: apiRef.current\n });\n }\n params.isEditable = colDef && apiRef.current.isCellEditable(params);\n return params;\n }, [apiRef]);\n const getCellValue = React.useCallback((id, field) => {\n const colDef = apiRef.current.getColumn(field);\n if (!colDef || !colDef.valueGetter) {\n const rowModel = apiRef.current.getRow(id);\n if (!rowModel) {\n throw new MissingRowIdError(`No row with id #${id} found`);\n }\n return rowModel[field];\n }\n return colDef.valueGetter(getBaseCellParams(id, field));\n }, [apiRef, getBaseCellParams]);\n const getRowValue = React.useCallback((row, colDef) => {\n var _getRowId;\n const id = GRID_ID_AUTOGENERATED in row ? row[GRID_ID_AUTOGENERATED] : (_getRowId = getRowId == null ? void 0 : getRowId(row)) != null ? _getRowId : row.id;\n const field = colDef.field;\n if (!colDef || !colDef.valueGetter) {\n return row[field];\n }\n return colDef.valueGetter(getBaseCellParams(id, field));\n }, [getBaseCellParams, getRowId]);\n const getRowFormattedValue = React.useCallback((row, colDef) => {\n var _ref;\n const value = getRowValue(row, colDef);\n if (!colDef || !colDef.valueFormatter) {\n return value;\n }\n const id = (_ref = getRowId ? getRowId(row) : row.id) != null ? _ref : row[GRID_ID_AUTOGENERATED];\n const field = colDef.field;\n return colDef.valueFormatter({\n id,\n field,\n value,\n api: apiRef.current\n });\n }, [apiRef, getRowId, getRowValue]);\n const getColumnHeaderElement = React.useCallback(field => {\n if (!apiRef.current.rootElementRef.current) {\n return null;\n }\n return getGridColumnHeaderElement(apiRef.current.rootElementRef.current, field);\n }, [apiRef]);\n const getRowElement = React.useCallback(id => {\n if (!apiRef.current.rootElementRef.current) {\n return null;\n }\n return getGridRowElement(apiRef.current.rootElementRef.current, id);\n }, [apiRef]);\n const getCellElement = React.useCallback((id, field) => {\n if (!apiRef.current.rootElementRef.current) {\n return null;\n }\n return getGridCellElement(apiRef.current.rootElementRef.current, {\n id,\n field\n });\n }, [apiRef]);\n const paramsApi = {\n getCellValue,\n getCellParams,\n getCellElement,\n getRowValue,\n getRowFormattedValue,\n getRowParams,\n getRowElement,\n getColumnHeaderParams,\n getColumnHeaderElement\n };\n useGridApiMethod(apiRef, paramsApi, 'public');\n}","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport * as React from 'react';\nimport { useGridApiMethod } from '../../utils/useGridApiMethod';\nimport { useGridLogger } from '../../utils/useGridLogger';\nimport { gridRowCountSelector, gridRowsLookupSelector, gridRowTreeSelector, gridRowGroupingNameSelector, gridRowTreeDepthsSelector, gridDataRowIdsSelector, gridRowsDataRowIdToIdLookupSelector, gridRowMaximumTreeDepthSelector } from './gridRowsSelector';\nimport { GridSignature, useGridApiEventHandler } from '../../utils/useGridApiEventHandler';\nimport { useGridVisibleRows } from '../../utils/useGridVisibleRows';\nimport { gridSortedRowIdsSelector } from '../sorting/gridSortingSelector';\nimport { gridFilteredRowsLookupSelector } from '../filter/gridFilterSelector';\nimport { getTreeNodeDescendants, createRowsInternalCache, getRowsStateFromCache, isAutoGeneratedRow, GRID_ROOT_GROUP_ID, GRID_ID_AUTOGENERATED, updateCacheWithNewRows, getTopLevelRowCount, getRowIdFromRowModel } from './gridRowsUtils';\nimport { useGridRegisterPipeApplier } from '../../core/pipeProcessing';\nexport const rowsStateInitializer = (state, props, apiRef) => {\n apiRef.current.caches.rows = createRowsInternalCache({\n rows: props.rows,\n getRowId: props.getRowId,\n loading: props.loading,\n rowCount: props.rowCount\n });\n return _extends({}, state, {\n rows: getRowsStateFromCache({\n apiRef,\n rowCountProp: props.rowCount,\n loadingProp: props.loading,\n previousTree: null,\n previousTreeDepths: null\n })\n });\n};\nexport const useGridRows = (apiRef, props) => {\n if (process.env.NODE_ENV !== 'production') {\n try {\n // Freeze the `rows` prop so developers have a fast failure if they try to use Array.prototype.push().\n Object.freeze(props.rows);\n } catch (error) {\n // Sometimes, it's impossible to freeze, so we give up on it.\n }\n }\n const logger = useGridLogger(apiRef, 'useGridRows');\n const currentPage = useGridVisibleRows(apiRef, props);\n const lastUpdateMs = React.useRef(Date.now());\n const timeout = React.useRef(null);\n const getRow = React.useCallback(id => {\n const model = gridRowsLookupSelector(apiRef)[id];\n if (model) {\n return model;\n }\n const node = apiRef.current.getRowNode(id);\n if (node && isAutoGeneratedRow(node)) {\n return {\n [GRID_ID_AUTOGENERATED]: id\n };\n }\n return null;\n }, [apiRef]);\n const getRowIdProp = props.getRowId;\n const getRowId = React.useCallback(row => {\n if (GRID_ID_AUTOGENERATED in row) {\n return row[GRID_ID_AUTOGENERATED];\n }\n if (getRowIdProp) {\n return getRowIdProp(row);\n }\n return row.id;\n }, [getRowIdProp]);\n const lookup = React.useMemo(() => currentPage.rows.reduce((acc, {\n id\n }, index) => {\n acc[id] = index;\n return acc;\n }, {}), [currentPage.rows]);\n const throttledRowsChange = React.useCallback(({\n cache,\n throttle\n }) => {\n const run = () => {\n timeout.current = null;\n lastUpdateMs.current = Date.now();\n apiRef.current.setState(state => _extends({}, state, {\n rows: getRowsStateFromCache({\n apiRef,\n rowCountProp: props.rowCount,\n loadingProp: props.loading,\n previousTree: gridRowTreeSelector(apiRef),\n previousTreeDepths: gridRowTreeDepthsSelector(apiRef)\n })\n }));\n apiRef.current.publishEvent('rowsSet');\n apiRef.current.forceUpdate();\n };\n if (timeout.current) {\n clearTimeout(timeout.current);\n timeout.current = null;\n }\n apiRef.current.caches.rows = cache;\n if (!throttle) {\n run();\n return;\n }\n const throttleRemainingTimeMs = props.throttleRowsMs - (Date.now() - lastUpdateMs.current);\n if (throttleRemainingTimeMs > 0) {\n timeout.current = setTimeout(run, throttleRemainingTimeMs);\n return;\n }\n run();\n }, [props.throttleRowsMs, props.rowCount, props.loading, apiRef]);\n\n /**\n * API METHODS\n */\n const setRows = React.useCallback(rows => {\n logger.debug(`Updating all rows, new length ${rows.length}`);\n const cache = createRowsInternalCache({\n rows,\n getRowId: props.getRowId,\n loading: props.loading,\n rowCount: props.rowCount\n });\n const prevCache = apiRef.current.caches.rows;\n cache.rowsBeforePartialUpdates = prevCache.rowsBeforePartialUpdates;\n throttledRowsChange({\n cache,\n throttle: true\n });\n }, [logger, props.getRowId, props.loading, props.rowCount, throttledRowsChange, apiRef]);\n const updateRows = React.useCallback(updates => {\n if (props.signature === GridSignature.DataGrid && updates.length > 1) {\n throw new Error([\"MUI: You can't update several rows at once in `apiRef.current.updateRows` on the DataGrid.\", 'You need to upgrade to DataGridPro or DataGridPremium component to unlock this feature.'].join('\\n'));\n }\n const nonPinnedRowsUpdates = [];\n updates.forEach(update => {\n const id = getRowIdFromRowModel(update, props.getRowId, 'A row was provided without id when calling updateRows():');\n const rowNode = apiRef.current.getRowNode(id);\n if ((rowNode == null ? void 0 : rowNode.type) === 'pinnedRow') {\n // @ts-ignore because otherwise `release:build` doesn't work\n const pinnedRowsCache = apiRef.current.caches.pinnedRows;\n const prevModel = pinnedRowsCache.idLookup[id];\n if (prevModel) {\n pinnedRowsCache.idLookup[id] = _extends({}, prevModel, update);\n }\n } else {\n nonPinnedRowsUpdates.push(update);\n }\n });\n const cache = updateCacheWithNewRows({\n updates: nonPinnedRowsUpdates,\n getRowId: props.getRowId,\n previousCache: apiRef.current.caches.rows\n });\n throttledRowsChange({\n cache,\n throttle: true\n });\n }, [props.signature, props.getRowId, throttledRowsChange, apiRef]);\n const getRowModels = React.useCallback(() => {\n const dataRows = gridDataRowIdsSelector(apiRef);\n const idRowsLookup = gridRowsLookupSelector(apiRef);\n return new Map(dataRows.map(id => {\n var _idRowsLookup$id;\n return [id, (_idRowsLookup$id = idRowsLookup[id]) != null ? _idRowsLookup$id : {}];\n }));\n }, [apiRef]);\n const getRowsCount = React.useCallback(() => gridRowCountSelector(apiRef), [apiRef]);\n const getAllRowIds = React.useCallback(() => gridDataRowIdsSelector(apiRef), [apiRef]);\n const getRowIndexRelativeToVisibleRows = React.useCallback(id => lookup[id], [lookup]);\n const setRowChildrenExpansion = React.useCallback((id, isExpanded) => {\n const currentNode = apiRef.current.getRowNode(id);\n if (!currentNode) {\n throw new Error(`MUI: No row with id #${id} found`);\n }\n if (currentNode.type !== 'group') {\n throw new Error('MUI: Only group nodes can be expanded or collapsed');\n }\n const newNode = _extends({}, currentNode, {\n childrenExpanded: isExpanded\n });\n apiRef.current.setState(state => {\n return _extends({}, state, {\n rows: _extends({}, state.rows, {\n tree: _extends({}, state.rows.tree, {\n [id]: newNode\n })\n })\n });\n });\n apiRef.current.forceUpdate();\n apiRef.current.publishEvent('rowExpansionChange', newNode);\n }, [apiRef]);\n const getRowNode = React.useCallback(id => {\n var _ref;\n return (_ref = gridRowTreeSelector(apiRef)[id]) != null ? _ref : null;\n }, [apiRef]);\n const getRowGroupChildren = React.useCallback(({\n skipAutoGeneratedRows = true,\n groupId,\n applySorting,\n applyFiltering\n }) => {\n const tree = gridRowTreeSelector(apiRef);\n let children;\n if (applySorting) {\n const groupNode = tree[groupId];\n if (!groupNode) {\n return [];\n }\n const sortedRowIds = gridSortedRowIdsSelector(apiRef);\n children = [];\n const startIndex = sortedRowIds.findIndex(id => id === groupId) + 1;\n for (let index = startIndex; index < sortedRowIds.length && tree[sortedRowIds[index]].depth > groupNode.depth; index += 1) {\n const id = sortedRowIds[index];\n if (!skipAutoGeneratedRows || !isAutoGeneratedRow(tree[id])) {\n children.push(id);\n }\n }\n } else {\n children = getTreeNodeDescendants(tree, groupId, skipAutoGeneratedRows);\n }\n if (applyFiltering) {\n const filteredRowsLookup = gridFilteredRowsLookupSelector(apiRef);\n children = children.filter(childId => filteredRowsLookup[childId] !== false);\n }\n return children;\n }, [apiRef]);\n const setRowIndex = React.useCallback((rowId, targetIndex) => {\n const node = apiRef.current.getRowNode(rowId);\n if (!node) {\n throw new Error(`MUI: No row with id #${rowId} found`);\n }\n if (node.parent !== GRID_ROOT_GROUP_ID) {\n throw new Error(`MUI: The row reordering do not support reordering of grouped rows yet`);\n }\n if (node.type !== 'leaf') {\n throw new Error(`MUI: The row reordering do not support reordering of footer or grouping rows`);\n }\n apiRef.current.setState(state => {\n const group = gridRowTreeSelector(state, apiRef.current.instanceId)[GRID_ROOT_GROUP_ID];\n const allRows = group.children;\n const oldIndex = allRows.findIndex(row => row === rowId);\n if (oldIndex === -1 || oldIndex === targetIndex) {\n return state;\n }\n logger.debug(`Moving row ${rowId} to index ${targetIndex}`);\n const updatedRows = [...allRows];\n updatedRows.splice(targetIndex, 0, updatedRows.splice(oldIndex, 1)[0]);\n return _extends({}, state, {\n rows: _extends({}, state.rows, {\n tree: _extends({}, state.rows.tree, {\n [GRID_ROOT_GROUP_ID]: _extends({}, group, {\n children: updatedRows\n })\n })\n })\n });\n });\n apiRef.current.publishEvent('rowsSet');\n }, [apiRef, logger]);\n const replaceRows = React.useCallback((firstRowToRender, newRows) => {\n if (props.signature === GridSignature.DataGrid && newRows.length > 1) {\n throw new Error([\"MUI: You can't replace rows using `apiRef.current.unstable_replaceRows` on the DataGrid.\", 'You need to upgrade to DataGridPro or DataGridPremium component to unlock this feature.'].join('\\n'));\n }\n if (newRows.length === 0) {\n return;\n }\n const treeDepth = gridRowMaximumTreeDepthSelector(apiRef);\n if (treeDepth > 1) {\n throw new Error('`apiRef.current.unstable_replaceRows` is not compatible with tree data and row grouping');\n }\n const tree = _extends({}, gridRowTreeSelector(apiRef));\n const dataRowIdToModelLookup = _extends({}, gridRowsLookupSelector(apiRef));\n const dataRowIdToIdLookup = _extends({}, gridRowsDataRowIdToIdLookupSelector(apiRef));\n const rootGroup = tree[GRID_ROOT_GROUP_ID];\n const rootGroupChildren = [...rootGroup.children];\n for (let i = 0; i < newRows.length; i += 1) {\n const rowModel = newRows[i];\n const rowId = getRowIdFromRowModel(rowModel, props.getRowId, 'A row was provided without id when calling replaceRows().');\n const [replacedRowId] = rootGroupChildren.splice(firstRowToRender + i, 1, rowId);\n delete dataRowIdToModelLookup[replacedRowId];\n delete dataRowIdToIdLookup[replacedRowId];\n delete tree[replacedRowId];\n const rowTreeNodeConfig = {\n id: rowId,\n depth: 0,\n parent: GRID_ROOT_GROUP_ID,\n type: 'leaf',\n groupingKey: null\n };\n dataRowIdToModelLookup[rowId] = rowModel;\n dataRowIdToIdLookup[rowId] = rowId;\n tree[rowId] = rowTreeNodeConfig;\n }\n tree[GRID_ROOT_GROUP_ID] = _extends({}, rootGroup, {\n children: rootGroupChildren\n });\n\n // Removes potential remaining skeleton rows from the dataRowIds.\n const dataRowIds = rootGroupChildren.filter(childId => tree[childId].type === 'leaf');\n apiRef.current.caches.rows.dataRowIdToModelLookup = dataRowIdToModelLookup;\n apiRef.current.caches.rows.dataRowIdToIdLookup = dataRowIdToIdLookup;\n apiRef.current.setState(state => _extends({}, state, {\n rows: _extends({}, state.rows, {\n dataRowIdToModelLookup,\n dataRowIdToIdLookup,\n dataRowIds,\n tree\n })\n }));\n apiRef.current.publishEvent('rowsSet');\n }, [apiRef, props.signature, props.getRowId]);\n const rowApi = {\n getRow,\n getRowId,\n getRowModels,\n getRowsCount,\n getAllRowIds,\n setRows,\n updateRows,\n getRowNode,\n getRowIndexRelativeToVisibleRows,\n unstable_replaceRows: replaceRows\n };\n const rowProApi = {\n setRowIndex,\n setRowChildrenExpansion,\n getRowGroupChildren\n };\n\n /**\n * EVENTS\n */\n const groupRows = React.useCallback(() => {\n logger.info(`Row grouping pre-processing have changed, regenerating the row tree`);\n let cache;\n if (apiRef.current.caches.rows.rowsBeforePartialUpdates === props.rows) {\n // The `props.rows` did not change since the last row grouping\n // We can use the current rows cache which contains the partial updates done recently.\n cache = _extends({}, apiRef.current.caches.rows, {\n updates: {\n type: 'full',\n rows: gridDataRowIdsSelector(apiRef)\n }\n });\n } else {\n // The `props.rows` has changed since the last row grouping\n // We must use the new `props.rows` on the new grouping\n // This occurs because this event is triggered before the `useEffect` on the rows when both the grouping pre-processing and the rows changes on the same render\n cache = createRowsInternalCache({\n rows: props.rows,\n getRowId: props.getRowId,\n loading: props.loading,\n rowCount: props.rowCount\n });\n }\n throttledRowsChange({\n cache,\n throttle: false\n });\n }, [logger, apiRef, props.rows, props.getRowId, props.loading, props.rowCount, throttledRowsChange]);\n const handleStrategyProcessorChange = React.useCallback(methodName => {\n if (methodName === 'rowTreeCreation') {\n groupRows();\n }\n }, [groupRows]);\n const handleStrategyActivityChange = React.useCallback(() => {\n // `rowTreeCreation` is the only processor ran when `strategyAvailabilityChange` is fired.\n // All the other processors listen to `rowsSet` which will be published by the `groupRows` method below.\n if (apiRef.current.getActiveStrategy('rowTree') !== gridRowGroupingNameSelector(apiRef)) {\n groupRows();\n }\n }, [apiRef, groupRows]);\n useGridApiEventHandler(apiRef, 'activeStrategyProcessorChange', handleStrategyProcessorChange);\n useGridApiEventHandler(apiRef, 'strategyAvailabilityChange', handleStrategyActivityChange);\n\n /**\n * APPLIERS\n */\n const applyHydrateRowsProcessor = React.useCallback(() => {\n apiRef.current.setState(state => {\n const response = apiRef.current.unstable_applyPipeProcessors('hydrateRows', {\n tree: gridRowTreeSelector(state, apiRef.current.instanceId),\n treeDepths: gridRowTreeDepthsSelector(state, apiRef.current.instanceId),\n dataRowIds: gridDataRowIdsSelector(state, apiRef.current.instanceId),\n dataRowIdToModelLookup: gridRowsLookupSelector(state, apiRef.current.instanceId),\n dataRowIdToIdLookup: gridRowsDataRowIdToIdLookupSelector(state, apiRef.current.instanceId)\n });\n return _extends({}, state, {\n rows: _extends({}, state.rows, response, {\n totalTopLevelRowCount: getTopLevelRowCount({\n tree: response.tree,\n rowCountProp: props.rowCount\n })\n })\n });\n });\n apiRef.current.publishEvent('rowsSet');\n apiRef.current.forceUpdate();\n }, [apiRef, props.rowCount]);\n useGridRegisterPipeApplier(apiRef, 'hydrateRows', applyHydrateRowsProcessor);\n useGridApiMethod(apiRef, rowApi, 'public');\n useGridApiMethod(apiRef, rowProApi, props.signature === GridSignature.DataGrid ? 'private' : 'public');\n\n /**\n * EFFECTS\n */\n React.useEffect(() => {\n return () => {\n if (timeout.current !== null) {\n clearTimeout(timeout.current);\n }\n };\n }, []);\n\n // The effect do not track any value defined synchronously during the 1st render by hooks called after `useGridRows`\n // As a consequence, the state generated by the 1st run of this useEffect will always be equal to the initialization one\n const isFirstRender = React.useRef(true);\n React.useEffect(() => {\n if (isFirstRender.current) {\n isFirstRender.current = false;\n return;\n }\n const areNewRowsAlreadyInState = apiRef.current.caches.rows.rowsBeforePartialUpdates === props.rows;\n const isNewLoadingAlreadyInState = apiRef.current.caches.rows.loadingPropBeforePartialUpdates === props.loading;\n const isNewRowCountAlreadyInState = apiRef.current.caches.rows.rowCountPropBeforePartialUpdates === props.rowCount;\n\n // The new rows have already been applied (most likely in the `'rowGroupsPreProcessingChange'` listener)\n if (areNewRowsAlreadyInState) {\n // If the loading prop has changed, we need to update its value in the state because it won't be done by `throttledRowsChange`\n if (!isNewLoadingAlreadyInState) {\n apiRef.current.setState(state => _extends({}, state, {\n rows: _extends({}, state.rows, {\n loading: props.loading\n })\n }));\n apiRef.current.caches.rows.loadingPropBeforePartialUpdates = props.loading;\n apiRef.current.forceUpdate();\n }\n if (!isNewRowCountAlreadyInState) {\n apiRef.current.setState(state => _extends({}, state, {\n rows: _extends({}, state.rows, {\n totalRowCount: Math.max(props.rowCount || 0, state.rows.totalRowCount),\n totalTopLevelRowCount: Math.max(props.rowCount || 0, state.rows.totalTopLevelRowCount)\n })\n }));\n apiRef.current.caches.rows.rowCountPropBeforePartialUpdates = props.rowCount;\n apiRef.current.forceUpdate();\n }\n return;\n }\n logger.debug(`Updating all rows, new length ${props.rows.length}`);\n throttledRowsChange({\n cache: createRowsInternalCache({\n rows: props.rows,\n getRowId: props.getRowId,\n loading: props.loading,\n rowCount: props.rowCount\n }),\n throttle: false\n });\n }, [props.rows, props.rowCount, props.getRowId, props.loading, logger, throttledRowsChange, apiRef]);\n};","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport * as React from 'react';\nimport { unstable_debounce as debounce, unstable_capitalize as capitalize } from '@mui/utils';\nimport { useGridVisibleRows } from '../../utils/useGridVisibleRows';\nimport { useGridApiMethod } from '../../utils/useGridApiMethod';\nimport { useGridSelector } from '../../utils/useGridSelector';\nimport { gridDensityFactorSelector } from '../density/densitySelector';\nimport { gridFilterModelSelector } from '../filter/gridFilterSelector';\nimport { gridPaginationSelector } from '../pagination/gridPaginationSelector';\nimport { gridSortModelSelector } from '../sorting/gridSortingSelector';\nimport { useGridRegisterPipeApplier } from '../../core/pipeProcessing';\nimport { gridPinnedRowsSelector } from './gridRowsSelector';\nimport { DATA_GRID_PROPS_DEFAULT_VALUES } from '../../../DataGrid/useDataGridProps';\nexport const rowsMetaStateInitializer = state => _extends({}, state, {\n rowsMeta: {\n currentPageTotalHeight: 0,\n positions: []\n }\n});\nlet warnedOnceInvalidRowHeight = false;\nconst getValidRowHeight = (rowHeightProp, defaultRowHeight, warningMessage) => {\n if (typeof rowHeightProp === 'number' && rowHeightProp > 0) {\n return rowHeightProp;\n }\n if (process.env.NODE_ENV !== 'production' && !warnedOnceInvalidRowHeight && typeof rowHeightProp !== 'undefined' && rowHeightProp !== null) {\n console.warn(warningMessage);\n warnedOnceInvalidRowHeight = true;\n }\n return defaultRowHeight;\n};\nconst rowHeightWarning = [`MUI: The \\`rowHeight\\` prop should be a number greater than 0.`, `The default value will be used instead.`].join('\\n');\nconst getRowHeightWarning = [`MUI: The \\`getRowHeight\\` prop should return a number greater than 0 or 'auto'.`, `The default value will be used instead.`].join('\\n');\n\n/**\n * @requires useGridPageSize (method)\n * @requires useGridPage (method)\n */\nexport const useGridRowsMeta = (apiRef, props) => {\n const {\n getRowHeight: getRowHeightProp,\n getRowSpacing,\n getEstimatedRowHeight\n } = props;\n const rowsHeightLookup = React.useRef(Object.create(null));\n\n // Inspired by https://github.com/bvaughn/react-virtualized/blob/master/source/Grid/utils/CellSizeAndPositionManager.js\n const lastMeasuredRowIndex = React.useRef(-1);\n const hasRowWithAutoHeight = React.useRef(false);\n const densityFactor = useGridSelector(apiRef, gridDensityFactorSelector);\n const filterModel = useGridSelector(apiRef, gridFilterModelSelector);\n const paginationState = useGridSelector(apiRef, gridPaginationSelector);\n const sortModel = useGridSelector(apiRef, gridSortModelSelector);\n const currentPage = useGridVisibleRows(apiRef, props);\n const pinnedRows = useGridSelector(apiRef, gridPinnedRowsSelector);\n const validRowHeight = getValidRowHeight(props.rowHeight, DATA_GRID_PROPS_DEFAULT_VALUES.rowHeight, rowHeightWarning);\n const rowHeight = Math.floor(validRowHeight * densityFactor);\n const hydrateRowsMeta = React.useCallback(() => {\n var _pinnedRows$top, _pinnedRows$bottom;\n hasRowWithAutoHeight.current = false;\n const calculateRowProcessedSizes = row => {\n if (!rowsHeightLookup.current[row.id]) {\n rowsHeightLookup.current[row.id] = {\n sizes: {\n baseCenter: rowHeight\n },\n isResized: false,\n autoHeight: false,\n needsFirstMeasurement: true // Assume all rows will need to be measured by default\n };\n }\n\n const {\n isResized,\n needsFirstMeasurement,\n sizes\n } = rowsHeightLookup.current[row.id];\n let baseRowHeight = typeof rowHeight === 'number' && rowHeight > 0 ? rowHeight : 52;\n const existingBaseRowHeight = sizes.baseCenter;\n if (isResized) {\n // Do not recalculate resized row height and use the value from the lookup\n baseRowHeight = existingBaseRowHeight;\n } else if (getRowHeightProp) {\n const rowHeightFromUser = getRowHeightProp(_extends({}, row, {\n densityFactor\n }));\n if (rowHeightFromUser === 'auto') {\n if (needsFirstMeasurement) {\n const estimatedRowHeight = getEstimatedRowHeight ? getEstimatedRowHeight(_extends({}, row, {\n densityFactor\n })) : rowHeight;\n\n // If the row was not measured yet use the estimated row height\n baseRowHeight = estimatedRowHeight != null ? estimatedRowHeight : rowHeight;\n } else {\n baseRowHeight = existingBaseRowHeight;\n }\n hasRowWithAutoHeight.current = true;\n rowsHeightLookup.current[row.id].autoHeight = true;\n } else {\n // Default back to base rowHeight if getRowHeight returns invalid value.\n baseRowHeight = getValidRowHeight(rowHeightFromUser, rowHeight, getRowHeightWarning);\n rowsHeightLookup.current[row.id].needsFirstMeasurement = false;\n rowsHeightLookup.current[row.id].autoHeight = false;\n }\n } else {\n rowsHeightLookup.current[row.id].needsFirstMeasurement = false;\n }\n const initialHeights = {};\n /* eslint-disable-next-line no-restricted-syntax */\n for (const key in sizes) {\n if (/^base[A-Z]/.test(key)) {\n initialHeights[key] = sizes[key];\n }\n }\n initialHeights.baseCenter = baseRowHeight;\n if (getRowSpacing) {\n var _spacing$top, _spacing$bottom;\n const indexRelativeToCurrentPage = apiRef.current.getRowIndexRelativeToVisibleRows(row.id);\n const spacing = getRowSpacing(_extends({}, row, {\n isFirstVisible: indexRelativeToCurrentPage === 0,\n isLastVisible: indexRelativeToCurrentPage === currentPage.rows.length - 1,\n indexRelativeToCurrentPage\n }));\n initialHeights.spacingTop = (_spacing$top = spacing.top) != null ? _spacing$top : 0;\n initialHeights.spacingBottom = (_spacing$bottom = spacing.bottom) != null ? _spacing$bottom : 0;\n }\n const processedSizes = apiRef.current.unstable_applyPipeProcessors('rowHeight', initialHeights, row);\n rowsHeightLookup.current[row.id].sizes = processedSizes;\n return processedSizes;\n };\n const positions = [];\n const currentPageTotalHeight = currentPage.rows.reduce((acc, row) => {\n positions.push(acc);\n let maximumBaseSize = 0;\n let otherSizes = 0;\n const processedSizes = calculateRowProcessedSizes(row);\n /* eslint-disable-next-line no-restricted-syntax, guard-for-in */\n for (const key in processedSizes) {\n const value = processedSizes[key];\n if (/^base[A-Z]/.test(key)) {\n maximumBaseSize = value > maximumBaseSize ? value : maximumBaseSize;\n } else {\n otherSizes += value;\n }\n }\n return acc + maximumBaseSize + otherSizes;\n }, 0);\n pinnedRows == null || (_pinnedRows$top = pinnedRows.top) == null ? void 0 : _pinnedRows$top.forEach(row => {\n calculateRowProcessedSizes(row);\n });\n pinnedRows == null || (_pinnedRows$bottom = pinnedRows.bottom) == null ? void 0 : _pinnedRows$bottom.forEach(row => {\n calculateRowProcessedSizes(row);\n });\n apiRef.current.setState(state => {\n return _extends({}, state, {\n rowsMeta: {\n currentPageTotalHeight,\n positions\n }\n });\n });\n if (!hasRowWithAutoHeight.current) {\n // No row has height=auto, so all rows are already measured\n lastMeasuredRowIndex.current = Infinity;\n }\n apiRef.current.forceUpdate();\n }, [apiRef, currentPage.rows, rowHeight, getRowHeightProp, getRowSpacing, getEstimatedRowHeight, pinnedRows, densityFactor]);\n const getRowHeight = React.useCallback(rowId => {\n const height = rowsHeightLookup.current[rowId];\n return height ? height.sizes.baseCenter : rowHeight;\n }, [rowHeight]);\n const getRowInternalSizes = rowId => {\n var _rowsHeightLookup$cur;\n return (_rowsHeightLookup$cur = rowsHeightLookup.current[rowId]) == null ? void 0 : _rowsHeightLookup$cur.sizes;\n };\n const setRowHeight = React.useCallback((id, height) => {\n rowsHeightLookup.current[id].sizes.baseCenter = height;\n rowsHeightLookup.current[id].isResized = true;\n rowsHeightLookup.current[id].needsFirstMeasurement = false;\n hydrateRowsMeta();\n }, [hydrateRowsMeta]);\n const debouncedHydrateRowsMeta = React.useMemo(() => debounce(hydrateRowsMeta), [hydrateRowsMeta]);\n const storeMeasuredRowHeight = React.useCallback((id, height, position) => {\n if (!rowsHeightLookup.current[id] || !rowsHeightLookup.current[id].autoHeight) {\n return;\n }\n\n // Only trigger hydration if the value is different, otherwise we trigger a loop\n const needsHydration = rowsHeightLookup.current[id].sizes[`base${capitalize(position)}`] !== height;\n rowsHeightLookup.current[id].needsFirstMeasurement = false;\n rowsHeightLookup.current[id].sizes[`base${capitalize(position)}`] = height;\n if (needsHydration) {\n debouncedHydrateRowsMeta();\n }\n }, [debouncedHydrateRowsMeta]);\n const rowHasAutoHeight = React.useCallback(id => {\n var _rowsHeightLookup$cur2;\n return ((_rowsHeightLookup$cur2 = rowsHeightLookup.current[id]) == null ? void 0 : _rowsHeightLookup$cur2.autoHeight) || false;\n }, []);\n const getLastMeasuredRowIndex = React.useCallback(() => {\n return lastMeasuredRowIndex.current;\n }, []);\n const setLastMeasuredRowIndex = React.useCallback(index => {\n if (hasRowWithAutoHeight.current && index > lastMeasuredRowIndex.current) {\n lastMeasuredRowIndex.current = index;\n }\n }, []);\n const resetRowHeights = React.useCallback(() => {\n rowsHeightLookup.current = {};\n hydrateRowsMeta();\n }, [hydrateRowsMeta]);\n\n // The effect is used to build the rows meta data - currentPageTotalHeight and positions.\n // Because of variable row height this is needed for the virtualization\n React.useEffect(() => {\n hydrateRowsMeta();\n }, [rowHeight, filterModel, paginationState, sortModel, hydrateRowsMeta]);\n useGridRegisterPipeApplier(apiRef, 'rowHeight', hydrateRowsMeta);\n const rowsMetaApi = {\n unstable_setLastMeasuredRowIndex: setLastMeasuredRowIndex,\n unstable_getRowHeight: getRowHeight,\n unstable_getRowInternalSizes: getRowInternalSizes,\n unstable_setRowHeight: setRowHeight,\n unstable_storeRowHeightMeasurement: storeMeasuredRowHeight,\n resetRowHeights\n };\n const rowsMetaPrivateApi = {\n getLastMeasuredRowIndex,\n rowHasAutoHeight\n };\n useGridApiMethod(apiRef, rowsMetaApi, 'public');\n useGridApiMethod(apiRef, rowsMetaPrivateApi, 'private');\n};","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport { GRID_DEFAULT_STRATEGY, useGridRegisterStrategyProcessor } from '../../core/strategyProcessing';\nimport { buildRootGroup, GRID_ROOT_GROUP_ID } from './gridRowsUtils';\nconst createFlatRowTree = rows => {\n const tree = {\n [GRID_ROOT_GROUP_ID]: _extends({}, buildRootGroup(), {\n children: rows\n })\n };\n for (let i = 0; i < rows.length; i += 1) {\n const rowId = rows[i];\n tree[rowId] = {\n id: rowId,\n depth: 0,\n parent: GRID_ROOT_GROUP_ID,\n type: 'leaf',\n groupingKey: null\n };\n }\n return {\n groupingName: GRID_DEFAULT_STRATEGY,\n tree,\n treeDepths: {\n 0: rows.length\n },\n dataRowIds: rows\n };\n};\nconst updateFlatRowTree = ({\n previousTree,\n actions\n}) => {\n const tree = _extends({}, previousTree);\n const idsToRemoveFromRootGroup = {};\n for (let i = 0; i < actions.remove.length; i += 1) {\n const idToDelete = actions.remove[i];\n idsToRemoveFromRootGroup[idToDelete] = true;\n delete tree[idToDelete];\n }\n for (let i = 0; i < actions.insert.length; i += 1) {\n const idToInsert = actions.insert[i];\n tree[idToInsert] = {\n id: idToInsert,\n depth: 0,\n parent: GRID_ROOT_GROUP_ID,\n type: 'leaf',\n groupingKey: null\n };\n }\n\n // TODO rows v6: Support row unpinning\n\n const rootGroup = tree[GRID_ROOT_GROUP_ID];\n let rootGroupChildren = [...rootGroup.children, ...actions.insert];\n if (Object.values(idsToRemoveFromRootGroup).length) {\n rootGroupChildren = rootGroupChildren.filter(id => !idsToRemoveFromRootGroup[id]);\n }\n tree[GRID_ROOT_GROUP_ID] = _extends({}, rootGroup, {\n children: rootGroupChildren\n });\n return {\n groupingName: GRID_DEFAULT_STRATEGY,\n tree,\n treeDepths: {\n 0: rootGroupChildren.length\n },\n dataRowIds: rootGroupChildren\n };\n};\nconst flatRowTreeCreationMethod = params => {\n if (params.updates.type === 'full') {\n return createFlatRowTree(params.updates.rows);\n }\n return updateFlatRowTree({\n previousTree: params.previousTree,\n actions: params.updates.actions\n });\n};\nexport const useGridRowsPreProcessors = apiRef => {\n useGridRegisterStrategyProcessor(apiRef, GRID_DEFAULT_STRATEGY, 'rowTreeCreation', flatRowTreeCreationMethod);\n};","import * as React from 'react';\nimport { useTheme } from '@mui/material/styles';\nimport { useGridLogger } from '../../utils/useGridLogger';\nimport { gridColumnPositionsSelector, gridVisibleColumnDefinitionsSelector } from '../columns/gridColumnsSelector';\nimport { useGridSelector } from '../../utils/useGridSelector';\nimport { gridPageSelector, gridPageSizeSelector } from '../pagination/gridPaginationSelector';\nimport { gridRowCountSelector } from '../rows/gridRowsSelector';\nimport { gridRowsMetaSelector } from '../rows/gridRowsMetaSelector';\nimport { useGridApiMethod } from '../../utils/useGridApiMethod';\nimport { gridExpandedSortedRowEntriesSelector } from '../filter/gridFilterSelector';\nimport { gridClasses } from '../../../constants/gridClasses';\n\n// Logic copied from https://www.w3.org/TR/wai-aria-practices/examples/listbox/js/listbox.js\n// Similar to https://developer.mozilla.org/en-US/docs/Web/API/Element/scrollIntoView\nfunction scrollIntoView(dimensions) {\n const {\n clientHeight,\n scrollTop,\n offsetHeight,\n offsetTop\n } = dimensions;\n const elementBottom = offsetTop + offsetHeight;\n // Always scroll to top when cell is higher than viewport to avoid scroll jump\n // See https://github.com/mui/mui-x/issues/4513 and https://github.com/mui/mui-x/issues/4514\n if (offsetHeight > clientHeight) {\n return offsetTop;\n }\n if (elementBottom - clientHeight > scrollTop) {\n return elementBottom - clientHeight;\n }\n if (offsetTop < scrollTop) {\n return offsetTop;\n }\n return undefined;\n}\n\n/**\n * @requires useGridPagination (state) - can be after, async only\n * @requires useGridColumns (state) - can be after, async only\n * @requires useGridRows (state) - can be after, async only\n * @requires useGridRowsMeta (state) - can be after, async only\n * @requires useGridFilter (state)\n * @requires useGridColumnSpanning (method)\n */\nexport const useGridScroll = (apiRef, props) => {\n const theme = useTheme();\n const logger = useGridLogger(apiRef, 'useGridScroll');\n const colRef = apiRef.current.columnHeadersElementRef;\n const virtualScrollerRef = apiRef.current.virtualScrollerRef;\n const visibleSortedRows = useGridSelector(apiRef, gridExpandedSortedRowEntriesSelector);\n const scrollToIndexes = React.useCallback(params => {\n const totalRowCount = gridRowCountSelector(apiRef);\n const visibleColumns = gridVisibleColumnDefinitionsSelector(apiRef);\n const scrollToHeader = params.rowIndex == null;\n if (!scrollToHeader && totalRowCount === 0 || visibleColumns.length === 0) {\n return false;\n }\n logger.debug(`Scrolling to cell at row ${params.rowIndex}, col: ${params.colIndex} `);\n let scrollCoordinates = {};\n if (params.colIndex != null) {\n const columnPositions = gridColumnPositionsSelector(apiRef);\n let cellWidth;\n if (typeof params.rowIndex !== 'undefined') {\n var _visibleSortedRows$pa;\n const rowId = (_visibleSortedRows$pa = visibleSortedRows[params.rowIndex]) == null ? void 0 : _visibleSortedRows$pa.id;\n const cellColSpanInfo = apiRef.current.unstable_getCellColSpanInfo(rowId, params.colIndex);\n if (cellColSpanInfo && !cellColSpanInfo.spannedByColSpan) {\n cellWidth = cellColSpanInfo.cellProps.width;\n }\n }\n if (typeof cellWidth === 'undefined') {\n cellWidth = visibleColumns[params.colIndex].computedWidth;\n }\n // When using RTL, `scrollLeft` becomes negative, so we must ensure that we only compare values.\n scrollCoordinates.left = scrollIntoView({\n clientHeight: virtualScrollerRef.current.clientWidth,\n scrollTop: Math.abs(virtualScrollerRef.current.scrollLeft),\n offsetHeight: cellWidth,\n offsetTop: columnPositions[params.colIndex]\n });\n }\n if (params.rowIndex != null) {\n var _querySelector, _querySelector2;\n const rowsMeta = gridRowsMetaSelector(apiRef.current.state);\n const page = gridPageSelector(apiRef);\n const pageSize = gridPageSizeSelector(apiRef);\n const elementIndex = !props.pagination ? params.rowIndex : params.rowIndex - page * pageSize;\n const targetOffsetHeight = rowsMeta.positions[elementIndex + 1] ? rowsMeta.positions[elementIndex + 1] - rowsMeta.positions[elementIndex] : rowsMeta.currentPageTotalHeight - rowsMeta.positions[elementIndex];\n const topPinnedRowsHeight = ((_querySelector = virtualScrollerRef.current.querySelector(`.${gridClasses['pinnedRows--top']}`)) == null ? void 0 : _querySelector.clientHeight) || 0;\n const bottomPinnedRowsHeight = ((_querySelector2 = virtualScrollerRef.current.querySelector(`.${gridClasses['pinnedRows--bottom']}`)) == null ? void 0 : _querySelector2.clientHeight) || 0;\n scrollCoordinates.top = scrollIntoView({\n clientHeight: virtualScrollerRef.current.clientHeight - topPinnedRowsHeight - bottomPinnedRowsHeight,\n scrollTop: virtualScrollerRef.current.scrollTop,\n offsetHeight: targetOffsetHeight,\n offsetTop: rowsMeta.positions[elementIndex]\n });\n }\n scrollCoordinates = apiRef.current.unstable_applyPipeProcessors('scrollToIndexes', scrollCoordinates, params);\n if (typeof scrollCoordinates.left !== undefined || typeof scrollCoordinates.top !== undefined) {\n apiRef.current.scroll(scrollCoordinates);\n return true;\n }\n return false;\n }, [logger, apiRef, virtualScrollerRef, props.pagination, visibleSortedRows]);\n const scroll = React.useCallback(params => {\n if (virtualScrollerRef.current && params.left != null && colRef.current) {\n const direction = theme.direction === 'rtl' ? -1 : 1;\n colRef.current.scrollLeft = params.left;\n virtualScrollerRef.current.scrollLeft = direction * params.left;\n logger.debug(`Scrolling left: ${params.left}`);\n }\n if (virtualScrollerRef.current && params.top != null) {\n virtualScrollerRef.current.scrollTop = params.top;\n logger.debug(`Scrolling top: ${params.top}`);\n }\n logger.debug(`Scrolling, updating container, and viewport`);\n }, [virtualScrollerRef, theme.direction, colRef, logger]);\n const getScrollPosition = React.useCallback(() => {\n if (!(virtualScrollerRef != null && virtualScrollerRef.current)) {\n return {\n top: 0,\n left: 0\n };\n }\n return {\n top: virtualScrollerRef.current.scrollTop,\n left: virtualScrollerRef.current.scrollLeft\n };\n }, [virtualScrollerRef]);\n const scrollApi = {\n scroll,\n scrollToIndexes,\n getScrollPosition\n };\n useGridApiMethod(apiRef, scrollApi, 'public');\n};","import { createSelector, createSelectorMemoized } from '../../../utils/createSelector';\nimport { gridRowsLookupSelector } from '../rows/gridRowsSelector';\n\n/**\n * @category Sorting\n * @ignore - do not document.\n */\nconst gridSortingStateSelector = state => state.sorting;\n\n/**\n * Get the id of the rows after the sorting process.\n * @category Sorting\n */\nexport const gridSortedRowIdsSelector = createSelector(gridSortingStateSelector, sortingState => sortingState.sortedRows);\n\n/**\n * Get the id and the model of the rows after the sorting process.\n * @category Sorting\n */\nexport const gridSortedRowEntriesSelector = createSelectorMemoized(gridSortedRowIdsSelector, gridRowsLookupSelector,\n// TODO rows v6: Is this the best approach ?\n(sortedIds, idRowsLookup) => sortedIds.map(id => {\n var _idRowsLookup$id;\n return {\n id,\n model: (_idRowsLookup$id = idRowsLookup[id]) != null ? _idRowsLookup$id : {}\n };\n}));\n\n/**\n * Get the current sorting model.\n * @category Sorting\n */\nexport const gridSortModelSelector = createSelector(gridSortingStateSelector, sorting => sorting.sortModel);\n/**\n * @category Sorting\n * @ignore - do not document.\n */\nexport const gridSortColumnLookupSelector = createSelectorMemoized(gridSortModelSelector, sortModel => {\n const result = sortModel.reduce((res, sortItem, index) => {\n res[sortItem.field] = {\n sortDirection: sortItem.sort,\n sortIndex: sortModel.length > 1 ? index + 1 : undefined\n };\n return res;\n }, {});\n return result;\n});","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport { buildWarning } from '../../../utils/warning';\nconst sortModelDisableMultiColumnsSortingWarning = buildWarning(['MUI: The `sortModel` can only contain a single item when the `disableMultipleColumnsSorting` prop is set to `true`.', 'If you are using the community version of the `DataGrid`, this prop is always `true`.'], 'error');\nexport const sanitizeSortModel = (model, disableMultipleColumnsSorting) => {\n if (disableMultipleColumnsSorting && model.length > 1) {\n sortModelDisableMultiColumnsSortingWarning();\n return [model[0]];\n }\n return model;\n};\nexport const mergeStateWithSortModel = (sortModel, disableMultipleColumnsSorting) => state => _extends({}, state, {\n sorting: _extends({}, state.sorting, {\n sortModel: sanitizeSortModel(sortModel, disableMultipleColumnsSorting)\n })\n});\nconst isDesc = direction => direction === 'desc';\n\n/**\n * Transform an item of the sorting model into a method comparing two rows.\n * @param {GridSortItem} sortItem The sort item we want to apply.\n * @param {React.MutableRefObject} apiRef The API of the grid.\n * @returns {GridParsedSortItem | null} The parsed sort item. Returns `null` is the sort item is not valid.\n */\nconst parseSortItem = (sortItem, apiRef) => {\n const column = apiRef.current.getColumn(sortItem.field);\n if (!column) {\n return null;\n }\n const comparator = isDesc(sortItem.sort) ? (...args) => -1 * column.sortComparator(...args) : column.sortComparator;\n const getSortCellParams = id => ({\n id,\n field: column.field,\n rowNode: apiRef.current.getRowNode(id),\n value: apiRef.current.getCellValue(id, column.field),\n api: apiRef.current\n });\n return {\n getSortCellParams,\n comparator\n };\n};\n/**\n * Compare two rows according to a list of valid sort items.\n * The `row1Params` and `row2Params` must have the same length as `parsedSortItems`,\n * and each of their index must contain the `GridSortCellParams` of the sort item with the same index.\n * @param {GridParsedSortItem[]} parsedSortItems All the sort items with which we want to compare the rows.\n * @param {GridRowAggregatedSortingParams} row1 The node and params of the 1st row for each sort item.\n * @param {GridRowAggregatedSortingParams} row2 The node and params of the 2nd row for each sort item.\n */\nconst compareRows = (parsedSortItems, row1, row2) => {\n return parsedSortItems.reduce((res, item, index) => {\n if (res !== 0) {\n // return the results of the first comparator which distinguish the two rows\n return res;\n }\n const sortCellParams1 = row1.params[index];\n const sortCellParams2 = row2.params[index];\n res = item.comparator(sortCellParams1.value, sortCellParams2.value, sortCellParams1, sortCellParams2);\n return res;\n }, 0);\n};\n\n/**\n * Generates a method to easily sort a list of rows according to the current sort model.\n * @param {GridSortModel} sortModel The model with which we want to sort the rows.\n * @param {React.MutableRefObject} apiRef The API of the grid.\n * @returns {GridSortingModelApplier | null} A method that generates a list of sorted row ids from a list of rows according to the current sort model. If `null`, we consider that the rows should remain in the order there were provided.\n */\nexport const buildAggregatedSortingApplier = (sortModel, apiRef) => {\n const comparatorList = sortModel.map(item => parseSortItem(item, apiRef)).filter(comparator => !!comparator);\n if (comparatorList.length === 0) {\n return null;\n }\n return rowList => rowList.map(node => ({\n node,\n params: comparatorList.map(el => el.getSortCellParams(node.id))\n })).sort((a, b) => compareRows(comparatorList, a, b)).map(row => row.node.id);\n};\nexport const getNextGridSortDirection = (sortingOrder, current) => {\n const currentIdx = sortingOrder.indexOf(current);\n if (!current || currentIdx === -1 || currentIdx + 1 === sortingOrder.length) {\n return sortingOrder[0];\n }\n return sortingOrder[currentIdx + 1];\n};\nconst gridNillComparator = (v1, v2) => {\n if (v1 == null && v2 != null) {\n return -1;\n }\n if (v2 == null && v1 != null) {\n return 1;\n }\n if (v1 == null && v2 == null) {\n return 0;\n }\n return null;\n};\nconst collator = new Intl.Collator();\nexport const gridStringOrNumberComparator = (value1, value2) => {\n const nillResult = gridNillComparator(value1, value2);\n if (nillResult !== null) {\n return nillResult;\n }\n if (typeof value1 === 'string') {\n return collator.compare(value1.toString(), value2.toString());\n }\n return value1 - value2;\n};\nexport const gridNumberComparator = (value1, value2) => {\n const nillResult = gridNillComparator(value1, value2);\n if (nillResult !== null) {\n return nillResult;\n }\n return Number(value1) - Number(value2);\n};\nexport const gridDateComparator = (value1, value2) => {\n const nillResult = gridNillComparator(value1, value2);\n if (nillResult !== null) {\n return nillResult;\n }\n if (value1 > value2) {\n return 1;\n }\n if (value1 < value2) {\n return -1;\n }\n return 0;\n};","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport * as React from 'react';\nimport { unstable_useEnhancedEffect as useEnhancedEffect } from '@mui/utils';\nimport { isEnterKey } from '../../../utils/keyboardUtils';\nimport { useGridApiEventHandler } from '../../utils/useGridApiEventHandler';\nimport { useGridApiMethod } from '../../utils/useGridApiMethod';\nimport { useGridLogger } from '../../utils/useGridLogger';\nimport { gridColumnLookupSelector } from '../columns/gridColumnsSelector';\nimport { gridSortedRowEntriesSelector, gridSortedRowIdsSelector, gridSortModelSelector } from './gridSortingSelector';\nimport { GRID_ROOT_GROUP_ID, gridRowTreeSelector } from '../rows';\nimport { useFirstRender } from '../../utils/useFirstRender';\nimport { useGridRegisterStrategyProcessor, GRID_DEFAULT_STRATEGY } from '../../core/strategyProcessing';\nimport { buildAggregatedSortingApplier, mergeStateWithSortModel, getNextGridSortDirection, sanitizeSortModel } from './gridSortingUtils';\nimport { useGridRegisterPipeProcessor } from '../../core/pipeProcessing';\nimport { getTreeNodeDescendants } from '../rows/gridRowsUtils';\nexport const sortingStateInitializer = (state, props) => {\n var _ref, _props$sortModel, _props$initialState;\n const sortModel = (_ref = (_props$sortModel = props.sortModel) != null ? _props$sortModel : (_props$initialState = props.initialState) == null || (_props$initialState = _props$initialState.sorting) == null ? void 0 : _props$initialState.sortModel) != null ? _ref : [];\n return _extends({}, state, {\n sorting: {\n sortModel: sanitizeSortModel(sortModel, props.disableMultipleColumnsSorting),\n sortedRows: []\n }\n });\n};\n\n/**\n * @requires useGridRows (event)\n * @requires useGridColumns (event)\n */\nexport const useGridSorting = (apiRef, props) => {\n var _props$initialState3;\n const logger = useGridLogger(apiRef, 'useGridSorting');\n apiRef.current.registerControlState({\n stateId: 'sortModel',\n propModel: props.sortModel,\n propOnChange: props.onSortModelChange,\n stateSelector: gridSortModelSelector,\n changeEvent: 'sortModelChange'\n });\n const upsertSortModel = React.useCallback((field, sortItem) => {\n const sortModel = gridSortModelSelector(apiRef);\n const existingIdx = sortModel.findIndex(c => c.field === field);\n let newSortModel = [...sortModel];\n if (existingIdx > -1) {\n if (!sortItem) {\n newSortModel.splice(existingIdx, 1);\n } else {\n newSortModel.splice(existingIdx, 1, sortItem);\n }\n } else {\n newSortModel = [...sortModel, sortItem];\n }\n return newSortModel;\n }, [apiRef]);\n const createSortItem = React.useCallback((col, directionOverride) => {\n var _col$sortingOrder2;\n const sortModel = gridSortModelSelector(apiRef);\n const existing = sortModel.find(c => c.field === col.field);\n if (existing) {\n var _col$sortingOrder;\n const nextSort = directionOverride === undefined ? getNextGridSortDirection((_col$sortingOrder = col.sortingOrder) != null ? _col$sortingOrder : props.sortingOrder, existing.sort) : directionOverride;\n return nextSort == null ? undefined : _extends({}, existing, {\n sort: nextSort\n });\n }\n return {\n field: col.field,\n sort: directionOverride === undefined ? getNextGridSortDirection((_col$sortingOrder2 = col.sortingOrder) != null ? _col$sortingOrder2 : props.sortingOrder) : directionOverride\n };\n }, [apiRef, props.sortingOrder]);\n const addColumnMenuItem = React.useCallback((columnMenuItems, colDef) => {\n if (colDef == null || colDef.sortable === false) {\n return columnMenuItems;\n }\n const sortingOrder = colDef.sortingOrder || props.sortingOrder;\n if (sortingOrder.some(item => !!item)) {\n return [...columnMenuItems, 'columnMenuSortItem'];\n }\n return columnMenuItems;\n }, [props.sortingOrder]);\n\n /**\n * API METHODS\n */\n const applySorting = React.useCallback(() => {\n apiRef.current.setState(state => {\n if (props.sortingMode === 'server') {\n logger.debug('Skipping sorting rows as sortingMode = server');\n return _extends({}, state, {\n sorting: _extends({}, state.sorting, {\n sortedRows: getTreeNodeDescendants(gridRowTreeSelector(apiRef), GRID_ROOT_GROUP_ID, false)\n })\n });\n }\n const sortModel = gridSortModelSelector(state, apiRef.current.instanceId);\n const sortRowList = buildAggregatedSortingApplier(sortModel, apiRef);\n const sortedRows = apiRef.current.applyStrategyProcessor('sorting', {\n sortRowList\n });\n return _extends({}, state, {\n sorting: _extends({}, state.sorting, {\n sortedRows\n })\n });\n });\n apiRef.current.publishEvent('sortedRowsSet');\n apiRef.current.forceUpdate();\n }, [apiRef, logger, props.sortingMode]);\n const setSortModel = React.useCallback(model => {\n const currentModel = gridSortModelSelector(apiRef);\n if (currentModel !== model) {\n logger.debug(`Setting sort model`);\n apiRef.current.setState(mergeStateWithSortModel(model, props.disableMultipleColumnsSorting));\n apiRef.current.forceUpdate();\n apiRef.current.applySorting();\n }\n }, [apiRef, logger, props.disableMultipleColumnsSorting]);\n const sortColumn = React.useCallback((column, direction, allowMultipleSorting) => {\n if (!column.sortable) {\n return;\n }\n const sortItem = createSortItem(column, direction);\n let sortModel;\n if (!allowMultipleSorting || props.disableMultipleColumnsSorting) {\n sortModel = !sortItem ? [] : [sortItem];\n } else {\n sortModel = upsertSortModel(column.field, sortItem);\n }\n apiRef.current.setSortModel(sortModel);\n }, [apiRef, upsertSortModel, createSortItem, props.disableMultipleColumnsSorting]);\n const getSortModel = React.useCallback(() => gridSortModelSelector(apiRef), [apiRef]);\n const getSortedRows = React.useCallback(() => {\n const sortedRows = gridSortedRowEntriesSelector(apiRef);\n return sortedRows.map(row => row.model);\n }, [apiRef]);\n const getSortedRowIds = React.useCallback(() => gridSortedRowIdsSelector(apiRef), [apiRef]);\n const getRowIdFromRowIndex = React.useCallback(index => apiRef.current.getSortedRowIds()[index], [apiRef]);\n const sortApi = {\n getSortModel,\n getSortedRows,\n getSortedRowIds,\n getRowIdFromRowIndex,\n setSortModel,\n sortColumn,\n applySorting\n };\n useGridApiMethod(apiRef, sortApi, 'public');\n\n /**\n * PRE-PROCESSING\n */\n const stateExportPreProcessing = React.useCallback((prevState, context) => {\n var _props$initialState2;\n const sortModelToExport = gridSortModelSelector(apiRef);\n const shouldExportSortModel =\n // Always export if the `exportOnlyDirtyModels` property is not activated\n !context.exportOnlyDirtyModels ||\n // Always export if the model is controlled\n props.sortModel != null ||\n // Always export if the model has been initialized\n ((_props$initialState2 = props.initialState) == null || (_props$initialState2 = _props$initialState2.sorting) == null ? void 0 : _props$initialState2.sortModel) != null ||\n // Export if the model is not empty\n sortModelToExport.length > 0;\n if (!shouldExportSortModel) {\n return prevState;\n }\n return _extends({}, prevState, {\n sorting: {\n sortModel: sortModelToExport\n }\n });\n }, [apiRef, props.sortModel, (_props$initialState3 = props.initialState) == null || (_props$initialState3 = _props$initialState3.sorting) == null ? void 0 : _props$initialState3.sortModel]);\n const stateRestorePreProcessing = React.useCallback((params, context) => {\n var _context$stateToResto;\n const sortModel = (_context$stateToResto = context.stateToRestore.sorting) == null ? void 0 : _context$stateToResto.sortModel;\n if (sortModel == null) {\n return params;\n }\n apiRef.current.setState(mergeStateWithSortModel(sortModel, props.disableMultipleColumnsSorting));\n return _extends({}, params, {\n callbacks: [...params.callbacks, apiRef.current.applySorting]\n });\n }, [apiRef, props.disableMultipleColumnsSorting]);\n const flatSortingMethod = React.useCallback(params => {\n const rowTree = gridRowTreeSelector(apiRef);\n const rootGroupNode = rowTree[GRID_ROOT_GROUP_ID];\n const sortedChildren = params.sortRowList ? params.sortRowList(rootGroupNode.children.map(childId => rowTree[childId])) : [...rootGroupNode.children];\n if (rootGroupNode.footerId != null) {\n sortedChildren.push(rootGroupNode.footerId);\n }\n return sortedChildren;\n }, [apiRef]);\n useGridRegisterPipeProcessor(apiRef, 'exportState', stateExportPreProcessing);\n useGridRegisterPipeProcessor(apiRef, 'restoreState', stateRestorePreProcessing);\n useGridRegisterStrategyProcessor(apiRef, GRID_DEFAULT_STRATEGY, 'sorting', flatSortingMethod);\n\n /**\n * EVENTS\n */\n const handleColumnHeaderClick = React.useCallback(({\n colDef\n }, event) => {\n const allowMultipleSorting = event.shiftKey || event.metaKey || event.ctrlKey;\n sortColumn(colDef, undefined, allowMultipleSorting);\n }, [sortColumn]);\n const handleColumnHeaderKeyDown = React.useCallback(({\n colDef\n }, event) => {\n // Ctrl + Enter opens the column menu\n if (isEnterKey(event.key) && !event.ctrlKey && !event.metaKey) {\n sortColumn(colDef, undefined, event.shiftKey);\n }\n }, [sortColumn]);\n const handleColumnsChange = React.useCallback(() => {\n // When the columns change we check that the sorted columns are still part of the dataset\n const sortModel = gridSortModelSelector(apiRef);\n const latestColumns = gridColumnLookupSelector(apiRef);\n if (sortModel.length > 0) {\n const newModel = sortModel.filter(sortItem => latestColumns[sortItem.field]);\n if (newModel.length < sortModel.length) {\n apiRef.current.setSortModel(newModel);\n }\n }\n }, [apiRef]);\n const handleStrategyProcessorChange = React.useCallback(methodName => {\n if (methodName === 'sorting') {\n apiRef.current.applySorting();\n }\n }, [apiRef]);\n useGridRegisterPipeProcessor(apiRef, 'columnMenu', addColumnMenuItem);\n useGridApiEventHandler(apiRef, 'columnHeaderClick', handleColumnHeaderClick);\n useGridApiEventHandler(apiRef, 'columnHeaderKeyDown', handleColumnHeaderKeyDown);\n useGridApiEventHandler(apiRef, 'rowsSet', apiRef.current.applySorting);\n useGridApiEventHandler(apiRef, 'columnsChange', handleColumnsChange);\n useGridApiEventHandler(apiRef, 'activeStrategyProcessorChange', handleStrategyProcessorChange);\n\n /**\n * 1ST RENDER\n */\n useFirstRender(() => {\n apiRef.current.applySorting();\n });\n\n /**\n * EFFECTS\n */\n useEnhancedEffect(() => {\n if (props.sortModel !== undefined) {\n apiRef.current.setSortModel(props.sortModel);\n }\n }, [apiRef, props.sortModel]);\n};","import * as React from 'react';\nimport { useGridApiMethod } from '../../utils';\nexport const useGridStatePersistence = apiRef => {\n const exportState = React.useCallback((params = {}) => {\n const stateToExport = apiRef.current.unstable_applyPipeProcessors('exportState', {}, params);\n return stateToExport;\n }, [apiRef]);\n const restoreState = React.useCallback(stateToRestore => {\n const response = apiRef.current.unstable_applyPipeProcessors('restoreState', {\n callbacks: []\n }, {\n stateToRestore\n });\n response.callbacks.forEach(callback => {\n callback();\n });\n apiRef.current.forceUpdate();\n }, [apiRef]);\n const statePersistenceApi = {\n exportState,\n restoreState\n };\n useGridApiMethod(apiRef, statePersistenceApi, 'public');\n};","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport _objectWithoutPropertiesLoose from \"@babel/runtime/helpers/esm/objectWithoutPropertiesLoose\";\nconst _excluded = [\"style\"],\n _excluded2 = [\"style\"];\nimport * as React from 'react';\nimport * as ReactDOM from 'react-dom';\nimport { unstable_useForkRef as useForkRef, unstable_useEnhancedEffect as useEnhancedEffect, unstable_useEventCallback as useEventCallback } from '@mui/utils';\nimport { useTheme } from '@mui/material/styles';\nimport { defaultMemoize } from 'reselect';\nimport { useGridPrivateApiContext } from '../../utils/useGridPrivateApiContext';\nimport { useGridRootProps } from '../../utils/useGridRootProps';\nimport { useGridSelector } from '../../utils/useGridSelector';\nimport { gridVisibleColumnDefinitionsSelector, gridColumnsTotalWidthSelector, gridColumnPositionsSelector } from '../columns/gridColumnsSelector';\nimport { gridFocusCellSelector, gridTabIndexCellSelector } from '../focus/gridFocusStateSelector';\nimport { useGridVisibleRows } from '../../utils/useGridVisibleRows';\nimport { useGridApiEventHandler } from '../../utils/useGridApiEventHandler';\nimport { clamp } from '../../../utils/utils';\nimport { selectedIdsLookupSelector } from '../rowSelection/gridRowSelectionSelector';\nimport { gridRowsMetaSelector } from '../rows/gridRowsMetaSelector';\nimport { getFirstNonSpannedColumnToRender } from '../columns/gridColumnsUtils';\nimport { getMinimalContentHeight } from '../rows/gridRowsUtils';\nimport { jsx as _jsx } from \"react/jsx-runtime\";\n// Uses binary search to avoid looping through all possible positions\nexport function binarySearch(offset, positions, sliceStart = 0, sliceEnd = positions.length) {\n if (positions.length <= 0) {\n return -1;\n }\n if (sliceStart >= sliceEnd) {\n return sliceStart;\n }\n const pivot = sliceStart + Math.floor((sliceEnd - sliceStart) / 2);\n const itemOffset = positions[pivot];\n return offset <= itemOffset ? binarySearch(offset, positions, sliceStart, pivot) : binarySearch(offset, positions, pivot + 1, sliceEnd);\n}\nfunction exponentialSearch(offset, positions, index) {\n let interval = 1;\n while (index < positions.length && Math.abs(positions[index]) < offset) {\n index += interval;\n interval *= 2;\n }\n return binarySearch(offset, positions, Math.floor(index / 2), Math.min(index, positions.length));\n}\nexport const getRenderableIndexes = ({\n firstIndex,\n lastIndex,\n buffer,\n minFirstIndex,\n maxLastIndex\n}) => {\n return [clamp(firstIndex - buffer, minFirstIndex, maxLastIndex), clamp(lastIndex + buffer, minFirstIndex, maxLastIndex)];\n};\nexport const areRenderContextsEqual = (context1, context2) => {\n if (context1 === context2) {\n return true;\n }\n return context1.firstRowIndex === context2.firstRowIndex && context1.lastRowIndex === context2.lastRowIndex && context1.firstColumnIndex === context2.firstColumnIndex && context1.lastColumnIndex === context2.lastColumnIndex;\n};\n// The `maxSize` is 3 so that reselect caches the `renderedColumns` values for the pinned left,\n// unpinned, and pinned right sections.\nconst MEMOIZE_OPTIONS = {\n maxSize: 3\n};\nexport const useGridVirtualScroller = props => {\n var _currentPage$range3, _currentPage$range4;\n const apiRef = useGridPrivateApiContext();\n const rootProps = useGridRootProps();\n const visibleColumns = useGridSelector(apiRef, gridVisibleColumnDefinitionsSelector);\n const {\n ref,\n disableVirtualization,\n onRenderZonePositioning,\n renderZoneMinColumnIndex = 0,\n renderZoneMaxColumnIndex = visibleColumns.length,\n getRowProps\n } = props;\n const theme = useTheme();\n const columnPositions = useGridSelector(apiRef, gridColumnPositionsSelector);\n const columnsTotalWidth = useGridSelector(apiRef, gridColumnsTotalWidthSelector);\n const cellFocus = useGridSelector(apiRef, gridFocusCellSelector);\n const cellTabIndex = useGridSelector(apiRef, gridTabIndexCellSelector);\n const rowsMeta = useGridSelector(apiRef, gridRowsMetaSelector);\n const selectedRowsLookup = useGridSelector(apiRef, selectedIdsLookupSelector);\n const currentPage = useGridVisibleRows(apiRef, rootProps);\n const renderZoneRef = React.useRef(null);\n const rootRef = React.useRef(null);\n const handleRef = useForkRef(ref, rootRef);\n const [renderContext, setRenderContext] = React.useState(null);\n const prevRenderContext = React.useRef(renderContext);\n const scrollPosition = React.useRef({\n top: 0,\n left: 0\n });\n const [containerDimensions, setContainerDimensions] = React.useState({\n width: null,\n height: null\n });\n const prevTotalWidth = React.useRef(columnsTotalWidth);\n const rowStyleCache = React.useRef(Object.create(null));\n const prevGetRowProps = React.useRef();\n const prevRootRowStyle = React.useRef();\n const getRenderedColumnsRef = React.useRef(defaultMemoize((columns, firstColumnToRender, lastColumnToRender, minFirstColumn, maxLastColumn, indexOfColumnWithFocusedCell) => {\n // If the selected column is not within the current range of columns being displayed,\n // we need to render it at either the left or right of the columns,\n // depending on whether it is above or below the range.\n let focusedCellColumnIndexNotInRange;\n const renderedColumns = columns.slice(firstColumnToRender, lastColumnToRender);\n if (indexOfColumnWithFocusedCell > -1) {\n // check if it is not on the left pinned column.\n if (firstColumnToRender > indexOfColumnWithFocusedCell && indexOfColumnWithFocusedCell >= minFirstColumn) {\n focusedCellColumnIndexNotInRange = indexOfColumnWithFocusedCell;\n }\n // check if it is not on the right pinned column.\n else if (lastColumnToRender < indexOfColumnWithFocusedCell && indexOfColumnWithFocusedCell < maxLastColumn) {\n focusedCellColumnIndexNotInRange = indexOfColumnWithFocusedCell;\n }\n }\n return {\n focusedCellColumnIndexNotInRange,\n renderedColumns\n };\n }, MEMOIZE_OPTIONS));\n const indexOfColumnWithFocusedCell = React.useMemo(() => {\n if (cellFocus !== null) {\n return visibleColumns.findIndex(column => column.field === cellFocus.field);\n }\n return -1;\n }, [cellFocus, visibleColumns]);\n const getNearestIndexToRender = React.useCallback(offset => {\n var _currentPage$range, _currentPage$range2;\n const lastMeasuredIndexRelativeToAllRows = apiRef.current.getLastMeasuredRowIndex();\n let allRowsMeasured = lastMeasuredIndexRelativeToAllRows === Infinity;\n if ((_currentPage$range = currentPage.range) != null && _currentPage$range.lastRowIndex && !allRowsMeasured) {\n // Check if all rows in this page are already measured\n allRowsMeasured = lastMeasuredIndexRelativeToAllRows >= currentPage.range.lastRowIndex;\n }\n const lastMeasuredIndexRelativeToCurrentPage = clamp(lastMeasuredIndexRelativeToAllRows - (((_currentPage$range2 = currentPage.range) == null ? void 0 : _currentPage$range2.firstRowIndex) || 0), 0, rowsMeta.positions.length);\n if (allRowsMeasured || rowsMeta.positions[lastMeasuredIndexRelativeToCurrentPage] >= offset) {\n // If all rows were measured (when no row has \"auto\" as height) or all rows before the offset\n // were measured, then use a binary search because it's faster.\n return binarySearch(offset, rowsMeta.positions);\n }\n\n // Otherwise, use an exponential search.\n // If rows have \"auto\" as height, their positions will be based on estimated heights.\n // In this case, we can skip several steps until we find a position higher than the offset.\n // Inspired by https://github.com/bvaughn/react-virtualized/blob/master/source/Grid/utils/CellSizeAndPositionManager.js\n return exponentialSearch(offset, rowsMeta.positions, lastMeasuredIndexRelativeToCurrentPage);\n }, [apiRef, (_currentPage$range3 = currentPage.range) == null ? void 0 : _currentPage$range3.firstRowIndex, (_currentPage$range4 = currentPage.range) == null ? void 0 : _currentPage$range4.lastRowIndex, rowsMeta.positions]);\n const computeRenderContext = React.useCallback(() => {\n if (disableVirtualization) {\n return {\n firstRowIndex: 0,\n lastRowIndex: currentPage.rows.length,\n firstColumnIndex: 0,\n lastColumnIndex: visibleColumns.length\n };\n }\n const {\n top,\n left\n } = scrollPosition.current;\n\n // Clamp the value because the search may return an index out of bounds.\n // In the last index, this is not needed because Array.slice doesn't include it.\n const firstRowIndex = Math.min(getNearestIndexToRender(top), rowsMeta.positions.length - 1);\n const lastRowIndex = rootProps.autoHeight ? firstRowIndex + currentPage.rows.length : getNearestIndexToRender(top + containerDimensions.height);\n let hasRowWithAutoHeight = false;\n let firstColumnIndex = 0;\n let lastColumnIndex = columnPositions.length;\n const [firstRowToRender, lastRowToRender] = getRenderableIndexes({\n firstIndex: firstRowIndex,\n lastIndex: lastRowIndex,\n minFirstIndex: 0,\n maxLastIndex: currentPage.rows.length,\n buffer: rootProps.rowBuffer\n });\n for (let i = firstRowToRender; i < lastRowToRender && !hasRowWithAutoHeight; i += 1) {\n const row = currentPage.rows[i];\n hasRowWithAutoHeight = apiRef.current.rowHasAutoHeight(row.id);\n }\n if (!hasRowWithAutoHeight) {\n firstColumnIndex = binarySearch(Math.abs(left), columnPositions);\n lastColumnIndex = binarySearch(Math.abs(left) + containerDimensions.width, columnPositions);\n }\n return {\n firstRowIndex,\n lastRowIndex,\n firstColumnIndex,\n lastColumnIndex\n };\n }, [disableVirtualization, getNearestIndexToRender, rowsMeta.positions.length, rootProps.autoHeight, rootProps.rowBuffer, currentPage.rows, columnPositions, visibleColumns.length, apiRef, containerDimensions]);\n useEnhancedEffect(() => {\n if (disableVirtualization) {\n renderZoneRef.current.style.transform = `translate3d(0px, 0px, 0px)`;\n } else {\n // TODO a scroll reset should not be necessary\n rootRef.current.scrollLeft = 0;\n rootRef.current.scrollTop = 0;\n }\n }, [disableVirtualization]);\n useEnhancedEffect(() => {\n setContainerDimensions({\n width: rootRef.current.clientWidth,\n height: rootRef.current.clientHeight\n });\n }, [rowsMeta.currentPageTotalHeight]);\n const handleResize = React.useCallback(() => {\n if (rootRef.current) {\n setContainerDimensions({\n width: rootRef.current.clientWidth,\n height: rootRef.current.clientHeight\n });\n }\n }, []);\n useGridApiEventHandler(apiRef, 'debouncedResize', handleResize);\n const updateRenderZonePosition = React.useCallback(nextRenderContext => {\n const [firstRowToRender, lastRowToRender] = getRenderableIndexes({\n firstIndex: nextRenderContext.firstRowIndex,\n lastIndex: nextRenderContext.lastRowIndex,\n minFirstIndex: 0,\n maxLastIndex: currentPage.rows.length,\n buffer: rootProps.rowBuffer\n });\n const [initialFirstColumnToRender] = getRenderableIndexes({\n firstIndex: nextRenderContext.firstColumnIndex,\n lastIndex: nextRenderContext.lastColumnIndex,\n minFirstIndex: renderZoneMinColumnIndex,\n maxLastIndex: renderZoneMaxColumnIndex,\n buffer: rootProps.columnBuffer\n });\n const firstColumnToRender = getFirstNonSpannedColumnToRender({\n firstColumnToRender: initialFirstColumnToRender,\n apiRef,\n firstRowToRender,\n lastRowToRender,\n visibleRows: currentPage.rows\n });\n const direction = theme.direction === 'ltr' ? 1 : -1;\n const top = gridRowsMetaSelector(apiRef.current.state).positions[firstRowToRender];\n const left = direction * gridColumnPositionsSelector(apiRef)[firstColumnToRender]; // Call directly the selector because it might be outdated when this method is called\n renderZoneRef.current.style.transform = `translate3d(${left}px, ${top}px, 0px)`;\n if (typeof onRenderZonePositioning === 'function') {\n onRenderZonePositioning({\n top,\n left\n });\n }\n }, [apiRef, currentPage.rows, onRenderZonePositioning, renderZoneMinColumnIndex, renderZoneMaxColumnIndex, rootProps.columnBuffer, rootProps.rowBuffer, theme.direction]);\n const updateRenderContext = React.useCallback(nextRenderContext => {\n if (prevRenderContext.current && areRenderContextsEqual(nextRenderContext, prevRenderContext.current)) {\n updateRenderZonePosition(nextRenderContext);\n return;\n }\n setRenderContext(nextRenderContext);\n updateRenderZonePosition(nextRenderContext);\n const [firstRowToRender, lastRowToRender] = getRenderableIndexes({\n firstIndex: nextRenderContext.firstRowIndex,\n lastIndex: nextRenderContext.lastRowIndex,\n minFirstIndex: 0,\n maxLastIndex: currentPage.rows.length,\n buffer: rootProps.rowBuffer\n });\n apiRef.current.publishEvent('renderedRowsIntervalChange', {\n firstRowToRender,\n lastRowToRender\n });\n prevRenderContext.current = nextRenderContext;\n }, [apiRef, setRenderContext, prevRenderContext, currentPage.rows.length, rootProps.rowBuffer, updateRenderZonePosition]);\n useEnhancedEffect(() => {\n if (containerDimensions.width == null) {\n return;\n }\n const initialRenderContext = computeRenderContext();\n updateRenderContext(initialRenderContext);\n const {\n top,\n left\n } = scrollPosition.current;\n const params = {\n top,\n left,\n renderContext: initialRenderContext\n };\n apiRef.current.publishEvent('scrollPositionChange', params);\n }, [apiRef, computeRenderContext, containerDimensions.width, updateRenderContext]);\n const handleScroll = useEventCallback(event => {\n const {\n scrollTop,\n scrollLeft\n } = event.currentTarget;\n scrollPosition.current.top = scrollTop;\n scrollPosition.current.left = scrollLeft;\n\n // On iOS and macOS, negative offsets are possible when swiping past the start\n if (!prevRenderContext.current || scrollTop < 0) {\n return;\n }\n if (theme.direction === 'ltr') {\n if (scrollLeft < 0) {\n return;\n }\n }\n if (theme.direction === 'rtl') {\n if (scrollLeft > 0) {\n return;\n }\n }\n\n // When virtualization is disabled, the context never changes during scroll\n const nextRenderContext = disableVirtualization ? prevRenderContext.current : computeRenderContext();\n const topRowsScrolledSincePreviousRender = Math.abs(nextRenderContext.firstRowIndex - prevRenderContext.current.firstRowIndex);\n const bottomRowsScrolledSincePreviousRender = Math.abs(nextRenderContext.lastRowIndex - prevRenderContext.current.lastRowIndex);\n const topColumnsScrolledSincePreviousRender = Math.abs(nextRenderContext.firstColumnIndex - prevRenderContext.current.firstColumnIndex);\n const bottomColumnsScrolledSincePreviousRender = Math.abs(nextRenderContext.lastColumnIndex - prevRenderContext.current.lastColumnIndex);\n const shouldSetState = topRowsScrolledSincePreviousRender >= rootProps.rowThreshold || bottomRowsScrolledSincePreviousRender >= rootProps.rowThreshold || topColumnsScrolledSincePreviousRender >= rootProps.columnThreshold || bottomColumnsScrolledSincePreviousRender >= rootProps.columnThreshold || prevTotalWidth.current !== columnsTotalWidth;\n apiRef.current.publishEvent('scrollPositionChange', {\n top: scrollTop,\n left: scrollLeft,\n renderContext: shouldSetState ? nextRenderContext : prevRenderContext.current\n }, event);\n if (shouldSetState) {\n // Prevents batching render context changes\n ReactDOM.flushSync(() => {\n updateRenderContext(nextRenderContext);\n });\n prevTotalWidth.current = columnsTotalWidth;\n }\n });\n const handleWheel = useEventCallback(event => {\n apiRef.current.publishEvent('virtualScrollerWheel', {}, event);\n });\n const handleTouchMove = useEventCallback(event => {\n apiRef.current.publishEvent('virtualScrollerTouchMove', {}, event);\n });\n const indexOfRowWithFocusedCell = React.useMemo(() => {\n if (cellFocus !== null) {\n return currentPage.rows.findIndex(row => row.id === cellFocus.id);\n }\n return -1;\n }, [cellFocus, currentPage.rows]);\n const getRows = (params = {\n renderContext\n }) => {\n var _rootProps$slotProps;\n const {\n onRowRender,\n renderContext: nextRenderContext,\n minFirstColumn = renderZoneMinColumnIndex,\n maxLastColumn = renderZoneMaxColumnIndex,\n availableSpace = containerDimensions.width,\n rowIndexOffset = 0,\n position = 'center'\n } = params;\n if (!nextRenderContext || availableSpace == null) {\n return null;\n }\n const rowBuffer = !disableVirtualization ? rootProps.rowBuffer : 0;\n const columnBuffer = !disableVirtualization ? rootProps.columnBuffer : 0;\n const [firstRowToRender, lastRowToRender] = getRenderableIndexes({\n firstIndex: nextRenderContext.firstRowIndex,\n lastIndex: nextRenderContext.lastRowIndex,\n minFirstIndex: 0,\n maxLastIndex: currentPage.rows.length,\n buffer: rowBuffer\n });\n const renderedRows = [];\n if (params.rows) {\n params.rows.forEach(row => {\n renderedRows.push(row);\n apiRef.current.calculateColSpan({\n rowId: row.id,\n minFirstColumn,\n maxLastColumn,\n columns: visibleColumns\n });\n });\n } else {\n if (!currentPage.range) {\n return null;\n }\n for (let i = firstRowToRender; i < lastRowToRender; i += 1) {\n const row = currentPage.rows[i];\n renderedRows.push(row);\n apiRef.current.calculateColSpan({\n rowId: row.id,\n minFirstColumn,\n maxLastColumn,\n columns: visibleColumns\n });\n }\n }\n // If the selected row is not within the current range of rows being displayed,\n // we need to render it at either the top or bottom of the rows,\n // depending on whether it is above or below the range.\n\n let isRowWithFocusedCellNotInRange = false;\n if (indexOfRowWithFocusedCell > -1) {\n const rowWithFocusedCell = currentPage.rows[indexOfRowWithFocusedCell];\n if (firstRowToRender > indexOfRowWithFocusedCell || lastRowToRender < indexOfRowWithFocusedCell) {\n isRowWithFocusedCellNotInRange = true;\n if (indexOfRowWithFocusedCell > firstRowToRender) {\n renderedRows.push(rowWithFocusedCell);\n } else {\n renderedRows.unshift(rowWithFocusedCell);\n }\n apiRef.current.calculateColSpan({\n rowId: rowWithFocusedCell.id,\n minFirstColumn,\n maxLastColumn,\n columns: visibleColumns\n });\n }\n }\n const [initialFirstColumnToRender, lastColumnToRender] = getRenderableIndexes({\n firstIndex: nextRenderContext.firstColumnIndex,\n lastIndex: nextRenderContext.lastColumnIndex,\n minFirstIndex: minFirstColumn,\n maxLastIndex: maxLastColumn,\n buffer: columnBuffer\n });\n const firstColumnToRender = getFirstNonSpannedColumnToRender({\n firstColumnToRender: initialFirstColumnToRender,\n apiRef,\n firstRowToRender,\n lastRowToRender,\n visibleRows: currentPage.rows\n });\n let isColumnWihFocusedCellNotInRange = false;\n if (firstColumnToRender > indexOfColumnWithFocusedCell || lastColumnToRender < indexOfColumnWithFocusedCell) {\n isColumnWihFocusedCellNotInRange = true;\n }\n const {\n focusedCellColumnIndexNotInRange,\n renderedColumns\n } = getRenderedColumnsRef.current(visibleColumns, firstColumnToRender, lastColumnToRender, minFirstColumn, maxLastColumn, isColumnWihFocusedCellNotInRange ? indexOfColumnWithFocusedCell : -1);\n const _ref = ((_rootProps$slotProps = rootProps.slotProps) == null ? void 0 : _rootProps$slotProps.row) || {},\n {\n style: rootRowStyle\n } = _ref,\n rootRowProps = _objectWithoutPropertiesLoose(_ref, _excluded);\n const invalidatesCachedRowStyle = prevGetRowProps.current !== getRowProps || prevRootRowStyle.current !== rootRowStyle;\n if (invalidatesCachedRowStyle) {\n rowStyleCache.current = Object.create(null);\n }\n const rows = [];\n for (let i = 0; i < renderedRows.length; i += 1) {\n var _currentPage$range5;\n const {\n id,\n model\n } = renderedRows[i];\n const isRowNotVisible = isRowWithFocusedCellNotInRange && cellFocus.id === id;\n const lastVisibleRowIndex = isRowWithFocusedCellNotInRange ? firstRowToRender + i === currentPage.rows.length : firstRowToRender + i === currentPage.rows.length - 1;\n const baseRowHeight = !apiRef.current.rowHasAutoHeight(id) ? apiRef.current.unstable_getRowHeight(id) : 'auto';\n let isSelected;\n if (selectedRowsLookup[id] == null) {\n isSelected = false;\n } else {\n isSelected = apiRef.current.isRowSelectable(id);\n }\n if (onRowRender) {\n onRowRender(id);\n }\n const focusedCell = cellFocus !== null && cellFocus.id === id ? cellFocus.field : null;\n const columnWithFocusedCellNotInRange = focusedCellColumnIndexNotInRange !== undefined && visibleColumns[focusedCellColumnIndexNotInRange];\n const renderedColumnsWithFocusedCell = columnWithFocusedCellNotInRange && focusedCell ? [columnWithFocusedCellNotInRange, ...renderedColumns] : renderedColumns;\n let tabbableCell = null;\n if (cellTabIndex !== null && cellTabIndex.id === id) {\n const cellParams = apiRef.current.getCellParams(id, cellTabIndex.field);\n tabbableCell = cellParams.cellMode === 'view' ? cellTabIndex.field : null;\n }\n const _ref2 = typeof getRowProps === 'function' && getRowProps(id, model) || {},\n {\n style: rowStyle\n } = _ref2,\n rowProps = _objectWithoutPropertiesLoose(_ref2, _excluded2);\n if (!rowStyleCache.current[id]) {\n const style = _extends({}, rowStyle, rootRowStyle);\n rowStyleCache.current[id] = style;\n }\n rows.push( /*#__PURE__*/_jsx(rootProps.slots.row, _extends({\n row: model,\n rowId: id,\n focusedCellColumnIndexNotInRange: focusedCellColumnIndexNotInRange,\n isNotVisible: isRowNotVisible,\n rowHeight: baseRowHeight,\n focusedCell: focusedCell,\n tabbableCell: tabbableCell,\n renderedColumns: renderedColumnsWithFocusedCell,\n visibleColumns: visibleColumns,\n firstColumnToRender: firstColumnToRender,\n lastColumnToRender: lastColumnToRender,\n selected: isSelected,\n index: rowIndexOffset + ((currentPage == null || (_currentPage$range5 = currentPage.range) == null ? void 0 : _currentPage$range5.firstRowIndex) || 0) + firstRowToRender + i,\n containerWidth: availableSpace,\n isLastVisible: lastVisibleRowIndex,\n position: position\n }, rowProps, rootRowProps, {\n style: rowStyleCache.current[id]\n }), id));\n }\n prevGetRowProps.current = getRowProps;\n prevRootRowStyle.current = rootRowStyle;\n return rows;\n };\n const needsHorizontalScrollbar = containerDimensions.width && columnsTotalWidth >= containerDimensions.width;\n const contentSize = React.useMemo(() => {\n // In cases where the columns exceed the available width,\n // the horizontal scrollbar should be shown even when there're no rows.\n // Keeping 1px as minimum height ensures that the scrollbar will visible if necessary.\n const height = Math.max(rowsMeta.currentPageTotalHeight, 1);\n let shouldExtendContent = false;\n if (rootRef != null && rootRef.current && height <= (rootRef == null ? void 0 : rootRef.current.clientHeight)) {\n shouldExtendContent = true;\n }\n const size = {\n width: needsHorizontalScrollbar ? columnsTotalWidth : 'auto',\n height,\n minHeight: shouldExtendContent ? '100%' : 'auto'\n };\n if (rootProps.autoHeight && currentPage.rows.length === 0) {\n size.height = getMinimalContentHeight(apiRef, rootProps.rowHeight); // Give room to show the overlay when there no rows.\n }\n\n return size;\n }, [apiRef, rootRef, columnsTotalWidth, rowsMeta.currentPageTotalHeight, needsHorizontalScrollbar, rootProps.autoHeight, rootProps.rowHeight, currentPage.rows.length]);\n React.useEffect(() => {\n apiRef.current.publishEvent('virtualScrollerContentSizeChange');\n }, [apiRef, contentSize]);\n const rootStyle = React.useMemo(() => {\n const style = {};\n if (!needsHorizontalScrollbar) {\n style.overflowX = 'hidden';\n }\n if (rootProps.autoHeight) {\n style.overflowY = 'hidden';\n }\n return style;\n }, [needsHorizontalScrollbar, rootProps.autoHeight]);\n const getRenderContext = React.useCallback(() => {\n return prevRenderContext.current;\n }, []);\n apiRef.current.register('private', {\n getRenderContext\n });\n return {\n renderContext,\n updateRenderZonePosition,\n getRows,\n getRootProps: (inputProps = {}) => _extends({\n ref: handleRef,\n onScroll: handleScroll,\n onWheel: handleWheel,\n onTouchMove: handleTouchMove\n }, inputProps, {\n style: inputProps.style ? _extends({}, inputProps.style, rootStyle) : rootStyle,\n role: 'presentation'\n }),\n getContentProps: ({\n style\n } = {}) => ({\n style: style ? _extends({}, style, contentSize) : contentSize,\n role: 'presentation'\n }),\n getRenderZoneProps: () => ({\n ref: renderZoneRef,\n role: 'rowgroup'\n })\n };\n};"],"names":["unstable_gridHeaderFilteringStateSelector","state","headerFiltering","unstable_gridHeaderFilteringEditFieldSelector","createSelector","headerFilteringState","editing","unstable_gridHeaderFilteringMenuSelector","menuOpen","getLeftColumnIndex","currentColIndex","firstColIndex","lastColIndex","direction","getRightColumnIndex","useGridKeyboardNavigation","apiRef","props","logger","useGridLogger","initialCurrentPageRows","useGridVisibleRows","rows","theme","useTheme","currentPageRows","pinnedRows","top","bottom","enrichPageRowsWithPinnedRows","headerFilteringEnabled","signature","unstable_headerFilters","goToCell","colIndex","rowId","closestColumnToUse","visibleSortedRows","nextCellColSpanInfo","current","unstable_getCellColSpanInfo","spannedByColSpan","leftVisibleCellIndex","rightVisibleCellIndex","rowIndexRelativeToAllRows","findIndex","row","id","debug","scrollToIndexes","rowIndex","field","getVisibleColumns","setCellFocus","goToHeader","event","setColumnHeaderFocus","goToHeaderFilter","setColumnHeaderFilterFocus","goToGroupHeader","depth","setColumnGroupHeaderFocus","getRowIdFromIndex","handleColumnHeaderKeyDown","params","headerTitleNode","currentTarget","querySelector","gridClasses","contains","target","getRootDimensions","viewportPageSize","getViewportPageSize","colIndexBefore","getColumnIndex","lastRowIndexInPage","length","columnGroupMaxDepth","shouldPreventDefault","key","rightColIndex","leftColIndex","Math","min","ctrlKey","metaKey","toggleColumnMenu","preventDefault","handleHeaderFilterKeyDown","isEditing","isHeaderMenuOpen","handleColumnGroupHeaderKeyDown","focusedColumnGroup","currentField","currentDepth","fields","maxDepth","remainingRightColumns","indexOf","remainingLeftColumns","handleCellKeyDown","cellParams","getCellParams","cellMode","unstable_applyPipeProcessors","cell","dimensions","rowIndexBefore","shiftKey","colDef","type","nextRowIndex","max","checkIfCanStartEditing","initialValue","useGridRegisterPipeProcessor","useGridApiEventHandler","gridPaginationSelector","pagination","gridPaginationModelSelector","paginationModel","gridPageSelector","page","gridPageSizeSelector","pageSize","gridPaginationRowRangeSelector","visibleTopLevelRowCount","rowTree","rowTreeDepth","visibleSortedRowEntries","visibleSortedTopLevelRowEntries","topLevelFirstRowIndex","topLevelLastRowIndex","firstRowIndex","lastRowIndex","topLevelFirstRow","topLevelRowsInCurrentPageCount","topLevelRowAdded","_rowTree$row$id","undefined","gridPaginatedVisibleSortedGridRowEntriesSelector","paginationRange","slice","gridPaginatedVisibleSortedGridRowIdsSelector","visibleSortedRowIds","defaultPageSize","autoPageSize","getPageCount","rowCount","ceil","getDefaultGridPaginationModel","b","getValidPage","pageCount","throwIfPageSizeExceedsTheLimit","signatureProp","Error","join","paginationStateInitializer","_props$paginationMode","_props$initialState","initialState","mergeStateWithPaginationModel","paginationModelProp","paginationState","_paginationModelProp$","validPage","useGridPagination","_props$initialState3","densityFactor","rowHeight","floor","registerControlState","stateId","propModel","propOnChange","onPaginationModelChange","stateSelector","changeEvent","pageApi","setPage","currentModel","setPaginationModel","setPageSize","_props$rowCount","updateControlState","forceUpdate","stateExportPreProcessing","prevState","context","_props$initialState2","exportOnlyDirtyModels","stateRestorePreProcessing","_context$stateToResto","_context$stateToResto2","_props$rowCount2","stateToRestore","handleUpdateAutoPageSize","pinnedRowsHeight","maximumPageSizeWithoutScrollBar","viewportInnerSize","height","_apiRef$current$virtu","virtualScrollerRef","paginationMode","_props$rowCount3","gridPreferencePanelStateSelector","preferencePanel","GridPreferencePanelsValue","preferencePanelStateInitializer","_props$initialState$p","open","useGridPreferencesPanel","hideTimeout","immediateTimeout","hidePreferences","preferencePanelState","openedPanelValue","publishEvent","setState","doNotHidePanel","setTimeout","clearTimeout","hidePreferencesDelayed","showPreferences","newValue","panelId","labelId","preferencePanelToExport","gridRowSelectionStateSelector","rowSelection","selectedGridRowsCountSelector","selection","selectedGridRowsSelector","selectedRows","rowsLookup","Map","map","selectedIdsLookupSelector","reduce","lookup","getSelectionModelPropValue","selectionModelProp","prevSelectionModel","Array","isArray","rowSelectionStateInitializer","_getSelectionModelPro","rowSelectionModel","useGridRowSelection","runIfRowSelectionIsEnabled","callback","args","propRowSelectionModel","lastRowToggled","onRowSelectionModelChange","checkboxSelection","disableMultipleRowSelection","disableRowSelectionOnClick","isRowSelectable","propIsRowSelectable","canHaveMultipleSelection","visibleRows","expandMouseRowRangeSelection","_lastRowToggled$curre","endId","startId","isSelected","isRowSelected","visibleRowIds","startIndex","endIndex","selectRowRange","setRowSelectionModel","model","includes","getRowParams","rowNode","getRowNode","getSelectedRows","selectRow","resetSelection","newSelection","filter","el","push","selectRows","ids","selectableIds","selectionLookup","forEach","Object","values","getRow","allPagesRowIds","start","end","rowsBetweenStartAndEnd","selectionPublicApi","selectionPrivateApi","removeOutdatedSelection","keepNonExistentRowsSelected","currentSelection","hasChanged","handleSingleRowSelection","hasCtrlKey","isMultipleSelectionDisabled","handleRowClick","_closest","closest","getAttribute","column","getColumn","preventSelectionOnShift","_window$getSelection","window","getSelection","removeAllRanges","handleRowSelectionCheckboxChange","nativeEvent","value","handleHeaderSelectionCheckboxChange","rowsToBeSelected","checkboxSelectionVisibleOnly","getCellMode","focusCell","isNextRowSelected","newRowIndex","getRowIndexRelativeToVisibleRows","previousRowIndex","getAllRowIds","isStateControlled","useGridRowSelectionPreProcessors","classes","ownerState","cellCheckbox","columnHeaderCheckbox","useUtilityClasses","updateSelectionColumn","columnsState","selectionColumn","cellClassName","headerClassName","headerName","getLocaleText","shouldHaveSelectionColumn","haveSelectionColumn","orderedFields","gridRowsMetaSelector","rowsMeta","gridRowsStateSelector","gridRowCountSelector","totalRowCount","gridRowsLoadingSelector","loading","gridTopLevelRowCountSelector","totalTopLevelRowCount","gridRowsLookupSelector","dataRowIdToModelLookup","gridRowsDataRowIdToIdLookupSelector","dataRowIdToIdLookup","gridRowTreeSelector","tree","gridRowGroupingNameSelector","groupingName","gridRowTreeDepthsSelector","treeDepths","gridRowMaximumTreeDepthSelector","entries","nodeCount","Number","sort","a","gridDataRowIdsSelector","dataRowIds","gridAdditionalRowGroupsSelector","additionalRowGroups","gridPinnedRowsSelector","_rawPinnedRows$bottom","_rawPinnedRows$top","rawPinnedRows","rowEntry","_rowEntry$model","_rowEntry$model2","gridPinnedRowsCountSelector","_pinnedRows$top","_pinnedRows$bottom","GRID_ROOT_GROUP_ID","GRID_ID_AUTOGENERATED","Symbol","buildRootGroup","groupingField","groupingKey","isAutoGenerated","children","childrenFromPath","childrenExpanded","parent","getRowIdFromRowModel","rowModel","getRowId","detailErrorMessage","JSON","stringify","checkGridRowIdIsValid","createRowsInternalCache","updates","i","rowsBeforePartialUpdates","loadingPropBeforePartialUpdates","rowCountPropBeforePartialUpdates","getTopLevelRowCount","rowCountProp","rootGroupNode","footerId","getRowsStateFromCache","loadingProp","previousTree","previousTreeDepths","cache","caches","unProcessedTree","unProcessedTreeDepths","unProcessedDataRowIds","applyStrategyProcessor","groupingParamsWithHydrateRows","actions","insert","modify","remove","idToActionLookup","isAutoGeneratedRow","getTreeNodeDescendants","parentId","skipAutoGeneratedRows","node","validDescendants","child","updateCacheWithNewRows","previousCache","_previousCache$update","_previousCache$update2","_previousCache$update3","uniqueUpdates","update","has","set","get","partialUpdates","alreadyAppliedActionsToRemove","partialRow","actionAlreadyAppliedToRow","_action","oldRow","actionTypeWithActionsToRemove","keys","actionType","idsToRemove","calculatePinnedRowsHeight","acc","unstable_getRowHeight","getMinimalContentHeight","MissingRowIdError","useGridParamsApi","getColumnHeaderParams","columns","getAllColumns","getBaseCellParams","cellFocus","cellTabIndex","api","hasFocus","tabIndex","getCellValue","formattedValue","isEditable","valueFormatter","isCellEditable","valueGetter","getRowValue","_getRowId","getRowFormattedValue","_ref","getColumnHeaderElement","rootElementRef","getRowElement","paramsApi","getCellElement","rowsStateInitializer","useGridRows","currentPage","lastUpdateMs","Date","now","timeout","getRowIdProp","index","throttledRowsChange","throttle","run","throttleRemainingTimeMs","throttleRowsMs","setRows","prevCache","updateRows","nonPinnedRowsUpdates","pinnedRowsCache","prevModel","idLookup","getRowModels","dataRows","idRowsLookup","_idRowsLookup$id","getRowsCount","setRowChildrenExpansion","isExpanded","currentNode","newNode","getRowGroupChildren","groupId","applySorting","applyFiltering","groupNode","sortedRowIds","filteredRowsLookup","childId","setRowIndex","targetIndex","group","instanceId","allRows","oldIndex","updatedRows","splice","rowApi","unstable_replaceRows","firstRowToRender","newRows","rootGroup","rootGroupChildren","replacedRowId","rowTreeNodeConfig","rowProApi","groupRows","info","handleStrategyProcessorChange","methodName","handleStrategyActivityChange","getActiveStrategy","applyHydrateRowsProcessor","response","isFirstRender","areNewRowsAlreadyInState","isNewLoadingAlreadyInState","isNewRowCountAlreadyInState","rowsMetaStateInitializer","currentPageTotalHeight","positions","getValidRowHeight","rowHeightProp","defaultRowHeight","warningMessage","useGridRowsMeta","getRowHeight","getRowHeightProp","getRowSpacing","getEstimatedRowHeight","rowsHeightLookup","create","lastMeasuredRowIndex","hasRowWithAutoHeight","filterModel","sortModel","validRowHeight","hydrateRowsMeta","calculateRowProcessedSizes","sizes","baseCenter","isResized","autoHeight","needsFirstMeasurement","baseRowHeight","existingBaseRowHeight","rowHeightFromUser","estimatedRowHeight","initialHeights","test","_spacing$top","_spacing$bottom","indexRelativeToCurrentPage","spacing","isFirstVisible","isLastVisible","spacingTop","spacingBottom","processedSizes","maximumBaseSize","otherSizes","Infinity","setRowHeight","debouncedHydrateRowsMeta","storeMeasuredRowHeight","position","needsHydration","rowHasAutoHeight","_rowsHeightLookup$cur2","getLastMeasuredRowIndex","setLastMeasuredRowIndex","resetRowHeights","rowsMetaApi","unstable_setLastMeasuredRowIndex","unstable_getRowInternalSizes","_rowsHeightLookup$cur","unstable_setRowHeight","unstable_storeRowHeightMeasurement","rowsMetaPrivateApi","flatRowTreeCreationMethod","createFlatRowTree","idsToRemoveFromRootGroup","idToDelete","idToInsert","updateFlatRowTree","useGridRowsPreProcessors","scrollIntoView","clientHeight","scrollTop","offsetHeight","offsetTop","elementBottom","useGridScroll","colRef","columnHeadersElementRef","visibleColumns","scrollCoordinates","columnPositions","cellWidth","_visibleSortedRows$pa","cellColSpanInfo","cellProps","width","computedWidth","left","clientWidth","abs","scrollLeft","_querySelector","_querySelector2","elementIndex","targetOffsetHeight","topPinnedRowsHeight","bottomPinnedRowsHeight","scroll","scrollApi","getScrollPosition","gridSortingStateSelector","sorting","gridSortedRowIdsSelector","sortingState","sortedRows","gridSortedRowEntriesSelector","sortedIds","gridSortModelSelector","gridSortColumnLookupSelector","res","sortItem","sortDirection","sortIndex","sortModelDisableMultiColumnsSortingWarning","sanitizeSortModel","disableMultipleColumnsSorting","mergeStateWithSortModel","buildAggregatedSortingApplier","comparatorList","item","getSortCellParams","comparator","sortComparator","parseSortItem","rowList","compareRows","row1","row2","sortCellParams1","sortCellParams2","getNextGridSortDirection","sortingOrder","currentIdx","gridNillComparator","v1","v2","collator","Intl","Collator","gridStringOrNumberComparator","value1","value2","nillResult","compare","toString","gridNumberComparator","gridDateComparator","sortingStateInitializer","_props$sortModel","useGridSorting","onSortModelChange","upsertSortModel","existingIdx","c","newSortModel","createSortItem","col","directionOverride","_col$sortingOrder2","existing","find","_col$sortingOrder","nextSort","addColumnMenuItem","columnMenuItems","sortable","some","sortingMode","sortRowList","setSortModel","sortColumn","allowMultipleSorting","sortApi","getSortModel","getSortedRows","getSortedRowIds","getRowIdFromRowIndex","sortModelToExport","callbacks","flatSortingMethod","sortedChildren","handleColumnHeaderClick","handleColumnsChange","latestColumns","newModel","useGridStatePersistence","statePersistenceApi","exportState","restoreState","_excluded","_excluded2","binarySearch","offset","sliceStart","sliceEnd","pivot","getRenderableIndexes","firstIndex","lastIndex","buffer","minFirstIndex","maxLastIndex","areRenderContextsEqual","context1","context2","firstColumnIndex","lastColumnIndex","MEMOIZE_OPTIONS","maxSize","useGridVirtualScroller","_currentPage$range3","_currentPage$range4","rootProps","ref","disableVirtualization","onRenderZonePositioning","renderZoneMinColumnIndex","renderZoneMaxColumnIndex","getRowProps","columnsTotalWidth","selectedRowsLookup","renderZoneRef","rootRef","handleRef","renderContext","setRenderContext","prevRenderContext","scrollPosition","containerDimensions","setContainerDimensions","prevTotalWidth","rowStyleCache","prevGetRowProps","prevRootRowStyle","getRenderedColumnsRef","firstColumnToRender","lastColumnToRender","minFirstColumn","maxLastColumn","indexOfColumnWithFocusedCell","focusedCellColumnIndexNotInRange","renderedColumns","getNearestIndexToRender","_currentPage$range","_currentPage$range2","lastMeasuredIndexRelativeToAllRows","allRowsMeasured","range","lastMeasuredIndexRelativeToCurrentPage","interval","exponentialSearch","computeRenderContext","lastRowToRender","rowBuffer","style","transform","handleResize","updateRenderZonePosition","nextRenderContext","initialFirstColumnToRender","columnBuffer","updateRenderContext","initialRenderContext","handleScroll","topRowsScrolledSincePreviousRender","bottomRowsScrolledSincePreviousRender","topColumnsScrolledSincePreviousRender","bottomColumnsScrolledSincePreviousRender","shouldSetState","rowThreshold","columnThreshold","handleWheel","handleTouchMove","indexOfRowWithFocusedCell","needsHorizontalScrollbar","contentSize","shouldExtendContent","size","minHeight","rootStyle","overflowX","overflowY","getRenderContext","register","getRows","_rootProps$slotProps","onRowRender","availableSpace","rowIndexOffset","renderedRows","calculateColSpan","isRowWithFocusedCellNotInRange","rowWithFocusedCell","unshift","isColumnWihFocusedCellNotInRange","slotProps","rootRowStyle","rootRowProps","_currentPage$range5","isRowNotVisible","lastVisibleRowIndex","focusedCell","columnWithFocusedCellNotInRange","renderedColumnsWithFocusedCell","tabbableCell","_ref2","rowStyle","rowProps","slots","isNotVisible","selected","containerWidth","getRootProps","inputProps","onScroll","onWheel","onTouchMove","role","getContentProps","getRenderZoneProps"],"sourceRoot":""}