view x/static/js/5676.818528e8.chunk.js.map @ 125:49f3d3878413 draft

planemo upload for repository https://github.com/galaxyproject/tools-iuc/tree/master/tools/jbrowse2 commit 5ea1f9c1eef1de76232e69aa6d34cda77d90d566
author fubar
date Sat, 05 Oct 2024 23:58:05 +0000
parents
children
line wrap: on
line source

{"version":3,"file":"static/js/5676.818528e8.chunk.js","mappings":"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","sources":["../../../node_modules/@mui/material/LinearProgress/LinearProgress.js","../../../node_modules/@mui/material/LinearProgress/linearProgressClasses.js","../../../node_modules/@mui/material/Skeleton/Skeleton.js","../../../node_modules/@mui/material/Skeleton/skeletonClasses.js","../../../node_modules/@mui/x-data-grid/hooks/core/useGridLoggerFactory.js","../../../node_modules/@mui/x-internals/EventManager/EventManager.js","../../../node_modules/@mui/x-data-grid/utils/Store.js","../../../node_modules/@mui/x-data-grid/hooks/core/useGridApiInitialization.js","../../../node_modules/@babel/runtime/helpers/esm/typeof.js","../../../node_modules/@babel/runtime/helpers/esm/toPropertyKey.js","../../../node_modules/@babel/runtime/helpers/esm/toPrimitive.js","../../../node_modules/@mui/x-data-grid/hooks/core/pipeProcessing/useGridPipeProcessing.js","../../../node_modules/@mui/x-data-grid/hooks/core/strategyProcessing/useGridStrategyProcessing.js","../../../node_modules/@mui/x-data-grid/hooks/core/useGridInitialization.js","../../../node_modules/@mui/x-data-grid/hooks/core/useGridRefs.js","../../../node_modules/@mui/x-data-grid/hooks/core/useGridIsRtl.js","../../../node_modules/@mui/x-data-grid/hooks/core/useGridStateInitialization.js","../../../node_modules/@mui/x-data-grid/hooks/core/useGridLocaleText.js","../../../node_modules/@mui/x-data-grid/hooks/utils/useGridInitializeState.js","../../../node_modules/@mui/x-data-grid/hooks/features/export/serializers/csvSerializer.js","../../../node_modules/@mui/x-data-grid/hooks/features/clipboard/useGridClipboard.js","../../../node_modules/@mui/x-data-grid/hooks/features/columnMenu/useGridColumnMenu.js","../../../node_modules/@mui/x-data-grid/hooks/core/pipeProcessing/useGridRegisterPipeProcessor.js","../../../node_modules/@mui/x-data-grid/hooks/core/pipeProcessing/useGridRegisterPipeApplier.js","../../../node_modules/@mui/x-data-grid/hooks/features/columns/useGridColumns.js","../../../node_modules/@mui/x-data-grid/hooks/features/density/useGridDensity.js","../../../node_modules/@mui/x-data-grid/hooks/features/export/utils.js","../../../node_modules/@mui/x-data-grid/hooks/features/export/useGridCsvExport.js","../../../node_modules/@mui/x-data-grid/utils/exportAs.js","../../../node_modules/@mui/x-data-grid/hooks/features/pagination/useGridPaginationModel.js","../../../node_modules/@mui/x-data-grid/hooks/core/strategyProcessing/useGridRegisterStrategyProcessor.js","../../../node_modules/@mui/x-data-grid/hooks/features/filter/useGridFilter.js","../../../node_modules/@mui/x-data-grid/hooks/features/focus/useGridFocus.js","../../../node_modules/@mui/x-data-grid/hooks/features/keyboardNavigation/utils.js","../../../node_modules/@mui/x-data-grid/hooks/features/pagination/useGridPagination.js","../../../node_modules/@mui/x-data-grid/hooks/features/preferencesPanel/useGridPreferencesPanel.js","../../../node_modules/@mui/x-data-grid/hooks/features/editing/utils.js","../../../node_modules/@mui/x-data-grid/hooks/features/editing/useGridCellEditing.js","../../../node_modules/@mui/x-data-grid/hooks/features/editing/useGridRowEditing.js","../../../node_modules/@mui/x-data-grid/hooks/features/editing/useGridEditing.js","../../../node_modules/@mui/x-data-grid/hooks/features/rows/useGridRows.js","../../../node_modules/@mui/x-data-grid/hooks/features/rows/useGridRowsPreProcessors.js","../../../node_modules/@mui/x-data-grid/hooks/features/rowSelection/useGridRowSelection.js","../../../node_modules/@mui/x-data-grid/hooks/features/sorting/useGridSorting.js","../../../node_modules/@mui/x-data-grid/hooks/features/scroll/useGridScroll.js","../../../node_modules/@mui/x-data-grid/hooks/features/dimensions/useGridDimensions.js","../../../node_modules/@mui/x-data-grid/hooks/features/rows/useGridRowsMeta.js","../../../node_modules/@mui/x-data-grid/hooks/features/columns/useGridColumnSpanning.js","../../../node_modules/@mui/x-data-grid/hooks/features/columnGrouping/gridColumnGroupsUtils.js","../../../node_modules/@mui/x-data-grid/hooks/features/columnGrouping/useGridColumnGrouping.js","../../../node_modules/@mui/x-data-grid/hooks/features/columnResize/useGridColumnResize.js","../../../node_modules/@mui/x-data-grid/utils/createControllablePromise.js","../../../node_modules/@mui/x-data-grid/hooks/features/rows/gridRowSpanningUtils.js","../../../node_modules/@mui/x-data-grid/hooks/features/rows/useGridRowSpanning.js","../../../node_modules/@mui/x-data-grid/DataGrid/useDataGridComponent.js","../../../node_modules/@mui/x-data-grid/hooks/features/rowSelection/useGridRowSelectionPreProcessors.js","../../../node_modules/@mui/x-data-grid/hooks/features/keyboardNavigation/useGridKeyboardNavigation.js","../../../node_modules/@mui/x-data-grid/hooks/features/pagination/useGridPaginationMeta.js","../../../node_modules/@mui/x-data-grid/hooks/features/pagination/useGridRowCount.js","../../../node_modules/@mui/x-data-grid/hooks/features/export/useGridPrintExport.js","../../../node_modules/@mui/x-internals/throttle/throttle.js","../../../node_modules/@mui/x-data-grid/node_modules/@mui/utils/esm/ownerWindow/ownerWindow.js","../../../node_modules/@mui/x-data-grid/hooks/features/events/useGridEvents.js","../../../node_modules/@mui/x-data-grid/hooks/features/statePersistence/useGridStatePersistence.js","../../../node_modules/@mui/x-data-grid/DataGrid/DataGrid.js","../../../node_modules/@mui/x-data-grid/hooks/utils/useGridAriaAttributes.js","../../../node_modules/@mui/x-data-grid/hooks/features/rows/useGridRowAriaAttributes.js","../../../node_modules/@mui/x-data-grid/components/GridNoResultsOverlay.js","../../../node_modules/@mui/x-data-grid/material/icons/GridColumnUnsortedIcon.js","../../../node_modules/@mui/x-data-grid/material/components/MUISelectOption.js","../../../node_modules/@mui/x-data-grid/material/index.js","../../../node_modules/@mui/x-data-grid/constants/defaultGridSlotsComponents.js","../../../node_modules/@mui/x-data-grid/components/GridDetailPanels.js","../../../node_modules/@mui/x-data-grid/components/GridPinnedRows.js","../../../node_modules/@mui/x-data-grid/DataGrid/useDataGridProps.js","../../../node_modules/@mui/x-data-grid/internals/utils/useProps.js","../../../node_modules/@mui/x-data-grid/internals/utils/computeSlots.js","../../../node_modules/@mui/x-data-grid/colDef/gridActionsColDef.js","../../../node_modules/@mui/x-data-grid/colDef/gridBooleanColDef.js","../../../node_modules/@mui/x-data-grid/colDef/gridBooleanOperators.js","../../../node_modules/@mui/x-data-grid/colDef/gridCheckboxSelectionColDef.js","../../../node_modules/@mui/x-data-grid/colDef/gridDateColDef.js","../../../node_modules/@mui/x-data-grid/colDef/gridDateOperators.js","../../../node_modules/@mui/x-data-grid/colDef/gridDefaultColumnTypes.js","../../../node_modules/@mui/x-data-grid/colDef/gridNumericColDef.js","../../../node_modules/@mui/x-data-grid/colDef/gridNumericOperators.js","../../../node_modules/@mui/x-data-grid/colDef/gridSingleSelectColDef.js","../../../node_modules/@mui/x-data-grid/colDef/gridSingleSelectOperators.js","../../../node_modules/@mui/x-data-grid/colDef/gridStringColDef.js","../../../node_modules/@mui/x-data-grid/colDef/gridStringOperators.js","../../../node_modules/@mui/x-data-grid/components/columnHeaders/GridColumnGroupHeader.js","../../../node_modules/@mui/x-data-grid/hooks/features/columnHeaders/useGridColumnHeaders.js","../../../node_modules/@mui/x-data-grid/components/columnHeaders/GridBaseColumnHeaders.js","../../../node_modules/@mui/x-data-grid/components/GridColumnHeaders.js","../../../node_modules/@mui/x-data-grid/components/GridConfigurationContext.js","../../../node_modules/@mui/x-data-grid/components/GridFooter.js","../../../node_modules/@mui/x-data-grid/components/panel/GridPreferencesPanel.js","../../../node_modules/@mui/x-data-grid/components/GridHeader.js","../../../node_modules/@mui/x-data-grid/components/GridSkeletonLoadingOverlay.js","../../../node_modules/@mui/x-data-grid/components/GridLoadingOverlay.js","../../../node_modules/@mui/x-data-grid/components/GridNoRowsOverlay.js","../../../node_modules/@mui/x-data-grid/components/GridPagination.js","../../../node_modules/@mui/x-data-grid/components/GridRow.js","../../../node_modules/@mui/x-data-grid/utils/composeGridClasses.js","../../../node_modules/@mui/x-data-grid/components/GridRowCount.js","../../../node_modules/@mui/x-data-grid/components/GridScrollbarFillerCell.js","../../../node_modules/@mui/x-data-grid/components/GridSelectedRowCount.js","../../../node_modules/@mui/x-data-grid/components/base/GridFooterPlaceholder.js","../../../node_modules/@mui/x-data-grid/components/base/GridOverlays.js","../../../node_modules/@mui/x-data-grid/components/cell/GridActionsCell.js","../../../node_modules/@mui/x-data-grid/components/cell/GridBooleanCell.js","../../../node_modules/@mui/x-data-grid/utils/doesSupportPreventScroll.js","../../../node_modules/@mui/x-data-grid/components/cell/GridCell.js","../../../node_modules/@mui/x-data-grid/components/cell/GridEditBooleanCell.js","../../../node_modules/@mui/x-data-grid/components/cell/GridEditDateCell.js","../../../node_modules/@mui/x-data-grid/components/cell/GridEditInputCell.js","../../../node_modules/@mui/x-data-grid/components/cell/GridEditSingleSelectCell.js","../../../node_modules/@mui/x-data-grid/components/cell/GridSkeletonCell.js","../../../node_modules/@mui/x-data-grid/components/columnHeaders/GridColumnHeaderFilterIconButton.js","../../../node_modules/@mui/x-data-grid/components/columnHeaders/ColumnHeaderMenuIcon.js","../../../node_modules/@mui/x-data-grid/components/columnHeaders/GridColumnHeaderItem.js","../../../node_modules/@mui/x-data-grid/components/columnHeaders/GridColumnHeaderSeparator.js","../../../node_modules/@mui/x-data-grid/components/columnHeaders/GridColumnHeaderSortIcon.js","../../../node_modules/@mui/x-data-grid/components/columnHeaders/GridColumnHeaderTitle.js","../../../node_modules/@mui/x-data-grid/components/columnHeaders/GridGenericColumnHeaderItem.js","../../../node_modules/@mui/x-data-grid/components/columnHeaders/GridIconButtonContainer.js","../../../node_modules/@mui/x-data-grid/components/columnSelection/GridCellCheckboxRenderer.js","../../../node_modules/@mui/x-data-grid/components/columnSelection/GridHeaderCheckbox.js","../../../node_modules/@mui/x-data-grid/components/columnsManagement/utils.js","../../../node_modules/@mui/x-data-grid/components/columnsManagement/GridColumnsManagement.js","../../../node_modules/@mui/x-data-grid/components/containers/GridFooterContainer.js","../../../node_modules/@mui/x-data-grid/components/containers/GridOverlay.js","../../../node_modules/@mui/x-data-grid/components/containers/GridRootStyles.js","../../../node_modules/@mui/x-data-grid/components/containers/GridRoot.js","../../../node_modules/@mui/x-data-grid/components/menu/GridMenu.js","../../../node_modules/@mui/x-data-grid/components/menu/columnMenu/GridColumnHeaderMenu.js","../../../node_modules/@mui/x-data-grid/hooks/features/columnMenu/useGridColumnMenuSlots.js","../../../node_modules/@mui/x-data-grid/components/menu/columnMenu/GridColumnMenu.js","../../../node_modules/@mui/x-data-grid/components/menu/columnMenu/GridColumnMenuContainer.js","../../../node_modules/@mui/x-data-grid/components/menu/columnMenu/menuItems/GridColumnMenuColumnsItem.js","../../../node_modules/@mui/x-data-grid/components/menu/columnMenu/menuItems/GridColumnMenuFilterItem.js","../../../node_modules/@mui/x-data-grid/components/menu/columnMenu/menuItems/GridColumnMenuHideItem.js","../../../node_modules/@mui/x-data-grid/components/menu/columnMenu/menuItems/GridColumnMenuManageItem.js","../../../node_modules/@mui/x-data-grid/components/menu/columnMenu/menuItems/GridColumnMenuSortItem.js","../../../node_modules/@mui/x-data-grid/components/panel/GridColumnsPanel.js","../../../node_modules/@mui/x-data-grid/components/panel/GridPanel.js","../../../node_modules/@mui/x-data-grid/components/panel/GridPanelContent.js","../../../node_modules/@mui/x-data-grid/components/panel/GridPanelFooter.js","../../../node_modules/@mui/x-data-grid/components/panel/GridPanelWrapper.js","../../../node_modules/@mui/x-data-grid/components/panel/filterPanel/GridFilterForm.js","../../../node_modules/@mui/x-data-grid/components/panel/filterPanel/GridFilterInputBoolean.js","../../../node_modules/@mui/x-data-grid/components/panel/filterPanel/GridFilterInputDate.js","../../../node_modules/@mui/x-data-grid/components/panel/filterPanel/GridFilterInputMultipleSingleSelect.js","../../../node_modules/@mui/x-data-grid/components/panel/filterPanel/GridFilterInputMultipleValue.js","../../../node_modules/@mui/x-data-grid/components/panel/filterPanel/GridFilterInputSingleSelect.js","../../../node_modules/@mui/x-data-grid/components/panel/filterPanel/GridFilterInputValue.js","../../../node_modules/@mui/x-data-grid/components/panel/filterPanel/GridFilterPanel.js","../../../node_modules/@mui/x-data-grid/components/panel/filterPanel/filterPanelUtils.js","../../../node_modules/@mui/x-data-grid/components/toolbar/GridToolbarExport.js","../../../node_modules/@mui/x-data-grid/components/toolbar/GridToolbarExportContainer.js","../../../node_modules/@mui/x-data-grid/components/GridScrollArea.js","../../../node_modules/@mui/x-data-grid/hooks/features/overlays/useGridOverlays.js","../../../node_modules/@mui/x-data-grid/components/GridHeaders.js","../../../node_modules/@mui/x-data-grid/components/virtualization/GridMainContainer.js","../../../node_modules/@mui/x-data-grid/components/virtualization/GridTopContainer.js","../../../node_modules/@mui/x-data-grid/components/virtualization/GridBottomContainer.js","../../../node_modules/@mui/x-data-grid/components/virtualization/GridVirtualScrollerContent.js","../../../node_modules/@mui/x-data-grid/components/virtualization/GridVirtualScrollerFiller.js","../../../node_modules/@mui/x-data-grid/components/virtualization/GridVirtualScrollerRenderZone.js","../../../node_modules/@mui/x-data-grid/components/virtualization/GridVirtualScrollbar.js","../../../node_modules/@mui/x-data-grid/components/virtualization/GridVirtualScroller.js","../../../node_modules/@mui/x-data-grid/constants/gridClasses.js","../../../node_modules/@mui/x-data-grid/constants/gridDetailPanelToggleField.js","../../../node_modules/@mui/x-data-grid/constants/localeTextConstants.js","../../../node_modules/@mui/x-data-grid/context/GridContextProvider.js","../../../node_modules/@mui/x-data-grid/hooks/features/columnGrouping/gridColumnGroupsSelector.js","../../../node_modules/@mui/x-data-grid/hooks/features/columnMenu/columnMenuSelector.js","../../../node_modules/@mui/x-data-grid/hooks/features/columnResize/gridColumnResizeApi.js","../../../node_modules/@mui/x-data-grid/hooks/features/columns/gridColumnsInterfaces.js","../../../node_modules/@mui/x-data-grid/hooks/core/gridCoreSelector.js","../../../node_modules/@mui/x-data-grid/hooks/features/columns/gridColumnsSelector.js","../../../node_modules/@mui/x-data-grid/hooks/features/columns/gridColumnsUtils.js","../../../node_modules/@mui/x-data-grid/hooks/features/density/densitySelector.js","../../../node_modules/@mui/x-data-grid/hooks/features/dimensions/gridDimensionsSelectors.js","../../../node_modules/@mui/x-data-grid/hooks/features/editing/gridEditingSelectors.js","../../../node_modules/@mui/x-data-grid/hooks/features/filter/gridFilterSelector.js","../../../node_modules/@mui/x-data-grid/hooks/features/filter/gridFilterState.js","../../../node_modules/@mui/x-data-grid/utils/getPublicApiRef.js","../../../node_modules/@mui/x-data-grid/hooks/features/filter/gridFilterUtils.js","../../../node_modules/@mui/x-data-grid/hooks/features/focus/gridFocusStateSelector.js","../../../node_modules/@mui/x-data-grid/hooks/features/headerFiltering/gridHeaderFilteringSelectors.js","../../../node_modules/@mui/x-data-grid/hooks/features/pagination/gridPaginationSelector.js","../../../node_modules/@mui/x-data-grid/hooks/features/pagination/gridPaginationUtils.js","../../../node_modules/@mui/x-data-grid/hooks/features/preferencesPanel/gridPreferencePanelSelector.js","../../../node_modules/@mui/x-data-grid/hooks/features/preferencesPanel/gridPreferencePanelsValue.js","../../../node_modules/@mui/x-data-grid/hooks/features/rowSelection/gridRowSelectionSelector.js","../../../node_modules/@mui/x-data-grid/hooks/features/rowSelection/utils.js","../../../node_modules/@mui/x-data-grid/hooks/features/rows/gridRowSpanningSelectors.js","../../../node_modules/@mui/x-data-grid/hooks/features/rows/gridRowsMetaSelector.js","../../../node_modules/@mui/x-data-grid/hooks/features/rows/gridRowsSelector.js","../../../node_modules/@mui/x-data-grid/hooks/features/rows/gridRowsUtils.js","../../../node_modules/@mui/x-data-grid/hooks/features/rows/useGridParamsApi.js","../../../node_modules/@mui/x-data-grid/hooks/features/sorting/gridSortingSelector.js","../../../node_modules/@mui/x-data-grid/hooks/features/sorting/gridSortingUtils.js","../../../node_modules/@mui/x-data-grid/hooks/features/virtualization/gridVirtualizationSelectors.js","../../../node_modules/@mui/x-internals/node_modules/@mui/utils/esm/useEnhancedEffect/useEnhancedEffect.js","../../../node_modules/@mui/x-internals/useResizeObserver/useResizeObserver.js","../../../node_modules/@mui/x-data-grid/utils/platform.js","../../../node_modules/@mui/x-data-grid/hooks/features/virtualization/useGridVirtualScroller.js","../../../node_modules/@mui/x-data-grid/hooks/features/virtualization/useGridVirtualization.js","../../../node_modules/@mui/x-data-grid/hooks/utils/useFirstRender.js","../../../node_modules/@mui/x-data-grid/utils/cleanupTracking/TimerBasedCleanupTracking.js","../../../node_modules/@mui/x-data-grid/utils/cleanupTracking/FinalizationRegistryBasedCleanupTracking.js","../../../node_modules/@mui/x-data-grid/hooks/utils/useGridApiEventHandler.js","../../../node_modules/@mui/x-data-grid/hooks/utils/useGridApiMethod.js","../../../node_modules/@mui/x-data-grid/hooks/utils/useGridConfiguration.js","../../../node_modules/@mui/x-data-grid/hooks/utils/useGridLogger.js","../../../node_modules/@mui/x-data-grid/hooks/utils/useGridNativeEventListener.js","../../../node_modules/@mui/x-data-grid/hooks/utils/useGridPrivateApiContext.js","../../../node_modules/@mui/x-data-grid/hooks/utils/useGridSelector.js","../../../node_modules/@mui/x-data-grid/hooks/utils/useGridVisibleRows.js","../../../node_modules/@mui/x-data-grid/hooks/utils/useRunOnce.js","../../../node_modules/@mui/x-data-grid/internals/utils/getPinnedCellOffset.js","../../../node_modules/@mui/x-data-grid/material/icons/index.js","../../../node_modules/@mui/x-data-grid/models/gridColumnGrouping.js","../../../node_modules/@mui/x-data-grid/models/gridEditRowModel.js","../../../node_modules/@mui/x-data-grid/models/gridFilterItem.js","../../../node_modules/@mui/x-data-grid/models/params/gridEditCellParams.js","../../../node_modules/@mui/x-data-grid/models/params/gridRowParams.js","../../../node_modules/@mui/x-data-grid/node_modules/@mui/utils/esm/capitalize/capitalize.js","../../../node_modules/@mui/x-data-grid/node_modules/@mui/utils/esm/formatMuiErrorMessage/formatMuiErrorMessage.js","../../../node_modules/@mui/x-data-grid/node_modules/@mui/utils/esm/composeClasses/composeClasses.js","../../../node_modules/@mui/x-data-grid/node_modules/@mui/utils/esm/debounce/debounce.js","../../../node_modules/@mui/x-data-grid/node_modules/@mui/utils/esm/ClassNameGenerator/ClassNameGenerator.js","../../../node_modules/@mui/x-data-grid/node_modules/@mui/utils/esm/generateUtilityClass/generateUtilityClass.js","../../../node_modules/@mui/x-data-grid/node_modules/@mui/utils/esm/generateUtilityClasses/generateUtilityClasses.js","../../../node_modules/@mui/x-data-grid/node_modules/@mui/utils/esm/ownerDocument/ownerDocument.js","../../../node_modules/@mui/x-data-grid/node_modules/@mui/utils/esm/useEnhancedEffect/useEnhancedEffect.js","../../../node_modules/@mui/x-data-grid/node_modules/@mui/utils/esm/useEventCallback/useEventCallback.js","../../../node_modules/@mui/x-data-grid/node_modules/@mui/utils/esm/useForkRef/useForkRef.js","../../../node_modules/@mui/x-data-grid/node_modules/@mui/utils/esm/setRef/setRef.js","../../../node_modules/@mui/x-data-grid/node_modules/@mui/utils/esm/useId/useId.js","../../../node_modules/@mui/x-data-grid/node_modules/@mui/utils/esm/useLazyRef/useLazyRef.js","../../../node_modules/@mui/x-data-grid/node_modules/@mui/utils/esm/useOnMount/useOnMount.js","../../../node_modules/@mui/x-data-grid/node_modules/@mui/utils/esm/useTimeout/useTimeout.js","../../../node_modules/@mui/x-data-grid/utils/cellBorderUtils.js","../../../node_modules/@mui/x-data-grid/utils/createSelector.js","../../../node_modules/@mui/x-data-grid/utils/domUtils.js","../../../node_modules/@mui/x-data-grid/utils/keyboardUtils.js","../../../node_modules/@mui/x-data-grid/utils/utils.js","../../../node_modules/@mui/x-internals/fastMemo/fastMemo.js","../../../node_modules/@mui/x-internals/fastObjectShallowCompare/fastObjectShallowCompare.js","../../../node_modules/prop-types/factoryWithThrowingShims.js","../../../node_modules/prop-types/index.js","../../../node_modules/prop-types/lib/ReactPropTypesSecret.js","../../../node_modules/reselect/src/devModeChecks/identityFunctionCheck.ts","../../../node_modules/reselect/src/utils.ts","../../../node_modules/reselect/src/autotrackMemoize/proxy.ts","../../../node_modules/reselect/src/lruMemoize.ts","../../../node_modules/reselect/src/weakMapMemoize.ts","../../../node_modules/reselect/src/createSelectorCreator.ts","../../../node_modules/reselect/src/createStructuredSelector.ts"],"sourcesContent":["'use client';\n\nimport * as React from 'react';\nimport PropTypes from 'prop-types';\nimport clsx from 'clsx';\nimport composeClasses from '@mui/utils/composeClasses';\nimport { darken, lighten } from '@mui/system/colorManipulator';\nimport { useRtl } from '@mui/system/RtlProvider';\nimport { keyframes, css, styled } from \"../zero-styled/index.js\";\nimport memoTheme from \"../utils/memoTheme.js\";\nimport createSimplePaletteValueFilter from \"../utils/createSimplePaletteValueFilter.js\";\nimport { useDefaultProps } from \"../DefaultPropsProvider/index.js\";\nimport capitalize from \"../utils/capitalize.js\";\nimport { getLinearProgressUtilityClass } from \"./linearProgressClasses.js\";\nimport { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nconst TRANSITION_DURATION = 4; // seconds\nconst indeterminate1Keyframe = keyframes`\n  0% {\n    left: -35%;\n    right: 100%;\n  }\n\n  60% {\n    left: 100%;\n    right: -90%;\n  }\n\n  100% {\n    left: 100%;\n    right: -90%;\n  }\n`;\n\n// This implementation is for supporting both Styled-components v4+ and Pigment CSS.\n// A global animation has to be created here for Styled-components v4+ (https://github.com/styled-components/styled-components/blob/main/packages/styled-components/src/utils/errors.md#12).\n// which can be done by checking typeof indeterminate1Keyframe !== 'string' (at runtime, Pigment CSS transform keyframes`` to a string).\nconst indeterminate1Animation = typeof indeterminate1Keyframe !== 'string' ? css`\n        animation: ${indeterminate1Keyframe} 2.1s cubic-bezier(0.65, 0.815, 0.735, 0.395) infinite;\n      ` : null;\nconst indeterminate2Keyframe = keyframes`\n  0% {\n    left: -200%;\n    right: 100%;\n  }\n\n  60% {\n    left: 107%;\n    right: -8%;\n  }\n\n  100% {\n    left: 107%;\n    right: -8%;\n  }\n`;\nconst indeterminate2Animation = typeof indeterminate2Keyframe !== 'string' ? css`\n        animation: ${indeterminate2Keyframe} 2.1s cubic-bezier(0.165, 0.84, 0.44, 1) 1.15s infinite;\n      ` : null;\nconst bufferKeyframe = keyframes`\n  0% {\n    opacity: 1;\n    background-position: 0 -23px;\n  }\n\n  60% {\n    opacity: 0;\n    background-position: 0 -23px;\n  }\n\n  100% {\n    opacity: 1;\n    background-position: -200px -23px;\n  }\n`;\nconst bufferAnimation = typeof bufferKeyframe !== 'string' ? css`\n        animation: ${bufferKeyframe} 3s infinite linear;\n      ` : null;\nconst useUtilityClasses = ownerState => {\n  const {\n    classes,\n    variant,\n    color\n  } = ownerState;\n  const slots = {\n    root: ['root', `color${capitalize(color)}`, variant],\n    dashed: ['dashed', `dashedColor${capitalize(color)}`],\n    bar1: ['bar', `barColor${capitalize(color)}`, (variant === 'indeterminate' || variant === 'query') && 'bar1Indeterminate', variant === 'determinate' && 'bar1Determinate', variant === 'buffer' && 'bar1Buffer'],\n    bar2: ['bar', variant !== 'buffer' && `barColor${capitalize(color)}`, variant === 'buffer' && `color${capitalize(color)}`, (variant === 'indeterminate' || variant === 'query') && 'bar2Indeterminate', variant === 'buffer' && 'bar2Buffer']\n  };\n  return composeClasses(slots, getLinearProgressUtilityClass, classes);\n};\nconst getColorShade = (theme, color) => {\n  if (theme.vars) {\n    return theme.vars.palette.LinearProgress[`${color}Bg`];\n  }\n  return theme.palette.mode === 'light' ? lighten(theme.palette[color].main, 0.62) : darken(theme.palette[color].main, 0.5);\n};\nconst LinearProgressRoot = styled('span', {\n  name: 'MuiLinearProgress',\n  slot: 'Root',\n  overridesResolver: (props, styles) => {\n    const {\n      ownerState\n    } = props;\n    return [styles.root, styles[`color${capitalize(ownerState.color)}`], styles[ownerState.variant]];\n  }\n})(memoTheme(({\n  theme\n}) => ({\n  position: 'relative',\n  overflow: 'hidden',\n  display: 'block',\n  height: 4,\n  // Fix Safari's bug during composition of different paint.\n  zIndex: 0,\n  '@media print': {\n    colorAdjust: 'exact'\n  },\n  variants: [...Object.entries(theme.palette).filter(createSimplePaletteValueFilter()).map(([color]) => ({\n    props: {\n      color\n    },\n    style: {\n      backgroundColor: getColorShade(theme, color)\n    }\n  })), {\n    props: ({\n      ownerState\n    }) => ownerState.color === 'inherit' && ownerState.variant !== 'buffer',\n    style: {\n      '&::before': {\n        content: '\"\"',\n        position: 'absolute',\n        left: 0,\n        top: 0,\n        right: 0,\n        bottom: 0,\n        backgroundColor: 'currentColor',\n        opacity: 0.3\n      }\n    }\n  }, {\n    props: {\n      variant: 'buffer'\n    },\n    style: {\n      backgroundColor: 'transparent'\n    }\n  }, {\n    props: {\n      variant: 'query'\n    },\n    style: {\n      transform: 'rotate(180deg)'\n    }\n  }]\n})));\nconst LinearProgressDashed = styled('span', {\n  name: 'MuiLinearProgress',\n  slot: 'Dashed',\n  overridesResolver: (props, styles) => {\n    const {\n      ownerState\n    } = props;\n    return [styles.dashed, styles[`dashedColor${capitalize(ownerState.color)}`]];\n  }\n})(memoTheme(({\n  theme\n}) => ({\n  position: 'absolute',\n  marginTop: 0,\n  height: '100%',\n  width: '100%',\n  backgroundSize: '10px 10px',\n  backgroundPosition: '0 -23px',\n  variants: [{\n    props: {\n      color: 'inherit'\n    },\n    style: {\n      opacity: 0.3,\n      backgroundImage: `radial-gradient(currentColor 0%, currentColor 16%, transparent 42%)`\n    }\n  }, ...Object.entries(theme.palette).filter(createSimplePaletteValueFilter()).map(([color]) => {\n    const backgroundColor = getColorShade(theme, color);\n    return {\n      props: {\n        color\n      },\n      style: {\n        backgroundImage: `radial-gradient(${backgroundColor} 0%, ${backgroundColor} 16%, transparent 42%)`\n      }\n    };\n  })]\n})), bufferAnimation || {\n  // At runtime for Pigment CSS, `bufferAnimation` will be null and the generated keyframe will be used.\n  animation: `${bufferKeyframe} 3s infinite linear`\n});\nconst LinearProgressBar1 = styled('span', {\n  name: 'MuiLinearProgress',\n  slot: 'Bar1',\n  overridesResolver: (props, styles) => {\n    const {\n      ownerState\n    } = props;\n    return [styles.bar, styles[`barColor${capitalize(ownerState.color)}`], (ownerState.variant === 'indeterminate' || ownerState.variant === 'query') && styles.bar1Indeterminate, ownerState.variant === 'determinate' && styles.bar1Determinate, ownerState.variant === 'buffer' && styles.bar1Buffer];\n  }\n})(memoTheme(({\n  theme\n}) => ({\n  width: '100%',\n  position: 'absolute',\n  left: 0,\n  bottom: 0,\n  top: 0,\n  transition: 'transform 0.2s linear',\n  transformOrigin: 'left',\n  variants: [{\n    props: {\n      color: 'inherit'\n    },\n    style: {\n      backgroundColor: 'currentColor'\n    }\n  }, ...Object.entries(theme.palette).filter(createSimplePaletteValueFilter()).map(([color]) => ({\n    props: {\n      color\n    },\n    style: {\n      backgroundColor: (theme.vars || theme).palette[color].main\n    }\n  })), {\n    props: {\n      variant: 'determinate'\n    },\n    style: {\n      transition: `transform .${TRANSITION_DURATION}s linear`\n    }\n  }, {\n    props: {\n      variant: 'buffer'\n    },\n    style: {\n      zIndex: 1,\n      transition: `transform .${TRANSITION_DURATION}s linear`\n    }\n  }, {\n    props: ({\n      ownerState\n    }) => ownerState.variant === 'indeterminate' || ownerState.variant === 'query',\n    style: {\n      width: 'auto'\n    }\n  }, {\n    props: ({\n      ownerState\n    }) => ownerState.variant === 'indeterminate' || ownerState.variant === 'query',\n    style: indeterminate1Animation || {\n      animation: `${indeterminate1Keyframe} 2.1s cubic-bezier(0.65, 0.815, 0.735, 0.395) infinite`\n    }\n  }]\n})));\nconst LinearProgressBar2 = styled('span', {\n  name: 'MuiLinearProgress',\n  slot: 'Bar2',\n  overridesResolver: (props, styles) => {\n    const {\n      ownerState\n    } = props;\n    return [styles.bar, styles[`barColor${capitalize(ownerState.color)}`], (ownerState.variant === 'indeterminate' || ownerState.variant === 'query') && styles.bar2Indeterminate, ownerState.variant === 'buffer' && styles.bar2Buffer];\n  }\n})(memoTheme(({\n  theme\n}) => ({\n  width: '100%',\n  position: 'absolute',\n  left: 0,\n  bottom: 0,\n  top: 0,\n  transition: 'transform 0.2s linear',\n  transformOrigin: 'left',\n  variants: [...Object.entries(theme.palette).filter(createSimplePaletteValueFilter()).map(([color]) => ({\n    props: {\n      color\n    },\n    style: {\n      '--LinearProgressBar2-barColor': (theme.vars || theme).palette[color].main\n    }\n  })), {\n    props: ({\n      ownerState\n    }) => ownerState.variant !== 'buffer' && ownerState.color !== 'inherit',\n    style: {\n      backgroundColor: 'var(--LinearProgressBar2-barColor, currentColor)'\n    }\n  }, {\n    props: {\n      color: 'inherit'\n    },\n    style: {\n      opacity: 0.3\n    }\n  }, ...Object.entries(theme.palette).filter(createSimplePaletteValueFilter()).map(([color]) => ({\n    props: {\n      color,\n      variant: 'buffer'\n    },\n    style: {\n      backgroundColor: getColorShade(theme, color),\n      transition: `transform .${TRANSITION_DURATION}s linear`\n    }\n  })), {\n    props: ({\n      ownerState\n    }) => ownerState.variant === 'indeterminate' || ownerState.variant === 'query',\n    style: {\n      width: 'auto'\n    }\n  }, {\n    props: ({\n      ownerState\n    }) => ownerState.variant === 'indeterminate' || ownerState.variant === 'query',\n    style: indeterminate2Animation || {\n      animation: `${indeterminate2Keyframe} 2.1s cubic-bezier(0.165, 0.84, 0.44, 1) 1.15s infinite`\n    }\n  }]\n})));\n\n/**\n * ## ARIA\n *\n * If the progress bar is describing the loading progress of a particular region of a page,\n * you should use `aria-describedby` to point to the progress bar, and set the `aria-busy`\n * attribute to `true` on that region until it has finished loading.\n */\nconst LinearProgress = /*#__PURE__*/React.forwardRef(function LinearProgress(inProps, ref) {\n  const props = useDefaultProps({\n    props: inProps,\n    name: 'MuiLinearProgress'\n  });\n  const {\n    className,\n    color = 'primary',\n    value,\n    valueBuffer,\n    variant = 'indeterminate',\n    ...other\n  } = props;\n  const ownerState = {\n    ...props,\n    color,\n    variant\n  };\n  const classes = useUtilityClasses(ownerState);\n  const isRtl = useRtl();\n  const rootProps = {};\n  const inlineStyles = {\n    bar1: {},\n    bar2: {}\n  };\n  if (variant === 'determinate' || variant === 'buffer') {\n    if (value !== undefined) {\n      rootProps['aria-valuenow'] = Math.round(value);\n      rootProps['aria-valuemin'] = 0;\n      rootProps['aria-valuemax'] = 100;\n      let transform = value - 100;\n      if (isRtl) {\n        transform = -transform;\n      }\n      inlineStyles.bar1.transform = `translateX(${transform}%)`;\n    } else if (process.env.NODE_ENV !== 'production') {\n      console.error('MUI: You need to provide a value prop ' + 'when using the determinate or buffer variant of LinearProgress .');\n    }\n  }\n  if (variant === 'buffer') {\n    if (valueBuffer !== undefined) {\n      let transform = (valueBuffer || 0) - 100;\n      if (isRtl) {\n        transform = -transform;\n      }\n      inlineStyles.bar2.transform = `translateX(${transform}%)`;\n    } else if (process.env.NODE_ENV !== 'production') {\n      console.error('MUI: You need to provide a valueBuffer prop ' + 'when using the buffer variant of LinearProgress.');\n    }\n  }\n  return /*#__PURE__*/_jsxs(LinearProgressRoot, {\n    className: clsx(classes.root, className),\n    ownerState: ownerState,\n    role: \"progressbar\",\n    ...rootProps,\n    ref: ref,\n    ...other,\n    children: [variant === 'buffer' ? /*#__PURE__*/_jsx(LinearProgressDashed, {\n      className: classes.dashed,\n      ownerState: ownerState\n    }) : null, /*#__PURE__*/_jsx(LinearProgressBar1, {\n      className: classes.bar1,\n      ownerState: ownerState,\n      style: inlineStyles.bar1\n    }), variant === 'determinate' ? null : /*#__PURE__*/_jsx(LinearProgressBar2, {\n      className: classes.bar2,\n      ownerState: ownerState,\n      style: inlineStyles.bar2\n    })]\n  });\n});\nprocess.env.NODE_ENV !== \"production\" ? LinearProgress.propTypes /* remove-proptypes */ = {\n  // ┌────────────────────────────── Warning ──────────────────────────────┐\n  // │ These PropTypes are generated from the TypeScript type definitions. │\n  // │    To update them, edit the d.ts file and run `pnpm proptypes`.     │\n  // └─────────────────────────────────────────────────────────────────────┘\n  /**\n   * Override or extend the styles applied to the component.\n   */\n  classes: PropTypes.object,\n  /**\n   * @ignore\n   */\n  className: PropTypes.string,\n  /**\n   * The color of the component.\n   * It supports both default and custom theme colors, which can be added as shown in the\n   * [palette customization guide](https://mui.com/material-ui/customization/palette/#custom-colors).\n   * @default 'primary'\n   */\n  color: PropTypes /* @typescript-to-proptypes-ignore */.oneOfType([PropTypes.oneOf(['inherit', 'primary', 'secondary']), PropTypes.string]),\n  /**\n   * The system prop that allows defining system overrides as well as additional CSS styles.\n   */\n  sx: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.func, PropTypes.object, PropTypes.bool])), PropTypes.func, PropTypes.object]),\n  /**\n   * The value of the progress indicator for the determinate and buffer variants.\n   * Value between 0 and 100.\n   */\n  value: PropTypes.number,\n  /**\n   * The value for the buffer variant.\n   * Value between 0 and 100.\n   */\n  valueBuffer: PropTypes.number,\n  /**\n   * The variant to use.\n   * Use indeterminate or query when there is no progress value.\n   * @default 'indeterminate'\n   */\n  variant: PropTypes.oneOf(['buffer', 'determinate', 'indeterminate', 'query'])\n} : void 0;\nexport default LinearProgress;","import generateUtilityClasses from '@mui/utils/generateUtilityClasses';\nimport generateUtilityClass from '@mui/utils/generateUtilityClass';\nexport function getLinearProgressUtilityClass(slot) {\n  return generateUtilityClass('MuiLinearProgress', slot);\n}\nconst linearProgressClasses = generateUtilityClasses('MuiLinearProgress', ['root', 'colorPrimary', 'colorSecondary', 'determinate', 'indeterminate', 'buffer', 'query', 'dashed', 'dashedColorPrimary', 'dashedColorSecondary', 'bar', 'barColorPrimary', 'barColorSecondary', 'bar1Indeterminate', 'bar1Determinate', 'bar1Buffer', 'bar2Indeterminate', 'bar2Buffer']);\nexport default linearProgressClasses;","'use client';\n\nimport * as React from 'react';\nimport clsx from 'clsx';\nimport PropTypes from 'prop-types';\nimport composeClasses from '@mui/utils/composeClasses';\nimport { alpha, unstable_getUnit as getUnit, unstable_toUnitless as toUnitless } from \"../styles/index.js\";\nimport { keyframes, css, styled } from \"../zero-styled/index.js\";\nimport memoTheme from \"../utils/memoTheme.js\";\nimport { useDefaultProps } from \"../DefaultPropsProvider/index.js\";\nimport { getSkeletonUtilityClass } from \"./skeletonClasses.js\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nconst useUtilityClasses = ownerState => {\n  const {\n    classes,\n    variant,\n    animation,\n    hasChildren,\n    width,\n    height\n  } = ownerState;\n  const slots = {\n    root: ['root', variant, animation, hasChildren && 'withChildren', hasChildren && !width && 'fitContent', hasChildren && !height && 'heightAuto']\n  };\n  return composeClasses(slots, getSkeletonUtilityClass, classes);\n};\nconst pulseKeyframe = keyframes`\n  0% {\n    opacity: 1;\n  }\n\n  50% {\n    opacity: 0.4;\n  }\n\n  100% {\n    opacity: 1;\n  }\n`;\nconst waveKeyframe = keyframes`\n  0% {\n    transform: translateX(-100%);\n  }\n\n  50% {\n    /* +0.5s of delay between each loop */\n    transform: translateX(100%);\n  }\n\n  100% {\n    transform: translateX(100%);\n  }\n`;\n\n// This implementation is for supporting both Styled-components v4+ and Pigment CSS.\n// A global animation has to be created here for Styled-components v4+ (https://github.com/styled-components/styled-components/blob/main/packages/styled-components/src/utils/errors.md#12).\n// which can be done by checking typeof indeterminate1Keyframe !== 'string' (at runtime, Pigment CSS transform keyframes`` to a string).\nconst pulseAnimation = typeof pulseKeyframe !== 'string' ? css`\n        animation: ${pulseKeyframe} 2s ease-in-out 0.5s infinite;\n      ` : null;\nconst waveAnimation = typeof waveKeyframe !== 'string' ? css`\n        &::after {\n          animation: ${waveKeyframe} 2s linear 0.5s infinite;\n        }\n      ` : null;\nconst SkeletonRoot = styled('span', {\n  name: 'MuiSkeleton',\n  slot: 'Root',\n  overridesResolver: (props, styles) => {\n    const {\n      ownerState\n    } = props;\n    return [styles.root, styles[ownerState.variant], ownerState.animation !== false && styles[ownerState.animation], ownerState.hasChildren && styles.withChildren, ownerState.hasChildren && !ownerState.width && styles.fitContent, ownerState.hasChildren && !ownerState.height && styles.heightAuto];\n  }\n})(memoTheme(({\n  theme\n}) => {\n  const radiusUnit = getUnit(theme.shape.borderRadius) || 'px';\n  const radiusValue = toUnitless(theme.shape.borderRadius);\n  return {\n    display: 'block',\n    // Create a \"on paper\" color with sufficient contrast retaining the color\n    backgroundColor: theme.vars ? theme.vars.palette.Skeleton.bg : alpha(theme.palette.text.primary, theme.palette.mode === 'light' ? 0.11 : 0.13),\n    height: '1.2em',\n    variants: [{\n      props: {\n        variant: 'text'\n      },\n      style: {\n        marginTop: 0,\n        marginBottom: 0,\n        height: 'auto',\n        transformOrigin: '0 55%',\n        transform: 'scale(1, 0.60)',\n        borderRadius: `${radiusValue}${radiusUnit}/${Math.round(radiusValue / 0.6 * 10) / 10}${radiusUnit}`,\n        '&:empty:before': {\n          content: '\"\\\\00a0\"'\n        }\n      }\n    }, {\n      props: {\n        variant: 'circular'\n      },\n      style: {\n        borderRadius: '50%'\n      }\n    }, {\n      props: {\n        variant: 'rounded'\n      },\n      style: {\n        borderRadius: (theme.vars || theme).shape.borderRadius\n      }\n    }, {\n      props: ({\n        ownerState\n      }) => ownerState.hasChildren,\n      style: {\n        '& > *': {\n          visibility: 'hidden'\n        }\n      }\n    }, {\n      props: ({\n        ownerState\n      }) => ownerState.hasChildren && !ownerState.width,\n      style: {\n        maxWidth: 'fit-content'\n      }\n    }, {\n      props: ({\n        ownerState\n      }) => ownerState.hasChildren && !ownerState.height,\n      style: {\n        height: 'auto'\n      }\n    }, {\n      props: {\n        animation: 'pulse'\n      },\n      style: pulseAnimation || {\n        animation: `${pulseKeyframe} 2s ease-in-out 0.5s infinite`\n      }\n    }, {\n      props: {\n        animation: 'wave'\n      },\n      style: {\n        position: 'relative',\n        overflow: 'hidden',\n        /* Fix bug in Safari https://bugs.webkit.org/show_bug.cgi?id=68196 */\n        WebkitMaskImage: '-webkit-radial-gradient(white, black)',\n        '&::after': {\n          background: `linear-gradient(\n                90deg,\n                transparent,\n                ${(theme.vars || theme).palette.action.hover},\n                transparent\n              )`,\n          content: '\"\"',\n          position: 'absolute',\n          transform: 'translateX(-100%)' /* Avoid flash during server-side hydration */,\n          bottom: 0,\n          left: 0,\n          right: 0,\n          top: 0\n        }\n      }\n    }, {\n      props: {\n        animation: 'wave'\n      },\n      style: waveAnimation || {\n        '&::after': {\n          animation: `${waveKeyframe} 2s linear 0.5s infinite`\n        }\n      }\n    }]\n  };\n}));\nconst Skeleton = /*#__PURE__*/React.forwardRef(function Skeleton(inProps, ref) {\n  const props = useDefaultProps({\n    props: inProps,\n    name: 'MuiSkeleton'\n  });\n  const {\n    animation = 'pulse',\n    className,\n    component = 'span',\n    height,\n    style,\n    variant = 'text',\n    width,\n    ...other\n  } = props;\n  const ownerState = {\n    ...props,\n    animation,\n    component,\n    variant,\n    hasChildren: Boolean(other.children)\n  };\n  const classes = useUtilityClasses(ownerState);\n  return /*#__PURE__*/_jsx(SkeletonRoot, {\n    as: component,\n    ref: ref,\n    className: clsx(classes.root, className),\n    ownerState: ownerState,\n    ...other,\n    style: {\n      width,\n      height,\n      ...style\n    }\n  });\n});\nprocess.env.NODE_ENV !== \"production\" ? Skeleton.propTypes /* remove-proptypes */ = {\n  // ┌────────────────────────────── Warning ──────────────────────────────┐\n  // │ These PropTypes are generated from the TypeScript type definitions. │\n  // │    To update them, edit the d.ts file and run `pnpm proptypes`.     │\n  // └─────────────────────────────────────────────────────────────────────┘\n  /**\n   * The animation.\n   * If `false` the animation effect is disabled.\n   * @default 'pulse'\n   */\n  animation: PropTypes.oneOf(['pulse', 'wave', false]),\n  /**\n   * Optional children to infer width and height from.\n   */\n  children: PropTypes.node,\n  /**\n   * Override or extend the styles applied to the component.\n   */\n  classes: PropTypes.object,\n  /**\n   * @ignore\n   */\n  className: PropTypes.string,\n  /**\n   * The component used for the root node.\n   * Either a string to use a HTML element or a component.\n   */\n  component: PropTypes.elementType,\n  /**\n   * Height of the skeleton.\n   * Useful when you don't want to adapt the skeleton to a text element but for instance a card.\n   */\n  height: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),\n  /**\n   * @ignore\n   */\n  style: PropTypes.object,\n  /**\n   * The system prop that allows defining system overrides as well as additional CSS styles.\n   */\n  sx: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.func, PropTypes.object, PropTypes.bool])), PropTypes.func, PropTypes.object]),\n  /**\n   * The type of content that will be rendered.\n   * @default 'text'\n   */\n  variant: PropTypes /* @typescript-to-proptypes-ignore */.oneOfType([PropTypes.oneOf(['circular', 'rectangular', 'rounded', 'text']), PropTypes.string]),\n  /**\n   * Width of the skeleton.\n   * Useful when the skeleton is inside an inline element with no width of its own.\n   */\n  width: PropTypes.oneOfType([PropTypes.number, PropTypes.string])\n} : void 0;\nexport default Skeleton;","import generateUtilityClasses from '@mui/utils/generateUtilityClasses';\nimport generateUtilityClass from '@mui/utils/generateUtilityClass';\nexport function getSkeletonUtilityClass(slot) {\n  return generateUtilityClass('MuiSkeleton', slot);\n}\nconst skeletonClasses = generateUtilityClasses('MuiSkeleton', ['root', 'text', 'rectangular', 'rounded', 'circular', 'pulse', 'wave', 'withChildren', 'fitContent', 'heightAuto']);\nexport default skeletonClasses;","import * as React from 'react';\nimport { localStorageAvailable } from \"../../utils/utils.js\";\nimport { useGridApiMethod } from \"../utils/index.js\";\nconst forceDebug = localStorageAvailable() && window.localStorage.getItem('DEBUG') != null;\nconst noop = () => {};\nconst noopLogger = {\n  debug: noop,\n  info: noop,\n  warn: noop,\n  error: noop\n};\nconst LOG_LEVELS = ['debug', 'info', 'warn', 'error'];\nfunction getAppender(name, logLevel, appender = console) {\n  const minLogLevelIdx = LOG_LEVELS.indexOf(logLevel);\n  if (minLogLevelIdx === -1) {\n    throw new Error(`MUI X: Log level ${logLevel} not recognized.`);\n  }\n  const logger = LOG_LEVELS.reduce((loggerObj, method, idx) => {\n    if (idx >= minLogLevelIdx) {\n      loggerObj[method] = (...args) => {\n        const [message, ...other] = args;\n        appender[method](`MUI X: ${name} - ${message}`, ...other);\n      };\n    } else {\n      loggerObj[method] = noop;\n    }\n    return loggerObj;\n  }, {});\n  return logger;\n}\nexport const useGridLoggerFactory = (apiRef, props) => {\n  const getLogger = React.useCallback(name => {\n    if (forceDebug) {\n      return getAppender(name, 'debug', props.logger);\n    }\n    if (!props.logLevel) {\n      return noopLogger;\n    }\n    return getAppender(name, props.logLevel.toString(), props.logger);\n  }, [props.logLevel, props.logger]);\n  useGridApiMethod(apiRef, {\n    getLogger\n  }, 'private');\n};","// Used https://gist.github.com/mudge/5830382 as a starting point.\n// See https://github.com/browserify/events/blob/master/events.js for\n// the Node.js (https://nodejs.org/api/events.html) polyfill used by webpack.\nexport class EventManager {\n  constructor() {\n    this.maxListeners = 20;\n    this.warnOnce = false;\n    this.events = {};\n  }\n  on(eventName, listener, options = {}) {\n    let collection = this.events[eventName];\n    if (!collection) {\n      collection = {\n        highPriority: new Map(),\n        regular: new Map()\n      };\n      this.events[eventName] = collection;\n    }\n    if (options.isFirst) {\n      collection.highPriority.set(listener, true);\n    } else {\n      collection.regular.set(listener, true);\n    }\n    if (process.env.NODE_ENV !== 'production') {\n      const collectionSize = collection.highPriority.size + collection.regular.size;\n      if (collectionSize > this.maxListeners && !this.warnOnce) {\n        this.warnOnce = true;\n        console.warn([`Possible EventEmitter memory leak detected. ${collectionSize} ${eventName} listeners added.`].join('\\n'));\n      }\n    }\n  }\n  removeListener(eventName, listener) {\n    if (this.events[eventName]) {\n      this.events[eventName].regular.delete(listener);\n      this.events[eventName].highPriority.delete(listener);\n    }\n  }\n  removeAllListeners() {\n    this.events = {};\n  }\n  emit(eventName, ...args) {\n    const collection = this.events[eventName];\n    if (!collection) {\n      return;\n    }\n    const highPriorityListeners = Array.from(collection.highPriority.keys());\n    const regularListeners = Array.from(collection.regular.keys());\n    for (let i = highPriorityListeners.length - 1; i >= 0; i -= 1) {\n      const listener = highPriorityListeners[i];\n      if (collection.highPriority.has(listener)) {\n        listener.apply(this, args);\n      }\n    }\n    for (let i = 0; i < regularListeners.length; i += 1) {\n      const listener = regularListeners[i];\n      if (collection.regular.has(listener)) {\n        listener.apply(this, args);\n      }\n    }\n  }\n  once(eventName, listener) {\n    // eslint-disable-next-line consistent-this\n    const that = this;\n    this.on(eventName, function oneTimeListener(...args) {\n      that.removeListener(eventName, oneTimeListener);\n      listener.apply(that, args);\n    });\n  }\n}","export class Store {\n  static create(value) {\n    return new Store(value);\n  }\n  constructor(_value) {\n    this.value = void 0;\n    this.listeners = void 0;\n    this.subscribe = fn => {\n      this.listeners.add(fn);\n      return () => {\n        this.listeners.delete(fn);\n      };\n    };\n    this.getSnapshot = () => {\n      return this.value;\n    };\n    this.update = value => {\n      this.value = value;\n      this.listeners.forEach(l => l(value));\n    };\n    this.value = _value;\n    this.listeners = new Set();\n  }\n}","import * as React from 'react';\nimport { EventManager } from '@mui/x-internals/EventManager';\nimport { Store } from \"../../utils/Store.js\";\nimport { useGridApiMethod } from \"../utils/useGridApiMethod.js\";\nimport { GridSignature } from \"../utils/useGridApiEventHandler.js\";\nconst SYMBOL_API_PRIVATE = Symbol('mui.api_private');\nconst isSyntheticEvent = event => {\n  return event.isPropagationStopped !== undefined;\n};\nexport function unwrapPrivateAPI(publicApi) {\n  return publicApi[SYMBOL_API_PRIVATE];\n}\nlet globalId = 0;\nfunction createPrivateAPI(publicApiRef) {\n  const existingPrivateApi = publicApiRef.current?.[SYMBOL_API_PRIVATE];\n  if (existingPrivateApi) {\n    return existingPrivateApi;\n  }\n  const state = {};\n  const privateApi = {\n    state,\n    store: Store.create(state),\n    instanceId: {\n      id: globalId\n    }\n  };\n  globalId += 1;\n  privateApi.getPublicApi = () => publicApiRef.current;\n  privateApi.register = (visibility, methods) => {\n    Object.keys(methods).forEach(methodName => {\n      const method = methods[methodName];\n      const currentPrivateMethod = privateApi[methodName];\n      if (currentPrivateMethod?.spying === true) {\n        currentPrivateMethod.target = method;\n      } else {\n        privateApi[methodName] = method;\n      }\n      if (visibility === 'public') {\n        const publicApi = publicApiRef.current;\n        const currentPublicMethod = publicApi[methodName];\n        if (currentPublicMethod?.spying === true) {\n          currentPublicMethod.target = method;\n        } else {\n          publicApi[methodName] = method;\n        }\n      }\n    });\n  };\n  privateApi.register('private', {\n    caches: {},\n    eventManager: new EventManager()\n  });\n  return privateApi;\n}\nfunction createPublicAPI(privateApiRef) {\n  const publicApi = {\n    get state() {\n      return privateApiRef.current.state;\n    },\n    get store() {\n      return privateApiRef.current.store;\n    },\n    get instanceId() {\n      return privateApiRef.current.instanceId;\n    },\n    [SYMBOL_API_PRIVATE]: privateApiRef.current\n  };\n  return publicApi;\n}\nexport function useGridApiInitialization(inputApiRef, props) {\n  const publicApiRef = React.useRef();\n  const privateApiRef = React.useRef();\n  if (!privateApiRef.current) {\n    privateApiRef.current = createPrivateAPI(publicApiRef);\n  }\n  if (!publicApiRef.current) {\n    publicApiRef.current = createPublicAPI(privateApiRef);\n  }\n  const publishEvent = React.useCallback((...args) => {\n    const [name, params, event = {}] = args;\n    event.defaultMuiPrevented = false;\n    if (isSyntheticEvent(event) && event.isPropagationStopped()) {\n      return;\n    }\n    const details = props.signature === GridSignature.DataGridPro || props.signature === GridSignature.DataGridPremium ? {\n      api: privateApiRef.current.getPublicApi()\n    } : {};\n    privateApiRef.current.eventManager.emit(name, params, event, details);\n  }, [privateApiRef, props.signature]);\n  const subscribeEvent = React.useCallback((event, handler, options) => {\n    privateApiRef.current.eventManager.on(event, handler, options);\n    const api = privateApiRef.current;\n    return () => {\n      api.eventManager.removeListener(event, handler);\n    };\n  }, [privateApiRef]);\n  useGridApiMethod(privateApiRef, {\n    subscribeEvent,\n    publishEvent\n  }, 'public');\n  if (inputApiRef && !inputApiRef.current?.state) {\n    inputApiRef.current = publicApiRef.current;\n  }\n  React.useImperativeHandle(inputApiRef, () => publicApiRef.current, [publicApiRef]);\n  React.useEffect(() => {\n    const api = privateApiRef.current;\n    return () => {\n      api.publishEvent('unmount');\n    };\n  }, [privateApiRef]);\n  return privateApiRef;\n}","function _typeof(o) {\n  \"@babel/helpers - typeof\";\n\n  return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) {\n    return typeof o;\n  } : function (o) {\n    return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o;\n  }, _typeof(o);\n}\nexport { _typeof as default };","import _typeof from \"./typeof.js\";\nimport toPrimitive from \"./toPrimitive.js\";\nfunction toPropertyKey(t) {\n  var i = toPrimitive(t, \"string\");\n  return \"symbol\" == _typeof(i) ? i : i + \"\";\n}\nexport { toPropertyKey as default };","import _typeof from \"./typeof.js\";\nfunction toPrimitive(t, r) {\n  if (\"object\" != _typeof(t) || !t) return t;\n  var e = t[Symbol.toPrimitive];\n  if (void 0 !== e) {\n    var i = e.call(t, r || \"default\");\n    if (\"object\" != _typeof(i)) return i;\n    throw new TypeError(\"@@toPrimitive must return a primitive value.\");\n  }\n  return (\"string\" === r ? String : Number)(t);\n}\nexport { toPrimitive as default };","import _objectWithoutPropertiesLoose from \"@babel/runtime/helpers/esm/objectWithoutPropertiesLoose\";\nimport _toPropertyKey from \"@babel/runtime/helpers/esm/toPropertyKey\";\nimport * as React from 'react';\nimport { useGridApiMethod } from \"../../utils/useGridApiMethod.js\";\n/**\n * Implement the Pipeline Pattern\n *\n * More information and detailed example in (TODO add link to technical doc when ready)\n *\n * Some plugins contains custom logic to enrich data provided by other plugins or components.\n * For instance, the row grouping plugin needs to add / remove the grouping columns when the grid columns are updated.\n *\n * =====================================================================================================================\n *\n * The plugin containing the custom logic must use:\n *\n * - `useGridRegisterPipeProcessor` to register their processor.\n *\n * - `apiRef.current.requestPipeProcessorsApplication` to imperatively re-apply a group.\n *   This method should be used in last resort.\n *   Most of the time, the application should be triggered by an update on the deps of the processor.\n *\n * =====================================================================================================================\n *\n * The plugin or component that needs to enrich its data must use:\n *\n * - `apiRef.current.unstable_applyPipeProcessors` to run in chain all the processors of a given group.\n *\n * - `useGridRegisterPipeApplier` to re-apply the whole pipe when requested.\n *   The applier will be called when:\n *   * a processor is registered.\n *   * `apiRef.current.requestPipeProcessorsApplication` is called for the given group.\n */\nexport const useGridPipeProcessing = apiRef => {\n  const cache = React.useRef({});\n  const isRunning = React.useRef(false);\n  const runAppliers = React.useCallback(groupCache => {\n    if (isRunning.current || !groupCache) {\n      return;\n    }\n    isRunning.current = true;\n    Object.values(groupCache.appliers).forEach(callback => {\n      callback();\n    });\n    isRunning.current = false;\n  }, []);\n  const registerPipeProcessor = React.useCallback((group, id, processor) => {\n    if (!cache.current[group]) {\n      cache.current[group] = {\n        processors: new Map(),\n        processorsAsArray: [],\n        appliers: {}\n      };\n    }\n    const groupCache = cache.current[group];\n    const oldProcessor = groupCache.processors.get(id);\n    if (oldProcessor !== processor) {\n      groupCache.processors.set(id, processor);\n      groupCache.processorsAsArray = Array.from(cache.current[group].processors.values());\n      runAppliers(groupCache);\n    }\n    return () => {\n      cache.current[group].processors.delete(id);\n      cache.current[group].processorsAsArray = Array.from(cache.current[group].processors.values());\n    };\n  }, [runAppliers]);\n  const registerPipeApplier = React.useCallback((group, id, applier) => {\n    if (!cache.current[group]) {\n      cache.current[group] = {\n        processors: new Map(),\n        processorsAsArray: [],\n        appliers: {}\n      };\n    }\n    cache.current[group].appliers[id] = applier;\n    return () => {\n      const _appliers = cache.current[group].appliers,\n        otherAppliers = _objectWithoutPropertiesLoose(_appliers, [id].map(_toPropertyKey));\n      cache.current[group].appliers = otherAppliers;\n    };\n  }, []);\n  const requestPipeProcessorsApplication = React.useCallback(group => {\n    runAppliers(cache.current[group]);\n  }, [runAppliers]);\n  const applyPipeProcessors = React.useCallback((...args) => {\n    const [group, value, context] = args;\n    if (!cache.current[group]) {\n      return value;\n    }\n    const processors = cache.current[group].processorsAsArray;\n    let result = value;\n    for (let i = 0; i < processors.length; i += 1) {\n      result = processors[i](result, context);\n    }\n    return result;\n  }, []);\n  const preProcessingPrivateApi = {\n    registerPipeProcessor,\n    registerPipeApplier,\n    requestPipeProcessorsApplication\n  };\n  const preProcessingPublicApi = {\n    unstable_applyPipeProcessors: applyPipeProcessors\n  };\n  useGridApiMethod(apiRef, preProcessingPrivateApi, 'private');\n  useGridApiMethod(apiRef, preProcessingPublicApi, 'public');\n};","import _objectWithoutPropertiesLoose from \"@babel/runtime/helpers/esm/objectWithoutPropertiesLoose\";\nimport _toPropertyKey from \"@babel/runtime/helpers/esm/toPropertyKey\";\nimport * as React from 'react';\nimport { useGridApiMethod } from \"../../utils/useGridApiMethod.js\";\nexport const GRID_DEFAULT_STRATEGY = 'none';\nexport const GRID_STRATEGIES_PROCESSORS = {\n  rowTreeCreation: 'rowTree',\n  filtering: 'rowTree',\n  sorting: 'rowTree',\n  visibleRowsLookupCreation: 'rowTree'\n};\n/**\n * Implements a variant of the Strategy Pattern (see https://en.wikipedia.org/wiki/Strategy_pattern)\n *\n * More information and detailed example in (TODO add link to technical doc when ready)\n *\n * Some plugins contains custom logic that must only be applied if the right strategy is active.\n * For instance, the row grouping plugin has a custom filtering algorithm.\n * This algorithm must be applied by the filtering plugin if the row grouping is the current way of grouping rows,\n * but not if the tree data is the current way of grouping rows.\n *\n * =====================================================================================================================\n *\n * The plugin containing the custom logic must use:\n *\n * - `useGridRegisterStrategyProcessor` to register their processor.\n *   When the processor of the active strategy changes, it will fire `\"activeStrategyProcessorChange\"` to re-apply the processor.\n *\n * - `apiRef.current.setStrategyAvailability` to tell if their strategy can be used.\n *\n * =====================================================================================================================\n *\n * The plugin or component that needs to apply the custom logic of the current strategy must use:\n *\n * - `apiRef.current.applyStrategyProcessor` to run the processor of the active strategy for a given processor name.\n *\n * - the \"strategyAvailabilityChange\" event to update something when the active strategy changes.\n *    Warning: Be careful not to apply the processor several times.\n *    For instance \"rowsSet\" is fired by `useGridRows` whenever the active strategy changes.\n *    So listening to both would most likely run your logic twice.\n *\n * - The \"activeStrategyProcessorChange\" event to update something when the processor of the active strategy changes.\n *\n * =====================================================================================================================\n *\n * Each processor name is part of a strategy group which can only have one active strategy at the time.\n * For now, there is only one strategy group named `rowTree` which customize\n * - row tree creation algorithm.\n * - sorting algorithm.\n * - filtering algorithm.\n */\nexport const useGridStrategyProcessing = apiRef => {\n  const availableStrategies = React.useRef(new Map());\n  const strategiesCache = React.useRef({});\n  const registerStrategyProcessor = React.useCallback((strategyName, processorName, processor) => {\n    const cleanup = () => {\n      const _ref = strategiesCache.current[processorName],\n        otherProcessors = _objectWithoutPropertiesLoose(_ref, [strategyName].map(_toPropertyKey));\n      strategiesCache.current[processorName] = otherProcessors;\n    };\n    if (!strategiesCache.current[processorName]) {\n      strategiesCache.current[processorName] = {};\n    }\n    const groupPreProcessors = strategiesCache.current[processorName];\n    const previousProcessor = groupPreProcessors[strategyName];\n    groupPreProcessors[strategyName] = processor;\n    if (!previousProcessor || previousProcessor === processor) {\n      return cleanup;\n    }\n    if (strategyName === apiRef.current.getActiveStrategy(GRID_STRATEGIES_PROCESSORS[processorName])) {\n      apiRef.current.publishEvent('activeStrategyProcessorChange', processorName);\n    }\n    return cleanup;\n  }, [apiRef]);\n  const applyStrategyProcessor = React.useCallback((processorName, params) => {\n    const activeStrategy = apiRef.current.getActiveStrategy(GRID_STRATEGIES_PROCESSORS[processorName]);\n    if (activeStrategy == null) {\n      throw new Error(\"Can't apply a strategy processor before defining an active strategy\");\n    }\n    const groupCache = strategiesCache.current[processorName];\n    if (!groupCache || !groupCache[activeStrategy]) {\n      throw new Error(`No processor found for processor \"${processorName}\" on strategy \"${activeStrategy}\"`);\n    }\n    const processor = groupCache[activeStrategy];\n    return processor(params);\n  }, [apiRef]);\n  const getActiveStrategy = React.useCallback(strategyGroup => {\n    const strategyEntries = Array.from(availableStrategies.current.entries());\n    const availableStrategyEntry = strategyEntries.find(([, strategy]) => {\n      if (strategy.group !== strategyGroup) {\n        return false;\n      }\n      return strategy.isAvailable();\n    });\n    return availableStrategyEntry?.[0] ?? GRID_DEFAULT_STRATEGY;\n  }, []);\n  const setStrategyAvailability = React.useCallback((strategyGroup, strategyName, isAvailable) => {\n    availableStrategies.current.set(strategyName, {\n      group: strategyGroup,\n      isAvailable\n    });\n    apiRef.current.publishEvent('strategyAvailabilityChange');\n  }, [apiRef]);\n  const strategyProcessingApi = {\n    registerStrategyProcessor,\n    applyStrategyProcessor,\n    getActiveStrategy,\n    setStrategyAvailability\n  };\n  useGridApiMethod(apiRef, strategyProcessingApi, 'private');\n};","import { useGridRefs } from \"./useGridRefs.js\";\nimport { useGridIsRtl } from \"./useGridIsRtl.js\";\nimport { useGridLoggerFactory } from \"./useGridLoggerFactory.js\";\nimport { useGridApiInitialization } from \"./useGridApiInitialization.js\";\nimport { useGridLocaleText } from \"./useGridLocaleText.js\";\nimport { useGridPipeProcessing } from \"./pipeProcessing/index.js\";\nimport { useGridStrategyProcessing } from \"./strategyProcessing/index.js\";\nimport { useGridStateInitialization } from \"./useGridStateInitialization.js\";\n\n/**\n * Initialize the technical pieces of the DataGrid (logger, state, ...) that any DataGrid implementation needs\n */\nexport const useGridInitialization = (inputApiRef, props) => {\n  const privateApiRef = useGridApiInitialization(inputApiRef, props);\n  useGridRefs(privateApiRef);\n  useGridIsRtl(privateApiRef);\n  useGridLoggerFactory(privateApiRef, props);\n  useGridStateInitialization(privateApiRef);\n  useGridPipeProcessing(privateApiRef);\n  useGridStrategyProcessing(privateApiRef);\n  useGridLocaleText(privateApiRef, props);\n  privateApiRef.current.register('private', {\n    rootProps: props\n  });\n  return privateApiRef;\n};","import * as React from 'react';\nexport const useGridRefs = apiRef => {\n  const rootElementRef = React.useRef(null);\n  const mainElementRef = React.useRef(null);\n  const virtualScrollerRef = React.useRef(null);\n  const columnHeadersContainerRef = React.useRef(null);\n  apiRef.current.register('public', {\n    rootElementRef\n  });\n  apiRef.current.register('private', {\n    mainElementRef,\n    virtualScrollerRef,\n    columnHeadersContainerRef\n  });\n};","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport * as React from 'react';\nimport { useRtl } from '@mui/system/RtlProvider';\nexport const useGridIsRtl = apiRef => {\n  const isRtl = useRtl();\n  if (apiRef.current.state.isRtl === undefined) {\n    apiRef.current.state.isRtl = isRtl;\n  }\n  const isFirstEffect = React.useRef(true);\n  React.useEffect(() => {\n    if (isFirstEffect.current) {\n      isFirstEffect.current = false;\n    } else {\n      apiRef.current.setState(state => _extends({}, state, {\n        isRtl\n      }));\n    }\n  }, [apiRef, isRtl]);\n};","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport * as React from 'react';\nimport { useGridApiMethod } from \"../utils/index.js\";\nimport { isFunction } from \"../../utils/utils.js\";\nexport const useGridStateInitialization = apiRef => {\n  const controlStateMapRef = React.useRef({});\n  const [, rawForceUpdate] = React.useState();\n  const registerControlState = React.useCallback(controlStateItem => {\n    controlStateMapRef.current[controlStateItem.stateId] = controlStateItem;\n  }, []);\n  const setState = React.useCallback((state, reason) => {\n    let newState;\n    if (isFunction(state)) {\n      newState = state(apiRef.current.state);\n    } else {\n      newState = state;\n    }\n    if (apiRef.current.state === newState) {\n      return false;\n    }\n    let ignoreSetState = false;\n\n    // Apply the control state constraints\n    const updatedControlStateIds = [];\n    Object.keys(controlStateMapRef.current).forEach(stateId => {\n      const controlState = controlStateMapRef.current[stateId];\n      const oldSubState = controlState.stateSelector(apiRef.current.state, apiRef.current.instanceId);\n      const newSubState = controlState.stateSelector(newState, apiRef.current.instanceId);\n      if (newSubState === oldSubState) {\n        return;\n      }\n      updatedControlStateIds.push({\n        stateId: controlState.stateId,\n        hasPropChanged: newSubState !== controlState.propModel\n      });\n\n      // The state is controlled, the prop should always win\n      if (controlState.propModel !== undefined && newSubState !== controlState.propModel) {\n        ignoreSetState = true;\n      }\n    });\n    if (updatedControlStateIds.length > 1) {\n      // Each hook modify its own state, and it should not leak\n      // Events are here to forward to other hooks and apply changes.\n      // You are trying to update several states in a no isolated way.\n      throw new Error(`You're not allowed to update several sub-state in one transaction. You already updated ${updatedControlStateIds[0].stateId}, therefore, you're not allowed to update ${updatedControlStateIds.map(el => el.stateId).join(', ')} in the same transaction.`);\n    }\n    if (!ignoreSetState) {\n      // We always assign it as we mutate rows for perf reason.\n      apiRef.current.state = newState;\n      apiRef.current.publishEvent('stateChange', newState);\n      apiRef.current.store.update(newState);\n    }\n    if (updatedControlStateIds.length === 1) {\n      const {\n        stateId,\n        hasPropChanged\n      } = updatedControlStateIds[0];\n      const controlState = controlStateMapRef.current[stateId];\n      const model = controlState.stateSelector(newState, apiRef.current.instanceId);\n      if (controlState.propOnChange && hasPropChanged) {\n        controlState.propOnChange(model, {\n          reason,\n          api: apiRef.current\n        });\n      }\n      if (!ignoreSetState) {\n        apiRef.current.publishEvent(controlState.changeEvent, model, {\n          reason\n        });\n      }\n    }\n    return !ignoreSetState;\n  }, [apiRef]);\n  const updateControlState = React.useCallback((key, state, reason) => {\n    return apiRef.current.setState(previousState => {\n      return _extends({}, previousState, {\n        [key]: state(previousState[key])\n      });\n    }, reason);\n  }, [apiRef]);\n  const forceUpdate = React.useCallback(() => rawForceUpdate(() => apiRef.current.state), [apiRef]);\n  const publicStateApi = {\n    setState,\n    forceUpdate\n  };\n  const privateStateApi = {\n    updateControlState,\n    registerControlState\n  };\n  useGridApiMethod(apiRef, publicStateApi, 'public');\n  useGridApiMethod(apiRef, privateStateApi, 'private');\n};","import * as React from 'react';\nexport const useGridLocaleText = (apiRef, props) => {\n  const getLocaleText = React.useCallback(key => {\n    if (props.localeText[key] == null) {\n      throw new Error(`Missing translation for key ${key}.`);\n    }\n    return props.localeText[key];\n  }, [props.localeText]);\n  apiRef.current.register('public', {\n    getLocaleText\n  });\n};","import * as React from 'react';\nexport const useGridInitializeState = (initializer, privateApiRef, props) => {\n  const isInitialized = React.useRef(false);\n  if (!isInitialized.current) {\n    privateApiRef.current.state = initializer(privateApiRef.current.state, props, privateApiRef);\n    isInitialized.current = true;\n  }\n};","import { warnOnce } from '@mui/x-internals/warning';\nimport { GRID_CHECKBOX_SELECTION_COL_DEF } from \"../../../../colDef/index.js\";\nfunction sanitizeCellValue(value, csvOptions) {\n  if (value === null || value === undefined) {\n    return '';\n  }\n  const valueStr = typeof value === 'string' ? value : `${value}`;\n  if (csvOptions.shouldAppendQuotes || csvOptions.escapeFormulas) {\n    const escapedValue = valueStr.replace(/\"/g, '\"\"');\n    if (csvOptions.escapeFormulas) {\n      // See https://owasp.org/www-community/attacks/CSV_Injection\n      if (['=', '+', '-', '@', '\\t', '\\r'].includes(escapedValue[0])) {\n        return `\"'${escapedValue}\"`;\n      }\n    }\n    // Make sure value containing delimiter or line break won't be split into multiple cells\n    if ([csvOptions.delimiter, '\\n', '\\r', '\"'].some(delimiter => valueStr.includes(delimiter))) {\n      return `\"${escapedValue}\"`;\n    }\n    return escapedValue;\n  }\n  return valueStr;\n}\nexport const serializeCellValue = (cellParams, options) => {\n  const {\n    csvOptions,\n    ignoreValueFormatter\n  } = options;\n  let value;\n  if (ignoreValueFormatter) {\n    const columnType = cellParams.colDef.type;\n    if (columnType === 'number') {\n      value = String(cellParams.value);\n    } else if (columnType === 'date' || columnType === 'dateTime') {\n      value = cellParams.value?.toISOString();\n    } else if (typeof cellParams.value?.toString === 'function') {\n      value = cellParams.value.toString();\n    } else {\n      value = cellParams.value;\n    }\n  } else {\n    value = cellParams.formattedValue;\n  }\n  return sanitizeCellValue(value, csvOptions);\n};\nclass CSVRow {\n  constructor(options) {\n    this.options = void 0;\n    this.rowString = '';\n    this.isEmpty = true;\n    this.options = options;\n  }\n  addValue(value) {\n    if (!this.isEmpty) {\n      this.rowString += this.options.csvOptions.delimiter;\n    }\n    if (typeof this.options.sanitizeCellValue === 'function') {\n      this.rowString += this.options.sanitizeCellValue(value, this.options.csvOptions);\n    } else {\n      this.rowString += value;\n    }\n    this.isEmpty = false;\n  }\n  getRowString() {\n    return this.rowString;\n  }\n}\nconst serializeRow = ({\n  id,\n  columns,\n  getCellParams,\n  csvOptions,\n  ignoreValueFormatter\n}) => {\n  const row = new CSVRow({\n    csvOptions\n  });\n  columns.forEach(column => {\n    const cellParams = getCellParams(id, column.field);\n    if (process.env.NODE_ENV !== 'production') {\n      if (String(cellParams.formattedValue) === '[object Object]') {\n        warnOnce(['MUI X: When the value of a field is an object or a `renderCell` is provided, the CSV export might not display the value correctly.', 'You can provide a `valueFormatter` with a string representation to be used.']);\n      }\n    }\n    row.addValue(serializeCellValue(cellParams, {\n      ignoreValueFormatter,\n      csvOptions\n    }));\n  });\n  return row.getRowString();\n};\nexport function buildCSV(options) {\n  const {\n    columns,\n    rowIds,\n    csvOptions,\n    ignoreValueFormatter,\n    apiRef\n  } = options;\n  const CSVBody = rowIds.reduce((acc, id) => `${acc}${serializeRow({\n    id,\n    columns,\n    getCellParams: apiRef.current.getCellParams,\n    ignoreValueFormatter,\n    csvOptions\n  })}\\r\\n`, '').trim();\n  if (!csvOptions.includeHeaders) {\n    return CSVBody;\n  }\n  const filteredColumns = columns.filter(column => column.field !== GRID_CHECKBOX_SELECTION_COL_DEF.field);\n  const headerRows = [];\n  if (csvOptions.includeColumnGroupsHeaders) {\n    const columnGroupLookup = apiRef.current.getAllGroupDetails();\n    let maxColumnGroupsDepth = 0;\n    const columnGroupPathsLookup = filteredColumns.reduce((acc, column) => {\n      const columnGroupPath = apiRef.current.getColumnGroupPath(column.field);\n      acc[column.field] = columnGroupPath;\n      maxColumnGroupsDepth = Math.max(maxColumnGroupsDepth, columnGroupPath.length);\n      return acc;\n    }, {});\n    for (let i = 0; i < maxColumnGroupsDepth; i += 1) {\n      const headerGroupRow = new CSVRow({\n        csvOptions,\n        sanitizeCellValue\n      });\n      headerRows.push(headerGroupRow);\n      filteredColumns.forEach(column => {\n        const columnGroupId = (columnGroupPathsLookup[column.field] || [])[i];\n        const columnGroup = columnGroupLookup[columnGroupId];\n        headerGroupRow.addValue(columnGroup ? columnGroup.headerName || columnGroup.groupId : '');\n      });\n    }\n  }\n  const mainHeaderRow = new CSVRow({\n    csvOptions,\n    sanitizeCellValue\n  });\n  filteredColumns.forEach(column => {\n    mainHeaderRow.addValue(column.headerName || column.field);\n  });\n  headerRows.push(mainHeaderRow);\n  const CSVHead = `${headerRows.map(row => row.getRowString()).join('\\r\\n')}\\r\\n`;\n  return `${CSVHead}${CSVBody}`.trim();\n}","import * as React from 'react';\nimport { useGridApiOptionHandler, useGridNativeEventListener } from \"../../utils/index.js\";\nimport { gridFocusCellSelector } from \"../focus/gridFocusStateSelector.js\";\nimport { serializeCellValue } from \"../export/serializers/csvSerializer.js\";\nfunction writeToClipboardPolyfill(data) {\n  const span = document.createElement('span');\n  span.style.whiteSpace = 'pre';\n  span.style.userSelect = 'all';\n  span.style.opacity = '0px';\n  span.textContent = data;\n  document.body.appendChild(span);\n  const range = document.createRange();\n  range.selectNode(span);\n  const selection = window.getSelection();\n  selection.removeAllRanges();\n  selection.addRange(range);\n  try {\n    document.execCommand('copy');\n  } finally {\n    document.body.removeChild(span);\n  }\n}\nfunction copyToClipboard(data) {\n  if (navigator.clipboard) {\n    navigator.clipboard.writeText(data).catch(() => {\n      writeToClipboardPolyfill(data);\n    });\n  } else {\n    writeToClipboardPolyfill(data);\n  }\n}\nfunction hasNativeSelection(element) {\n  // When getSelection is called on an <iframe> that is not displayed Firefox will return null.\n  if (window.getSelection()?.toString()) {\n    return true;\n  }\n\n  // window.getSelection() returns an empty string in Firefox for selections inside a form element.\n  // See: https://bugzilla.mozilla.org/show_bug.cgi?id=85686.\n  // Instead, we can use element.selectionStart that is only defined on form elements.\n  if (element && (element.selectionEnd || 0) - (element.selectionStart || 0) > 0) {\n    return true;\n  }\n  return false;\n}\n\n/**\n * @requires useGridCsvExport (method)\n * @requires useGridSelection (method)\n */\nexport const useGridClipboard = (apiRef, props) => {\n  const ignoreValueFormatterProp = props.ignoreValueFormatterDuringExport;\n  const ignoreValueFormatter = (typeof ignoreValueFormatterProp === 'object' ? ignoreValueFormatterProp?.clipboardExport : ignoreValueFormatterProp) || false;\n  const clipboardCopyCellDelimiter = props.clipboardCopyCellDelimiter;\n  const handleCopy = React.useCallback(event => {\n    if (!((event.ctrlKey || event.metaKey) && event.key.toLowerCase() === 'c' && !event.shiftKey && !event.altKey)) {\n      return;\n    }\n\n    // Do nothing if there's a native selection\n    if (hasNativeSelection(event.target)) {\n      return;\n    }\n    let textToCopy = '';\n    const selectedRows = apiRef.current.getSelectedRows();\n    if (selectedRows.size > 0) {\n      textToCopy = apiRef.current.getDataAsCsv({\n        includeHeaders: false,\n        delimiter: clipboardCopyCellDelimiter,\n        shouldAppendQuotes: false,\n        escapeFormulas: false\n      });\n    } else {\n      const focusedCell = gridFocusCellSelector(apiRef);\n      if (focusedCell) {\n        const cellParams = apiRef.current.getCellParams(focusedCell.id, focusedCell.field);\n        textToCopy = serializeCellValue(cellParams, {\n          csvOptions: {\n            delimiter: clipboardCopyCellDelimiter,\n            shouldAppendQuotes: false,\n            escapeFormulas: false\n          },\n          ignoreValueFormatter\n        });\n      }\n    }\n    textToCopy = apiRef.current.unstable_applyPipeProcessors('clipboardCopy', textToCopy);\n    if (textToCopy) {\n      copyToClipboard(textToCopy);\n      apiRef.current.publishEvent('clipboardCopy', textToCopy);\n    }\n  }, [apiRef, ignoreValueFormatter, clipboardCopyCellDelimiter]);\n  useGridNativeEventListener(apiRef, apiRef.current.rootElementRef, 'keydown', handleCopy);\n  useGridApiOptionHandler(apiRef, 'clipboardCopy', props.onClipboardCopy);\n};","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport * as React from 'react';\nimport { useGridLogger, useGridApiMethod, useGridApiEventHandler } from \"../../utils/index.js\";\nimport { gridColumnMenuSelector } from \"./columnMenuSelector.js\";\nimport { gridColumnLookupSelector, gridColumnVisibilityModelSelector, gridColumnFieldsSelector } from \"../columns/gridColumnsSelector.js\";\nexport const columnMenuStateInitializer = state => _extends({}, state, {\n  columnMenu: {\n    open: false\n  }\n});\n\n/**\n * @requires useGridColumnResize (event)\n * @requires useGridInfiniteLoader (event)\n */\nexport const useGridColumnMenu = apiRef => {\n  const logger = useGridLogger(apiRef, 'useGridColumnMenu');\n\n  /**\n   * API METHODS\n   */\n  const showColumnMenu = React.useCallback(field => {\n    const columnMenuState = gridColumnMenuSelector(apiRef.current.state);\n    const newState = {\n      open: true,\n      field\n    };\n    const shouldUpdate = newState.open !== columnMenuState.open || newState.field !== columnMenuState.field;\n    if (shouldUpdate) {\n      apiRef.current.setState(state => {\n        if (state.columnMenu.open && state.columnMenu.field === field) {\n          return state;\n        }\n        logger.debug('Opening Column Menu');\n        return _extends({}, state, {\n          columnMenu: {\n            open: true,\n            field\n          }\n        });\n      });\n      apiRef.current.hidePreferences();\n      apiRef.current.forceUpdate();\n    }\n  }, [apiRef, logger]);\n  const hideColumnMenu = React.useCallback(() => {\n    const columnMenuState = gridColumnMenuSelector(apiRef.current.state);\n    if (columnMenuState.field) {\n      const columnLookup = gridColumnLookupSelector(apiRef);\n      const columnVisibilityModel = gridColumnVisibilityModelSelector(apiRef);\n      const orderedFields = gridColumnFieldsSelector(apiRef);\n      let fieldToFocus = columnMenuState.field;\n\n      // If the column was removed from the grid, we need to find the closest visible field\n      if (!columnLookup[fieldToFocus]) {\n        fieldToFocus = orderedFields[0];\n      }\n\n      // If the field to focus is hidden, we need to find the closest visible field\n      if (columnVisibilityModel[fieldToFocus] === false) {\n        // contains visible column fields + the field that was just hidden\n        const visibleOrderedFields = orderedFields.filter(field => {\n          if (field === fieldToFocus) {\n            return true;\n          }\n          return columnVisibilityModel[field] !== false;\n        });\n        const fieldIndex = visibleOrderedFields.indexOf(fieldToFocus);\n        fieldToFocus = visibleOrderedFields[fieldIndex + 1] || visibleOrderedFields[fieldIndex - 1];\n      }\n      apiRef.current.setColumnHeaderFocus(fieldToFocus);\n    }\n    const newState = {\n      open: false,\n      field: undefined\n    };\n    const shouldUpdate = newState.open !== columnMenuState.open || newState.field !== columnMenuState.field;\n    if (shouldUpdate) {\n      apiRef.current.setState(state => {\n        logger.debug('Hiding Column Menu');\n        return _extends({}, state, {\n          columnMenu: newState\n        });\n      });\n      apiRef.current.forceUpdate();\n    }\n  }, [apiRef, logger]);\n  const toggleColumnMenu = React.useCallback(field => {\n    logger.debug('Toggle Column Menu');\n    const columnMenu = gridColumnMenuSelector(apiRef.current.state);\n    if (!columnMenu.open || columnMenu.field !== field) {\n      showColumnMenu(field);\n    } else {\n      hideColumnMenu();\n    }\n  }, [apiRef, logger, showColumnMenu, hideColumnMenu]);\n  const columnMenuApi = {\n    showColumnMenu,\n    hideColumnMenu,\n    toggleColumnMenu\n  };\n  useGridApiMethod(apiRef, columnMenuApi, 'public');\n  useGridApiEventHandler(apiRef, 'columnResizeStart', hideColumnMenu);\n  useGridApiEventHandler(apiRef, 'virtualScrollerWheel', apiRef.current.hideColumnMenu);\n  useGridApiEventHandler(apiRef, 'virtualScrollerTouchMove', apiRef.current.hideColumnMenu);\n};","import * as React from 'react';\nimport { useFirstRender } from \"../../utils/useFirstRender.js\";\nexport const useGridRegisterPipeProcessor = (apiRef, group, callback) => {\n  const cleanup = React.useRef();\n  const id = React.useRef(`mui-${Math.round(Math.random() * 1e9)}`);\n  const registerPreProcessor = React.useCallback(() => {\n    cleanup.current = apiRef.current.registerPipeProcessor(group, id.current, callback);\n  }, [apiRef, callback, group]);\n  useFirstRender(() => {\n    registerPreProcessor();\n  });\n  const isFirstRender = React.useRef(true);\n  React.useEffect(() => {\n    if (isFirstRender.current) {\n      isFirstRender.current = false;\n    } else {\n      registerPreProcessor();\n    }\n    return () => {\n      if (cleanup.current) {\n        cleanup.current();\n        cleanup.current = null;\n      }\n    };\n  }, [registerPreProcessor]);\n};","import * as React from 'react';\nimport { useFirstRender } from \"../../utils/useFirstRender.js\";\nexport const useGridRegisterPipeApplier = (apiRef, group, callback) => {\n  const cleanup = React.useRef();\n  const id = React.useRef(`mui-${Math.round(Math.random() * 1e9)}`);\n  const registerPreProcessor = React.useCallback(() => {\n    cleanup.current = apiRef.current.registerPipeApplier(group, id.current, callback);\n  }, [apiRef, callback, group]);\n  useFirstRender(() => {\n    registerPreProcessor();\n  });\n  const isFirstRender = React.useRef(true);\n  React.useEffect(() => {\n    if (isFirstRender.current) {\n      isFirstRender.current = false;\n    } else {\n      registerPreProcessor();\n    }\n    return () => {\n      if (cleanup.current) {\n        cleanup.current();\n        cleanup.current = null;\n      }\n    };\n  }, [registerPreProcessor]);\n};","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport * as React from 'react';\nimport { useGridApiMethod } from \"../../utils/useGridApiMethod.js\";\nimport { useGridLogger } from \"../../utils/useGridLogger.js\";\nimport { gridColumnFieldsSelector, gridColumnDefinitionsSelector, gridColumnLookupSelector, gridColumnsStateSelector, gridColumnVisibilityModelSelector, gridVisibleColumnDefinitionsSelector, gridColumnPositionsSelector } from \"./gridColumnsSelector.js\";\nimport { GridSignature, useGridApiEventHandler } from \"../../utils/useGridApiEventHandler.js\";\nimport { useGridRegisterPipeProcessor, useGridRegisterPipeApplier } from \"../../core/pipeProcessing/index.js\";\nimport { EMPTY_PINNED_COLUMN_FIELDS } from \"./gridColumnsInterfaces.js\";\nimport { hydrateColumnsWidth, createColumnsState, COLUMNS_DIMENSION_PROPERTIES } from \"./gridColumnsUtils.js\";\nimport { GridPreferencePanelsValue } from \"../preferencesPanel/index.js\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nexport const columnsStateInitializer = (state, props, apiRef) => {\n  const columnsState = createColumnsState({\n    apiRef,\n    columnsToUpsert: props.columns,\n    initialState: props.initialState?.columns,\n    columnVisibilityModel: props.columnVisibilityModel ?? props.initialState?.columns?.columnVisibilityModel ?? {},\n    keepOnlyColumnsToUpsert: true\n  });\n  return _extends({}, state, {\n    columns: columnsState,\n    // In pro/premium, this part of the state is defined. We give it an empty but defined value\n    // for the community version.\n    pinnedColumns: state.pinnedColumns ?? EMPTY_PINNED_COLUMN_FIELDS\n  });\n};\n\n/**\n * @requires useGridParamsApi (method)\n * @requires useGridDimensions (method, event) - can be after\n * TODO: Impossible priority - useGridParamsApi also needs to be after useGridColumns\n */\nexport function useGridColumns(apiRef, props) {\n  const logger = useGridLogger(apiRef, 'useGridColumns');\n  const previousColumnsProp = React.useRef(props.columns);\n  apiRef.current.registerControlState({\n    stateId: 'visibleColumns',\n    propModel: props.columnVisibilityModel,\n    propOnChange: props.onColumnVisibilityModelChange,\n    stateSelector: gridColumnVisibilityModelSelector,\n    changeEvent: 'columnVisibilityModelChange'\n  });\n  const setGridColumnsState = React.useCallback(columnsState => {\n    logger.debug('Updating columns state.');\n    apiRef.current.setState(mergeColumnsState(columnsState));\n    apiRef.current.publishEvent('columnsChange', columnsState.orderedFields);\n    apiRef.current.updateRenderContext?.();\n    apiRef.current.forceUpdate();\n  }, [logger, apiRef]);\n\n  /**\n   * API METHODS\n   */\n  const getColumn = React.useCallback(field => gridColumnLookupSelector(apiRef)[field], [apiRef]);\n  const getAllColumns = React.useCallback(() => gridColumnDefinitionsSelector(apiRef), [apiRef]);\n  const getVisibleColumns = React.useCallback(() => gridVisibleColumnDefinitionsSelector(apiRef), [apiRef]);\n  const getColumnIndex = React.useCallback((field, useVisibleColumns = true) => {\n    const columns = useVisibleColumns ? gridVisibleColumnDefinitionsSelector(apiRef) : gridColumnDefinitionsSelector(apiRef);\n    return columns.findIndex(col => col.field === field);\n  }, [apiRef]);\n  const getColumnPosition = React.useCallback(field => {\n    const index = getColumnIndex(field);\n    return gridColumnPositionsSelector(apiRef)[index];\n  }, [apiRef, getColumnIndex]);\n  const setColumnVisibilityModel = React.useCallback(model => {\n    const currentModel = gridColumnVisibilityModelSelector(apiRef);\n    if (currentModel !== model) {\n      apiRef.current.setState(state => _extends({}, state, {\n        columns: createColumnsState({\n          apiRef,\n          columnsToUpsert: [],\n          initialState: undefined,\n          columnVisibilityModel: model,\n          keepOnlyColumnsToUpsert: false\n        })\n      }));\n      apiRef.current.updateRenderContext?.();\n      apiRef.current.forceUpdate();\n    }\n  }, [apiRef]);\n  const updateColumns = React.useCallback(columns => {\n    const columnsState = createColumnsState({\n      apiRef,\n      columnsToUpsert: columns,\n      initialState: undefined,\n      keepOnlyColumnsToUpsert: false\n    });\n    setGridColumnsState(columnsState);\n  }, [apiRef, setGridColumnsState]);\n  const setColumnVisibility = React.useCallback((field, isVisible) => {\n    const columnVisibilityModel = gridColumnVisibilityModelSelector(apiRef);\n    const isCurrentlyVisible = columnVisibilityModel[field] ?? true;\n    if (isVisible !== isCurrentlyVisible) {\n      const newModel = _extends({}, columnVisibilityModel, {\n        [field]: isVisible\n      });\n      apiRef.current.setColumnVisibilityModel(newModel);\n    }\n  }, [apiRef]);\n  const getColumnIndexRelativeToVisibleColumns = React.useCallback(field => {\n    const allColumns = gridColumnFieldsSelector(apiRef);\n    return allColumns.findIndex(col => col === field);\n  }, [apiRef]);\n  const setColumnIndex = React.useCallback((field, targetIndexPosition) => {\n    const allColumns = gridColumnFieldsSelector(apiRef);\n    const oldIndexPosition = getColumnIndexRelativeToVisibleColumns(field);\n    if (oldIndexPosition === targetIndexPosition) {\n      return;\n    }\n    logger.debug(`Moving column ${field} to index ${targetIndexPosition}`);\n    const updatedColumns = [...allColumns];\n    const fieldRemoved = updatedColumns.splice(oldIndexPosition, 1)[0];\n    updatedColumns.splice(targetIndexPosition, 0, fieldRemoved);\n    setGridColumnsState(_extends({}, gridColumnsStateSelector(apiRef.current.state), {\n      orderedFields: updatedColumns\n    }));\n    const params = {\n      column: apiRef.current.getColumn(field),\n      targetIndex: apiRef.current.getColumnIndexRelativeToVisibleColumns(field),\n      oldIndex: oldIndexPosition\n    };\n    apiRef.current.publishEvent('columnIndexChange', params);\n  }, [apiRef, logger, setGridColumnsState, getColumnIndexRelativeToVisibleColumns]);\n  const setColumnWidth = React.useCallback((field, width) => {\n    logger.debug(`Updating column ${field} width to ${width}`);\n    const columnsState = gridColumnsStateSelector(apiRef.current.state);\n    const column = columnsState.lookup[field];\n    const newColumn = _extends({}, column, {\n      width,\n      hasBeenResized: true\n    });\n    setGridColumnsState(hydrateColumnsWidth(_extends({}, columnsState, {\n      lookup: _extends({}, columnsState.lookup, {\n        [field]: newColumn\n      })\n    }), apiRef.current.getRootDimensions()));\n    apiRef.current.publishEvent('columnWidthChange', {\n      element: apiRef.current.getColumnHeaderElement(field),\n      colDef: newColumn,\n      width\n    });\n  }, [apiRef, logger, setGridColumnsState]);\n  const columnApi = {\n    getColumn,\n    getAllColumns,\n    getColumnIndex,\n    getColumnPosition,\n    getVisibleColumns,\n    getColumnIndexRelativeToVisibleColumns,\n    updateColumns,\n    setColumnVisibilityModel,\n    setColumnVisibility,\n    setColumnWidth\n  };\n  const columnReorderApi = {\n    setColumnIndex\n  };\n  useGridApiMethod(apiRef, columnApi, 'public');\n  useGridApiMethod(apiRef, columnReorderApi, props.signature === GridSignature.DataGrid ? 'private' : 'public');\n\n  /**\n   * PRE-PROCESSING\n   */\n  const stateExportPreProcessing = React.useCallback((prevState, context) => {\n    const columnsStateToExport = {};\n    const columnVisibilityModelToExport = gridColumnVisibilityModelSelector(apiRef);\n    const shouldExportColumnVisibilityModel =\n    // Always export if the `exportOnlyDirtyModels` property is not activated\n    !context.exportOnlyDirtyModels ||\n    // Always export if the model is controlled\n    props.columnVisibilityModel != null ||\n    // Always export if the model has been initialized\n    // TODO v6 Do a nullish check instead to export even if the initial model equals \"{}\"\n    Object.keys(props.initialState?.columns?.columnVisibilityModel ?? {}).length > 0 ||\n    // Always export if the model is not empty\n    Object.keys(columnVisibilityModelToExport).length > 0;\n    if (shouldExportColumnVisibilityModel) {\n      columnsStateToExport.columnVisibilityModel = columnVisibilityModelToExport;\n    }\n    columnsStateToExport.orderedFields = gridColumnFieldsSelector(apiRef);\n    const columns = gridColumnDefinitionsSelector(apiRef);\n    const dimensions = {};\n    columns.forEach(colDef => {\n      if (colDef.hasBeenResized) {\n        const colDefDimensions = {};\n        COLUMNS_DIMENSION_PROPERTIES.forEach(propertyName => {\n          let propertyValue = colDef[propertyName];\n          if (propertyValue === Infinity) {\n            propertyValue = -1;\n          }\n          colDefDimensions[propertyName] = propertyValue;\n        });\n        dimensions[colDef.field] = colDefDimensions;\n      }\n    });\n    if (Object.keys(dimensions).length > 0) {\n      columnsStateToExport.dimensions = dimensions;\n    }\n    return _extends({}, prevState, {\n      columns: columnsStateToExport\n    });\n  }, [apiRef, props.columnVisibilityModel, props.initialState?.columns]);\n  const stateRestorePreProcessing = React.useCallback((params, context) => {\n    const columnVisibilityModelToImport = context.stateToRestore.columns?.columnVisibilityModel;\n    const initialState = context.stateToRestore.columns;\n    if (columnVisibilityModelToImport == null && initialState == null) {\n      return params;\n    }\n    const columnsState = createColumnsState({\n      apiRef,\n      columnsToUpsert: [],\n      initialState,\n      columnVisibilityModel: columnVisibilityModelToImport,\n      keepOnlyColumnsToUpsert: false\n    });\n    apiRef.current.setState(mergeColumnsState(columnsState));\n    if (initialState != null) {\n      apiRef.current.publishEvent('columnsChange', columnsState.orderedFields);\n    }\n    return params;\n  }, [apiRef]);\n  const preferencePanelPreProcessing = React.useCallback((initialValue, value) => {\n    if (value === GridPreferencePanelsValue.columns) {\n      const ColumnsPanel = props.slots.columnsPanel;\n      return /*#__PURE__*/_jsx(ColumnsPanel, _extends({}, props.slotProps?.columnsPanel));\n    }\n    return initialValue;\n  }, [props.slots.columnsPanel, props.slotProps?.columnsPanel]);\n  const addColumnMenuItems = React.useCallback(columnMenuItems => {\n    if (props.disableColumnSelector) {\n      return columnMenuItems;\n    }\n    return [...columnMenuItems, 'columnMenuColumnsItem'];\n  }, [props.disableColumnSelector]);\n  useGridRegisterPipeProcessor(apiRef, 'columnMenu', addColumnMenuItems);\n  useGridRegisterPipeProcessor(apiRef, 'exportState', stateExportPreProcessing);\n  useGridRegisterPipeProcessor(apiRef, 'restoreState', stateRestorePreProcessing);\n  useGridRegisterPipeProcessor(apiRef, 'preferencePanel', preferencePanelPreProcessing);\n\n  /*\n   * EVENTS\n   */\n\n  const prevInnerWidth = React.useRef(null);\n  const handleGridSizeChange = viewportInnerSize => {\n    if (prevInnerWidth.current !== viewportInnerSize.width) {\n      prevInnerWidth.current = viewportInnerSize.width;\n      setGridColumnsState(hydrateColumnsWidth(gridColumnsStateSelector(apiRef.current.state), apiRef.current.getRootDimensions()));\n    }\n  };\n  useGridApiEventHandler(apiRef, 'viewportInnerSizeChange', handleGridSizeChange);\n\n  /**\n   * APPLIERS\n   */\n  const hydrateColumns = React.useCallback(() => {\n    logger.info(`Columns pipe processing have changed, regenerating the columns`);\n    const columnsState = createColumnsState({\n      apiRef,\n      columnsToUpsert: [],\n      initialState: undefined,\n      keepOnlyColumnsToUpsert: false\n    });\n    setGridColumnsState(columnsState);\n  }, [apiRef, logger, setGridColumnsState]);\n  useGridRegisterPipeApplier(apiRef, 'hydrateColumns', hydrateColumns);\n\n  /*\n   * EFFECTS\n   */\n  // The effect do not track any value defined synchronously during the 1st render by hooks called after `useGridColumns`\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    logger.info(`GridColumns have changed, new length ${props.columns.length}`);\n    if (previousColumnsProp.current === props.columns) {\n      return;\n    }\n    const columnsState = createColumnsState({\n      apiRef,\n      initialState: undefined,\n      // If the user provides a model, we don't want to set it in the state here because it has it's dedicated `useEffect` which calls `setColumnVisibilityModel`\n      columnsToUpsert: props.columns,\n      keepOnlyColumnsToUpsert: true\n    });\n    previousColumnsProp.current = props.columns;\n    setGridColumnsState(columnsState);\n  }, [logger, apiRef, setGridColumnsState, props.columns]);\n  React.useEffect(() => {\n    if (props.columnVisibilityModel !== undefined) {\n      apiRef.current.setColumnVisibilityModel(props.columnVisibilityModel);\n    }\n  }, [apiRef, logger, props.columnVisibilityModel]);\n}\nfunction mergeColumnsState(columnsState) {\n  return state => _extends({}, state, {\n    columns: columnsState\n  });\n}","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport * as React from 'react';\nimport useEventCallback from '@mui/utils/useEventCallback';\nimport { useGridLogger } from \"../../utils/useGridLogger.js\";\nimport { useGridApiMethod } from \"../../utils/useGridApiMethod.js\";\nimport { gridDensitySelector } from \"./densitySelector.js\";\nimport { useGridRegisterPipeProcessor } from \"../../core/pipeProcessing/index.js\";\nexport const densityStateInitializer = (state, props) => _extends({}, state, {\n  density: props.initialState?.density ?? props.density ?? 'standard'\n});\nexport const useGridDensity = (apiRef, props) => {\n  const logger = useGridLogger(apiRef, 'useDensity');\n  apiRef.current.registerControlState({\n    stateId: 'density',\n    propModel: props.density,\n    propOnChange: props.onDensityChange,\n    stateSelector: gridDensitySelector,\n    changeEvent: 'densityChange'\n  });\n  const setDensity = useEventCallback(newDensity => {\n    const currentDensity = gridDensitySelector(apiRef.current.state);\n    if (currentDensity === newDensity) {\n      return;\n    }\n    logger.debug(`Set grid density to ${newDensity}`);\n    apiRef.current.setState(state => _extends({}, state, {\n      density: newDensity\n    }));\n  });\n  const densityApi = {\n    setDensity\n  };\n  useGridApiMethod(apiRef, densityApi, 'public');\n  const stateExportPreProcessing = React.useCallback((prevState, context) => {\n    const exportedDensity = gridDensitySelector(apiRef.current.state);\n    const shouldExportRowCount =\n    // Always export if the `exportOnlyDirtyModels` property is not activated\n    !context.exportOnlyDirtyModels ||\n    // Always export if the `density` is controlled\n    props.density != null ||\n    // Always export if the `density` has been initialized\n    props.initialState?.density != null;\n    if (!shouldExportRowCount) {\n      return prevState;\n    }\n    return _extends({}, prevState, {\n      density: exportedDensity\n    });\n  }, [apiRef, props.density, props.initialState?.density]);\n  const stateRestorePreProcessing = React.useCallback((params, context) => {\n    const restoredDensity = context.stateToRestore?.density ? context.stateToRestore.density : gridDensitySelector(apiRef.current.state);\n    apiRef.current.setState(state => _extends({}, state, {\n      density: restoredDensity\n    }));\n    return params;\n  }, [apiRef]);\n  useGridRegisterPipeProcessor(apiRef, 'exportState', stateExportPreProcessing);\n  useGridRegisterPipeProcessor(apiRef, 'restoreState', stateRestorePreProcessing);\n  React.useEffect(() => {\n    if (props.density) {\n      apiRef.current.setDensity(props.density);\n    }\n  }, [apiRef, props.density]);\n};","import { gridColumnDefinitionsSelector, gridVisibleColumnDefinitionsSelector } from \"../columns/index.js\";\nimport { gridFilteredSortedRowIdsSelector } from \"../filter/index.js\";\nimport { gridPinnedRowsSelector, gridRowTreeSelector } from \"../rows/gridRowsSelector.js\";\nexport const getColumnsToExport = ({\n  apiRef,\n  options\n}) => {\n  const columns = gridColumnDefinitionsSelector(apiRef);\n  if (options.fields) {\n    return options.fields.reduce((currentColumns, field) => {\n      const column = columns.find(col => col.field === field);\n      if (column) {\n        currentColumns.push(column);\n      }\n      return currentColumns;\n    }, []);\n  }\n  const validColumns = options.allColumns ? columns : gridVisibleColumnDefinitionsSelector(apiRef);\n  return validColumns.filter(column => !column.disableExport);\n};\nexport const defaultGetRowsToExport = ({\n  apiRef\n}) => {\n  const filteredSortedRowIds = gridFilteredSortedRowIdsSelector(apiRef);\n  const rowTree = gridRowTreeSelector(apiRef);\n  const selectedRows = apiRef.current.getSelectedRows();\n  const bodyRows = filteredSortedRowIds.filter(id => rowTree[id].type !== 'footer');\n  const pinnedRows = gridPinnedRowsSelector(apiRef);\n  const topPinnedRowsIds = pinnedRows?.top?.map(row => row.id) || [];\n  const bottomPinnedRowsIds = pinnedRows?.bottom?.map(row => row.id) || [];\n  bodyRows.unshift(...topPinnedRowsIds);\n  bodyRows.push(...bottomPinnedRowsIds);\n  if (selectedRows.size > 0) {\n    return bodyRows.filter(id => selectedRows.has(id));\n  }\n  return bodyRows;\n};","import * as React from 'react';\nimport { useGridApiMethod } from \"../../utils/useGridApiMethod.js\";\nimport { useGridLogger } from \"../../utils/useGridLogger.js\";\nimport { exportAs } from \"../../../utils/exportAs.js\";\nimport { buildCSV } from \"./serializers/csvSerializer.js\";\nimport { getColumnsToExport, defaultGetRowsToExport } from \"./utils.js\";\nimport { useGridRegisterPipeProcessor } from \"../../core/pipeProcessing/index.js\";\nimport { GridCsvExportMenuItem } from \"../../../components/toolbar/GridToolbarExport.js\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\n/**\n * @requires useGridColumns (state)\n * @requires useGridFilter (state)\n * @requires useGridSorting (state)\n * @requires useGridSelection (state)\n * @requires useGridParamsApi (method)\n */\nexport const useGridCsvExport = (apiRef, props) => {\n  const logger = useGridLogger(apiRef, 'useGridCsvExport');\n  const ignoreValueFormatterProp = props.ignoreValueFormatterDuringExport;\n  const ignoreValueFormatter = (typeof ignoreValueFormatterProp === 'object' ? ignoreValueFormatterProp?.csvExport : ignoreValueFormatterProp) || false;\n  const getDataAsCsv = React.useCallback((options = {}) => {\n    logger.debug(`Get data as CSV`);\n    const exportedColumns = getColumnsToExport({\n      apiRef,\n      options\n    });\n    const getRowsToExport = options.getRowsToExport ?? defaultGetRowsToExport;\n    const exportedRowIds = getRowsToExport({\n      apiRef\n    });\n    return buildCSV({\n      columns: exportedColumns,\n      rowIds: exportedRowIds,\n      csvOptions: {\n        delimiter: options.delimiter || ',',\n        shouldAppendQuotes: options.shouldAppendQuotes ?? true,\n        includeHeaders: options.includeHeaders ?? true,\n        includeColumnGroupsHeaders: options.includeColumnGroupsHeaders ?? true,\n        escapeFormulas: options.escapeFormulas ?? true\n      },\n      ignoreValueFormatter,\n      apiRef\n    });\n  }, [logger, apiRef, ignoreValueFormatter]);\n  const exportDataAsCsv = React.useCallback(options => {\n    logger.debug(`Export data as CSV`);\n    const csv = getDataAsCsv(options);\n    const blob = new Blob([options?.utf8WithBom ? new Uint8Array([0xef, 0xbb, 0xbf]) : '', csv], {\n      type: 'text/csv'\n    });\n    exportAs(blob, 'csv', options?.fileName);\n  }, [logger, getDataAsCsv]);\n  const csvExportApi = {\n    getDataAsCsv,\n    exportDataAsCsv\n  };\n  useGridApiMethod(apiRef, csvExportApi, 'public');\n\n  /**\n   * PRE-PROCESSING\n   */\n  const addExportMenuButtons = React.useCallback((initialValue, options) => {\n    if (options.csvOptions?.disableToolbarButton) {\n      return initialValue;\n    }\n    return [...initialValue, {\n      component: /*#__PURE__*/_jsx(GridCsvExportMenuItem, {\n        options: options.csvOptions\n      }),\n      componentName: 'csvExport'\n    }];\n  }, []);\n  useGridRegisterPipeProcessor(apiRef, 'exportMenu', addExportMenuButtons);\n};","/**\n * I have hesitated to use https://github.com/eligrey/FileSaver.js.\n * If we get bug reports that this project solves, we should consider using it.\n *\n * Related resources.\n * https://blog.logrocket.com/programmatic-file-downloads-in-the-browser-9a5186298d5c/\n * https://github.com/mbrn/filefy/blob/ec4ed0b7415d93be7158c23029f2ea1fa0b8e2d9/src/core/BaseBuilder.ts\n * https://unpkg.com/browse/@progress/kendo-file-saver@1.0.7/dist/es/save-as.js\n * https://github.com/ag-grid/ag-grid/blob/9565c219b6210aa85fa833c929d0728f9d163a91/community-modules/csv-export/src/csvExport/downloader.ts\n */\n\nexport function exportAs(blob, extension = 'csv', filename = document.title || 'untitled') {\n  const fullName = `${filename}.${extension}`;\n\n  // Test download attribute first\n  // https://github.com/eligrey/FileSaver.js/issues/193\n  if ('download' in HTMLAnchorElement.prototype) {\n    // Create an object URL for the blob object\n    const url = URL.createObjectURL(blob);\n\n    // Create a new anchor element\n    const a = document.createElement('a');\n    a.href = url;\n    a.download = fullName;\n\n    // Programmatically trigger a click on the anchor element\n    // Useful if you want the download to happen automatically\n    // Without attaching the anchor element to the DOM\n    a.click();\n\n    // https://github.com/eligrey/FileSaver.js/issues/205\n    setTimeout(() => {\n      URL.revokeObjectURL(url);\n    });\n    return;\n  }\n  throw new Error('MUI X: exportAs not supported.');\n}","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport * as React from 'react';\nimport { gridDensityFactorSelector } from \"../density/index.js\";\nimport { useGridLogger, useGridSelector, useGridApiMethod, useGridApiEventHandler } from \"../../utils/index.js\";\nimport { useGridRegisterPipeProcessor } from \"../../core/pipeProcessing/index.js\";\nimport { gridPageCountSelector, gridPaginationModelSelector } from \"./gridPaginationSelector.js\";\nimport { getPageCount, defaultPageSize, throwIfPageSizeExceedsTheLimit, getDefaultGridPaginationModel, getValidPage } from \"./gridPaginationUtils.js\";\nexport const getDerivedPaginationModel = (paginationState, signature, paginationModelProp) => {\n  let paginationModel = paginationState.paginationModel;\n  const rowCount = paginationState.rowCount;\n  const pageSize = paginationModelProp?.pageSize ?? paginationModel.pageSize;\n  const page = paginationModelProp?.page ?? paginationModel.page;\n  const pageCount = getPageCount(rowCount, pageSize, page);\n  if (paginationModelProp && (paginationModelProp?.page !== paginationModel.page || 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 paginationModel;\n};\n\n/**\n * @requires useGridFilter (state)\n * @requires useGridDimensions (event) - can be after\n */\nexport const useGridPaginationModel = (apiRef, props) => {\n  const logger = useGridLogger(apiRef, 'useGridPaginationModel');\n  const densityFactor = useGridSelector(apiRef, gridDensityFactorSelector);\n  const rowHeight = Math.floor(props.rowHeight * densityFactor);\n  apiRef.current.registerControlState({\n    stateId: 'paginationModel',\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    const currentModel = gridPaginationModelSelector(apiRef);\n    if (paginationModel === currentModel) {\n      return;\n    }\n    logger.debug(\"Setting 'paginationModel' to\", paginationModel);\n    apiRef.current.setState(state => _extends({}, state, {\n      pagination: _extends({}, state.pagination, {\n        paginationModel: getDerivedPaginationModel(state.pagination, props.signature, paginationModel)\n      })\n    }));\n  }, [apiRef, logger, props.signature]);\n  const paginationModelApi = {\n    setPage,\n    setPageSize,\n    setPaginationModel\n  };\n  useGridApiMethod(apiRef, paginationModelApi, 'public');\n\n  /**\n   * PRE-PROCESSING\n   */\n  const stateExportPreProcessing = React.useCallback((prevState, context) => {\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.initialState?.pagination?.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.initialState?.pagination?.paginationModel, props.autoPageSize]);\n  const stateRestorePreProcessing = React.useCallback((params, context) => {\n    const paginationModel = context.stateToRestore.pagination?.paginationModel ? _extends({}, getDefaultGridPaginationModel(props.autoPageSize), context.stateToRestore.pagination?.paginationModel) : gridPaginationModelSelector(apiRef);\n    apiRef.current.setState(state => _extends({}, state, {\n      pagination: _extends({}, state.pagination, {\n        paginationModel: getDerivedPaginationModel(state.pagination, props.signature, paginationModel)\n      })\n    }));\n    return params;\n  }, [apiRef, props.autoPageSize, props.signature]);\n  useGridRegisterPipeProcessor(apiRef, 'exportState', stateExportPreProcessing);\n  useGridRegisterPipeProcessor(apiRef, 'restoreState', stateRestorePreProcessing);\n\n  /**\n   * EVENTS\n   */\n  const handlePaginationModelChange = () => {\n    const paginationModel = gridPaginationModelSelector(apiRef);\n    if (apiRef.current.virtualScrollerRef?.current) {\n      apiRef.current.scrollToIndexes({\n        rowIndex: paginationModel.page * paginationModel.pageSize\n      });\n    }\n  };\n  const handleUpdateAutoPageSize = React.useCallback(() => {\n    if (!props.autoPageSize) {\n      return;\n    }\n    const dimensions = apiRef.current.getRootDimensions();\n    const maximumPageSizeWithoutScrollBar = Math.floor(dimensions.viewportInnerSize.height / rowHeight);\n    apiRef.current.setPageSize(maximumPageSizeWithoutScrollBar);\n  }, [apiRef, props.autoPageSize, rowHeight]);\n  const handleRowCountChange = React.useCallback(newRowCount => {\n    if (newRowCount == null) {\n      return;\n    }\n    const paginationModel = gridPaginationModelSelector(apiRef);\n    const pageCount = gridPageCountSelector(apiRef);\n    if (paginationModel.page > pageCount - 1) {\n      apiRef.current.setPage(Math.max(0, pageCount - 1));\n    }\n  }, [apiRef]);\n  useGridApiEventHandler(apiRef, 'viewportInnerSizeChange', handleUpdateAutoPageSize);\n  useGridApiEventHandler(apiRef, 'paginationModelChange', handlePaginationModelChange);\n  useGridApiEventHandler(apiRef, 'rowCountChange', handleRowCountChange);\n\n  /**\n   * EFFECTS\n   */\n  React.useEffect(() => {\n    apiRef.current.setState(state => _extends({}, state, {\n      pagination: _extends({}, state.pagination, {\n        paginationModel: getDerivedPaginationModel(state.pagination, props.signature, props.paginationModel)\n      })\n    }));\n  }, [apiRef, props.paginationModel, props.paginationMode, props.signature]);\n  React.useEffect(handleUpdateAutoPageSize, [handleUpdateAutoPageSize]);\n};","import * as React from 'react';\nimport { useFirstRender } from \"../../utils/useFirstRender.js\";\nexport const useGridRegisterStrategyProcessor = (apiRef, strategyName, group, processor) => {\n  const registerPreProcessor = React.useCallback(() => {\n    apiRef.current.registerStrategyProcessor(strategyName, group, processor);\n  }, [apiRef, processor, group, strategyName]);\n  useFirstRender(() => {\n    registerPreProcessor();\n  });\n  const isFirstRender = React.useRef(true);\n  React.useEffect(() => {\n    if (isFirstRender.current) {\n      isFirstRender.current = false;\n    } else {\n      registerPreProcessor();\n    }\n  }, [registerPreProcessor]);\n};","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport * as React from 'react';\nimport { lruMemoize } from 'reselect';\nimport { unstable_useEnhancedEffect as useEnhancedEffect } from '@mui/utils';\nimport { useLazyRef } from \"../../utils/useLazyRef.js\";\nimport { useGridApiEventHandler } from \"../../utils/useGridApiEventHandler.js\";\nimport { useGridApiMethod } from \"../../utils/useGridApiMethod.js\";\nimport { useGridLogger } from \"../../utils/useGridLogger.js\";\nimport { gridColumnLookupSelector } from \"../columns/gridColumnsSelector.js\";\nimport { GridPreferencePanelsValue } from \"../preferencesPanel/gridPreferencePanelsValue.js\";\nimport { getDefaultGridFilterModel } from \"./gridFilterState.js\";\nimport { gridFilterModelSelector } from \"./gridFilterSelector.js\";\nimport { useFirstRender } from \"../../utils/useFirstRender.js\";\nimport { gridRowsLookupSelector } from \"../rows/index.js\";\nimport { useGridRegisterPipeProcessor } from \"../../core/pipeProcessing/index.js\";\nimport { GRID_DEFAULT_STRATEGY, useGridRegisterStrategyProcessor } from \"../../core/strategyProcessing/index.js\";\nimport { buildAggregatedFilterApplier, sanitizeFilterModel, mergeStateWithFilterModel, cleanFilterItem, passFilterLogic, shouldQuickFilterExcludeHiddenColumns } from \"./gridFilterUtils.js\";\nimport { isDeepEqual } from \"../../../utils/utils.js\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nexport const filterStateInitializer = (state, props, apiRef) => {\n  const filterModel = props.filterModel ?? props.initialState?.filter?.filterModel ?? getDefaultGridFilterModel();\n  return _extends({}, state, {\n    filter: {\n      filterModel: sanitizeFilterModel(filterModel, props.disableMultipleColumnsFiltering, apiRef),\n      filteredRowsLookup: {},\n      filteredChildrenCountLookup: {},\n      filteredDescendantCountLookup: {}\n    },\n    visibleRowsLookup: {}\n  });\n};\nconst getVisibleRowsLookup = params => {\n  // For flat tree, the `visibleRowsLookup` and the `filteredRowsLookup` are equals since no row is collapsed.\n  return params.filteredRowsLookup;\n};\nfunction getVisibleRowsLookupState(apiRef, state) {\n  return apiRef.current.applyStrategyProcessor('visibleRowsLookupCreation', {\n    tree: state.rows.tree,\n    filteredRowsLookup: state.filter.filteredRowsLookup\n  });\n}\nfunction createMemoizedValues() {\n  return lruMemoize(Object.values);\n}\n\n/**\n * @requires useGridColumns (method, event)\n * @requires useGridParamsApi (method)\n * @requires useGridRows (event)\n */\nexport const useGridFilter = (apiRef, props) => {\n  const logger = useGridLogger(apiRef, 'useGridFilter');\n  apiRef.current.registerControlState({\n    stateId: 'filter',\n    propModel: props.filterModel,\n    propOnChange: props.onFilterModelChange,\n    stateSelector: gridFilterModelSelector,\n    changeEvent: 'filterModelChange'\n  });\n  const updateFilteredRows = React.useCallback(() => {\n    apiRef.current.setState(state => {\n      const filterModel = gridFilterModelSelector(state, apiRef.current.instanceId);\n      const filterState = apiRef.current.getFilterState(filterModel);\n      const newState = _extends({}, state, {\n        filter: _extends({}, state.filter, filterState)\n      });\n      const visibleRowsLookupState = getVisibleRowsLookupState(apiRef, newState);\n      return _extends({}, newState, {\n        visibleRowsLookup: visibleRowsLookupState\n      });\n    });\n    apiRef.current.publishEvent('filteredRowsSet');\n  }, [apiRef]);\n  const addColumnMenuItem = React.useCallback((columnMenuItems, colDef) => {\n    if (colDef == null || colDef.filterable === false || props.disableColumnFilter) {\n      return columnMenuItems;\n    }\n    return [...columnMenuItems, 'columnMenuFilterItem'];\n  }, [props.disableColumnFilter]);\n\n  /**\n   * API METHODS\n   */\n  const applyFilters = React.useCallback(() => {\n    updateFilteredRows();\n    apiRef.current.forceUpdate();\n  }, [apiRef, updateFilteredRows]);\n  const upsertFilterItem = React.useCallback(item => {\n    const filterModel = gridFilterModelSelector(apiRef);\n    const items = [...filterModel.items];\n    const itemIndex = items.findIndex(filterItem => filterItem.id === item.id);\n    if (itemIndex === -1) {\n      items.push(item);\n    } else {\n      items[itemIndex] = item;\n    }\n    apiRef.current.setFilterModel(_extends({}, filterModel, {\n      items\n    }), 'upsertFilterItem');\n  }, [apiRef]);\n  const upsertFilterItems = React.useCallback(items => {\n    const filterModel = gridFilterModelSelector(apiRef);\n    const existingItems = [...filterModel.items];\n    items.forEach(item => {\n      const itemIndex = existingItems.findIndex(filterItem => filterItem.id === item.id);\n      if (itemIndex === -1) {\n        existingItems.push(item);\n      } else {\n        existingItems[itemIndex] = item;\n      }\n    });\n    apiRef.current.setFilterModel(_extends({}, filterModel, {\n      items: existingItems\n    }), 'upsertFilterItems');\n  }, [apiRef]);\n  const deleteFilterItem = React.useCallback(itemToDelete => {\n    const filterModel = gridFilterModelSelector(apiRef);\n    const items = filterModel.items.filter(item => item.id !== itemToDelete.id);\n    if (items.length === filterModel.items.length) {\n      return;\n    }\n    apiRef.current.setFilterModel(_extends({}, filterModel, {\n      items\n    }), 'deleteFilterItem');\n  }, [apiRef]);\n  const showFilterPanel = React.useCallback((targetColumnField, panelId, labelId) => {\n    logger.debug('Displaying filter panel');\n    if (targetColumnField) {\n      const filterModel = gridFilterModelSelector(apiRef);\n      const filterItemsWithValue = filterModel.items.filter(item => {\n        if (item.value !== undefined) {\n          // Some filters like `isAnyOf` support array as `item.value`.\n          // If array is empty, we want to remove it from the filter model.\n          if (Array.isArray(item.value) && item.value.length === 0) {\n            return false;\n          }\n          return true;\n        }\n        const column = apiRef.current.getColumn(item.field);\n        const filterOperator = column.filterOperators?.find(operator => operator.value === item.operator);\n        const requiresFilterValue = typeof filterOperator?.requiresFilterValue === 'undefined' ? true : filterOperator?.requiresFilterValue;\n\n        // Operators like `isEmpty` don't have and don't require `item.value`.\n        // So we don't want to remove them from the filter model if `item.value === undefined`.\n        // See https://github.com/mui/mui-x/issues/5402\n        if (requiresFilterValue) {\n          return false;\n        }\n        return true;\n      });\n      let newFilterItems;\n      const filterItemOnTarget = filterItemsWithValue.find(item => item.field === targetColumnField);\n      const targetColumn = apiRef.current.getColumn(targetColumnField);\n      if (filterItemOnTarget) {\n        newFilterItems = filterItemsWithValue;\n      } else if (props.disableMultipleColumnsFiltering) {\n        newFilterItems = [cleanFilterItem({\n          field: targetColumnField,\n          operator: targetColumn.filterOperators[0].value\n        }, apiRef)];\n      } else {\n        newFilterItems = [...filterItemsWithValue, cleanFilterItem({\n          field: targetColumnField,\n          operator: targetColumn.filterOperators[0].value\n        }, apiRef)];\n      }\n      apiRef.current.setFilterModel(_extends({}, filterModel, {\n        items: newFilterItems\n      }));\n    }\n    apiRef.current.showPreferences(GridPreferencePanelsValue.filters, panelId, labelId);\n  }, [apiRef, logger, props.disableMultipleColumnsFiltering]);\n  const hideFilterPanel = React.useCallback(() => {\n    logger.debug('Hiding filter panel');\n    apiRef.current.hidePreferences();\n  }, [apiRef, logger]);\n  const setFilterLogicOperator = React.useCallback(logicOperator => {\n    const filterModel = gridFilterModelSelector(apiRef);\n    if (filterModel.logicOperator === logicOperator) {\n      return;\n    }\n    apiRef.current.setFilterModel(_extends({}, filterModel, {\n      logicOperator\n    }), 'changeLogicOperator');\n  }, [apiRef]);\n  const setQuickFilterValues = React.useCallback(values => {\n    const filterModel = gridFilterModelSelector(apiRef);\n    if (isDeepEqual(filterModel.quickFilterValues, values)) {\n      return;\n    }\n    apiRef.current.setFilterModel(_extends({}, filterModel, {\n      quickFilterValues: [...values]\n    }));\n  }, [apiRef]);\n  const setFilterModel = React.useCallback((model, reason) => {\n    const currentModel = gridFilterModelSelector(apiRef);\n    if (currentModel !== model) {\n      logger.debug('Setting filter model');\n      apiRef.current.updateControlState('filter', mergeStateWithFilterModel(model, props.disableMultipleColumnsFiltering, apiRef), reason);\n      apiRef.current.unstable_applyFilters();\n    }\n  }, [apiRef, logger, props.disableMultipleColumnsFiltering]);\n  const getFilterState = React.useCallback(inputFilterModel => {\n    const filterModel = sanitizeFilterModel(inputFilterModel, props.disableMultipleColumnsFiltering, apiRef);\n    const isRowMatchingFilters = props.filterMode === 'client' ? buildAggregatedFilterApplier(filterModel, apiRef, props.disableEval) : null;\n    const filterResult = apiRef.current.applyStrategyProcessor('filtering', {\n      isRowMatchingFilters,\n      filterModel: filterModel ?? getDefaultGridFilterModel()\n    });\n    return _extends({}, filterResult, {\n      filterModel\n    });\n  }, [props.disableMultipleColumnsFiltering, props.filterMode, props.disableEval, apiRef]);\n  const filterApi = {\n    setFilterLogicOperator,\n    unstable_applyFilters: applyFilters,\n    deleteFilterItem,\n    upsertFilterItem,\n    upsertFilterItems,\n    setFilterModel,\n    showFilterPanel,\n    hideFilterPanel,\n    setQuickFilterValues,\n    ignoreDiacritics: props.ignoreDiacritics,\n    getFilterState\n  };\n  useGridApiMethod(apiRef, filterApi, 'public');\n\n  /**\n   * PRE-PROCESSING\n   */\n  const stateExportPreProcessing = React.useCallback((prevState, context) => {\n    const filterModelToExport = gridFilterModelSelector(apiRef);\n    const shouldExportFilterModel =\n    // Always export if the `exportOnlyDirtyModels` property is not activated\n    !context.exportOnlyDirtyModels ||\n    // Always export if the model is controlled\n    props.filterModel != null ||\n    // Always export if the model has been initialized\n    props.initialState?.filter?.filterModel != null ||\n    // Export if the model is not equal to the default value\n    !isDeepEqual(filterModelToExport, getDefaultGridFilterModel());\n    if (!shouldExportFilterModel) {\n      return prevState;\n    }\n    return _extends({}, prevState, {\n      filter: {\n        filterModel: filterModelToExport\n      }\n    });\n  }, [apiRef, props.filterModel, props.initialState?.filter?.filterModel]);\n  const stateRestorePreProcessing = React.useCallback((params, context) => {\n    const filterModel = context.stateToRestore.filter?.filterModel;\n    if (filterModel == null) {\n      return params;\n    }\n    apiRef.current.updateControlState('filter', mergeStateWithFilterModel(filterModel, props.disableMultipleColumnsFiltering, apiRef), 'restoreState');\n    return _extends({}, params, {\n      callbacks: [...params.callbacks, apiRef.current.unstable_applyFilters]\n    });\n  }, [apiRef, props.disableMultipleColumnsFiltering]);\n  const preferencePanelPreProcessing = React.useCallback((initialValue, value) => {\n    if (value === GridPreferencePanelsValue.filters) {\n      const FilterPanel = props.slots.filterPanel;\n      return /*#__PURE__*/_jsx(FilterPanel, _extends({}, props.slotProps?.filterPanel));\n    }\n    return initialValue;\n  }, [props.slots.filterPanel, props.slotProps?.filterPanel]);\n  const {\n    getRowId\n  } = props;\n  const getRowsRef = useLazyRef(createMemoizedValues);\n  const flatFilteringMethod = React.useCallback(params => {\n    if (props.filterMode !== 'client' || !params.isRowMatchingFilters) {\n      return {\n        filteredRowsLookup: {},\n        filteredChildrenCountLookup: {},\n        filteredDescendantCountLookup: {}\n      };\n    }\n    const dataRowIdToModelLookup = gridRowsLookupSelector(apiRef);\n    const filteredRowsLookup = {};\n    const {\n      isRowMatchingFilters\n    } = params;\n    const filterCache = {};\n    const result = {\n      passingFilterItems: null,\n      passingQuickFilterValues: null\n    };\n    const rows = getRowsRef.current(apiRef.current.state.rows.dataRowIdToModelLookup);\n    for (let i = 0; i < rows.length; i += 1) {\n      const row = rows[i];\n      const id = getRowId ? getRowId(row) : row.id;\n      isRowMatchingFilters(row, undefined, result);\n      const isRowPassing = passFilterLogic([result.passingFilterItems], [result.passingQuickFilterValues], params.filterModel, apiRef, filterCache);\n      filteredRowsLookup[id] = isRowPassing;\n    }\n    const footerId = 'auto-generated-group-footer-root';\n    const footer = dataRowIdToModelLookup[footerId];\n    if (footer) {\n      filteredRowsLookup[footerId] = true;\n    }\n    return {\n      filteredRowsLookup,\n      filteredChildrenCountLookup: {},\n      filteredDescendantCountLookup: {}\n    };\n  }, [apiRef, props.filterMode, getRowId, getRowsRef]);\n  useGridRegisterPipeProcessor(apiRef, 'columnMenu', addColumnMenuItem);\n  useGridRegisterPipeProcessor(apiRef, 'exportState', stateExportPreProcessing);\n  useGridRegisterPipeProcessor(apiRef, 'restoreState', stateRestorePreProcessing);\n  useGridRegisterPipeProcessor(apiRef, 'preferencePanel', preferencePanelPreProcessing);\n  useGridRegisterStrategyProcessor(apiRef, GRID_DEFAULT_STRATEGY, 'filtering', flatFilteringMethod);\n  useGridRegisterStrategyProcessor(apiRef, GRID_DEFAULT_STRATEGY, 'visibleRowsLookupCreation', getVisibleRowsLookup);\n\n  /**\n   * EVENTS\n   */\n  const handleColumnsChange = React.useCallback(() => {\n    logger.debug('onColUpdated - GridColumns changed, applying filters');\n    const filterModel = gridFilterModelSelector(apiRef);\n    const columnsLookup = gridColumnLookupSelector(apiRef);\n    const newFilterItems = filterModel.items.filter(item => item.field && columnsLookup[item.field]);\n    if (newFilterItems.length < filterModel.items.length) {\n      apiRef.current.setFilterModel(_extends({}, filterModel, {\n        items: newFilterItems\n      }));\n    }\n  }, [apiRef, logger]);\n  const handleStrategyProcessorChange = React.useCallback(methodName => {\n    if (methodName === 'filtering') {\n      apiRef.current.unstable_applyFilters();\n    }\n  }, [apiRef]);\n  const updateVisibleRowsLookupState = React.useCallback(() => {\n    apiRef.current.setState(state => {\n      return _extends({}, state, {\n        visibleRowsLookup: getVisibleRowsLookupState(apiRef, state)\n      });\n    });\n    apiRef.current.forceUpdate();\n  }, [apiRef]);\n\n  // Do not call `apiRef.current.forceUpdate` to avoid re-render before updating the sorted rows.\n  // Otherwise, the state is not consistent during the render\n  useGridApiEventHandler(apiRef, 'rowsSet', updateFilteredRows);\n  useGridApiEventHandler(apiRef, 'columnsChange', handleColumnsChange);\n  useGridApiEventHandler(apiRef, 'activeStrategyProcessorChange', handleStrategyProcessorChange);\n  useGridApiEventHandler(apiRef, 'rowExpansionChange', updateVisibleRowsLookupState);\n  useGridApiEventHandler(apiRef, 'columnVisibilityModelChange', () => {\n    const filterModel = gridFilterModelSelector(apiRef);\n    if (filterModel.quickFilterValues && shouldQuickFilterExcludeHiddenColumns(filterModel)) {\n      // re-apply filters because the quick filter results may have changed\n      apiRef.current.unstable_applyFilters();\n    }\n  });\n\n  /**\n   * 1ST RENDER\n   */\n  useFirstRender(() => {\n    apiRef.current.unstable_applyFilters();\n  });\n\n  /**\n   * EFFECTS\n   */\n  useEnhancedEffect(() => {\n    if (props.filterModel !== undefined) {\n      apiRef.current.setFilterModel(props.filterModel);\n    }\n  }, [apiRef, logger, props.filterModel]);\n};","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport * as React from 'react';\nimport { unstable_ownerDocument as ownerDocument, unstable_useEventCallback as useEventcallback } from '@mui/utils';\nimport { gridClasses } from \"../../../constants/gridClasses.js\";\nimport { useGridApiMethod } from \"../../utils/useGridApiMethod.js\";\nimport { useGridLogger } from \"../../utils/useGridLogger.js\";\nimport { useGridApiEventHandler } from \"../../utils/useGridApiEventHandler.js\";\nimport { isNavigationKey } from \"../../../utils/keyboardUtils.js\";\nimport { gridFocusCellSelector, gridFocusColumnGroupHeaderSelector } from \"./gridFocusStateSelector.js\";\nimport { gridVisibleColumnDefinitionsSelector } from \"../columns/gridColumnsSelector.js\";\nimport { getVisibleRows } from \"../../utils/useGridVisibleRows.js\";\nimport { clamp } from \"../../../utils/utils.js\";\nimport { gridPinnedRowsSelector } from \"../rows/gridRowsSelector.js\";\nexport const focusStateInitializer = state => _extends({}, state, {\n  focus: {\n    cell: null,\n    columnHeader: null,\n    columnHeaderFilter: null,\n    columnGroupHeader: null\n  },\n  tabIndex: {\n    cell: null,\n    columnHeader: null,\n    columnHeaderFilter: null,\n    columnGroupHeader: null\n  }\n});\n\n/**\n * @requires useGridParamsApi (method)\n * @requires useGridRows (method)\n * @requires useGridEditing (event)\n */\nexport const useGridFocus = (apiRef, props) => {\n  const logger = useGridLogger(apiRef, 'useGridFocus');\n  const lastClickedCell = React.useRef(null);\n  const hasRootReference = apiRef.current.rootElementRef.current !== null;\n  const publishCellFocusOut = React.useCallback((cell, event) => {\n    if (cell) {\n      // The row might have been deleted\n      if (apiRef.current.getRow(cell.id)) {\n        apiRef.current.publishEvent('cellFocusOut', apiRef.current.getCellParams(cell.id, cell.field), event);\n      }\n    }\n  }, [apiRef]);\n  const setCellFocus = React.useCallback((id, field) => {\n    const focusedCell = gridFocusCellSelector(apiRef);\n    if (focusedCell?.id === id && focusedCell?.field === field) {\n      return;\n    }\n    apiRef.current.setState(state => {\n      logger.debug(`Focusing on cell with id=${id} and field=${field}`);\n      return _extends({}, state, {\n        tabIndex: {\n          cell: {\n            id,\n            field\n          },\n          columnHeader: null,\n          columnHeaderFilter: null,\n          columnGroupHeader: null\n        },\n        focus: {\n          cell: {\n            id,\n            field\n          },\n          columnHeader: null,\n          columnHeaderFilter: null,\n          columnGroupHeader: null\n        }\n      });\n    });\n    apiRef.current.forceUpdate();\n\n    // The row might have been deleted\n    if (!apiRef.current.getRow(id)) {\n      return;\n    }\n    if (focusedCell) {\n      // There's a focused cell but another cell was clicked\n      // Publishes an event to notify that the focus was lost\n      publishCellFocusOut(focusedCell, {});\n    }\n    apiRef.current.publishEvent('cellFocusIn', apiRef.current.getCellParams(id, field));\n  }, [apiRef, logger, publishCellFocusOut]);\n  const setColumnHeaderFocus = React.useCallback((field, event = {}) => {\n    const cell = gridFocusCellSelector(apiRef);\n    publishCellFocusOut(cell, event);\n    apiRef.current.setState(state => {\n      logger.debug(`Focusing on column header with colIndex=${field}`);\n      return _extends({}, state, {\n        tabIndex: {\n          columnHeader: {\n            field\n          },\n          columnHeaderFilter: null,\n          cell: null,\n          columnGroupHeader: null\n        },\n        focus: {\n          columnHeader: {\n            field\n          },\n          columnHeaderFilter: null,\n          cell: null,\n          columnGroupHeader: null\n        }\n      });\n    });\n    apiRef.current.forceUpdate();\n  }, [apiRef, logger, publishCellFocusOut]);\n  const setColumnHeaderFilterFocus = React.useCallback((field, event = {}) => {\n    const cell = gridFocusCellSelector(apiRef);\n    publishCellFocusOut(cell, event);\n    apiRef.current.setState(state => {\n      logger.debug(`Focusing on column header filter with colIndex=${field}`);\n      return _extends({}, state, {\n        tabIndex: {\n          columnHeader: null,\n          columnHeaderFilter: {\n            field\n          },\n          cell: null,\n          columnGroupHeader: null\n        },\n        focus: {\n          columnHeader: null,\n          columnHeaderFilter: {\n            field\n          },\n          cell: null,\n          columnGroupHeader: null\n        }\n      });\n    });\n    apiRef.current.forceUpdate();\n  }, [apiRef, logger, publishCellFocusOut]);\n  const setColumnGroupHeaderFocus = React.useCallback((field, depth, event = {}) => {\n    const cell = gridFocusCellSelector(apiRef);\n    if (cell) {\n      apiRef.current.publishEvent('cellFocusOut', apiRef.current.getCellParams(cell.id, cell.field), event);\n    }\n    apiRef.current.setState(state => {\n      return _extends({}, state, {\n        tabIndex: {\n          columnGroupHeader: {\n            field,\n            depth\n          },\n          columnHeader: null,\n          columnHeaderFilter: null,\n          cell: null\n        },\n        focus: {\n          columnGroupHeader: {\n            field,\n            depth\n          },\n          columnHeader: null,\n          columnHeaderFilter: null,\n          cell: null\n        }\n      });\n    });\n    apiRef.current.forceUpdate();\n  }, [apiRef]);\n  const getColumnGroupHeaderFocus = React.useCallback(() => gridFocusColumnGroupHeaderSelector(apiRef), [apiRef]);\n  const moveFocusToRelativeCell = React.useCallback((id, field, direction) => {\n    let columnIndexToFocus = apiRef.current.getColumnIndex(field);\n    const visibleColumns = gridVisibleColumnDefinitionsSelector(apiRef);\n    const currentPage = getVisibleRows(apiRef, {\n      pagination: props.pagination,\n      paginationMode: props.paginationMode\n    });\n    const pinnedRows = gridPinnedRowsSelector(apiRef);\n\n    // Include pinned rows as well\n    const currentPageRows = [].concat(pinnedRows.top || [], currentPage.rows, pinnedRows.bottom || []);\n    let rowIndexToFocus = currentPageRows.findIndex(row => row.id === id);\n    if (direction === 'right') {\n      columnIndexToFocus += 1;\n    } else if (direction === 'left') {\n      columnIndexToFocus -= 1;\n    } else {\n      rowIndexToFocus += 1;\n    }\n    if (columnIndexToFocus >= visibleColumns.length) {\n      // Go to next row if we are after the last column\n      rowIndexToFocus += 1;\n      if (rowIndexToFocus < currentPageRows.length) {\n        // Go to first column of the next row if there's one more row\n        columnIndexToFocus = 0;\n      }\n    } else if (columnIndexToFocus < 0) {\n      // Go to previous row if we are before the first column\n      rowIndexToFocus -= 1;\n      if (rowIndexToFocus >= 0) {\n        // Go to last column of the previous if there's one more row\n        columnIndexToFocus = visibleColumns.length - 1;\n      }\n    }\n    rowIndexToFocus = clamp(rowIndexToFocus, 0, currentPageRows.length - 1);\n    const rowToFocus = currentPageRows[rowIndexToFocus];\n    if (!rowToFocus) {\n      return;\n    }\n    const colSpanInfo = apiRef.current.unstable_getCellColSpanInfo(rowToFocus.id, columnIndexToFocus);\n    if (colSpanInfo && colSpanInfo.spannedByColSpan) {\n      if (direction === 'left' || direction === 'below') {\n        columnIndexToFocus = colSpanInfo.leftVisibleCellIndex;\n      } else if (direction === 'right') {\n        columnIndexToFocus = colSpanInfo.rightVisibleCellIndex;\n      }\n    }\n    columnIndexToFocus = clamp(columnIndexToFocus, 0, visibleColumns.length - 1);\n    const columnToFocus = visibleColumns[columnIndexToFocus];\n    apiRef.current.setCellFocus(rowToFocus.id, columnToFocus.field);\n  }, [apiRef, props.pagination, props.paginationMode]);\n  const handleCellDoubleClick = React.useCallback(({\n    id,\n    field\n  }) => {\n    apiRef.current.setCellFocus(id, field);\n  }, [apiRef]);\n  const handleCellKeyDown = React.useCallback((params, event) => {\n    // GRID_CELL_NAVIGATION_KEY_DOWN handles the focus on Enter, Tab and navigation keys\n    if (event.key === 'Enter' || event.key === 'Tab' || event.key === 'Shift' || isNavigationKey(event.key)) {\n      return;\n    }\n    apiRef.current.setCellFocus(params.id, params.field);\n  }, [apiRef]);\n  const handleColumnHeaderFocus = React.useCallback(({\n    field\n  }, event) => {\n    if (event.target !== event.currentTarget) {\n      return;\n    }\n    apiRef.current.setColumnHeaderFocus(field, event);\n  }, [apiRef]);\n  const handleColumnGroupHeaderFocus = React.useCallback(({\n    fields,\n    depth\n  }, event) => {\n    if (event.target !== event.currentTarget) {\n      return;\n    }\n    const focusedColumnGroup = gridFocusColumnGroupHeaderSelector(apiRef);\n    if (focusedColumnGroup !== null && focusedColumnGroup.depth === depth && fields.includes(focusedColumnGroup.field)) {\n      // This group cell has already been focused\n      return;\n    }\n    apiRef.current.setColumnGroupHeaderFocus(fields[0], depth, event);\n  }, [apiRef]);\n  const handleBlur = React.useCallback((_, event) => {\n    if (event.relatedTarget?.getAttribute('class')?.includes(gridClasses.columnHeader)) {\n      return;\n    }\n    logger.debug(`Clearing focus`);\n    apiRef.current.setState(state => _extends({}, state, {\n      focus: {\n        cell: null,\n        columnHeader: null,\n        columnHeaderFilter: null,\n        columnGroupHeader: null\n      }\n    }));\n  }, [logger, apiRef]);\n  const handleCellMouseDown = React.useCallback(params => {\n    lastClickedCell.current = params;\n  }, []);\n  const handleDocumentClick = React.useCallback(event => {\n    const cellParams = lastClickedCell.current;\n    lastClickedCell.current = null;\n    const focusedCell = gridFocusCellSelector(apiRef);\n    const canUpdateFocus = apiRef.current.unstable_applyPipeProcessors('canUpdateFocus', true, {\n      event,\n      cell: cellParams\n    });\n    if (!canUpdateFocus) {\n      return;\n    }\n    if (!focusedCell) {\n      if (cellParams) {\n        apiRef.current.setCellFocus(cellParams.id, cellParams.field);\n      }\n      return;\n    }\n    if (cellParams?.id === focusedCell.id && cellParams?.field === focusedCell.field) {\n      return;\n    }\n    const cellElement = apiRef.current.getCellElement(focusedCell.id, focusedCell.field);\n    if (cellElement?.contains(event.target)) {\n      return;\n    }\n    if (cellParams) {\n      apiRef.current.setCellFocus(cellParams.id, cellParams.field);\n    } else {\n      apiRef.current.setState(state => _extends({}, state, {\n        focus: {\n          cell: null,\n          columnHeader: null,\n          columnHeaderFilter: null,\n          columnGroupHeader: null\n        }\n      }));\n      apiRef.current.forceUpdate();\n\n      // There's a focused cell but another element (not a cell) was clicked\n      // Publishes an event to notify that the focus was lost\n      publishCellFocusOut(focusedCell, event);\n    }\n  }, [apiRef, publishCellFocusOut]);\n  const handleCellModeChange = React.useCallback(params => {\n    if (params.cellMode === 'view') {\n      return;\n    }\n    const cell = gridFocusCellSelector(apiRef);\n    if (cell?.id !== params.id || cell?.field !== params.field) {\n      apiRef.current.setCellFocus(params.id, params.field);\n    }\n  }, [apiRef]);\n  const handleRowSet = React.useCallback(() => {\n    const cell = gridFocusCellSelector(apiRef);\n\n    // If the focused cell is in a row which does not exist anymore, then remove the focus\n    if (cell && !apiRef.current.getRow(cell.id)) {\n      apiRef.current.setState(state => _extends({}, state, {\n        focus: {\n          cell: null,\n          columnHeader: null,\n          columnHeaderFilter: null,\n          columnGroupHeader: null\n        }\n      }));\n    }\n  }, [apiRef]);\n  const handlePaginationModelChange = useEventcallback(() => {\n    const currentFocusedCell = gridFocusCellSelector(apiRef);\n    if (!currentFocusedCell) {\n      return;\n    }\n    const currentPage = getVisibleRows(apiRef, {\n      pagination: props.pagination,\n      paginationMode: props.paginationMode\n    });\n    const rowIsInCurrentPage = currentPage.rows.find(row => row.id === currentFocusedCell.id);\n    if (rowIsInCurrentPage) {\n      return;\n    }\n    const visibleColumns = gridVisibleColumnDefinitionsSelector(apiRef);\n    apiRef.current.setState(state => {\n      return _extends({}, state, {\n        tabIndex: {\n          cell: {\n            id: currentPage.rows[0].id,\n            field: visibleColumns[0].field\n          },\n          columnGroupHeader: null,\n          columnHeader: null,\n          columnHeaderFilter: null\n        }\n      });\n    });\n  });\n  const focusApi = {\n    setCellFocus,\n    setColumnHeaderFocus,\n    setColumnHeaderFilterFocus\n  };\n  const focusPrivateApi = {\n    moveFocusToRelativeCell,\n    setColumnGroupHeaderFocus,\n    getColumnGroupHeaderFocus\n  };\n  useGridApiMethod(apiRef, focusApi, 'public');\n  useGridApiMethod(apiRef, focusPrivateApi, 'private');\n  React.useEffect(() => {\n    const doc = ownerDocument(apiRef.current.rootElementRef.current);\n    doc.addEventListener('mouseup', handleDocumentClick);\n    return () => {\n      doc.removeEventListener('mouseup', handleDocumentClick);\n    };\n  }, [apiRef, hasRootReference, handleDocumentClick]);\n  useGridApiEventHandler(apiRef, 'columnHeaderBlur', handleBlur);\n  useGridApiEventHandler(apiRef, 'cellDoubleClick', handleCellDoubleClick);\n  useGridApiEventHandler(apiRef, 'cellMouseDown', handleCellMouseDown);\n  useGridApiEventHandler(apiRef, 'cellKeyDown', handleCellKeyDown);\n  useGridApiEventHandler(apiRef, 'cellModeChange', handleCellModeChange);\n  useGridApiEventHandler(apiRef, 'columnHeaderFocus', handleColumnHeaderFocus);\n  useGridApiEventHandler(apiRef, 'columnGroupHeaderFocus', handleColumnGroupHeaderFocus);\n  useGridApiEventHandler(apiRef, 'rowsSet', handleRowSet);\n  useGridApiEventHandler(apiRef, 'paginationModelChange', handlePaginationModelChange);\n};","import { gridFilteredSortedRowIdsSelector } from \"../filter/gridFilterSelector.js\";\nimport { gridRowSpanningHiddenCellsSelector } from \"../rows/gridRowSpanningSelectors.js\";\nimport { gridPinnedRowsSelector } from \"../rows/gridRowsSelector.js\";\nexport function enrichPageRowsWithPinnedRows(apiRef, rows) {\n  const pinnedRows = gridPinnedRowsSelector(apiRef) || {};\n  return [...(pinnedRows.top || []), ...rows, ...(pinnedRows.bottom || [])];\n}\nexport const getLeftColumnIndex = ({\n  currentColIndex,\n  firstColIndex,\n  lastColIndex,\n  isRtl\n}) => {\n  if (isRtl) {\n    if (currentColIndex < lastColIndex) {\n      return currentColIndex + 1;\n    }\n  } else if (!isRtl) {\n    if (currentColIndex > firstColIndex) {\n      return currentColIndex - 1;\n    }\n  }\n  return null;\n};\nexport const getRightColumnIndex = ({\n  currentColIndex,\n  firstColIndex,\n  lastColIndex,\n  isRtl\n}) => {\n  if (isRtl) {\n    if (currentColIndex > firstColIndex) {\n      return currentColIndex - 1;\n    }\n  } else if (!isRtl) {\n    if (currentColIndex < lastColIndex) {\n      return currentColIndex + 1;\n    }\n  }\n  return null;\n};\nexport function findNonRowSpannedCell(apiRef, rowId, field, rowSpanScanDirection) {\n  const rowSpanHiddenCells = gridRowSpanningHiddenCellsSelector(apiRef);\n  if (!rowSpanHiddenCells[rowId]?.[field]) {\n    return rowId;\n  }\n  const filteredSortedRowIds = gridFilteredSortedRowIdsSelector(apiRef);\n  // find closest non row spanned cell in the given `rowSpanScanDirection`\n  let nextRowIndex = filteredSortedRowIds.indexOf(rowId) + (rowSpanScanDirection === 'down' ? 1 : -1);\n  while (nextRowIndex >= 0 && nextRowIndex < filteredSortedRowIds.length) {\n    const nextRowId = filteredSortedRowIds[nextRowIndex];\n    if (!rowSpanHiddenCells[nextRowId]?.[field]) {\n      return nextRowId;\n    }\n    nextRowIndex += rowSpanScanDirection === 'down' ? 1 : -1;\n  }\n  return rowId;\n}","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport { throwIfPageSizeExceedsTheLimit, getDefaultGridPaginationModel } from \"./gridPaginationUtils.js\";\nimport { useGridPaginationModel } from \"./useGridPaginationModel.js\";\nimport { useGridRowCount } from \"./useGridRowCount.js\";\nimport { useGridPaginationMeta } from \"./useGridPaginationMeta.js\";\nexport const paginationStateInitializer = (state, props) => {\n  const paginationModel = _extends({}, getDefaultGridPaginationModel(props.autoPageSize), props.paginationModel ?? props.initialState?.pagination?.paginationModel);\n  throwIfPageSizeExceedsTheLimit(paginationModel.pageSize, props.signature);\n  const rowCount = props.rowCount ?? props.initialState?.pagination?.rowCount;\n  const meta = props.paginationMeta ?? props.initialState?.pagination?.meta ?? {};\n  return _extends({}, state, {\n    pagination: {\n      paginationModel,\n      rowCount,\n      meta\n    }\n  });\n};\n\n/**\n * @requires useGridFilter (state)\n * @requires useGridDimensions (event) - can be after\n */\nexport const useGridPagination = (apiRef, props) => {\n  useGridPaginationMeta(apiRef, props);\n  useGridPaginationModel(apiRef, props);\n  useGridRowCount(apiRef, props);\n};","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport * as React from 'react';\nimport { useGridApiMethod } from \"../../utils/useGridApiMethod.js\";\nimport { useGridLogger } from \"../../utils/useGridLogger.js\";\nimport { useGridRegisterPipeProcessor } from \"../../core/pipeProcessing/index.js\";\nimport { gridPreferencePanelStateSelector } from \"./gridPreferencePanelSelector.js\";\nexport const preferencePanelStateInitializer = (state, props) => _extends({}, state, {\n  preferencePanel: props.initialState?.preferencePanel ?? {\n    open: false\n  }\n});\n\n/**\n * TODO: Add a single `setPreferencePanel` method to avoid multiple `setState`\n */\nexport const useGridPreferencesPanel = (apiRef, props) => {\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    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.initialState?.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.initialState?.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};","export const getDefaultCellValue = colDef => {\n  switch (colDef.type) {\n    case 'boolean':\n      return false;\n    case 'date':\n    case 'dateTime':\n    case 'number':\n      return undefined;\n    case 'singleSelect':\n      return null;\n    case 'string':\n    default:\n      return '';\n  }\n};","import _objectWithoutPropertiesLoose from \"@babel/runtime/helpers/esm/objectWithoutPropertiesLoose\";\nimport _toPropertyKey from \"@babel/runtime/helpers/esm/toPropertyKey\";\nimport _extends from \"@babel/runtime/helpers/esm/extends\";\nconst _excluded = [\"id\", \"field\"],\n  _excluded2 = [\"id\", \"field\"];\nimport * as React from 'react';\nimport { unstable_useEventCallback as useEventCallback, unstable_useEnhancedEffect as useEnhancedEffect } from '@mui/utils';\nimport { warnOnce } from '@mui/x-internals/warning';\nimport { useGridApiEventHandler, useGridApiOptionHandler } from \"../../utils/useGridApiEventHandler.js\";\nimport { GridEditModes, GridCellModes } from \"../../../models/gridEditRowModel.js\";\nimport { useGridApiMethod } from \"../../utils/useGridApiMethod.js\";\nimport { gridEditRowsStateSelector } from \"./gridEditingSelectors.js\";\nimport { isPrintableKey, isPasteShortcut } from \"../../../utils/keyboardUtils.js\";\nimport { gridRowsDataRowIdToIdLookupSelector } from \"../rows/gridRowsSelector.js\";\nimport { deepClone } from \"../../../utils/utils.js\";\nimport { GridCellEditStartReasons, GridCellEditStopReasons } from \"../../../models/params/gridEditCellParams.js\";\nimport { getDefaultCellValue } from \"./utils.js\";\nexport const useGridCellEditing = (apiRef, props) => {\n  const [cellModesModel, setCellModesModel] = React.useState({});\n  const cellModesModelRef = React.useRef(cellModesModel);\n  const prevCellModesModel = React.useRef({});\n  const {\n    processRowUpdate,\n    onProcessRowUpdateError,\n    cellModesModel: cellModesModelProp,\n    onCellModesModelChange\n  } = props;\n  const runIfEditModeIsCell = callback => (...args) => {\n    if (props.editMode === GridEditModes.Cell) {\n      callback(...args);\n    }\n  };\n  const throwIfNotEditable = React.useCallback((id, field) => {\n    const params = apiRef.current.getCellParams(id, field);\n    if (!apiRef.current.isCellEditable(params)) {\n      throw new Error(`MUI X: The cell with id=${id} and field=${field} is not editable.`);\n    }\n  }, [apiRef]);\n  const throwIfNotInMode = React.useCallback((id, field, mode) => {\n    if (apiRef.current.getCellMode(id, field) !== mode) {\n      throw new Error(`MUI X: The cell with id=${id} and field=${field} is not in ${mode} mode.`);\n    }\n  }, [apiRef]);\n  const handleCellDoubleClick = React.useCallback((params, event) => {\n    if (!params.isEditable) {\n      return;\n    }\n    if (params.cellMode === GridCellModes.Edit) {\n      return;\n    }\n    const newParams = _extends({}, params, {\n      reason: GridCellEditStartReasons.cellDoubleClick\n    });\n    apiRef.current.publishEvent('cellEditStart', newParams, event);\n  }, [apiRef]);\n  const handleCellFocusOut = React.useCallback((params, event) => {\n    if (params.cellMode === GridCellModes.View) {\n      return;\n    }\n    if (apiRef.current.getCellMode(params.id, params.field) === GridCellModes.View) {\n      return;\n    }\n    const newParams = _extends({}, params, {\n      reason: GridCellEditStopReasons.cellFocusOut\n    });\n    apiRef.current.publishEvent('cellEditStop', newParams, event);\n  }, [apiRef]);\n  const handleCellKeyDown = React.useCallback((params, event) => {\n    if (params.cellMode === GridCellModes.Edit) {\n      // Wait until IME is settled for Asian languages like Japanese and Chinese\n      // TODO: `event.which` is deprecated but this is a temporary workaround\n      if (event.which === 229) {\n        return;\n      }\n      let reason;\n      if (event.key === 'Escape') {\n        reason = GridCellEditStopReasons.escapeKeyDown;\n      } else if (event.key === 'Enter') {\n        reason = GridCellEditStopReasons.enterKeyDown;\n      } else if (event.key === 'Tab') {\n        reason = event.shiftKey ? GridCellEditStopReasons.shiftTabKeyDown : GridCellEditStopReasons.tabKeyDown;\n        event.preventDefault(); // Prevent going to the next element in the tab sequence\n      }\n      if (reason) {\n        const newParams = _extends({}, params, {\n          reason\n        });\n        apiRef.current.publishEvent('cellEditStop', newParams, event);\n      }\n    } else if (params.isEditable) {\n      let reason;\n      const canStartEditing = apiRef.current.unstable_applyPipeProcessors('canStartEditing', true, {\n        event,\n        cellParams: params,\n        editMode: 'cell'\n      });\n      if (!canStartEditing) {\n        return;\n      }\n      if (isPrintableKey(event)) {\n        reason = GridCellEditStartReasons.printableKeyDown;\n      } else if (isPasteShortcut(event)) {\n        reason = GridCellEditStartReasons.pasteKeyDown;\n      } else if (event.key === 'Enter') {\n        reason = GridCellEditStartReasons.enterKeyDown;\n      } else if (event.key === 'Backspace' || event.key === 'Delete') {\n        reason = GridCellEditStartReasons.deleteKeyDown;\n      }\n      if (reason) {\n        const newParams = _extends({}, params, {\n          reason,\n          key: event.key\n        });\n        apiRef.current.publishEvent('cellEditStart', newParams, event);\n      }\n    }\n  }, [apiRef]);\n  const handleCellEditStart = React.useCallback(params => {\n    const {\n      id,\n      field,\n      reason\n    } = params;\n    const startCellEditModeParams = {\n      id,\n      field\n    };\n    if (reason === GridCellEditStartReasons.printableKeyDown || reason === GridCellEditStartReasons.deleteKeyDown || reason === GridCellEditStartReasons.pasteKeyDown) {\n      startCellEditModeParams.deleteValue = true;\n    }\n    apiRef.current.startCellEditMode(startCellEditModeParams);\n  }, [apiRef]);\n  const handleCellEditStop = React.useCallback(params => {\n    const {\n      id,\n      field,\n      reason\n    } = params;\n    apiRef.current.runPendingEditCellValueMutation(id, field);\n    let cellToFocusAfter;\n    if (reason === GridCellEditStopReasons.enterKeyDown) {\n      cellToFocusAfter = 'below';\n    } else if (reason === GridCellEditStopReasons.tabKeyDown) {\n      cellToFocusAfter = 'right';\n    } else if (reason === GridCellEditStopReasons.shiftTabKeyDown) {\n      cellToFocusAfter = 'left';\n    }\n    const ignoreModifications = reason === 'escapeKeyDown';\n    apiRef.current.stopCellEditMode({\n      id,\n      field,\n      ignoreModifications,\n      cellToFocusAfter\n    });\n  }, [apiRef]);\n  const runIfNoFieldErrors = callback => async (...args) => {\n    if (callback) {\n      const {\n        id,\n        field\n      } = args[0];\n      const editRowsState = apiRef.current.state.editRows;\n      const hasFieldErrors = editRowsState[id][field]?.error;\n      if (!hasFieldErrors) {\n        callback(...args);\n      }\n    }\n  };\n  useGridApiEventHandler(apiRef, 'cellDoubleClick', runIfEditModeIsCell(handleCellDoubleClick));\n  useGridApiEventHandler(apiRef, 'cellFocusOut', runIfEditModeIsCell(handleCellFocusOut));\n  useGridApiEventHandler(apiRef, 'cellKeyDown', runIfEditModeIsCell(handleCellKeyDown));\n  useGridApiEventHandler(apiRef, 'cellEditStart', runIfEditModeIsCell(handleCellEditStart));\n  useGridApiEventHandler(apiRef, 'cellEditStop', runIfEditModeIsCell(handleCellEditStop));\n  useGridApiOptionHandler(apiRef, 'cellEditStart', props.onCellEditStart);\n  useGridApiOptionHandler(apiRef, 'cellEditStop', runIfNoFieldErrors(props.onCellEditStop));\n  const getCellMode = React.useCallback((id, field) => {\n    const editingState = gridEditRowsStateSelector(apiRef.current.state);\n    const isEditing = editingState[id] && editingState[id][field];\n    return isEditing ? GridCellModes.Edit : GridCellModes.View;\n  }, [apiRef]);\n  const updateCellModesModel = useEventCallback(newModel => {\n    const isNewModelDifferentFromProp = newModel !== props.cellModesModel;\n    if (onCellModesModelChange && isNewModelDifferentFromProp) {\n      onCellModesModelChange(newModel, {\n        api: apiRef.current\n      });\n    }\n    if (props.cellModesModel && isNewModelDifferentFromProp) {\n      return; // The prop always win\n    }\n    setCellModesModel(newModel);\n    cellModesModelRef.current = newModel;\n    apiRef.current.publishEvent('cellModesModelChange', newModel);\n  });\n  const updateFieldInCellModesModel = React.useCallback((id, field, newProps) => {\n    // We use the ref because it always contain the up-to-date value, different from the state\n    // that needs a rerender to reflect the new value\n    const newModel = _extends({}, cellModesModelRef.current);\n    if (newProps !== null) {\n      newModel[id] = _extends({}, newModel[id], {\n        [field]: _extends({}, newProps)\n      });\n    } else {\n      const _newModel$id = newModel[id],\n        otherFields = _objectWithoutPropertiesLoose(_newModel$id, [field].map(_toPropertyKey)); // Ensure that we have a new object, not a reference\n      newModel[id] = otherFields;\n      if (Object.keys(newModel[id]).length === 0) {\n        delete newModel[id];\n      }\n    }\n    updateCellModesModel(newModel);\n  }, [updateCellModesModel]);\n  const updateOrDeleteFieldState = React.useCallback((id, field, newProps) => {\n    apiRef.current.setState(state => {\n      const newEditingState = _extends({}, state.editRows);\n      if (newProps !== null) {\n        newEditingState[id] = _extends({}, newEditingState[id], {\n          [field]: _extends({}, newProps)\n        });\n      } else {\n        delete newEditingState[id][field];\n        if (Object.keys(newEditingState[id]).length === 0) {\n          delete newEditingState[id];\n        }\n      }\n      return _extends({}, state, {\n        editRows: newEditingState\n      });\n    });\n    apiRef.current.forceUpdate();\n  }, [apiRef]);\n  const startCellEditMode = React.useCallback(params => {\n    const {\n        id,\n        field\n      } = params,\n      other = _objectWithoutPropertiesLoose(params, _excluded);\n    throwIfNotEditable(id, field);\n    throwIfNotInMode(id, field, GridCellModes.View);\n    updateFieldInCellModesModel(id, field, _extends({\n      mode: GridCellModes.Edit\n    }, other));\n  }, [throwIfNotEditable, throwIfNotInMode, updateFieldInCellModesModel]);\n  const updateStateToStartCellEditMode = useEventCallback(params => {\n    const {\n      id,\n      field,\n      deleteValue,\n      initialValue\n    } = params;\n    let newValue = apiRef.current.getCellValue(id, field);\n    if (deleteValue) {\n      newValue = getDefaultCellValue(apiRef.current.getColumn(field));\n    } else if (initialValue) {\n      newValue = initialValue;\n    }\n    const newProps = {\n      value: newValue,\n      error: false,\n      isProcessingProps: false\n    };\n    updateOrDeleteFieldState(id, field, newProps);\n    apiRef.current.setCellFocus(id, field);\n  });\n  const stopCellEditMode = React.useCallback(params => {\n    const {\n        id,\n        field\n      } = params,\n      other = _objectWithoutPropertiesLoose(params, _excluded2);\n    throwIfNotInMode(id, field, GridCellModes.Edit);\n    updateFieldInCellModesModel(id, field, _extends({\n      mode: GridCellModes.View\n    }, other));\n  }, [throwIfNotInMode, updateFieldInCellModesModel]);\n  const updateStateToStopCellEditMode = useEventCallback(async params => {\n    const {\n      id,\n      field,\n      ignoreModifications,\n      cellToFocusAfter = 'none'\n    } = params;\n    throwIfNotInMode(id, field, GridCellModes.Edit);\n    apiRef.current.runPendingEditCellValueMutation(id, field);\n    const finishCellEditMode = () => {\n      updateOrDeleteFieldState(id, field, null);\n      updateFieldInCellModesModel(id, field, null);\n      if (cellToFocusAfter !== 'none') {\n        apiRef.current.moveFocusToRelativeCell(id, field, cellToFocusAfter);\n      }\n    };\n    if (ignoreModifications) {\n      finishCellEditMode();\n      return;\n    }\n    const editingState = gridEditRowsStateSelector(apiRef.current.state);\n    const {\n      error,\n      isProcessingProps\n    } = editingState[id][field];\n    if (error || isProcessingProps) {\n      // Attempt to change cell mode to \"view\" was not successful\n      // Update previous mode to allow another attempt\n      prevCellModesModel.current[id][field].mode = GridCellModes.Edit;\n      // Revert the mode in the cellModesModel prop back to \"edit\"\n      updateFieldInCellModesModel(id, field, {\n        mode: GridCellModes.Edit\n      });\n      return;\n    }\n    const rowUpdate = apiRef.current.getRowWithUpdatedValuesFromCellEditing(id, field);\n    if (processRowUpdate) {\n      const handleError = errorThrown => {\n        prevCellModesModel.current[id][field].mode = GridCellModes.Edit;\n        // Revert the mode in the cellModesModel prop back to \"edit\"\n        updateFieldInCellModesModel(id, field, {\n          mode: GridCellModes.Edit\n        });\n        if (onProcessRowUpdateError) {\n          onProcessRowUpdateError(errorThrown);\n        } else if (process.env.NODE_ENV !== 'production') {\n          warnOnce(['MUI X: A call to `processRowUpdate` threw an error which was not handled because `onProcessRowUpdateError` is missing.', 'To handle the error pass a callback to the `onProcessRowUpdateError` prop, for example `<DataGrid onProcessRowUpdateError={(error) => ...} />`.', 'For more detail, see https://mui.com/x/react-data-grid/editing/#server-side-persistence.'], 'error');\n        }\n      };\n      try {\n        const row = apiRef.current.getRow(id);\n        Promise.resolve(processRowUpdate(rowUpdate, row)).then(finalRowUpdate => {\n          apiRef.current.updateRows([finalRowUpdate]);\n          finishCellEditMode();\n        }).catch(handleError);\n      } catch (errorThrown) {\n        handleError(errorThrown);\n      }\n    } else {\n      apiRef.current.updateRows([rowUpdate]);\n      finishCellEditMode();\n    }\n  });\n  const setCellEditingEditCellValue = React.useCallback(async params => {\n    const {\n      id,\n      field,\n      value,\n      debounceMs,\n      unstable_skipValueParser: skipValueParser\n    } = params;\n    throwIfNotEditable(id, field);\n    throwIfNotInMode(id, field, GridCellModes.Edit);\n    const column = apiRef.current.getColumn(field);\n    const row = apiRef.current.getRow(id);\n    let parsedValue = value;\n    if (column.valueParser && !skipValueParser) {\n      parsedValue = column.valueParser(value, row, column, apiRef);\n    }\n    let editingState = gridEditRowsStateSelector(apiRef.current.state);\n    let newProps = _extends({}, editingState[id][field], {\n      value: parsedValue,\n      changeReason: debounceMs ? 'debouncedSetEditCellValue' : 'setEditCellValue'\n    });\n    if (column.preProcessEditCellProps) {\n      const hasChanged = value !== editingState[id][field].value;\n      newProps = _extends({}, newProps, {\n        isProcessingProps: true\n      });\n      updateOrDeleteFieldState(id, field, newProps);\n      newProps = await Promise.resolve(column.preProcessEditCellProps({\n        id,\n        row,\n        props: newProps,\n        hasChanged\n      }));\n    }\n\n    // Check again if the cell is in edit mode because the user may have\n    // discarded the changes while the props were being processed.\n    if (apiRef.current.getCellMode(id, field) === GridCellModes.View) {\n      return false;\n    }\n    editingState = gridEditRowsStateSelector(apiRef.current.state);\n    newProps = _extends({}, newProps, {\n      isProcessingProps: false\n    });\n    // We don't update the value with the one coming from the props pre-processing\n    // because when the promise resolves it may be already outdated. The only\n    // exception to this rule is when there's no pre-processing.\n    newProps.value = column.preProcessEditCellProps ? editingState[id][field].value : parsedValue;\n    updateOrDeleteFieldState(id, field, newProps);\n    editingState = gridEditRowsStateSelector(apiRef.current.state);\n    return !editingState[id]?.[field]?.error;\n  }, [apiRef, throwIfNotEditable, throwIfNotInMode, updateOrDeleteFieldState]);\n  const getRowWithUpdatedValuesFromCellEditing = React.useCallback((id, field) => {\n    const column = apiRef.current.getColumn(field);\n    const editingState = gridEditRowsStateSelector(apiRef.current.state);\n    const row = apiRef.current.getRow(id);\n    if (!editingState[id] || !editingState[id][field]) {\n      return apiRef.current.getRow(id);\n    }\n    const {\n      value\n    } = editingState[id][field];\n    return column.valueSetter ? column.valueSetter(value, row, column, apiRef) : _extends({}, row, {\n      [field]: value\n    });\n  }, [apiRef]);\n  const editingApi = {\n    getCellMode,\n    startCellEditMode,\n    stopCellEditMode\n  };\n  const editingPrivateApi = {\n    setCellEditingEditCellValue,\n    getRowWithUpdatedValuesFromCellEditing\n  };\n  useGridApiMethod(apiRef, editingApi, 'public');\n  useGridApiMethod(apiRef, editingPrivateApi, 'private');\n  React.useEffect(() => {\n    if (cellModesModelProp) {\n      updateCellModesModel(cellModesModelProp);\n    }\n  }, [cellModesModelProp, updateCellModesModel]);\n\n  // Run this effect synchronously so that the keyboard event can impact the yet-to-be-rendered input.\n  useEnhancedEffect(() => {\n    const idToIdLookup = gridRowsDataRowIdToIdLookupSelector(apiRef);\n\n    // Update the ref here because updateStateToStopCellEditMode may change it later\n    const copyOfPrevCellModes = prevCellModesModel.current;\n    prevCellModesModel.current = deepClone(cellModesModel); // Do a deep-clone because the attributes might be changed later\n\n    Object.entries(cellModesModel).forEach(([id, fields]) => {\n      Object.entries(fields).forEach(([field, params]) => {\n        const prevMode = copyOfPrevCellModes[id]?.[field]?.mode || GridCellModes.View;\n        const originalId = idToIdLookup[id] ?? id;\n        if (params.mode === GridCellModes.Edit && prevMode === GridCellModes.View) {\n          updateStateToStartCellEditMode(_extends({\n            id: originalId,\n            field\n          }, params));\n        } else if (params.mode === GridCellModes.View && prevMode === GridCellModes.Edit) {\n          updateStateToStopCellEditMode(_extends({\n            id: originalId,\n            field\n          }, params));\n        }\n      });\n    });\n  }, [apiRef, cellModesModel, updateStateToStartCellEditMode, updateStateToStopCellEditMode]);\n};","import _toPropertyKey from \"@babel/runtime/helpers/esm/toPropertyKey\";\nimport _objectWithoutPropertiesLoose from \"@babel/runtime/helpers/esm/objectWithoutPropertiesLoose\";\nimport _extends from \"@babel/runtime/helpers/esm/extends\";\nconst _excluded = [\"id\"],\n  _excluded2 = [\"id\"];\nimport * as React from 'react';\nimport { unstable_useEventCallback as useEventCallback, unstable_useEnhancedEffect as useEnhancedEffect } from '@mui/utils';\nimport { warnOnce } from '@mui/x-internals/warning';\nimport { useGridApiEventHandler, useGridApiOptionHandler } from \"../../utils/useGridApiEventHandler.js\";\nimport { GridEditModes, GridRowModes } from \"../../../models/gridEditRowModel.js\";\nimport { useGridApiMethod } from \"../../utils/useGridApiMethod.js\";\nimport { gridEditRowsStateSelector } from \"./gridEditingSelectors.js\";\nimport { isPrintableKey, isPasteShortcut } from \"../../../utils/keyboardUtils.js\";\nimport { gridColumnFieldsSelector, gridVisibleColumnFieldsSelector } from \"../columns/gridColumnsSelector.js\";\nimport { gridRowsDataRowIdToIdLookupSelector } from \"../rows/gridRowsSelector.js\";\nimport { deepClone } from \"../../../utils/utils.js\";\nimport { GridRowEditStopReasons, GridRowEditStartReasons } from \"../../../models/params/gridRowParams.js\";\nimport { GRID_ACTIONS_COLUMN_TYPE } from \"../../../colDef/index.js\";\nimport { getDefaultCellValue } from \"./utils.js\";\nexport const useGridRowEditing = (apiRef, props) => {\n  const [rowModesModel, setRowModesModel] = React.useState({});\n  const rowModesModelRef = React.useRef(rowModesModel);\n  const prevRowModesModel = React.useRef({});\n  const focusTimeout = React.useRef();\n  const nextFocusedCell = React.useRef(null);\n  const {\n    processRowUpdate,\n    onProcessRowUpdateError,\n    rowModesModel: rowModesModelProp,\n    onRowModesModelChange\n  } = props;\n  const runIfEditModeIsRow = callback => (...args) => {\n    if (props.editMode === GridEditModes.Row) {\n      callback(...args);\n    }\n  };\n  const throwIfNotEditable = React.useCallback((id, field) => {\n    const params = apiRef.current.getCellParams(id, field);\n    if (!apiRef.current.isCellEditable(params)) {\n      throw new Error(`MUI X: The cell with id=${id} and field=${field} is not editable.`);\n    }\n  }, [apiRef]);\n  const throwIfNotInMode = React.useCallback((id, mode) => {\n    if (apiRef.current.getRowMode(id) !== mode) {\n      throw new Error(`MUI X: The row with id=${id} is not in ${mode} mode.`);\n    }\n  }, [apiRef]);\n  const hasFieldsWithErrors = React.useCallback(rowId => {\n    const editingState = gridEditRowsStateSelector(apiRef.current.state);\n    return Object.values(editingState[rowId]).some(fieldProps => fieldProps.error);\n  }, [apiRef]);\n  const handleCellDoubleClick = React.useCallback((params, event) => {\n    if (!params.isEditable) {\n      return;\n    }\n    if (apiRef.current.getRowMode(params.id) === GridRowModes.Edit) {\n      return;\n    }\n    const rowParams = apiRef.current.getRowParams(params.id);\n    const newParams = _extends({}, rowParams, {\n      field: params.field,\n      reason: GridRowEditStartReasons.cellDoubleClick\n    });\n    apiRef.current.publishEvent('rowEditStart', newParams, event);\n  }, [apiRef]);\n  const handleCellFocusIn = React.useCallback(params => {\n    nextFocusedCell.current = params;\n  }, []);\n  const handleCellFocusOut = React.useCallback((params, event) => {\n    if (!params.isEditable) {\n      return;\n    }\n    if (apiRef.current.getRowMode(params.id) === GridRowModes.View) {\n      return;\n    }\n    // The mechanism to detect if we can stop editing a row is different from\n    // the cell editing. Instead of triggering it when clicking outside a cell,\n    // we must check if another cell in the same row was not clicked. To achieve\n    // that, first we keep track of all cells that gained focus. When a cell loses\n    // focus we check if the next cell that received focus is from a different row.\n    nextFocusedCell.current = null;\n    focusTimeout.current = setTimeout(() => {\n      if (nextFocusedCell.current?.id !== params.id) {\n        // The row might have been deleted during the click\n        if (!apiRef.current.getRow(params.id)) {\n          return;\n        }\n\n        // The row may already changed its mode\n        if (apiRef.current.getRowMode(params.id) === GridRowModes.View) {\n          return;\n        }\n        if (hasFieldsWithErrors(params.id)) {\n          return;\n        }\n        const rowParams = apiRef.current.getRowParams(params.id);\n        const newParams = _extends({}, rowParams, {\n          field: params.field,\n          reason: GridRowEditStopReasons.rowFocusOut\n        });\n        apiRef.current.publishEvent('rowEditStop', newParams, event);\n      }\n    });\n  }, [apiRef, hasFieldsWithErrors]);\n  React.useEffect(() => {\n    return () => {\n      clearTimeout(focusTimeout.current);\n    };\n  }, []);\n  const handleCellKeyDown = React.useCallback((params, event) => {\n    if (params.cellMode === GridRowModes.Edit) {\n      // Wait until IME is settled for Asian languages like Japanese and Chinese\n      // TODO: `event.which` is deprecated but this is a temporary workaround\n      if (event.which === 229) {\n        return;\n      }\n      let reason;\n      if (event.key === 'Escape') {\n        reason = GridRowEditStopReasons.escapeKeyDown;\n      } else if (event.key === 'Enter') {\n        reason = GridRowEditStopReasons.enterKeyDown;\n      } else if (event.key === 'Tab') {\n        const columnFields = gridVisibleColumnFieldsSelector(apiRef).filter(field => {\n          const column = apiRef.current.getColumn(field);\n          if (column.type === GRID_ACTIONS_COLUMN_TYPE) {\n            return true;\n          }\n          return apiRef.current.isCellEditable(apiRef.current.getCellParams(params.id, field));\n        });\n        if (event.shiftKey) {\n          if (params.field === columnFields[0]) {\n            // Exit if user pressed Shift+Tab on the first field\n            reason = GridRowEditStopReasons.shiftTabKeyDown;\n          }\n        } else if (params.field === columnFields[columnFields.length - 1]) {\n          // Exit if user pressed Tab on the last field\n          reason = GridRowEditStopReasons.tabKeyDown;\n        }\n\n        // Always prevent going to the next element in the tab sequence because the focus is\n        // handled manually to support edit components rendered inside Portals\n        event.preventDefault();\n        if (!reason) {\n          const index = columnFields.findIndex(field => field === params.field);\n          const nextFieldToFocus = columnFields[event.shiftKey ? index - 1 : index + 1];\n          apiRef.current.setCellFocus(params.id, nextFieldToFocus);\n        }\n      }\n      if (reason) {\n        if (reason !== GridRowEditStopReasons.escapeKeyDown && hasFieldsWithErrors(params.id)) {\n          return;\n        }\n        const newParams = _extends({}, apiRef.current.getRowParams(params.id), {\n          reason,\n          field: params.field\n        });\n        apiRef.current.publishEvent('rowEditStop', newParams, event);\n      }\n    } else if (params.isEditable) {\n      let reason;\n      const canStartEditing = apiRef.current.unstable_applyPipeProcessors('canStartEditing', true, {\n        event,\n        cellParams: params,\n        editMode: 'row'\n      });\n      if (!canStartEditing) {\n        return;\n      }\n      if (isPrintableKey(event)) {\n        reason = GridRowEditStartReasons.printableKeyDown;\n      } else if (isPasteShortcut(event)) {\n        reason = GridRowEditStartReasons.printableKeyDown;\n      } else if (event.key === 'Enter') {\n        reason = GridRowEditStartReasons.enterKeyDown;\n      } else if (event.key === 'Backspace' || event.key === 'Delete') {\n        reason = GridRowEditStartReasons.deleteKeyDown;\n      }\n      if (reason) {\n        const rowParams = apiRef.current.getRowParams(params.id);\n        const newParams = _extends({}, rowParams, {\n          field: params.field,\n          reason\n        });\n        apiRef.current.publishEvent('rowEditStart', newParams, event);\n      }\n    }\n  }, [apiRef, hasFieldsWithErrors]);\n  const handleRowEditStart = React.useCallback(params => {\n    const {\n      id,\n      field,\n      reason\n    } = params;\n    const startRowEditModeParams = {\n      id,\n      fieldToFocus: field\n    };\n    if (reason === GridRowEditStartReasons.printableKeyDown || reason === GridRowEditStartReasons.deleteKeyDown) {\n      startRowEditModeParams.deleteValue = !!field;\n    }\n    apiRef.current.startRowEditMode(startRowEditModeParams);\n  }, [apiRef]);\n  const handleRowEditStop = React.useCallback(params => {\n    const {\n      id,\n      reason,\n      field\n    } = params;\n    apiRef.current.runPendingEditCellValueMutation(id);\n    let cellToFocusAfter;\n    if (reason === GridRowEditStopReasons.enterKeyDown) {\n      cellToFocusAfter = 'below';\n    } else if (reason === GridRowEditStopReasons.tabKeyDown) {\n      cellToFocusAfter = 'right';\n    } else if (reason === GridRowEditStopReasons.shiftTabKeyDown) {\n      cellToFocusAfter = 'left';\n    }\n    const ignoreModifications = reason === 'escapeKeyDown';\n    apiRef.current.stopRowEditMode({\n      id,\n      ignoreModifications,\n      field,\n      cellToFocusAfter\n    });\n  }, [apiRef]);\n  useGridApiEventHandler(apiRef, 'cellDoubleClick', runIfEditModeIsRow(handleCellDoubleClick));\n  useGridApiEventHandler(apiRef, 'cellFocusIn', runIfEditModeIsRow(handleCellFocusIn));\n  useGridApiEventHandler(apiRef, 'cellFocusOut', runIfEditModeIsRow(handleCellFocusOut));\n  useGridApiEventHandler(apiRef, 'cellKeyDown', runIfEditModeIsRow(handleCellKeyDown));\n  useGridApiEventHandler(apiRef, 'rowEditStart', runIfEditModeIsRow(handleRowEditStart));\n  useGridApiEventHandler(apiRef, 'rowEditStop', runIfEditModeIsRow(handleRowEditStop));\n  useGridApiOptionHandler(apiRef, 'rowEditStart', props.onRowEditStart);\n  useGridApiOptionHandler(apiRef, 'rowEditStop', props.onRowEditStop);\n  const getRowMode = React.useCallback(id => {\n    if (props.editMode === GridEditModes.Cell) {\n      return GridRowModes.View;\n    }\n    const editingState = gridEditRowsStateSelector(apiRef.current.state);\n    const isEditing = editingState[id] && Object.keys(editingState[id]).length > 0;\n    return isEditing ? GridRowModes.Edit : GridRowModes.View;\n  }, [apiRef, props.editMode]);\n  const updateRowModesModel = useEventCallback(newModel => {\n    const isNewModelDifferentFromProp = newModel !== props.rowModesModel;\n    if (onRowModesModelChange && isNewModelDifferentFromProp) {\n      onRowModesModelChange(newModel, {\n        api: apiRef.current\n      });\n    }\n    if (props.rowModesModel && isNewModelDifferentFromProp) {\n      return; // The prop always win\n    }\n    setRowModesModel(newModel);\n    rowModesModelRef.current = newModel;\n    apiRef.current.publishEvent('rowModesModelChange', newModel);\n  });\n  const updateRowInRowModesModel = React.useCallback((id, newProps) => {\n    const newModel = _extends({}, rowModesModelRef.current);\n    if (newProps !== null) {\n      newModel[id] = _extends({}, newProps);\n    } else {\n      delete newModel[id];\n    }\n    updateRowModesModel(newModel);\n  }, [updateRowModesModel]);\n  const updateOrDeleteRowState = React.useCallback((id, newProps) => {\n    apiRef.current.setState(state => {\n      const newEditingState = _extends({}, state.editRows);\n      if (newProps !== null) {\n        newEditingState[id] = newProps;\n      } else {\n        delete newEditingState[id];\n      }\n      return _extends({}, state, {\n        editRows: newEditingState\n      });\n    });\n    apiRef.current.forceUpdate();\n  }, [apiRef]);\n  const updateOrDeleteFieldState = React.useCallback((id, field, newProps) => {\n    apiRef.current.setState(state => {\n      const newEditingState = _extends({}, state.editRows);\n      if (newProps !== null) {\n        newEditingState[id] = _extends({}, newEditingState[id], {\n          [field]: _extends({}, newProps)\n        });\n      } else {\n        delete newEditingState[id][field];\n        if (Object.keys(newEditingState[id]).length === 0) {\n          delete newEditingState[id];\n        }\n      }\n      return _extends({}, state, {\n        editRows: newEditingState\n      });\n    });\n    apiRef.current.forceUpdate();\n  }, [apiRef]);\n  const startRowEditMode = React.useCallback(params => {\n    const {\n        id\n      } = params,\n      other = _objectWithoutPropertiesLoose(params, _excluded);\n    throwIfNotInMode(id, GridRowModes.View);\n    updateRowInRowModesModel(id, _extends({\n      mode: GridRowModes.Edit\n    }, other));\n  }, [throwIfNotInMode, updateRowInRowModesModel]);\n  const updateStateToStartRowEditMode = useEventCallback(params => {\n    const {\n      id,\n      fieldToFocus,\n      deleteValue,\n      initialValue\n    } = params;\n    const columnFields = gridColumnFieldsSelector(apiRef);\n    const newProps = columnFields.reduce((acc, field) => {\n      const cellParams = apiRef.current.getCellParams(id, field);\n      if (!cellParams.isEditable) {\n        return acc;\n      }\n      let newValue = apiRef.current.getCellValue(id, field);\n      if (fieldToFocus === field && (deleteValue || initialValue)) {\n        if (deleteValue) {\n          newValue = getDefaultCellValue(apiRef.current.getColumn(field));\n        } else if (initialValue) {\n          newValue = initialValue;\n        }\n      }\n      acc[field] = {\n        value: newValue,\n        error: false,\n        isProcessingProps: false\n      };\n      return acc;\n    }, {});\n    updateOrDeleteRowState(id, newProps);\n    if (fieldToFocus) {\n      apiRef.current.setCellFocus(id, fieldToFocus);\n    }\n  });\n  const stopRowEditMode = React.useCallback(params => {\n    const {\n        id\n      } = params,\n      other = _objectWithoutPropertiesLoose(params, _excluded2);\n    throwIfNotInMode(id, GridRowModes.Edit);\n    updateRowInRowModesModel(id, _extends({\n      mode: GridRowModes.View\n    }, other));\n  }, [throwIfNotInMode, updateRowInRowModesModel]);\n  const updateStateToStopRowEditMode = useEventCallback(params => {\n    const {\n      id,\n      ignoreModifications,\n      field: focusedField,\n      cellToFocusAfter = 'none'\n    } = params;\n    apiRef.current.runPendingEditCellValueMutation(id);\n    const finishRowEditMode = () => {\n      if (cellToFocusAfter !== 'none' && focusedField) {\n        apiRef.current.moveFocusToRelativeCell(id, focusedField, cellToFocusAfter);\n      }\n      updateOrDeleteRowState(id, null);\n      updateRowInRowModesModel(id, null);\n    };\n    if (ignoreModifications) {\n      finishRowEditMode();\n      return;\n    }\n    const editingState = gridEditRowsStateSelector(apiRef.current.state);\n    const row = apiRef.current.getRow(id);\n    const isSomeFieldProcessingProps = Object.values(editingState[id]).some(fieldProps => fieldProps.isProcessingProps);\n    if (isSomeFieldProcessingProps) {\n      prevRowModesModel.current[id].mode = GridRowModes.Edit;\n      return;\n    }\n    if (hasFieldsWithErrors(id)) {\n      prevRowModesModel.current[id].mode = GridRowModes.Edit;\n      // Revert the mode in the rowModesModel prop back to \"edit\"\n      updateRowInRowModesModel(id, {\n        mode: GridRowModes.Edit\n      });\n      return;\n    }\n    const rowUpdate = apiRef.current.getRowWithUpdatedValuesFromRowEditing(id);\n    if (processRowUpdate) {\n      const handleError = errorThrown => {\n        prevRowModesModel.current[id].mode = GridRowModes.Edit;\n        // Revert the mode in the rowModesModel prop back to \"edit\"\n        updateRowInRowModesModel(id, {\n          mode: GridRowModes.Edit\n        });\n        if (onProcessRowUpdateError) {\n          onProcessRowUpdateError(errorThrown);\n        } else if (process.env.NODE_ENV !== 'production') {\n          warnOnce(['MUI X: A call to `processRowUpdate` threw an error which was not handled because `onProcessRowUpdateError` is missing.', 'To handle the error pass a callback to the `onProcessRowUpdateError` prop, for example `<DataGrid onProcessRowUpdateError={(error) => ...} />`.', 'For more detail, see https://mui.com/x/react-data-grid/editing/#server-side-persistence.'], 'error');\n        }\n      };\n      try {\n        Promise.resolve(processRowUpdate(rowUpdate, row)).then(finalRowUpdate => {\n          apiRef.current.updateRows([finalRowUpdate]);\n          finishRowEditMode();\n        }).catch(handleError);\n      } catch (errorThrown) {\n        handleError(errorThrown);\n      }\n    } else {\n      apiRef.current.updateRows([rowUpdate]);\n      finishRowEditMode();\n    }\n  });\n  const setRowEditingEditCellValue = React.useCallback(params => {\n    const {\n      id,\n      field,\n      value,\n      debounceMs,\n      unstable_skipValueParser: skipValueParser\n    } = params;\n    throwIfNotEditable(id, field);\n    const column = apiRef.current.getColumn(field);\n    const row = apiRef.current.getRow(id);\n    let parsedValue = value;\n    if (column.valueParser && !skipValueParser) {\n      parsedValue = column.valueParser(value, row, column, apiRef);\n    }\n    let editingState = gridEditRowsStateSelector(apiRef.current.state);\n    let newProps = _extends({}, editingState[id][field], {\n      value: parsedValue,\n      changeReason: debounceMs ? 'debouncedSetEditCellValue' : 'setEditCellValue'\n    });\n    if (!column.preProcessEditCellProps) {\n      updateOrDeleteFieldState(id, field, newProps);\n    }\n    return new Promise(resolve => {\n      const promises = [];\n      if (column.preProcessEditCellProps) {\n        const hasChanged = newProps.value !== editingState[id][field].value;\n        newProps = _extends({}, newProps, {\n          isProcessingProps: true\n        });\n        updateOrDeleteFieldState(id, field, newProps);\n        const _editingState$id = editingState[id],\n          otherFieldsProps = _objectWithoutPropertiesLoose(_editingState$id, [field].map(_toPropertyKey));\n        const promise = Promise.resolve(column.preProcessEditCellProps({\n          id,\n          row,\n          props: newProps,\n          hasChanged,\n          otherFieldsProps\n        })).then(processedProps => {\n          // Check again if the row is in edit mode because the user may have\n          // discarded the changes while the props were being processed.\n          if (apiRef.current.getRowMode(id) === GridRowModes.View) {\n            resolve(false);\n            return;\n          }\n          editingState = gridEditRowsStateSelector(apiRef.current.state);\n          processedProps = _extends({}, processedProps, {\n            isProcessingProps: false\n          });\n          // We don't reuse the value from the props pre-processing because when the\n          // promise resolves it may be already outdated. The only exception to this rule\n          // is when there's no pre-processing.\n          processedProps.value = column.preProcessEditCellProps ? editingState[id][field].value : parsedValue;\n          updateOrDeleteFieldState(id, field, processedProps);\n        });\n        promises.push(promise);\n      }\n      Object.entries(editingState[id]).forEach(([thisField, fieldProps]) => {\n        if (thisField === field) {\n          return;\n        }\n        const fieldColumn = apiRef.current.getColumn(thisField);\n        if (!fieldColumn.preProcessEditCellProps) {\n          return;\n        }\n        fieldProps = _extends({}, fieldProps, {\n          isProcessingProps: true\n        });\n        updateOrDeleteFieldState(id, thisField, fieldProps);\n        editingState = gridEditRowsStateSelector(apiRef.current.state);\n        const _editingState$id2 = editingState[id],\n          otherFieldsProps = _objectWithoutPropertiesLoose(_editingState$id2, [thisField].map(_toPropertyKey));\n        const promise = Promise.resolve(fieldColumn.preProcessEditCellProps({\n          id,\n          row,\n          props: fieldProps,\n          hasChanged: false,\n          otherFieldsProps\n        })).then(processedProps => {\n          // Check again if the row is in edit mode because the user may have\n          // discarded the changes while the props were being processed.\n          if (apiRef.current.getRowMode(id) === GridRowModes.View) {\n            resolve(false);\n            return;\n          }\n          processedProps = _extends({}, processedProps, {\n            isProcessingProps: false\n          });\n          updateOrDeleteFieldState(id, thisField, processedProps);\n        });\n        promises.push(promise);\n      });\n      Promise.all(promises).then(() => {\n        if (apiRef.current.getRowMode(id) === GridRowModes.Edit) {\n          editingState = gridEditRowsStateSelector(apiRef.current.state);\n          resolve(!editingState[id][field].error);\n        } else {\n          resolve(false);\n        }\n      });\n    });\n  }, [apiRef, throwIfNotEditable, updateOrDeleteFieldState]);\n  const getRowWithUpdatedValuesFromRowEditing = React.useCallback(id => {\n    const editingState = gridEditRowsStateSelector(apiRef.current.state);\n    const row = apiRef.current.getRow(id);\n    if (!editingState[id]) {\n      return apiRef.current.getRow(id);\n    }\n    let rowUpdate = _extends({}, row);\n    Object.entries(editingState[id]).forEach(([field, fieldProps]) => {\n      const column = apiRef.current.getColumn(field);\n      if (column.valueSetter) {\n        rowUpdate = column.valueSetter(fieldProps.value, rowUpdate, column, apiRef);\n      } else {\n        rowUpdate[field] = fieldProps.value;\n      }\n    });\n    return rowUpdate;\n  }, [apiRef]);\n  const editingApi = {\n    getRowMode,\n    startRowEditMode,\n    stopRowEditMode\n  };\n  const editingPrivateApi = {\n    setRowEditingEditCellValue,\n    getRowWithUpdatedValuesFromRowEditing\n  };\n  useGridApiMethod(apiRef, editingApi, 'public');\n  useGridApiMethod(apiRef, editingPrivateApi, 'private');\n  React.useEffect(() => {\n    if (rowModesModelProp) {\n      updateRowModesModel(rowModesModelProp);\n    }\n  }, [rowModesModelProp, updateRowModesModel]);\n\n  // Run this effect synchronously so that the keyboard event can impact the yet-to-be-rendered input.\n  useEnhancedEffect(() => {\n    const idToIdLookup = gridRowsDataRowIdToIdLookupSelector(apiRef);\n\n    // Update the ref here because updateStateToStopRowEditMode may change it later\n    const copyOfPrevRowModesModel = prevRowModesModel.current;\n    prevRowModesModel.current = deepClone(rowModesModel); // Do a deep-clone because the attributes might be changed later\n\n    const ids = new Set([...Object.keys(rowModesModel), ...Object.keys(copyOfPrevRowModesModel)]);\n    Array.from(ids).forEach(id => {\n      const params = rowModesModel[id] ?? {\n        mode: GridRowModes.View\n      };\n      const prevMode = copyOfPrevRowModesModel[id]?.mode || GridRowModes.View;\n      const originalId = idToIdLookup[id] ?? id;\n      if (params.mode === GridRowModes.Edit && prevMode === GridRowModes.View) {\n        updateStateToStartRowEditMode(_extends({\n          id: originalId\n        }, params));\n      } else if (params.mode === GridRowModes.View && prevMode === GridRowModes.Edit) {\n        updateStateToStopRowEditMode(_extends({\n          id: originalId\n        }, params));\n      }\n    });\n  }, [apiRef, rowModesModel, updateStateToStartRowEditMode, updateStateToStopRowEditMode]);\n};","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport * as React from 'react';\nimport { useGridApiMethod } from \"../../utils/useGridApiMethod.js\";\nimport { useGridCellEditing } from \"./useGridCellEditing.js\";\nimport { GridCellModes, GridEditModes } from \"../../../models/gridEditRowModel.js\";\nimport { useGridRowEditing } from \"./useGridRowEditing.js\";\nimport { gridEditRowsStateSelector } from \"./gridEditingSelectors.js\";\nimport { isAutogeneratedRowNode } from \"../rows/gridRowsUtils.js\";\nexport const editingStateInitializer = state => _extends({}, state, {\n  editRows: {}\n});\nexport const useGridEditing = (apiRef, props) => {\n  useGridCellEditing(apiRef, props);\n  useGridRowEditing(apiRef, props);\n  const debounceMap = React.useRef({});\n  const {\n    isCellEditable: isCellEditableProp\n  } = props;\n  const isCellEditable = React.useCallback(params => {\n    if (isAutogeneratedRowNode(params.rowNode)) {\n      return false;\n    }\n    if (!params.colDef.editable) {\n      return false;\n    }\n    if (!params.colDef.renderEditCell) {\n      return false;\n    }\n    if (isCellEditableProp) {\n      return isCellEditableProp(params);\n    }\n    return true;\n  }, [isCellEditableProp]);\n  const maybeDebounce = (id, field, debounceMs, callback) => {\n    if (!debounceMs) {\n      callback();\n      return;\n    }\n    if (!debounceMap.current[id]) {\n      debounceMap.current[id] = {};\n    }\n    if (debounceMap.current[id][field]) {\n      const [timeout] = debounceMap.current[id][field];\n      clearTimeout(timeout);\n    }\n\n    // To run the callback immediately without waiting the timeout\n    const runImmediately = () => {\n      const [timeout] = debounceMap.current[id][field];\n      clearTimeout(timeout);\n      callback();\n      delete debounceMap.current[id][field];\n    };\n    const timeout = setTimeout(() => {\n      callback();\n      delete debounceMap.current[id][field];\n    }, debounceMs);\n    debounceMap.current[id][field] = [timeout, runImmediately];\n  };\n  React.useEffect(() => {\n    const debounces = debounceMap.current;\n    return () => {\n      Object.entries(debounces).forEach(([id, fields]) => {\n        Object.keys(fields).forEach(field => {\n          const [timeout] = debounces[id][field];\n          clearTimeout(timeout);\n          delete debounces[id][field];\n        });\n      });\n    };\n  }, []);\n  const runPendingEditCellValueMutation = React.useCallback((id, field) => {\n    if (!debounceMap.current[id]) {\n      return;\n    }\n    if (!field) {\n      Object.keys(debounceMap.current[id]).forEach(debouncedField => {\n        const [, runCallback] = debounceMap.current[id][debouncedField];\n        runCallback();\n      });\n    } else if (debounceMap.current[id][field]) {\n      const [, runCallback] = debounceMap.current[id][field];\n      runCallback();\n    }\n  }, []);\n  const setEditCellValue = React.useCallback(params => {\n    const {\n      id,\n      field,\n      debounceMs\n    } = params;\n    return new Promise(resolve => {\n      maybeDebounce(id, field, debounceMs, async () => {\n        const setEditCellValueToCall = props.editMode === GridEditModes.Row ? apiRef.current.setRowEditingEditCellValue : apiRef.current.setCellEditingEditCellValue;\n\n        // Check if the cell is in edit mode\n        // By the time this callback runs the user may have cancelled the editing\n        if (apiRef.current.getCellMode(id, field) === GridCellModes.Edit) {\n          const result = await setEditCellValueToCall(params);\n          resolve(result);\n        }\n      });\n    });\n  }, [apiRef, props.editMode]);\n  const getRowWithUpdatedValues = React.useCallback((id, field) => {\n    return props.editMode === GridEditModes.Cell ? apiRef.current.getRowWithUpdatedValuesFromCellEditing(id, field) : apiRef.current.getRowWithUpdatedValuesFromRowEditing(id);\n  }, [apiRef, props.editMode]);\n  const getEditCellMeta = React.useCallback((id, field) => {\n    const editingState = gridEditRowsStateSelector(apiRef.current.state);\n    return editingState[id]?.[field] ?? null;\n  }, [apiRef]);\n  const editingSharedApi = {\n    isCellEditable,\n    setEditCellValue,\n    getRowWithUpdatedValues,\n    unstable_getEditCellMeta: getEditCellMeta\n  };\n  const editingSharedPrivateApi = {\n    runPendingEditCellValueMutation\n  };\n  useGridApiMethod(apiRef, editingSharedApi, 'public');\n  useGridApiMethod(apiRef, editingSharedPrivateApi, 'private');\n};","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport * as React from 'react';\nimport { useGridApiMethod } from \"../../utils/useGridApiMethod.js\";\nimport { useGridLogger } from \"../../utils/useGridLogger.js\";\nimport { gridRowCountSelector, gridRowsLookupSelector, gridRowTreeSelector, gridRowGroupingNameSelector, gridRowTreeDepthsSelector, gridDataRowIdsSelector, gridRowsDataRowIdToIdLookupSelector, gridRowMaximumTreeDepthSelector, gridRowGroupsToFetchSelector } from \"./gridRowsSelector.js\";\nimport { useTimeout } from \"../../utils/useTimeout.js\";\nimport { GridSignature, useGridApiEventHandler } from \"../../utils/useGridApiEventHandler.js\";\nimport { useGridVisibleRows } from \"../../utils/useGridVisibleRows.js\";\nimport { gridSortedRowIdsSelector } from \"../sorting/gridSortingSelector.js\";\nimport { gridFilteredRowsLookupSelector } from \"../filter/gridFilterSelector.js\";\nimport { getTreeNodeDescendants, createRowsInternalCache, getRowsStateFromCache, isAutogeneratedRowNode, GRID_ROOT_GROUP_ID, GRID_ID_AUTOGENERATED, updateCacheWithNewRows, getTopLevelRowCount, getRowIdFromRowModel, computeRowsUpdates } from \"./gridRowsUtils.js\";\nimport { useGridRegisterPipeApplier } from \"../../core/pipeProcessing/index.js\";\nexport const rowsStateInitializer = (state, props, apiRef) => {\n  const isDataSourceAvailable = !!props.unstable_dataSource;\n  apiRef.current.caches.rows = createRowsInternalCache({\n    rows: isDataSourceAvailable ? [] : 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: isDataSourceAvailable ? true : 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 lastRowCount = React.useRef(props.rowCount);\n  const timeout = useTimeout();\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 && isAutogeneratedRowNode(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      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          previousGroupsToFetch: gridRowGroupsToFetchSelector(apiRef)\n        })\n      }));\n      apiRef.current.publishEvent('rowsSet');\n      apiRef.current.forceUpdate();\n    };\n    timeout.clear();\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.start(throttleRemainingTimeMs, run);\n      return;\n    }\n    run();\n  }, [props.throttleRowsMs, props.rowCount, props.loading, apiRef, timeout]);\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 X: You cannot 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 = computeRowsUpdates(apiRef, updates, props.getRowId);\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 updateServerRows = React.useCallback((updates, groupKeys) => {\n    const nonPinnedRowsUpdates = computeRowsUpdates(apiRef, updates, props.getRowId);\n    const cache = updateCacheWithNewRows({\n      updates: nonPinnedRowsUpdates,\n      getRowId: props.getRowId,\n      previousCache: apiRef.current.caches.rows,\n      groupKeys: groupKeys ?? []\n    });\n    throttledRowsChange({\n      cache,\n      throttle: false\n    });\n  }, [props.getRowId, throttledRowsChange, apiRef]);\n  const setLoading = React.useCallback(loading => {\n    if (loading === props.loading) {\n      return;\n    }\n    logger.debug(`Setting loading to ${loading}`);\n    apiRef.current.setState(state => _extends({}, state, {\n      rows: _extends({}, state.rows, {\n        loading\n      })\n    }));\n    apiRef.current.caches.rows.loadingPropBeforePartialUpdates = loading;\n  }, [props.loading, apiRef, logger]);\n  const getRowModels = React.useCallback(() => {\n    const dataRows = gridDataRowIdsSelector(apiRef);\n    const idRowsLookup = gridRowsLookupSelector(apiRef);\n    return new Map(dataRows.map(id => [id, idRowsLookup[id] ?? {}]));\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 X: No row with id #${id} found.`);\n    }\n    if (currentNode.type !== 'group') {\n      throw new Error('MUI X: 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 => gridRowTreeSelector(apiRef)[id] ?? null, [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 || !isAutogeneratedRowNode(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 X: No row with id #${rowId} found.`);\n    }\n    if (node.parent !== GRID_ROOT_GROUP_ID) {\n      throw new Error(`MUI X: The row reordering do not support reordering of grouped rows yet.`);\n    }\n    if (node.type !== 'leaf') {\n      throw new Error(`MUI X: 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 X: You cannot 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    const seenIds = new Set();\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 [removedRowId] = rootGroupChildren.splice(firstRowToRender + i, 1, rowId);\n      if (!seenIds.has(removedRowId)) {\n        delete dataRowIdToModelLookup[removedRowId];\n        delete dataRowIdToIdLookup[removedRowId];\n        delete tree[removedRowId];\n      }\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      seenIds.add(rowId);\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    setLoading,\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  const rowProPrivateApi = {\n    updateServerRows\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  useGridApiMethod(apiRef, rowProPrivateApi, 'private');\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    let isRowCountPropUpdated = false;\n    if (props.rowCount !== lastRowCount.current) {\n      isRowCountPropUpdated = true;\n      lastRowCount.current = props.rowCount;\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      if (!isRowCountPropUpdated) {\n        return;\n      }\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 { GRID_DEFAULT_STRATEGY, useGridRegisterStrategyProcessor } from \"../../core/strategyProcessing/index.js\";\nimport { buildRootGroup, GRID_ROOT_GROUP_ID } from \"./gridRowsUtils.js\";\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 _extends from \"@babel/runtime/helpers/esm/extends\";\nimport * as React from 'react';\nimport { GridSignature, useGridApiEventHandler } from \"../../utils/useGridApiEventHandler.js\";\nimport { useGridApiMethod } from \"../../utils/useGridApiMethod.js\";\nimport { useGridLogger } from \"../../utils/useGridLogger.js\";\nimport { gridRowsLookupSelector } from \"../rows/gridRowsSelector.js\";\nimport { gridRowSelectionStateSelector, selectedGridRowsSelector, selectedIdsLookupSelector } from \"./gridRowSelectionSelector.js\";\nimport { gridPaginatedVisibleSortedGridRowIdsSelector } from \"../pagination/index.js\";\nimport { gridFocusCellSelector } from \"../focus/gridFocusStateSelector.js\";\nimport { gridExpandedSortedRowIdsSelector, gridFilterModelSelector } from \"../filter/gridFilterSelector.js\";\nimport { GRID_CHECKBOX_SELECTION_COL_DEF, GRID_ACTIONS_COLUMN_TYPE } from \"../../../colDef/index.js\";\nimport { GridCellModes } from \"../../../models/gridEditRowModel.js\";\nimport { isKeyboardEvent, isNavigationKey } from \"../../../utils/keyboardUtils.js\";\nimport { useGridVisibleRows } from \"../../utils/useGridVisibleRows.js\";\nimport { GRID_DETAIL_PANEL_TOGGLE_FIELD } from \"../../../constants/gridDetailPanelToggleField.js\";\nimport { gridClasses } from \"../../../constants/gridClasses.js\";\nimport { isEventTargetInPortal } from \"../../../utils/domUtils.js\";\nimport { isMultipleRowSelectionEnabled } from \"./utils.js\";\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) => _extends({}, state, {\n  rowSelection: props.rowSelection ? getSelectionModelPropValue(props.rowSelectionModel) ?? [] : []\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    disableRowSelectionOnClick,\n    isRowSelectable: propIsRowSelectable\n  } = props;\n  const canHaveMultipleSelection = isMultipleRowSelectionEnabled(props);\n  const visibleRows = useGridVisibleRows(apiRef, props);\n  const expandMouseRowRangeSelection = React.useCallback(id => {\n    let endId = id;\n    const startId = lastRowToggled.current ?? 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 && !canHaveMultipleSelection && Array.isArray(model) && model.length > 1) {\n      throw new Error(['MUI X: `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, canHaveMultipleSelection]);\n  const isRowSelected = React.useCallback(id => gridRowSelectionStateSelector(apiRef.current.state).includes(id), [apiRef]);\n  const isRowSelectable = React.useCallback(id => {\n    if (props.rowSelection === false) {\n      return false;\n    }\n    if (propIsRowSelectable && !propIsRowSelectable(apiRef.current.getRowParams(id))) {\n      return false;\n    }\n    const rowNode = apiRef.current.getRowNode(id);\n    if (rowNode?.type === 'footer' || rowNode?.type === 'pinnedRow') {\n      return false;\n    }\n    return true;\n  }, [apiRef, props.rowSelection, 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    if (disableRowSelectionOnClick) {\n      return;\n    }\n    const field = event.target.closest(`.${gridClasses.cell}`)?.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?.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) {\n      expandMouseRowRangeSelection(params.id);\n    } else {\n      handleSingleRowSelection(params.id, event);\n    }\n  }, [disableRowSelectionOnClick, canHaveMultipleSelection, apiRef, expandMouseRowRangeSelection, handleSingleRowSelection]);\n  const preventSelectionOnShift = React.useCallback((params, event) => {\n    if (canHaveMultipleSelection && event.shiftKey) {\n      window.getSelection()?.removeAllRanges();\n    }\n  }, [canHaveMultipleSelection]);\n  const handleRowSelectionCheckboxChange = React.useCallback((params, event) => {\n    if (canHaveMultipleSelection && event.nativeEvent.shiftKey) {\n      expandMouseRowRangeSelection(params.id);\n    } else {\n      apiRef.current.selectRow(params.id, params.value, !canHaveMultipleSelection);\n    }\n  }, [apiRef, expandMouseRowRangeSelection, canHaveMultipleSelection]);\n  const handleHeaderSelectionCheckboxChange = React.useCallback(params => {\n    const rowsToBeSelected = props.pagination && props.checkboxSelectionVisibleOnly && props.paginationMode === 'client' ? gridPaginatedVisibleSortedGridRowIdsSelector(apiRef) : gridExpandedSortedRowIdsSelector(apiRef);\n    const filterModel = gridFilterModelSelector(apiRef);\n    apiRef.current.selectRows(rowsToBeSelected, params.value, filterModel?.items.length > 0);\n  }, [apiRef, props.checkboxSelectionVisibleOnly, props.pagination, props.paginationMode]);\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 (isEventTargetInPortal(event)) {\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_useEnhancedEffect as useEnhancedEffect } from '@mui/utils';\nimport { useGridApiEventHandler } from \"../../utils/useGridApiEventHandler.js\";\nimport { useGridApiMethod } from \"../../utils/useGridApiMethod.js\";\nimport { useGridLogger } from \"../../utils/useGridLogger.js\";\nimport { gridColumnLookupSelector } from \"../columns/gridColumnsSelector.js\";\nimport { gridSortedRowEntriesSelector, gridSortedRowIdsSelector, gridSortModelSelector } from \"./gridSortingSelector.js\";\nimport { GRID_ROOT_GROUP_ID, gridRowTreeSelector } from \"../rows/index.js\";\nimport { useFirstRender } from \"../../utils/useFirstRender.js\";\nimport { useGridRegisterStrategyProcessor, GRID_DEFAULT_STRATEGY } from \"../../core/strategyProcessing/index.js\";\nimport { buildAggregatedSortingApplier, mergeStateWithSortModel, getNextGridSortDirection, sanitizeSortModel } from \"./gridSortingUtils.js\";\nimport { useGridRegisterPipeProcessor } from \"../../core/pipeProcessing/index.js\";\nimport { getTreeNodeDescendants } from \"../rows/gridRowsUtils.js\";\nexport const sortingStateInitializer = (state, props) => {\n  const sortModel = props.sortModel ?? props.initialState?.sorting?.sortModel ?? [];\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  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?.sort == null) {\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    const sortModel = gridSortModelSelector(apiRef);\n    const existing = sortModel.find(c => c.field === col.field);\n    if (existing) {\n      const nextSort = directionOverride === undefined ? getNextGridSortDirection(col.sortingOrder ?? props.sortingOrder, existing.sort) : directionOverride;\n      return nextSort === undefined ? undefined : _extends({}, existing, {\n        sort: nextSort\n      });\n    }\n    return {\n      field: col.field,\n      sort: directionOverride === undefined ? getNextGridSortDirection(col.sortingOrder ?? props.sortingOrder) : directionOverride\n    };\n  }, [apiRef, props.sortingOrder]);\n  const addColumnMenuItem = React.useCallback((columnMenuItems, colDef) => {\n    if (colDef == null || colDef.sortable === false || props.disableColumnSorting) {\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, props.disableColumnSorting]);\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((field, direction, allowMultipleSorting) => {\n    const column = apiRef.current.getColumn(field);\n    const sortItem = createSortItem(column, direction);\n    let sortModel;\n    if (!allowMultipleSorting || props.disableMultipleColumnsSorting) {\n      sortModel = sortItem?.sort == null ? [] : [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    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.initialState?.sorting?.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.initialState?.sorting?.sortModel]);\n  const stateRestorePreProcessing = React.useCallback((params, context) => {\n    const sortModel = context.stateToRestore.sorting?.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    field,\n    colDef\n  }, event) => {\n    if (!colDef.sortable || props.disableColumnSorting) {\n      return;\n    }\n    const allowMultipleSorting = event.shiftKey || event.metaKey || event.ctrlKey;\n    sortColumn(field, undefined, allowMultipleSorting);\n  }, [sortColumn, props.disableColumnSorting]);\n  const handleColumnHeaderKeyDown = React.useCallback(({\n    field,\n    colDef\n  }, event) => {\n    if (!colDef.sortable || props.disableColumnSorting) {\n      return;\n    }\n    // Ctrl + Enter opens the column menu\n    if (event.key === 'Enter' && !event.ctrlKey && !event.metaKey) {\n      sortColumn(field, undefined, event.shiftKey);\n    }\n  }, [sortColumn, props.disableColumnSorting]);\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 { useRtl } from '@mui/system/RtlProvider';\nimport { useGridLogger } from \"../../utils/useGridLogger.js\";\nimport { gridColumnPositionsSelector, gridVisibleColumnDefinitionsSelector } from \"../columns/gridColumnsSelector.js\";\nimport { useGridSelector } from \"../../utils/useGridSelector.js\";\nimport { gridPageSelector, gridPageSizeSelector } from \"../pagination/gridPaginationSelector.js\";\nimport { gridRowCountSelector } from \"../rows/gridRowsSelector.js\";\nimport { gridRowsMetaSelector } from \"../rows/gridRowsMetaSelector.js\";\nimport { useGridApiMethod } from \"../../utils/useGridApiMethod.js\";\nimport { gridExpandedSortedRowEntriesSelector } from \"../filter/gridFilterSelector.js\";\nimport { gridDimensionsSelector } from \"../dimensions/index.js\";\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 isRtl = useRtl();\n  const logger = useGridLogger(apiRef, 'useGridScroll');\n  const colRef = apiRef.current.columnHeadersContainerRef;\n  const virtualScrollerRef = apiRef.current.virtualScrollerRef;\n  const visibleSortedRows = useGridSelector(apiRef, gridExpandedSortedRowEntriesSelector);\n  const scrollToIndexes = React.useCallback(params => {\n    const dimensions = gridDimensionsSelector(apiRef.current.state);\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 !== undefined) {\n      const columnPositions = gridColumnPositionsSelector(apiRef);\n      let cellWidth;\n      if (typeof params.rowIndex !== 'undefined') {\n        const rowId = visibleSortedRows[params.rowIndex]?.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: dimensions.viewportInnerSize.width,\n        scrollTop: Math.abs(virtualScrollerRef.current.scrollLeft),\n        offsetHeight: cellWidth,\n        offsetTop: columnPositions[params.colIndex]\n      });\n    }\n    if (params.rowIndex !== undefined) {\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      scrollCoordinates.top = scrollIntoView({\n        clientHeight: dimensions.viewportInnerSize.height,\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 !== undefined && colRef.current) {\n      const direction = isRtl ? -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 !== undefined) {\n      virtualScrollerRef.current.scrollTop = params.top;\n      logger.debug(`Scrolling top: ${params.top}`);\n    }\n    logger.debug(`Scrolling, updating container, and viewport`);\n  }, [virtualScrollerRef, isRtl, colRef, logger]);\n  const getScrollPosition = React.useCallback(() => {\n    if (!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 _extends from \"@babel/runtime/helpers/esm/extends\";\nimport * as React from 'react';\nimport { unstable_ownerDocument as ownerDocument, unstable_useEnhancedEffect as useEnhancedEffect, unstable_useEventCallback as useEventCallback, unstable_ownerWindow as ownerWindow } from '@mui/utils';\nimport { throttle } from '@mui/x-internals/throttle';\nimport { useGridApiEventHandler, useGridApiOptionHandler } from \"../../utils/useGridApiEventHandler.js\";\nimport { useGridApiMethod } from \"../../utils/useGridApiMethod.js\";\nimport { useGridLogger } from \"../../utils/useGridLogger.js\";\nimport { gridColumnsTotalWidthSelector, gridVisiblePinnedColumnDefinitionsSelector } from \"../columns/index.js\";\nimport { gridDimensionsSelector } from \"./gridDimensionsSelectors.js\";\nimport { gridDensityFactorSelector } from \"../density/index.js\";\nimport { gridRenderContextSelector } from \"../virtualization/index.js\";\nimport { useGridSelector } from \"../../utils/index.js\";\nimport { getVisibleRows } from \"../../utils/useGridVisibleRows.js\";\nimport { gridRowsMetaSelector } from \"../rows/gridRowsMetaSelector.js\";\nimport { calculatePinnedRowsHeight } from \"../rows/gridRowsUtils.js\";\nimport { getTotalHeaderHeight } from \"../columns/gridColumnsUtils.js\";\nconst EMPTY_SIZE = {\n  width: 0,\n  height: 0\n};\nconst EMPTY_DIMENSIONS = {\n  isReady: false,\n  root: EMPTY_SIZE,\n  viewportOuterSize: EMPTY_SIZE,\n  viewportInnerSize: EMPTY_SIZE,\n  contentSize: EMPTY_SIZE,\n  minimumSize: EMPTY_SIZE,\n  hasScrollX: false,\n  hasScrollY: false,\n  scrollbarSize: 0,\n  headerHeight: 0,\n  groupHeaderHeight: 0,\n  headerFilterHeight: 0,\n  rowWidth: 0,\n  rowHeight: 0,\n  columnsTotalWidth: 0,\n  leftPinnedWidth: 0,\n  rightPinnedWidth: 0,\n  headersTotalHeight: 0,\n  topContainerHeight: 0,\n  bottomContainerHeight: 0\n};\nexport const dimensionsStateInitializer = state => {\n  const dimensions = EMPTY_DIMENSIONS;\n  return _extends({}, state, {\n    dimensions\n  });\n};\nexport function useGridDimensions(apiRef, props) {\n  const logger = useGridLogger(apiRef, 'useResizeContainer');\n  const errorShown = React.useRef(false);\n  const rootDimensionsRef = React.useRef(EMPTY_SIZE);\n  const dimensionsState = useGridSelector(apiRef, gridDimensionsSelector);\n  const rowsMeta = useGridSelector(apiRef, gridRowsMetaSelector);\n  const pinnedColumns = useGridSelector(apiRef, gridVisiblePinnedColumnDefinitionsSelector);\n  const densityFactor = useGridSelector(apiRef, gridDensityFactorSelector);\n  const rowHeight = Math.floor(props.rowHeight * densityFactor);\n  const headerHeight = Math.floor(props.columnHeaderHeight * densityFactor);\n  const groupHeaderHeight = Math.floor((props.columnGroupHeaderHeight ?? props.columnHeaderHeight) * densityFactor);\n  const headerFilterHeight = Math.floor((props.headerFilterHeight ?? props.columnHeaderHeight) * densityFactor);\n  const columnsTotalWidth = roundToDecimalPlaces(gridColumnsTotalWidthSelector(apiRef), 6);\n  const headersTotalHeight = getTotalHeaderHeight(apiRef, props);\n  const leftPinnedWidth = pinnedColumns.left.reduce((w, col) => w + col.computedWidth, 0);\n  const rightPinnedWidth = pinnedColumns.right.reduce((w, col) => w + col.computedWidth, 0);\n  const [savedSize, setSavedSize] = React.useState();\n  const debouncedSetSavedSize = React.useMemo(() => throttle(setSavedSize, props.resizeThrottleMs), [props.resizeThrottleMs]);\n  const previousSize = React.useRef();\n  const getRootDimensions = () => apiRef.current.state.dimensions;\n  const setDimensions = useEventCallback(dimensions => {\n    apiRef.current.setState(state => _extends({}, state, {\n      dimensions\n    }));\n  });\n  const resize = React.useCallback(() => {\n    const element = apiRef.current.mainElementRef.current;\n    if (!element) {\n      return;\n    }\n    const computedStyle = ownerWindow(element).getComputedStyle(element);\n    const newSize = {\n      width: parseFloat(computedStyle.width) || 0,\n      height: parseFloat(computedStyle.height) || 0\n    };\n    if (!previousSize.current || !areElementSizesEqual(previousSize.current, newSize)) {\n      apiRef.current.publishEvent('resize', newSize);\n      previousSize.current = newSize;\n    }\n  }, [apiRef]);\n  const getViewportPageSize = React.useCallback(() => {\n    const dimensions = gridDimensionsSelector(apiRef.current.state);\n    if (!dimensions.isReady) {\n      return 0;\n    }\n    const currentPage = getVisibleRows(apiRef, {\n      pagination: props.pagination,\n      paginationMode: props.paginationMode\n    });\n\n    // TODO: Use a combination of scrollTop, dimensions.viewportInnerSize.height and rowsMeta.possitions\n    // to find out the maximum number of rows that can fit in the visible part of the grid\n    if (props.getRowHeight) {\n      const renderContext = gridRenderContextSelector(apiRef);\n      const viewportPageSize = renderContext.lastRowIndex - renderContext.firstRowIndex;\n      return Math.min(viewportPageSize - 1, currentPage.rows.length);\n    }\n    const maximumPageSizeWithoutScrollBar = Math.floor(dimensions.viewportInnerSize.height / rowHeight);\n    return Math.min(maximumPageSizeWithoutScrollBar, currentPage.rows.length);\n  }, [apiRef, props.pagination, props.paginationMode, props.getRowHeight, rowHeight]);\n  const updateDimensions = React.useCallback(() => {\n    const rootElement = apiRef.current.rootElementRef.current;\n    const pinnedRowsHeight = calculatePinnedRowsHeight(apiRef);\n    const scrollbarSize = measureScrollbarSize(rootElement, columnsTotalWidth, props.scrollbarSize);\n    const topContainerHeight = headersTotalHeight + pinnedRowsHeight.top;\n    const bottomContainerHeight = pinnedRowsHeight.bottom;\n    const nonPinnedColumnsTotalWidth = columnsTotalWidth - leftPinnedWidth - rightPinnedWidth;\n    const contentSize = {\n      width: nonPinnedColumnsTotalWidth,\n      height: rowsMeta.currentPageTotalHeight\n    };\n    let viewportOuterSize;\n    let viewportInnerSize;\n    let hasScrollX = false;\n    let hasScrollY = false;\n    if (props.autoHeight) {\n      hasScrollY = false;\n      hasScrollX = Math.round(columnsTotalWidth) > Math.round(rootDimensionsRef.current.width);\n      viewportOuterSize = {\n        width: rootDimensionsRef.current.width,\n        height: topContainerHeight + bottomContainerHeight + contentSize.height\n      };\n      viewportInnerSize = {\n        width: Math.max(0, viewportOuterSize.width - (hasScrollY ? scrollbarSize : 0)),\n        height: Math.max(0, viewportOuterSize.height - (hasScrollX ? scrollbarSize : 0))\n      };\n    } else {\n      viewportOuterSize = {\n        width: rootDimensionsRef.current.width,\n        height: rootDimensionsRef.current.height\n      };\n      viewportInnerSize = {\n        width: Math.max(0, viewportOuterSize.width - leftPinnedWidth - rightPinnedWidth),\n        height: Math.max(0, viewportOuterSize.height - topContainerHeight - bottomContainerHeight)\n      };\n      const content = contentSize;\n      const container = viewportInnerSize;\n      const hasScrollXIfNoYScrollBar = content.width > container.width;\n      const hasScrollYIfNoXScrollBar = content.height > container.height;\n      if (hasScrollXIfNoYScrollBar || hasScrollYIfNoXScrollBar) {\n        hasScrollY = hasScrollYIfNoXScrollBar;\n        hasScrollX = content.width + (hasScrollY ? scrollbarSize : 0) > container.width;\n\n        // We recalculate the scroll y to consider the size of the x scrollbar.\n        if (hasScrollX) {\n          hasScrollY = content.height + scrollbarSize > container.height;\n        }\n      }\n      if (hasScrollY) {\n        viewportInnerSize.width -= scrollbarSize;\n      }\n      if (hasScrollX) {\n        viewportInnerSize.height -= scrollbarSize;\n      }\n    }\n    const rowWidth = Math.max(viewportOuterSize.width, columnsTotalWidth + (hasScrollY ? scrollbarSize : 0));\n    const minimumSize = {\n      width: columnsTotalWidth,\n      height: topContainerHeight + contentSize.height + bottomContainerHeight\n    };\n    const newDimensions = {\n      isReady: true,\n      root: rootDimensionsRef.current,\n      viewportOuterSize,\n      viewportInnerSize,\n      contentSize,\n      minimumSize,\n      hasScrollX,\n      hasScrollY,\n      scrollbarSize,\n      headerHeight,\n      groupHeaderHeight,\n      headerFilterHeight,\n      rowWidth,\n      rowHeight,\n      columnsTotalWidth,\n      leftPinnedWidth,\n      rightPinnedWidth,\n      headersTotalHeight,\n      topContainerHeight,\n      bottomContainerHeight\n    };\n    const prevDimensions = apiRef.current.state.dimensions;\n    setDimensions(newDimensions);\n    if (!areElementSizesEqual(newDimensions.viewportInnerSize, prevDimensions.viewportInnerSize)) {\n      apiRef.current.publishEvent('viewportInnerSizeChange', newDimensions.viewportInnerSize);\n    }\n    apiRef.current.updateRenderContext?.();\n  }, [apiRef, setDimensions, props.scrollbarSize, props.autoHeight, rowsMeta.currentPageTotalHeight, rowHeight, headerHeight, groupHeaderHeight, headerFilterHeight, columnsTotalWidth, headersTotalHeight, leftPinnedWidth, rightPinnedWidth]);\n  const apiPublic = {\n    resize,\n    getRootDimensions\n  };\n  const apiPrivate = {\n    updateDimensions,\n    getViewportPageSize\n  };\n  useGridApiMethod(apiRef, apiPublic, 'public');\n  useGridApiMethod(apiRef, apiPrivate, 'private');\n  useEnhancedEffect(() => {\n    if (savedSize) {\n      updateDimensions();\n      apiRef.current.publishEvent('debouncedResize', rootDimensionsRef.current);\n    }\n  }, [apiRef, savedSize, updateDimensions]);\n  const root = apiRef.current.rootElementRef.current;\n  useEnhancedEffect(() => {\n    if (!root) {\n      return;\n    }\n    const set = (k, v) => root.style.setProperty(k, v);\n    set('--DataGrid-width', `${dimensionsState.viewportOuterSize.width}px`);\n    set('--DataGrid-hasScrollX', `${Number(dimensionsState.hasScrollX)}`);\n    set('--DataGrid-hasScrollY', `${Number(dimensionsState.hasScrollY)}`);\n    set('--DataGrid-scrollbarSize', `${dimensionsState.scrollbarSize}px`);\n    set('--DataGrid-rowWidth', `${dimensionsState.rowWidth}px`);\n    set('--DataGrid-columnsTotalWidth', `${dimensionsState.columnsTotalWidth}px`);\n    set('--DataGrid-leftPinnedWidth', `${dimensionsState.leftPinnedWidth}px`);\n    set('--DataGrid-rightPinnedWidth', `${dimensionsState.rightPinnedWidth}px`);\n    set('--DataGrid-headerHeight', `${dimensionsState.headerHeight}px`);\n    set('--DataGrid-headersTotalHeight', `${dimensionsState.headersTotalHeight}px`);\n    set('--DataGrid-topContainerHeight', `${dimensionsState.topContainerHeight}px`);\n    set('--DataGrid-bottomContainerHeight', `${dimensionsState.bottomContainerHeight}px`);\n    set('--height', `${dimensionsState.rowHeight}px`);\n  }, [root, dimensionsState]);\n  const isFirstSizing = React.useRef(true);\n  const handleResize = React.useCallback(size => {\n    rootDimensionsRef.current = size;\n\n    // jsdom has no layout capabilities\n    const isJSDOM = /jsdom/.test(window.navigator.userAgent);\n    if (size.height === 0 && !errorShown.current && !props.autoHeight && !isJSDOM) {\n      logger.error(['The parent DOM element of the data grid has an empty height.', 'Please make sure that this element has an intrinsic height.', 'The grid displays with a height of 0px.', '', 'More details: https://mui.com/r/x-data-grid-no-dimensions.'].join('\\n'));\n      errorShown.current = true;\n    }\n    if (size.width === 0 && !errorShown.current && !isJSDOM) {\n      logger.error(['The parent DOM element of the data grid has an empty width.', 'Please make sure that this element has an intrinsic width.', 'The grid displays with a width of 0px.', '', 'More details: https://mui.com/r/x-data-grid-no-dimensions.'].join('\\n'));\n      errorShown.current = true;\n    }\n    if (isFirstSizing.current) {\n      // We want to initialize the grid dimensions as soon as possible to avoid flickering\n      setSavedSize(size);\n      isFirstSizing.current = false;\n      return;\n    }\n    debouncedSetSavedSize(size);\n  }, [props.autoHeight, debouncedSetSavedSize, logger]);\n  useEnhancedEffect(updateDimensions, [updateDimensions]);\n  useGridApiOptionHandler(apiRef, 'sortedRowsSet', updateDimensions);\n  useGridApiOptionHandler(apiRef, 'paginationModelChange', updateDimensions);\n  useGridApiOptionHandler(apiRef, 'columnsChange', updateDimensions);\n  useGridApiEventHandler(apiRef, 'resize', handleResize);\n  useGridApiOptionHandler(apiRef, 'debouncedResize', props.onResize);\n}\nfunction measureScrollbarSize(rootElement, columnsTotalWidth, scrollbarSize) {\n  if (scrollbarSize !== undefined) {\n    return scrollbarSize;\n  }\n  if (rootElement === null || columnsTotalWidth === 0) {\n    return 0;\n  }\n  const doc = ownerDocument(rootElement);\n  const scrollDiv = doc.createElement('div');\n  scrollDiv.style.width = '99px';\n  scrollDiv.style.height = '99px';\n  scrollDiv.style.position = 'absolute';\n  scrollDiv.style.overflow = 'scroll';\n  scrollDiv.className = 'scrollDiv';\n  rootElement.appendChild(scrollDiv);\n  const size = scrollDiv.offsetWidth - scrollDiv.clientWidth;\n  rootElement.removeChild(scrollDiv);\n  return size;\n}\n\n// Get rid of floating point imprecision errors\n// https://github.com/mui/mui-x/issues/9550#issuecomment-1619020477\nfunction roundToDecimalPlaces(value, decimals) {\n  return Math.round(value * 10 ** decimals) / 10 ** decimals;\n}\nfunction areElementSizesEqual(a, b) {\n  return a.width === b.width && a.height === b.height;\n}","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport * as React from 'react';\nimport { unstable_debounce as debounce } from '@mui/utils';\nimport { useGridVisibleRows } from \"../../utils/useGridVisibleRows.js\";\nimport { useGridApiMethod } from \"../../utils/useGridApiMethod.js\";\nimport { useGridSelector } from \"../../utils/useGridSelector.js\";\nimport { gridDensityFactorSelector } from \"../density/densitySelector.js\";\nimport { gridFilterModelSelector } from \"../filter/gridFilterSelector.js\";\nimport { gridPaginationSelector } from \"../pagination/gridPaginationSelector.js\";\nimport { gridSortModelSelector } from \"../sorting/gridSortingSelector.js\";\nimport { useGridRegisterPipeApplier } from \"../../core/pipeProcessing/index.js\";\nimport { gridPinnedRowsSelector } from \"./gridRowsSelector.js\";\nimport { DATA_GRID_PROPS_DEFAULT_VALUES } from \"../../../DataGrid/useDataGridProps.js\";\n\n// TODO: I think the row heights can now be encoded as a single `size` instead of `sizes.baseXxxx`\n\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 X: The \\`rowHeight\\` prop should be a number greater than 0.`, `The default value will be used instead.`].join('\\n');\nconst getRowHeightWarning = [`MUI X: 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    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      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 ?? 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        baseCenter: baseRowHeight\n      };\n      if (getRowSpacing) {\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 ?? 0;\n        initialHeights.spacingBottom = 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 otherSizes = 0;\n      const processedSizes = calculateRowProcessedSizes(row);\n      /* eslint-disable-next-line guard-for-in */\n      for (const key in processedSizes) {\n        const value = processedSizes[key];\n        if (key !== 'baseCenter') {\n          otherSizes += value;\n        }\n      }\n      return acc + processedSizes.baseCenter + otherSizes;\n    }, 0);\n    pinnedRows?.top?.forEach(row => {\n      calculateRowProcessedSizes(row);\n    });\n    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 => rowsHeightLookup.current[rowId]?.sizes;\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, props.rowPositionsDebounceMs), [hydrateRowsMeta, props.rowPositionsDebounceMs]);\n  const storeMeasuredRowHeight = React.useCallback((id, height) => {\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.baseCenter !== height;\n    rowsHeightLookup.current[id].needsFirstMeasurement = false;\n    rowsHeightLookup.current[id].sizes.baseCenter = height;\n    if (needsHydration) {\n      debouncedHydrateRowsMeta();\n    }\n  }, [debouncedHydrateRowsMeta]);\n  const rowHasAutoHeight = React.useCallback(id => {\n    return rowsHeightLookup.current[id]?.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 * as React from 'react';\nimport { useGridApiMethod } from \"../../utils/useGridApiMethod.js\";\nimport { useGridApiEventHandler } from \"../../utils/useGridApiEventHandler.js\";\n/**\n * @requires useGridColumns (method, event)\n * @requires useGridParamsApi (method)\n */\nexport const useGridColumnSpanning = apiRef => {\n  const lookup = React.useRef({});\n  const getCellColSpanInfo = (rowId, columnIndex) => {\n    return lookup.current[rowId]?.[columnIndex];\n  };\n  const resetColSpan = () => {\n    lookup.current = {};\n  };\n\n  // Calculate `colSpan` for each cell in the row\n  const calculateColSpan = React.useCallback(({\n    rowId,\n    minFirstColumn,\n    maxLastColumn,\n    columns\n  }) => {\n    for (let i = minFirstColumn; i < maxLastColumn; i += 1) {\n      const cellProps = calculateCellColSpan({\n        apiRef,\n        lookup: lookup.current,\n        columnIndex: i,\n        rowId,\n        minFirstColumnIndex: minFirstColumn,\n        maxLastColumnIndex: maxLastColumn,\n        columns\n      });\n      if (cellProps.colSpan > 1) {\n        i += cellProps.colSpan - 1;\n      }\n    }\n  }, [apiRef]);\n  const columnSpanningPublicApi = {\n    unstable_getCellColSpanInfo: getCellColSpanInfo\n  };\n  const columnSpanningPrivateApi = {\n    resetColSpan,\n    calculateColSpan\n  };\n  useGridApiMethod(apiRef, columnSpanningPublicApi, 'public');\n  useGridApiMethod(apiRef, columnSpanningPrivateApi, 'private');\n  useGridApiEventHandler(apiRef, 'columnOrderChange', resetColSpan);\n};\nfunction calculateCellColSpan(params) {\n  const {\n    apiRef,\n    lookup,\n    columnIndex,\n    rowId,\n    minFirstColumnIndex,\n    maxLastColumnIndex,\n    columns\n  } = params;\n  const columnsLength = columns.length;\n  const column = columns[columnIndex];\n  const row = apiRef.current.getRow(rowId);\n  const value = apiRef.current.getRowValue(row, column);\n  const colSpan = typeof column.colSpan === 'function' ? column.colSpan(value, row, column, apiRef) : column.colSpan;\n  if (!colSpan || colSpan === 1) {\n    setCellColSpanInfo(lookup, rowId, columnIndex, {\n      spannedByColSpan: false,\n      cellProps: {\n        colSpan: 1,\n        width: column.computedWidth\n      }\n    });\n    return {\n      colSpan: 1\n    };\n  }\n  let width = column.computedWidth;\n  for (let j = 1; j < colSpan; j += 1) {\n    const nextColumnIndex = columnIndex + j;\n    // Cells should be spanned only within their column section (left-pinned, right-pinned and unpinned).\n    if (nextColumnIndex >= minFirstColumnIndex && nextColumnIndex < maxLastColumnIndex) {\n      const nextColumn = columns[nextColumnIndex];\n      width += nextColumn.computedWidth;\n      setCellColSpanInfo(lookup, rowId, columnIndex + j, {\n        spannedByColSpan: true,\n        rightVisibleCellIndex: Math.min(columnIndex + colSpan, columnsLength - 1),\n        leftVisibleCellIndex: columnIndex\n      });\n    }\n    setCellColSpanInfo(lookup, rowId, columnIndex, {\n      spannedByColSpan: false,\n      cellProps: {\n        colSpan,\n        width\n      }\n    });\n  }\n  return {\n    colSpan\n  };\n}\nfunction setCellColSpanInfo(lookup, rowId, columnIndex, cellColSpanInfo) {\n  if (!lookup[rowId]) {\n    lookup[rowId] = {};\n  }\n  lookup[rowId][columnIndex] = cellColSpanInfo;\n}","import { isLeaf } from \"../../../models/gridColumnGrouping.js\";\nimport { isDeepEqual } from \"../../../utils/utils.js\";\n// This is the recurrence function that help writing `unwrapGroupingColumnModel()`\nconst recurrentUnwrapGroupingColumnModel = (columnGroupNode, parents, unwrappedGroupingModelToComplete) => {\n  if (isLeaf(columnGroupNode)) {\n    if (unwrappedGroupingModelToComplete[columnGroupNode.field] !== undefined) {\n      throw new Error([`MUI X: columnGroupingModel contains duplicated field`, `column field ${columnGroupNode.field} occurs two times in the grouping model:`, `- ${unwrappedGroupingModelToComplete[columnGroupNode.field].join(' > ')}`, `- ${parents.join(' > ')}`].join('\\n'));\n    }\n    unwrappedGroupingModelToComplete[columnGroupNode.field] = parents;\n    return;\n  }\n  const {\n    groupId,\n    children\n  } = columnGroupNode;\n  children.forEach(child => {\n    recurrentUnwrapGroupingColumnModel(child, [...parents, groupId], unwrappedGroupingModelToComplete);\n  });\n};\n\n/**\n * This is a function that provide for each column the array of its parents.\n * Parents are ordered from the root to the leaf.\n * @param columnGroupingModel The model such as provided in DataGrid props\n * @returns An object `{[field]: groupIds}` where `groupIds` is the parents of the column `field`\n */\nexport const unwrapGroupingColumnModel = columnGroupingModel => {\n  if (!columnGroupingModel) {\n    return {};\n  }\n  const unwrappedSubTree = {};\n  columnGroupingModel.forEach(columnGroupNode => {\n    recurrentUnwrapGroupingColumnModel(columnGroupNode, [], unwrappedSubTree);\n  });\n  return unwrappedSubTree;\n};\nexport const getColumnGroupsHeaderStructure = (orderedColumns, unwrappedGroupingModel, pinnedFields) => {\n  const getParents = field => unwrappedGroupingModel[field] ?? [];\n  const groupingHeaderStructure = [];\n  const maxDepth = Math.max(...orderedColumns.map(field => getParents(field).length));\n  const haveSameParents = (field1, field2, depth) => isDeepEqual(getParents(field1).slice(0, depth + 1), getParents(field2).slice(0, depth + 1));\n  const haveDifferentContainers = (field1, field2) => {\n    if (pinnedFields?.left && pinnedFields.left.includes(field1) && !pinnedFields.left.includes(field2)) {\n      return true;\n    }\n    if (pinnedFields?.right && !pinnedFields.right.includes(field1) && pinnedFields.right.includes(field2)) {\n      return true;\n    }\n    return false;\n  };\n  for (let depth = 0; depth < maxDepth; depth += 1) {\n    const depthStructure = orderedColumns.reduce((structure, newField) => {\n      const groupId = getParents(newField)[depth] ?? null;\n      if (structure.length === 0) {\n        return [{\n          columnFields: [newField],\n          groupId\n        }];\n      }\n      const lastGroup = structure[structure.length - 1];\n      const prevField = lastGroup.columnFields[lastGroup.columnFields.length - 1];\n      const prevGroupId = lastGroup.groupId;\n      if (prevGroupId !== groupId || !haveSameParents(prevField, newField, depth) ||\n      // Fix for https://github.com/mui/mui-x/issues/7041\n      haveDifferentContainers(prevField, newField)) {\n        // It's a new group\n        return [...structure, {\n          columnFields: [newField],\n          groupId\n        }];\n      }\n\n      // It extends the previous group\n      return [...structure.slice(0, structure.length - 1), {\n        columnFields: [...lastGroup.columnFields, newField],\n        groupId\n      }];\n    }, []);\n    groupingHeaderStructure.push(depthStructure);\n  }\n  return groupingHeaderStructure;\n};","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport _objectWithoutPropertiesLoose from \"@babel/runtime/helpers/esm/objectWithoutPropertiesLoose\";\nconst _excluded = [\"groupId\", \"children\"];\nimport * as React from 'react';\nimport { isLeaf } from \"../../../models/gridColumnGrouping.js\";\nimport { gridColumnGroupsLookupSelector, gridColumnGroupsUnwrappedModelSelector } from \"./gridColumnGroupsSelector.js\";\nimport { useGridApiMethod } from \"../../utils/useGridApiMethod.js\";\nimport { getColumnGroupsHeaderStructure, unwrapGroupingColumnModel } from \"./gridColumnGroupsUtils.js\";\nimport { useGridApiEventHandler } from \"../../utils/useGridApiEventHandler.js\";\nimport { gridColumnFieldsSelector, gridVisibleColumnFieldsSelector } from \"../columns/index.js\";\nconst createGroupLookup = columnGroupingModel => {\n  let groupLookup = {};\n  columnGroupingModel.forEach(node => {\n    if (isLeaf(node)) {\n      return;\n    }\n    const {\n        groupId,\n        children\n      } = node,\n      other = _objectWithoutPropertiesLoose(node, _excluded);\n    if (!groupId) {\n      throw new Error('MUI X: An element of the columnGroupingModel does not have either `field` or `groupId`.');\n    }\n    if (process.env.NODE_ENV !== 'production') {\n      if (!children) {\n        console.warn(`MUI X: group groupId=${groupId} has no children.`);\n      }\n    }\n    const groupParam = _extends({}, other, {\n      groupId\n    });\n    const subTreeLookup = createGroupLookup(children);\n    if (subTreeLookup[groupId] !== undefined || groupLookup[groupId] !== undefined) {\n      throw new Error(`MUI X: The groupId ${groupId} is used multiple times in the columnGroupingModel.`);\n    }\n    groupLookup = _extends({}, groupLookup, subTreeLookup, {\n      [groupId]: groupParam\n    });\n  });\n  return _extends({}, groupLookup);\n};\nexport const columnGroupsStateInitializer = (state, props, apiRef) => {\n  if (!props.columnGroupingModel) {\n    return state;\n  }\n  const columnFields = gridColumnFieldsSelector(apiRef);\n  const visibleColumnFields = gridVisibleColumnFieldsSelector(apiRef);\n  const groupLookup = createGroupLookup(props.columnGroupingModel ?? []);\n  const unwrappedGroupingModel = unwrapGroupingColumnModel(props.columnGroupingModel ?? []);\n  const columnGroupsHeaderStructure = getColumnGroupsHeaderStructure(columnFields, unwrappedGroupingModel, apiRef.current.state.pinnedColumns ?? {});\n  const maxDepth = visibleColumnFields.length === 0 ? 0 : Math.max(...visibleColumnFields.map(field => unwrappedGroupingModel[field]?.length ?? 0));\n  return _extends({}, state, {\n    columnGrouping: {\n      lookup: groupLookup,\n      unwrappedGroupingModel,\n      headerStructure: columnGroupsHeaderStructure,\n      maxDepth\n    }\n  });\n};\n\n/**\n * @requires useGridColumns (method, event)\n * @requires useGridParamsApi (method)\n */\nexport const useGridColumnGrouping = (apiRef, props) => {\n  /**\n   * API METHODS\n   */\n  const getColumnGroupPath = React.useCallback(field => {\n    const unwrappedGroupingModel = gridColumnGroupsUnwrappedModelSelector(apiRef);\n    return unwrappedGroupingModel[field] ?? [];\n  }, [apiRef]);\n  const getAllGroupDetails = React.useCallback(() => {\n    const columnGroupLookup = gridColumnGroupsLookupSelector(apiRef);\n    return columnGroupLookup;\n  }, [apiRef]);\n  const columnGroupingApi = {\n    getColumnGroupPath,\n    getAllGroupDetails\n  };\n  useGridApiMethod(apiRef, columnGroupingApi, 'public');\n  const handleColumnIndexChange = React.useCallback(() => {\n    const unwrappedGroupingModel = unwrapGroupingColumnModel(props.columnGroupingModel ?? []);\n    apiRef.current.setState(state => {\n      const orderedFields = state.columns?.orderedFields ?? [];\n      const pinnedColumns = state.pinnedColumns ?? {};\n      const columnGroupsHeaderStructure = getColumnGroupsHeaderStructure(orderedFields, unwrappedGroupingModel, pinnedColumns);\n      return _extends({}, state, {\n        columnGrouping: _extends({}, state.columnGrouping, {\n          headerStructure: columnGroupsHeaderStructure\n        })\n      });\n    });\n  }, [apiRef, props.columnGroupingModel]);\n  const updateColumnGroupingState = React.useCallback(columnGroupingModel => {\n    // @ts-expect-error Move this logic to `Pro` package\n    const pinnedColumns = apiRef.current.getPinnedColumns?.() ?? {};\n    const columnFields = gridColumnFieldsSelector(apiRef);\n    const visibleColumnFields = gridVisibleColumnFieldsSelector(apiRef);\n    const groupLookup = createGroupLookup(columnGroupingModel ?? []);\n    const unwrappedGroupingModel = unwrapGroupingColumnModel(columnGroupingModel ?? []);\n    const columnGroupsHeaderStructure = getColumnGroupsHeaderStructure(columnFields, unwrappedGroupingModel, pinnedColumns);\n    const maxDepth = visibleColumnFields.length === 0 ? 0 : Math.max(...visibleColumnFields.map(field => unwrappedGroupingModel[field]?.length ?? 0));\n    apiRef.current.setState(state => {\n      return _extends({}, state, {\n        columnGrouping: {\n          lookup: groupLookup,\n          unwrappedGroupingModel,\n          headerStructure: columnGroupsHeaderStructure,\n          maxDepth\n        }\n      });\n    });\n  }, [apiRef]);\n  useGridApiEventHandler(apiRef, 'columnIndexChange', handleColumnIndexChange);\n  useGridApiEventHandler(apiRef, 'columnsChange', () => {\n    updateColumnGroupingState(props.columnGroupingModel);\n  });\n  useGridApiEventHandler(apiRef, 'columnVisibilityModelChange', () => {\n    updateColumnGroupingState(props.columnGroupingModel);\n  });\n\n  /**\n   * EFFECTS\n   */\n  React.useEffect(() => {\n    updateColumnGroupingState(props.columnGroupingModel);\n  }, [updateColumnGroupingState, props.columnGroupingModel]);\n};","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport * as React from 'react';\nimport { unstable_ownerDocument as ownerDocument, unstable_useEventCallback as useEventCallback } from '@mui/utils';\nimport useLazyRef from '@mui/utils/useLazyRef';\nimport { useRtl } from '@mui/system/RtlProvider';\nimport { findGridCellElementsFromCol, findGridElement, findLeftPinnedCellsAfterCol, findRightPinnedCellsBeforeCol, getFieldFromHeaderElem, findHeaderElementFromField, getFieldsFromGroupHeaderElem, findGroupHeaderElementsFromField, findGridHeader, findGridCells, findParentElementFromClassName, findLeftPinnedHeadersAfterCol, findRightPinnedHeadersBeforeCol, escapeOperandAttributeSelector } from \"../../../utils/domUtils.js\";\nimport { DEFAULT_GRID_AUTOSIZE_OPTIONS } from \"./gridColumnResizeApi.js\";\nimport { gridClasses } from \"../../../constants/gridClasses.js\";\nimport { useGridApiEventHandler, useGridApiMethod, useGridApiOptionHandler, useGridLogger, useGridNativeEventListener, useGridSelector, useOnMount } from \"../../utils/index.js\";\nimport { gridVirtualizationColumnEnabledSelector } from \"../virtualization/index.js\";\nimport { createControllablePromise } from \"../../../utils/createControllablePromise.js\";\nimport { clamp } from \"../../../utils/utils.js\";\nimport { useTimeout } from \"../../utils/useTimeout.js\";\nimport { GridPinnedColumnPosition } from \"../columns/gridColumnsInterfaces.js\";\nimport { gridColumnsStateSelector } from \"../columns/index.js\";\nfunction trackFinger(event, currentTouchId) {\n  if (currentTouchId !== undefined && event.changedTouches) {\n    for (let i = 0; i < event.changedTouches.length; i += 1) {\n      const touch = event.changedTouches[i];\n      if (touch.identifier === currentTouchId) {\n        return {\n          x: touch.clientX,\n          y: touch.clientY\n        };\n      }\n    }\n    return false;\n  }\n  return {\n    x: event.clientX,\n    y: event.clientY\n  };\n}\nfunction computeNewWidth(initialOffsetToSeparator, clickX, columnBounds, resizeDirection) {\n  let newWidth = initialOffsetToSeparator;\n  if (resizeDirection === 'Right') {\n    newWidth += clickX - columnBounds.left;\n  } else {\n    newWidth += columnBounds.right - clickX;\n  }\n  return newWidth;\n}\nfunction computeOffsetToSeparator(clickX, columnBounds, resizeDirection) {\n  if (resizeDirection === 'Left') {\n    return clickX - columnBounds.left;\n  }\n  return columnBounds.right - clickX;\n}\nfunction flipResizeDirection(side) {\n  if (side === 'Right') {\n    return 'Left';\n  }\n  return 'Right';\n}\nfunction getResizeDirection(separator, isRtl) {\n  const side = separator.classList.contains(gridClasses['columnSeparator--sideRight']) ? 'Right' : 'Left';\n  if (isRtl) {\n    // Resizing logic should be mirrored in the RTL case\n    return flipResizeDirection(side);\n  }\n  return side;\n}\nfunction preventClick(event) {\n  event.preventDefault();\n  event.stopImmediatePropagation();\n}\n\n/**\n * Checker that returns a promise that resolves when the column virtualization\n * is disabled.\n */\nfunction useColumnVirtualizationDisabled(apiRef) {\n  const promise = React.useRef();\n  const selector = () => gridVirtualizationColumnEnabledSelector(apiRef);\n  const value = useGridSelector(apiRef, selector);\n  React.useEffect(() => {\n    if (promise.current && value === false) {\n      promise.current.resolve();\n      promise.current = undefined;\n    }\n  });\n  const asyncCheck = () => {\n    if (!promise.current) {\n      if (selector() === false) {\n        return Promise.resolve();\n      }\n      promise.current = createControllablePromise();\n    }\n    return promise.current;\n  };\n  return asyncCheck;\n}\n\n/**\n * Basic statistical outlier detection, checks if the value is `F * IQR` away from\n * the Q1 and Q3 boundaries. IQR: interquartile range.\n */\nfunction excludeOutliers(inputValues, factor) {\n  if (inputValues.length < 4) {\n    return inputValues;\n  }\n  const values = inputValues.slice();\n  values.sort((a, b) => a - b);\n  const q1 = values[Math.floor(values.length * 0.25)];\n  const q3 = values[Math.floor(values.length * 0.75) - 1];\n  const iqr = q3 - q1;\n\n  // We make a small adjustment if `iqr < 5` for the cases where the IQR is\n  // very small (for example zero) due to very close by values in the input data.\n  // Otherwise, with an IQR of `0`, anything outside that would be considered\n  // an outlier, but it makes more sense visually to allow for this 5px variance\n  // rather than showing a cropped cell.\n  const deviation = iqr < 5 ? 5 : iqr * factor;\n  return values.filter(v => v > q1 - deviation && v < q3 + deviation);\n}\nfunction extractColumnWidths(apiRef, options, columns) {\n  const widthByField = {};\n  const root = apiRef.current.rootElementRef.current;\n  root.classList.add(gridClasses.autosizing);\n  columns.forEach(column => {\n    const cells = findGridCells(apiRef.current, column.field);\n    const widths = cells.map(cell => {\n      return cell.getBoundingClientRect().width ?? 0;\n    });\n    const filteredWidths = options.includeOutliers ? widths : excludeOutliers(widths, options.outliersFactor);\n    if (options.includeHeaders) {\n      const header = findGridHeader(apiRef.current, column.field);\n      if (header) {\n        const title = header.querySelector(`.${gridClasses.columnHeaderTitle}`);\n        const content = header.querySelector(`.${gridClasses.columnHeaderTitleContainerContent}`);\n        const iconContainer = header.querySelector(`.${gridClasses.iconButtonContainer}`);\n        const menuContainer = header.querySelector(`.${gridClasses.menuIcon}`);\n        const element = title ?? content;\n        const style = window.getComputedStyle(header, null);\n        const paddingWidth = parseInt(style.paddingLeft, 10) + parseInt(style.paddingRight, 10);\n        const contentWidth = element.scrollWidth + 1;\n        const width = contentWidth + paddingWidth + (iconContainer?.clientWidth ?? 0) + (menuContainer?.clientWidth ?? 0);\n        filteredWidths.push(width);\n      }\n    }\n    const hasColumnMin = column.minWidth !== -Infinity && column.minWidth !== undefined;\n    const hasColumnMax = column.maxWidth !== Infinity && column.maxWidth !== undefined;\n    const min = hasColumnMin ? column.minWidth : 0;\n    const max = hasColumnMax ? column.maxWidth : Infinity;\n    const maxContent = filteredWidths.length === 0 ? 0 : Math.max(...filteredWidths);\n    widthByField[column.field] = clamp(maxContent, min, max);\n  });\n  root.classList.remove(gridClasses.autosizing);\n  return widthByField;\n}\nexport const columnResizeStateInitializer = state => _extends({}, state, {\n  columnResize: {\n    resizingColumnField: ''\n  }\n});\nfunction createResizeRefs() {\n  return {\n    colDef: undefined,\n    initialColWidth: 0,\n    initialTotalWidth: 0,\n    previousMouseClickEvent: undefined,\n    columnHeaderElement: undefined,\n    headerFilterElement: undefined,\n    groupHeaderElements: [],\n    cellElements: [],\n    leftPinnedCellsAfter: [],\n    rightPinnedCellsBefore: [],\n    fillerLeft: undefined,\n    fillerRight: undefined,\n    leftPinnedHeadersAfter: [],\n    rightPinnedHeadersBefore: []\n  };\n}\n\n/**\n * @requires useGridColumns (method, event)\n * TODO: improve experience for last column\n */\nexport const useGridColumnResize = (apiRef, props) => {\n  const isRtl = useRtl();\n  const logger = useGridLogger(apiRef, 'useGridColumnResize');\n  const refs = useLazyRef(createResizeRefs).current;\n\n  // To improve accessibility, the separator has padding on both sides.\n  // Clicking inside the padding area should be treated as a click in the separator.\n  // This ref stores the offset between the click and the separator.\n  const initialOffsetToSeparator = React.useRef();\n  const resizeDirection = React.useRef();\n  const stopResizeEventTimeout = useTimeout();\n  const touchId = React.useRef();\n  const updateWidth = newWidth => {\n    logger.debug(`Updating width to ${newWidth} for col ${refs.colDef.field}`);\n    const prevWidth = refs.columnHeaderElement.offsetWidth;\n    const widthDiff = newWidth - prevWidth;\n    const columnWidthDiff = newWidth - refs.initialColWidth;\n    const newTotalWidth = refs.initialTotalWidth + columnWidthDiff;\n    apiRef.current.rootElementRef?.current?.style.setProperty('--DataGrid-rowWidth', `${newTotalWidth}px`);\n    refs.colDef.computedWidth = newWidth;\n    refs.colDef.width = newWidth;\n    refs.colDef.flex = 0;\n    refs.columnHeaderElement.style.width = `${newWidth}px`;\n    const headerFilterElement = refs.headerFilterElement;\n    if (headerFilterElement) {\n      headerFilterElement.style.width = `${newWidth}px`;\n    }\n    refs.groupHeaderElements.forEach(element => {\n      const div = element;\n      let finalWidth;\n      if (div.getAttribute('aria-colspan') === '1') {\n        finalWidth = `${newWidth}px`;\n      } else {\n        // Cell with colspan > 1 cannot be just updated width new width.\n        // Instead, we add width diff to the current width.\n        finalWidth = `${div.offsetWidth + widthDiff}px`;\n      }\n      div.style.width = finalWidth;\n    });\n    refs.cellElements.forEach(element => {\n      const div = element;\n      let finalWidth;\n      if (div.getAttribute('aria-colspan') === '1') {\n        finalWidth = `${newWidth}px`;\n      } else {\n        // Cell with colspan > 1 cannot be just updated width new width.\n        // Instead, we add width diff to the current width.\n        finalWidth = `${div.offsetWidth + widthDiff}px`;\n      }\n      div.style.setProperty('--width', finalWidth);\n    });\n    const pinnedPosition = apiRef.current.unstable_applyPipeProcessors('isColumnPinned', false, refs.colDef.field);\n    if (pinnedPosition === GridPinnedColumnPosition.LEFT) {\n      updateProperty(refs.fillerLeft, 'width', widthDiff);\n      refs.leftPinnedCellsAfter.forEach(cell => {\n        updateProperty(cell, 'left', widthDiff);\n      });\n      refs.leftPinnedHeadersAfter.forEach(header => {\n        updateProperty(header, 'left', widthDiff);\n      });\n    }\n    if (pinnedPosition === GridPinnedColumnPosition.RIGHT) {\n      updateProperty(refs.fillerRight, 'width', widthDiff);\n      refs.rightPinnedCellsBefore.forEach(cell => {\n        updateProperty(cell, 'right', widthDiff);\n      });\n      refs.rightPinnedHeadersBefore.forEach(header => {\n        updateProperty(header, 'right', widthDiff);\n      });\n    }\n  };\n  const finishResize = nativeEvent => {\n    // eslint-disable-next-line @typescript-eslint/no-use-before-define\n    stopListening();\n\n    // Prevent double-clicks from being interpreted as two separate clicks\n    if (refs.previousMouseClickEvent) {\n      const prevEvent = refs.previousMouseClickEvent;\n      const prevTimeStamp = prevEvent.timeStamp;\n      const prevClientX = prevEvent.clientX;\n      const prevClientY = prevEvent.clientY;\n\n      // Check if the current event is part of a double-click\n      if (nativeEvent.timeStamp - prevTimeStamp < 300 && nativeEvent.clientX === prevClientX && nativeEvent.clientY === prevClientY) {\n        refs.previousMouseClickEvent = undefined;\n        apiRef.current.publishEvent('columnResizeStop', null, nativeEvent);\n        return;\n      }\n    }\n    if (refs.colDef) {\n      apiRef.current.setColumnWidth(refs.colDef.field, refs.colDef.width);\n      logger.debug(`Updating col ${refs.colDef.field} with new width: ${refs.colDef.width}`);\n\n      // Since during resizing we update the columns width outside of React, React is unable to\n      // reapply the right style properties. We need to sync the state manually.\n      // So we reapply the same logic as in https://github.com/mui/mui-x/blob/0511bf65543ca05d2602a5a3e0a6156f2fc8e759/packages/x-data-grid/src/hooks/features/columnHeaders/useGridColumnHeaders.tsx#L405\n      const columnsState = gridColumnsStateSelector(apiRef.current.state);\n      refs.groupHeaderElements.forEach(element => {\n        const fields = getFieldsFromGroupHeaderElem(element);\n        const div = element;\n        const newWidth = fields.reduce((acc, field) => {\n          if (columnsState.columnVisibilityModel[field] !== false) {\n            return acc + columnsState.lookup[field].computedWidth;\n          }\n          return acc;\n        }, 0);\n        const finalWidth = `${newWidth}px`;\n        div.style.width = finalWidth;\n      });\n    }\n    stopResizeEventTimeout.start(0, () => {\n      apiRef.current.publishEvent('columnResizeStop', null, nativeEvent);\n    });\n  };\n  const storeReferences = (colDef, separator, xStart) => {\n    const root = apiRef.current.rootElementRef.current;\n    refs.initialColWidth = colDef.computedWidth;\n    refs.initialTotalWidth = apiRef.current.getRootDimensions().rowWidth;\n    refs.colDef = colDef;\n    refs.columnHeaderElement = findHeaderElementFromField(apiRef.current.columnHeadersContainerRef.current, colDef.field);\n    const headerFilterElement = root.querySelector(`.${gridClasses.headerFilterRow} [data-field=\"${escapeOperandAttributeSelector(colDef.field)}\"]`);\n    if (headerFilterElement) {\n      refs.headerFilterElement = headerFilterElement;\n    }\n    refs.groupHeaderElements = findGroupHeaderElementsFromField(apiRef.current.columnHeadersContainerRef?.current, colDef.field);\n    refs.cellElements = findGridCellElementsFromCol(refs.columnHeaderElement, apiRef.current);\n    refs.fillerLeft = findGridElement(apiRef.current, isRtl ? 'filler--pinnedRight' : 'filler--pinnedLeft');\n    refs.fillerRight = findGridElement(apiRef.current, isRtl ? 'filler--pinnedLeft' : 'filler--pinnedRight');\n    const pinnedPosition = apiRef.current.unstable_applyPipeProcessors('isColumnPinned', false, refs.colDef.field);\n    refs.leftPinnedCellsAfter = pinnedPosition !== GridPinnedColumnPosition.LEFT ? [] : findLeftPinnedCellsAfterCol(apiRef.current, refs.columnHeaderElement, isRtl);\n    refs.rightPinnedCellsBefore = pinnedPosition !== GridPinnedColumnPosition.RIGHT ? [] : findRightPinnedCellsBeforeCol(apiRef.current, refs.columnHeaderElement, isRtl);\n    refs.leftPinnedHeadersAfter = pinnedPosition !== GridPinnedColumnPosition.LEFT ? [] : findLeftPinnedHeadersAfterCol(apiRef.current, refs.columnHeaderElement, isRtl);\n    refs.rightPinnedHeadersBefore = pinnedPosition !== GridPinnedColumnPosition.RIGHT ? [] : findRightPinnedHeadersBeforeCol(apiRef.current, refs.columnHeaderElement, isRtl);\n    resizeDirection.current = getResizeDirection(separator, isRtl);\n    initialOffsetToSeparator.current = computeOffsetToSeparator(xStart, refs.columnHeaderElement.getBoundingClientRect(), resizeDirection.current);\n  };\n  const handleResizeMouseUp = useEventCallback(finishResize);\n  const handleResizeMouseMove = useEventCallback(nativeEvent => {\n    // Cancel move in case some other element consumed a mouseup event and it was not fired.\n    if (nativeEvent.buttons === 0) {\n      handleResizeMouseUp(nativeEvent);\n      return;\n    }\n    let newWidth = computeNewWidth(initialOffsetToSeparator.current, nativeEvent.clientX, refs.columnHeaderElement.getBoundingClientRect(), resizeDirection.current);\n    newWidth = clamp(newWidth, refs.colDef.minWidth, refs.colDef.maxWidth);\n    updateWidth(newWidth);\n    const params = {\n      element: refs.columnHeaderElement,\n      colDef: refs.colDef,\n      width: newWidth\n    };\n    apiRef.current.publishEvent('columnResize', params, nativeEvent);\n  });\n  const handleTouchEnd = useEventCallback(nativeEvent => {\n    const finger = trackFinger(nativeEvent, touchId.current);\n    if (!finger) {\n      return;\n    }\n    finishResize(nativeEvent);\n  });\n  const handleTouchMove = useEventCallback(nativeEvent => {\n    const finger = trackFinger(nativeEvent, touchId.current);\n    if (!finger) {\n      return;\n    }\n\n    // Cancel move in case some other element consumed a touchmove event and it was not fired.\n    if (nativeEvent.type === 'mousemove' && nativeEvent.buttons === 0) {\n      handleTouchEnd(nativeEvent);\n      return;\n    }\n    let newWidth = computeNewWidth(initialOffsetToSeparator.current, finger.x, refs.columnHeaderElement.getBoundingClientRect(), resizeDirection.current);\n    newWidth = clamp(newWidth, refs.colDef.minWidth, refs.colDef.maxWidth);\n    updateWidth(newWidth);\n    const params = {\n      element: refs.columnHeaderElement,\n      colDef: refs.colDef,\n      width: newWidth\n    };\n    apiRef.current.publishEvent('columnResize', params, nativeEvent);\n  });\n  const handleTouchStart = useEventCallback(event => {\n    const cellSeparator = findParentElementFromClassName(event.target, gridClasses['columnSeparator--resizable']);\n    // Let the event bubble if the target is not a col separator\n    if (!cellSeparator) {\n      return;\n    }\n    const touch = event.changedTouches[0];\n    if (touch != null) {\n      // A number that uniquely identifies the current finger in the touch session.\n      touchId.current = touch.identifier;\n    }\n    const columnHeaderElement = findParentElementFromClassName(event.target, gridClasses.columnHeader);\n    const field = getFieldFromHeaderElem(columnHeaderElement);\n    const colDef = apiRef.current.getColumn(field);\n    logger.debug(`Start Resize on col ${colDef.field}`);\n    apiRef.current.publishEvent('columnResizeStart', {\n      field\n    }, event);\n    storeReferences(colDef, cellSeparator, touch.clientX);\n    const doc = ownerDocument(event.currentTarget);\n    doc.addEventListener('touchmove', handleTouchMove);\n    doc.addEventListener('touchend', handleTouchEnd);\n  });\n  const stopListening = React.useCallback(() => {\n    const doc = ownerDocument(apiRef.current.rootElementRef.current);\n    doc.body.style.removeProperty('cursor');\n    doc.removeEventListener('mousemove', handleResizeMouseMove);\n    doc.removeEventListener('mouseup', handleResizeMouseUp);\n    doc.removeEventListener('touchmove', handleTouchMove);\n    doc.removeEventListener('touchend', handleTouchEnd);\n    // The click event runs right after the mouseup event, we want to wait until it\n    // has been canceled before removing our handler.\n    setTimeout(() => {\n      doc.removeEventListener('click', preventClick, true);\n    }, 100);\n    if (refs.columnHeaderElement) {\n      refs.columnHeaderElement.style.pointerEvents = 'unset';\n    }\n  }, [apiRef, refs, handleResizeMouseMove, handleResizeMouseUp, handleTouchMove, handleTouchEnd]);\n  const handleResizeStart = React.useCallback(({\n    field\n  }) => {\n    apiRef.current.setState(state => _extends({}, state, {\n      columnResize: _extends({}, state.columnResize, {\n        resizingColumnField: field\n      })\n    }));\n    apiRef.current.forceUpdate();\n  }, [apiRef]);\n  const handleResizeStop = React.useCallback(() => {\n    apiRef.current.setState(state => _extends({}, state, {\n      columnResize: _extends({}, state.columnResize, {\n        resizingColumnField: ''\n      })\n    }));\n    apiRef.current.forceUpdate();\n  }, [apiRef]);\n  const handleColumnResizeMouseDown = useEventCallback(({\n    colDef\n  }, event) => {\n    // Only handle left clicks\n    if (event.button !== 0) {\n      return;\n    }\n\n    // Skip if the column isn't resizable\n    if (!event.currentTarget.classList.contains(gridClasses['columnSeparator--resizable'])) {\n      return;\n    }\n\n    // Avoid text selection\n    event.preventDefault();\n    logger.debug(`Start Resize on col ${colDef.field}`);\n    apiRef.current.publishEvent('columnResizeStart', {\n      field: colDef.field\n    }, event);\n    storeReferences(colDef, event.currentTarget, event.clientX);\n    const doc = ownerDocument(apiRef.current.rootElementRef.current);\n    doc.body.style.cursor = 'col-resize';\n    refs.previousMouseClickEvent = event.nativeEvent;\n    doc.addEventListener('mousemove', handleResizeMouseMove);\n    doc.addEventListener('mouseup', handleResizeMouseUp);\n\n    // Prevent the click event if we have resized the column.\n    // Fixes https://github.com/mui/mui-x/issues/4777\n    doc.addEventListener('click', preventClick, true);\n  });\n  const handleColumnSeparatorDoubleClick = useEventCallback((params, event) => {\n    if (props.disableAutosize) {\n      return;\n    }\n\n    // Only handle left clicks\n    if (event.button !== 0) {\n      return;\n    }\n    const column = apiRef.current.state.columns.lookup[params.field];\n    if (column.resizable === false) {\n      return;\n    }\n    apiRef.current.autosizeColumns(_extends({}, props.autosizeOptions, {\n      columns: [column.field]\n    }));\n  });\n\n  /**\n   * API METHODS\n   */\n\n  const columnVirtualizationDisabled = useColumnVirtualizationDisabled(apiRef);\n  const isAutosizingRef = React.useRef(false);\n  const autosizeColumns = React.useCallback(async userOptions => {\n    const root = apiRef.current.rootElementRef?.current;\n    if (!root) {\n      return;\n    }\n    if (isAutosizingRef.current) {\n      return;\n    }\n    isAutosizingRef.current = true;\n    const state = gridColumnsStateSelector(apiRef.current.state);\n    const options = _extends({}, DEFAULT_GRID_AUTOSIZE_OPTIONS, userOptions, {\n      columns: userOptions?.columns ?? state.orderedFields\n    });\n    options.columns = options.columns.filter(c => state.columnVisibilityModel[c] !== false);\n    const columns = options.columns.map(c => apiRef.current.state.columns.lookup[c]);\n    try {\n      apiRef.current.unstable_setColumnVirtualization(false);\n      await columnVirtualizationDisabled();\n      const widthByField = extractColumnWidths(apiRef, options, columns);\n      const newColumns = columns.map(column => _extends({}, column, {\n        width: widthByField[column.field],\n        computedWidth: widthByField[column.field]\n      }));\n      if (options.expand) {\n        const visibleColumns = state.orderedFields.map(field => state.lookup[field]).filter(c => state.columnVisibilityModel[c.field] !== false);\n        const totalWidth = visibleColumns.reduce((total, column) => total + (widthByField[column.field] ?? column.computedWidth ?? column.width), 0);\n        const availableWidth = apiRef.current.getRootDimensions().viewportInnerSize.width;\n        const remainingWidth = availableWidth - totalWidth;\n        if (remainingWidth > 0) {\n          const widthPerColumn = remainingWidth / (newColumns.length || 1);\n          newColumns.forEach(column => {\n            column.width += widthPerColumn;\n            column.computedWidth += widthPerColumn;\n          });\n        }\n      }\n      apiRef.current.updateColumns(newColumns);\n      newColumns.forEach((newColumn, index) => {\n        if (newColumn.width !== columns[index].width) {\n          const width = newColumn.width;\n          apiRef.current.publishEvent('columnWidthChange', {\n            element: apiRef.current.getColumnHeaderElement(newColumn.field),\n            colDef: newColumn,\n            width\n          });\n        }\n      });\n    } finally {\n      apiRef.current.unstable_setColumnVirtualization(true);\n      isAutosizingRef.current = false;\n    }\n  }, [apiRef, columnVirtualizationDisabled]);\n\n  /**\n   * EFFECTS\n   */\n\n  React.useEffect(() => stopListening, [stopListening]);\n  useOnMount(() => {\n    if (props.autosizeOnMount) {\n      Promise.resolve().then(() => {\n        apiRef.current.autosizeColumns(props.autosizeOptions);\n      });\n    }\n  });\n  useGridNativeEventListener(apiRef, () => apiRef.current.columnHeadersContainerRef?.current, 'touchstart', handleTouchStart, {\n    passive: true\n  });\n  useGridApiMethod(apiRef, {\n    autosizeColumns\n  }, 'public');\n  useGridApiEventHandler(apiRef, 'columnResizeStop', handleResizeStop);\n  useGridApiEventHandler(apiRef, 'columnResizeStart', handleResizeStart);\n  useGridApiEventHandler(apiRef, 'columnSeparatorMouseDown', handleColumnResizeMouseDown);\n  useGridApiEventHandler(apiRef, 'columnSeparatorDoubleClick', handleColumnSeparatorDoubleClick);\n  useGridApiOptionHandler(apiRef, 'columnResize', props.onColumnResize);\n  useGridApiOptionHandler(apiRef, 'columnWidthChange', props.onColumnWidthChange);\n};\nfunction updateProperty(element, property, delta) {\n  if (!element) {\n    return;\n  }\n  element.style[property] = `${parseInt(element.style[property], 10) + delta}px`;\n}","export function createControllablePromise() {\n  let resolve;\n  let reject;\n  const promise = new Promise((_resolve, _reject) => {\n    resolve = _resolve;\n    reject = _reject;\n  });\n  promise.resolve = resolve;\n  promise.reject = reject;\n  return promise;\n}","export function getUnprocessedRange(testRange, processedRange) {\n  if (testRange.firstRowIndex >= processedRange.firstRowIndex && testRange.lastRowIndex <= processedRange.lastRowIndex) {\n    return null;\n  }\n  // Overflowing at the end\n  // Example: testRange={ firstRowIndex: 10, lastRowIndex: 20 }, processedRange={ firstRowIndex: 0, lastRowIndex: 15 }\n  // Unprocessed Range={ firstRowIndex: 16, lastRowIndex: 20 }\n  if (testRange.firstRowIndex >= processedRange.firstRowIndex && testRange.lastRowIndex > processedRange.lastRowIndex) {\n    return {\n      firstRowIndex: processedRange.lastRowIndex,\n      lastRowIndex: testRange.lastRowIndex\n    };\n  }\n  // Overflowing at the beginning\n  // Example: testRange={ firstRowIndex: 0, lastRowIndex: 20 }, processedRange={ firstRowIndex: 16, lastRowIndex: 30 }\n  // Unprocessed Range={ firstRowIndex: 0, lastRowIndex: 15 }\n  if (testRange.firstRowIndex < processedRange.firstRowIndex && testRange.lastRowIndex <= processedRange.lastRowIndex) {\n    return {\n      firstRowIndex: testRange.firstRowIndex,\n      lastRowIndex: processedRange.firstRowIndex - 1\n    };\n  }\n  // TODO: Should return two ranges handle overflowing at both ends ?\n  return testRange;\n}\nexport function isRowContextInitialized(renderContext) {\n  return renderContext.firstRowIndex !== 0 || renderContext.lastRowIndex !== 0;\n}\nexport function isRowRangeUpdated(range1, range2) {\n  return range1.firstRowIndex !== range2.firstRowIndex || range1.lastRowIndex !== range2.lastRowIndex;\n}\nexport const getCellValue = (row, colDef, apiRef) => {\n  if (!row) {\n    return null;\n  }\n  let cellValue = row[colDef.field];\n  const valueGetter = colDef.rowSpanValueGetter ?? colDef.valueGetter;\n  if (valueGetter) {\n    cellValue = valueGetter(cellValue, row, colDef, apiRef);\n  }\n  return cellValue;\n};","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport * as React from 'react';\nimport useLazyRef from '@mui/utils/useLazyRef';\nimport { gridVisibleColumnDefinitionsSelector } from \"../columns/gridColumnsSelector.js\";\nimport { useGridVisibleRows } from \"../../utils/useGridVisibleRows.js\";\nimport { gridRenderContextSelector } from \"../virtualization/gridVirtualizationSelectors.js\";\nimport { useGridSelector } from \"../../utils/useGridSelector.js\";\nimport { getUnprocessedRange, isRowRangeUpdated, isRowContextInitialized, getCellValue } from \"./gridRowSpanningUtils.js\";\nconst EMPTY_STATE = {\n  spannedCells: {},\n  hiddenCells: {},\n  hiddenCellOriginMap: {}\n};\nconst EMPTY_RANGE = {\n  firstRowIndex: 0,\n  lastRowIndex: 0\n};\nconst skippedFields = new Set(['__check__', '__reorder__', '__detail_panel_toggle__']);\n/**\n * Default number of rows to process during state initialization to avoid flickering.\n * Number `20` is arbitrarily chosen to be large enough to cover most of the cases without\n * compromising performance.\n */\nconst DEFAULT_ROWS_TO_PROCESS = 20;\nconst computeRowSpanningState = (apiRef, colDefs, visibleRows, range, rangeToProcess, resetState, processedRange) => {\n  const spannedCells = resetState ? {} : _extends({}, apiRef.current.state.rowSpanning.spannedCells);\n  const hiddenCells = resetState ? {} : _extends({}, apiRef.current.state.rowSpanning.hiddenCells);\n  const hiddenCellOriginMap = resetState ? {} : _extends({}, apiRef.current.state.rowSpanning.hiddenCellOriginMap);\n  if (resetState) {\n    processedRange = EMPTY_RANGE;\n  }\n  colDefs.forEach(colDef => {\n    if (skippedFields.has(colDef.field)) {\n      return;\n    }\n    for (let index = rangeToProcess.firstRowIndex; index <= rangeToProcess.lastRowIndex; index += 1) {\n      const row = visibleRows[index];\n      if (hiddenCells[row.id]?.[colDef.field]) {\n        continue;\n      }\n      const cellValue = getCellValue(row.model, colDef, apiRef);\n      if (cellValue == null) {\n        continue;\n      }\n      let spannedRowId = row.id;\n      let spannedRowIndex = index;\n      let rowSpan = 0;\n\n      // For first index, also scan in the previous rows to handle the reset state case e.g by sorting\n      const backwardsHiddenCells = [];\n      if (index === rangeToProcess.firstRowIndex) {\n        let prevIndex = index - 1;\n        const prevRowEntry = visibleRows[prevIndex];\n        while (prevIndex >= range.firstRowIndex && getCellValue(prevRowEntry.model, colDef, apiRef) === cellValue) {\n          const currentRow = visibleRows[prevIndex + 1];\n          if (hiddenCells[currentRow.id]) {\n            hiddenCells[currentRow.id][colDef.field] = true;\n          } else {\n            hiddenCells[currentRow.id] = {\n              [colDef.field]: true\n            };\n          }\n          backwardsHiddenCells.push(index);\n          rowSpan += 1;\n          spannedRowId = prevRowEntry.id;\n          spannedRowIndex = prevIndex;\n          prevIndex -= 1;\n        }\n      }\n      backwardsHiddenCells.forEach(hiddenCellIndex => {\n        if (hiddenCellOriginMap[hiddenCellIndex]) {\n          hiddenCellOriginMap[hiddenCellIndex][colDef.field] = spannedRowIndex;\n        } else {\n          hiddenCellOriginMap[hiddenCellIndex] = {\n            [colDef.field]: spannedRowIndex\n          };\n        }\n      });\n\n      // Scan the next rows\n      let relativeIndex = index + 1;\n      while (relativeIndex <= range.lastRowIndex && visibleRows[relativeIndex] && getCellValue(visibleRows[relativeIndex].model, colDef, apiRef) === cellValue) {\n        const currentRow = visibleRows[relativeIndex];\n        if (hiddenCells[currentRow.id]) {\n          hiddenCells[currentRow.id][colDef.field] = true;\n        } else {\n          hiddenCells[currentRow.id] = {\n            [colDef.field]: true\n          };\n        }\n        if (hiddenCellOriginMap[relativeIndex]) {\n          hiddenCellOriginMap[relativeIndex][colDef.field] = spannedRowIndex;\n        } else {\n          hiddenCellOriginMap[relativeIndex] = {\n            [colDef.field]: spannedRowIndex\n          };\n        }\n        relativeIndex += 1;\n        rowSpan += 1;\n      }\n      if (rowSpan > 0) {\n        if (spannedCells[spannedRowId]) {\n          spannedCells[spannedRowId][colDef.field] = rowSpan + 1;\n        } else {\n          spannedCells[spannedRowId] = {\n            [colDef.field]: rowSpan + 1\n          };\n        }\n      }\n    }\n    processedRange = {\n      firstRowIndex: Math.min(processedRange.firstRowIndex, rangeToProcess.firstRowIndex),\n      lastRowIndex: Math.max(processedRange.lastRowIndex, rangeToProcess.lastRowIndex)\n    };\n  });\n  return {\n    spannedCells,\n    hiddenCells,\n    hiddenCellOriginMap,\n    processedRange\n  };\n};\n\n/**\n * @requires columnsStateInitializer (method) - should be initialized before\n * @requires rowsStateInitializer (method) - should be initialized before\n * @requires filterStateInitializer (method) - should be initialized before\n */\nexport const rowSpanningStateInitializer = (state, props, apiRef) => {\n  if (props.unstable_rowSpanning) {\n    const rowIds = state.rows.dataRowIds || [];\n    const orderedFields = state.columns.orderedFields || [];\n    const dataRowIdToModelLookup = state.rows.dataRowIdToModelLookup;\n    const columnsLookup = state.columns.lookup;\n    const isFilteringPending = Boolean(state.filter.filterModel.items.length) || Boolean(state.filter.filterModel.quickFilterValues?.length);\n    if (!rowIds.length || !orderedFields.length || !dataRowIdToModelLookup || !columnsLookup || isFilteringPending) {\n      return _extends({}, state, {\n        rowSpanning: EMPTY_STATE\n      });\n    }\n    const rangeToProcess = {\n      firstRowIndex: 0,\n      lastRowIndex: Math.min(DEFAULT_ROWS_TO_PROCESS - 1, Math.max(rowIds.length - 1, 0))\n    };\n    const rows = rowIds.map(id => ({\n      id,\n      model: dataRowIdToModelLookup[id]\n    }));\n    const colDefs = orderedFields.map(field => columnsLookup[field]);\n    const {\n      spannedCells,\n      hiddenCells,\n      hiddenCellOriginMap\n    } = computeRowSpanningState(apiRef, colDefs, rows, rangeToProcess, rangeToProcess, true, EMPTY_RANGE);\n    return _extends({}, state, {\n      rowSpanning: {\n        spannedCells,\n        hiddenCells,\n        hiddenCellOriginMap\n      }\n    });\n  }\n  return _extends({}, state, {\n    rowSpanning: EMPTY_STATE\n  });\n};\nexport const useGridRowSpanning = (apiRef, props) => {\n  const {\n    range,\n    rows: visibleRows\n  } = useGridVisibleRows(apiRef, props);\n  const renderContext = useGridSelector(apiRef, gridRenderContextSelector);\n  const colDefs = useGridSelector(apiRef, gridVisibleColumnDefinitionsSelector);\n  const processedRange = useLazyRef(() => {\n    return Object.keys(apiRef.current.state.rowSpanning.spannedCells).length > 0 ? {\n      firstRowIndex: 0,\n      lastRowIndex: Math.min(DEFAULT_ROWS_TO_PROCESS - 1, Math.max(apiRef.current.state.rows.dataRowIds.length - 1, 0))\n    } : EMPTY_RANGE;\n  });\n  const lastRange = React.useRef(EMPTY_RANGE);\n  const updateRowSpanningState = React.useCallback(\n  // A reset needs to occur when:\n  // - The `unstable_rowSpanning` prop is updated (feature flag)\n  // - The filtering is applied\n  // - The sorting is applied\n  // - The `paginationModel` is updated\n  // - The rows are updated\n  (resetState = true) => {\n    if (!props.unstable_rowSpanning) {\n      if (apiRef.current.state.rowSpanning !== EMPTY_STATE) {\n        apiRef.current.setState(state => _extends({}, state, {\n          rowSpanning: EMPTY_STATE\n        }));\n      }\n      return;\n    }\n    if (range === null || !isRowContextInitialized(renderContext)) {\n      return;\n    }\n    if (resetState) {\n      processedRange.current = EMPTY_RANGE;\n    }\n    const rangeToProcess = getUnprocessedRange({\n      firstRowIndex: renderContext.firstRowIndex,\n      lastRowIndex: renderContext.lastRowIndex - 1\n    }, processedRange.current);\n    if (rangeToProcess === null) {\n      return;\n    }\n    const {\n      spannedCells,\n      hiddenCells,\n      hiddenCellOriginMap,\n      processedRange: newProcessedRange\n    } = computeRowSpanningState(apiRef, colDefs, visibleRows, range, rangeToProcess, resetState, processedRange.current);\n    processedRange.current = newProcessedRange;\n    const newSpannedCellsCount = Object.keys(spannedCells).length;\n    const newHiddenCellsCount = Object.keys(hiddenCells).length;\n    const currentSpannedCellsCount = Object.keys(apiRef.current.state.rowSpanning.spannedCells).length;\n    const currentHiddenCellsCount = Object.keys(apiRef.current.state.rowSpanning.hiddenCells).length;\n    const shouldUpdateState = resetState || newSpannedCellsCount !== currentSpannedCellsCount || newHiddenCellsCount !== currentHiddenCellsCount;\n    if (!shouldUpdateState) {\n      return;\n    }\n    apiRef.current.setState(state => {\n      return _extends({}, state, {\n        rowSpanning: {\n          spannedCells,\n          hiddenCells,\n          hiddenCellOriginMap\n        }\n      });\n    });\n  }, [apiRef, props.unstable_rowSpanning, range, renderContext, visibleRows, colDefs, processedRange]);\n  const prevRenderContext = React.useRef(renderContext);\n  const isFirstRender = React.useRef(true);\n  const shouldResetState = React.useRef(false);\n  React.useEffect(() => {\n    const firstRender = isFirstRender.current;\n    if (isFirstRender.current) {\n      isFirstRender.current = false;\n    }\n    if (range && lastRange.current && isRowRangeUpdated(range, lastRange.current)) {\n      lastRange.current = range;\n      shouldResetState.current = true;\n    }\n    if (!firstRender && prevRenderContext.current !== renderContext) {\n      if (isRowRangeUpdated(prevRenderContext.current, renderContext)) {\n        updateRowSpanningState(shouldResetState.current);\n        shouldResetState.current = false;\n      }\n      prevRenderContext.current = renderContext;\n      return;\n    }\n    updateRowSpanningState();\n  }, [updateRowSpanningState, renderContext, range, lastRange]);\n};","import { useGridInitialization } from \"../hooks/core/useGridInitialization.js\";\nimport { useGridInitializeState } from \"../hooks/utils/useGridInitializeState.js\";\nimport { useGridClipboard } from \"../hooks/features/clipboard/useGridClipboard.js\";\nimport { columnMenuStateInitializer, useGridColumnMenu } from \"../hooks/features/columnMenu/useGridColumnMenu.js\";\nimport { useGridColumns, columnsStateInitializer } from \"../hooks/features/columns/useGridColumns.js\";\nimport { densityStateInitializer, useGridDensity } from \"../hooks/features/density/useGridDensity.js\";\nimport { useGridCsvExport } from \"../hooks/features/export/useGridCsvExport.js\";\nimport { useGridPrintExport } from \"../hooks/features/export/useGridPrintExport.js\";\nimport { useGridFilter, filterStateInitializer } from \"../hooks/features/filter/useGridFilter.js\";\nimport { focusStateInitializer, useGridFocus } from \"../hooks/features/focus/useGridFocus.js\";\nimport { useGridKeyboardNavigation } from \"../hooks/features/keyboardNavigation/useGridKeyboardNavigation.js\";\nimport { useGridPagination, paginationStateInitializer } from \"../hooks/features/pagination/useGridPagination.js\";\nimport { useGridPreferencesPanel, preferencePanelStateInitializer } from \"../hooks/features/preferencesPanel/useGridPreferencesPanel.js\";\nimport { useGridEditing, editingStateInitializer } from \"../hooks/features/editing/useGridEditing.js\";\nimport { useGridRows, rowsStateInitializer } from \"../hooks/features/rows/useGridRows.js\";\nimport { useGridRowsPreProcessors } from \"../hooks/features/rows/useGridRowsPreProcessors.js\";\nimport { useGridParamsApi } from \"../hooks/features/rows/useGridParamsApi.js\";\nimport { rowSelectionStateInitializer, useGridRowSelection } from \"../hooks/features/rowSelection/useGridRowSelection.js\";\nimport { useGridRowSelectionPreProcessors } from \"../hooks/features/rowSelection/useGridRowSelectionPreProcessors.js\";\nimport { useGridSorting, sortingStateInitializer } from \"../hooks/features/sorting/useGridSorting.js\";\nimport { useGridScroll } from \"../hooks/features/scroll/useGridScroll.js\";\nimport { useGridEvents } from \"../hooks/features/events/useGridEvents.js\";\nimport { dimensionsStateInitializer, useGridDimensions } from \"../hooks/features/dimensions/useGridDimensions.js\";\nimport { rowsMetaStateInitializer, useGridRowsMeta } from \"../hooks/features/rows/useGridRowsMeta.js\";\nimport { useGridStatePersistence } from \"../hooks/features/statePersistence/useGridStatePersistence.js\";\nimport { useGridColumnSpanning } from \"../hooks/features/columns/useGridColumnSpanning.js\";\nimport { useGridColumnGrouping, columnGroupsStateInitializer } from \"../hooks/features/columnGrouping/useGridColumnGrouping.js\";\nimport { useGridVirtualization, virtualizationStateInitializer } from \"../hooks/features/virtualization/index.js\";\nimport { columnResizeStateInitializer, useGridColumnResize } from \"../hooks/features/columnResize/useGridColumnResize.js\";\nimport { rowSpanningStateInitializer, useGridRowSpanning } from \"../hooks/features/rows/useGridRowSpanning.js\";\nexport const useDataGridComponent = (inputApiRef, props) => {\n  const apiRef = useGridInitialization(inputApiRef, props);\n\n  /**\n   * Register all pre-processors called during state initialization here.\n   */\n  useGridRowSelectionPreProcessors(apiRef, props);\n  useGridRowsPreProcessors(apiRef);\n\n  /**\n   * Register all state initializers here.\n   */\n  useGridInitializeState(dimensionsStateInitializer, apiRef, props);\n  useGridInitializeState(rowSelectionStateInitializer, apiRef, props);\n  useGridInitializeState(columnsStateInitializer, apiRef, props);\n  useGridInitializeState(rowsStateInitializer, apiRef, props);\n  useGridInitializeState(editingStateInitializer, apiRef, props);\n  useGridInitializeState(focusStateInitializer, apiRef, props);\n  useGridInitializeState(sortingStateInitializer, apiRef, props);\n  useGridInitializeState(preferencePanelStateInitializer, apiRef, props);\n  useGridInitializeState(filterStateInitializer, apiRef, props);\n  useGridInitializeState(rowSpanningStateInitializer, apiRef, props);\n  useGridInitializeState(densityStateInitializer, apiRef, props);\n  useGridInitializeState(columnResizeStateInitializer, apiRef, props);\n  useGridInitializeState(paginationStateInitializer, apiRef, props);\n  useGridInitializeState(rowsMetaStateInitializer, apiRef, props);\n  useGridInitializeState(columnMenuStateInitializer, apiRef, props);\n  useGridInitializeState(columnGroupsStateInitializer, apiRef, props);\n  useGridInitializeState(virtualizationStateInitializer, apiRef, props);\n  useGridKeyboardNavigation(apiRef, props);\n  useGridRowSelection(apiRef, props);\n  useGridColumns(apiRef, props);\n  useGridRows(apiRef, props);\n  useGridRowSpanning(apiRef, props);\n  useGridParamsApi(apiRef);\n  useGridColumnSpanning(apiRef);\n  useGridColumnGrouping(apiRef, props);\n  useGridEditing(apiRef, props);\n  useGridFocus(apiRef, props);\n  useGridPreferencesPanel(apiRef, props);\n  useGridFilter(apiRef, props);\n  useGridSorting(apiRef, props);\n  useGridDensity(apiRef, props);\n  useGridColumnResize(apiRef, props);\n  useGridPagination(apiRef, props);\n  useGridRowsMeta(apiRef, props);\n  useGridScroll(apiRef, props);\n  useGridColumnMenu(apiRef);\n  useGridCsvExport(apiRef, props);\n  useGridPrintExport(apiRef, props);\n  useGridClipboard(apiRef, props);\n  useGridDimensions(apiRef, props);\n  useGridEvents(apiRef, props);\n  useGridStatePersistence(apiRef);\n  useGridVirtualization(apiRef, props);\n  return apiRef;\n};","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport * as React from 'react';\nimport composeClasses from '@mui/utils/composeClasses';\nimport { useGridRegisterPipeProcessor } from \"../../core/pipeProcessing/index.js\";\nimport { getDataGridUtilityClass } from \"../../../constants/index.js\";\nimport { GRID_CHECKBOX_SELECTION_COL_DEF, GRID_CHECKBOX_SELECTION_FIELD } from \"../../../colDef/index.js\";\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};","import * as React from 'react';\nimport { useRtl } from '@mui/system/RtlProvider';\nimport { gridVisibleColumnDefinitionsSelector, gridVisibleColumnFieldsSelector } from \"../columns/gridColumnsSelector.js\";\nimport { useGridLogger } from \"../../utils/useGridLogger.js\";\nimport { useGridApiEventHandler } from \"../../utils/useGridApiEventHandler.js\";\nimport { gridExpandedSortedRowEntriesSelector } from \"../filter/gridFilterSelector.js\";\nimport { useGridVisibleRows } from \"../../utils/useGridVisibleRows.js\";\nimport { GRID_CHECKBOX_SELECTION_COL_DEF } from \"../../../colDef/gridCheckboxSelectionColDef.js\";\nimport { gridClasses } from \"../../../constants/gridClasses.js\";\nimport { GridCellModes } from \"../../../models/gridEditRowModel.js\";\nimport { isNavigationKey } from \"../../../utils/keyboardUtils.js\";\nimport { GRID_DETAIL_PANEL_TOGGLE_FIELD } from \"../../../constants/gridDetailPanelToggleField.js\";\nimport { gridFocusColumnGroupHeaderSelector } from \"../focus/index.js\";\nimport { gridColumnGroupsHeaderMaxDepthSelector } from \"../columnGrouping/gridColumnGroupsSelector.js\";\nimport { gridHeaderFilteringEditFieldSelector, gridHeaderFilteringMenuSelector } from \"../headerFiltering/gridHeaderFilteringSelectors.js\";\nimport { useGridRegisterPipeProcessor } from \"../../core/pipeProcessing/index.js\";\nimport { isEventTargetInPortal } from \"../../../utils/domUtils.js\";\nimport { enrichPageRowsWithPinnedRows, getLeftColumnIndex, getRightColumnIndex, findNonRowSpannedCell } from \"./utils.js\";\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 isRtl = useRtl();\n  const currentPageRows = React.useMemo(() => enrichPageRowsWithPinnedRows(apiRef, initialCurrentPageRows), [apiRef, initialCurrentPageRows]);\n  const headerFilteringEnabled = props.signature !== 'DataGrid' && props.headerFilters;\n\n  /**\n   * @param {number} colIndex Index of the column to focus\n   * @param {GridRowId} rowId index of the row to focus\n   * @param {string} closestColumnToUse Which closest column cell to use when the cell is spanned by `colSpan`.\n   * @param {string} rowSpanScanDirection Which direction to search to find the next cell not hidden by `rowSpan`.\n   * TODO replace with apiRef.current.moveFocusToRelativeCell()\n   */\n  const goToCell = React.useCallback((colIndex, rowId, closestColumnToUse = 'left', rowSpanScanDirection = 'up') => {\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    const field = gridVisibleColumnFieldsSelector(apiRef)[colIndex];\n    const nonRowSpannedRowId = findNonRowSpannedCell(apiRef, rowId, field, rowSpanScanDirection);\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 === nonRowSpannedRowId);\n    logger.debug(`Navigating to cell row ${rowIndexRelativeToAllRows}, col ${colIndex}`);\n    apiRef.current.scrollToIndexes({\n      colIndex,\n      rowIndex: rowIndexRelativeToAllRows\n    });\n    apiRef.current.setCellFocus(nonRowSpannedRowId, 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[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 viewportPageSize = apiRef.current.getViewportPageSize();\n    const colIndexBefore = params.field ? apiRef.current.getColumnIndex(params.field) : 0;\n    const firstRowIndexInPage = currentPageRows.length > 0 ? 0 : null;\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            isRtl\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            isRtl\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, isRtl, goToHeader, goToGroupHeader]);\n  const handleHeaderFilterKeyDown = React.useCallback((params, event) => {\n    const isEditing = gridHeaderFilteringEditFieldSelector(apiRef) === params.field;\n    const isHeaderMenuOpen = 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            isRtl\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            isRtl\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, isRtl, goToHeader, goToCell, getRowIdFromIndex]);\n  const handleColumnGroupHeaderKeyDown = React.useCallback((params, event) => {\n    const focusedColumnGroup = 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 (isEventTargetInPortal(event)) {\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    if (currentPageRows.length === 0) {\n      return;\n    }\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), isRtl ? 'right' : 'left', 'down');\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            isRtl\n          });\n          if (rightColIndex !== null) {\n            goToCell(rightColIndex, getRowIdFromIndex(rowIndexBefore), isRtl ? 'left' : 'right');\n          }\n          break;\n        }\n      case 'ArrowLeft':\n        {\n          const leftColIndex = getLeftColumnIndex({\n            currentColIndex: colIndexBefore,\n            firstColIndex,\n            lastColIndex,\n            isRtl\n          });\n          if (leftColIndex !== null) {\n            goToCell(leftColIndex, getRowIdFromIndex(rowIndexBefore), isRtl ? '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 &&\n          // `GRID_TREE_DATA_GROUPING_FIELD` from the Pro package\n          colDef.field === '__tree_data_group__') {\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, isRtl, 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 _extends from \"@babel/runtime/helpers/esm/extends\";\nimport * as React from 'react';\nimport { useGridLogger, useGridSelector, useGridApiMethod } from \"../../utils/index.js\";\nimport { useGridRegisterPipeProcessor } from \"../../core/pipeProcessing/index.js\";\nimport { gridPaginationMetaSelector } from \"./gridPaginationSelector.js\";\nexport const useGridPaginationMeta = (apiRef, props) => {\n  const logger = useGridLogger(apiRef, 'useGridPaginationMeta');\n  const paginationMeta = useGridSelector(apiRef, gridPaginationMetaSelector);\n  apiRef.current.registerControlState({\n    stateId: 'paginationMeta',\n    propModel: props.paginationMeta,\n    propOnChange: props.onPaginationMetaChange,\n    stateSelector: gridPaginationMetaSelector,\n    changeEvent: 'paginationMetaChange'\n  });\n\n  /**\n   * API METHODS\n   */\n  const setPaginationMeta = React.useCallback(newPaginationMeta => {\n    if (paginationMeta === newPaginationMeta) {\n      return;\n    }\n    logger.debug(\"Setting 'paginationMeta' to\", newPaginationMeta);\n    apiRef.current.setState(state => _extends({}, state, {\n      pagination: _extends({}, state.pagination, {\n        meta: newPaginationMeta\n      })\n    }));\n  }, [apiRef, logger, paginationMeta]);\n  const paginationMetaApi = {\n    setPaginationMeta\n  };\n  useGridApiMethod(apiRef, paginationMetaApi, 'public');\n\n  /**\n   * PRE-PROCESSING\n   */\n  const stateExportPreProcessing = React.useCallback((prevState, context) => {\n    const exportedPaginationMeta = gridPaginationMetaSelector(apiRef);\n    const shouldExportRowCount =\n    // Always export if the `exportOnlyDirtyModels` property is not activated\n    !context.exportOnlyDirtyModels ||\n    // Always export if the `paginationMeta` is controlled\n    props.paginationMeta != null ||\n    // Always export if the `paginationMeta` has been initialized\n    props.initialState?.pagination?.meta != null;\n    if (!shouldExportRowCount) {\n      return prevState;\n    }\n    return _extends({}, prevState, {\n      pagination: _extends({}, prevState.pagination, {\n        meta: exportedPaginationMeta\n      })\n    });\n  }, [apiRef, props.paginationMeta, props.initialState?.pagination?.meta]);\n  const stateRestorePreProcessing = React.useCallback((params, context) => {\n    const restoredPaginationMeta = context.stateToRestore.pagination?.meta ? context.stateToRestore.pagination.meta : gridPaginationMetaSelector(apiRef);\n    apiRef.current.setState(state => _extends({}, state, {\n      pagination: _extends({}, state.pagination, {\n        meta: restoredPaginationMeta\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    if (props.paginationMeta) {\n      apiRef.current.setPaginationMeta(props.paginationMeta);\n    }\n  }, [apiRef, props.paginationMeta]);\n};","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport * as React from 'react';\nimport useLazyRef from '@mui/utils/useLazyRef';\nimport { gridFilteredTopLevelRowCountSelector } from \"../filter/index.js\";\nimport { useGridLogger, useGridSelector, useGridApiMethod, useGridApiEventHandler } from \"../../utils/index.js\";\nimport { useGridRegisterPipeProcessor } from \"../../core/pipeProcessing/index.js\";\nimport { gridPaginationRowCountSelector, gridPaginationMetaSelector, gridPaginationModelSelector } from \"./gridPaginationSelector.js\";\nexport const useGridRowCount = (apiRef, props) => {\n  const logger = useGridLogger(apiRef, 'useGridRowCount');\n  const visibleTopLevelRowCount = useGridSelector(apiRef, gridFilteredTopLevelRowCountSelector);\n  const rowCountState = useGridSelector(apiRef, gridPaginationRowCountSelector);\n  const paginationMeta = useGridSelector(apiRef, gridPaginationMetaSelector);\n  const paginationModel = useGridSelector(apiRef, gridPaginationModelSelector);\n  const previousPageSize = useLazyRef(() => gridPaginationModelSelector(apiRef).pageSize);\n  apiRef.current.registerControlState({\n    stateId: 'paginationRowCount',\n    propModel: props.rowCount,\n    propOnChange: props.onRowCountChange,\n    stateSelector: gridPaginationRowCountSelector,\n    changeEvent: 'rowCountChange'\n  });\n\n  /**\n   * API METHODS\n   */\n  const setRowCount = React.useCallback(newRowCount => {\n    if (rowCountState === newRowCount) {\n      return;\n    }\n    logger.debug(\"Setting 'rowCount' to\", newRowCount);\n    apiRef.current.setState(state => _extends({}, state, {\n      pagination: _extends({}, state.pagination, {\n        rowCount: newRowCount\n      })\n    }));\n  }, [apiRef, logger, rowCountState]);\n  const paginationRowCountApi = {\n    setRowCount\n  };\n  useGridApiMethod(apiRef, paginationRowCountApi, 'public');\n\n  /**\n   * PRE-PROCESSING\n   */\n  const stateExportPreProcessing = React.useCallback((prevState, context) => {\n    const exportedRowCount = gridPaginationRowCountSelector(apiRef);\n    const shouldExportRowCount =\n    // Always export if the `exportOnlyDirtyModels` property is not activated\n    !context.exportOnlyDirtyModels ||\n    // Always export if the `rowCount` is controlled\n    props.rowCount != null ||\n    // Always export if the `rowCount` has been initialized\n    props.initialState?.pagination?.rowCount != null;\n    if (!shouldExportRowCount) {\n      return prevState;\n    }\n    return _extends({}, prevState, {\n      pagination: _extends({}, prevState.pagination, {\n        rowCount: exportedRowCount\n      })\n    });\n  }, [apiRef, props.rowCount, props.initialState?.pagination?.rowCount]);\n  const stateRestorePreProcessing = React.useCallback((params, context) => {\n    const restoredRowCount = context.stateToRestore.pagination?.rowCount ? context.stateToRestore.pagination.rowCount : gridPaginationRowCountSelector(apiRef);\n    apiRef.current.setState(state => _extends({}, state, {\n      pagination: _extends({}, state.pagination, {\n        rowCount: restoredRowCount\n      })\n    }));\n    return params;\n  }, [apiRef]);\n  useGridRegisterPipeProcessor(apiRef, 'exportState', stateExportPreProcessing);\n  useGridRegisterPipeProcessor(apiRef, 'restoreState', stateRestorePreProcessing);\n\n  /**\n   * EVENTS\n   */\n  const handlePaginationModelChange = React.useCallback(model => {\n    if (props.paginationMode === 'client' || !previousPageSize.current) {\n      return;\n    }\n    if (model.pageSize !== previousPageSize.current) {\n      previousPageSize.current = model.pageSize;\n      if (rowCountState === -1) {\n        // Row count unknown and page size changed, reset the page\n        apiRef.current.setPage(0);\n      }\n    }\n  }, [props.paginationMode, previousPageSize, rowCountState, apiRef]);\n  useGridApiEventHandler(apiRef, 'paginationModelChange', handlePaginationModelChange);\n\n  /**\n   * EFFECTS\n   */\n  React.useEffect(() => {\n    if (props.paginationMode === 'client') {\n      apiRef.current.setRowCount(visibleTopLevelRowCount);\n    } else if (props.rowCount != null) {\n      apiRef.current.setRowCount(props.rowCount);\n    }\n  }, [apiRef, props.paginationMode, visibleTopLevelRowCount, props.rowCount]);\n  const isLastPage = paginationMeta.hasNextPage === false;\n  React.useEffect(() => {\n    if (isLastPage && rowCountState === -1) {\n      apiRef.current.setRowCount(paginationModel.pageSize * paginationModel.page + visibleTopLevelRowCount);\n    }\n  }, [apiRef, visibleTopLevelRowCount, isLastPage, rowCountState, paginationModel]);\n};","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport * as React from 'react';\nimport { unstable_ownerDocument as ownerDocument } from '@mui/utils';\nimport { useGridLogger } from \"../../utils/useGridLogger.js\";\nimport { gridExpandedRowCountSelector } from \"../filter/gridFilterSelector.js\";\nimport { gridColumnDefinitionsSelector, gridColumnVisibilityModelSelector } from \"../columns/gridColumnsSelector.js\";\nimport { gridClasses } from \"../../../constants/gridClasses.js\";\nimport { useGridApiMethod } from \"../../utils/useGridApiMethod.js\";\nimport { gridRowsMetaSelector } from \"../rows/gridRowsMetaSelector.js\";\nimport { GRID_ID_AUTOGENERATED } from \"../rows/gridRowsUtils.js\";\nimport { defaultGetRowsToExport, getColumnsToExport } from \"./utils.js\";\nimport { getDerivedPaginationModel } from \"../pagination/useGridPaginationModel.js\";\nimport { useGridRegisterPipeProcessor } from \"../../core/pipeProcessing/index.js\";\nimport { GridPrintExportMenuItem } from \"../../../components/toolbar/GridToolbarExport.js\";\nimport { getTotalHeaderHeight } from \"../columns/gridColumnsUtils.js\";\nimport { GRID_CHECKBOX_SELECTION_COL_DEF } from \"../../../colDef/gridCheckboxSelectionColDef.js\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nfunction raf() {\n  return new Promise(resolve => {\n    requestAnimationFrame(() => {\n      resolve();\n    });\n  });\n}\nfunction buildPrintWindow(title) {\n  const iframeEl = document.createElement('iframe');\n  iframeEl.style.position = 'absolute';\n  iframeEl.style.width = '0px';\n  iframeEl.style.height = '0px';\n  iframeEl.title = title || document.title;\n  return iframeEl;\n}\n\n/**\n * @requires useGridColumns (state)\n * @requires useGridFilter (state)\n * @requires useGridSorting (state)\n * @requires useGridParamsApi (method)\n */\nexport const useGridPrintExport = (apiRef, props) => {\n  const hasRootReference = apiRef.current.rootElementRef.current !== null;\n  const logger = useGridLogger(apiRef, 'useGridPrintExport');\n  const doc = React.useRef(null);\n  const previousGridState = React.useRef(null);\n  const previousColumnVisibility = React.useRef({});\n  const previousRows = React.useRef([]);\n  const previousVirtualizationState = React.useRef();\n  React.useEffect(() => {\n    doc.current = ownerDocument(apiRef.current.rootElementRef.current);\n  }, [apiRef, hasRootReference]);\n\n  // Returns a promise because updateColumns triggers state update and\n  // the new state needs to be in place before the grid can be sized correctly\n  const updateGridColumnsForPrint = React.useCallback((fields, allColumns, includeCheckboxes) => new Promise(resolve => {\n    const exportedColumnFields = getColumnsToExport({\n      apiRef,\n      options: {\n        fields,\n        allColumns\n      }\n    }).map(column => column.field);\n    const columns = gridColumnDefinitionsSelector(apiRef);\n    const newColumnVisibilityModel = {};\n    columns.forEach(column => {\n      newColumnVisibilityModel[column.field] = exportedColumnFields.includes(column.field);\n    });\n    if (includeCheckboxes) {\n      newColumnVisibilityModel[GRID_CHECKBOX_SELECTION_COL_DEF.field] = true;\n    }\n    apiRef.current.setColumnVisibilityModel(newColumnVisibilityModel);\n    resolve();\n  }), [apiRef]);\n  const updateGridRowsForPrint = React.useCallback(getRowsToExport => {\n    const rowsToExportIds = getRowsToExport({\n      apiRef\n    });\n    const newRows = rowsToExportIds.reduce((acc, id) => {\n      const row = apiRef.current.getRow(id);\n      if (!row[GRID_ID_AUTOGENERATED]) {\n        acc.push(row);\n      }\n      return acc;\n    }, []);\n    apiRef.current.setRows(newRows);\n  }, [apiRef]);\n  const handlePrintWindowLoad = React.useCallback((printWindow, options) => {\n    const normalizeOptions = _extends({\n      copyStyles: true,\n      hideToolbar: false,\n      hideFooter: false,\n      includeCheckboxes: false\n    }, options);\n    const printDoc = printWindow.contentDocument;\n    if (!printDoc) {\n      return;\n    }\n    const rowsMeta = gridRowsMetaSelector(apiRef.current.state);\n    const gridRootElement = apiRef.current.rootElementRef.current;\n    const gridClone = gridRootElement.cloneNode(true);\n\n    // Allow to overflow to not hide the border of the last row\n    const gridMain = gridClone.querySelector(`.${gridClasses.main}`);\n    gridMain.style.overflow = 'visible';\n\n    // See https://support.google.com/chrome/thread/191619088?hl=en&msgid=193009642\n    gridClone.style.contain = 'size';\n    let gridToolbarElementHeight = gridRootElement.querySelector(`.${gridClasses.toolbarContainer}`)?.offsetHeight || 0;\n    let gridFooterElementHeight = gridRootElement.querySelector(`.${gridClasses.footerContainer}`)?.offsetHeight || 0;\n    if (normalizeOptions.hideToolbar) {\n      gridClone.querySelector(`.${gridClasses.toolbarContainer}`)?.remove();\n      gridToolbarElementHeight = 0;\n    }\n    if (normalizeOptions.hideFooter) {\n      gridClone.querySelector(`.${gridClasses.footerContainer}`)?.remove();\n      gridFooterElementHeight = 0;\n    }\n\n    // Expand container height to accommodate all rows\n    const computedTotalHeight = rowsMeta.currentPageTotalHeight + getTotalHeaderHeight(apiRef, props) + gridToolbarElementHeight + gridFooterElementHeight;\n    gridClone.style.height = `${computedTotalHeight}px`;\n    // The height above does not include grid border width, so we need to exclude it\n    gridClone.style.boxSizing = 'content-box';\n    if (!normalizeOptions.hideFooter) {\n      // the footer is always being placed at the bottom of the page as if all rows are exported\n      // so if getRowsToExport is being used to only export a subset of rows then we need to\n      // adjust the footer position to be correctly placed at the bottom of the grid\n      const gridFooterElement = gridClone.querySelector(`.${gridClasses.footerContainer}`);\n      gridFooterElement.style.position = 'absolute';\n      gridFooterElement.style.width = '100%';\n      gridFooterElement.style.top = `${computedTotalHeight - gridFooterElementHeight}px`;\n    }\n\n    // printDoc.body.appendChild(gridClone); should be enough but a clone isolation bug in Safari\n    // prevents us to do it\n    const container = document.createElement('div');\n    container.appendChild(gridClone);\n    // To avoid an empty page in start on Chromium based browsers\n    printDoc.body.style.marginTop = '0px';\n    printDoc.body.innerHTML = container.innerHTML;\n    const defaultPageStyle = typeof normalizeOptions.pageStyle === 'function' ? normalizeOptions.pageStyle() : normalizeOptions.pageStyle;\n    if (typeof defaultPageStyle === 'string') {\n      // TODO custom styles should always win\n      const styleElement = printDoc.createElement('style');\n      styleElement.appendChild(printDoc.createTextNode(defaultPageStyle));\n      printDoc.head.appendChild(styleElement);\n    }\n    if (normalizeOptions.bodyClassName) {\n      printDoc.body.classList.add(...normalizeOptions.bodyClassName.split(' '));\n    }\n    const stylesheetLoadPromises = [];\n    if (normalizeOptions.copyStyles) {\n      const rootCandidate = gridRootElement.getRootNode();\n      const root = rootCandidate.constructor.name === 'ShadowRoot' ? rootCandidate : doc.current;\n      const headStyleElements = root.querySelectorAll(\"style, link[rel='stylesheet']\");\n      for (let i = 0; i < headStyleElements.length; i += 1) {\n        const node = headStyleElements[i];\n        if (node.tagName === 'STYLE') {\n          const newHeadStyleElements = printDoc.createElement(node.tagName);\n          const sheet = node.sheet;\n          if (sheet) {\n            let styleCSS = '';\n            // NOTE: for-of is not supported by IE\n            for (let j = 0; j < sheet.cssRules.length; j += 1) {\n              if (typeof sheet.cssRules[j].cssText === 'string') {\n                styleCSS += `${sheet.cssRules[j].cssText}\\r\\n`;\n              }\n            }\n            newHeadStyleElements.appendChild(printDoc.createTextNode(styleCSS));\n            printDoc.head.appendChild(newHeadStyleElements);\n          }\n        } else if (node.getAttribute('href')) {\n          // If `href` tag is empty, avoid loading these links\n\n          const newHeadStyleElements = printDoc.createElement(node.tagName);\n          for (let j = 0; j < node.attributes.length; j += 1) {\n            const attr = node.attributes[j];\n            if (attr) {\n              newHeadStyleElements.setAttribute(attr.nodeName, attr.nodeValue || '');\n            }\n          }\n          stylesheetLoadPromises.push(new Promise(resolve => {\n            newHeadStyleElements.addEventListener('load', () => resolve());\n          }));\n          printDoc.head.appendChild(newHeadStyleElements);\n        }\n      }\n    }\n\n    // Trigger print\n    if (process.env.NODE_ENV !== 'test') {\n      // wait for remote stylesheets to load\n      Promise.all(stylesheetLoadPromises).then(() => {\n        printWindow.contentWindow.print();\n      });\n    }\n  }, [apiRef, doc, props]);\n  const handlePrintWindowAfterPrint = React.useCallback(printWindow => {\n    // Remove the print iframe\n    doc.current.body.removeChild(printWindow);\n\n    // Revert grid to previous state\n    apiRef.current.restoreState(previousGridState.current || {});\n    if (!previousGridState.current?.columns?.columnVisibilityModel) {\n      // if the apiRef.current.exportState(); did not exported the column visibility, we update it\n      apiRef.current.setColumnVisibilityModel(previousColumnVisibility.current);\n    }\n    apiRef.current.setState(state => _extends({}, state, {\n      virtualization: previousVirtualizationState.current\n    }));\n    apiRef.current.setRows(previousRows.current);\n\n    // Clear local state\n    previousGridState.current = null;\n    previousColumnVisibility.current = {};\n    previousRows.current = [];\n  }, [apiRef]);\n  const exportDataAsPrint = React.useCallback(async options => {\n    logger.debug(`Export data as Print`);\n    if (!apiRef.current.rootElementRef.current) {\n      throw new Error('MUI X: No grid root element available.');\n    }\n    previousGridState.current = apiRef.current.exportState();\n    // It appends that the visibility model is not exported, especially if columnVisibility is not controlled\n    previousColumnVisibility.current = gridColumnVisibilityModelSelector(apiRef);\n    previousRows.current = apiRef.current.getSortedRows().filter(row => !row[GRID_ID_AUTOGENERATED]);\n    if (props.pagination) {\n      const visibleRowCount = gridExpandedRowCountSelector(apiRef);\n      const paginationModel = {\n        page: 0,\n        pageSize: visibleRowCount\n      };\n      apiRef.current.setState(state => _extends({}, state, {\n        pagination: _extends({}, state.pagination, {\n          paginationModel: getDerivedPaginationModel(state.pagination,\n          // Using signature `DataGridPro` to allow more than 100 rows in the print export\n          'DataGridPro', paginationModel)\n        })\n      }));\n    }\n    previousVirtualizationState.current = apiRef.current.state.virtualization;\n    apiRef.current.setState(state => _extends({}, state, {\n      virtualization: _extends({}, state.virtualization, {\n        enabled: false,\n        enabledForColumns: false\n      })\n    }));\n    await updateGridColumnsForPrint(options?.fields, options?.allColumns, options?.includeCheckboxes);\n    updateGridRowsForPrint(options?.getRowsToExport ?? defaultGetRowsToExport);\n    await raf(); // wait for the state changes to take action\n    const printWindow = buildPrintWindow(options?.fileName);\n    if (process.env.NODE_ENV === 'test') {\n      doc.current.body.appendChild(printWindow);\n      // In test env, run the all pipeline without waiting for loading\n      handlePrintWindowLoad(printWindow, options);\n      handlePrintWindowAfterPrint(printWindow);\n    } else {\n      printWindow.onload = () => {\n        handlePrintWindowLoad(printWindow, options);\n        const mediaQueryList = printWindow.contentWindow.matchMedia('print');\n        mediaQueryList.addEventListener('change', mql => {\n          const isAfterPrint = mql.matches === false;\n          if (isAfterPrint) {\n            handlePrintWindowAfterPrint(printWindow);\n          }\n        });\n      };\n      doc.current.body.appendChild(printWindow);\n    }\n  }, [props, logger, apiRef, handlePrintWindowLoad, handlePrintWindowAfterPrint, updateGridColumnsForPrint, updateGridRowsForPrint]);\n  const printExportApi = {\n    exportDataAsPrint\n  };\n  useGridApiMethod(apiRef, printExportApi, 'public');\n\n  /**\n   * PRE-PROCESSING\n   */\n  const addExportMenuButtons = React.useCallback((initialValue, options) => {\n    if (options.printOptions?.disableToolbarButton) {\n      return initialValue;\n    }\n    return [...initialValue, {\n      component: /*#__PURE__*/_jsx(GridPrintExportMenuItem, {\n        options: options.printOptions\n      }),\n      componentName: 'printExport'\n    }];\n  }, []);\n  useGridRegisterPipeProcessor(apiRef, 'exportMenu', addExportMenuButtons);\n};","export function throttle(func, wait = 166) {\n  let timeout;\n  let lastArgs;\n  const later = () => {\n    timeout = undefined;\n    func(...lastArgs);\n  };\n  function throttled(...args) {\n    lastArgs = args;\n    if (timeout === undefined) {\n      timeout = setTimeout(later, wait);\n    }\n  }\n  throttled.clear = () => {\n    clearTimeout(timeout);\n    timeout = undefined;\n  };\n  return throttled;\n}","import ownerDocument from '../ownerDocument';\nexport default function ownerWindow(node) {\n  const doc = ownerDocument(node);\n  return doc.defaultView || window;\n}","import { useGridApiOptionHandler } from \"../../utils/useGridApiEventHandler.js\";\n/**\n * @requires useGridFocus (event) - can be after, async only\n * @requires useGridColumns (event) - can be after, async only\n */\nexport function useGridEvents(apiRef, props) {\n  useGridApiOptionHandler(apiRef, 'columnHeaderClick', props.onColumnHeaderClick);\n  useGridApiOptionHandler(apiRef, 'columnHeaderDoubleClick', props.onColumnHeaderDoubleClick);\n  useGridApiOptionHandler(apiRef, 'columnHeaderOver', props.onColumnHeaderOver);\n  useGridApiOptionHandler(apiRef, 'columnHeaderOut', props.onColumnHeaderOut);\n  useGridApiOptionHandler(apiRef, 'columnHeaderEnter', props.onColumnHeaderEnter);\n  useGridApiOptionHandler(apiRef, 'columnHeaderLeave', props.onColumnHeaderLeave);\n  useGridApiOptionHandler(apiRef, 'cellClick', props.onCellClick);\n  useGridApiOptionHandler(apiRef, 'cellDoubleClick', props.onCellDoubleClick);\n  useGridApiOptionHandler(apiRef, 'cellKeyDown', props.onCellKeyDown);\n  useGridApiOptionHandler(apiRef, 'preferencePanelClose', props.onPreferencePanelClose);\n  useGridApiOptionHandler(apiRef, 'preferencePanelOpen', props.onPreferencePanelOpen);\n  useGridApiOptionHandler(apiRef, 'menuOpen', props.onMenuOpen);\n  useGridApiOptionHandler(apiRef, 'menuClose', props.onMenuClose);\n  useGridApiOptionHandler(apiRef, 'rowDoubleClick', props.onRowDoubleClick);\n  useGridApiOptionHandler(apiRef, 'rowClick', props.onRowClick);\n  useGridApiOptionHandler(apiRef, 'stateChange', props.onStateChange);\n}","import * as React from 'react';\nimport { useGridApiMethod } from \"../../utils/index.js\";\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};","'use client';\n\nimport _extends from \"@babel/runtime/helpers/esm/extends\";\nimport * as React from 'react';\nimport PropTypes from 'prop-types';\nimport { GridBody, GridFooterPlaceholder, GridHeader, GridRoot } from \"../components/index.js\";\nimport { useGridAriaAttributes } from \"../hooks/utils/useGridAriaAttributes.js\";\nimport { useGridRowAriaAttributes } from \"../hooks/features/rows/useGridRowAriaAttributes.js\";\nimport { GridContextProvider } from \"../context/GridContextProvider.js\";\nimport { useDataGridComponent } from \"./useDataGridComponent.js\";\nimport { useDataGridProps } from \"./useDataGridProps.js\";\nimport { propValidatorsDataGrid, validateProps } from \"../internals/utils/propValidation.js\";\nimport { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nconst configuration = {\n  hooks: {\n    useGridAriaAttributes,\n    useGridRowAriaAttributes\n  }\n};\nlet propValidators;\nif (process.env.NODE_ENV !== 'production') {\n  propValidators = [...propValidatorsDataGrid,\n  // Only validate in MIT version\n  props => props.columns && props.columns.some(column => column.resizable) && [`MUI X: \\`column.resizable = true\\` is not a valid prop.`, 'Column resizing is not available in the MIT version.', '', 'You need to upgrade to DataGridPro or DataGridPremium component to unlock this feature.'].join('\\n') || undefined];\n}\nconst DataGridRaw = /*#__PURE__*/React.forwardRef(function DataGrid(inProps, ref) {\n  const props = useDataGridProps(inProps);\n  const privateApiRef = useDataGridComponent(props.apiRef, props);\n  if (process.env.NODE_ENV !== 'production') {\n    validateProps(props, propValidators);\n  }\n  return /*#__PURE__*/_jsx(GridContextProvider, {\n    privateApiRef: privateApiRef,\n    configuration: configuration,\n    props: props,\n    children: /*#__PURE__*/_jsxs(GridRoot, _extends({\n      className: props.className,\n      style: props.style,\n      sx: props.sx,\n      ref: ref\n    }, props.forwardedProps, {\n      children: [/*#__PURE__*/_jsx(GridHeader, {}), /*#__PURE__*/_jsx(GridBody, {}), /*#__PURE__*/_jsx(GridFooterPlaceholder, {})]\n    }))\n  });\n});\n/**\n * Demos:\n * - [DataGrid](https://mui.com/x/react-data-grid/demo/)\n *\n * API:\n * - [DataGrid API](https://mui.com/x/api/data-grid/data-grid/)\n */\nexport const DataGrid = /*#__PURE__*/React.memo(DataGridRaw);\nDataGridRaw.propTypes = {\n  // ----------------------------- Warning --------------------------------\n  // | These PropTypes are generated from the TypeScript type definitions |\n  // | To update them edit the TypeScript types and run \"pnpm proptypes\"  |\n  // ----------------------------------------------------------------------\n  /**\n   * The ref object that allows Data Grid manipulation. Can be instantiated with `useGridApiRef()`.\n   */\n  apiRef: PropTypes.shape({\n    current: PropTypes.object.isRequired\n  }),\n  /**\n   * The label of the Data Grid.\n   */\n  'aria-label': PropTypes.string,\n  /**\n   * The id of the element containing a label for the Data Grid.\n   */\n  'aria-labelledby': PropTypes.string,\n  /**\n   * If `true`, the Data Grid height is dynamic and follows the number of rows in the Data Grid.\n   * @default false\n   */\n  autoHeight: PropTypes.bool,\n  /**\n   * If `true`, the pageSize is calculated according to the container size and the max number of rows to avoid rendering a vertical scroll bar.\n   * @default false\n   */\n  autoPageSize: PropTypes.bool,\n  /**\n   * If `true`, columns are autosized after the datagrid is mounted.\n   * @default false\n   */\n  autosizeOnMount: PropTypes.bool,\n  /**\n   * The options for autosize when user-initiated.\n   */\n  autosizeOptions: PropTypes.shape({\n    columns: PropTypes.arrayOf(PropTypes.string),\n    expand: PropTypes.bool,\n    includeHeaders: PropTypes.bool,\n    includeOutliers: PropTypes.bool,\n    outliersFactor: PropTypes.number\n  }),\n  /**\n   * Controls the modes of the cells.\n   */\n  cellModesModel: PropTypes.object,\n  /**\n   * If `true`, the Data Grid will display an extra column with checkboxes for selecting rows.\n   * @default false\n   */\n  checkboxSelection: PropTypes.bool,\n  /**\n   * Override or extend the styles applied to the component.\n   */\n  classes: PropTypes.object,\n  /**\n   * The character used to separate cell values when copying to the clipboard.\n   * @default '\\t'\n   */\n  clipboardCopyCellDelimiter: PropTypes.string,\n  /**\n   * Column region in pixels to render before/after the viewport\n   * @default 150\n   */\n  columnBufferPx: PropTypes.number,\n  /**\n   * Sets the height in pixels of the column group headers in the Data Grid.\n   * Inherits the `columnHeaderHeight` value if not set.\n   */\n  columnGroupHeaderHeight: PropTypes.number,\n  columnGroupingModel: PropTypes.arrayOf(PropTypes.object),\n  /**\n   * Sets the height in pixel of the column headers in the Data Grid.\n   * @default 56\n   */\n  columnHeaderHeight: PropTypes.number,\n  /**\n   * Set of columns of type [[GridColDef]][].\n   */\n  columns: PropTypes.arrayOf(PropTypes.object).isRequired,\n  /**\n   * Set the column visibility model of the Data Grid.\n   * If defined, the Data Grid will ignore the `hide` property in [[GridColDef]].\n   */\n  columnVisibilityModel: PropTypes.object,\n  /**\n   * Set the density of the Data Grid.\n   * @default \"standard\"\n   */\n  density: PropTypes.oneOf(['comfortable', 'compact', 'standard']),\n  /**\n   * If `true`, column autosizing on header separator double-click is disabled.\n   * @default false\n   */\n  disableAutosize: PropTypes.bool,\n  /**\n   * If `true`, column filters are disabled.\n   * @default false\n   */\n  disableColumnFilter: PropTypes.bool,\n  /**\n   * If `true`, the column menu is disabled.\n   * @default false\n   */\n  disableColumnMenu: PropTypes.bool,\n  /**\n   * If `true`, resizing columns is disabled.\n   * @default false\n   */\n  disableColumnResize: PropTypes.bool,\n  /**\n   * If `true`, hiding/showing columns is disabled.\n   * @default false\n   */\n  disableColumnSelector: PropTypes.bool,\n  /**\n   * If `true`, the column sorting feature will be disabled.\n   * @default false\n   */\n  disableColumnSorting: PropTypes.bool,\n  /**\n   * If `true`, the density selector is disabled.\n   * @default false\n   */\n  disableDensitySelector: PropTypes.bool,\n  /**\n   * If `true`, `eval()` is not used for performance optimization.\n   * @default false\n   */\n  disableEval: PropTypes.bool,\n  /**\n   * If `true`, multiple selection using the Ctrl/CMD or Shift key is disabled.\n   * The MIT DataGrid will ignore this prop, unless `checkboxSelection` is enabled.\n   * @default false (`!props.checkboxSelection` for MIT Data Grid)\n   */\n  disableMultipleRowSelection: PropTypes.bool,\n  /**\n   * If `true`, the selection on click on a row or cell is disabled.\n   * @default false\n   */\n  disableRowSelectionOnClick: PropTypes.bool,\n  /**\n   * If `true`, the virtualization is disabled.\n   * @default false\n   */\n  disableVirtualization: PropTypes.bool,\n  /**\n   * Controls whether to use the cell or row editing.\n   * @default \"cell\"\n   */\n  editMode: PropTypes.oneOf(['cell', 'row']),\n  /**\n   * Use if the actual rowCount is not known upfront, but an estimation is available.\n   * If some rows have children (for instance in the tree data), this number represents the amount of top level rows.\n   * Applicable only with `paginationMode=\"server\"` and when `rowCount=\"-1\"`\n   */\n  estimatedRowCount: PropTypes.number,\n  /**\n   * Unstable features, breaking changes might be introduced.\n   * For each feature, if the flag is not explicitly set to `true`, the feature will be fully disabled and any property / method call will not have any effect.\n   */\n  experimentalFeatures: PropTypes.shape({\n    warnIfFocusStateIsNotSynced: PropTypes.bool\n  }),\n  /**\n   * The milliseconds delay to wait after a keystroke before triggering filtering.\n   * @default 150\n   */\n  filterDebounceMs: PropTypes.number,\n  /**\n   * Filtering can be processed on the server or client-side.\n   * Set it to 'server' if you would like to handle filtering on the server-side.\n   * @default \"client\"\n   */\n  filterMode: PropTypes.oneOf(['client', 'server']),\n  /**\n   * Set the filter model of the Data Grid.\n   */\n  filterModel: PropTypes.shape({\n    items: PropTypes.arrayOf(PropTypes.shape({\n      field: PropTypes.string.isRequired,\n      id: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),\n      operator: PropTypes.string.isRequired,\n      value: PropTypes.any\n    })).isRequired,\n    logicOperator: PropTypes.oneOf(['and', 'or']),\n    quickFilterExcludeHiddenColumns: PropTypes.bool,\n    quickFilterLogicOperator: PropTypes.oneOf(['and', 'or']),\n    quickFilterValues: PropTypes.array\n  }),\n  /**\n   * Forwarded props for the Data Grid root element.\n   * @ignore - do not document.\n   */\n  forwardedProps: PropTypes.object,\n  /**\n   * Function that applies CSS classes dynamically on cells.\n   * @param {GridCellParams} params With all properties from [[GridCellParams]].\n   * @returns {string} The CSS class to apply to the cell.\n   */\n  getCellClassName: PropTypes.func,\n  /**\n   * Function that returns the element to render in row detail.\n   * @param {GridRowParams} params With all properties from [[GridRowParams]].\n   * @returns {React.JSX.Element} The row detail element.\n   */\n  getDetailPanelContent: PropTypes.func,\n  /**\n   * Function that returns the estimated height for a row.\n   * Only works if dynamic row height is used.\n   * Once the row height is measured this value is discarded.\n   * @param {GridRowHeightParams} params With all properties from [[GridRowHeightParams]].\n   * @returns {number | null} The estimated row height value. If `null` or `undefined` then the default row height, based on the density, is applied.\n   */\n  getEstimatedRowHeight: PropTypes.func,\n  /**\n   * Function that applies CSS classes dynamically on rows.\n   * @param {GridRowClassNameParams} params With all properties from [[GridRowClassNameParams]].\n   * @returns {string} The CSS class to apply to the row.\n   */\n  getRowClassName: PropTypes.func,\n  /**\n   * Function that sets the row height per row.\n   * @param {GridRowHeightParams} params With all properties from [[GridRowHeightParams]].\n   * @returns {GridRowHeightReturnValue} The row height value. If `null` or `undefined` then the default row height is applied. If \"auto\" then the row height is calculated based on the content.\n   */\n  getRowHeight: PropTypes.func,\n  /**\n   * Return the id of a given [[GridRowModel]].\n   */\n  getRowId: PropTypes.func,\n  /**\n   * Function that allows to specify the spacing between rows.\n   * @param {GridRowSpacingParams} params With all properties from [[GridRowSpacingParams]].\n   * @returns {GridRowSpacing} The row spacing values.\n   */\n  getRowSpacing: PropTypes.func,\n  /**\n   * If `true`, the footer component is hidden.\n   * @default false\n   */\n  hideFooter: PropTypes.bool,\n  /**\n   * If `true`, the pagination component in the footer is hidden.\n   * @default false\n   */\n  hideFooterPagination: PropTypes.bool,\n  /**\n   * If `true`, the selected row count in the footer is hidden.\n   * @default false\n   */\n  hideFooterSelectedRowCount: PropTypes.bool,\n  /**\n   * If `true`, the diacritics (accents) are ignored when filtering or quick filtering.\n   * E.g. when filter value is `cafe`, the rows with `café` will be visible.\n   * @default false\n   */\n  ignoreDiacritics: PropTypes.bool,\n  /**\n   * If `true`, the Data Grid will not use `valueFormatter` when exporting to CSV or copying to clipboard.\n   * If an object is provided, you can choose to ignore the `valueFormatter` for CSV export or clipboard export.\n   * @default false\n   */\n  ignoreValueFormatterDuringExport: PropTypes.oneOfType([PropTypes.shape({\n    clipboardExport: PropTypes.bool,\n    csvExport: PropTypes.bool\n  }), PropTypes.bool]),\n  /**\n   * If `select`, a group header checkbox in indeterminate state (like \"Select All\" checkbox)\n   * will select all the rows under it.\n   * If `deselect`, it will deselect all the rows under it.\n   * Works only if `checkboxSelection` is enabled.\n   * @default \"deselect\"\n   */\n  indeterminateCheckboxAction: PropTypes.oneOf(['deselect', 'select']),\n  /**\n   * The initial state of the DataGrid.\n   * The data in it will be set in the state on initialization but will not be controlled.\n   * If one of the data in `initialState` is also being controlled, then the control state wins.\n   */\n  initialState: PropTypes.object,\n  /**\n   * Callback fired when a cell is rendered, returns true if the cell is editable.\n   * @param {GridCellParams} params With all properties from [[GridCellParams]].\n   * @returns {boolean} A boolean indicating if the cell is editable.\n   */\n  isCellEditable: PropTypes.func,\n  /**\n   * Determines if a row can be selected.\n   * @param {GridRowParams} params With all properties from [[GridRowParams]].\n   * @returns {boolean} A boolean indicating if the row is selectable.\n   */\n  isRowSelectable: PropTypes.func,\n  /**\n   * If `true`, the selection model will retain selected rows that do not exist.\n   * Useful when using server side pagination and row selections need to be retained\n   * when changing pages.\n   * @default false\n   */\n  keepNonExistentRowsSelected: PropTypes.bool,\n  /**\n   * If `true`, a loading overlay is displayed.\n   * @default false\n   */\n  loading: PropTypes.bool,\n  /**\n   * Set the locale text of the Data Grid.\n   * You can find all the translation keys supported in [the source](https://github.com/mui/mui-x/blob/HEAD/packages/x-data-grid/src/constants/localeTextConstants.ts) in the GitHub repository.\n   */\n  localeText: PropTypes.object,\n  /**\n   * Pass a custom logger in the components that implements the [[Logger]] interface.\n   * @default console\n   */\n  logger: PropTypes.shape({\n    debug: PropTypes.func.isRequired,\n    error: PropTypes.func.isRequired,\n    info: PropTypes.func.isRequired,\n    warn: PropTypes.func.isRequired\n  }),\n  /**\n   * Allows to pass the logging level or false to turn off logging.\n   * @default \"error\" (\"warn\" in dev mode)\n   */\n  logLevel: PropTypes.oneOf(['debug', 'error', 'info', 'warn', false]),\n  /**\n   * Nonce of the inline styles for [Content Security Policy](https://www.w3.org/TR/2016/REC-CSP2-20161215/#script-src-the-nonce-attribute).\n   */\n  nonce: PropTypes.string,\n  /**\n   * Callback fired when any cell is clicked.\n   * @param {GridCellParams} params With all properties from [[GridCellParams]].\n   * @param {MuiEvent<React.MouseEvent>} event The event object.\n   * @param {GridCallbackDetails} details Additional details for this callback.\n   */\n  onCellClick: PropTypes.func,\n  /**\n   * Callback fired when a double click event comes from a cell element.\n   * @param {GridCellParams} params With all properties from [[GridCellParams]].\n   * @param {MuiEvent<React.MouseEvent>} event The event object.\n   * @param {GridCallbackDetails} details Additional details for this callback.\n   */\n  onCellDoubleClick: PropTypes.func,\n  /**\n   * Callback fired when the cell turns to edit mode.\n   * @param {GridCellParams} params With all properties from [[GridCellParams]].\n   * @param {MuiEvent<React.KeyboardEvent | React.MouseEvent>} event The event that caused this prop to be called.\n   */\n  onCellEditStart: PropTypes.func,\n  /**\n   * Callback fired when the cell turns to view mode.\n   * @param {GridCellParams} params With all properties from [[GridCellParams]].\n   * @param {MuiEvent<MuiBaseEvent>} event The event that caused this prop to be called.\n   */\n  onCellEditStop: PropTypes.func,\n  /**\n   * Callback fired when a keydown event comes from a cell element.\n   * @param {GridCellParams} params With all properties from [[GridCellParams]].\n   * @param {MuiEvent<React.KeyboardEvent>} event The event object.\n   * @param {GridCallbackDetails} details Additional details for this callback.\n   */\n  onCellKeyDown: PropTypes.func,\n  /**\n   * Callback fired when the `cellModesModel` prop changes.\n   * @param {GridCellModesModel} cellModesModel Object containing which cells are in \"edit\" mode.\n   * @param {GridCallbackDetails} details Additional details for this callback.\n   */\n  onCellModesModelChange: PropTypes.func,\n  /**\n   * Callback called when the data is copied to the clipboard.\n   * @param {string} data The data copied to the clipboard.\n   */\n  onClipboardCopy: PropTypes.func,\n  /**\n   * Callback fired when a click event comes from a column header element.\n   * @param {GridColumnHeaderParams} params With all properties from [[GridColumnHeaderParams]].\n   * @param {MuiEvent<React.MouseEvent>} event The event object.\n   * @param {GridCallbackDetails} details Additional details for this callback.\n   */\n  onColumnHeaderClick: PropTypes.func,\n  /**\n   * Callback fired when a double click event comes from a column header element.\n   * @param {GridColumnHeaderParams} params With all properties from [[GridColumnHeaderParams]].\n   * @param {MuiEvent<React.MouseEvent>} event The event object.\n   * @param {GridCallbackDetails} details Additional details for this callback.\n   */\n  onColumnHeaderDoubleClick: PropTypes.func,\n  /**\n   * Callback fired when a mouse enter event comes from a column header element.\n   * @param {GridColumnHeaderParams} params With all properties from [[GridColumnHeaderParams]].\n   * @param {MuiEvent<React.MouseEvent>} event The event object.\n   * @param {GridCallbackDetails} details Additional details for this callback.\n   */\n  onColumnHeaderEnter: PropTypes.func,\n  /**\n   * Callback fired when a mouse leave event comes from a column header element.\n   * @param {GridColumnHeaderParams} params With all properties from [[GridColumnHeaderParams]].\n   * @param {MuiEvent<React.MouseEvent>} event The event object.\n   * @param {GridCallbackDetails} details Additional details for this callback.\n   */\n  onColumnHeaderLeave: PropTypes.func,\n  /**\n   * Callback fired when a mouseout event comes from a column header element.\n   * @param {GridColumnHeaderParams} params With all properties from [[GridColumnHeaderParams]].\n   * @param {MuiEvent<React.MouseEvent>} event The event object.\n   * @param {GridCallbackDetails} details Additional details for this callback.\n   */\n  onColumnHeaderOut: PropTypes.func,\n  /**\n   * Callback fired when a mouseover event comes from a column header element.\n   * @param {GridColumnHeaderParams} params With all properties from [[GridColumnHeaderParams]].\n   * @param {MuiEvent<React.MouseEvent>} event The event object.\n   * @param {GridCallbackDetails} details Additional details for this callback.\n   */\n  onColumnHeaderOver: PropTypes.func,\n  /**\n   * Callback fired when a column is reordered.\n   * @param {GridColumnOrderChangeParams} params With all properties from [[GridColumnOrderChangeParams]].\n   * @param {MuiEvent<{}>} event The event object.\n   * @param {GridCallbackDetails} details Additional details for this callback.\n   */\n  onColumnOrderChange: PropTypes.func,\n  /**\n   * Callback fired while a column is being resized.\n   * @param {GridColumnResizeParams} params With all properties from [[GridColumnResizeParams]].\n   * @param {MuiEvent<React.MouseEvent>} event The event object.\n   * @param {GridCallbackDetails} details Additional details for this callback.\n   */\n  onColumnResize: PropTypes.func,\n  /**\n   * Callback fired when the column visibility model changes.\n   * @param {GridColumnVisibilityModel} model The new model.\n   * @param {GridCallbackDetails} details Additional details for this callback.\n   */\n  onColumnVisibilityModelChange: PropTypes.func,\n  /**\n   * Callback fired when the width of a column is changed.\n   * @param {GridColumnResizeParams} params With all properties from [[GridColumnResizeParams]].\n   * @param {MuiEvent<React.MouseEvent>} event The event object.\n   * @param {GridCallbackDetails} details Additional details for this callback.\n   */\n  onColumnWidthChange: PropTypes.func,\n  /**\n   * Callback fired when the density changes.\n   * @param {GridDensity} density New density value.\n   */\n  onDensityChange: PropTypes.func,\n  /**\n   * Callback fired when the Filter model changes before the filters are applied.\n   * @param {GridFilterModel} model With all properties from [[GridFilterModel]].\n   * @param {GridCallbackDetails} details Additional details for this callback.\n   */\n  onFilterModelChange: PropTypes.func,\n  /**\n   * Callback fired when the menu is closed.\n   * @param {GridMenuParams} params With all properties from [[GridMenuParams]].\n   * @param {MuiEvent<{}>} event The event object.\n   * @param {GridCallbackDetails} details Additional details for this callback.\n   */\n  onMenuClose: PropTypes.func,\n  /**\n   * Callback fired when the menu is opened.\n   * @param {GridMenuParams} params With all properties from [[GridMenuParams]].\n   * @param {MuiEvent<{}>} event The event object.\n   * @param {GridCallbackDetails} details Additional details for this callback.\n   */\n  onMenuOpen: PropTypes.func,\n  /**\n   * Callback fired when the pagination meta has changed.\n   * @param {GridPaginationMeta} paginationMeta Updated pagination meta.\n   */\n  onPaginationMetaChange: PropTypes.func,\n  /**\n   * Callback fired when the pagination model has changed.\n   * @param {GridPaginationModel} model Updated pagination model.\n   * @param {GridCallbackDetails} details Additional details for this callback.\n   */\n  onPaginationModelChange: PropTypes.func,\n  /**\n   * Callback fired when the preferences panel is closed.\n   * @param {GridPreferencePanelParams} params With all properties from [[GridPreferencePanelParams]].\n   * @param {MuiEvent<{}>} event The event object.\n   * @param {GridCallbackDetails} details Additional details for this callback.\n   */\n  onPreferencePanelClose: PropTypes.func,\n  /**\n   * Callback fired when the preferences panel is opened.\n   * @param {GridPreferencePanelParams} params With all properties from [[GridPreferencePanelParams]].\n   * @param {MuiEvent<{}>} event The event object.\n   * @param {GridCallbackDetails} details Additional details for this callback.\n   */\n  onPreferencePanelOpen: PropTypes.func,\n  /**\n   * Callback called when `processRowUpdate` throws an error or rejects.\n   * @param {any} error The error thrown.\n   */\n  onProcessRowUpdateError: PropTypes.func,\n  /**\n   * Callback fired when the Data Grid is resized.\n   * @param {ElementSize} containerSize With all properties from [[ElementSize]].\n   * @param {MuiEvent<{}>} event The event object.\n   * @param {GridCallbackDetails} details Additional details for this callback.\n   */\n  onResize: PropTypes.func,\n  /**\n   * Callback fired when a row is clicked.\n   * Not called if the target clicked is an interactive element added by the built-in columns.\n   * @param {GridRowParams} params With all properties from [[GridRowParams]].\n   * @param {MuiEvent<React.MouseEvent>} event The event object.\n   * @param {GridCallbackDetails} details Additional details for this callback.\n   */\n  onRowClick: PropTypes.func,\n  /**\n   * Callback fired when the row count has changed.\n   * @param {number} count Updated row count.\n   */\n  onRowCountChange: PropTypes.func,\n  /**\n   * Callback fired when a double click event comes from a row container element.\n   * @param {GridRowParams} params With all properties from [[RowParams]].\n   * @param {MuiEvent<React.MouseEvent>} event The event object.\n   * @param {GridCallbackDetails} details Additional details for this callback.\n   */\n  onRowDoubleClick: PropTypes.func,\n  /**\n   * Callback fired when the row turns to edit mode.\n   * @param {GridRowParams} params With all properties from [[GridRowParams]].\n   * @param {MuiEvent<React.KeyboardEvent | React.MouseEvent>} event The event that caused this prop to be called.\n   */\n  onRowEditStart: PropTypes.func,\n  /**\n   * Callback fired when the row turns to view mode.\n   * @param {GridRowParams} params With all properties from [[GridRowParams]].\n   * @param {MuiEvent<MuiBaseEvent>} event The event that caused this prop to be called.\n   */\n  onRowEditStop: PropTypes.func,\n  /**\n   * Callback fired when the `rowModesModel` prop changes.\n   * @param {GridRowModesModel} rowModesModel Object containing which rows are in \"edit\" mode.\n   * @param {GridCallbackDetails} details Additional details for this callback.\n   */\n  onRowModesModelChange: PropTypes.func,\n  /**\n   * Callback fired when the selection state of one or multiple rows changes.\n   * @param {GridRowSelectionModel} rowSelectionModel With all the row ids [[GridSelectionModel]].\n   * @param {GridCallbackDetails} details Additional details for this callback.\n   */\n  onRowSelectionModelChange: PropTypes.func,\n  /**\n   * Callback fired when the sort model changes before a column is sorted.\n   * @param {GridSortModel} model With all properties from [[GridSortModel]].\n   * @param {GridCallbackDetails} details Additional details for this callback.\n   */\n  onSortModelChange: PropTypes.func,\n  /**\n   * Callback fired when the state of the Data Grid is updated.\n   * @param {GridState} state The new state.\n   * @param {MuiEvent<{}>} event The event object.\n   * @param {GridCallbackDetails} details Additional details for this callback.\n   * @ignore - do not document.\n   */\n  onStateChange: PropTypes.func,\n  /**\n   * Select the pageSize dynamically using the component UI.\n   * @default [25, 50, 100]\n   */\n  pageSizeOptions: PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.number, PropTypes.shape({\n    label: PropTypes.string.isRequired,\n    value: PropTypes.number.isRequired\n  })]).isRequired),\n  pagination: PropTypes.oneOf([true]),\n  /**\n   * The extra information about the pagination state of the Data Grid.\n   * Only applicable with `paginationMode=\"server\"`.\n   */\n  paginationMeta: PropTypes.shape({\n    hasNextPage: PropTypes.bool\n  }),\n  /**\n   * Pagination can be processed on the server or client-side.\n   * Set it to 'client' if you would like to handle the pagination on the client-side.\n   * Set it to 'server' if you would like to handle the pagination on the server-side.\n   * @default \"client\"\n   */\n  paginationMode: PropTypes.oneOf(['client', 'server']),\n  /**\n   * The pagination model of type [[GridPaginationModel]] which refers to current `page` and `pageSize`.\n   */\n  paginationModel: PropTypes.shape({\n    page: PropTypes.number.isRequired,\n    pageSize: PropTypes.number.isRequired\n  }),\n  /**\n   * Callback called before updating a row with new values in the row and cell editing.\n   * @template R\n   * @param {R} newRow Row object with the new values.\n   * @param {R} oldRow Row object with the old values.\n   * @returns {Promise<R> | R} The final values to update the row.\n   */\n  processRowUpdate: PropTypes.func,\n  /**\n   * The milliseconds throttle delay for resizing the grid.\n   * @default 60\n   */\n  resizeThrottleMs: PropTypes.number,\n  /**\n   * Row region in pixels to render before/after the viewport\n   * @default 150\n   */\n  rowBufferPx: PropTypes.number,\n  /**\n   * Set the total number of rows, if it is different from the length of the value `rows` prop.\n   * If some rows have children (for instance in the tree data), this number represents the amount of top level rows.\n   * Only works with `paginationMode=\"server\"`, ignored when `paginationMode=\"client\"`.\n   */\n  rowCount: PropTypes.number,\n  /**\n   * Sets the height in pixel of a row in the Data Grid.\n   * @default 52\n   */\n  rowHeight: PropTypes.number,\n  /**\n   * Controls the modes of the rows.\n   */\n  rowModesModel: PropTypes.object,\n  /**\n   * The milliseconds delay to wait after measuring the row height before recalculating row positions.\n   * Setting it to a lower value could be useful when using dynamic row height,\n   * but might reduce performance when displaying a large number of rows.\n   * @default 166\n   */\n  rowPositionsDebounceMs: PropTypes.number,\n  /**\n   * Set of rows of type [[GridRowsProp]].\n   * @default []\n   */\n  rows: PropTypes.arrayOf(PropTypes.object),\n  /**\n   * If `false`, the row selection mode is disabled.\n   * @default true\n   */\n  rowSelection: PropTypes.bool,\n  /**\n   * Sets the row selection model of the Data Grid.\n   */\n  rowSelectionModel: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.number, PropTypes.string]).isRequired), PropTypes.number, PropTypes.string]),\n  /**\n   * Sets the type of space between rows added by `getRowSpacing`.\n   * @default \"margin\"\n   */\n  rowSpacingType: PropTypes.oneOf(['border', 'margin']),\n  /**\n   * Override the height/width of the Data Grid inner scrollbar.\n   */\n  scrollbarSize: PropTypes.number,\n  /**\n   * If `true`, vertical borders will be displayed between cells.\n   * @default false\n   */\n  showCellVerticalBorder: PropTypes.bool,\n  /**\n   * If `true`, vertical borders will be displayed between column header items.\n   * @default false\n   */\n  showColumnVerticalBorder: PropTypes.bool,\n  /**\n   * Overridable components props dynamically passed to the component at rendering.\n   */\n  slotProps: PropTypes.object,\n  /**\n   * Overridable components.\n   */\n  slots: PropTypes.object,\n  /**\n   * Sorting can be processed on the server or client-side.\n   * Set it to 'client' if you would like to handle sorting on the client-side.\n   * Set it to 'server' if you would like to handle sorting on the server-side.\n   * @default \"client\"\n   */\n  sortingMode: PropTypes.oneOf(['client', 'server']),\n  /**\n   * The order of the sorting sequence.\n   * @default ['asc', 'desc', null]\n   */\n  sortingOrder: PropTypes.arrayOf(PropTypes.oneOf(['asc', 'desc'])),\n  /**\n   * Set the sort model of the Data Grid.\n   */\n  sortModel: PropTypes.arrayOf(PropTypes.shape({\n    field: PropTypes.string.isRequired,\n    sort: PropTypes.oneOf(['asc', 'desc'])\n  })),\n  /**\n   * The system prop that allows defining system overrides as well as additional CSS styles.\n   */\n  sx: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.func, PropTypes.object, PropTypes.bool])), PropTypes.func, PropTypes.object]),\n  /**\n   * If `true`, the Data Grid will auto span the cells over the rows having the same value.\n   * @default false\n   */\n  unstable_rowSpanning: PropTypes.bool\n};","import { gridVisibleColumnDefinitionsSelector } from \"../features/columns/gridColumnsSelector.js\";\nimport { useGridSelector } from \"./useGridSelector.js\";\nimport { useGridRootProps } from \"./useGridRootProps.js\";\nimport { gridColumnGroupsHeaderMaxDepthSelector } from \"../features/columnGrouping/gridColumnGroupsSelector.js\";\nimport { gridPinnedRowsCountSelector } from \"../features/rows/gridRowsSelector.js\";\nimport { useGridPrivateApiContext } from \"./useGridPrivateApiContext.js\";\nimport { isMultipleRowSelectionEnabled } from \"../features/rowSelection/utils.js\";\nimport { gridExpandedRowCountSelector } from \"../features/filter/gridFilterSelector.js\";\nexport const useGridAriaAttributes = () => {\n  const apiRef = useGridPrivateApiContext();\n  const rootProps = useGridRootProps();\n  const visibleColumns = useGridSelector(apiRef, gridVisibleColumnDefinitionsSelector);\n  const accessibleRowCount = useGridSelector(apiRef, gridExpandedRowCountSelector);\n  const headerGroupingMaxDepth = useGridSelector(apiRef, gridColumnGroupsHeaderMaxDepthSelector);\n  const pinnedRowsCount = useGridSelector(apiRef, gridPinnedRowsCountSelector);\n  return {\n    role: 'grid',\n    'aria-colcount': visibleColumns.length,\n    'aria-rowcount': headerGroupingMaxDepth + 1 + pinnedRowsCount + accessibleRowCount,\n    'aria-multiselectable': isMultipleRowSelectionEnabled(rootProps)\n  };\n};","import * as React from 'react';\nimport { selectedIdsLookupSelector } from \"../rowSelection/index.js\";\nimport { useGridSelector } from \"../../utils/useGridSelector.js\";\nimport { gridColumnGroupsHeaderMaxDepthSelector } from \"../columnGrouping/gridColumnGroupsSelector.js\";\nimport { useGridPrivateApiContext } from \"../../utils/useGridPrivateApiContext.js\";\nexport const useGridRowAriaAttributes = () => {\n  const apiRef = useGridPrivateApiContext();\n  const selectedIdsLookup = useGridSelector(apiRef, selectedIdsLookupSelector);\n  const headerGroupingMaxDepth = useGridSelector(apiRef, gridColumnGroupsHeaderMaxDepthSelector);\n  return React.useCallback((rowNode, index) => {\n    const ariaAttributes = {};\n    const ariaRowIndex = index + headerGroupingMaxDepth + 2; // 1 for the header row and 1 as it's 1-based\n    ariaAttributes['aria-rowindex'] = ariaRowIndex;\n    if (apiRef.current.isRowSelectable(rowNode.id)) {\n      ariaAttributes['aria-selected'] = selectedIdsLookup[rowNode.id] !== undefined;\n    }\n    return ariaAttributes;\n  }, [apiRef, selectedIdsLookup, headerGroupingMaxDepth]);\n};","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport * as React from 'react';\nimport { useGridApiContext } from \"../hooks/utils/useGridApiContext.js\";\nimport { GridOverlay } from \"./containers/GridOverlay.js\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nexport const GridNoResultsOverlay = /*#__PURE__*/React.forwardRef(function GridNoResultsOverlay(props, ref) {\n  const apiRef = useGridApiContext();\n  const noResultsOverlayLabel = apiRef.current.getLocaleText('noResultsOverlayLabel');\n  return /*#__PURE__*/_jsx(GridOverlay, _extends({\n    ref: ref\n  }, props, {\n    children: noResultsOverlayLabel\n  }));\n});","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport _objectWithoutPropertiesLoose from \"@babel/runtime/helpers/esm/objectWithoutPropertiesLoose\";\nconst _excluded = [\"sortingOrder\"];\nimport * as React from 'react';\nimport { useGridRootProps } from \"../../hooks/utils/useGridRootProps.js\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nexport const GridColumnUnsortedIcon = /*#__PURE__*/React.memo(function GridColumnHeaderSortIcon(props) {\n  const {\n      sortingOrder\n    } = props,\n    other = _objectWithoutPropertiesLoose(props, _excluded);\n  const rootProps = useGridRootProps();\n  const [nextSortDirection] = sortingOrder;\n  const Icon = nextSortDirection === 'asc' ? rootProps.slots.columnSortedAscendingIcon : rootProps.slots.columnSortedDescendingIcon;\n  return Icon ? /*#__PURE__*/_jsx(Icon, _extends({}, other)) : null;\n});","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport _objectWithoutPropertiesLoose from \"@babel/runtime/helpers/esm/objectWithoutPropertiesLoose\";\nconst _excluded = [\"native\"];\nimport * as React from 'react';\nimport MUIMenuItem from '@mui/material/MenuItem';\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nexport default function MUISelectOption(_ref) {\n  let {\n      native\n    } = _ref,\n    props = _objectWithoutPropertiesLoose(_ref, _excluded);\n  if (native) {\n    return /*#__PURE__*/_jsx(\"option\", _extends({}, props));\n  }\n  return /*#__PURE__*/_jsx(MUIMenuItem, _extends({}, props));\n}","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport MUICheckbox from '@mui/material/Checkbox';\nimport MUITextField from '@mui/material/TextField';\nimport MUIFormControl from '@mui/material/FormControl';\nimport MUISelect from '@mui/material/Select';\nimport MUIButton from '@mui/material/Button';\nimport MUIIconButton from '@mui/material/IconButton';\nimport MUIInputAdornment from '@mui/material/InputAdornment';\nimport MUITooltip from '@mui/material/Tooltip';\nimport MUIPopper from '@mui/material/Popper';\nimport MUIInputLabel from '@mui/material/InputLabel';\nimport MUIChip from '@mui/material/Chip';\nimport { GridColumnUnsortedIcon } from \"./icons/GridColumnUnsortedIcon.js\";\nimport { GridAddIcon, GridArrowDownwardIcon, GridArrowUpwardIcon, GridCheckIcon, GridCloseIcon, GridColumnIcon, GridDragIcon, GridExpandMoreIcon, GridFilterAltIcon, GridFilterListIcon, GridKeyboardArrowRight, GridMoreVertIcon, GridRemoveIcon, GridSaveAltIcon, GridSearchIcon, GridSeparatorIcon, GridTableRowsIcon, GridTripleDotsVerticalIcon, GridViewHeadlineIcon, GridViewStreamIcon, GridVisibilityOffIcon, GridViewColumnIcon, GridClearIcon, GridLoadIcon, GridDeleteForeverIcon } from \"./icons/index.js\";\nimport MUISelectOption from \"./components/MUISelectOption.js\";\nconst iconSlots = {\n  booleanCellTrueIcon: GridCheckIcon,\n  booleanCellFalseIcon: GridCloseIcon,\n  columnMenuIcon: GridTripleDotsVerticalIcon,\n  openFilterButtonIcon: GridFilterListIcon,\n  filterPanelDeleteIcon: GridCloseIcon,\n  columnFilteredIcon: GridFilterAltIcon,\n  columnSelectorIcon: GridColumnIcon,\n  columnUnsortedIcon: GridColumnUnsortedIcon,\n  columnSortedAscendingIcon: GridArrowUpwardIcon,\n  columnSortedDescendingIcon: GridArrowDownwardIcon,\n  columnResizeIcon: GridSeparatorIcon,\n  densityCompactIcon: GridViewHeadlineIcon,\n  densityStandardIcon: GridTableRowsIcon,\n  densityComfortableIcon: GridViewStreamIcon,\n  exportIcon: GridSaveAltIcon,\n  moreActionsIcon: GridMoreVertIcon,\n  treeDataCollapseIcon: GridExpandMoreIcon,\n  treeDataExpandIcon: GridKeyboardArrowRight,\n  groupingCriteriaCollapseIcon: GridExpandMoreIcon,\n  groupingCriteriaExpandIcon: GridKeyboardArrowRight,\n  detailPanelExpandIcon: GridAddIcon,\n  detailPanelCollapseIcon: GridRemoveIcon,\n  rowReorderIcon: GridDragIcon,\n  quickFilterIcon: GridSearchIcon,\n  quickFilterClearIcon: GridCloseIcon,\n  columnMenuHideIcon: GridVisibilityOffIcon,\n  columnMenuSortAscendingIcon: GridArrowUpwardIcon,\n  columnMenuSortDescendingIcon: GridArrowDownwardIcon,\n  columnMenuFilterIcon: GridFilterAltIcon,\n  columnMenuManageColumnsIcon: GridViewColumnIcon,\n  columnMenuClearIcon: GridClearIcon,\n  loadIcon: GridLoadIcon,\n  filterPanelAddIcon: GridAddIcon,\n  filterPanelRemoveAllIcon: GridDeleteForeverIcon,\n  columnReorderIcon: GridDragIcon\n};\nconst materialSlots = _extends({}, iconSlots, {\n  baseCheckbox: MUICheckbox,\n  baseTextField: MUITextField,\n  baseFormControl: MUIFormControl,\n  baseSelect: MUISelect,\n  baseButton: MUIButton,\n  baseIconButton: MUIIconButton,\n  baseInputAdornment: MUIInputAdornment,\n  baseTooltip: MUITooltip,\n  basePopper: MUIPopper,\n  baseInputLabel: MUIInputLabel,\n  baseSelectOption: MUISelectOption,\n  baseChip: MUIChip\n});\nexport default materialSlots;","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport { GridSkeletonCell, GridColumnsPanel, GridFilterPanel, GridFooter, GridLoadingOverlay, GridNoRowsOverlay, GridPagination, GridPanel, GridRow, GridColumnHeaderFilterIconButton, GridRowCount, GridColumnsManagement, GridColumnHeaderSortIcon } from \"../components/index.js\";\nimport { GridCell } from \"../components/cell/GridCell.js\";\nimport { GridColumnHeaders } from \"../components/GridColumnHeaders.js\";\nimport { GridColumnMenu } from \"../components/menu/columnMenu/GridColumnMenu.js\";\nimport { GridDetailPanels } from \"../components/GridDetailPanels.js\";\nimport { GridPinnedRows } from \"../components/GridPinnedRows.js\";\nimport { GridNoResultsOverlay } from \"../components/GridNoResultsOverlay.js\";\nimport materialSlots from \"../material/index.js\";\n\n// TODO: camelCase these key. It's a private helper now.\n// Remove then need to call `uncapitalizeObjectKeys`.\nexport const DATA_GRID_DEFAULT_SLOTS_COMPONENTS = _extends({}, materialSlots, {\n  cell: GridCell,\n  skeletonCell: GridSkeletonCell,\n  columnHeaderFilterIconButton: GridColumnHeaderFilterIconButton,\n  columnHeaderSortIcon: GridColumnHeaderSortIcon,\n  columnMenu: GridColumnMenu,\n  columnHeaders: GridColumnHeaders,\n  detailPanels: GridDetailPanels,\n  footer: GridFooter,\n  footerRowCount: GridRowCount,\n  toolbar: null,\n  pinnedRows: GridPinnedRows,\n  loadingOverlay: GridLoadingOverlay,\n  noResultsOverlay: GridNoResultsOverlay,\n  noRowsOverlay: GridNoRowsOverlay,\n  pagination: GridPagination,\n  filterPanel: GridFilterPanel,\n  columnsPanel: GridColumnsPanel,\n  columnsManagement: GridColumnsManagement,\n  panel: GridPanel,\n  row: GridRow\n});","// eslint-disable-next-line @typescript-eslint/no-unused-vars\nexport function GridDetailPanels(_) {\n  return null;\n}","// eslint-disable-next-line @typescript-eslint/no-unused-vars\nexport function GridPinnedRows(_) {\n  return null;\n}","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport * as React from 'react';\nimport { useThemeProps } from '@mui/material/styles';\nimport { GRID_DEFAULT_LOCALE_TEXT } from \"../constants/index.js\";\nimport { DATA_GRID_DEFAULT_SLOTS_COMPONENTS } from \"../constants/defaultGridSlotsComponents.js\";\nimport { GridEditModes } from \"../models/index.js\";\nimport { computeSlots, useProps } from \"../internals/utils/index.js\";\nconst DATA_GRID_FORCED_PROPS = {\n  disableMultipleColumnsFiltering: true,\n  disableMultipleColumnsSorting: true,\n  throttleRowsMs: undefined,\n  hideFooterRowCount: false,\n  pagination: true,\n  checkboxSelectionVisibleOnly: false,\n  disableColumnReorder: true,\n  keepColumnPositionIfDraggedOutside: false,\n  signature: 'DataGrid'\n};\n\n/**\n * The default values of `DataGridPropsWithDefaultValues` to inject in the props of DataGrid.\n */\nexport const DATA_GRID_PROPS_DEFAULT_VALUES = {\n  autoHeight: false,\n  autoPageSize: false,\n  autosizeOnMount: false,\n  checkboxSelection: false,\n  checkboxSelectionVisibleOnly: false,\n  clipboardCopyCellDelimiter: '\\t',\n  columnBufferPx: 150,\n  columnHeaderHeight: 56,\n  disableAutosize: false,\n  disableColumnFilter: false,\n  disableColumnMenu: false,\n  disableColumnReorder: false,\n  disableColumnResize: false,\n  disableColumnSelector: false,\n  disableColumnSorting: false,\n  disableDensitySelector: false,\n  disableEval: false,\n  disableMultipleColumnsFiltering: false,\n  disableMultipleColumnsSorting: false,\n  disableMultipleRowSelection: false,\n  disableRowSelectionOnClick: false,\n  disableVirtualization: false,\n  editMode: GridEditModes.Cell,\n  filterDebounceMs: 150,\n  filterMode: 'client',\n  hideFooter: false,\n  hideFooterPagination: false,\n  hideFooterRowCount: false,\n  hideFooterSelectedRowCount: false,\n  ignoreDiacritics: false,\n  ignoreValueFormatterDuringExport: false,\n  // TODO v8: Update to 'select'\n  indeterminateCheckboxAction: 'deselect',\n  keepColumnPositionIfDraggedOutside: false,\n  keepNonExistentRowsSelected: false,\n  loading: false,\n  logger: console,\n  logLevel: process.env.NODE_ENV === 'production' ? 'error' : 'warn',\n  pageSizeOptions: [25, 50, 100],\n  pagination: false,\n  paginationMode: 'client',\n  resizeThrottleMs: 60,\n  rowBufferPx: 150,\n  rowHeight: 52,\n  rowPositionsDebounceMs: 166,\n  rows: [],\n  rowSelection: true,\n  rowSpacingType: 'margin',\n  showCellVerticalBorder: false,\n  showColumnVerticalBorder: false,\n  sortingMode: 'client',\n  sortingOrder: ['asc', 'desc', null],\n  throttleRowsMs: 0,\n  unstable_rowSpanning: false\n};\nconst defaultSlots = DATA_GRID_DEFAULT_SLOTS_COMPONENTS;\nexport const useDataGridProps = inProps => {\n  const themedProps = useProps(\n  // eslint-disable-next-line material-ui/mui-name-matches-component-name\n  useThemeProps({\n    props: inProps,\n    name: 'MuiDataGrid'\n  }));\n  const localeText = React.useMemo(() => _extends({}, GRID_DEFAULT_LOCALE_TEXT, themedProps.localeText), [themedProps.localeText]);\n  const slots = React.useMemo(() => computeSlots({\n    defaultSlots,\n    slots: themedProps.slots\n  }), [themedProps.slots]);\n  const injectDefaultProps = React.useMemo(() => {\n    return Object.keys(DATA_GRID_PROPS_DEFAULT_VALUES).reduce((acc, key) => {\n      // @ts-ignore\n      acc[key] = themedProps[key] ?? DATA_GRID_PROPS_DEFAULT_VALUES[key];\n      return acc;\n    }, {});\n  }, [themedProps]);\n  return React.useMemo(() => _extends({}, themedProps, injectDefaultProps, {\n    localeText,\n    slots\n  }, DATA_GRID_FORCED_PROPS), [themedProps, localeText, slots, injectDefaultProps]);\n};","import * as React from 'react';\n\n/** Gathers props for the root element into a single `.forwardedProps` field */\nfunction groupForwardedProps(props) {\n  const keys = Object.keys(props);\n  if (!keys.some(key => key.startsWith('aria-') || key.startsWith('data-'))) {\n    return props;\n  }\n  const newProps = {};\n  const forwardedProps = props.forwardedProps ?? {};\n  for (let i = 0; i < keys.length; i += 1) {\n    const key = keys[i];\n    if (key.startsWith('aria-') || key.startsWith('data-')) {\n      forwardedProps[key] = props[key];\n    } else {\n      newProps[key] = props[key];\n    }\n  }\n  newProps.forwardedProps = forwardedProps;\n  return newProps;\n}\nexport function useProps(allProps) {\n  return React.useMemo(() => groupForwardedProps(allProps), [allProps]);\n}","import _extends from \"@babel/runtime/helpers/esm/extends\";\nexport function computeSlots({\n  defaultSlots,\n  slots\n}) {\n  const overrides = slots;\n  if (!overrides || Object.keys(overrides).length === 0) {\n    return defaultSlots;\n  }\n  const result = _extends({}, defaultSlots);\n  Object.keys(overrides).forEach(key => {\n    const k = key;\n    if (overrides[k] !== undefined) {\n      result[k] = overrides[k];\n    }\n  });\n  return result;\n}","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport { GRID_STRING_COL_DEF } from \"./gridStringColDef.js\";\nimport { renderActionsCell } from \"../components/cell/GridActionsCell.js\";\nexport const GRID_ACTIONS_COLUMN_TYPE = 'actions';\nexport const GRID_ACTIONS_COL_DEF = _extends({}, GRID_STRING_COL_DEF, {\n  sortable: false,\n  filterable: false,\n  // @ts-ignore\n  aggregable: false,\n  width: 100,\n  display: 'flex',\n  align: 'center',\n  headerAlign: 'center',\n  headerName: '',\n  disableColumnMenu: true,\n  disableExport: true,\n  renderCell: renderActionsCell,\n  getApplyQuickFilterFn: undefined\n});","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport { GRID_STRING_COL_DEF } from \"./gridStringColDef.js\";\nimport { renderBooleanCell } from \"../components/cell/GridBooleanCell.js\";\nimport { renderEditBooleanCell } from \"../components/cell/GridEditBooleanCell.js\";\nimport { gridNumberComparator } from \"../hooks/features/sorting/gridSortingUtils.js\";\nimport { getGridBooleanOperators } from \"./gridBooleanOperators.js\";\nconst gridBooleanFormatter = (value, row, column, apiRef) => {\n  return value ? apiRef.current.getLocaleText('booleanCellTrueLabel') : apiRef.current.getLocaleText('booleanCellFalseLabel');\n};\nconst stringToBoolean = value => {\n  switch (value.toLowerCase().trim()) {\n    case 'true':\n    case 'yes':\n    case '1':\n      return true;\n    case 'false':\n    case 'no':\n    case '0':\n    case 'null':\n    case 'undefined':\n      return false;\n    default:\n      return undefined;\n  }\n};\nexport const GRID_BOOLEAN_COL_DEF = _extends({}, GRID_STRING_COL_DEF, {\n  type: 'boolean',\n  display: 'flex',\n  align: 'center',\n  headerAlign: 'center',\n  renderCell: renderBooleanCell,\n  renderEditCell: renderEditBooleanCell,\n  sortComparator: gridNumberComparator,\n  valueFormatter: gridBooleanFormatter,\n  filterOperators: getGridBooleanOperators(),\n  getApplyQuickFilterFn: undefined,\n  // @ts-ignore\n  aggregable: false,\n  // @ts-ignore\n  pastedValueParser: value => stringToBoolean(value)\n});","import { GridFilterInputBoolean } from \"../components/panel/filterPanel/GridFilterInputBoolean.js\";\nexport const getGridBooleanOperators = () => [{\n  value: 'is',\n  getApplyFilterFn: filterItem => {\n    if (!filterItem.value) {\n      return null;\n    }\n    const valueAsBoolean = String(filterItem.value) === 'true';\n    return value => {\n      return Boolean(value) === valueAsBoolean;\n    };\n  },\n  InputComponent: GridFilterInputBoolean\n}];","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport * as React from 'react';\nimport { GridCellCheckboxRenderer } from \"../components/columnSelection/GridCellCheckboxRenderer.js\";\nimport { GridHeaderCheckbox } from \"../components/columnSelection/GridHeaderCheckbox.js\";\nimport { selectedIdsLookupSelector } from \"../hooks/features/rowSelection/gridRowSelectionSelector.js\";\nimport { GRID_BOOLEAN_COL_DEF } from \"./gridBooleanColDef.js\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nexport const GRID_CHECKBOX_SELECTION_FIELD = '__check__';\nexport const GRID_CHECKBOX_SELECTION_COL_DEF = _extends({}, GRID_BOOLEAN_COL_DEF, {\n  type: 'custom',\n  field: GRID_CHECKBOX_SELECTION_FIELD,\n  width: 50,\n  resizable: false,\n  sortable: false,\n  filterable: false,\n  // @ts-ignore\n  aggregable: false,\n  disableColumnMenu: true,\n  disableReorder: true,\n  disableExport: true,\n  getApplyQuickFilterFn: undefined,\n  display: 'flex',\n  valueGetter: (value, row, column, apiRef) => {\n    const selectionLookup = selectedIdsLookupSelector(apiRef);\n    const rowId = apiRef.current.getRowId(row);\n    return selectionLookup[rowId] !== undefined;\n  },\n  renderHeader: params => /*#__PURE__*/_jsx(GridHeaderCheckbox, _extends({}, params)),\n  renderCell: params => /*#__PURE__*/_jsx(GridCellCheckboxRenderer, _extends({}, params))\n});","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport { gridDateComparator } from \"../hooks/features/sorting/gridSortingUtils.js\";\nimport { getGridDateOperators } from \"./gridDateOperators.js\";\nimport { GRID_STRING_COL_DEF } from \"./gridStringColDef.js\";\nimport { renderEditDateCell } from \"../components/cell/GridEditDateCell.js\";\nfunction throwIfNotDateObject({\n  value,\n  columnType,\n  rowId,\n  field\n}) {\n  if (!(value instanceof Date)) {\n    throw new Error([`MUI X: \\`${columnType}\\` column type only accepts \\`Date\\` objects as values.`, 'Use `valueGetter` to transform the value into a `Date` object.', `Row ID: ${rowId}, field: \"${field}\".`].join('\\n'));\n  }\n}\nexport const gridDateFormatter = (value, row, column, apiRef) => {\n  if (!value) {\n    return '';\n  }\n  const rowId = apiRef.current.getRowId(row);\n  throwIfNotDateObject({\n    value,\n    columnType: 'date',\n    rowId,\n    field: column.field\n  });\n  return value.toLocaleDateString();\n};\nexport const gridDateTimeFormatter = (value, row, column, apiRef) => {\n  if (!value) {\n    return '';\n  }\n  const rowId = apiRef.current.getRowId(row);\n  throwIfNotDateObject({\n    value,\n    columnType: 'dateTime',\n    rowId,\n    field: column.field\n  });\n  return value.toLocaleString();\n};\nexport const GRID_DATE_COL_DEF = _extends({}, GRID_STRING_COL_DEF, {\n  type: 'date',\n  sortComparator: gridDateComparator,\n  valueFormatter: gridDateFormatter,\n  filterOperators: getGridDateOperators(),\n  renderEditCell: renderEditDateCell,\n  // @ts-ignore\n  pastedValueParser: value => new Date(value)\n});\nexport const GRID_DATETIME_COL_DEF = _extends({}, GRID_STRING_COL_DEF, {\n  type: 'dateTime',\n  sortComparator: gridDateComparator,\n  valueFormatter: gridDateTimeFormatter,\n  filterOperators: getGridDateOperators(true),\n  renderEditCell: renderEditDateCell,\n  // @ts-ignore\n  pastedValueParser: value => new Date(value)\n});","import { GridFilterInputDate } from \"../components/panel/filterPanel/GridFilterInputDate.js\";\nfunction buildApplyFilterFn(filterItem, compareFn, showTime, keepHours) {\n  if (!filterItem.value) {\n    return null;\n  }\n  const date = new Date(filterItem.value);\n  if (showTime) {\n    date.setSeconds(0, 0);\n  } else {\n    // In GMT-X timezone, the date will be one day behind.\n    // For 2022-08-16:\n    // GMT+2: Tue Aug 16 2022 02:00:00 GMT+0200\n    // GMT-4: Mon Aug 15 2022 20:00:00 GMT-0400\n    //\n    // We need to add the offset before resetting the hours.\n    date.setMinutes(date.getMinutes() + date.getTimezoneOffset());\n    date.setHours(0, 0, 0, 0);\n  }\n  const time = date.getTime();\n  return value => {\n    if (!value) {\n      return false;\n    }\n    if (keepHours) {\n      return compareFn(value.getTime(), time);\n    }\n\n    // Make a copy of the date to not reset the hours in the original object\n    const dateCopy = new Date(value);\n    if (showTime) {\n      dateCopy.setSeconds(0, 0);\n    } else {\n      dateCopy.setHours(0, 0, 0, 0);\n    }\n    return compareFn(dateCopy.getTime(), time);\n  };\n}\nexport const getGridDateOperators = showTime => [{\n  value: 'is',\n  getApplyFilterFn: filterItem => {\n    return buildApplyFilterFn(filterItem, (value1, value2) => value1 === value2, showTime);\n  },\n  InputComponent: GridFilterInputDate,\n  InputComponentProps: {\n    type: showTime ? 'datetime-local' : 'date'\n  }\n}, {\n  value: 'not',\n  getApplyFilterFn: filterItem => {\n    return buildApplyFilterFn(filterItem, (value1, value2) => value1 !== value2, showTime);\n  },\n  InputComponent: GridFilterInputDate,\n  InputComponentProps: {\n    type: showTime ? 'datetime-local' : 'date'\n  }\n}, {\n  value: 'after',\n  getApplyFilterFn: filterItem => {\n    return buildApplyFilterFn(filterItem, (value1, value2) => value1 > value2, showTime);\n  },\n  InputComponent: GridFilterInputDate,\n  InputComponentProps: {\n    type: showTime ? 'datetime-local' : 'date'\n  }\n}, {\n  value: 'onOrAfter',\n  getApplyFilterFn: filterItem => {\n    return buildApplyFilterFn(filterItem, (value1, value2) => value1 >= value2, showTime);\n  },\n  InputComponent: GridFilterInputDate,\n  InputComponentProps: {\n    type: showTime ? 'datetime-local' : 'date'\n  }\n}, {\n  value: 'before',\n  getApplyFilterFn: filterItem => {\n    return buildApplyFilterFn(filterItem, (value1, value2) => value1 < value2, showTime, !showTime);\n  },\n  InputComponent: GridFilterInputDate,\n  InputComponentProps: {\n    type: showTime ? 'datetime-local' : 'date'\n  }\n}, {\n  value: 'onOrBefore',\n  getApplyFilterFn: filterItem => {\n    return buildApplyFilterFn(filterItem, (value1, value2) => value1 <= value2, showTime);\n  },\n  InputComponent: GridFilterInputDate,\n  InputComponentProps: {\n    type: showTime ? 'datetime-local' : 'date'\n  }\n}, {\n  value: 'isEmpty',\n  getApplyFilterFn: () => {\n    return value => {\n      return value == null;\n    };\n  },\n  requiresFilterValue: false\n}, {\n  value: 'isNotEmpty',\n  getApplyFilterFn: () => {\n    return value => {\n      return value != null;\n    };\n  },\n  requiresFilterValue: false\n}];","import { GRID_STRING_COL_DEF } from \"./gridStringColDef.js\";\nimport { GRID_NUMERIC_COL_DEF } from \"./gridNumericColDef.js\";\nimport { GRID_DATE_COL_DEF, GRID_DATETIME_COL_DEF } from \"./gridDateColDef.js\";\nimport { GRID_BOOLEAN_COL_DEF } from \"./gridBooleanColDef.js\";\nimport { GRID_SINGLE_SELECT_COL_DEF } from \"./gridSingleSelectColDef.js\";\nimport { GRID_ACTIONS_COL_DEF, GRID_ACTIONS_COLUMN_TYPE } from \"./gridActionsColDef.js\";\nexport const DEFAULT_GRID_COL_TYPE_KEY = 'string';\nexport const getGridDefaultColumnTypes = () => {\n  const nativeColumnTypes = {\n    string: GRID_STRING_COL_DEF,\n    number: GRID_NUMERIC_COL_DEF,\n    date: GRID_DATE_COL_DEF,\n    dateTime: GRID_DATETIME_COL_DEF,\n    boolean: GRID_BOOLEAN_COL_DEF,\n    singleSelect: GRID_SINGLE_SELECT_COL_DEF,\n    [GRID_ACTIONS_COLUMN_TYPE]: GRID_ACTIONS_COL_DEF,\n    custom: GRID_STRING_COL_DEF\n  };\n  return nativeColumnTypes;\n};","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport { gridNumberComparator } from \"../hooks/features/sorting/gridSortingUtils.js\";\nimport { isNumber } from \"../utils/utils.js\";\nimport { getGridNumericOperators, getGridNumericQuickFilterFn } from \"./gridNumericOperators.js\";\nimport { GRID_STRING_COL_DEF } from \"./gridStringColDef.js\";\nexport const GRID_NUMERIC_COL_DEF = _extends({}, GRID_STRING_COL_DEF, {\n  type: 'number',\n  align: 'right',\n  headerAlign: 'right',\n  sortComparator: gridNumberComparator,\n  valueParser: value => value === '' ? null : Number(value),\n  valueFormatter: value => isNumber(value) ? value.toLocaleString() : value || '',\n  filterOperators: getGridNumericOperators(),\n  getApplyQuickFilterFn: getGridNumericQuickFilterFn\n});","import { GridFilterInputValue } from \"../components/panel/filterPanel/GridFilterInputValue.js\";\nimport { GridFilterInputMultipleValue } from \"../components/panel/filterPanel/GridFilterInputMultipleValue.js\";\nconst parseNumericValue = value => {\n  if (value == null) {\n    return null;\n  }\n  return Number(value);\n};\nexport const getGridNumericQuickFilterFn = value => {\n  if (value == null || Number.isNaN(value) || value === '') {\n    return null;\n  }\n  return columnValue => {\n    return parseNumericValue(columnValue) === parseNumericValue(value);\n  };\n};\nexport const getGridNumericOperators = () => [{\n  value: '=',\n  getApplyFilterFn: filterItem => {\n    if (filterItem.value == null || Number.isNaN(filterItem.value)) {\n      return null;\n    }\n    return value => {\n      return parseNumericValue(value) === filterItem.value;\n    };\n  },\n  InputComponent: GridFilterInputValue,\n  InputComponentProps: {\n    type: 'number'\n  }\n}, {\n  value: '!=',\n  getApplyFilterFn: filterItem => {\n    if (filterItem.value == null || Number.isNaN(filterItem.value)) {\n      return null;\n    }\n    return value => {\n      return parseNumericValue(value) !== filterItem.value;\n    };\n  },\n  InputComponent: GridFilterInputValue,\n  InputComponentProps: {\n    type: 'number'\n  }\n}, {\n  value: '>',\n  getApplyFilterFn: filterItem => {\n    if (filterItem.value == null || Number.isNaN(filterItem.value)) {\n      return null;\n    }\n    return value => {\n      if (value == null) {\n        return false;\n      }\n      return parseNumericValue(value) > filterItem.value;\n    };\n  },\n  InputComponent: GridFilterInputValue,\n  InputComponentProps: {\n    type: 'number'\n  }\n}, {\n  value: '>=',\n  getApplyFilterFn: filterItem => {\n    if (filterItem.value == null || Number.isNaN(filterItem.value)) {\n      return null;\n    }\n    return value => {\n      if (value == null) {\n        return false;\n      }\n      return parseNumericValue(value) >= filterItem.value;\n    };\n  },\n  InputComponent: GridFilterInputValue,\n  InputComponentProps: {\n    type: 'number'\n  }\n}, {\n  value: '<',\n  getApplyFilterFn: filterItem => {\n    if (filterItem.value == null || Number.isNaN(filterItem.value)) {\n      return null;\n    }\n    return value => {\n      if (value == null) {\n        return false;\n      }\n      return parseNumericValue(value) < filterItem.value;\n    };\n  },\n  InputComponent: GridFilterInputValue,\n  InputComponentProps: {\n    type: 'number'\n  }\n}, {\n  value: '<=',\n  getApplyFilterFn: filterItem => {\n    if (filterItem.value == null || Number.isNaN(filterItem.value)) {\n      return null;\n    }\n    return value => {\n      if (value == null) {\n        return false;\n      }\n      return parseNumericValue(value) <= filterItem.value;\n    };\n  },\n  InputComponent: GridFilterInputValue,\n  InputComponentProps: {\n    type: 'number'\n  }\n}, {\n  value: 'isEmpty',\n  getApplyFilterFn: () => {\n    return value => {\n      return value == null;\n    };\n  },\n  requiresFilterValue: false\n}, {\n  value: 'isNotEmpty',\n  getApplyFilterFn: () => {\n    return value => {\n      return value != null;\n    };\n  },\n  requiresFilterValue: false\n}, {\n  value: 'isAnyOf',\n  getApplyFilterFn: filterItem => {\n    if (!Array.isArray(filterItem.value) || filterItem.value.length === 0) {\n      return null;\n    }\n    return value => {\n      return value != null && filterItem.value.includes(Number(value));\n    };\n  },\n  InputComponent: GridFilterInputMultipleValue,\n  InputComponentProps: {\n    type: 'number'\n  }\n}];","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport { GRID_STRING_COL_DEF } from \"./gridStringColDef.js\";\nimport { renderEditSingleSelectCell } from \"../components/cell/GridEditSingleSelectCell.js\";\nimport { getGridSingleSelectOperators } from \"./gridSingleSelectOperators.js\";\nimport { getValueOptions, isSingleSelectColDef } from \"../components/panel/filterPanel/filterPanelUtils.js\";\nimport { isObject } from \"../utils/utils.js\";\nconst isArrayOfObjects = options => {\n  return typeof options[0] === 'object';\n};\nconst defaultGetOptionValue = value => {\n  return isObject(value) ? value.value : value;\n};\nconst defaultGetOptionLabel = value => {\n  return isObject(value) ? value.label : String(value);\n};\nexport const GRID_SINGLE_SELECT_COL_DEF = _extends({}, GRID_STRING_COL_DEF, {\n  type: 'singleSelect',\n  getOptionLabel: defaultGetOptionLabel,\n  getOptionValue: defaultGetOptionValue,\n  valueFormatter(value, row, colDef, apiRef) {\n    // const { id, field, value, api } = params;\n    const rowId = apiRef.current.getRowId(row);\n    if (!isSingleSelectColDef(colDef)) {\n      return '';\n    }\n    const valueOptions = getValueOptions(colDef, {\n      id: rowId,\n      row\n    });\n    if (value == null) {\n      return '';\n    }\n    if (!valueOptions) {\n      return value;\n    }\n    if (!isArrayOfObjects(valueOptions)) {\n      return colDef.getOptionLabel(value);\n    }\n    const valueOption = valueOptions.find(option => colDef.getOptionValue(option) === value);\n    return valueOption ? colDef.getOptionLabel(valueOption) : '';\n  },\n  renderEditCell: renderEditSingleSelectCell,\n  filterOperators: getGridSingleSelectOperators(),\n  // @ts-ignore\n  pastedValueParser: (value, row, column) => {\n    const colDef = column;\n    const valueOptions = getValueOptions(colDef) || [];\n    const getOptionValue = colDef.getOptionValue;\n    const valueOption = valueOptions.find(option => {\n      if (getOptionValue(option) === value) {\n        return true;\n      }\n      return false;\n    });\n    if (valueOption) {\n      return value;\n    }\n    // do not paste the value if it is not in the valueOptions\n    return undefined;\n  }\n});","import { GridFilterInputSingleSelect } from \"../components/panel/filterPanel/GridFilterInputSingleSelect.js\";\nimport { GridFilterInputMultipleSingleSelect } from \"../components/panel/filterPanel/GridFilterInputMultipleSingleSelect.js\";\nimport { isObject } from \"../utils/utils.js\";\nconst parseObjectValue = value => {\n  if (value == null || !isObject(value)) {\n    return value;\n  }\n  return value.value;\n};\nexport const getGridSingleSelectOperators = () => [{\n  value: 'is',\n  getApplyFilterFn: filterItem => {\n    if (filterItem.value == null || filterItem.value === '') {\n      return null;\n    }\n    return value => parseObjectValue(value) === parseObjectValue(filterItem.value);\n  },\n  InputComponent: GridFilterInputSingleSelect\n}, {\n  value: 'not',\n  getApplyFilterFn: filterItem => {\n    if (filterItem.value == null || filterItem.value === '') {\n      return null;\n    }\n    return value => parseObjectValue(value) !== parseObjectValue(filterItem.value);\n  },\n  InputComponent: GridFilterInputSingleSelect\n}, {\n  value: 'isAnyOf',\n  getApplyFilterFn: filterItem => {\n    if (!Array.isArray(filterItem.value) || filterItem.value.length === 0) {\n      return null;\n    }\n    const filterItemValues = filterItem.value.map(parseObjectValue);\n    return value => filterItemValues.includes(parseObjectValue(value));\n  },\n  InputComponent: GridFilterInputMultipleSingleSelect\n}];","import { renderEditInputCell } from \"../components/cell/GridEditInputCell.js\";\nimport { gridStringOrNumberComparator } from \"../hooks/features/sorting/gridSortingUtils.js\";\nimport { getGridStringOperators, getGridStringQuickFilterFn } from \"./gridStringOperators.js\";\n\n/**\n * TODO: Move pro and premium properties outside of this Community file\n */\nexport const GRID_STRING_COL_DEF = {\n  width: 100,\n  minWidth: 50,\n  maxWidth: Infinity,\n  hideable: true,\n  sortable: true,\n  resizable: true,\n  filterable: true,\n  groupable: true,\n  pinnable: true,\n  // @ts-ignore\n  aggregable: true,\n  editable: false,\n  sortComparator: gridStringOrNumberComparator,\n  type: 'string',\n  align: 'left',\n  filterOperators: getGridStringOperators(),\n  renderEditCell: renderEditInputCell,\n  getApplyQuickFilterFn: getGridStringQuickFilterFn\n};","import { GridFilterInputValue } from \"../components/panel/filterPanel/GridFilterInputValue.js\";\nimport { escapeRegExp } from \"../utils/utils.js\";\nimport { GridFilterInputMultipleValue } from \"../components/panel/filterPanel/GridFilterInputMultipleValue.js\";\nimport { removeDiacritics } from \"../hooks/features/filter/gridFilterUtils.js\";\nexport const getGridStringQuickFilterFn = value => {\n  if (!value) {\n    return null;\n  }\n  const filterRegex = new RegExp(escapeRegExp(value), 'i');\n  return (_, row, column, apiRef) => {\n    let columnValue = apiRef.current.getRowFormattedValue(row, column);\n    if (apiRef.current.ignoreDiacritics) {\n      columnValue = removeDiacritics(columnValue);\n    }\n    return columnValue != null ? filterRegex.test(columnValue.toString()) : false;\n  };\n};\nconst createContainsFilterFn = (disableTrim, negate) => filterItem => {\n  if (!filterItem.value) {\n    return null;\n  }\n  const trimmedValue = disableTrim ? filterItem.value : filterItem.value.trim();\n  const filterRegex = new RegExp(escapeRegExp(trimmedValue), 'i');\n  return value => {\n    if (value == null) {\n      return negate;\n    }\n    const matches = filterRegex.test(String(value));\n    return negate ? !matches : matches;\n  };\n};\nconst createEqualityFilterFn = (disableTrim, negate) => filterItem => {\n  if (!filterItem.value) {\n    return null;\n  }\n  const trimmedValue = disableTrim ? filterItem.value : filterItem.value.trim();\n  const collator = new Intl.Collator(undefined, {\n    sensitivity: 'base',\n    usage: 'search'\n  });\n  return value => {\n    if (value == null) {\n      return negate;\n    }\n    const isEqual = collator.compare(trimmedValue, value.toString()) === 0;\n    return negate ? !isEqual : isEqual;\n  };\n};\nconst createEmptyFilterFn = negate => () => {\n  return value => {\n    const isEmpty = value === '' || value == null;\n    return negate ? !isEmpty : isEmpty;\n  };\n};\nexport const getGridStringOperators = (disableTrim = false) => [{\n  value: 'contains',\n  getApplyFilterFn: createContainsFilterFn(disableTrim, false),\n  InputComponent: GridFilterInputValue\n}, {\n  value: 'doesNotContain',\n  getApplyFilterFn: createContainsFilterFn(disableTrim, true),\n  InputComponent: GridFilterInputValue\n}, {\n  value: 'equals',\n  getApplyFilterFn: createEqualityFilterFn(disableTrim, false),\n  InputComponent: GridFilterInputValue\n}, {\n  value: 'doesNotEqual',\n  getApplyFilterFn: createEqualityFilterFn(disableTrim, true),\n  InputComponent: GridFilterInputValue\n}, {\n  value: 'startsWith',\n  getApplyFilterFn: filterItem => {\n    if (!filterItem.value) {\n      return null;\n    }\n    const filterItemValue = disableTrim ? filterItem.value : filterItem.value.trim();\n    const filterRegex = new RegExp(`^${escapeRegExp(filterItemValue)}.*$`, 'i');\n    return value => {\n      return value != null ? filterRegex.test(value.toString()) : false;\n    };\n  },\n  InputComponent: GridFilterInputValue\n}, {\n  value: 'endsWith',\n  getApplyFilterFn: filterItem => {\n    if (!filterItem.value) {\n      return null;\n    }\n    const filterItemValue = disableTrim ? filterItem.value : filterItem.value.trim();\n    const filterRegex = new RegExp(`.*${escapeRegExp(filterItemValue)}$`, 'i');\n    return value => {\n      return value != null ? filterRegex.test(value.toString()) : false;\n    };\n  },\n  InputComponent: GridFilterInputValue\n}, {\n  value: 'isEmpty',\n  getApplyFilterFn: createEmptyFilterFn(false),\n  requiresFilterValue: false\n}, {\n  value: 'isNotEmpty',\n  getApplyFilterFn: createEmptyFilterFn(true),\n  requiresFilterValue: false\n}, {\n  value: 'isAnyOf',\n  getApplyFilterFn: filterItem => {\n    if (!Array.isArray(filterItem.value) || filterItem.value.length === 0) {\n      return null;\n    }\n    const filterItemValue = disableTrim ? filterItem.value : filterItem.value.map(val => val.trim());\n    const collator = new Intl.Collator(undefined, {\n      sensitivity: 'base',\n      usage: 'search'\n    });\n    return value => value != null ? filterItemValue.some(filterValue => {\n      return collator.compare(filterValue, value.toString() || '') === 0;\n    }) : false;\n  },\n  InputComponent: GridFilterInputMultipleValue\n}];","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport * as React from 'react';\nimport { unstable_useId as useId, unstable_composeClasses as composeClasses } from '@mui/utils';\nimport { getDataGridUtilityClass } from \"../../constants/gridClasses.js\";\nimport { useGridRootProps } from \"../../hooks/utils/useGridRootProps.js\";\nimport { gridColumnGroupsLookupSelector } from \"../../hooks/features/columnGrouping/gridColumnGroupsSelector.js\";\nimport { useGridApiContext } from \"../../hooks/utils/useGridApiContext.js\";\nimport { useGridSelector } from \"../../hooks/utils/useGridSelector.js\";\nimport { GridGenericColumnHeaderItem } from \"./GridGenericColumnHeaderItem.js\";\nimport { isEventTargetInPortal } from \"../../utils/domUtils.js\";\nimport { shouldCellShowLeftBorder, shouldCellShowRightBorder } from \"../../utils/cellBorderUtils.js\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nconst useUtilityClasses = ownerState => {\n  const {\n    classes,\n    headerAlign,\n    isDragging,\n    isLastColumn,\n    showLeftBorder,\n    showRightBorder,\n    groupId,\n    pinnedPosition\n  } = ownerState;\n  const slots = {\n    root: ['columnHeader', headerAlign === 'left' && 'columnHeader--alignLeft', headerAlign === 'center' && 'columnHeader--alignCenter', headerAlign === 'right' && 'columnHeader--alignRight', isDragging && 'columnHeader--moving', showRightBorder && 'columnHeader--withRightBorder', showLeftBorder && 'columnHeader--withLeftBorder', 'withBorderColor', groupId === null ? 'columnHeader--emptyGroup' : 'columnHeader--filledGroup', pinnedPosition === 'left' && 'columnHeader--pinnedLeft', pinnedPosition === 'right' && 'columnHeader--pinnedRight', isLastColumn && 'columnHeader--last'],\n    draggableContainer: ['columnHeaderDraggableContainer'],\n    titleContainer: ['columnHeaderTitleContainer', 'withBorderColor'],\n    titleContainerContent: ['columnHeaderTitleContainerContent']\n  };\n  return composeClasses(slots, getDataGridUtilityClass, classes);\n};\nfunction GridColumnGroupHeader(props) {\n  const {\n    groupId,\n    width,\n    depth,\n    maxDepth,\n    fields,\n    height,\n    colIndex,\n    hasFocus,\n    tabIndex,\n    isLastColumn,\n    pinnedPosition,\n    style,\n    indexInSection,\n    sectionLength,\n    gridHasFiller\n  } = props;\n  const rootProps = useGridRootProps();\n  const headerCellRef = React.useRef(null);\n  const apiRef = useGridApiContext();\n  const columnGroupsLookup = useGridSelector(apiRef, gridColumnGroupsLookupSelector);\n  const group = groupId ? columnGroupsLookup[groupId] : {};\n  const {\n    headerName = groupId ?? '',\n    description = '',\n    headerAlign = undefined\n  } = group;\n  let headerComponent;\n  const render = groupId && columnGroupsLookup[groupId]?.renderHeaderGroup;\n  const renderParams = React.useMemo(() => ({\n    groupId,\n    headerName,\n    description,\n    depth,\n    maxDepth,\n    fields,\n    colIndex,\n    isLastColumn\n  }), [groupId, headerName, description, depth, maxDepth, fields, colIndex, isLastColumn]);\n  if (groupId && render) {\n    headerComponent = render(renderParams);\n  }\n  const showLeftBorder = shouldCellShowLeftBorder(pinnedPosition, indexInSection);\n  const showRightBorder = shouldCellShowRightBorder(pinnedPosition, indexInSection, sectionLength, rootProps.showColumnVerticalBorder, gridHasFiller);\n  const ownerState = _extends({}, props, {\n    classes: rootProps.classes,\n    showLeftBorder,\n    showRightBorder,\n    headerAlign,\n    depth,\n    isDragging: false\n  });\n  const label = headerName ?? groupId;\n  const id = useId();\n  const elementId = groupId === null ? `empty-group-cell-${id}` : groupId;\n  const classes = useUtilityClasses(ownerState);\n  React.useLayoutEffect(() => {\n    if (hasFocus) {\n      const focusableElement = headerCellRef.current.querySelector('[tabindex=\"0\"]');\n      const elementToFocus = focusableElement || headerCellRef.current;\n      elementToFocus?.focus();\n    }\n  }, [apiRef, hasFocus]);\n  const publish = React.useCallback(eventName => event => {\n    // Ignore portal\n    // See https://github.com/mui/mui-x/issues/1721\n    if (isEventTargetInPortal(event)) {\n      return;\n    }\n    apiRef.current.publishEvent(eventName, renderParams, event);\n  },\n  // For now this is stupid, because renderParams change all the time.\n  // Need to move it's computation in the api, such that for a given depth+columnField, I can get the group parameters\n  [apiRef, renderParams]);\n  const mouseEventsHandlers = React.useMemo(() => ({\n    onKeyDown: publish('columnGroupHeaderKeyDown'),\n    onFocus: publish('columnGroupHeaderFocus'),\n    onBlur: publish('columnGroupHeaderBlur')\n  }), [publish]);\n  const headerClassName = typeof group.headerClassName === 'function' ? group.headerClassName(renderParams) : group.headerClassName;\n  return /*#__PURE__*/_jsx(GridGenericColumnHeaderItem, _extends({\n    ref: headerCellRef,\n    classes: classes,\n    columnMenuOpen: false,\n    colIndex: colIndex,\n    height: height,\n    isResizing: false,\n    sortDirection: null,\n    hasFocus: false,\n    tabIndex: tabIndex,\n    isDraggable: false,\n    headerComponent: headerComponent,\n    headerClassName: headerClassName,\n    description: description,\n    elementId: elementId,\n    width: width,\n    columnMenuIconButton: null,\n    columnTitleIconButtons: null,\n    resizable: false,\n    label: label,\n    \"aria-colspan\": fields.length\n    // The fields are wrapped between |-...-| to avoid confusion between fields \"id\" and \"id2\" when using selector data-fields~=\n    ,\n    \"data-fields\": `|-${fields.join('-|-')}-|`,\n    style: style\n  }, mouseEventsHandlers));\n}\nexport { GridColumnGroupHeader };","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport * as React from 'react';\nimport clsx from 'clsx';\nimport { styled } from '@mui/material/styles';\nimport { useRtl } from '@mui/system/RtlProvider';\nimport { useGridSelector } from \"../../utils/index.js\";\nimport { useGridRootProps } from \"../../utils/useGridRootProps.js\";\nimport { useGridPrivateApiContext } from \"../../utils/useGridPrivateApiContext.js\";\nimport { useGridApiEventHandler } from \"../../utils/useGridApiEventHandler.js\";\nimport { GridColumnHeaderItem } from \"../../../components/columnHeaders/GridColumnHeaderItem.js\";\nimport { gridDimensionsSelector } from \"../dimensions/index.js\";\nimport { gridRenderContextColumnsSelector, gridVirtualizationColumnEnabledSelector } from \"../virtualization/index.js\";\nimport { computeOffsetLeft } from \"../virtualization/useGridVirtualScroller.js\";\nimport { GridColumnGroupHeader } from \"../../../components/columnHeaders/GridColumnGroupHeader.js\";\nimport { GridPinnedColumnPosition, gridColumnPositionsSelector, gridVisiblePinnedColumnDefinitionsSelector, gridColumnLookupSelector } from \"../columns/index.js\";\nimport { gridColumnGroupsUnwrappedModelSelector } from \"../columnGrouping/gridColumnGroupsSelector.js\";\nimport { GridScrollbarFillerCell as ScrollbarFiller } from \"../../../components/GridScrollbarFillerCell.js\";\nimport { getPinnedCellOffset } from \"../../../internals/utils/getPinnedCellOffset.js\";\nimport { GridColumnHeaderSeparatorSides } from \"../../../components/columnHeaders/GridColumnHeaderSeparator.js\";\nimport { gridClasses } from \"../../../constants/gridClasses.js\";\nimport { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nexport const GridColumnHeaderRow = styled('div', {\n  name: 'MuiDataGrid',\n  slot: 'ColumnHeaderRow',\n  overridesResolver: (_, styles) => styles.columnHeaderRow\n})({\n  display: 'flex'\n});\nexport const useGridColumnHeaders = props => {\n  const {\n    visibleColumns,\n    sortColumnLookup,\n    filterColumnLookup,\n    columnHeaderTabIndexState,\n    columnGroupHeaderTabIndexState,\n    columnHeaderFocus,\n    columnGroupHeaderFocus,\n    headerGroupingMaxDepth,\n    columnMenuState,\n    columnVisibility,\n    columnGroupsHeaderStructure,\n    hasOtherElementInTabSequence\n  } = props;\n  const [dragCol, setDragCol] = React.useState('');\n  const [resizeCol, setResizeCol] = React.useState('');\n  const apiRef = useGridPrivateApiContext();\n  const isRtl = useRtl();\n  const rootProps = useGridRootProps();\n  const dimensions = useGridSelector(apiRef, gridDimensionsSelector);\n  const hasVirtualization = useGridSelector(apiRef, gridVirtualizationColumnEnabledSelector);\n  const columnGroupsModel = useGridSelector(apiRef, gridColumnGroupsUnwrappedModelSelector);\n  const columnPositions = useGridSelector(apiRef, gridColumnPositionsSelector);\n  const renderContext = useGridSelector(apiRef, gridRenderContextColumnsSelector);\n  const pinnedColumns = useGridSelector(apiRef, gridVisiblePinnedColumnDefinitionsSelector);\n  const columnsLookup = useGridSelector(apiRef, gridColumnLookupSelector);\n  const offsetLeft = computeOffsetLeft(columnPositions, renderContext, pinnedColumns.left.length);\n  const gridHasFiller = dimensions.columnsTotalWidth < dimensions.viewportOuterSize.width;\n  React.useEffect(() => {\n    apiRef.current.columnHeadersContainerRef.current.scrollLeft = 0;\n  }, [apiRef]);\n  const handleColumnResizeStart = React.useCallback(params => setResizeCol(params.field), []);\n  const handleColumnResizeStop = React.useCallback(() => setResizeCol(''), []);\n  const handleColumnReorderStart = React.useCallback(params => setDragCol(params.field), []);\n  const handleColumnReorderStop = React.useCallback(() => setDragCol(''), []);\n  const leftRenderContext = React.useMemo(() => {\n    return pinnedColumns.left.length ? {\n      firstColumnIndex: 0,\n      lastColumnIndex: pinnedColumns.left.length\n    } : null;\n  }, [pinnedColumns.left.length]);\n  const rightRenderContext = React.useMemo(() => {\n    return pinnedColumns.right.length ? {\n      firstColumnIndex: visibleColumns.length - pinnedColumns.right.length,\n      lastColumnIndex: visibleColumns.length\n    } : null;\n  }, [pinnedColumns.right.length, visibleColumns.length]);\n  useGridApiEventHandler(apiRef, 'columnResizeStart', handleColumnResizeStart);\n  useGridApiEventHandler(apiRef, 'columnResizeStop', handleColumnResizeStop);\n  useGridApiEventHandler(apiRef, 'columnHeaderDragStart', handleColumnReorderStart);\n  useGridApiEventHandler(apiRef, 'columnHeaderDragEnd', handleColumnReorderStop);\n\n  // Helper for computation common between getColumnHeaders and getColumnGroupHeaders\n  const getColumnsToRender = params => {\n    const {\n      renderContext: currentContext = renderContext,\n      maxLastColumn = visibleColumns.length\n    } = params || {};\n    const firstColumnToRender = currentContext.firstColumnIndex;\n    const lastColumnToRender = !hasVirtualization ? maxLastColumn : currentContext.lastColumnIndex;\n    const renderedColumns = visibleColumns.slice(firstColumnToRender, lastColumnToRender);\n    return {\n      renderedColumns,\n      firstColumnToRender,\n      lastColumnToRender\n    };\n  };\n  const getFillers = (params, children, leftOverflow, borderBottom = false) => {\n    const isPinnedRight = params?.position === GridPinnedColumnPosition.RIGHT;\n    const isNotPinned = params?.position === undefined;\n    const hasScrollbarFiller = pinnedColumns.right.length > 0 && isPinnedRight || pinnedColumns.right.length === 0 && isNotPinned;\n    const leftOffsetWidth = offsetLeft - leftOverflow;\n    return /*#__PURE__*/_jsxs(React.Fragment, {\n      children: [isNotPinned && /*#__PURE__*/_jsx(\"div\", {\n        role: \"presentation\",\n        style: {\n          width: leftOffsetWidth\n        }\n      }), children, isNotPinned && /*#__PURE__*/_jsx(\"div\", {\n        role: \"presentation\",\n        className: clsx(gridClasses.filler, borderBottom && gridClasses['filler--borderBottom'])\n      }), hasScrollbarFiller && /*#__PURE__*/_jsx(ScrollbarFiller, {\n        header: true,\n        pinnedRight: isPinnedRight,\n        borderBottom: borderBottom,\n        borderTop: false\n      })]\n    });\n  };\n  const getCellOffsetStyle = ({\n    pinnedPosition,\n    columnIndex,\n    computedWidth\n  }) => {\n    let style;\n    const isLeftPinned = pinnedPosition === GridPinnedColumnPosition.LEFT;\n    const isRightPinned = pinnedPosition === GridPinnedColumnPosition.RIGHT;\n    if (isLeftPinned || isRightPinned) {\n      const pinnedOffset = getPinnedCellOffset(pinnedPosition, computedWidth, columnIndex, columnPositions, dimensions);\n      let side = isLeftPinned ? 'left' : 'right';\n      if (isRtl) {\n        side = isLeftPinned ? 'right' : 'left';\n      }\n      if (pinnedPosition === 'left') {\n        style = {\n          [side]: pinnedOffset\n        };\n      }\n      if (pinnedPosition === 'right') {\n        style = {\n          [side]: pinnedOffset\n        };\n      }\n    }\n    return style;\n  };\n  const getColumnHeaders = (params, other = {}) => {\n    const {\n      renderedColumns,\n      firstColumnToRender\n    } = getColumnsToRender(params);\n    const columns = [];\n    for (let i = 0; i < renderedColumns.length; i += 1) {\n      const colDef = renderedColumns[i];\n      const columnIndex = firstColumnToRender + i;\n      const isFirstColumn = columnIndex === 0;\n      const tabIndex = columnHeaderTabIndexState !== null && columnHeaderTabIndexState.field === colDef.field || isFirstColumn && !hasOtherElementInTabSequence ? 0 : -1;\n      const hasFocus = columnHeaderFocus !== null && columnHeaderFocus.field === colDef.field;\n      const open = columnMenuState.open && columnMenuState.field === colDef.field;\n      const pinnedPosition = params?.position;\n      const style = getCellOffsetStyle({\n        pinnedPosition,\n        columnIndex,\n        computedWidth: colDef.computedWidth\n      });\n      const siblingWithBorderingSeparator = pinnedPosition === GridPinnedColumnPosition.RIGHT ? renderedColumns[i - 1] : renderedColumns[i + 1];\n      const isSiblingFocused = siblingWithBorderingSeparator ? columnHeaderFocus !== null && columnHeaderFocus.field === siblingWithBorderingSeparator.field : false;\n      const isLastUnpinned = columnIndex + 1 === columnPositions.length - pinnedColumns.right.length;\n      columns.push(/*#__PURE__*/_jsx(GridColumnHeaderItem, _extends({}, sortColumnLookup[colDef.field], {\n        columnMenuOpen: open,\n        filterItemsCounter: filterColumnLookup[colDef.field] && filterColumnLookup[colDef.field].length,\n        headerHeight: dimensions.headerHeight,\n        isDragging: colDef.field === dragCol,\n        colDef: colDef,\n        colIndex: columnIndex,\n        isResizing: resizeCol === colDef.field,\n        isLast: columnIndex === columnPositions.length - 1,\n        hasFocus: hasFocus,\n        tabIndex: tabIndex,\n        pinnedPosition: pinnedPosition,\n        style: style,\n        indexInSection: i,\n        sectionLength: renderedColumns.length,\n        gridHasFiller: gridHasFiller,\n        isLastUnpinned: isLastUnpinned,\n        isSiblingFocused: isSiblingFocused\n      }, other), colDef.field));\n    }\n    return getFillers(params, columns, 0);\n  };\n  const getColumnHeadersRow = () => {\n    return /*#__PURE__*/_jsxs(GridColumnHeaderRow, {\n      role: \"row\",\n      \"aria-rowindex\": headerGroupingMaxDepth + 1,\n      ownerState: rootProps,\n      className: gridClasses['row--borderBottom'],\n      children: [leftRenderContext && getColumnHeaders({\n        position: GridPinnedColumnPosition.LEFT,\n        renderContext: leftRenderContext,\n        maxLastColumn: leftRenderContext.lastColumnIndex\n      }, {\n        disableReorder: true\n      }), getColumnHeaders({\n        renderContext,\n        maxLastColumn: visibleColumns.length - pinnedColumns.right.length\n      }), rightRenderContext && getColumnHeaders({\n        position: GridPinnedColumnPosition.RIGHT,\n        renderContext: rightRenderContext,\n        maxLastColumn: rightRenderContext.lastColumnIndex\n      }, {\n        disableReorder: true,\n        separatorSide: GridColumnHeaderSeparatorSides.Left\n      })]\n    });\n  };\n  const getColumnGroupHeaders = ({\n    depth,\n    params\n  }) => {\n    const columnsToRender = getColumnsToRender(params);\n    if (columnsToRender.renderedColumns.length === 0) {\n      return null;\n    }\n    const {\n      renderedColumns,\n      firstColumnToRender,\n      lastColumnToRender\n    } = columnsToRender;\n    const rowStructure = columnGroupsHeaderStructure[depth];\n    const firstColumnFieldToRender = visibleColumns[firstColumnToRender].field;\n    const firstGroupToRender = columnGroupsModel[firstColumnFieldToRender]?.[depth] ?? null;\n    const firstGroupIndex = rowStructure.findIndex(({\n      groupId,\n      columnFields\n    }) => groupId === firstGroupToRender && columnFields.includes(firstColumnFieldToRender));\n    const lastColumnFieldToRender = visibleColumns[lastColumnToRender - 1].field;\n    const lastGroupToRender = columnGroupsModel[lastColumnFieldToRender]?.[depth] ?? null;\n    const lastGroupIndex = rowStructure.findIndex(({\n      groupId,\n      columnFields\n    }) => groupId === lastGroupToRender && columnFields.includes(lastColumnFieldToRender));\n    const visibleColumnGroupHeader = rowStructure.slice(firstGroupIndex, lastGroupIndex + 1).map(groupStructure => {\n      return _extends({}, groupStructure, {\n        columnFields: groupStructure.columnFields.filter(field => columnVisibility[field] !== false)\n      });\n    }).filter(groupStructure => groupStructure.columnFields.length > 0);\n    const firstVisibleColumnIndex = visibleColumnGroupHeader[0].columnFields.indexOf(firstColumnFieldToRender);\n    const hiddenGroupColumns = visibleColumnGroupHeader[0].columnFields.slice(0, firstVisibleColumnIndex);\n    const leftOverflow = hiddenGroupColumns.reduce((acc, field) => {\n      const column = columnsLookup[field];\n      return acc + (column.computedWidth ?? 0);\n    }, 0);\n    let columnIndex = firstColumnToRender;\n    const children = visibleColumnGroupHeader.map(({\n      groupId,\n      columnFields\n    }, index) => {\n      const hasFocus = columnGroupHeaderFocus !== null && columnGroupHeaderFocus.depth === depth && columnFields.includes(columnGroupHeaderFocus.field);\n      const tabIndex = columnGroupHeaderTabIndexState !== null && columnGroupHeaderTabIndexState.depth === depth && columnFields.includes(columnGroupHeaderTabIndexState.field) ? 0 : -1;\n      const headerInfo = {\n        groupId,\n        width: columnFields.reduce((acc, field) => acc + columnsLookup[field].computedWidth, 0),\n        fields: columnFields,\n        colIndex: columnIndex,\n        hasFocus,\n        tabIndex\n      };\n      const pinnedPosition = params.position;\n      const style = getCellOffsetStyle({\n        pinnedPosition,\n        columnIndex,\n        computedWidth: headerInfo.width\n      });\n      columnIndex += columnFields.length;\n      let indexInSection = index;\n      if (pinnedPosition === 'left') {\n        // Group headers can expand to multiple columns, we need to adjust the index\n        indexInSection = columnIndex - 1;\n      }\n      return /*#__PURE__*/_jsx(GridColumnGroupHeader, {\n        groupId: groupId,\n        width: headerInfo.width,\n        fields: headerInfo.fields,\n        colIndex: headerInfo.colIndex,\n        depth: depth,\n        isLastColumn: headerInfo.colIndex === visibleColumns.length - headerInfo.fields.length,\n        maxDepth: headerGroupingMaxDepth,\n        height: dimensions.groupHeaderHeight,\n        hasFocus: hasFocus,\n        tabIndex: tabIndex,\n        pinnedPosition: pinnedPosition,\n        style: style,\n        indexInSection: indexInSection,\n        sectionLength: renderedColumns.length,\n        gridHasFiller: gridHasFiller\n      }, index);\n    });\n    return getFillers(params, children, leftOverflow);\n  };\n  const getColumnGroupHeadersRows = () => {\n    if (headerGroupingMaxDepth === 0) {\n      return null;\n    }\n    const headerRows = [];\n    for (let depth = 0; depth < headerGroupingMaxDepth; depth += 1) {\n      headerRows.push(/*#__PURE__*/_jsxs(GridColumnHeaderRow, {\n        role: \"row\",\n        \"aria-rowindex\": depth + 1,\n        ownerState: rootProps,\n        children: [leftRenderContext && getColumnGroupHeaders({\n          depth,\n          params: {\n            position: GridPinnedColumnPosition.LEFT,\n            renderContext: leftRenderContext,\n            maxLastColumn: leftRenderContext.lastColumnIndex\n          }\n        }), getColumnGroupHeaders({\n          depth,\n          params: {\n            renderContext\n          }\n        }), rightRenderContext && getColumnGroupHeaders({\n          depth,\n          params: {\n            position: GridPinnedColumnPosition.RIGHT,\n            renderContext: rightRenderContext,\n            maxLastColumn: rightRenderContext.lastColumnIndex\n          }\n        })]\n      }, depth));\n    }\n    return headerRows;\n  };\n  return {\n    renderContext,\n    leftRenderContext,\n    rightRenderContext,\n    pinnedColumns,\n    visibleColumns,\n    getCellOffsetStyle,\n    getFillers,\n    getColumnHeadersRow,\n    getColumnsToRender,\n    getColumnGroupHeadersRows,\n    isDragging: !!dragCol,\n    getInnerProps: () => ({\n      role: 'rowgroup'\n    })\n  };\n};","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport _objectWithoutPropertiesLoose from \"@babel/runtime/helpers/esm/objectWithoutPropertiesLoose\";\nconst _excluded = [\"className\"];\nimport * as React from 'react';\nimport clsx from 'clsx';\nimport composeClasses from '@mui/utils/composeClasses';\nimport { styled } from '@mui/system';\nimport { getDataGridUtilityClass } from \"../../constants/gridClasses.js\";\nimport { useGridRootProps } from \"../../hooks/utils/useGridRootProps.js\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nconst useUtilityClasses = ownerState => {\n  const {\n    classes\n  } = ownerState;\n  const slots = {\n    root: ['columnHeaders']\n  };\n  return composeClasses(slots, getDataGridUtilityClass, classes);\n};\nconst GridColumnHeadersRoot = styled('div', {\n  name: 'MuiDataGrid',\n  slot: 'ColumnHeaders',\n  overridesResolver: (props, styles) => styles.columnHeaders\n})({\n  display: 'flex',\n  flexDirection: 'column',\n  borderTopLeftRadius: 'var(--unstable_DataGrid-radius)',\n  borderTopRightRadius: 'var(--unstable_DataGrid-radius)'\n});\nexport const GridBaseColumnHeaders = /*#__PURE__*/React.forwardRef(function GridColumnHeaders(props, ref) {\n  const {\n      className\n    } = props,\n    other = _objectWithoutPropertiesLoose(props, _excluded);\n  const rootProps = useGridRootProps();\n  const classes = useUtilityClasses(rootProps);\n  return /*#__PURE__*/_jsx(GridColumnHeadersRoot, _extends({\n    ref: ref,\n    className: clsx(className, classes.root),\n    ownerState: rootProps\n  }, other, {\n    role: \"presentation\"\n  }));\n});","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport _objectWithoutPropertiesLoose from \"@babel/runtime/helpers/esm/objectWithoutPropertiesLoose\";\nconst _excluded = [\"className\", \"visibleColumns\", \"sortColumnLookup\", \"filterColumnLookup\", \"columnHeaderTabIndexState\", \"columnGroupHeaderTabIndexState\", \"columnHeaderFocus\", \"columnGroupHeaderFocus\", \"headerGroupingMaxDepth\", \"columnMenuState\", \"columnVisibility\", \"columnGroupsHeaderStructure\", \"hasOtherElementInTabSequence\"];\nimport * as React from 'react';\nimport PropTypes from 'prop-types';\nimport { fastMemo } from '@mui/x-internals/fastMemo';\nimport { useGridColumnHeaders } from \"../hooks/features/columnHeaders/useGridColumnHeaders.js\";\nimport { GridBaseColumnHeaders } from \"./columnHeaders/GridBaseColumnHeaders.js\";\nimport { jsxs as _jsxs } from \"react/jsx-runtime\";\nconst GridColumnHeaders = /*#__PURE__*/React.forwardRef(function GridColumnHeaders(props, ref) {\n  const {\n      visibleColumns,\n      sortColumnLookup,\n      filterColumnLookup,\n      columnHeaderTabIndexState,\n      columnGroupHeaderTabIndexState,\n      columnHeaderFocus,\n      columnGroupHeaderFocus,\n      headerGroupingMaxDepth,\n      columnMenuState,\n      columnVisibility,\n      columnGroupsHeaderStructure,\n      hasOtherElementInTabSequence\n    } = props,\n    other = _objectWithoutPropertiesLoose(props, _excluded);\n  const {\n    getInnerProps,\n    getColumnHeadersRow,\n    getColumnGroupHeadersRows\n  } = useGridColumnHeaders({\n    visibleColumns,\n    sortColumnLookup,\n    filterColumnLookup,\n    columnHeaderTabIndexState,\n    columnGroupHeaderTabIndexState,\n    columnHeaderFocus,\n    columnGroupHeaderFocus,\n    headerGroupingMaxDepth,\n    columnMenuState,\n    columnVisibility,\n    columnGroupsHeaderStructure,\n    hasOtherElementInTabSequence\n  });\n  return /*#__PURE__*/_jsxs(GridBaseColumnHeaders, _extends({\n    ref: ref\n  }, other, getInnerProps(), {\n    children: [getColumnGroupHeadersRows(), getColumnHeadersRow()]\n  }));\n});\nprocess.env.NODE_ENV !== \"production\" ? GridColumnHeaders.propTypes = {\n  // ----------------------------- Warning --------------------------------\n  // | These PropTypes are generated from the TypeScript type definitions |\n  // | To update them edit the TypeScript types and run \"pnpm proptypes\"  |\n  // ----------------------------------------------------------------------\n  columnGroupHeaderFocus: PropTypes.shape({\n    depth: PropTypes.number.isRequired,\n    field: PropTypes.string.isRequired\n  }),\n  columnGroupHeaderTabIndexState: PropTypes.shape({\n    depth: PropTypes.number.isRequired,\n    field: PropTypes.string.isRequired\n  }),\n  columnGroupsHeaderStructure: PropTypes.arrayOf(PropTypes.arrayOf(PropTypes.shape({\n    columnFields: PropTypes.arrayOf(PropTypes.string).isRequired,\n    groupId: PropTypes.string\n  }))).isRequired,\n  columnHeaderFocus: PropTypes.shape({\n    field: PropTypes.string.isRequired\n  }),\n  columnHeaderTabIndexState: PropTypes.shape({\n    field: PropTypes.string.isRequired\n  }),\n  columnMenuState: PropTypes.shape({\n    field: PropTypes.string,\n    open: PropTypes.bool.isRequired\n  }).isRequired,\n  columnVisibility: PropTypes.object.isRequired,\n  filterColumnLookup: PropTypes.object.isRequired,\n  hasOtherElementInTabSequence: PropTypes.bool.isRequired,\n  headerGroupingMaxDepth: PropTypes.number.isRequired,\n  sortColumnLookup: PropTypes.object.isRequired,\n  visibleColumns: PropTypes.arrayOf(PropTypes.object).isRequired\n} : void 0;\nconst MemoizedGridColumnHeaders = fastMemo(GridColumnHeaders);\nexport { MemoizedGridColumnHeaders as GridColumnHeaders };","import * as React from 'react';\nexport const GridConfigurationContext = /*#__PURE__*/React.createContext(undefined);\nif (process.env.NODE_ENV !== 'production') {\n  GridConfigurationContext.displayName = 'GridConfigurationContext';\n}","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport * as React from 'react';\nimport PropTypes from 'prop-types';\nimport { useGridSelector } from \"../hooks/utils/useGridSelector.js\";\nimport { gridTopLevelRowCountSelector } from \"../hooks/features/rows/gridRowsSelector.js\";\nimport { selectedGridRowsCountSelector } from \"../hooks/features/rowSelection/gridRowSelectionSelector.js\";\nimport { gridFilteredTopLevelRowCountSelector } from \"../hooks/features/filter/gridFilterSelector.js\";\nimport { useGridApiContext } from \"../hooks/utils/useGridApiContext.js\";\nimport { GridSelectedRowCount } from \"./GridSelectedRowCount.js\";\nimport { GridFooterContainer } from \"./containers/GridFooterContainer.js\";\nimport { useGridRootProps } from \"../hooks/utils/useGridRootProps.js\";\nimport { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nconst GridFooter = /*#__PURE__*/React.forwardRef(function GridFooter(props, ref) {\n  const apiRef = useGridApiContext();\n  const rootProps = useGridRootProps();\n  const totalTopLevelRowCount = useGridSelector(apiRef, gridTopLevelRowCountSelector);\n  const selectedRowCount = useGridSelector(apiRef, selectedGridRowsCountSelector);\n  const visibleTopLevelRowCount = useGridSelector(apiRef, gridFilteredTopLevelRowCountSelector);\n  const selectedRowCountElement = !rootProps.hideFooterSelectedRowCount && selectedRowCount > 0 ? /*#__PURE__*/_jsx(GridSelectedRowCount, {\n    selectedRowCount: selectedRowCount\n  }) : /*#__PURE__*/_jsx(\"div\", {});\n  const rowCountElement = !rootProps.hideFooterRowCount && !rootProps.pagination ? /*#__PURE__*/_jsx(rootProps.slots.footerRowCount, _extends({}, rootProps.slotProps?.footerRowCount, {\n    rowCount: totalTopLevelRowCount,\n    visibleRowCount: visibleTopLevelRowCount\n  })) : null;\n  const paginationElement = rootProps.pagination && !rootProps.hideFooterPagination && rootProps.slots.pagination && /*#__PURE__*/_jsx(rootProps.slots.pagination, _extends({}, rootProps.slotProps?.pagination));\n  return /*#__PURE__*/_jsxs(GridFooterContainer, _extends({\n    ref: ref\n  }, props, {\n    children: [selectedRowCountElement, rowCountElement, paginationElement]\n  }));\n});\nprocess.env.NODE_ENV !== \"production\" ? GridFooter.propTypes = {\n  // ----------------------------- Warning --------------------------------\n  // | These PropTypes are generated from the TypeScript type definitions |\n  // | To update them edit the TypeScript types and run \"pnpm proptypes\"  |\n  // ----------------------------------------------------------------------\n  sx: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.func, PropTypes.object, PropTypes.bool])), PropTypes.func, PropTypes.object])\n} : void 0;\nexport { GridFooter };","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport * as React from 'react';\nimport { gridColumnDefinitionsSelector } from \"../../hooks/features/columns/gridColumnsSelector.js\";\nimport { useGridSelector } from \"../../hooks/utils/useGridSelector.js\";\nimport { gridPreferencePanelStateSelector } from \"../../hooks/features/preferencesPanel/gridPreferencePanelSelector.js\";\nimport { GridPreferencePanelsValue } from \"../../hooks/features/preferencesPanel/gridPreferencePanelsValue.js\";\nimport { useGridApiContext } from \"../../hooks/utils/useGridApiContext.js\";\nimport { useGridRootProps } from \"../../hooks/utils/useGridRootProps.js\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nexport function GridPreferencesPanel() {\n  const apiRef = useGridApiContext();\n  const columns = useGridSelector(apiRef, gridColumnDefinitionsSelector);\n  const rootProps = useGridRootProps();\n  const preferencePanelState = useGridSelector(apiRef, gridPreferencePanelStateSelector);\n  const panelContent = apiRef.current.unstable_applyPipeProcessors('preferencePanel', null, preferencePanelState.openedPanelValue ?? GridPreferencePanelsValue.filters);\n  return /*#__PURE__*/_jsx(rootProps.slots.panel, _extends({\n    as: rootProps.slots.basePopper,\n    open: columns.length > 0 && preferencePanelState.open,\n    id: preferencePanelState.panelId,\n    \"aria-labelledby\": preferencePanelState.labelId\n  }, rootProps.slotProps?.panel, rootProps.slotProps?.basePopper, {\n    children: panelContent\n  }));\n}","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport * as React from 'react';\nimport { useGridRootProps } from \"../hooks/utils/useGridRootProps.js\";\nimport { GridPreferencesPanel } from \"./panel/GridPreferencesPanel.js\";\nimport { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nexport function GridHeader() {\n  const rootProps = useGridRootProps();\n  return /*#__PURE__*/_jsxs(React.Fragment, {\n    children: [/*#__PURE__*/_jsx(GridPreferencesPanel, {}), rootProps.slots.toolbar && /*#__PURE__*/_jsx(rootProps.slots.toolbar, _extends({}, rootProps.slotProps?.toolbar))]\n  });\n}","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport * as React from 'react';\nimport clsx from 'clsx';\nimport { styled } from '@mui/system';\nimport useForkRef from '@mui/utils/useForkRef';\nimport composeClasses from '@mui/utils/composeClasses';\nimport { useGridApiContext } from \"../hooks/utils/useGridApiContext.js\";\nimport { useGridRootProps } from \"../hooks/utils/useGridRootProps.js\";\nimport { GridPinnedColumnPosition, gridColumnPositionsSelector, gridColumnsTotalWidthSelector, gridDimensionsSelector, gridVisibleColumnDefinitionsSelector, gridVisiblePinnedColumnDefinitionsSelector, useGridApiEventHandler, useGridSelector } from \"../hooks/index.js\";\nimport { getDataGridUtilityClass, gridClasses } from \"../constants/gridClasses.js\";\nimport { getPinnedCellOffset } from \"../internals/utils/getPinnedCellOffset.js\";\nimport { shouldCellShowLeftBorder, shouldCellShowRightBorder } from \"../utils/cellBorderUtils.js\";\nimport { escapeOperandAttributeSelector } from \"../utils/domUtils.js\";\nimport { GridScrollbarFillerCell } from \"./GridScrollbarFillerCell.js\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nconst SkeletonOverlay = styled('div', {\n  name: 'MuiDataGrid',\n  slot: 'SkeletonLoadingOverlay',\n  overridesResolver: (props, styles) => styles.skeletonLoadingOverlay\n})({\n  minWidth: '100%',\n  width: 'max-content',\n  // prevents overflow: clip; cutting off the x axis\n  height: '100%',\n  overflow: 'clip' // y axis is hidden while the x axis is allowed to overflow\n});\nconst useUtilityClasses = ownerState => {\n  const {\n    classes\n  } = ownerState;\n  const slots = {\n    root: ['skeletonLoadingOverlay']\n  };\n  return composeClasses(slots, getDataGridUtilityClass, classes);\n};\nconst getColIndex = el => parseInt(el.getAttribute('data-colindex'), 10);\nconst GridSkeletonLoadingOverlay = /*#__PURE__*/React.forwardRef(function GridSkeletonLoadingOverlay(props, forwardedRef) {\n  const rootProps = useGridRootProps();\n  const {\n    slots\n  } = rootProps;\n  const classes = useUtilityClasses({\n    classes: rootProps.classes\n  });\n  const ref = React.useRef(null);\n  const handleRef = useForkRef(ref, forwardedRef);\n  const apiRef = useGridApiContext();\n  const dimensions = useGridSelector(apiRef, gridDimensionsSelector);\n  const viewportHeight = dimensions?.viewportInnerSize.height ?? 0;\n  const skeletonRowsCount = Math.ceil(viewportHeight / dimensions.rowHeight);\n  const totalWidth = useGridSelector(apiRef, gridColumnsTotalWidthSelector);\n  const positions = useGridSelector(apiRef, gridColumnPositionsSelector);\n  const inViewportCount = React.useMemo(() => positions.filter(value => value <= totalWidth).length, [totalWidth, positions]);\n  const allVisibleColumns = useGridSelector(apiRef, gridVisibleColumnDefinitionsSelector);\n  const columns = React.useMemo(() => allVisibleColumns.slice(0, inViewportCount), [allVisibleColumns, inViewportCount]);\n  const pinnedColumns = useGridSelector(apiRef, gridVisiblePinnedColumnDefinitionsSelector);\n  const getPinnedStyle = React.useCallback((computedWidth, index, position) => {\n    const pinnedOffset = getPinnedCellOffset(position, computedWidth, index, positions, dimensions);\n    return {\n      [position]: pinnedOffset\n    };\n  }, [dimensions, positions]);\n  const getPinnedPosition = React.useCallback(field => {\n    if (pinnedColumns.left.findIndex(col => col.field === field) !== -1) {\n      return GridPinnedColumnPosition.LEFT;\n    }\n    if (pinnedColumns.right.findIndex(col => col.field === field) !== -1) {\n      return GridPinnedColumnPosition.RIGHT;\n    }\n    return undefined;\n  }, [pinnedColumns.left, pinnedColumns.right]);\n  const children = React.useMemo(() => {\n    const array = [];\n    for (let i = 0; i < skeletonRowsCount; i += 1) {\n      const rowCells = [];\n      for (let colIndex = 0; colIndex < columns.length; colIndex += 1) {\n        const column = columns[colIndex];\n        const pinnedPosition = getPinnedPosition(column.field);\n        const isPinnedLeft = pinnedPosition === GridPinnedColumnPosition.LEFT;\n        const isPinnedRight = pinnedPosition === GridPinnedColumnPosition.RIGHT;\n        const sectionLength = pinnedPosition ? pinnedColumns[pinnedPosition].length // pinned section\n        : columns.length - pinnedColumns.left.length - pinnedColumns.right.length; // middle section\n        const sectionIndex = pinnedPosition ? pinnedColumns[pinnedPosition].findIndex(col => col.field === column.field) // pinned section\n        : colIndex - pinnedColumns.left.length; // middle section\n        const pinnedStyle = pinnedPosition && getPinnedStyle(column.computedWidth, colIndex, pinnedPosition);\n        const gridHasFiller = dimensions.columnsTotalWidth < dimensions.viewportOuterSize.width;\n        const showRightBorder = shouldCellShowRightBorder(pinnedPosition, sectionIndex, sectionLength, rootProps.showCellVerticalBorder, gridHasFiller);\n        const showLeftBorder = shouldCellShowLeftBorder(pinnedPosition, sectionIndex);\n        const isLastColumn = colIndex === columns.length - 1;\n        const isFirstPinnedRight = isPinnedRight && sectionIndex === 0;\n        const hasFillerBefore = isFirstPinnedRight && gridHasFiller;\n        const hasFillerAfter = isLastColumn && !isFirstPinnedRight && gridHasFiller;\n        const expandedWidth = dimensions.viewportOuterSize.width - dimensions.columnsTotalWidth;\n        const emptyCellWidth = Math.max(0, expandedWidth);\n        const emptyCell = /*#__PURE__*/_jsx(slots.skeletonCell, {\n          width: emptyCellWidth,\n          empty: true\n        }, `skeleton-filler-column-${i}`);\n        const scrollbarWidth = dimensions.hasScrollY ? dimensions.scrollbarSize : 0;\n        const hasScrollbarFiller = isLastColumn && scrollbarWidth !== 0;\n        if (hasFillerBefore) {\n          rowCells.push(emptyCell);\n        }\n        rowCells.push(/*#__PURE__*/_jsx(slots.skeletonCell, {\n          field: column.field,\n          type: column.type,\n          align: column.align,\n          width: \"var(--width)\",\n          height: dimensions.rowHeight,\n          \"data-colindex\": colIndex,\n          className: clsx(isPinnedLeft && gridClasses['cell--pinnedLeft'], isPinnedRight && gridClasses['cell--pinnedRight'], showRightBorder && gridClasses['cell--withRightBorder'], showLeftBorder && gridClasses['cell--withLeftBorder']),\n          style: _extends({\n            '--width': `${column.computedWidth}px`\n          }, pinnedStyle)\n        }, `skeleton-column-${i}-${column.field}`));\n        if (hasFillerAfter) {\n          rowCells.push(emptyCell);\n        }\n        if (hasScrollbarFiller) {\n          rowCells.push(/*#__PURE__*/_jsx(GridScrollbarFillerCell, {\n            pinnedRight: pinnedColumns.right.length > 0\n          }, `skeleton-scrollbar-filler-${i}`));\n        }\n      }\n      array.push(/*#__PURE__*/_jsx(\"div\", {\n        className: clsx(gridClasses.row, gridClasses.rowSkeleton, i === 0 && gridClasses['row--firstVisible']),\n        children: rowCells\n      }, `skeleton-row-${i}`));\n    }\n    return array;\n  }, [slots, columns, pinnedColumns, skeletonRowsCount, rootProps.showCellVerticalBorder, dimensions.columnsTotalWidth, dimensions.viewportOuterSize.width, dimensions.rowHeight, dimensions.hasScrollY, dimensions.scrollbarSize, getPinnedPosition, getPinnedStyle]);\n\n  // Sync the column resize of the overlay columns with the grid\n  const handleColumnResize = params => {\n    const {\n      colDef,\n      width\n    } = params;\n    const cells = ref.current?.querySelectorAll(`[data-field=\"${escapeOperandAttributeSelector(colDef.field)}\"]`);\n    if (!cells) {\n      throw new Error('MUI X: Expected skeleton cells to be defined with `data-field` attribute.');\n    }\n    const resizedColIndex = columns.findIndex(col => col.field === colDef.field);\n    const pinnedPosition = getPinnedPosition(colDef.field);\n    const isPinnedLeft = pinnedPosition === GridPinnedColumnPosition.LEFT;\n    const isPinnedRight = pinnedPosition === GridPinnedColumnPosition.RIGHT;\n    const currentWidth = getComputedStyle(cells[0]).getPropertyValue('--width');\n    const delta = parseInt(currentWidth, 10) - width;\n    if (cells) {\n      cells.forEach(element => {\n        element.style.setProperty('--width', `${width}px`);\n      });\n    }\n    if (isPinnedLeft) {\n      const pinnedCells = ref.current?.querySelectorAll(`.${gridClasses['cell--pinnedLeft']}`);\n      pinnedCells?.forEach(element => {\n        const colIndex = getColIndex(element);\n        if (colIndex > resizedColIndex) {\n          element.style.left = `${parseInt(getComputedStyle(element).left, 10) - delta}px`;\n        }\n      });\n    }\n    if (isPinnedRight) {\n      const pinnedCells = ref.current?.querySelectorAll(`.${gridClasses['cell--pinnedRight']}`);\n      pinnedCells?.forEach(element => {\n        const colIndex = getColIndex(element);\n        if (colIndex < resizedColIndex) {\n          element.style.right = `${parseInt(getComputedStyle(element).right, 10) + delta}px`;\n        }\n      });\n    }\n  };\n  useGridApiEventHandler(apiRef, 'columnResize', handleColumnResize);\n  return /*#__PURE__*/_jsx(SkeletonOverlay, _extends({\n    className: classes.root,\n    ref: handleRef\n  }, props, {\n    children: children\n  }));\n});\nexport { GridSkeletonLoadingOverlay };","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport _objectWithoutPropertiesLoose from \"@babel/runtime/helpers/esm/objectWithoutPropertiesLoose\";\nconst _excluded = [\"variant\", \"noRowsVariant\", \"style\"];\nimport * as React from 'react';\nimport PropTypes from 'prop-types';\nimport LinearProgress from '@mui/material/LinearProgress';\nimport CircularProgress from '@mui/material/CircularProgress';\nimport { GridOverlay } from \"./containers/GridOverlay.js\";\nimport { GridSkeletonLoadingOverlay } from \"./GridSkeletonLoadingOverlay.js\";\nimport { useGridApiContext } from \"../hooks/utils/useGridApiContext.js\";\nimport { gridRowCountSelector, useGridSelector } from \"../hooks/index.js\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nconst LOADING_VARIANTS = {\n  'circular-progress': {\n    component: CircularProgress,\n    style: {}\n  },\n  'linear-progress': {\n    component: LinearProgress,\n    style: {\n      display: 'block'\n    }\n  },\n  skeleton: {\n    component: GridSkeletonLoadingOverlay,\n    style: {\n      display: 'block'\n    }\n  }\n};\nconst GridLoadingOverlay = /*#__PURE__*/React.forwardRef(function GridLoadingOverlay(props, ref) {\n  const {\n      variant = 'circular-progress',\n      noRowsVariant = 'circular-progress',\n      style\n    } = props,\n    other = _objectWithoutPropertiesLoose(props, _excluded);\n  const apiRef = useGridApiContext();\n  const rowsCount = useGridSelector(apiRef, gridRowCountSelector);\n  const activeVariant = LOADING_VARIANTS[rowsCount === 0 ? noRowsVariant : variant];\n  return /*#__PURE__*/_jsx(GridOverlay, _extends({\n    ref: ref,\n    style: _extends({}, activeVariant.style, style)\n  }, other, {\n    children: /*#__PURE__*/_jsx(activeVariant.component, {})\n  }));\n});\nprocess.env.NODE_ENV !== \"production\" ? GridLoadingOverlay.propTypes = {\n  // ----------------------------- Warning --------------------------------\n  // | These PropTypes are generated from the TypeScript type definitions |\n  // | To update them edit the TypeScript types and run \"pnpm proptypes\"  |\n  // ----------------------------------------------------------------------\n  /**\n   * The variant of the overlay when no rows are displayed.\n   * @default 'circular-progress'\n   */\n  noRowsVariant: PropTypes.oneOf(['circular-progress', 'linear-progress', 'skeleton']),\n  sx: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.func, PropTypes.object, PropTypes.bool])), PropTypes.func, PropTypes.object]),\n  /**\n   * The variant of the overlay.\n   * @default 'circular-progress'\n   */\n  variant: PropTypes.oneOf(['circular-progress', 'linear-progress', 'skeleton'])\n} : void 0;\nexport { GridLoadingOverlay };","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport * as React from 'react';\nimport PropTypes from 'prop-types';\nimport { useGridApiContext } from \"../hooks/utils/useGridApiContext.js\";\nimport { GridOverlay } from \"./containers/GridOverlay.js\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nconst GridNoRowsOverlay = /*#__PURE__*/React.forwardRef(function GridNoRowsOverlay(props, ref) {\n  const apiRef = useGridApiContext();\n  const noRowsLabel = apiRef.current.getLocaleText('noRowsLabel');\n  return /*#__PURE__*/_jsx(GridOverlay, _extends({\n    ref: ref\n  }, props, {\n    children: noRowsLabel\n  }));\n});\nprocess.env.NODE_ENV !== \"production\" ? GridNoRowsOverlay.propTypes = {\n  // ----------------------------- Warning --------------------------------\n  // | These PropTypes are generated from the TypeScript type definitions |\n  // | To update them edit the TypeScript types and run \"pnpm proptypes\"  |\n  // ----------------------------------------------------------------------\n  sx: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.func, PropTypes.object, PropTypes.bool])), PropTypes.func, PropTypes.object])\n} : void 0;\nexport { GridNoRowsOverlay };","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport * as React from 'react';\nimport { styled } from '@mui/material/styles';\nimport PropTypes from 'prop-types';\nimport TablePagination, { tablePaginationClasses } from '@mui/material/TablePagination';\nimport { useGridSelector } from \"../hooks/utils/useGridSelector.js\";\nimport { useGridApiContext } from \"../hooks/utils/useGridApiContext.js\";\nimport { useGridRootProps } from \"../hooks/utils/useGridRootProps.js\";\nimport { gridPaginationModelSelector, gridPaginationRowCountSelector, gridPageCountSelector } from \"../hooks/features/pagination/gridPaginationSelector.js\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nconst GridPaginationRoot = styled(TablePagination)(({\n  theme\n}) => ({\n  maxHeight: 'calc(100% + 1px)',\n  // border width\n  [`& .${tablePaginationClasses.selectLabel}`]: {\n    display: 'none',\n    [theme.breakpoints.up('sm')]: {\n      display: 'block'\n    }\n  },\n  [`& .${tablePaginationClasses.input}`]: {\n    display: 'none',\n    [theme.breakpoints.up('sm')]: {\n      display: 'inline-flex'\n    }\n  }\n}));\nconst wrapLabelDisplayedRows = (labelDisplayedRows, estimated) => {\n  return ({\n    from,\n    to,\n    count,\n    page\n  }) => labelDisplayedRows({\n    from,\n    to,\n    count,\n    page,\n    estimated\n  });\n};\nconst defaultLabelDisplayedRows = ({\n  from,\n  to,\n  count,\n  estimated\n}) => {\n  if (!estimated) {\n    return `${from}–${to} of ${count !== -1 ? count : `more than ${to}`}`;\n  }\n  return `${from}–${to} of ${count !== -1 ? count : `more than ${estimated > to ? estimated : to}`}`;\n};\n\n// A mutable version of a readonly array.\n\nconst GridPagination = /*#__PURE__*/React.forwardRef(function GridPagination(props, ref) {\n  const apiRef = useGridApiContext();\n  const rootProps = useGridRootProps();\n  const paginationModel = useGridSelector(apiRef, gridPaginationModelSelector);\n  const rowCount = useGridSelector(apiRef, gridPaginationRowCountSelector);\n  const pageCount = useGridSelector(apiRef, gridPageCountSelector);\n  const {\n    paginationMode,\n    loading,\n    estimatedRowCount\n  } = rootProps;\n  const computedProps = React.useMemo(() => {\n    if (rowCount === -1 && paginationMode === 'server' && loading) {\n      return {\n        backIconButtonProps: {\n          disabled: true\n        },\n        nextIconButtonProps: {\n          disabled: true\n        }\n      };\n    }\n    return {};\n  }, [loading, paginationMode, rowCount]);\n  const lastPage = React.useMemo(() => Math.max(0, pageCount - 1), [pageCount]);\n  const computedPage = React.useMemo(() => {\n    if (rowCount === -1) {\n      return paginationModel.page;\n    }\n    return paginationModel.page <= lastPage ? paginationModel.page : lastPage;\n  }, [lastPage, paginationModel.page, rowCount]);\n  const handlePageSizeChange = React.useCallback(event => {\n    const pageSize = Number(event.target.value);\n    apiRef.current.setPageSize(pageSize);\n  }, [apiRef]);\n  const handlePageChange = React.useCallback((_, page) => {\n    apiRef.current.setPage(page);\n  }, [apiRef]);\n  const isPageSizeIncludedInPageSizeOptions = pageSize => {\n    for (let i = 0; i < rootProps.pageSizeOptions.length; i += 1) {\n      const option = rootProps.pageSizeOptions[i];\n      if (typeof option === 'number') {\n        if (option === pageSize) {\n          return true;\n        }\n      } else if (option.value === pageSize) {\n        return true;\n      }\n    }\n    return false;\n  };\n  if (process.env.NODE_ENV !== 'production') {\n    // eslint-disable-next-line react-hooks/rules-of-hooks\n    const warnedOnceMissingInPageSizeOptions = React.useRef(false);\n    const pageSize = rootProps.paginationModel?.pageSize ?? paginationModel.pageSize;\n    if (!warnedOnceMissingInPageSizeOptions.current && !rootProps.autoPageSize && !isPageSizeIncludedInPageSizeOptions(pageSize)) {\n      console.warn([`MUI X: The page size \\`${paginationModel.pageSize}\\` is not present in the \\`pageSizeOptions\\`.`, `Add it to show the pagination select.`].join('\\n'));\n      warnedOnceMissingInPageSizeOptions.current = true;\n    }\n  }\n  const pageSizeOptions = isPageSizeIncludedInPageSizeOptions(paginationModel.pageSize) ? rootProps.pageSizeOptions : [];\n  const locales = apiRef.current.getLocaleText('MuiTablePagination');\n  const wrappedLabelDisplayedRows = wrapLabelDisplayedRows(locales.labelDisplayedRows || defaultLabelDisplayedRows, estimatedRowCount);\n  return /*#__PURE__*/_jsx(GridPaginationRoot, _extends({\n    ref: ref,\n    component: \"div\",\n    count: rowCount,\n    page: computedPage\n    // TODO: Remove the cast once the type is fixed in Material UI and that the min Material UI version\n    // for x-data-grid is past the fix.\n    // Note that Material UI will not mutate the array, so this is safe.\n    ,\n    rowsPerPageOptions: pageSizeOptions,\n    rowsPerPage: paginationModel.pageSize,\n    onPageChange: handlePageChange,\n    onRowsPerPageChange: handlePageSizeChange\n  }, computedProps, locales, {\n    labelDisplayedRows: wrappedLabelDisplayedRows\n  }, props));\n});\nprocess.env.NODE_ENV !== \"production\" ? GridPagination.propTypes = {\n  // ----------------------------- Warning --------------------------------\n  // | These PropTypes are generated from the TypeScript type definitions |\n  // | To update them edit the TypeScript types and run \"pnpm proptypes\"  |\n  // ----------------------------------------------------------------------\n  component: PropTypes.elementType\n} : void 0;\nexport { GridPagination };","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport _objectWithoutPropertiesLoose from \"@babel/runtime/helpers/esm/objectWithoutPropertiesLoose\";\nconst _excluded = [\"selected\", \"rowId\", \"row\", \"index\", \"style\", \"rowHeight\", \"className\", \"visibleColumns\", \"pinnedColumns\", \"offsetTop\", \"offsetLeft\", \"dimensions\", \"renderContext\", \"focusedColumnIndex\", \"isFirstVisible\", \"isLastVisible\", \"isNotVisible\", \"showBottomBorder\", \"focusedCell\", \"tabbableCell\", \"onClick\", \"onDoubleClick\", \"onMouseEnter\", \"onMouseLeave\", \"onMouseOut\", \"onMouseOver\"];\nimport * as React from 'react';\nimport PropTypes from 'prop-types';\nimport clsx from 'clsx';\nimport { unstable_useForkRef as useForkRef } from '@mui/utils';\nimport { fastMemo } from '@mui/x-internals/fastMemo';\nimport { GridEditModes, GridRowModes, GridCellModes } from \"../models/gridEditRowModel.js\";\nimport { useGridApiContext } from \"../hooks/utils/useGridApiContext.js\";\nimport { gridClasses } from \"../constants/gridClasses.js\";\nimport { composeGridClasses } from \"../utils/composeGridClasses.js\";\nimport { useGridRootProps } from \"../hooks/utils/useGridRootProps.js\";\nimport { gridColumnPositionsSelector } from \"../hooks/features/columns/gridColumnsSelector.js\";\nimport { useGridSelector, objectShallowCompare } from \"../hooks/utils/useGridSelector.js\";\nimport { useGridVisibleRows } from \"../hooks/utils/useGridVisibleRows.js\";\nimport { findParentElementFromClassName, isEventTargetInPortal } from \"../utils/domUtils.js\";\nimport { GRID_CHECKBOX_SELECTION_COL_DEF } from \"../colDef/gridCheckboxSelectionColDef.js\";\nimport { GRID_ACTIONS_COLUMN_TYPE } from \"../colDef/gridActionsColDef.js\";\nimport { GRID_DETAIL_PANEL_TOGGLE_FIELD } from \"../constants/gridDetailPanelToggleField.js\";\nimport { gridSortModelSelector } from \"../hooks/features/sorting/gridSortingSelector.js\";\nimport { gridRowMaximumTreeDepthSelector } from \"../hooks/features/rows/gridRowsSelector.js\";\nimport { gridEditRowsStateSelector } from \"../hooks/features/editing/gridEditingSelectors.js\";\nimport { PinnedPosition, gridPinnedColumnPositionLookup } from \"./cell/GridCell.js\";\nimport { GridScrollbarFillerCell as ScrollbarFiller } from \"./GridScrollbarFillerCell.js\";\nimport { getPinnedCellOffset } from \"../internals/utils/getPinnedCellOffset.js\";\nimport { useGridConfiguration } from \"../hooks/utils/useGridConfiguration.js\";\nimport { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nfunction EmptyCell({\n  width\n}) {\n  if (!width) {\n    return null;\n  }\n  return /*#__PURE__*/_jsx(\"div\", {\n    role: \"presentation\",\n    className: clsx(gridClasses.cell, gridClasses.cellEmpty),\n    style: {\n      '--width': `${width}px`\n    }\n  });\n}\nconst GridRow = /*#__PURE__*/React.forwardRef(function GridRow(props, refProp) {\n  const {\n      selected,\n      rowId,\n      row,\n      index,\n      style: styleProp,\n      rowHeight,\n      className,\n      visibleColumns,\n      pinnedColumns,\n      offsetLeft,\n      dimensions,\n      renderContext,\n      focusedColumnIndex,\n      isFirstVisible,\n      isLastVisible,\n      isNotVisible,\n      showBottomBorder,\n      onClick,\n      onDoubleClick,\n      onMouseEnter,\n      onMouseLeave,\n      onMouseOut,\n      onMouseOver\n    } = props,\n    other = _objectWithoutPropertiesLoose(props, _excluded);\n  const apiRef = useGridApiContext();\n  const configuration = useGridConfiguration();\n  const ref = React.useRef(null);\n  const rootProps = useGridRootProps();\n  const currentPage = useGridVisibleRows(apiRef, rootProps);\n  const sortModel = useGridSelector(apiRef, gridSortModelSelector);\n  const treeDepth = useGridSelector(apiRef, gridRowMaximumTreeDepthSelector);\n  const columnPositions = useGridSelector(apiRef, gridColumnPositionsSelector);\n  const editRowsState = useGridSelector(apiRef, gridEditRowsStateSelector);\n  const handleRef = useForkRef(ref, refProp);\n  const rowNode = apiRef.current.getRowNode(rowId);\n  const scrollbarWidth = dimensions.hasScrollY ? dimensions.scrollbarSize : 0;\n  const gridHasFiller = dimensions.columnsTotalWidth < dimensions.viewportOuterSize.width;\n  const editing = apiRef.current.getRowMode(rowId) === GridRowModes.Edit;\n  const editable = rootProps.editMode === GridEditModes.Row;\n  const hasFocusCell = focusedColumnIndex !== undefined;\n  const hasVirtualFocusCellLeft = hasFocusCell && focusedColumnIndex >= pinnedColumns.left.length && focusedColumnIndex < renderContext.firstColumnIndex;\n  const hasVirtualFocusCellRight = hasFocusCell && focusedColumnIndex < visibleColumns.length - pinnedColumns.right.length && focusedColumnIndex >= renderContext.lastColumnIndex;\n  const classes = composeGridClasses(rootProps.classes, {\n    root: ['row', selected && 'selected', editable && 'row--editable', editing && 'row--editing', isFirstVisible && 'row--firstVisible', isLastVisible && 'row--lastVisible', showBottomBorder && 'row--borderBottom', rowHeight === 'auto' && 'row--dynamicHeight']\n  });\n  const getRowAriaAttributes = configuration.hooks.useGridRowAriaAttributes();\n  React.useLayoutEffect(() => {\n    if (currentPage.range) {\n      // The index prop is relative to the rows from all pages. As example, the index prop of the\n      // first row is 5 if `paginationModel.pageSize=5` and `paginationModel.page=1`. However, the index used by the virtualization\n      // doesn't care about pagination and considers the rows from the current page only, so the\n      // first row always has index=0. We need to subtract the index of the first row to make it\n      // compatible with the index used by the virtualization.\n      const rowIndex = apiRef.current.getRowIndexRelativeToVisibleRows(rowId);\n      // pinned rows are not part of the visible rows\n      if (rowIndex != null) {\n        apiRef.current.unstable_setLastMeasuredRowIndex(rowIndex);\n      }\n    }\n    const rootElement = ref.current;\n    const hasFixedHeight = rowHeight !== 'auto';\n    if (!rootElement || hasFixedHeight || typeof ResizeObserver === 'undefined') {\n      return undefined;\n    }\n    const resizeObserver = new ResizeObserver(entries => {\n      const [entry] = entries;\n      const height = entry.borderBoxSize && entry.borderBoxSize.length > 0 ? entry.borderBoxSize[0].blockSize : entry.contentRect.height;\n      apiRef.current.unstable_storeRowHeightMeasurement(rowId, height);\n    });\n    resizeObserver.observe(rootElement);\n    return () => resizeObserver.disconnect();\n  }, [apiRef, currentPage.range, index, rowHeight, rowId]);\n  const publish = React.useCallback((eventName, propHandler) => event => {\n    // Ignore portal\n    if (isEventTargetInPortal(event)) {\n      return;\n    }\n\n    // The row might have been deleted\n    if (!apiRef.current.getRow(rowId)) {\n      return;\n    }\n    apiRef.current.publishEvent(eventName, apiRef.current.getRowParams(rowId), event);\n    if (propHandler) {\n      propHandler(event);\n    }\n  }, [apiRef, rowId]);\n  const publishClick = React.useCallback(event => {\n    const cell = findParentElementFromClassName(event.target, gridClasses.cell);\n    const field = cell?.getAttribute('data-field');\n\n    // Check if the field is available because the cell that fills the empty\n    // space of the row has no field.\n    if (field) {\n      // User clicked in the checkbox added by checkboxSelection\n      if (field === GRID_CHECKBOX_SELECTION_COL_DEF.field) {\n        return;\n      }\n\n      // User opened a detail panel\n      if (field === GRID_DETAIL_PANEL_TOGGLE_FIELD) {\n        return;\n      }\n\n      // User reorders a row\n      if (field === '__reorder__') {\n        return;\n      }\n\n      // User is editing a cell\n      if (apiRef.current.getCellMode(rowId, field) === GridCellModes.Edit) {\n        return;\n      }\n\n      // User clicked a button from the \"actions\" column type\n      const column = apiRef.current.getColumn(field);\n      if (column?.type === GRID_ACTIONS_COLUMN_TYPE) {\n        return;\n      }\n    }\n    publish('rowClick', onClick)(event);\n  }, [apiRef, onClick, publish, rowId]);\n  const {\n    slots,\n    slotProps,\n    disableColumnReorder\n  } = rootProps;\n  const rowReordering = rootProps.rowReordering;\n  const sizes = useGridSelector(apiRef, () => _extends({}, apiRef.current.unstable_getRowInternalSizes(rowId)), objectShallowCompare);\n  let minHeight = rowHeight;\n  if (minHeight === 'auto' && sizes) {\n    const numberOfBaseSizes = 1;\n    const maximumSize = sizes.baseCenter ?? 0;\n    if (maximumSize > 0 && numberOfBaseSizes > 1) {\n      minHeight = maximumSize;\n    }\n  }\n  const style = React.useMemo(() => {\n    if (isNotVisible) {\n      return {\n        opacity: 0,\n        width: 0,\n        height: 0\n      };\n    }\n    const rowStyle = _extends({}, styleProp, {\n      maxHeight: rowHeight === 'auto' ? 'none' : rowHeight,\n      // max-height doesn't support \"auto\"\n      minHeight,\n      '--height': typeof rowHeight === 'number' ? `${rowHeight}px` : rowHeight\n    });\n    if (sizes?.spacingTop) {\n      const property = rootProps.rowSpacingType === 'border' ? 'borderTopWidth' : 'marginTop';\n      rowStyle[property] = sizes.spacingTop;\n    }\n    if (sizes?.spacingBottom) {\n      const property = rootProps.rowSpacingType === 'border' ? 'borderBottomWidth' : 'marginBottom';\n      let propertyValue = rowStyle[property];\n      // avoid overriding existing value\n      if (typeof propertyValue !== 'number') {\n        propertyValue = parseInt(propertyValue || '0', 10);\n      }\n      propertyValue += sizes.spacingBottom;\n      rowStyle[property] = propertyValue;\n    }\n    return rowStyle;\n  }, [isNotVisible, rowHeight, styleProp, minHeight, sizes, rootProps.rowSpacingType]);\n  const rowClassNames = apiRef.current.unstable_applyPipeProcessors('rowClassName', [], rowId);\n  const ariaAttributes = rowNode ? getRowAriaAttributes(rowNode, index) : undefined;\n  if (typeof rootProps.getRowClassName === 'function') {\n    const indexRelativeToCurrentPage = index - (currentPage.range?.firstRowIndex || 0);\n    const rowParams = _extends({}, apiRef.current.getRowParams(rowId), {\n      isFirstVisible: indexRelativeToCurrentPage === 0,\n      isLastVisible: indexRelativeToCurrentPage === currentPage.rows.length - 1,\n      indexRelativeToCurrentPage\n    });\n    rowClassNames.push(rootProps.getRowClassName(rowParams));\n  }\n  const getCell = (column, indexInSection, indexRelativeToAllColumns, sectionLength, pinnedPosition = PinnedPosition.NONE) => {\n    const cellColSpanInfo = apiRef.current.unstable_getCellColSpanInfo(rowId, indexRelativeToAllColumns);\n    if (cellColSpanInfo?.spannedByColSpan) {\n      return null;\n    }\n    const width = cellColSpanInfo?.cellProps.width ?? column.computedWidth;\n    const colSpan = cellColSpanInfo?.cellProps.colSpan ?? 1;\n    const pinnedOffset = getPinnedCellOffset(gridPinnedColumnPositionLookup[pinnedPosition], column.computedWidth, indexRelativeToAllColumns, columnPositions, dimensions);\n    if (rowNode?.type === 'skeletonRow') {\n      return /*#__PURE__*/_jsx(slots.skeletonCell, {\n        type: column.type,\n        width: width,\n        height: rowHeight,\n        field: column.field,\n        align: column.align\n      }, column.field);\n    }\n    const editCellState = editRowsState[rowId]?.[column.field] ?? null;\n\n    // when the cell is a reorder cell we are not allowing to reorder the col\n    // fixes https://github.com/mui/mui-x/issues/11126\n    const isReorderCell = column.field === '__reorder__';\n    const isEditingRows = Object.keys(editRowsState).length > 0;\n    const canReorderColumn = !(disableColumnReorder || column.disableReorder);\n    const canReorderRow = rowReordering && !sortModel.length && treeDepth <= 1 && !isEditingRows;\n    const disableDragEvents = !(canReorderColumn || isReorderCell && canReorderRow);\n    const cellIsNotVisible = pinnedPosition === PinnedPosition.VIRTUAL;\n    return /*#__PURE__*/_jsx(slots.cell, _extends({\n      column: column,\n      width: width,\n      rowId: rowId,\n      align: column.align || 'left',\n      colIndex: indexRelativeToAllColumns,\n      colSpan: colSpan,\n      disableDragEvents: disableDragEvents,\n      editCellState: editCellState,\n      isNotVisible: cellIsNotVisible,\n      pinnedOffset: pinnedOffset,\n      pinnedPosition: pinnedPosition,\n      sectionIndex: indexInSection,\n      sectionLength: sectionLength,\n      gridHasFiller: gridHasFiller\n    }, slotProps?.cell), column.field);\n  };\n\n  /* Start of rendering */\n\n  if (!rowNode) {\n    return null;\n  }\n  const leftCells = pinnedColumns.left.map((column, i) => {\n    const indexRelativeToAllColumns = i;\n    return getCell(column, i, indexRelativeToAllColumns, pinnedColumns.left.length, PinnedPosition.LEFT);\n  });\n  const rightCells = pinnedColumns.right.map((column, i) => {\n    const indexRelativeToAllColumns = visibleColumns.length - pinnedColumns.right.length + i;\n    return getCell(column, i, indexRelativeToAllColumns, pinnedColumns.right.length, PinnedPosition.RIGHT);\n  });\n  const middleColumnsLength = visibleColumns.length - pinnedColumns.left.length - pinnedColumns.right.length;\n  const cells = [];\n  if (hasVirtualFocusCellLeft) {\n    cells.push(getCell(visibleColumns[focusedColumnIndex], focusedColumnIndex - pinnedColumns.left.length, focusedColumnIndex, middleColumnsLength, PinnedPosition.VIRTUAL));\n  }\n  for (let i = renderContext.firstColumnIndex; i < renderContext.lastColumnIndex; i += 1) {\n    const column = visibleColumns[i];\n    const indexInSection = i - pinnedColumns.left.length;\n    cells.push(getCell(column, indexInSection, i, middleColumnsLength));\n  }\n  if (hasVirtualFocusCellRight) {\n    cells.push(getCell(visibleColumns[focusedColumnIndex], focusedColumnIndex - pinnedColumns.left.length, focusedColumnIndex, middleColumnsLength, PinnedPosition.VIRTUAL));\n  }\n  const eventHandlers = row ? {\n    onClick: publishClick,\n    onDoubleClick: publish('rowDoubleClick', onDoubleClick),\n    onMouseEnter: publish('rowMouseEnter', onMouseEnter),\n    onMouseLeave: publish('rowMouseLeave', onMouseLeave),\n    onMouseOut: publish('rowMouseOut', onMouseOut),\n    onMouseOver: publish('rowMouseOver', onMouseOver)\n  } : null;\n  const expandedWidth = dimensions.viewportOuterSize.width - dimensions.columnsTotalWidth - scrollbarWidth;\n  const emptyCellWidth = Math.max(0, expandedWidth);\n  return /*#__PURE__*/_jsxs(\"div\", _extends({\n    ref: handleRef,\n    \"data-id\": rowId,\n    \"data-rowindex\": index,\n    role: \"row\",\n    className: clsx(...rowClassNames, classes.root, className),\n    style: style\n  }, ariaAttributes, eventHandlers, other, {\n    children: [leftCells, /*#__PURE__*/_jsx(\"div\", {\n      role: \"presentation\",\n      className: gridClasses.cellOffsetLeft,\n      style: {\n        width: offsetLeft\n      }\n    }), cells, emptyCellWidth > 0 && /*#__PURE__*/_jsx(EmptyCell, {\n      width: emptyCellWidth\n    }), rightCells.length > 0 && /*#__PURE__*/_jsx(\"div\", {\n      role: \"presentation\",\n      className: gridClasses.filler\n    }), rightCells, scrollbarWidth !== 0 && /*#__PURE__*/_jsx(ScrollbarFiller, {\n      pinnedRight: pinnedColumns.right.length > 0\n    })]\n  }));\n});\nprocess.env.NODE_ENV !== \"production\" ? GridRow.propTypes = {\n  // ----------------------------- Warning --------------------------------\n  // | These PropTypes are generated from the TypeScript type definitions |\n  // | To update them edit the TypeScript types and run \"pnpm proptypes\"  |\n  // ----------------------------------------------------------------------\n  dimensions: PropTypes.shape({\n    bottomContainerHeight: PropTypes.number.isRequired,\n    columnsTotalWidth: PropTypes.number.isRequired,\n    contentSize: PropTypes.shape({\n      height: PropTypes.number.isRequired,\n      width: PropTypes.number.isRequired\n    }).isRequired,\n    groupHeaderHeight: PropTypes.number.isRequired,\n    hasScrollX: PropTypes.bool.isRequired,\n    hasScrollY: PropTypes.bool.isRequired,\n    headerFilterHeight: PropTypes.number.isRequired,\n    headerHeight: PropTypes.number.isRequired,\n    headersTotalHeight: PropTypes.number.isRequired,\n    isReady: PropTypes.bool.isRequired,\n    leftPinnedWidth: PropTypes.number.isRequired,\n    minimumSize: PropTypes.shape({\n      height: PropTypes.number.isRequired,\n      width: PropTypes.number.isRequired\n    }).isRequired,\n    rightPinnedWidth: PropTypes.number.isRequired,\n    root: PropTypes.shape({\n      height: PropTypes.number.isRequired,\n      width: PropTypes.number.isRequired\n    }).isRequired,\n    rowHeight: PropTypes.number.isRequired,\n    rowWidth: PropTypes.number.isRequired,\n    scrollbarSize: PropTypes.number.isRequired,\n    topContainerHeight: PropTypes.number.isRequired,\n    viewportInnerSize: PropTypes.shape({\n      height: PropTypes.number.isRequired,\n      width: PropTypes.number.isRequired\n    }).isRequired,\n    viewportOuterSize: PropTypes.shape({\n      height: PropTypes.number.isRequired,\n      width: PropTypes.number.isRequired\n    }).isRequired\n  }).isRequired,\n  /**\n   * Determines which cell has focus.\n   * If `null`, no cell in this row has focus.\n   */\n  focusedColumnIndex: PropTypes.number,\n  /**\n   * Index of the row in the whole sorted and filtered dataset.\n   * If some rows above have expanded children, this index also take those children into account.\n   */\n  index: PropTypes.number.isRequired,\n  isFirstVisible: PropTypes.bool.isRequired,\n  isLastVisible: PropTypes.bool.isRequired,\n  isNotVisible: PropTypes.bool.isRequired,\n  offsetLeft: PropTypes.number.isRequired,\n  offsetTop: PropTypes.number,\n  onClick: PropTypes.func,\n  onDoubleClick: PropTypes.func,\n  onMouseEnter: PropTypes.func,\n  onMouseLeave: PropTypes.func,\n  pinnedColumns: PropTypes.object.isRequired,\n  renderContext: PropTypes.shape({\n    firstColumnIndex: PropTypes.number.isRequired,\n    firstRowIndex: PropTypes.number.isRequired,\n    lastColumnIndex: PropTypes.number.isRequired,\n    lastRowIndex: PropTypes.number.isRequired\n  }).isRequired,\n  row: PropTypes.object.isRequired,\n  rowHeight: PropTypes.oneOfType([PropTypes.oneOf(['auto']), PropTypes.number]).isRequired,\n  rowId: PropTypes.oneOfType([PropTypes.number, PropTypes.string]).isRequired,\n  selected: PropTypes.bool.isRequired,\n  showBottomBorder: PropTypes.bool.isRequired,\n  /**\n   * Determines which cell should be tabbable by having tabIndex=0.\n   * If `null`, no cell in this row is in the tab sequence.\n   */\n  tabbableCell: PropTypes.string,\n  visibleColumns: PropTypes.arrayOf(PropTypes.object).isRequired\n} : void 0;\nconst MemoizedGridRow = fastMemo(GridRow);\nexport { MemoizedGridRow as GridRow };","import { unstable_composeClasses as composeClasses } from '@mui/utils';\nimport { getDataGridUtilityClass } from \"../constants/gridClasses.js\";\nexport function composeGridClasses(classes, slots) {\n  return composeClasses(slots, getDataGridUtilityClass, classes);\n}","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport _objectWithoutPropertiesLoose from \"@babel/runtime/helpers/esm/objectWithoutPropertiesLoose\";\nconst _excluded = [\"className\", \"rowCount\", \"visibleRowCount\"];\nimport * as React from 'react';\nimport PropTypes from 'prop-types';\nimport clsx from 'clsx';\nimport composeClasses from '@mui/utils/composeClasses';\nimport { styled } from '@mui/system';\nimport { useGridApiContext } from \"../hooks/utils/useGridApiContext.js\";\nimport { getDataGridUtilityClass } from \"../constants/gridClasses.js\";\nimport { useGridRootProps } from \"../hooks/utils/useGridRootProps.js\";\nimport { jsxs as _jsxs } from \"react/jsx-runtime\";\nconst useUtilityClasses = ownerState => {\n  const {\n    classes\n  } = ownerState;\n  const slots = {\n    root: ['rowCount']\n  };\n  return composeClasses(slots, getDataGridUtilityClass, classes);\n};\nconst GridRowCountRoot = styled('div', {\n  name: 'MuiDataGrid',\n  slot: 'RowCount',\n  overridesResolver: (props, styles) => styles.rowCount\n})(({\n  theme\n}) => ({\n  alignItems: 'center',\n  display: 'flex',\n  margin: theme.spacing(0, 2)\n}));\nconst GridRowCount = /*#__PURE__*/React.forwardRef(function GridRowCount(props, ref) {\n  const {\n      className,\n      rowCount,\n      visibleRowCount\n    } = props,\n    other = _objectWithoutPropertiesLoose(props, _excluded);\n  const apiRef = useGridApiContext();\n  const ownerState = useGridRootProps();\n  const classes = useUtilityClasses(ownerState);\n  if (rowCount === 0) {\n    return null;\n  }\n  const text = visibleRowCount < rowCount ? apiRef.current.getLocaleText('footerTotalVisibleRows')(visibleRowCount, rowCount) : rowCount.toLocaleString();\n  return /*#__PURE__*/_jsxs(GridRowCountRoot, _extends({\n    ref: ref,\n    className: clsx(classes.root, className),\n    ownerState: ownerState\n  }, other, {\n    children: [apiRef.current.getLocaleText('footerTotalRows'), \" \", text]\n  }));\n});\nprocess.env.NODE_ENV !== \"production\" ? GridRowCount.propTypes = {\n  // ----------------------------- Warning --------------------------------\n  // | These PropTypes are generated from the TypeScript type definitions |\n  // | To update them edit the TypeScript types and run \"pnpm proptypes\"  |\n  // ----------------------------------------------------------------------\n  rowCount: PropTypes.number.isRequired,\n  sx: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.func, PropTypes.object, PropTypes.bool])), PropTypes.func, PropTypes.object]),\n  visibleRowCount: PropTypes.number.isRequired\n} : void 0;\nexport { GridRowCount };","import * as React from 'react';\nimport clsx from 'clsx';\nimport { gridClasses } from \"../constants/index.js\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nconst classes = {\n  root: gridClasses.scrollbarFiller,\n  header: gridClasses['scrollbarFiller--header'],\n  borderTop: gridClasses['scrollbarFiller--borderTop'],\n  borderBottom: gridClasses['scrollbarFiller--borderBottom'],\n  pinnedRight: gridClasses['scrollbarFiller--pinnedRight']\n};\nfunction GridScrollbarFillerCell({\n  header,\n  borderTop = true,\n  borderBottom,\n  pinnedRight\n}) {\n  return /*#__PURE__*/_jsx(\"div\", {\n    role: \"presentation\",\n    className: clsx(classes.root, header && classes.header, borderTop && classes.borderTop, borderBottom && classes.borderBottom, pinnedRight && classes.pinnedRight)\n  });\n}\nexport { GridScrollbarFillerCell };","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport _objectWithoutPropertiesLoose from \"@babel/runtime/helpers/esm/objectWithoutPropertiesLoose\";\nconst _excluded = [\"className\", \"selectedRowCount\"];\nimport * as React from 'react';\nimport PropTypes from 'prop-types';\nimport clsx from 'clsx';\nimport composeClasses from '@mui/utils/composeClasses';\nimport { styled } from '@mui/system';\nimport { useGridApiContext } from \"../hooks/utils/useGridApiContext.js\";\nimport { getDataGridUtilityClass } from \"../constants/gridClasses.js\";\nimport { useGridRootProps } from \"../hooks/utils/useGridRootProps.js\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nconst useUtilityClasses = ownerState => {\n  const {\n    classes\n  } = ownerState;\n  const slots = {\n    root: ['selectedRowCount']\n  };\n  return composeClasses(slots, getDataGridUtilityClass, classes);\n};\nconst GridSelectedRowCountRoot = styled('div', {\n  name: 'MuiDataGrid',\n  slot: 'SelectedRowCount',\n  overridesResolver: (props, styles) => styles.selectedRowCount\n})(({\n  theme\n}) => ({\n  alignItems: 'center',\n  display: 'flex',\n  margin: theme.spacing(0, 2),\n  visibility: 'hidden',\n  width: 0,\n  height: 0,\n  [theme.breakpoints.up('sm')]: {\n    visibility: 'visible',\n    width: 'auto',\n    height: 'auto'\n  }\n}));\nconst GridSelectedRowCount = /*#__PURE__*/React.forwardRef(function GridSelectedRowCount(props, ref) {\n  const {\n      className,\n      selectedRowCount\n    } = props,\n    other = _objectWithoutPropertiesLoose(props, _excluded);\n  const apiRef = useGridApiContext();\n  const ownerState = useGridRootProps();\n  const classes = useUtilityClasses(ownerState);\n  const rowSelectedText = apiRef.current.getLocaleText('footerRowSelected')(selectedRowCount);\n  return /*#__PURE__*/_jsx(GridSelectedRowCountRoot, _extends({\n    ref: ref,\n    className: clsx(classes.root, className),\n    ownerState: ownerState\n  }, other, {\n    children: rowSelectedText\n  }));\n});\nprocess.env.NODE_ENV !== \"production\" ? GridSelectedRowCount.propTypes = {\n  // ----------------------------- Warning --------------------------------\n  // | These PropTypes are generated from the TypeScript type definitions |\n  // | To update them edit the TypeScript types and run \"pnpm proptypes\"  |\n  // ----------------------------------------------------------------------\n  selectedRowCount: PropTypes.number.isRequired,\n  sx: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.func, PropTypes.object, PropTypes.bool])), PropTypes.func, PropTypes.object])\n} : void 0;\nexport { GridSelectedRowCount };","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport * as React from 'react';\nimport { useGridRootProps } from \"../../hooks/utils/useGridRootProps.js\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nexport function GridFooterPlaceholder() {\n  const rootProps = useGridRootProps();\n  if (rootProps.hideFooter) {\n    return null;\n  }\n  return /*#__PURE__*/_jsx(rootProps.slots.footer, _extends({}, rootProps.slotProps?.footer /* FIXME: typing error */));\n}","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport * as React from 'react';\nimport PropTypes from 'prop-types';\nimport { styled } from '@mui/system';\nimport composeClasses from '@mui/utils/composeClasses';\nimport clsx from 'clsx';\nimport { useGridSelector } from \"../../hooks/utils/useGridSelector.js\";\nimport { gridDimensionsSelector } from \"../../hooks/features/dimensions/index.js\";\nimport { useGridApiContext } from \"../../hooks/utils/useGridApiContext.js\";\nimport { useGridRootProps } from \"../../hooks/utils/useGridRootProps.js\";\nimport { useGridVisibleRows } from \"../../hooks/utils/useGridVisibleRows.js\";\nimport { getMinimalContentHeight } from \"../../hooks/features/rows/gridRowsUtils.js\";\nimport { getDataGridUtilityClass } from \"../../constants/gridClasses.js\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nconst GridOverlayWrapperRoot = styled('div', {\n  name: 'MuiDataGrid',\n  slot: 'OverlayWrapper',\n  shouldForwardProp: prop => prop !== 'overlayType' && prop !== 'loadingOverlayVariant',\n  overridesResolver: (props, styles) => styles.overlayWrapper\n})(({\n  overlayType,\n  loadingOverlayVariant\n}) =>\n// Skeleton overlay should flow with the scroll container and not be sticky\nloadingOverlayVariant !== 'skeleton' ? {\n  position: 'sticky',\n  // To stay in place while scrolling\n  top: 'var(--DataGrid-headersTotalHeight)',\n  left: 0,\n  width: 0,\n  // To stay above the content instead of shifting it down\n  height: 0,\n  // To stay above the content instead of shifting it down\n  zIndex: overlayType === 'loadingOverlay' ? 5 // Should be above pinned columns, pinned rows, and detail panel\n  : 4 // Should be above pinned columns and detail panel\n} : {});\nconst GridOverlayWrapperInner = styled('div', {\n  name: 'MuiDataGrid',\n  slot: 'OverlayWrapperInner',\n  shouldForwardProp: prop => prop !== 'overlayType' && prop !== 'loadingOverlayVariant',\n  overridesResolver: (props, styles) => styles.overlayWrapperInner\n})({});\nconst useUtilityClasses = ownerState => {\n  const {\n    classes\n  } = ownerState;\n  const slots = {\n    root: ['overlayWrapper'],\n    inner: ['overlayWrapperInner']\n  };\n  return composeClasses(slots, getDataGridUtilityClass, classes);\n};\nfunction GridOverlayWrapper(props) {\n  const apiRef = useGridApiContext();\n  const rootProps = useGridRootProps();\n  const currentPage = useGridVisibleRows(apiRef, rootProps);\n  const dimensions = useGridSelector(apiRef, gridDimensionsSelector);\n  let height = dimensions.viewportOuterSize.height - dimensions.topContainerHeight - dimensions.bottomContainerHeight - (dimensions.hasScrollX ? dimensions.scrollbarSize : 0);\n  if (rootProps.autoHeight && currentPage.rows.length === 0 || height === 0) {\n    height = getMinimalContentHeight(apiRef);\n  }\n  const classes = useUtilityClasses(_extends({}, props, {\n    classes: rootProps.classes\n  }));\n  return /*#__PURE__*/_jsx(GridOverlayWrapperRoot, _extends({\n    className: clsx(classes.root)\n  }, props, {\n    children: /*#__PURE__*/_jsx(GridOverlayWrapperInner, _extends({\n      className: clsx(classes.inner),\n      style: {\n        height,\n        width: dimensions.viewportOuterSize.width\n      }\n    }, props))\n  }));\n}\nprocess.env.NODE_ENV !== \"production\" ? GridOverlays.propTypes = {\n  // ----------------------------- Warning --------------------------------\n  // | These PropTypes are generated from the TypeScript type definitions |\n  // | To update them edit the TypeScript types and run \"pnpm proptypes\"  |\n  // ----------------------------------------------------------------------\n  loadingOverlayVariant: PropTypes.oneOf(['circular-progress', 'linear-progress', 'skeleton']),\n  overlayType: PropTypes.oneOf(['loadingOverlay', 'noResultsOverlay', 'noRowsOverlay'])\n} : void 0;\nexport function GridOverlays(props) {\n  const {\n    overlayType\n  } = props;\n  const rootProps = useGridRootProps();\n  if (!overlayType) {\n    return null;\n  }\n  const Overlay = rootProps.slots?.[overlayType];\n  const overlayProps = rootProps.slotProps?.[overlayType];\n  return /*#__PURE__*/_jsx(GridOverlayWrapper, _extends({}, props, {\n    children: /*#__PURE__*/_jsx(Overlay, _extends({}, overlayProps))\n  }));\n}","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport _objectWithoutPropertiesLoose from \"@babel/runtime/helpers/esm/objectWithoutPropertiesLoose\";\nconst _excluded = [\"api\", \"colDef\", \"id\", \"hasFocus\", \"isEditable\", \"field\", \"value\", \"formattedValue\", \"row\", \"rowNode\", \"cellMode\", \"tabIndex\", \"position\", \"focusElementRef\"];\nimport * as React from 'react';\nimport PropTypes from 'prop-types';\nimport MenuList from '@mui/material/MenuList';\nimport { useRtl } from '@mui/system/RtlProvider';\nimport { unstable_useId as useId } from '@mui/utils';\nimport { gridClasses } from \"../../constants/gridClasses.js\";\nimport { GridMenu } from \"../menu/GridMenu.js\";\nimport { useGridRootProps } from \"../../hooks/utils/useGridRootProps.js\";\nimport { useGridApiContext } from \"../../hooks/utils/useGridApiContext.js\";\nimport { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nconst hasActions = colDef => typeof colDef.getActions === 'function';\nfunction GridActionsCell(props) {\n  const {\n      colDef,\n      id,\n      hasFocus,\n      tabIndex,\n      position = 'bottom-end',\n      focusElementRef\n    } = props,\n    other = _objectWithoutPropertiesLoose(props, _excluded);\n  const [focusedButtonIndex, setFocusedButtonIndex] = React.useState(-1);\n  const [open, setOpen] = React.useState(false);\n  const apiRef = useGridApiContext();\n  const rootRef = React.useRef(null);\n  const buttonRef = React.useRef(null);\n  const ignoreCallToFocus = React.useRef(false);\n  const touchRippleRefs = React.useRef({});\n  const isRtl = useRtl();\n  const menuId = useId();\n  const buttonId = useId();\n  const rootProps = useGridRootProps();\n  if (!hasActions(colDef)) {\n    throw new Error('MUI X: Missing the `getActions` property in the `GridColDef`.');\n  }\n  const options = colDef.getActions(apiRef.current.getRowParams(id));\n  const iconButtons = options.filter(option => !option.props.showInMenu);\n  const menuButtons = options.filter(option => option.props.showInMenu);\n  const numberOfButtons = iconButtons.length + (menuButtons.length ? 1 : 0);\n  React.useLayoutEffect(() => {\n    if (!hasFocus) {\n      Object.entries(touchRippleRefs.current).forEach(([index, ref]) => {\n        ref?.stop({}, () => {\n          delete touchRippleRefs.current[index];\n        });\n      });\n    }\n  }, [hasFocus]);\n  React.useEffect(() => {\n    if (focusedButtonIndex < 0 || !rootRef.current) {\n      return;\n    }\n    if (focusedButtonIndex >= rootRef.current.children.length) {\n      return;\n    }\n    const child = rootRef.current.children[focusedButtonIndex];\n    child.focus({\n      preventScroll: true\n    });\n  }, [focusedButtonIndex]);\n  React.useEffect(() => {\n    if (!hasFocus) {\n      setFocusedButtonIndex(-1);\n      ignoreCallToFocus.current = false;\n    }\n  }, [hasFocus]);\n  React.useImperativeHandle(focusElementRef, () => ({\n    focus() {\n      // If ignoreCallToFocus is true, then one of the buttons was clicked and the focus is already set\n      if (!ignoreCallToFocus.current) {\n        // find the first focusable button and pass the index to the state\n        const focusableButtonIndex = options.findIndex(o => !o.props.disabled);\n        setFocusedButtonIndex(focusableButtonIndex);\n      }\n    }\n  }), [options]);\n  React.useEffect(() => {\n    if (focusedButtonIndex >= numberOfButtons) {\n      setFocusedButtonIndex(numberOfButtons - 1);\n    }\n  }, [focusedButtonIndex, numberOfButtons]);\n  const showMenu = () => {\n    setOpen(true);\n    setFocusedButtonIndex(numberOfButtons - 1);\n    ignoreCallToFocus.current = true;\n  };\n  const hideMenu = () => {\n    setOpen(false);\n  };\n  const handleTouchRippleRef = index => instance => {\n    touchRippleRefs.current[index] = instance;\n  };\n  const handleButtonClick = (index, onClick) => event => {\n    setFocusedButtonIndex(index);\n    ignoreCallToFocus.current = true;\n    if (onClick) {\n      onClick(event);\n    }\n  };\n  const handleRootKeyDown = event => {\n    if (numberOfButtons <= 1) {\n      return;\n    }\n    const getNewIndex = (index, direction) => {\n      if (index < 0 || index > options.length) {\n        return index;\n      }\n\n      // for rtl mode we need to reverse the direction\n      const rtlMod = isRtl ? -1 : 1;\n      const indexMod = (direction === 'left' ? -1 : 1) * rtlMod;\n\n      // if the button that should receive focus is disabled go one more step\n      return options[index + indexMod]?.props.disabled ? getNewIndex(index + indexMod, direction) : index + indexMod;\n    };\n    let newIndex = focusedButtonIndex;\n    if (event.key === 'ArrowRight') {\n      newIndex = getNewIndex(focusedButtonIndex, 'right');\n    } else if (event.key === 'ArrowLeft') {\n      newIndex = getNewIndex(focusedButtonIndex, 'left');\n    }\n    if (newIndex < 0 || newIndex >= numberOfButtons) {\n      return; // We're already in the first or last item = do nothing and let the grid listen the event\n    }\n    if (newIndex !== focusedButtonIndex) {\n      event.preventDefault(); // Prevent scrolling\n      event.stopPropagation(); // Don't stop propagation for other keys, for example ArrowUp\n      setFocusedButtonIndex(newIndex);\n    }\n  };\n  const handleListKeyDown = event => {\n    if (event.key === 'Tab') {\n      event.preventDefault();\n    }\n    if (['Tab', 'Escape'].includes(event.key)) {\n      hideMenu();\n    }\n  };\n  return /*#__PURE__*/_jsxs(\"div\", _extends({\n    role: \"menu\",\n    ref: rootRef,\n    tabIndex: -1,\n    className: gridClasses.actionsCell,\n    onKeyDown: handleRootKeyDown\n  }, other, {\n    children: [iconButtons.map((button, index) => /*#__PURE__*/React.cloneElement(button, {\n      key: index,\n      touchRippleRef: handleTouchRippleRef(index),\n      onClick: handleButtonClick(index, button.props.onClick),\n      tabIndex: focusedButtonIndex === index ? tabIndex : -1\n    })), menuButtons.length > 0 && buttonId && /*#__PURE__*/_jsx(rootProps.slots.baseIconButton, _extends({\n      ref: buttonRef,\n      id: buttonId,\n      \"aria-label\": apiRef.current.getLocaleText('actionsCellMore'),\n      \"aria-haspopup\": \"menu\",\n      \"aria-expanded\": open,\n      \"aria-controls\": open ? menuId : undefined,\n      role: \"menuitem\",\n      size: \"small\",\n      onClick: showMenu,\n      touchRippleRef: handleTouchRippleRef(buttonId),\n      tabIndex: focusedButtonIndex === iconButtons.length ? tabIndex : -1\n    }, rootProps.slotProps?.baseIconButton, {\n      children: /*#__PURE__*/_jsx(rootProps.slots.moreActionsIcon, {\n        fontSize: \"small\"\n      })\n    })), menuButtons.length > 0 && /*#__PURE__*/_jsx(GridMenu, {\n      open: open,\n      target: buttonRef.current,\n      position: position,\n      onClose: hideMenu,\n      children: /*#__PURE__*/_jsx(MenuList, {\n        id: menuId,\n        className: gridClasses.menuList,\n        onKeyDown: handleListKeyDown,\n        \"aria-labelledby\": buttonId,\n        variant: \"menu\",\n        autoFocusItem: true,\n        children: menuButtons.map((button, index) => /*#__PURE__*/React.cloneElement(button, {\n          key: index,\n          closeMenu: hideMenu\n        }))\n      })\n    })]\n  }));\n}\nprocess.env.NODE_ENV !== \"production\" ? GridActionsCell.propTypes = {\n  // ----------------------------- Warning --------------------------------\n  // | These PropTypes are generated from the TypeScript type definitions |\n  // | To update them edit the TypeScript types and run \"pnpm proptypes\"  |\n  // ----------------------------------------------------------------------\n  api: PropTypes.object,\n  /**\n   * The mode of the cell.\n   */\n  cellMode: PropTypes.oneOf(['edit', 'view']).isRequired,\n  /**\n   * The column of the row that the current cell belongs to.\n   */\n  colDef: PropTypes.object.isRequired,\n  /**\n   * The column field of the cell that triggered the event.\n   */\n  field: PropTypes.string.isRequired,\n  /**\n   * A ref allowing to set imperative focus.\n   * It can be passed to the element that should receive focus.\n   * @ignore - do not document.\n   */\n  focusElementRef: PropTypes.oneOfType([PropTypes.func, PropTypes.shape({\n    current: PropTypes.shape({\n      focus: PropTypes.func.isRequired\n    })\n  })]),\n  /**\n   * The cell value formatted with the column valueFormatter.\n   */\n  formattedValue: PropTypes.any,\n  /**\n   * If true, the cell is the active element.\n   */\n  hasFocus: PropTypes.bool.isRequired,\n  /**\n   * The grid row id.\n   */\n  id: PropTypes.oneOfType([PropTypes.number, PropTypes.string]).isRequired,\n  /**\n   * If true, the cell is editable.\n   */\n  isEditable: PropTypes.bool,\n  position: PropTypes.oneOf(['bottom-end', 'bottom-start', 'bottom', 'left-end', 'left-start', 'left', 'right-end', 'right-start', 'right', 'top-end', 'top-start', 'top']),\n  /**\n   * The row model of the row that the current cell belongs to.\n   */\n  row: PropTypes.any.isRequired,\n  /**\n   * The node of the row that the current cell belongs to.\n   */\n  rowNode: PropTypes.object.isRequired,\n  /**\n   * the tabIndex value.\n   */\n  tabIndex: PropTypes.oneOf([-1, 0]).isRequired,\n  /**\n   * The cell value.\n   * If the column has `valueGetter`, use `params.row` to directly access the fields.\n   */\n  value: PropTypes.any\n} : void 0;\nexport { GridActionsCell };\nexport const renderActionsCell = params => /*#__PURE__*/_jsx(GridActionsCell, _extends({}, params));","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport _objectWithoutPropertiesLoose from \"@babel/runtime/helpers/esm/objectWithoutPropertiesLoose\";\nconst _excluded = [\"id\", \"value\", \"formattedValue\", \"api\", \"field\", \"row\", \"rowNode\", \"colDef\", \"cellMode\", \"isEditable\", \"hasFocus\", \"tabIndex\", \"hideDescendantCount\"];\nimport * as React from 'react';\nimport PropTypes from 'prop-types';\nimport composeClasses from '@mui/utils/composeClasses';\nimport { getDataGridUtilityClass } from \"../../constants/gridClasses.js\";\nimport { useGridRootProps } from \"../../hooks/utils/useGridRootProps.js\";\nimport { useGridApiContext } from \"../../hooks/utils/useGridApiContext.js\";\nimport { isAutogeneratedRowNode } from \"../../hooks/features/rows/gridRowsUtils.js\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nconst useUtilityClasses = ownerState => {\n  const {\n    classes\n  } = ownerState;\n  const slots = {\n    root: ['booleanCell']\n  };\n  return composeClasses(slots, getDataGridUtilityClass, classes);\n};\nfunction GridBooleanCellRaw(props) {\n  const {\n      value\n    } = props,\n    other = _objectWithoutPropertiesLoose(props, _excluded);\n  const apiRef = useGridApiContext();\n  const rootProps = useGridRootProps();\n  const ownerState = {\n    classes: rootProps.classes\n  };\n  const classes = useUtilityClasses(ownerState);\n  const Icon = React.useMemo(() => value ? rootProps.slots.booleanCellTrueIcon : rootProps.slots.booleanCellFalseIcon, [rootProps.slots.booleanCellFalseIcon, rootProps.slots.booleanCellTrueIcon, value]);\n  return /*#__PURE__*/_jsx(Icon, _extends({\n    fontSize: \"small\",\n    className: classes.root,\n    titleAccess: apiRef.current.getLocaleText(value ? 'booleanCellTrueLabel' : 'booleanCellFalseLabel'),\n    \"data-value\": Boolean(value)\n  }, other));\n}\nprocess.env.NODE_ENV !== \"production\" ? GridBooleanCellRaw.propTypes = {\n  // ----------------------------- Warning --------------------------------\n  // | These PropTypes are generated from the TypeScript type definitions |\n  // | To update them edit the TypeScript types and run \"pnpm proptypes\"  |\n  // ----------------------------------------------------------------------\n  /**\n   * GridApi that let you manipulate the grid.\n   */\n  api: PropTypes.object.isRequired,\n  /**\n   * The mode of the cell.\n   */\n  cellMode: PropTypes.oneOf(['edit', 'view']).isRequired,\n  /**\n   * The column of the row that the current cell belongs to.\n   */\n  colDef: PropTypes.object.isRequired,\n  /**\n   * The column field of the cell that triggered the event.\n   */\n  field: PropTypes.string.isRequired,\n  /**\n   * A ref allowing to set imperative focus.\n   * It can be passed to the element that should receive focus.\n   * @ignore - do not document.\n   */\n  focusElementRef: PropTypes.oneOfType([PropTypes.func, PropTypes.shape({\n    current: PropTypes.shape({\n      focus: PropTypes.func.isRequired\n    })\n  })]),\n  /**\n   * The cell value formatted with the column valueFormatter.\n   */\n  formattedValue: PropTypes.any,\n  /**\n   * If true, the cell is the active element.\n   */\n  hasFocus: PropTypes.bool.isRequired,\n  hideDescendantCount: PropTypes.bool,\n  /**\n   * The grid row id.\n   */\n  id: PropTypes.oneOfType([PropTypes.number, PropTypes.string]).isRequired,\n  /**\n   * If true, the cell is editable.\n   */\n  isEditable: PropTypes.bool,\n  /**\n   * The row model of the row that the current cell belongs to.\n   */\n  row: PropTypes.any.isRequired,\n  /**\n   * The node of the row that the current cell belongs to.\n   */\n  rowNode: PropTypes.object.isRequired,\n  /**\n   * the tabIndex value.\n   */\n  tabIndex: PropTypes.oneOf([-1, 0]).isRequired,\n  /**\n   * The cell value.\n   * If the column has `valueGetter`, use `params.row` to directly access the fields.\n   */\n  value: PropTypes.any\n} : void 0;\nconst GridBooleanCell = /*#__PURE__*/React.memo(GridBooleanCellRaw);\nexport { GridBooleanCell };\nexport const renderBooleanCell = params => {\n  if (params.field !== '__row_group_by_columns_group__' && isAutogeneratedRowNode(params.rowNode)) {\n    return '';\n  }\n  return /*#__PURE__*/_jsx(GridBooleanCell, _extends({}, params));\n};","// Based on https://stackoverflow.com/a/59518678\nlet cachedSupportsPreventScroll;\nexport function doesSupportPreventScroll() {\n  if (cachedSupportsPreventScroll === undefined) {\n    document.createElement('div').focus({\n      get preventScroll() {\n        cachedSupportsPreventScroll = true;\n        return false;\n      }\n    });\n  }\n  return cachedSupportsPreventScroll;\n}","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport _objectWithoutPropertiesLoose from \"@babel/runtime/helpers/esm/objectWithoutPropertiesLoose\";\nconst _excluded = [\"column\", \"rowId\", \"editCellState\", \"align\", \"children\", \"colIndex\", \"width\", \"className\", \"style\", \"gridHasScrollX\", \"colSpan\", \"disableDragEvents\", \"isNotVisible\", \"pinnedOffset\", \"pinnedPosition\", \"sectionIndex\", \"sectionLength\", \"gridHasFiller\", \"onClick\", \"onDoubleClick\", \"onMouseDown\", \"onMouseUp\", \"onMouseOver\", \"onKeyDown\", \"onKeyUp\", \"onDragEnter\", \"onDragOver\"],\n  _excluded2 = [\"changeReason\", \"unstable_updateValueOnRender\"];\nimport * as React from 'react';\nimport PropTypes from 'prop-types';\nimport clsx from 'clsx';\nimport { unstable_useForkRef as useForkRef, unstable_composeClasses as composeClasses, unstable_ownerDocument as ownerDocument, unstable_capitalize as capitalize } from '@mui/utils';\nimport { fastMemo } from '@mui/x-internals/fastMemo';\nimport { useRtl } from '@mui/system/RtlProvider';\nimport { doesSupportPreventScroll } from \"../../utils/doesSupportPreventScroll.js\";\nimport { getDataGridUtilityClass, gridClasses } from \"../../constants/gridClasses.js\";\nimport { GridCellModes } from \"../../models/index.js\";\nimport { useGridSelector, objectShallowCompare } from \"../../hooks/utils/useGridSelector.js\";\nimport { useGridApiContext } from \"../../hooks/utils/useGridApiContext.js\";\nimport { useGridRootProps } from \"../../hooks/utils/useGridRootProps.js\";\nimport { gridFocusCellSelector } from \"../../hooks/features/focus/gridFocusStateSelector.js\";\nimport { MissingRowIdError } from \"../../hooks/features/rows/useGridParamsApi.js\";\nimport { shouldCellShowLeftBorder, shouldCellShowRightBorder } from \"../../utils/cellBorderUtils.js\";\nimport { GridPinnedColumnPosition } from \"../../hooks/features/columns/gridColumnsInterfaces.js\";\nimport { gridRowSpanningHiddenCellsSelector, gridRowSpanningSpannedCellsSelector } from \"../../hooks/features/rows/gridRowSpanningSelectors.js\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nexport let PinnedPosition = /*#__PURE__*/function (PinnedPosition) {\n  PinnedPosition[PinnedPosition[\"NONE\"] = 0] = \"NONE\";\n  PinnedPosition[PinnedPosition[\"LEFT\"] = 1] = \"LEFT\";\n  PinnedPosition[PinnedPosition[\"RIGHT\"] = 2] = \"RIGHT\";\n  PinnedPosition[PinnedPosition[\"VIRTUAL\"] = 3] = \"VIRTUAL\";\n  return PinnedPosition;\n}({});\nexport const gridPinnedColumnPositionLookup = {\n  [PinnedPosition.LEFT]: GridPinnedColumnPosition.LEFT,\n  [PinnedPosition.RIGHT]: GridPinnedColumnPosition.RIGHT,\n  [PinnedPosition.NONE]: undefined,\n  [PinnedPosition.VIRTUAL]: undefined\n};\nconst EMPTY_CELL_PARAMS = {\n  id: -1,\n  field: '__unset__',\n  row: {},\n  rowNode: {\n    id: -1,\n    depth: 0,\n    type: 'leaf',\n    parent: -1,\n    groupingKey: null\n  },\n  colDef: {\n    type: 'string',\n    field: '__unset__',\n    computedWidth: 0\n  },\n  cellMode: GridCellModes.View,\n  hasFocus: false,\n  tabIndex: -1,\n  value: null,\n  formattedValue: '__unset__',\n  isEditable: false,\n  api: {}\n};\nconst useUtilityClasses = ownerState => {\n  const {\n    align,\n    showLeftBorder,\n    showRightBorder,\n    pinnedPosition,\n    isEditable,\n    isSelected,\n    isSelectionMode,\n    classes\n  } = ownerState;\n  const slots = {\n    root: ['cell', `cell--text${capitalize(align)}`, isSelected && 'selected', isEditable && 'cell--editable', showLeftBorder && 'cell--withLeftBorder', showRightBorder && 'cell--withRightBorder', pinnedPosition === PinnedPosition.LEFT && 'cell--pinnedLeft', pinnedPosition === PinnedPosition.RIGHT && 'cell--pinnedRight', isSelectionMode && !isEditable && 'cell--selectionMode']\n  };\n  return composeClasses(slots, getDataGridUtilityClass, classes);\n};\nlet warnedOnce = false;\n\n// TODO(v7): Removing the wrapper will break the docs performance visualization demo.\n\nconst GridCell = /*#__PURE__*/React.forwardRef(function GridCell(props, ref) {\n  const {\n      column,\n      rowId,\n      editCellState,\n      align,\n      colIndex,\n      width,\n      className,\n      style: styleProp,\n      colSpan,\n      disableDragEvents,\n      isNotVisible,\n      pinnedOffset,\n      pinnedPosition,\n      sectionIndex,\n      sectionLength,\n      gridHasFiller,\n      onClick,\n      onDoubleClick,\n      onMouseDown,\n      onMouseUp,\n      onMouseOver,\n      onKeyDown,\n      onKeyUp,\n      onDragEnter,\n      onDragOver\n    } = props,\n    other = _objectWithoutPropertiesLoose(props, _excluded);\n  const apiRef = useGridApiContext();\n  const rootProps = useGridRootProps();\n  const isRtl = useRtl();\n  const field = column.field;\n  const cellParams = useGridSelector(apiRef, () => {\n    // This is required because `.getCellParams` tries to get the `state.rows.tree` entry\n    // associated with `rowId`/`fieldId`, but this selector runs after the state has been\n    // updated, while `rowId`/`fieldId` reference an entry in the old state.\n    try {\n      const result = apiRef.current.getCellParams(rowId, field);\n      result.api = apiRef.current;\n      return result;\n    } catch (e) {\n      if (e instanceof MissingRowIdError) {\n        return EMPTY_CELL_PARAMS;\n      }\n      throw e;\n    }\n  }, objectShallowCompare);\n  const isSelected = useGridSelector(apiRef, () => apiRef.current.unstable_applyPipeProcessors('isCellSelected', false, {\n    id: rowId,\n    field\n  }));\n  const hiddenCells = useGridSelector(apiRef, gridRowSpanningHiddenCellsSelector);\n  const spannedCells = useGridSelector(apiRef, gridRowSpanningSpannedCellsSelector);\n  const {\n    cellMode,\n    hasFocus,\n    isEditable = false,\n    value\n  } = cellParams;\n  const canManageOwnFocus = column.type === 'actions' && column.getActions?.(apiRef.current.getRowParams(rowId)).some(action => !action.props.disabled);\n  const tabIndex = (cellMode === 'view' || !isEditable) && !canManageOwnFocus ? cellParams.tabIndex : -1;\n  const {\n    classes: rootClasses,\n    getCellClassName\n  } = rootProps;\n\n  // There is a hidden grid state access in `applyPipeProcessor('cellClassName', ...)`\n  const pipesClassName = useGridSelector(apiRef, () => apiRef.current.unstable_applyPipeProcessors('cellClassName', [], {\n    id: rowId,\n    field\n  }).filter(Boolean).join(' '));\n  const classNames = [pipesClassName];\n  if (column.cellClassName) {\n    classNames.push(typeof column.cellClassName === 'function' ? column.cellClassName(cellParams) : column.cellClassName);\n  }\n  if (column.display === 'flex') {\n    classNames.push(gridClasses['cell--flex']);\n  }\n  if (getCellClassName) {\n    classNames.push(getCellClassName(cellParams));\n  }\n  const valueToRender = cellParams.formattedValue ?? value;\n  const cellRef = React.useRef(null);\n  const handleRef = useForkRef(ref, cellRef);\n  const focusElementRef = React.useRef(null);\n  const isSelectionMode = rootProps.cellSelection ?? false;\n  const position = gridPinnedColumnPositionLookup[pinnedPosition];\n  const showLeftBorder = shouldCellShowLeftBorder(position, sectionIndex);\n  const showRightBorder = shouldCellShowRightBorder(position, sectionIndex, sectionLength, rootProps.showCellVerticalBorder, gridHasFiller);\n  const ownerState = {\n    align,\n    showLeftBorder,\n    showRightBorder,\n    isEditable,\n    classes: rootProps.classes,\n    pinnedPosition,\n    isSelected,\n    isSelectionMode\n  };\n  const classes = useUtilityClasses(ownerState);\n  const publishMouseUp = React.useCallback(eventName => event => {\n    const params = apiRef.current.getCellParams(rowId, field || '');\n    apiRef.current.publishEvent(eventName, params, event);\n    if (onMouseUp) {\n      onMouseUp(event);\n    }\n  }, [apiRef, field, onMouseUp, rowId]);\n  const publishMouseDown = React.useCallback(eventName => event => {\n    const params = apiRef.current.getCellParams(rowId, field || '');\n    apiRef.current.publishEvent(eventName, params, event);\n    if (onMouseDown) {\n      onMouseDown(event);\n    }\n  }, [apiRef, field, onMouseDown, rowId]);\n  const publish = React.useCallback((eventName, propHandler) => event => {\n    // The row might have been deleted during the click\n    if (!apiRef.current.getRow(rowId)) {\n      return;\n    }\n    const params = apiRef.current.getCellParams(rowId, field || '');\n    apiRef.current.publishEvent(eventName, params, event);\n    if (propHandler) {\n      propHandler(event);\n    }\n  }, [apiRef, field, rowId]);\n  const isCellRowSpanned = hiddenCells[rowId]?.[field] ?? false;\n  const rowSpan = spannedCells[rowId]?.[field] ?? 1;\n  const style = React.useMemo(() => {\n    if (isNotVisible) {\n      return {\n        padding: 0,\n        opacity: 0,\n        width: 0,\n        border: 0\n      };\n    }\n    const cellStyle = _extends({\n      '--width': `${width}px`\n    }, styleProp);\n    const isLeftPinned = pinnedPosition === PinnedPosition.LEFT;\n    const isRightPinned = pinnedPosition === PinnedPosition.RIGHT;\n    if (isLeftPinned || isRightPinned) {\n      let side = isLeftPinned ? 'left' : 'right';\n      if (isRtl) {\n        side = isLeftPinned ? 'right' : 'left';\n      }\n      cellStyle[side] = pinnedOffset;\n    }\n    if (rowSpan > 1) {\n      cellStyle.height = `calc(var(--height) * ${rowSpan})`;\n      cellStyle.zIndex = 5;\n    }\n    return cellStyle;\n  }, [width, isNotVisible, styleProp, pinnedOffset, pinnedPosition, isRtl, rowSpan]);\n  React.useEffect(() => {\n    if (!hasFocus || cellMode === GridCellModes.Edit) {\n      return;\n    }\n    const doc = ownerDocument(apiRef.current.rootElementRef.current);\n    if (cellRef.current && !cellRef.current.contains(doc.activeElement)) {\n      const focusableElement = cellRef.current.querySelector('[tabindex=\"0\"]');\n      const elementToFocus = focusElementRef.current || focusableElement || cellRef.current;\n      if (doesSupportPreventScroll()) {\n        elementToFocus.focus({\n          preventScroll: true\n        });\n      } else {\n        const scrollPosition = apiRef.current.getScrollPosition();\n        elementToFocus.focus();\n        apiRef.current.scroll(scrollPosition);\n      }\n    }\n  }, [hasFocus, cellMode, apiRef]);\n  if (isCellRowSpanned) {\n    return /*#__PURE__*/_jsx(\"div\", {\n      \"data-colindex\": colIndex,\n      role: \"presentation\",\n      style: _extends({}, style, {\n        minWidth: 'var(--width)',\n        maxWidth: 'var(--width)'\n      })\n    });\n  }\n  if (cellParams === EMPTY_CELL_PARAMS) {\n    return null;\n  }\n  let handleFocus = other.onFocus;\n  if (process.env.NODE_ENV === 'test' && rootProps.experimentalFeatures?.warnIfFocusStateIsNotSynced) {\n    handleFocus = event => {\n      const focusedCell = gridFocusCellSelector(apiRef);\n      if (focusedCell?.id === rowId && focusedCell.field === field) {\n        if (typeof other.onFocus === 'function') {\n          other.onFocus(event);\n        }\n        return;\n      }\n      if (!warnedOnce) {\n        console.warn([`MUI X: The cell with id=${rowId} and field=${field} received focus.`, `According to the state, the focus should be at id=${focusedCell?.id}, field=${focusedCell?.field}.`, \"Not syncing the state may cause unwanted behaviors since the `cellFocusIn` event won't be fired.\", 'Call `fireEvent.mouseUp` before the `fireEvent.click` to sync the focus with the state.'].join('\\n'));\n        warnedOnce = true;\n      }\n    };\n  }\n  let children;\n  let title;\n  if (editCellState === null && column.renderCell) {\n    children = column.renderCell(cellParams);\n  }\n  if (editCellState !== null && column.renderEditCell) {\n    const updatedRow = apiRef.current.getRowWithUpdatedValues(rowId, column.field);\n\n    // eslint-disable-next-line @typescript-eslint/naming-convention\n    const editCellStateRest = _objectWithoutPropertiesLoose(editCellState, _excluded2);\n    const formattedValue = column.valueFormatter ? column.valueFormatter(editCellState.value, updatedRow, column, apiRef) : cellParams.formattedValue;\n    const params = _extends({}, cellParams, {\n      row: updatedRow,\n      formattedValue\n    }, editCellStateRest);\n    children = column.renderEditCell(params);\n    classNames.push(gridClasses['cell--editing']);\n    classNames.push(rootClasses?.['cell--editing']);\n  }\n  if (children === undefined) {\n    const valueString = valueToRender?.toString();\n    children = valueString;\n    title = valueString;\n  }\n  if (/*#__PURE__*/React.isValidElement(children) && canManageOwnFocus) {\n    children = /*#__PURE__*/React.cloneElement(children, {\n      focusElementRef\n    });\n  }\n  const draggableEventHandlers = disableDragEvents ? null : {\n    onDragEnter: publish('cellDragEnter', onDragEnter),\n    onDragOver: publish('cellDragOver', onDragOver)\n  };\n  return /*#__PURE__*/_jsx(\"div\", _extends({\n    ref: handleRef,\n    className: clsx(className, classNames, classes.root),\n    role: \"gridcell\",\n    \"data-field\": field,\n    \"data-colindex\": colIndex,\n    \"aria-colindex\": colIndex + 1,\n    \"aria-colspan\": colSpan,\n    \"aria-rowspan\": rowSpan,\n    style: style,\n    title: title,\n    tabIndex: tabIndex,\n    onClick: publish('cellClick', onClick),\n    onDoubleClick: publish('cellDoubleClick', onDoubleClick),\n    onMouseOver: publish('cellMouseOver', onMouseOver),\n    onMouseDown: publishMouseDown('cellMouseDown'),\n    onMouseUp: publishMouseUp('cellMouseUp'),\n    onKeyDown: publish('cellKeyDown', onKeyDown),\n    onKeyUp: publish('cellKeyUp', onKeyUp)\n  }, draggableEventHandlers, other, {\n    onFocus: handleFocus,\n    children: children\n  }));\n});\nprocess.env.NODE_ENV !== \"production\" ? GridCell.propTypes = {\n  // ----------------------------- Warning --------------------------------\n  // | These PropTypes are generated from the TypeScript type definitions |\n  // | To update them edit the TypeScript types and run \"pnpm proptypes\"  |\n  // ----------------------------------------------------------------------\n  align: PropTypes.oneOf(['center', 'left', 'right']).isRequired,\n  className: PropTypes.string,\n  colIndex: PropTypes.number.isRequired,\n  colSpan: PropTypes.number,\n  column: PropTypes.object.isRequired,\n  disableDragEvents: PropTypes.bool,\n  editCellState: PropTypes.shape({\n    changeReason: PropTypes.oneOf(['debouncedSetEditCellValue', 'setEditCellValue']),\n    isProcessingProps: PropTypes.bool,\n    isValidating: PropTypes.bool,\n    value: PropTypes.any\n  }),\n  gridHasFiller: PropTypes.bool.isRequired,\n  isNotVisible: PropTypes.bool.isRequired,\n  onClick: PropTypes.func,\n  onDoubleClick: PropTypes.func,\n  onDragEnter: PropTypes.func,\n  onDragOver: PropTypes.func,\n  onKeyDown: PropTypes.func,\n  onMouseDown: PropTypes.func,\n  onMouseUp: PropTypes.func,\n  pinnedOffset: PropTypes.number.isRequired,\n  pinnedPosition: PropTypes.oneOf([0, 1, 2, 3]).isRequired,\n  rowId: PropTypes.oneOfType([PropTypes.number, PropTypes.string]).isRequired,\n  sectionIndex: PropTypes.number.isRequired,\n  sectionLength: PropTypes.number.isRequired,\n  width: PropTypes.number.isRequired\n} : void 0;\nconst MemoizedGridCell = fastMemo(GridCell);\nexport { MemoizedGridCell as GridCell };","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport _objectWithoutPropertiesLoose from \"@babel/runtime/helpers/esm/objectWithoutPropertiesLoose\";\nconst _excluded = [\"id\", \"value\", \"formattedValue\", \"api\", \"field\", \"row\", \"rowNode\", \"colDef\", \"cellMode\", \"isEditable\", \"tabIndex\", \"className\", \"hasFocus\", \"isValidating\", \"isProcessingProps\", \"error\", \"onValueChange\"];\nimport * as React from 'react';\nimport PropTypes from 'prop-types';\nimport clsx from 'clsx';\nimport { unstable_composeClasses as composeClasses, unstable_useId as useId, unstable_useEnhancedEffect as useEnhancedEffect } from '@mui/utils';\nimport { getDataGridUtilityClass } from \"../../constants/gridClasses.js\";\nimport { useGridRootProps } from \"../../hooks/utils/useGridRootProps.js\";\nimport { useGridApiContext } from \"../../hooks/utils/useGridApiContext.js\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nconst useUtilityClasses = ownerState => {\n  const {\n    classes\n  } = ownerState;\n  const slots = {\n    root: ['editBooleanCell']\n  };\n  return composeClasses(slots, getDataGridUtilityClass, classes);\n};\nfunction GridEditBooleanCell(props) {\n  const {\n      id: idProp,\n      value,\n      field,\n      className,\n      hasFocus,\n      onValueChange\n    } = props,\n    other = _objectWithoutPropertiesLoose(props, _excluded);\n  const apiRef = useGridApiContext();\n  const inputRef = React.useRef(null);\n  const id = useId();\n  const [valueState, setValueState] = React.useState(value);\n  const rootProps = useGridRootProps();\n  const ownerState = {\n    classes: rootProps.classes\n  };\n  const classes = useUtilityClasses(ownerState);\n  const handleChange = React.useCallback(async event => {\n    const newValue = event.target.checked;\n    if (onValueChange) {\n      await onValueChange(event, newValue);\n    }\n    setValueState(newValue);\n    await apiRef.current.setEditCellValue({\n      id: idProp,\n      field,\n      value: newValue\n    }, event);\n  }, [apiRef, field, idProp, onValueChange]);\n  React.useEffect(() => {\n    setValueState(value);\n  }, [value]);\n  useEnhancedEffect(() => {\n    if (hasFocus) {\n      inputRef.current.focus();\n    }\n  }, [hasFocus]);\n  return /*#__PURE__*/_jsx(\"label\", _extends({\n    htmlFor: id,\n    className: clsx(classes.root, className)\n  }, other, {\n    children: /*#__PURE__*/_jsx(rootProps.slots.baseCheckbox, _extends({\n      id: id,\n      inputRef: inputRef,\n      checked: Boolean(valueState),\n      onChange: handleChange,\n      size: \"small\"\n    }, rootProps.slotProps?.baseCheckbox))\n  }));\n}\nprocess.env.NODE_ENV !== \"production\" ? GridEditBooleanCell.propTypes = {\n  // ----------------------------- Warning --------------------------------\n  // | These PropTypes are generated from the TypeScript type definitions |\n  // | To update them edit the TypeScript types and run \"pnpm proptypes\"  |\n  // ----------------------------------------------------------------------\n  /**\n   * GridApi that let you manipulate the grid.\n   */\n  api: PropTypes.object.isRequired,\n  /**\n   * The mode of the cell.\n   */\n  cellMode: PropTypes.oneOf(['edit', 'view']).isRequired,\n  changeReason: PropTypes.oneOf(['debouncedSetEditCellValue', 'setEditCellValue']),\n  /**\n   * The column of the row that the current cell belongs to.\n   */\n  colDef: PropTypes.object.isRequired,\n  /**\n   * The column field of the cell that triggered the event.\n   */\n  field: PropTypes.string.isRequired,\n  /**\n   * The cell value formatted with the column valueFormatter.\n   */\n  formattedValue: PropTypes.any,\n  /**\n   * If true, the cell is the active element.\n   */\n  hasFocus: PropTypes.bool.isRequired,\n  /**\n   * The grid row id.\n   */\n  id: PropTypes.oneOfType([PropTypes.number, PropTypes.string]).isRequired,\n  /**\n   * If true, the cell is editable.\n   */\n  isEditable: PropTypes.bool,\n  isProcessingProps: PropTypes.bool,\n  isValidating: PropTypes.bool,\n  /**\n   * Callback called when the value is changed by the user.\n   * @param {React.ChangeEvent<HTMLInputElement>} event The event source of the callback.\n   * @param {boolean} newValue The value that is going to be passed to `apiRef.current.setEditCellValue`.\n   * @returns {Promise<void> | void} A promise to be awaited before calling `apiRef.current.setEditCellValue`\n   */\n  onValueChange: PropTypes.func,\n  /**\n   * The row model of the row that the current cell belongs to.\n   */\n  row: PropTypes.any.isRequired,\n  /**\n   * The node of the row that the current cell belongs to.\n   */\n  rowNode: PropTypes.object.isRequired,\n  /**\n   * the tabIndex value.\n   */\n  tabIndex: PropTypes.oneOf([-1, 0]).isRequired,\n  /**\n   * The cell value.\n   * If the column has `valueGetter`, use `params.row` to directly access the fields.\n   */\n  value: PropTypes.any\n} : void 0;\nexport { GridEditBooleanCell };\nexport const renderEditBooleanCell = params => /*#__PURE__*/_jsx(GridEditBooleanCell, _extends({}, params));","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport _objectWithoutPropertiesLoose from \"@babel/runtime/helpers/esm/objectWithoutPropertiesLoose\";\nconst _excluded = [\"id\", \"value\", \"formattedValue\", \"api\", \"field\", \"row\", \"rowNode\", \"colDef\", \"cellMode\", \"isEditable\", \"tabIndex\", \"hasFocus\", \"inputProps\", \"isValidating\", \"isProcessingProps\", \"onValueChange\"];\nimport * as React from 'react';\nimport PropTypes from 'prop-types';\nimport { unstable_composeClasses as composeClasses, unstable_useEnhancedEffect as useEnhancedEffect } from '@mui/utils';\nimport InputBase from '@mui/material/InputBase';\nimport { styled } from '@mui/material/styles';\nimport { getDataGridUtilityClass } from \"../../constants/gridClasses.js\";\nimport { useGridRootProps } from \"../../hooks/utils/useGridRootProps.js\";\nimport { useGridApiContext } from \"../../hooks/utils/useGridApiContext.js\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nconst StyledInputBase = styled(InputBase)({\n  fontSize: 'inherit'\n});\nconst useUtilityClasses = ownerState => {\n  const {\n    classes\n  } = ownerState;\n  const slots = {\n    root: ['editInputCell']\n  };\n  return composeClasses(slots, getDataGridUtilityClass, classes);\n};\nfunction GridEditDateCell(props) {\n  const {\n      id,\n      value: valueProp,\n      field,\n      colDef,\n      hasFocus,\n      inputProps,\n      onValueChange\n    } = props,\n    other = _objectWithoutPropertiesLoose(props, _excluded);\n  const isDateTime = colDef.type === 'dateTime';\n  const apiRef = useGridApiContext();\n  const inputRef = React.useRef();\n  const valueTransformed = React.useMemo(() => {\n    let parsedDate;\n    if (valueProp == null) {\n      parsedDate = null;\n    } else if (valueProp instanceof Date) {\n      parsedDate = valueProp;\n    } else {\n      parsedDate = new Date((valueProp ?? '').toString());\n    }\n    let formattedDate;\n    if (parsedDate == null || Number.isNaN(parsedDate.getTime())) {\n      formattedDate = '';\n    } else {\n      const localDate = new Date(parsedDate.getTime() - parsedDate.getTimezoneOffset() * 60 * 1000);\n      formattedDate = localDate.toISOString().substr(0, isDateTime ? 16 : 10);\n    }\n    return {\n      parsed: parsedDate,\n      formatted: formattedDate\n    };\n  }, [valueProp, isDateTime]);\n  const [valueState, setValueState] = React.useState(valueTransformed);\n  const rootProps = useGridRootProps();\n  const ownerState = {\n    classes: rootProps.classes\n  };\n  const classes = useUtilityClasses(ownerState);\n  const parseValueToDate = React.useCallback(value => {\n    if (value === '') {\n      return null;\n    }\n    const [date, time] = value.split('T');\n    const [year, month, day] = date.split('-');\n    const parsedDate = new Date();\n    parsedDate.setFullYear(Number(year), Number(month) - 1, Number(day));\n    parsedDate.setHours(0, 0, 0, 0);\n    if (time) {\n      const [hours, minutes] = time.split(':');\n      parsedDate.setHours(Number(hours), Number(minutes), 0, 0);\n    }\n    return parsedDate;\n  }, []);\n  const handleChange = React.useCallback(async event => {\n    const newFormattedDate = event.target.value;\n    const newParsedDate = parseValueToDate(newFormattedDate);\n    if (onValueChange) {\n      await onValueChange(event, newParsedDate);\n    }\n    setValueState({\n      parsed: newParsedDate,\n      formatted: newFormattedDate\n    });\n    apiRef.current.setEditCellValue({\n      id,\n      field,\n      value: newParsedDate\n    }, event);\n  }, [apiRef, field, id, onValueChange, parseValueToDate]);\n  React.useEffect(() => {\n    setValueState(state => {\n      if (valueTransformed.parsed !== state.parsed && valueTransformed.parsed?.getTime() !== state.parsed?.getTime()) {\n        return valueTransformed;\n      }\n      return state;\n    });\n  }, [valueTransformed]);\n  useEnhancedEffect(() => {\n    if (hasFocus) {\n      inputRef.current.focus();\n    }\n  }, [hasFocus]);\n  return /*#__PURE__*/_jsx(StyledInputBase, _extends({\n    inputRef: inputRef,\n    fullWidth: true,\n    className: classes.root,\n    type: isDateTime ? 'datetime-local' : 'date',\n    inputProps: _extends({\n      max: isDateTime ? '9999-12-31T23:59' : '9999-12-31'\n    }, inputProps),\n    value: valueState.formatted,\n    onChange: handleChange\n  }, other));\n}\nprocess.env.NODE_ENV !== \"production\" ? GridEditDateCell.propTypes = {\n  // ----------------------------- Warning --------------------------------\n  // | These PropTypes are generated from the TypeScript type definitions |\n  // | To update them edit the TypeScript types and run \"pnpm proptypes\"  |\n  // ----------------------------------------------------------------------\n  /**\n   * GridApi that let you manipulate the grid.\n   */\n  api: PropTypes.object.isRequired,\n  /**\n   * The mode of the cell.\n   */\n  cellMode: PropTypes.oneOf(['edit', 'view']).isRequired,\n  changeReason: PropTypes.oneOf(['debouncedSetEditCellValue', 'setEditCellValue']),\n  /**\n   * The column of the row that the current cell belongs to.\n   */\n  colDef: PropTypes.object.isRequired,\n  /**\n   * The column field of the cell that triggered the event.\n   */\n  field: PropTypes.string.isRequired,\n  /**\n   * The cell value formatted with the column valueFormatter.\n   */\n  formattedValue: PropTypes.any,\n  /**\n   * If true, the cell is the active element.\n   */\n  hasFocus: PropTypes.bool.isRequired,\n  /**\n   * The grid row id.\n   */\n  id: PropTypes.oneOfType([PropTypes.number, PropTypes.string]).isRequired,\n  /**\n   * If true, the cell is editable.\n   */\n  isEditable: PropTypes.bool,\n  isProcessingProps: PropTypes.bool,\n  isValidating: PropTypes.bool,\n  /**\n   * Callback called when the value is changed by the user.\n   * @param {React.ChangeEvent<HTMLInputElement>} event The event source of the callback.\n   * @param {Date | null} newValue The value that is going to be passed to `apiRef.current.setEditCellValue`.\n   * @returns {Promise<void> | void} A promise to be awaited before calling `apiRef.current.setEditCellValue`\n   */\n  onValueChange: PropTypes.func,\n  /**\n   * The row model of the row that the current cell belongs to.\n   */\n  row: PropTypes.any.isRequired,\n  /**\n   * The node of the row that the current cell belongs to.\n   */\n  rowNode: PropTypes.object.isRequired,\n  /**\n   * the tabIndex value.\n   */\n  tabIndex: PropTypes.oneOf([-1, 0]).isRequired,\n  /**\n   * The cell value.\n   * If the column has `valueGetter`, use `params.row` to directly access the fields.\n   */\n  value: PropTypes.any\n} : void 0;\nexport { GridEditDateCell };\nexport const renderEditDateCell = params => /*#__PURE__*/_jsx(GridEditDateCell, _extends({}, params));","import _objectWithoutPropertiesLoose from \"@babel/runtime/helpers/esm/objectWithoutPropertiesLoose\";\nimport _extends from \"@babel/runtime/helpers/esm/extends\";\nconst _excluded = [\"id\", \"value\", \"formattedValue\", \"api\", \"field\", \"row\", \"rowNode\", \"colDef\", \"cellMode\", \"isEditable\", \"tabIndex\", \"hasFocus\", \"isValidating\", \"debounceMs\", \"isProcessingProps\", \"onValueChange\"];\nimport * as React from 'react';\nimport PropTypes from 'prop-types';\nimport { unstable_composeClasses as composeClasses, unstable_useEnhancedEffect as useEnhancedEffect } from '@mui/utils';\nimport { styled } from '@mui/material/styles';\nimport InputBase from '@mui/material/InputBase';\nimport { getDataGridUtilityClass } from \"../../constants/gridClasses.js\";\nimport { useGridRootProps } from \"../../hooks/utils/useGridRootProps.js\";\nimport { useGridApiContext } from \"../../hooks/utils/useGridApiContext.js\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nconst useUtilityClasses = ownerState => {\n  const {\n    classes\n  } = ownerState;\n  const slots = {\n    root: ['editInputCell']\n  };\n  return composeClasses(slots, getDataGridUtilityClass, classes);\n};\nconst GridEditInputCellRoot = styled(InputBase, {\n  name: 'MuiDataGrid',\n  slot: 'EditInputCell',\n  overridesResolver: (props, styles) => styles.editInputCell\n})(({\n  theme\n}) => _extends({}, theme.typography.body2, {\n  padding: '1px 0',\n  '& input': {\n    padding: '0 16px',\n    height: '100%'\n  }\n}));\nconst GridEditInputCell = /*#__PURE__*/React.forwardRef((props, ref) => {\n  const rootProps = useGridRootProps();\n  const {\n      id,\n      value,\n      field,\n      colDef,\n      hasFocus,\n      debounceMs = 200,\n      isProcessingProps,\n      onValueChange\n    } = props,\n    other = _objectWithoutPropertiesLoose(props, _excluded);\n  const apiRef = useGridApiContext();\n  const inputRef = React.useRef();\n  const [valueState, setValueState] = React.useState(value);\n  const classes = useUtilityClasses(rootProps);\n  const handleChange = React.useCallback(async event => {\n    const newValue = event.target.value;\n    if (onValueChange) {\n      await onValueChange(event, newValue);\n    }\n    const column = apiRef.current.getColumn(field);\n    let parsedValue = newValue;\n    if (column.valueParser) {\n      parsedValue = column.valueParser(newValue, apiRef.current.getRow(id), column, apiRef);\n    }\n    setValueState(parsedValue);\n    apiRef.current.setEditCellValue({\n      id,\n      field,\n      value: parsedValue,\n      debounceMs,\n      unstable_skipValueParser: true\n    }, event);\n  }, [apiRef, debounceMs, field, id, onValueChange]);\n  const meta = apiRef.current.unstable_getEditCellMeta(id, field);\n  React.useEffect(() => {\n    if (meta?.changeReason !== 'debouncedSetEditCellValue') {\n      setValueState(value);\n    }\n  }, [meta, value]);\n  useEnhancedEffect(() => {\n    if (hasFocus) {\n      inputRef.current.focus();\n    }\n  }, [hasFocus]);\n  return /*#__PURE__*/_jsx(GridEditInputCellRoot, _extends({\n    ref: ref,\n    inputRef: inputRef,\n    className: classes.root,\n    ownerState: rootProps,\n    fullWidth: true,\n    type: colDef.type === 'number' ? colDef.type : 'text',\n    value: valueState ?? '',\n    onChange: handleChange,\n    endAdornment: isProcessingProps ? /*#__PURE__*/_jsx(rootProps.slots.loadIcon, {\n      fontSize: \"small\",\n      color: \"action\"\n    }) : undefined\n  }, other));\n});\nprocess.env.NODE_ENV !== \"production\" ? GridEditInputCell.propTypes = {\n  // ----------------------------- Warning --------------------------------\n  // | These PropTypes are generated from the TypeScript type definitions |\n  // | To update them edit the TypeScript types and run \"pnpm proptypes\"  |\n  // ----------------------------------------------------------------------\n  /**\n   * GridApi that let you manipulate the grid.\n   */\n  api: PropTypes.object.isRequired,\n  /**\n   * The mode of the cell.\n   */\n  cellMode: PropTypes.oneOf(['edit', 'view']).isRequired,\n  changeReason: PropTypes.oneOf(['debouncedSetEditCellValue', 'setEditCellValue']),\n  /**\n   * The column of the row that the current cell belongs to.\n   */\n  colDef: PropTypes.object.isRequired,\n  debounceMs: PropTypes.number,\n  /**\n   * The column field of the cell that triggered the event.\n   */\n  field: PropTypes.string.isRequired,\n  /**\n   * The cell value formatted with the column valueFormatter.\n   */\n  formattedValue: PropTypes.any,\n  /**\n   * If true, the cell is the active element.\n   */\n  hasFocus: PropTypes.bool.isRequired,\n  /**\n   * The grid row id.\n   */\n  id: PropTypes.oneOfType([PropTypes.number, PropTypes.string]).isRequired,\n  /**\n   * If true, the cell is editable.\n   */\n  isEditable: PropTypes.bool,\n  isProcessingProps: PropTypes.bool,\n  isValidating: PropTypes.bool,\n  /**\n   * Callback called when the value is changed by the user.\n   * @param {React.ChangeEvent<HTMLInputElement>} event The event source of the callback.\n   * @param {Date | null} newValue The value that is going to be passed to `apiRef.current.setEditCellValue`.\n   * @returns {Promise<void> | void} A promise to be awaited before calling `apiRef.current.setEditCellValue`\n   */\n  onValueChange: PropTypes.func,\n  /**\n   * The row model of the row that the current cell belongs to.\n   */\n  row: PropTypes.any.isRequired,\n  /**\n   * The node of the row that the current cell belongs to.\n   */\n  rowNode: PropTypes.object.isRequired,\n  /**\n   * the tabIndex value.\n   */\n  tabIndex: PropTypes.oneOf([-1, 0]).isRequired,\n  /**\n   * The cell value.\n   * If the column has `valueGetter`, use `params.row` to directly access the fields.\n   */\n  value: PropTypes.any\n} : void 0;\nexport { GridEditInputCell };\nexport const renderEditInputCell = params => /*#__PURE__*/_jsx(GridEditInputCell, _extends({}, params));","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport _objectWithoutPropertiesLoose from \"@babel/runtime/helpers/esm/objectWithoutPropertiesLoose\";\nconst _excluded = [\"id\", \"value\", \"formattedValue\", \"api\", \"field\", \"row\", \"rowNode\", \"colDef\", \"cellMode\", \"isEditable\", \"tabIndex\", \"className\", \"hasFocus\", \"isValidating\", \"isProcessingProps\", \"error\", \"onValueChange\", \"initialOpen\"],\n  _excluded2 = [\"MenuProps\"];\nimport * as React from 'react';\nimport PropTypes from 'prop-types';\nimport { unstable_useEnhancedEffect as useEnhancedEffect } from '@mui/utils';\nimport { GridCellEditStopReasons } from \"../../models/params/gridEditCellParams.js\";\nimport { useGridRootProps } from \"../../hooks/utils/useGridRootProps.js\";\nimport { GridEditModes } from \"../../models/gridEditRowModel.js\";\nimport { getValueFromValueOptions, getValueOptions, isSingleSelectColDef } from \"../panel/filterPanel/filterPanelUtils.js\";\nimport { useGridApiContext } from \"../../hooks/utils/useGridApiContext.js\";\nimport { createElement as _createElement } from \"react\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nfunction isKeyboardEvent(event) {\n  return !!event.key;\n}\nfunction GridEditSingleSelectCell(props) {\n  const rootProps = useGridRootProps();\n  const {\n      id,\n      value: valueProp,\n      field,\n      row,\n      colDef,\n      hasFocus,\n      error,\n      onValueChange,\n      initialOpen = rootProps.editMode === GridEditModes.Cell\n    } = props,\n    other = _objectWithoutPropertiesLoose(props, _excluded);\n  const apiRef = useGridApiContext();\n  const ref = React.useRef();\n  const inputRef = React.useRef();\n  const [open, setOpen] = React.useState(initialOpen);\n  const baseSelectProps = rootProps.slotProps?.baseSelect || {};\n  const isSelectNative = baseSelectProps.native ?? false;\n  const _ref = rootProps.slotProps?.baseSelect || {},\n    {\n      MenuProps\n    } = _ref,\n    otherBaseSelectProps = _objectWithoutPropertiesLoose(_ref, _excluded2);\n  useEnhancedEffect(() => {\n    if (hasFocus) {\n      inputRef.current?.focus();\n    }\n  }, [hasFocus]);\n  if (!isSingleSelectColDef(colDef)) {\n    return null;\n  }\n  const valueOptions = getValueOptions(colDef, {\n    id,\n    row\n  });\n  if (!valueOptions) {\n    return null;\n  }\n  const getOptionValue = colDef.getOptionValue;\n  const getOptionLabel = colDef.getOptionLabel;\n  const handleChange = async event => {\n    if (!isSingleSelectColDef(colDef) || !valueOptions) {\n      return;\n    }\n    setOpen(false);\n    const target = event.target;\n    // NativeSelect casts the value to a string.\n    const formattedTargetValue = getValueFromValueOptions(target.value, valueOptions, getOptionValue);\n    if (onValueChange) {\n      await onValueChange(event, formattedTargetValue);\n    }\n    await apiRef.current.setEditCellValue({\n      id,\n      field,\n      value: formattedTargetValue\n    }, event);\n  };\n  const handleClose = (event, reason) => {\n    if (rootProps.editMode === GridEditModes.Row) {\n      setOpen(false);\n      return;\n    }\n    if (reason === 'backdropClick' || event.key === 'Escape') {\n      const params = apiRef.current.getCellParams(id, field);\n      apiRef.current.publishEvent('cellEditStop', _extends({}, params, {\n        reason: event.key === 'Escape' ? GridCellEditStopReasons.escapeKeyDown : GridCellEditStopReasons.cellFocusOut\n      }));\n    }\n  };\n  const handleOpen = event => {\n    if (isKeyboardEvent(event) && event.key === 'Enter') {\n      return;\n    }\n    setOpen(true);\n  };\n  if (!valueOptions || !colDef) {\n    return null;\n  }\n  return /*#__PURE__*/_jsx(rootProps.slots.baseSelect, _extends({\n    ref: ref,\n    inputRef: inputRef,\n    value: valueProp,\n    onChange: handleChange,\n    open: open,\n    onOpen: handleOpen,\n    MenuProps: _extends({\n      onClose: handleClose\n    }, MenuProps),\n    error: error,\n    native: isSelectNative,\n    fullWidth: true\n  }, other, otherBaseSelectProps, {\n    children: valueOptions.map(valueOption => {\n      const value = getOptionValue(valueOption);\n      return /*#__PURE__*/_createElement(rootProps.slots.baseSelectOption, _extends({}, rootProps.slotProps?.baseSelectOption || {}, {\n        native: isSelectNative,\n        key: value,\n        value: value\n      }), getOptionLabel(valueOption));\n    })\n  }));\n}\nprocess.env.NODE_ENV !== \"production\" ? GridEditSingleSelectCell.propTypes = {\n  // ----------------------------- Warning --------------------------------\n  // | These PropTypes are generated from the TypeScript type definitions |\n  // | To update them edit the TypeScript types and run \"pnpm proptypes\"  |\n  // ----------------------------------------------------------------------\n  /**\n   * GridApi that let you manipulate the grid.\n   */\n  api: PropTypes.object.isRequired,\n  /**\n   * The mode of the cell.\n   */\n  cellMode: PropTypes.oneOf(['edit', 'view']).isRequired,\n  changeReason: PropTypes.oneOf(['debouncedSetEditCellValue', 'setEditCellValue']),\n  /**\n   * The column of the row that the current cell belongs to.\n   */\n  colDef: PropTypes.object.isRequired,\n  /**\n   * The column field of the cell that triggered the event.\n   */\n  field: PropTypes.string.isRequired,\n  /**\n   * The cell value formatted with the column valueFormatter.\n   */\n  formattedValue: PropTypes.any,\n  /**\n   * If true, the cell is the active element.\n   */\n  hasFocus: PropTypes.bool.isRequired,\n  /**\n   * The grid row id.\n   */\n  id: PropTypes.oneOfType([PropTypes.number, PropTypes.string]).isRequired,\n  /**\n   * If true, the select opens by default.\n   */\n  initialOpen: PropTypes.bool,\n  /**\n   * If true, the cell is editable.\n   */\n  isEditable: PropTypes.bool,\n  isProcessingProps: PropTypes.bool,\n  isValidating: PropTypes.bool,\n  /**\n   * Callback called when the value is changed by the user.\n   * @param {SelectChangeEvent<any>} event The event source of the callback.\n   * @param {any} newValue The value that is going to be passed to `apiRef.current.setEditCellValue`.\n   * @returns {Promise<void> | void} A promise to be awaited before calling `apiRef.current.setEditCellValue`\n   */\n  onValueChange: PropTypes.func,\n  /**\n   * The row model of the row that the current cell belongs to.\n   */\n  row: PropTypes.any.isRequired,\n  /**\n   * The node of the row that the current cell belongs to.\n   */\n  rowNode: PropTypes.object.isRequired,\n  /**\n   * the tabIndex value.\n   */\n  tabIndex: PropTypes.oneOf([-1, 0]).isRequired,\n  /**\n   * The cell value.\n   * If the column has `valueGetter`, use `params.row` to directly access the fields.\n   */\n  value: PropTypes.any\n} : void 0;\nexport { GridEditSingleSelectCell };\nexport const renderEditSingleSelectCell = params => /*#__PURE__*/_jsx(GridEditSingleSelectCell, _extends({}, params));","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport _objectWithoutPropertiesLoose from \"@babel/runtime/helpers/esm/objectWithoutPropertiesLoose\";\nconst _excluded = [\"field\", \"type\", \"align\", \"width\", \"height\", \"empty\", \"style\", \"className\"];\nimport * as React from 'react';\nimport PropTypes from 'prop-types';\nimport clsx from 'clsx';\nimport Skeleton from '@mui/material/Skeleton';\nimport { unstable_composeClasses as composeClasses, unstable_capitalize as capitalize } from '@mui/utils';\nimport { fastMemo } from '@mui/x-internals/fastMemo';\nimport { createRandomNumberGenerator } from \"../../utils/utils.js\";\nimport { useGridRootProps } from \"../../hooks/utils/useGridRootProps.js\";\nimport { getDataGridUtilityClass } from \"../../constants/gridClasses.js\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nconst CIRCULAR_CONTENT_SIZE = '1.3em';\nconst CONTENT_HEIGHT = '1.2em';\nconst DEFAULT_CONTENT_WIDTH_RANGE = [40, 80];\nconst CONTENT_WIDTH_RANGE_BY_TYPE = {\n  number: [40, 60],\n  string: [40, 80],\n  date: [40, 60],\n  dateTime: [60, 80],\n  singleSelect: [40, 80]\n};\nconst useUtilityClasses = ownerState => {\n  const {\n    align,\n    classes,\n    empty\n  } = ownerState;\n  const slots = {\n    root: ['cell', 'cellSkeleton', `cell--text${align ? capitalize(align) : 'Left'}`, empty && 'cellEmpty']\n  };\n  return composeClasses(slots, getDataGridUtilityClass, classes);\n};\nconst randomNumberGenerator = createRandomNumberGenerator(12345);\nfunction GridSkeletonCell(props) {\n  const {\n      field,\n      type,\n      align,\n      width,\n      height,\n      empty = false,\n      style,\n      className\n    } = props,\n    other = _objectWithoutPropertiesLoose(props, _excluded);\n  const rootProps = useGridRootProps();\n  const ownerState = {\n    classes: rootProps.classes,\n    align,\n    empty\n  };\n  const classes = useUtilityClasses(ownerState);\n\n  // Memo prevents the non-circular skeleton widths changing to random widths on every render\n  const skeletonProps = React.useMemo(() => {\n    const isCircularContent = type === 'boolean' || type === 'actions';\n    if (isCircularContent) {\n      return {\n        variant: 'circular',\n        width: CIRCULAR_CONTENT_SIZE,\n        height: CIRCULAR_CONTENT_SIZE\n      };\n    }\n\n    // The width of the skeleton is a random number between the min and max values\n    // The min and max values are determined by the type of the column\n    const [min, max] = type ? CONTENT_WIDTH_RANGE_BY_TYPE[type] ?? DEFAULT_CONTENT_WIDTH_RANGE : DEFAULT_CONTENT_WIDTH_RANGE;\n    return {\n      variant: 'text',\n      width: `${Math.round(randomNumberGenerator(min, max))}%`,\n      height: CONTENT_HEIGHT\n    };\n  }, [type]);\n  return /*#__PURE__*/_jsx(\"div\", _extends({\n    \"data-field\": field,\n    className: clsx(classes.root, className),\n    style: _extends({\n      height,\n      maxWidth: width,\n      minWidth: width\n    }, style)\n  }, other, {\n    children: !empty && /*#__PURE__*/_jsx(Skeleton, _extends({}, skeletonProps))\n  }));\n}\nprocess.env.NODE_ENV !== \"production\" ? GridSkeletonCell.propTypes = {\n  // ----------------------------- Warning --------------------------------\n  // | These PropTypes are generated from the TypeScript type definitions |\n  // | To update them edit the TypeScript types and run \"pnpm proptypes\"  |\n  // ----------------------------------------------------------------------\n  align: PropTypes.string,\n  /**\n   * If `true`, the cell will not display the skeleton but still reserve the cell space.\n   * @default false\n   */\n  empty: PropTypes.bool,\n  field: PropTypes.string,\n  height: PropTypes.oneOfType([PropTypes.oneOf(['auto']), PropTypes.number]),\n  type: PropTypes.oneOf(['actions', 'boolean', 'custom', 'date', 'dateTime', 'number', 'singleSelect', 'string']),\n  width: PropTypes.oneOfType([PropTypes.number, PropTypes.string])\n} : void 0;\nconst Memoized = fastMemo(GridSkeletonCell);\nexport { Memoized as GridSkeletonCell };","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport * as React from 'react';\nimport PropTypes from 'prop-types';\nimport { unstable_composeClasses as composeClasses, unstable_useId as useId } from '@mui/utils';\nimport Badge from '@mui/material/Badge';\nimport { useGridSelector } from \"../../hooks/index.js\";\nimport { gridPreferencePanelStateSelector } from \"../../hooks/features/preferencesPanel/gridPreferencePanelSelector.js\";\nimport { GridPreferencePanelsValue } from \"../../hooks/features/preferencesPanel/gridPreferencePanelsValue.js\";\nimport { useGridApiContext } from \"../../hooks/utils/useGridApiContext.js\";\nimport { getDataGridUtilityClass } from \"../../constants/gridClasses.js\";\nimport { useGridRootProps } from \"../../hooks/utils/useGridRootProps.js\";\nimport { GridIconButtonContainer } from \"./GridIconButtonContainer.js\";\nimport { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nconst useUtilityClasses = ownerState => {\n  const {\n    classes\n  } = ownerState;\n  const slots = {\n    icon: ['filterIcon']\n  };\n  return composeClasses(slots, getDataGridUtilityClass, classes);\n};\nfunction GridColumnHeaderFilterIconButton(props) {\n  const {\n    counter,\n    field,\n    onClick\n  } = props;\n  const apiRef = useGridApiContext();\n  const rootProps = useGridRootProps();\n  const ownerState = _extends({}, props, {\n    classes: rootProps.classes\n  });\n  const classes = useUtilityClasses(ownerState);\n  const preferencePanel = useGridSelector(apiRef, gridPreferencePanelStateSelector);\n  const labelId = useId();\n  const panelId = useId();\n  const toggleFilter = React.useCallback(event => {\n    event.preventDefault();\n    event.stopPropagation();\n    const {\n      open,\n      openedPanelValue\n    } = gridPreferencePanelStateSelector(apiRef.current.state);\n    if (open && openedPanelValue === GridPreferencePanelsValue.filters) {\n      apiRef.current.hideFilterPanel();\n    } else {\n      apiRef.current.showFilterPanel(undefined, panelId, labelId);\n    }\n    if (onClick) {\n      onClick(apiRef.current.getColumnHeaderParams(field), event);\n    }\n  }, [apiRef, field, onClick, panelId, labelId]);\n  if (!counter) {\n    return null;\n  }\n  const open = preferencePanel.open && preferencePanel.labelId === labelId;\n  const iconButton = /*#__PURE__*/_jsx(rootProps.slots.baseIconButton, _extends({\n    id: labelId,\n    onClick: toggleFilter,\n    color: \"default\",\n    \"aria-label\": apiRef.current.getLocaleText('columnHeaderFiltersLabel'),\n    size: \"small\",\n    tabIndex: -1,\n    \"aria-haspopup\": \"menu\",\n    \"aria-expanded\": open,\n    \"aria-controls\": open ? panelId : undefined\n  }, rootProps.slotProps?.baseIconButton, {\n    children: /*#__PURE__*/_jsx(rootProps.slots.columnFilteredIcon, {\n      className: classes.icon,\n      fontSize: \"small\"\n    })\n  }));\n  return /*#__PURE__*/_jsx(rootProps.slots.baseTooltip, _extends({\n    title: apiRef.current.getLocaleText('columnHeaderFiltersTooltipActive')(counter),\n    enterDelay: 1000\n  }, rootProps.slotProps?.baseTooltip, {\n    children: /*#__PURE__*/_jsxs(GridIconButtonContainer, {\n      children: [counter > 1 && /*#__PURE__*/_jsx(Badge, {\n        badgeContent: counter,\n        color: \"default\",\n        children: iconButton\n      }), counter === 1 && iconButton]\n    })\n  }));\n}\nprocess.env.NODE_ENV !== \"production\" ? GridColumnHeaderFilterIconButton.propTypes = {\n  // ----------------------------- Warning --------------------------------\n  // | These PropTypes are generated from the TypeScript type definitions |\n  // | To update them edit the TypeScript types and run \"pnpm proptypes\"  |\n  // ----------------------------------------------------------------------\n  counter: PropTypes.number,\n  field: PropTypes.string.isRequired,\n  onClick: PropTypes.func\n} : void 0;\nexport { GridColumnHeaderFilterIconButton };","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport * as React from 'react';\nimport composeClasses from '@mui/utils/composeClasses';\nimport { useGridApiContext } from \"../../hooks/utils/useGridApiContext.js\";\nimport { getDataGridUtilityClass } from \"../../constants/gridClasses.js\";\nimport { useGridRootProps } from \"../../hooks/utils/useGridRootProps.js\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nconst useUtilityClasses = ownerState => {\n  const {\n    classes,\n    open\n  } = ownerState;\n  const slots = {\n    root: ['menuIcon', open && 'menuOpen'],\n    button: ['menuIconButton']\n  };\n  return composeClasses(slots, getDataGridUtilityClass, classes);\n};\nexport const ColumnHeaderMenuIcon = /*#__PURE__*/React.memo(props => {\n  const {\n    colDef,\n    open,\n    columnMenuId,\n    columnMenuButtonId,\n    iconButtonRef\n  } = props;\n  const apiRef = useGridApiContext();\n  const rootProps = useGridRootProps();\n  const ownerState = _extends({}, props, {\n    classes: rootProps.classes\n  });\n  const classes = useUtilityClasses(ownerState);\n  const handleMenuIconClick = React.useCallback(event => {\n    event.preventDefault();\n    event.stopPropagation();\n    apiRef.current.toggleColumnMenu(colDef.field);\n  }, [apiRef, colDef.field]);\n  return /*#__PURE__*/_jsx(\"div\", {\n    className: classes.root,\n    children: /*#__PURE__*/_jsx(rootProps.slots.baseTooltip, _extends({\n      title: apiRef.current.getLocaleText('columnMenuLabel'),\n      enterDelay: 1000\n    }, rootProps.slotProps?.baseTooltip, {\n      children: /*#__PURE__*/_jsx(rootProps.slots.baseIconButton, _extends({\n        ref: iconButtonRef,\n        tabIndex: -1,\n        className: classes.button,\n        \"aria-label\": apiRef.current.getLocaleText('columnMenuLabel'),\n        size: \"small\",\n        onClick: handleMenuIconClick,\n        \"aria-haspopup\": \"menu\",\n        \"aria-expanded\": open,\n        \"aria-controls\": open ? columnMenuId : undefined,\n        id: columnMenuButtonId\n      }, rootProps.slotProps?.baseIconButton, {\n        children: /*#__PURE__*/_jsx(rootProps.slots.columnMenuIcon, {\n          fontSize: \"inherit\"\n        })\n      }))\n    }))\n  });\n});","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport * as React from 'react';\nimport PropTypes from 'prop-types';\nimport clsx from 'clsx';\nimport { unstable_composeClasses as composeClasses, unstable_useId as useId } from '@mui/utils';\nimport { fastMemo } from '@mui/x-internals/fastMemo';\nimport { useGridPrivateApiContext } from \"../../hooks/utils/useGridPrivateApiContext.js\";\nimport { ColumnHeaderMenuIcon } from \"./ColumnHeaderMenuIcon.js\";\nimport { GridColumnHeaderMenu } from \"../menu/columnMenu/GridColumnHeaderMenu.js\";\nimport { gridClasses, getDataGridUtilityClass } from \"../../constants/gridClasses.js\";\nimport { useGridRootProps } from \"../../hooks/utils/useGridRootProps.js\";\nimport { GridGenericColumnHeaderItem } from \"./GridGenericColumnHeaderItem.js\";\nimport { isEventTargetInPortal } from \"../../utils/domUtils.js\";\nimport { shouldCellShowLeftBorder, shouldCellShowRightBorder } from \"../../utils/cellBorderUtils.js\";\nimport { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nconst useUtilityClasses = ownerState => {\n  const {\n    colDef,\n    classes,\n    isDragging,\n    sortDirection,\n    showRightBorder,\n    showLeftBorder,\n    filterItemsCounter,\n    pinnedPosition,\n    isLastUnpinned,\n    isSiblingFocused\n  } = ownerState;\n  const isColumnSorted = sortDirection != null;\n  const isColumnFiltered = filterItemsCounter != null && filterItemsCounter > 0;\n  // todo refactor to a prop on col isNumeric or ?? ie: coltype===price wont work\n  const isColumnNumeric = colDef.type === 'number';\n  const slots = {\n    root: ['columnHeader', colDef.headerAlign === 'left' && 'columnHeader--alignLeft', colDef.headerAlign === 'center' && 'columnHeader--alignCenter', colDef.headerAlign === 'right' && 'columnHeader--alignRight', colDef.sortable && 'columnHeader--sortable', isDragging && 'columnHeader--moving', isColumnSorted && 'columnHeader--sorted', isColumnFiltered && 'columnHeader--filtered', isColumnNumeric && 'columnHeader--numeric', 'withBorderColor', showRightBorder && 'columnHeader--withRightBorder', showLeftBorder && 'columnHeader--withLeftBorder', pinnedPosition === 'left' && 'columnHeader--pinnedLeft', pinnedPosition === 'right' && 'columnHeader--pinnedRight',\n    // TODO: Remove classes below and restore `:has` selectors when they are supported in jsdom\n    // See https://github.com/mui/mui-x/pull/14559\n    isLastUnpinned && 'columnHeader--lastUnpinned', isSiblingFocused && 'columnHeader--siblingFocused'],\n    draggableContainer: ['columnHeaderDraggableContainer'],\n    titleContainer: ['columnHeaderTitleContainer'],\n    titleContainerContent: ['columnHeaderTitleContainerContent']\n  };\n  return composeClasses(slots, getDataGridUtilityClass, classes);\n};\nfunction GridColumnHeaderItem(props) {\n  const {\n    colDef,\n    columnMenuOpen,\n    colIndex,\n    headerHeight,\n    isResizing,\n    isLast,\n    sortDirection,\n    sortIndex,\n    filterItemsCounter,\n    hasFocus,\n    tabIndex,\n    disableReorder,\n    separatorSide,\n    style,\n    pinnedPosition,\n    indexInSection,\n    sectionLength,\n    gridHasFiller\n  } = props;\n  const apiRef = useGridPrivateApiContext();\n  const rootProps = useGridRootProps();\n  const headerCellRef = React.useRef(null);\n  const columnMenuId = useId();\n  const columnMenuButtonId = useId();\n  const iconButtonRef = React.useRef(null);\n  const [showColumnMenuIcon, setShowColumnMenuIcon] = React.useState(columnMenuOpen);\n  const isDraggable = React.useMemo(() => !rootProps.disableColumnReorder && !disableReorder && !colDef.disableReorder, [rootProps.disableColumnReorder, disableReorder, colDef.disableReorder]);\n  let headerComponent;\n  if (colDef.renderHeader) {\n    headerComponent = colDef.renderHeader(apiRef.current.getColumnHeaderParams(colDef.field));\n  }\n  const showLeftBorder = shouldCellShowLeftBorder(pinnedPosition, indexInSection);\n  const showRightBorder = shouldCellShowRightBorder(pinnedPosition, indexInSection, sectionLength, rootProps.showColumnVerticalBorder, gridHasFiller);\n  const ownerState = _extends({}, props, {\n    classes: rootProps.classes,\n    showRightBorder,\n    showLeftBorder\n  });\n  const classes = useUtilityClasses(ownerState);\n  const publish = React.useCallback(eventName => event => {\n    // Ignore portal\n    // See https://github.com/mui/mui-x/issues/1721\n    if (isEventTargetInPortal(event)) {\n      return;\n    }\n    apiRef.current.publishEvent(eventName, apiRef.current.getColumnHeaderParams(colDef.field), event);\n  }, [apiRef, colDef.field]);\n  const mouseEventsHandlers = React.useMemo(() => ({\n    onClick: publish('columnHeaderClick'),\n    onDoubleClick: publish('columnHeaderDoubleClick'),\n    onMouseOver: publish('columnHeaderOver'),\n    // TODO remove as it's not used\n    onMouseOut: publish('columnHeaderOut'),\n    // TODO remove as it's not used\n    onMouseEnter: publish('columnHeaderEnter'),\n    // TODO remove as it's not used\n    onMouseLeave: publish('columnHeaderLeave'),\n    // TODO remove as it's not used\n    onKeyDown: publish('columnHeaderKeyDown'),\n    onFocus: publish('columnHeaderFocus'),\n    onBlur: publish('columnHeaderBlur')\n  }), [publish]);\n  const draggableEventHandlers = React.useMemo(() => isDraggable ? {\n    onDragStart: publish('columnHeaderDragStart'),\n    onDragEnter: publish('columnHeaderDragEnter'),\n    onDragOver: publish('columnHeaderDragOver'),\n    onDragEnd: publish('columnHeaderDragEnd')\n  } : {}, [isDraggable, publish]);\n  const columnHeaderSeparatorProps = React.useMemo(() => ({\n    onMouseDown: publish('columnSeparatorMouseDown'),\n    onDoubleClick: publish('columnSeparatorDoubleClick')\n  }), [publish]);\n  React.useEffect(() => {\n    if (!showColumnMenuIcon) {\n      setShowColumnMenuIcon(columnMenuOpen);\n    }\n  }, [showColumnMenuIcon, columnMenuOpen]);\n  const handleExited = React.useCallback(() => {\n    setShowColumnMenuIcon(false);\n  }, []);\n  const columnMenuIconButton = !rootProps.disableColumnMenu && !colDef.disableColumnMenu && /*#__PURE__*/_jsx(ColumnHeaderMenuIcon, {\n    colDef: colDef,\n    columnMenuId: columnMenuId,\n    columnMenuButtonId: columnMenuButtonId,\n    open: showColumnMenuIcon,\n    iconButtonRef: iconButtonRef\n  });\n  const columnMenu = /*#__PURE__*/_jsx(GridColumnHeaderMenu, {\n    columnMenuId: columnMenuId,\n    columnMenuButtonId: columnMenuButtonId,\n    field: colDef.field,\n    open: columnMenuOpen,\n    target: iconButtonRef.current,\n    ContentComponent: rootProps.slots.columnMenu,\n    contentComponentProps: rootProps.slotProps?.columnMenu,\n    onExited: handleExited\n  });\n  const sortingOrder = colDef.sortingOrder ?? rootProps.sortingOrder;\n  const showSortIcon = (colDef.sortable || sortDirection != null) && !colDef.hideSortIcons && !rootProps.disableColumnSorting;\n  const columnTitleIconButtons = /*#__PURE__*/_jsxs(React.Fragment, {\n    children: [!rootProps.disableColumnFilter && /*#__PURE__*/_jsx(rootProps.slots.columnHeaderFilterIconButton, _extends({\n      field: colDef.field,\n      counter: filterItemsCounter\n    }, rootProps.slotProps?.columnHeaderFilterIconButton)), showSortIcon && /*#__PURE__*/_jsx(rootProps.slots.columnHeaderSortIcon, _extends({\n      field: colDef.field,\n      direction: sortDirection,\n      index: sortIndex,\n      sortingOrder: sortingOrder,\n      disabled: !colDef.sortable\n    }, rootProps.slotProps?.columnHeaderSortIcon))]\n  });\n  React.useLayoutEffect(() => {\n    const columnMenuState = apiRef.current.state.columnMenu;\n    if (hasFocus && !columnMenuState.open) {\n      const focusableElement = headerCellRef.current.querySelector('[tabindex=\"0\"]');\n      const elementToFocus = focusableElement || headerCellRef.current;\n      elementToFocus?.focus();\n      if (apiRef.current.columnHeadersContainerRef?.current) {\n        apiRef.current.columnHeadersContainerRef.current.scrollLeft = 0;\n      }\n    }\n  }, [apiRef, hasFocus]);\n  const headerClassName = typeof colDef.headerClassName === 'function' ? colDef.headerClassName({\n    field: colDef.field,\n    colDef\n  }) : colDef.headerClassName;\n  const label = colDef.headerName ?? colDef.field;\n  return /*#__PURE__*/_jsx(GridGenericColumnHeaderItem, _extends({\n    ref: headerCellRef,\n    classes: classes,\n    columnMenuOpen: columnMenuOpen,\n    colIndex: colIndex,\n    height: headerHeight,\n    isResizing: isResizing,\n    sortDirection: sortDirection,\n    hasFocus: hasFocus,\n    tabIndex: tabIndex,\n    separatorSide: separatorSide,\n    isDraggable: isDraggable,\n    headerComponent: headerComponent,\n    description: colDef.description,\n    elementId: colDef.field,\n    width: colDef.computedWidth,\n    columnMenuIconButton: columnMenuIconButton,\n    columnTitleIconButtons: columnTitleIconButtons,\n    headerClassName: clsx(headerClassName, isLast && gridClasses['columnHeader--last']),\n    label: label,\n    resizable: !rootProps.disableColumnResize && !!colDef.resizable,\n    \"data-field\": colDef.field,\n    columnMenu: columnMenu,\n    draggableContainerProps: draggableEventHandlers,\n    columnHeaderSeparatorProps: columnHeaderSeparatorProps,\n    style: style\n  }, mouseEventsHandlers));\n}\nprocess.env.NODE_ENV !== \"production\" ? GridColumnHeaderItem.propTypes = {\n  // ----------------------------- Warning --------------------------------\n  // | These PropTypes are generated from the TypeScript type definitions |\n  // | To update them edit the TypeScript types and run \"pnpm proptypes\"  |\n  // ----------------------------------------------------------------------\n  colDef: PropTypes.object.isRequired,\n  colIndex: PropTypes.number.isRequired,\n  columnMenuOpen: PropTypes.bool.isRequired,\n  disableReorder: PropTypes.bool,\n  filterItemsCounter: PropTypes.number,\n  gridHasFiller: PropTypes.bool.isRequired,\n  hasFocus: PropTypes.bool,\n  headerHeight: PropTypes.number.isRequired,\n  indexInSection: PropTypes.number.isRequired,\n  isDragging: PropTypes.bool.isRequired,\n  isLast: PropTypes.bool.isRequired,\n  isLastUnpinned: PropTypes.bool.isRequired,\n  isResizing: PropTypes.bool.isRequired,\n  isSiblingFocused: PropTypes.bool.isRequired,\n  pinnedPosition: PropTypes.oneOf(['left', 'right']),\n  sectionLength: PropTypes.number.isRequired,\n  separatorSide: PropTypes.oneOf(['left', 'right']),\n  sortDirection: PropTypes.oneOf(['asc', 'desc']),\n  sortIndex: PropTypes.number,\n  style: PropTypes.object,\n  tabIndex: PropTypes.oneOf([-1, 0]).isRequired\n} : void 0;\nconst Memoized = fastMemo(GridColumnHeaderItem);\nexport { Memoized as GridColumnHeaderItem };","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport _objectWithoutPropertiesLoose from \"@babel/runtime/helpers/esm/objectWithoutPropertiesLoose\";\nconst _excluded = [\"resizable\", \"resizing\", \"height\", \"side\"];\nimport * as React from 'react';\nimport PropTypes from 'prop-types';\nimport { unstable_composeClasses as composeClasses, unstable_capitalize as capitalize } from '@mui/utils';\nimport { getDataGridUtilityClass } from \"../../constants/gridClasses.js\";\nimport { useGridRootProps } from \"../../hooks/utils/useGridRootProps.js\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nvar GridColumnHeaderSeparatorSides = /*#__PURE__*/function (GridColumnHeaderSeparatorSides) {\n  GridColumnHeaderSeparatorSides[\"Left\"] = \"left\";\n  GridColumnHeaderSeparatorSides[\"Right\"] = \"right\";\n  return GridColumnHeaderSeparatorSides;\n}(GridColumnHeaderSeparatorSides || {});\nconst useUtilityClasses = ownerState => {\n  const {\n    resizable,\n    resizing,\n    classes,\n    side\n  } = ownerState;\n  const slots = {\n    root: ['columnSeparator', resizable && 'columnSeparator--resizable', resizing && 'columnSeparator--resizing', side && `columnSeparator--side${capitalize(side)}`],\n    icon: ['iconSeparator']\n  };\n  return composeClasses(slots, getDataGridUtilityClass, classes);\n};\nfunction GridColumnHeaderSeparatorRaw(props) {\n  const {\n      height,\n      side = GridColumnHeaderSeparatorSides.Right\n    } = props,\n    other = _objectWithoutPropertiesLoose(props, _excluded);\n  const rootProps = useGridRootProps();\n  const ownerState = _extends({}, props, {\n    side,\n    classes: rootProps.classes\n  });\n  const classes = useUtilityClasses(ownerState);\n  const stopClick = React.useCallback(event => {\n    event.preventDefault();\n    event.stopPropagation();\n  }, []);\n  return (\n    /*#__PURE__*/\n    // eslint-disable-next-line jsx-a11y/click-events-have-key-events,jsx-a11y/no-static-element-interactions\n    _jsx(\"div\", _extends({\n      className: classes.root,\n      style: {\n        minHeight: height\n      }\n    }, other, {\n      onClick: stopClick,\n      children: /*#__PURE__*/_jsx(rootProps.slots.columnResizeIcon, {\n        className: classes.icon\n      })\n    }))\n  );\n}\nconst GridColumnHeaderSeparator = /*#__PURE__*/React.memo(GridColumnHeaderSeparatorRaw);\nprocess.env.NODE_ENV !== \"production\" ? GridColumnHeaderSeparatorRaw.propTypes = {\n  // ----------------------------- Warning --------------------------------\n  // | These PropTypes are generated from the TypeScript type definitions |\n  // | To update them edit the TypeScript types and run \"pnpm proptypes\"  |\n  // ----------------------------------------------------------------------\n  height: PropTypes.number.isRequired,\n  resizable: PropTypes.bool.isRequired,\n  resizing: PropTypes.bool.isRequired,\n  side: PropTypes.oneOf(['left', 'right'])\n} : void 0;\nexport { GridColumnHeaderSeparator, GridColumnHeaderSeparatorSides };","import _objectWithoutPropertiesLoose from \"@babel/runtime/helpers/esm/objectWithoutPropertiesLoose\";\nimport _extends from \"@babel/runtime/helpers/esm/extends\";\nconst _excluded = [\"direction\", \"index\", \"sortingOrder\", \"disabled\"];\nimport * as React from 'react';\nimport PropTypes from 'prop-types';\nimport composeClasses from '@mui/utils/composeClasses';\nimport Badge from '@mui/material/Badge';\nimport { useGridApiContext } from \"../../hooks/utils/useGridApiContext.js\";\nimport { getDataGridUtilityClass } from \"../../constants/gridClasses.js\";\nimport { useGridRootProps } from \"../../hooks/utils/useGridRootProps.js\";\nimport { GridIconButtonContainer } from \"./GridIconButtonContainer.js\";\nimport { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nconst useUtilityClasses = ownerState => {\n  const {\n    classes\n  } = ownerState;\n  const slots = {\n    icon: ['sortIcon']\n  };\n  return composeClasses(slots, getDataGridUtilityClass, classes);\n};\nfunction getIcon(icons, direction, className, sortingOrder) {\n  let Icon;\n  const iconProps = {};\n  if (direction === 'asc') {\n    Icon = icons.columnSortedAscendingIcon;\n  } else if (direction === 'desc') {\n    Icon = icons.columnSortedDescendingIcon;\n  } else {\n    Icon = icons.columnUnsortedIcon;\n    iconProps.sortingOrder = sortingOrder;\n  }\n  return Icon ? /*#__PURE__*/_jsx(Icon, _extends({\n    fontSize: \"small\",\n    className: className\n  }, iconProps)) : null;\n}\nfunction GridColumnHeaderSortIconRaw(props) {\n  const {\n      direction,\n      index,\n      sortingOrder,\n      disabled\n    } = props,\n    other = _objectWithoutPropertiesLoose(props, _excluded);\n  const apiRef = useGridApiContext();\n  const rootProps = useGridRootProps();\n  const ownerState = _extends({}, props, {\n    classes: rootProps.classes\n  });\n  const classes = useUtilityClasses(ownerState);\n  const iconElement = getIcon(rootProps.slots, direction, classes.icon, sortingOrder);\n  if (!iconElement) {\n    return null;\n  }\n  const iconButton = /*#__PURE__*/_jsx(rootProps.slots.baseIconButton, _extends({\n    tabIndex: -1,\n    \"aria-label\": apiRef.current.getLocaleText('columnHeaderSortIconLabel'),\n    title: apiRef.current.getLocaleText('columnHeaderSortIconLabel'),\n    size: \"small\",\n    disabled: disabled\n  }, rootProps.slotProps?.baseIconButton, other, {\n    children: iconElement\n  }));\n  return /*#__PURE__*/_jsxs(GridIconButtonContainer, {\n    children: [index != null && /*#__PURE__*/_jsx(Badge, {\n      badgeContent: index,\n      color: \"default\",\n      overlap: \"circular\",\n      children: iconButton\n    }), index == null && iconButton]\n  });\n}\nconst GridColumnHeaderSortIcon = /*#__PURE__*/React.memo(GridColumnHeaderSortIconRaw);\nprocess.env.NODE_ENV !== \"production\" ? GridColumnHeaderSortIconRaw.propTypes = {\n  // ----------------------------- Warning --------------------------------\n  // | These PropTypes are generated from the TypeScript type definitions |\n  // | To update them edit the TypeScript types and run \"pnpm proptypes\"  |\n  // ----------------------------------------------------------------------\n  direction: PropTypes.oneOf(['asc', 'desc']),\n  disabled: PropTypes.bool,\n  field: PropTypes.string.isRequired,\n  index: PropTypes.number,\n  sortingOrder: PropTypes.arrayOf(PropTypes.oneOf(['asc', 'desc'])).isRequired\n} : void 0;\nexport { GridColumnHeaderSortIcon };","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport _objectWithoutPropertiesLoose from \"@babel/runtime/helpers/esm/objectWithoutPropertiesLoose\";\nconst _excluded = [\"className\", \"aria-label\"];\nimport * as React from 'react';\nimport PropTypes from 'prop-types';\nimport clsx from 'clsx';\nimport composeClasses from '@mui/utils/composeClasses';\nimport { styled } from '@mui/system';\nimport { isOverflown } from \"../../utils/domUtils.js\";\nimport { getDataGridUtilityClass } from \"../../constants/gridClasses.js\";\nimport { useGridRootProps } from \"../../hooks/utils/useGridRootProps.js\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nconst useUtilityClasses = ownerState => {\n  const {\n    classes\n  } = ownerState;\n  const slots = {\n    root: ['columnHeaderTitle']\n  };\n  return composeClasses(slots, getDataGridUtilityClass, classes);\n};\nconst GridColumnHeaderTitleRoot = styled('div', {\n  name: 'MuiDataGrid',\n  slot: 'ColumnHeaderTitle',\n  overridesResolver: (props, styles) => styles.columnHeaderTitle\n})({\n  textOverflow: 'ellipsis',\n  overflow: 'hidden',\n  whiteSpace: 'nowrap',\n  fontWeight: 'var(--unstable_DataGrid-headWeight)',\n  lineHeight: 'normal'\n});\nconst ColumnHeaderInnerTitle = /*#__PURE__*/React.forwardRef(function ColumnHeaderInnerTitle(props, ref) {\n  // Tooltip adds aria-label to the props, which is not needed since the children prop is a string\n  // See https://github.com/mui/mui-x/pull/14482\n  const {\n      className\n    } = props,\n    other = _objectWithoutPropertiesLoose(props, _excluded);\n  const rootProps = useGridRootProps();\n  const classes = useUtilityClasses(rootProps);\n  return /*#__PURE__*/_jsx(GridColumnHeaderTitleRoot, _extends({\n    ref: ref,\n    className: clsx(classes.root, className),\n    ownerState: rootProps\n  }, other));\n});\n// No React.memo here as if we display the sort icon, we need to recalculate the isOver\nfunction GridColumnHeaderTitle(props) {\n  const {\n    label,\n    description\n  } = props;\n  const rootProps = useGridRootProps();\n  const titleRef = React.useRef(null);\n  const [tooltip, setTooltip] = React.useState('');\n  const handleMouseOver = React.useCallback(() => {\n    if (!description && titleRef?.current) {\n      const isOver = isOverflown(titleRef.current);\n      if (isOver) {\n        setTooltip(label);\n      } else {\n        setTooltip('');\n      }\n    }\n  }, [description, label]);\n  return /*#__PURE__*/_jsx(rootProps.slots.baseTooltip, _extends({\n    title: description || tooltip\n  }, rootProps.slotProps?.baseTooltip, {\n    children: /*#__PURE__*/_jsx(ColumnHeaderInnerTitle, {\n      onMouseOver: handleMouseOver,\n      ref: titleRef,\n      children: label\n    })\n  }));\n}\nprocess.env.NODE_ENV !== \"production\" ? GridColumnHeaderTitle.propTypes = {\n  // ----------------------------- Warning --------------------------------\n  // | These PropTypes are generated from the TypeScript type definitions |\n  // | To update them edit the TypeScript types and run \"pnpm proptypes\"  |\n  // ----------------------------------------------------------------------\n  columnWidth: PropTypes.number.isRequired,\n  description: PropTypes.node,\n  label: PropTypes.string.isRequired\n} : void 0;\nexport { GridColumnHeaderTitle };","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport _objectWithoutPropertiesLoose from \"@babel/runtime/helpers/esm/objectWithoutPropertiesLoose\";\nconst _excluded = [\"classes\", \"columnMenuOpen\", \"colIndex\", \"height\", \"isResizing\", \"sortDirection\", \"hasFocus\", \"tabIndex\", \"separatorSide\", \"isDraggable\", \"headerComponent\", \"description\", \"elementId\", \"width\", \"columnMenuIconButton\", \"columnMenu\", \"columnTitleIconButtons\", \"headerClassName\", \"label\", \"resizable\", \"draggableContainerProps\", \"columnHeaderSeparatorProps\", \"style\"];\nimport * as React from 'react';\nimport clsx from 'clsx';\nimport { unstable_useForkRef as useForkRef } from '@mui/utils';\nimport { useGridPrivateApiContext } from \"../../hooks/utils/useGridPrivateApiContext.js\";\nimport { GridColumnHeaderTitle } from \"./GridColumnHeaderTitle.js\";\nimport { GridColumnHeaderSeparator } from \"./GridColumnHeaderSeparator.js\";\nimport { useGridRootProps } from \"../../hooks/utils/useGridRootProps.js\";\nimport { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nconst GridGenericColumnHeaderItem = /*#__PURE__*/React.forwardRef(function GridGenericColumnHeaderItem(props, ref) {\n  const {\n      classes,\n      colIndex,\n      height,\n      isResizing,\n      sortDirection,\n      hasFocus,\n      tabIndex,\n      separatorSide,\n      isDraggable,\n      headerComponent,\n      description,\n      width,\n      columnMenuIconButton = null,\n      columnMenu = null,\n      columnTitleIconButtons = null,\n      headerClassName,\n      label,\n      resizable,\n      draggableContainerProps,\n      columnHeaderSeparatorProps,\n      style\n    } = props,\n    other = _objectWithoutPropertiesLoose(props, _excluded);\n  const apiRef = useGridPrivateApiContext();\n  const rootProps = useGridRootProps();\n  const headerCellRef = React.useRef(null);\n  const handleRef = useForkRef(headerCellRef, ref);\n  let ariaSort = 'none';\n  if (sortDirection != null) {\n    ariaSort = sortDirection === 'asc' ? 'ascending' : 'descending';\n  }\n  React.useLayoutEffect(() => {\n    const columnMenuState = apiRef.current.state.columnMenu;\n    if (hasFocus && !columnMenuState.open) {\n      const focusableElement = headerCellRef.current.querySelector('[tabindex=\"0\"]');\n      const elementToFocus = focusableElement || headerCellRef.current;\n      elementToFocus?.focus();\n      if (apiRef.current.columnHeadersContainerRef?.current) {\n        apiRef.current.columnHeadersContainerRef.current.scrollLeft = 0;\n      }\n    }\n  }, [apiRef, hasFocus]);\n  return /*#__PURE__*/_jsxs(\"div\", _extends({\n    ref: handleRef,\n    className: clsx(classes.root, headerClassName),\n    style: _extends({}, style, {\n      height,\n      width\n    }),\n    role: \"columnheader\",\n    tabIndex: tabIndex,\n    \"aria-colindex\": colIndex + 1,\n    \"aria-sort\": ariaSort\n  }, other, {\n    children: [/*#__PURE__*/_jsxs(\"div\", _extends({\n      className: classes.draggableContainer,\n      draggable: isDraggable,\n      role: \"presentation\"\n    }, draggableContainerProps, {\n      children: [/*#__PURE__*/_jsxs(\"div\", {\n        className: classes.titleContainer,\n        role: \"presentation\",\n        children: [/*#__PURE__*/_jsx(\"div\", {\n          className: classes.titleContainerContent,\n          children: headerComponent !== undefined ? headerComponent : /*#__PURE__*/_jsx(GridColumnHeaderTitle, {\n            label: label,\n            description: description,\n            columnWidth: width\n          })\n        }), columnTitleIconButtons]\n      }), columnMenuIconButton]\n    })), /*#__PURE__*/_jsx(GridColumnHeaderSeparator, _extends({\n      resizable: !rootProps.disableColumnResize && !!resizable,\n      resizing: isResizing,\n      height: height,\n      side: separatorSide\n    }, columnHeaderSeparatorProps)), columnMenu]\n  }));\n});\nexport { GridGenericColumnHeaderItem };","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport _objectWithoutPropertiesLoose from \"@babel/runtime/helpers/esm/objectWithoutPropertiesLoose\";\nconst _excluded = [\"className\"];\nimport * as React from 'react';\nimport clsx from 'clsx';\nimport composeClasses from '@mui/utils/composeClasses';\nimport { styled } from '@mui/system';\nimport { getDataGridUtilityClass } from \"../../constants/gridClasses.js\";\nimport { useGridRootProps } from \"../../hooks/utils/useGridRootProps.js\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nconst useUtilityClasses = ownerState => {\n  const {\n    classes\n  } = ownerState;\n  const slots = {\n    root: ['iconButtonContainer']\n  };\n  return composeClasses(slots, getDataGridUtilityClass, classes);\n};\nconst GridIconButtonContainerRoot = styled('div', {\n  name: 'MuiDataGrid',\n  slot: 'IconButtonContainer',\n  overridesResolver: (props, styles) => styles.iconButtonContainer\n})(() => ({\n  display: 'flex',\n  visibility: 'hidden',\n  width: 0\n}));\nexport const GridIconButtonContainer = /*#__PURE__*/React.forwardRef(function GridIconButtonContainer(props, ref) {\n  const {\n      className\n    } = props,\n    other = _objectWithoutPropertiesLoose(props, _excluded);\n  const rootProps = useGridRootProps();\n  const classes = useUtilityClasses(rootProps);\n  return /*#__PURE__*/_jsx(GridIconButtonContainerRoot, _extends({\n    ref: ref,\n    className: clsx(classes.root, className),\n    ownerState: rootProps\n  }, other));\n});","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport _objectWithoutPropertiesLoose from \"@babel/runtime/helpers/esm/objectWithoutPropertiesLoose\";\nconst _excluded = [\"field\", \"id\", \"value\", \"formattedValue\", \"row\", \"rowNode\", \"colDef\", \"isEditable\", \"cellMode\", \"hasFocus\", \"tabIndex\", \"api\"];\nimport * as React from 'react';\nimport PropTypes from 'prop-types';\nimport { unstable_composeClasses as composeClasses, unstable_useForkRef as useForkRef } from '@mui/utils';\nimport { useGridApiContext } from \"../../hooks/utils/useGridApiContext.js\";\nimport { useGridRootProps } from \"../../hooks/utils/useGridRootProps.js\";\nimport { getDataGridUtilityClass } from \"../../constants/gridClasses.js\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nconst useUtilityClasses = ownerState => {\n  const {\n    classes\n  } = ownerState;\n  const slots = {\n    root: ['checkboxInput']\n  };\n  return composeClasses(slots, getDataGridUtilityClass, classes);\n};\nconst GridCellCheckboxForwardRef = /*#__PURE__*/React.forwardRef(function GridCellCheckboxRenderer(props, ref) {\n  const {\n      field,\n      id,\n      value: isChecked,\n      rowNode,\n      hasFocus,\n      tabIndex\n    } = props,\n    other = _objectWithoutPropertiesLoose(props, _excluded);\n  const apiRef = useGridApiContext();\n  const rootProps = useGridRootProps();\n  const ownerState = {\n    classes: rootProps.classes\n  };\n  const classes = useUtilityClasses(ownerState);\n  const checkboxElement = React.useRef(null);\n  const rippleRef = React.useRef(null);\n  const handleRef = useForkRef(checkboxElement, ref);\n  const handleChange = event => {\n    const params = {\n      value: event.target.checked,\n      id\n    };\n    apiRef.current.publishEvent('rowSelectionCheckboxChange', params, event);\n  };\n  React.useLayoutEffect(() => {\n    if (tabIndex === 0) {\n      const element = apiRef.current.getCellElement(id, field);\n      if (element) {\n        element.tabIndex = -1;\n      }\n    }\n  }, [apiRef, tabIndex, id, field]);\n  React.useEffect(() => {\n    if (hasFocus) {\n      const input = checkboxElement.current?.querySelector('input');\n      input?.focus({\n        preventScroll: true\n      });\n    } else if (rippleRef.current) {\n      // Only available in @mui/material v5.4.1 or later\n      rippleRef.current.stop({});\n    }\n  }, [hasFocus]);\n  const handleKeyDown = React.useCallback(event => {\n    if (event.key === ' ') {\n      // We call event.stopPropagation to avoid selecting the row and also scrolling to bottom\n      // TODO: Remove and add a check inside useGridKeyboardNavigation\n      event.stopPropagation();\n    }\n  }, []);\n  if (rowNode.type === 'footer' || rowNode.type === 'pinnedRow') {\n    return null;\n  }\n  const isSelectable = apiRef.current.isRowSelectable(id);\n  const label = apiRef.current.getLocaleText(isChecked ? 'checkboxSelectionUnselectRow' : 'checkboxSelectionSelectRow');\n  return /*#__PURE__*/_jsx(rootProps.slots.baseCheckbox, _extends({\n    ref: handleRef,\n    tabIndex: tabIndex,\n    checked: isChecked,\n    onChange: handleChange,\n    className: classes.root,\n    inputProps: {\n      'aria-label': label\n    },\n    onKeyDown: handleKeyDown,\n    disabled: !isSelectable,\n    touchRippleRef: rippleRef /* FIXME: typing error */\n  }, rootProps.slotProps?.baseCheckbox, other));\n});\nprocess.env.NODE_ENV !== \"production\" ? GridCellCheckboxForwardRef.propTypes = {\n  // ----------------------------- Warning --------------------------------\n  // | These PropTypes are generated from the TypeScript type definitions |\n  // | To update them edit the TypeScript types and run \"pnpm proptypes\"  |\n  // ----------------------------------------------------------------------\n  /**\n   * GridApi that let you manipulate the grid.\n   */\n  api: PropTypes.object.isRequired,\n  /**\n   * The mode of the cell.\n   */\n  cellMode: PropTypes.oneOf(['edit', 'view']).isRequired,\n  /**\n   * The column of the row that the current cell belongs to.\n   */\n  colDef: PropTypes.object.isRequired,\n  /**\n   * The column field of the cell that triggered the event.\n   */\n  field: PropTypes.string.isRequired,\n  /**\n   * A ref allowing to set imperative focus.\n   * It can be passed to the element that should receive focus.\n   * @ignore - do not document.\n   */\n  focusElementRef: PropTypes.oneOfType([PropTypes.func, PropTypes.shape({\n    current: PropTypes.shape({\n      focus: PropTypes.func.isRequired\n    })\n  })]),\n  /**\n   * The cell value formatted with the column valueFormatter.\n   */\n  formattedValue: PropTypes.any,\n  /**\n   * If true, the cell is the active element.\n   */\n  hasFocus: PropTypes.bool.isRequired,\n  /**\n   * The grid row id.\n   */\n  id: PropTypes.oneOfType([PropTypes.number, PropTypes.string]).isRequired,\n  /**\n   * If true, the cell is editable.\n   */\n  isEditable: PropTypes.bool,\n  /**\n   * The row model of the row that the current cell belongs to.\n   */\n  row: PropTypes.any.isRequired,\n  /**\n   * The node of the row that the current cell belongs to.\n   */\n  rowNode: PropTypes.object.isRequired,\n  /**\n   * the tabIndex value.\n   */\n  tabIndex: PropTypes.oneOf([-1, 0]).isRequired,\n  /**\n   * The cell value.\n   * If the column has `valueGetter`, use `params.row` to directly access the fields.\n   */\n  value: PropTypes.any\n} : void 0;\nexport { GridCellCheckboxForwardRef };\nexport const GridCellCheckboxRenderer = GridCellCheckboxForwardRef;","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport _objectWithoutPropertiesLoose from \"@babel/runtime/helpers/esm/objectWithoutPropertiesLoose\";\nconst _excluded = [\"field\", \"colDef\"];\nimport * as React from 'react';\nimport PropTypes from 'prop-types';\nimport composeClasses from '@mui/utils/composeClasses';\nimport { isMultipleRowSelectionEnabled } from \"../../hooks/features/rowSelection/utils.js\";\nimport { useGridSelector } from \"../../hooks/utils/useGridSelector.js\";\nimport { gridTabIndexColumnHeaderSelector } from \"../../hooks/features/focus/gridFocusStateSelector.js\";\nimport { gridRowSelectionStateSelector } from \"../../hooks/features/rowSelection/gridRowSelectionSelector.js\";\nimport { useGridApiContext } from \"../../hooks/utils/useGridApiContext.js\";\nimport { getDataGridUtilityClass } from \"../../constants/gridClasses.js\";\nimport { useGridRootProps } from \"../../hooks/utils/useGridRootProps.js\";\nimport { gridExpandedSortedRowIdsSelector } from \"../../hooks/features/filter/gridFilterSelector.js\";\nimport { gridPaginatedVisibleSortedGridRowIdsSelector } from \"../../hooks/features/pagination/gridPaginationSelector.js\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nconst useUtilityClasses = ownerState => {\n  const {\n    classes\n  } = ownerState;\n  const slots = {\n    root: ['checkboxInput']\n  };\n  return composeClasses(slots, getDataGridUtilityClass, classes);\n};\nconst GridHeaderCheckbox = /*#__PURE__*/React.forwardRef(function GridHeaderCheckbox(props, ref) {\n  const other = _objectWithoutPropertiesLoose(props, _excluded);\n  const [, forceUpdate] = React.useState(false);\n  const apiRef = useGridApiContext();\n  const rootProps = useGridRootProps();\n  const ownerState = {\n    classes: rootProps.classes\n  };\n  const classes = useUtilityClasses(ownerState);\n  const tabIndexState = useGridSelector(apiRef, gridTabIndexColumnHeaderSelector);\n  const selection = useGridSelector(apiRef, gridRowSelectionStateSelector);\n  const visibleRowIds = useGridSelector(apiRef, gridExpandedSortedRowIdsSelector);\n  const paginatedVisibleRowIds = useGridSelector(apiRef, gridPaginatedVisibleSortedGridRowIdsSelector);\n  const filteredSelection = React.useMemo(() => {\n    if (typeof rootProps.isRowSelectable !== 'function') {\n      return selection;\n    }\n    return selection.filter(id => {\n      // The row might have been deleted\n      if (!apiRef.current.getRow(id)) {\n        return false;\n      }\n      return rootProps.isRowSelectable(apiRef.current.getRowParams(id));\n    });\n  }, [apiRef, rootProps.isRowSelectable, selection]);\n\n  // All the rows that could be selected / unselected by toggling this checkbox\n  const selectionCandidates = React.useMemo(() => {\n    const rowIds = !rootProps.pagination || !rootProps.checkboxSelectionVisibleOnly ? visibleRowIds : paginatedVisibleRowIds;\n\n    // Convert to an object to make O(1) checking if a row exists or not\n    // TODO create selector that returns visibleRowIds/paginatedVisibleRowIds as an object\n    return rowIds.reduce((acc, id) => {\n      acc[id] = true;\n      return acc;\n    }, {});\n  }, [rootProps.pagination, rootProps.checkboxSelectionVisibleOnly, paginatedVisibleRowIds, visibleRowIds]);\n\n  // Amount of rows selected and that are visible in the current page\n  const currentSelectionSize = React.useMemo(() => filteredSelection.filter(id => selectionCandidates[id]).length, [filteredSelection, selectionCandidates]);\n  const isIndeterminate = currentSelectionSize > 0 && currentSelectionSize < Object.keys(selectionCandidates).length;\n  const isChecked = currentSelectionSize > 0;\n  const handleChange = event => {\n    const params = {\n      value: event.target.checked\n    };\n    apiRef.current.publishEvent('headerSelectionCheckboxChange', params);\n  };\n  const tabIndex = tabIndexState !== null && tabIndexState.field === props.field ? 0 : -1;\n  React.useLayoutEffect(() => {\n    const element = apiRef.current.getColumnHeaderElement(props.field);\n    if (tabIndex === 0 && element) {\n      element.tabIndex = -1;\n    }\n  }, [tabIndex, apiRef, props.field]);\n  const handleKeyDown = React.useCallback(event => {\n    if (event.key === ' ') {\n      // imperative toggle the checkbox because Space is disable by some preventDefault\n      apiRef.current.publishEvent('headerSelectionCheckboxChange', {\n        value: !isChecked\n      });\n    }\n  }, [apiRef, isChecked]);\n  const handleSelectionChange = React.useCallback(() => {\n    forceUpdate(p => !p);\n  }, []);\n  React.useEffect(() => {\n    return apiRef.current.subscribeEvent('rowSelectionChange', handleSelectionChange);\n  }, [apiRef, handleSelectionChange]);\n  const label = apiRef.current.getLocaleText(isChecked ? 'checkboxSelectionUnselectAllRows' : 'checkboxSelectionSelectAllRows');\n  const checked = rootProps.indeterminateCheckboxAction === 'select' ? isChecked && !isIndeterminate : isChecked;\n  return /*#__PURE__*/_jsx(rootProps.slots.baseCheckbox, _extends({\n    ref: ref,\n    indeterminate: isIndeterminate,\n    checked: checked,\n    onChange: handleChange,\n    className: classes.root,\n    inputProps: {\n      'aria-label': label\n    },\n    tabIndex: tabIndex,\n    onKeyDown: handleKeyDown,\n    disabled: !isMultipleRowSelectionEnabled(rootProps)\n  }, rootProps.slotProps?.baseCheckbox, other));\n});\nprocess.env.NODE_ENV !== \"production\" ? GridHeaderCheckbox.propTypes = {\n  // ----------------------------- Warning --------------------------------\n  // | These PropTypes are generated from the TypeScript type definitions |\n  // | To update them edit the TypeScript types and run \"pnpm proptypes\"  |\n  // ----------------------------------------------------------------------\n  /**\n   * The column of the current header component.\n   */\n  colDef: PropTypes.object.isRequired,\n  /**\n   * The column field of the column that triggered the event\n   */\n  field: PropTypes.string.isRequired\n} : void 0;\nexport { GridHeaderCheckbox };","export const checkColumnVisibilityModelsSame = (a, b) => {\n  // Filter `false` values only, as `true` and not having a key are the same\n  const aFalseValues = new Set(Object.keys(a).filter(key => a[key] === false));\n  const bFalseValues = new Set(Object.keys(b).filter(key => b[key] === false));\n  if (aFalseValues.size !== bFalseValues.size) {\n    return false;\n  }\n  let result = true;\n  aFalseValues.forEach(key => {\n    if (!bFalseValues.has(key)) {\n      result = false;\n    }\n  });\n  return result;\n};\nexport const defaultSearchPredicate = (column, searchValue) => (column.headerName || column.field).toLowerCase().indexOf(searchValue) > -1;","import _extends from \"@babel/runtime/helpers/esm/extends\";\n/* eslint-disable @typescript-eslint/no-use-before-define */\nimport * as React from 'react';\nimport PropTypes from 'prop-types';\nimport composeClasses from '@mui/utils/composeClasses';\nimport FormControlLabel from '@mui/material/FormControlLabel';\nimport { styled } from '@mui/material/styles';\nimport { gridColumnDefinitionsSelector, gridColumnVisibilityModelSelector } from \"../../hooks/features/columns/gridColumnsSelector.js\";\nimport { useGridSelector } from \"../../hooks/utils/useGridSelector.js\";\nimport { useGridApiContext } from \"../../hooks/utils/useGridApiContext.js\";\nimport { useGridRootProps } from \"../../hooks/utils/useGridRootProps.js\";\nimport { getDataGridUtilityClass } from \"../../constants/gridClasses.js\";\nimport { useLazyRef } from \"../../hooks/utils/useLazyRef.js\";\nimport { checkColumnVisibilityModelsSame, defaultSearchPredicate } from \"./utils.js\";\nimport { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nconst useUtilityClasses = ownerState => {\n  const {\n    classes\n  } = ownerState;\n  const slots = {\n    root: ['columnsManagement'],\n    header: ['columnsManagementHeader'],\n    footer: ['columnsManagementFooter'],\n    row: ['columnsManagementRow']\n  };\n  return composeClasses(slots, getDataGridUtilityClass, classes);\n};\nconst collator = new Intl.Collator();\nfunction GridColumnsManagement(props) {\n  const apiRef = useGridApiContext();\n  const searchInputRef = React.useRef(null);\n  const columns = useGridSelector(apiRef, gridColumnDefinitionsSelector);\n  const initialColumnVisibilityModel = useLazyRef(() => gridColumnVisibilityModelSelector(apiRef)).current;\n  const columnVisibilityModel = useGridSelector(apiRef, gridColumnVisibilityModelSelector);\n  const rootProps = useGridRootProps();\n  const [searchValue, setSearchValue] = React.useState('');\n  const classes = useUtilityClasses(rootProps);\n  const {\n    sort,\n    searchPredicate = defaultSearchPredicate,\n    autoFocusSearchField = true,\n    disableShowHideToggle = false,\n    disableResetButton = false,\n    toggleAllMode = 'all',\n    getTogglableColumns\n  } = props;\n  const isResetDisabled = React.useMemo(() => checkColumnVisibilityModelsSame(columnVisibilityModel, initialColumnVisibilityModel), [columnVisibilityModel, initialColumnVisibilityModel]);\n  const sortedColumns = React.useMemo(() => {\n    switch (sort) {\n      case 'asc':\n        return [...columns].sort((a, b) => collator.compare(a.headerName || a.field, b.headerName || b.field));\n      case 'desc':\n        return [...columns].sort((a, b) => -collator.compare(a.headerName || a.field, b.headerName || b.field));\n      default:\n        return columns;\n    }\n  }, [columns, sort]);\n  const toggleColumn = event => {\n    const {\n      name: field\n    } = event.target;\n    apiRef.current.setColumnVisibility(field, columnVisibilityModel[field] === false);\n  };\n  const currentColumns = React.useMemo(() => {\n    const togglableColumns = getTogglableColumns ? getTogglableColumns(sortedColumns) : null;\n    const togglableSortedColumns = togglableColumns ? sortedColumns.filter(({\n      field\n    }) => togglableColumns.includes(field)) : sortedColumns;\n    if (!searchValue) {\n      return togglableSortedColumns;\n    }\n    return togglableSortedColumns.filter(column => searchPredicate(column, searchValue.toLowerCase()));\n  }, [sortedColumns, searchValue, searchPredicate, getTogglableColumns]);\n  const toggleAllColumns = React.useCallback(isVisible => {\n    const currentModel = gridColumnVisibilityModelSelector(apiRef);\n    const newModel = _extends({}, currentModel);\n    const togglableColumns = getTogglableColumns ? getTogglableColumns(columns) : null;\n    (toggleAllMode === 'filteredOnly' ? currentColumns : columns).forEach(col => {\n      if (col.hideable && (togglableColumns == null || togglableColumns.includes(col.field))) {\n        if (isVisible) {\n          // delete the key from the model instead of setting it to `true`\n          delete newModel[col.field];\n        } else {\n          newModel[col.field] = false;\n        }\n      }\n    });\n    return apiRef.current.setColumnVisibilityModel(newModel);\n  }, [apiRef, columns, getTogglableColumns, toggleAllMode, currentColumns]);\n  const handleSearchValueChange = React.useCallback(event => {\n    setSearchValue(event.target.value);\n  }, []);\n  const hideableColumns = React.useMemo(() => currentColumns.filter(col => col.hideable), [currentColumns]);\n  const allHideableColumnsVisible = React.useMemo(() => hideableColumns.every(column => columnVisibilityModel[column.field] == null || columnVisibilityModel[column.field] !== false), [columnVisibilityModel, hideableColumns]);\n  const allHideableColumnsHidden = React.useMemo(() => hideableColumns.every(column => columnVisibilityModel[column.field] === false), [columnVisibilityModel, hideableColumns]);\n  const firstSwitchRef = React.useRef(null);\n  React.useEffect(() => {\n    if (autoFocusSearchField) {\n      searchInputRef.current.focus();\n    } else if (firstSwitchRef.current && typeof firstSwitchRef.current.focus === 'function') {\n      firstSwitchRef.current.focus();\n    }\n  }, [autoFocusSearchField]);\n  let firstHideableColumnFound = false;\n  const isFirstHideableColumn = column => {\n    if (firstHideableColumnFound === false && column.hideable !== false) {\n      firstHideableColumnFound = true;\n      return true;\n    }\n    return false;\n  };\n  return /*#__PURE__*/_jsxs(React.Fragment, {\n    children: [/*#__PURE__*/_jsx(GridColumnsManagementHeader, {\n      className: classes.header,\n      ownerState: rootProps,\n      children: /*#__PURE__*/_jsx(rootProps.slots.baseTextField, _extends({\n        placeholder: apiRef.current.getLocaleText('columnsManagementSearchTitle'),\n        inputRef: searchInputRef,\n        value: searchValue,\n        onChange: handleSearchValueChange,\n        variant: \"outlined\",\n        size: \"small\",\n        InputProps: {\n          startAdornment: /*#__PURE__*/_jsx(rootProps.slots.baseInputAdornment, {\n            position: \"start\",\n            children: /*#__PURE__*/_jsx(rootProps.slots.quickFilterIcon, {})\n          }),\n          sx: {\n            pl: 1.5\n          }\n        },\n        fullWidth: true\n      }, rootProps.slotProps?.baseTextField))\n    }), /*#__PURE__*/_jsxs(GridColumnsManagementBody, {\n      className: classes.root,\n      ownerState: rootProps,\n      children: [currentColumns.map(column => /*#__PURE__*/_jsx(FormControlLabel, {\n        className: classes.row,\n        control: /*#__PURE__*/_jsx(rootProps.slots.baseCheckbox, _extends({\n          disabled: column.hideable === false,\n          checked: columnVisibilityModel[column.field] !== false,\n          onClick: toggleColumn,\n          name: column.field,\n          sx: {\n            p: 0.5\n          },\n          inputRef: isFirstHideableColumn(column) ? firstSwitchRef : undefined\n        }, rootProps.slotProps?.baseCheckbox)),\n        label: column.headerName || column.field\n      }, column.field)), currentColumns.length === 0 && /*#__PURE__*/_jsx(GridColumnsManagementEmptyText, {\n        ownerState: rootProps,\n        children: apiRef.current.getLocaleText('columnsManagementNoColumns')\n      })]\n    }), (!disableShowHideToggle || !disableResetButton) && currentColumns.length > 0 ? /*#__PURE__*/_jsxs(GridColumnsManagementFooter, {\n      ownerState: rootProps,\n      className: classes.footer,\n      children: [!disableShowHideToggle ? /*#__PURE__*/_jsx(FormControlLabel, {\n        control: /*#__PURE__*/_jsx(rootProps.slots.baseCheckbox, _extends({\n          disabled: hideableColumns.length === 0,\n          checked: allHideableColumnsVisible,\n          indeterminate: !allHideableColumnsVisible && !allHideableColumnsHidden,\n          onClick: () => toggleAllColumns(!allHideableColumnsVisible),\n          name: apiRef.current.getLocaleText('columnsManagementShowHideAllText'),\n          sx: {\n            p: 0.5\n          }\n        }, rootProps.slotProps?.baseCheckbox)),\n        label: apiRef.current.getLocaleText('columnsManagementShowHideAllText')\n      }) : /*#__PURE__*/_jsx(\"span\", {}), !disableResetButton ? /*#__PURE__*/_jsx(rootProps.slots.baseButton, _extends({\n        onClick: () => apiRef.current.setColumnVisibilityModel(initialColumnVisibilityModel),\n        disabled: isResetDisabled\n      }, rootProps.slotProps?.baseButton, {\n        children: apiRef.current.getLocaleText('columnsManagementReset')\n      })) : null]\n    }) : null]\n  });\n}\nprocess.env.NODE_ENV !== \"production\" ? GridColumnsManagement.propTypes = {\n  // ----------------------------- Warning --------------------------------\n  // | These PropTypes are generated from the TypeScript type definitions |\n  // | To update them edit the TypeScript types and run \"pnpm proptypes\"  |\n  // ----------------------------------------------------------------------\n  /**\n   * If `true`, the column search field will be focused automatically.\n   * If `false`, the first column switch input will be focused automatically.\n   * This helps to avoid input keyboard panel to popup automatically on touch devices.\n   * @default true\n   */\n  autoFocusSearchField: PropTypes.bool,\n  /**\n   * If `true`, the `Reset` button will not be disabled\n   * @default false\n   */\n  disableResetButton: PropTypes.bool,\n  /**\n   * If `true`, the `Show/Hide all` toggle checkbox will not be displayed.\n   * @default false\n   */\n  disableShowHideToggle: PropTypes.bool,\n  /**\n   * Returns the list of togglable columns.\n   * If used, only those columns will be displayed in the panel\n   * which are passed as the return value of the function.\n   * @param {GridColDef[]} columns The `ColDef` list of all columns.\n   * @returns {GridColDef['field'][]} The list of togglable columns' field names.\n   */\n  getTogglableColumns: PropTypes.func,\n  searchPredicate: PropTypes.func,\n  sort: PropTypes.oneOf(['asc', 'desc']),\n  /**\n   * Changes the behavior of the `Show/Hide All` toggle when the search field is used:\n   * - `all`: Will toggle all columns.\n   * - `filteredOnly`: Will only toggle columns that match the search criteria.\n   * @default 'all'\n   */\n  toggleAllMode: PropTypes.oneOf(['all', 'filteredOnly'])\n} : void 0;\nconst GridColumnsManagementBody = styled('div', {\n  name: 'MuiDataGrid',\n  slot: 'ColumnsManagement',\n  overridesResolver: (props, styles) => styles.columnsManagement\n})(({\n  theme\n}) => ({\n  padding: theme.spacing(0, 3, 1.5),\n  display: 'flex',\n  flexDirection: 'column',\n  overflow: 'auto',\n  flex: '1 1',\n  maxHeight: 400,\n  alignItems: 'flex-start'\n}));\nconst GridColumnsManagementHeader = styled('div', {\n  name: 'MuiDataGrid',\n  slot: 'ColumnsManagementHeader',\n  overridesResolver: (props, styles) => styles.columnsManagementHeader\n})(({\n  theme\n}) => ({\n  padding: theme.spacing(1.5, 3)\n}));\nconst GridColumnsManagementFooter = styled('div', {\n  name: 'MuiDataGrid',\n  slot: 'ColumnsManagementFooter',\n  overridesResolver: (props, styles) => styles.columnsManagementFooter\n})(({\n  theme\n}) => ({\n  padding: theme.spacing(0.5, 1, 0.5, 3),\n  display: 'flex',\n  justifyContent: 'space-between',\n  borderTop: `1px solid ${theme.palette.divider}`\n}));\nconst GridColumnsManagementEmptyText = styled('div')(({\n  theme\n}) => ({\n  padding: theme.spacing(0.5, 0),\n  color: theme.palette.grey[500]\n}));\nexport { GridColumnsManagement };","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport _objectWithoutPropertiesLoose from \"@babel/runtime/helpers/esm/objectWithoutPropertiesLoose\";\nconst _excluded = [\"className\"];\nimport * as React from 'react';\nimport PropTypes from 'prop-types';\nimport clsx from 'clsx';\nimport composeClasses from '@mui/utils/composeClasses';\nimport { styled } from '@mui/system';\nimport { getDataGridUtilityClass } from \"../../constants/gridClasses.js\";\nimport { useGridRootProps } from \"../../hooks/utils/useGridRootProps.js\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nconst useUtilityClasses = ownerState => {\n  const {\n    classes\n  } = ownerState;\n  const slots = {\n    root: ['footerContainer', 'withBorderColor']\n  };\n  return composeClasses(slots, getDataGridUtilityClass, classes);\n};\nconst GridFooterContainerRoot = styled('div', {\n  name: 'MuiDataGrid',\n  slot: 'FooterContainer',\n  overridesResolver: (props, styles) => styles.footerContainer\n})({\n  display: 'flex',\n  justifyContent: 'space-between',\n  alignItems: 'center',\n  minHeight: 52,\n  borderTop: '1px solid'\n});\nconst GridFooterContainer = /*#__PURE__*/React.forwardRef(function GridFooterContainer(props, ref) {\n  const {\n      className\n    } = props,\n    other = _objectWithoutPropertiesLoose(props, _excluded);\n  const rootProps = useGridRootProps();\n  const classes = useUtilityClasses(rootProps);\n  return /*#__PURE__*/_jsx(GridFooterContainerRoot, _extends({\n    ref: ref,\n    className: clsx(classes.root, className),\n    ownerState: rootProps\n  }, other));\n});\nprocess.env.NODE_ENV !== \"production\" ? GridFooterContainer.propTypes = {\n  // ----------------------------- Warning --------------------------------\n  // | These PropTypes are generated from the TypeScript type definitions |\n  // | To update them edit the TypeScript types and run \"pnpm proptypes\"  |\n  // ----------------------------------------------------------------------\n  sx: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.func, PropTypes.object, PropTypes.bool])), PropTypes.func, PropTypes.object])\n} : void 0;\nexport { GridFooterContainer };","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport _objectWithoutPropertiesLoose from \"@babel/runtime/helpers/esm/objectWithoutPropertiesLoose\";\nconst _excluded = [\"className\"];\nimport * as React from 'react';\nimport PropTypes from 'prop-types';\nimport clsx from 'clsx';\nimport composeClasses from '@mui/utils/composeClasses';\nimport { styled } from '@mui/system';\nimport { getDataGridUtilityClass } from \"../../constants/gridClasses.js\";\nimport { useGridRootProps } from \"../../hooks/utils/useGridRootProps.js\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nconst useUtilityClasses = ownerState => {\n  const {\n    classes\n  } = ownerState;\n  const slots = {\n    root: ['overlay']\n  };\n  return composeClasses(slots, getDataGridUtilityClass, classes);\n};\nconst GridOverlayRoot = styled('div', {\n  name: 'MuiDataGrid',\n  slot: 'Overlay',\n  overridesResolver: (_, styles) => styles.overlay\n})({\n  width: '100%',\n  height: '100%',\n  display: 'flex',\n  alignSelf: 'center',\n  alignItems: 'center',\n  justifyContent: 'center',\n  backgroundColor: 'var(--unstable_DataGrid-overlayBackground)'\n});\nconst GridOverlay = /*#__PURE__*/React.forwardRef(function GridOverlay(props, ref) {\n  const {\n      className\n    } = props,\n    other = _objectWithoutPropertiesLoose(props, _excluded);\n  const rootProps = useGridRootProps();\n  const classes = useUtilityClasses(rootProps);\n  return /*#__PURE__*/_jsx(GridOverlayRoot, _extends({\n    ref: ref,\n    className: clsx(classes.root, className),\n    ownerState: rootProps\n  }, other));\n});\nprocess.env.NODE_ENV !== \"production\" ? GridOverlay.propTypes = {\n  // ----------------------------- Warning --------------------------------\n  // | These PropTypes are generated from the TypeScript type definitions |\n  // | To update them edit the TypeScript types and run \"pnpm proptypes\"  |\n  // ----------------------------------------------------------------------\n  sx: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.func, PropTypes.object, PropTypes.bool])), PropTypes.func, PropTypes.object])\n} : void 0;\nexport { GridOverlay };","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport { alpha, styled, darken, lighten, decomposeColor, recomposeColor } from '@mui/material/styles';\nimport { gridClasses as c } from \"../../constants/gridClasses.js\";\nimport { useGridSelector } from \"../../hooks/utils/useGridSelector.js\";\nimport { useGridPrivateApiContext } from \"../../hooks/utils/useGridPrivateApiContext.js\";\nimport { gridDimensionsSelector } from \"../../hooks/features/dimensions/gridDimensionsSelectors.js\";\nfunction getBorderColor(theme) {\n  if (theme.vars) {\n    return theme.vars.palette.TableCell.border;\n  }\n  if (theme.palette.mode === 'light') {\n    return lighten(alpha(theme.palette.divider, 1), 0.88);\n  }\n  return darken(alpha(theme.palette.divider, 1), 0.68);\n}\nconst columnHeaderStyles = {\n  [`& .${c.iconButtonContainer}`]: {\n    visibility: 'visible',\n    width: 'auto'\n  },\n  [`& .${c.menuIcon}`]: {\n    width: 'auto',\n    visibility: 'visible'\n  }\n};\nconst columnSeparatorTargetSize = 10;\nconst columnSeparatorOffset = -5;\nconst focusOutlineWidth = 1;\nconst separatorIconDragStyles = {\n  width: 3,\n  rx: 1.5,\n  x: 10.5\n};\n\n// Emotion thinks it knows better than us which selector we should use.\n// https://github.com/emotion-js/emotion/issues/1105#issuecomment-1722524968\nconst ignoreSsrWarning = '/* emotion-disable-server-rendering-unsafe-selector-warning-please-do-not-use-this-the-warning-exists-for-a-reason */';\nexport const GridRootStyles = styled('div', {\n  name: 'MuiDataGrid',\n  slot: 'Root',\n  overridesResolver: (props, styles) => [{\n    [`&.${c.autoHeight}`]: styles.autoHeight\n  }, {\n    [`&.${c.aggregationColumnHeader}`]: styles.aggregationColumnHeader\n  }, {\n    [`&.${c['aggregationColumnHeader--alignLeft']}`]: styles['aggregationColumnHeader--alignLeft']\n  }, {\n    [`&.${c['aggregationColumnHeader--alignCenter']}`]: styles['aggregationColumnHeader--alignCenter']\n  }, {\n    [`&.${c['aggregationColumnHeader--alignRight']}`]: styles['aggregationColumnHeader--alignRight']\n  }, {\n    [`&.${c.aggregationColumnHeaderLabel}`]: styles.aggregationColumnHeaderLabel\n  }, {\n    [`&.${c['root--disableUserSelection']} .${c.cell}`]: styles['root--disableUserSelection']\n  }, {\n    [`&.${c.autosizing}`]: styles.autosizing\n  }, {\n    [`& .${c.editBooleanCell}`]: styles.editBooleanCell\n  }, {\n    [`& .${c.cell}`]: styles.cell\n  }, {\n    [`& .${c['cell--editing']}`]: styles['cell--editing']\n  }, {\n    [`& .${c['cell--textCenter']}`]: styles['cell--textCenter']\n  }, {\n    [`& .${c['cell--textLeft']}`]: styles['cell--textLeft']\n  }, {\n    [`& .${c['cell--textRight']}`]: styles['cell--textRight']\n  }, {\n    [`& .${c['cell--rangeTop']}`]: styles['cell--rangeTop']\n  }, {\n    [`& .${c['cell--rangeBottom']}`]: styles['cell--rangeBottom']\n  }, {\n    [`& .${c['cell--rangeLeft']}`]: styles['cell--rangeLeft']\n  }, {\n    [`& .${c['cell--rangeRight']}`]: styles['cell--rangeRight']\n  }, {\n    [`& .${c['cell--withRightBorder']}`]: styles['cell--withRightBorder']\n  }, {\n    [`& .${c.cellCheckbox}`]: styles.cellCheckbox\n  }, {\n    [`& .${c.cellSkeleton}`]: styles.cellSkeleton\n  }, {\n    [`& .${c.checkboxInput}`]: styles.checkboxInput\n  }, {\n    [`& .${c['columnHeader--alignCenter']}`]: styles['columnHeader--alignCenter']\n  }, {\n    [`& .${c['columnHeader--alignLeft']}`]: styles['columnHeader--alignLeft']\n  }, {\n    [`& .${c['columnHeader--alignRight']}`]: styles['columnHeader--alignRight']\n  }, {\n    [`& .${c['columnHeader--dragging']}`]: styles['columnHeader--dragging']\n  }, {\n    [`& .${c['columnHeader--moving']}`]: styles['columnHeader--moving']\n  }, {\n    [`& .${c['columnHeader--numeric']}`]: styles['columnHeader--numeric']\n  }, {\n    [`& .${c['columnHeader--sortable']}`]: styles['columnHeader--sortable']\n  }, {\n    [`& .${c['columnHeader--sorted']}`]: styles['columnHeader--sorted']\n  }, {\n    [`& .${c['columnHeader--withRightBorder']}`]: styles['columnHeader--withRightBorder']\n  }, {\n    [`& .${c.columnHeader}`]: styles.columnHeader\n  }, {\n    [`& .${c.headerFilterRow}`]: styles.headerFilterRow\n  }, {\n    [`& .${c.columnHeaderCheckbox}`]: styles.columnHeaderCheckbox\n  }, {\n    [`& .${c.columnHeaderDraggableContainer}`]: styles.columnHeaderDraggableContainer\n  }, {\n    [`& .${c.columnHeaderTitleContainer}`]: styles.columnHeaderTitleContainer\n  }, {\n    [`& .${c['columnSeparator--resizable']}`]: styles['columnSeparator--resizable']\n  }, {\n    [`& .${c['columnSeparator--resizing']}`]: styles['columnSeparator--resizing']\n  }, {\n    [`& .${c.columnSeparator}`]: styles.columnSeparator\n  }, {\n    [`& .${c.filterIcon}`]: styles.filterIcon\n  }, {\n    [`& .${c.iconSeparator}`]: styles.iconSeparator\n  }, {\n    [`& .${c.menuIcon}`]: styles.menuIcon\n  }, {\n    [`& .${c.menuIconButton}`]: styles.menuIconButton\n  }, {\n    [`& .${c.menuOpen}`]: styles.menuOpen\n  }, {\n    [`& .${c.menuList}`]: styles.menuList\n  }, {\n    [`& .${c['row--editable']}`]: styles['row--editable']\n  }, {\n    [`& .${c['row--editing']}`]: styles['row--editing']\n  }, {\n    [`& .${c['row--dragging']}`]: styles['row--dragging']\n  }, {\n    [`& .${c.row}`]: styles.row\n  }, {\n    [`& .${c.rowReorderCellPlaceholder}`]: styles.rowReorderCellPlaceholder\n  }, {\n    [`& .${c.rowReorderCell}`]: styles.rowReorderCell\n  }, {\n    [`& .${c['rowReorderCell--draggable']}`]: styles['rowReorderCell--draggable']\n  }, {\n    [`& .${c.sortIcon}`]: styles.sortIcon\n  }, {\n    [`& .${c.withBorderColor}`]: styles.withBorderColor\n  }, {\n    [`& .${c.treeDataGroupingCell}`]: styles.treeDataGroupingCell\n  }, {\n    [`& .${c.treeDataGroupingCellToggle}`]: styles.treeDataGroupingCellToggle\n  }, {\n    [`& .${c.treeDataGroupingCellLoadingContainer}`]: styles.treeDataGroupingCellLoadingContainer\n  }, {\n    [`& .${c.detailPanelToggleCell}`]: styles.detailPanelToggleCell\n  }, {\n    [`& .${c['detailPanelToggleCell--expanded']}`]: styles['detailPanelToggleCell--expanded']\n  }, styles.root]\n})(({\n  theme: t\n}) => {\n  const apiRef = useGridPrivateApiContext();\n  const dimensions = useGridSelector(apiRef, gridDimensionsSelector);\n  const borderColor = getBorderColor(t);\n  const radius = t.shape.borderRadius;\n  const containerBackground = t.vars ? t.vars.palette.background.default : t.mixins.MuiDataGrid?.containerBackground ?? t.palette.background.default;\n  const pinnedBackground = t.mixins.MuiDataGrid?.pinnedBackground ?? containerBackground;\n  const overlayBackground = t.vars ? `rgba(${t.vars.palette.background.defaultChannel} / ${t.vars.palette.action.disabledOpacity})` : alpha(t.palette.background.default, t.palette.action.disabledOpacity);\n  const hoverOpacity = (t.vars || t).palette.action.hoverOpacity;\n  const hoverColor = (t.vars || t).palette.action.hover;\n  const selectedOpacity = (t.vars || t).palette.action.selectedOpacity;\n  const selectedBackground = t.vars ? `rgba(${t.vars.palette.primary.mainChannel} / ${selectedOpacity})` : alpha(t.palette.primary.main, selectedOpacity);\n  const selectedHoverBackground = t.vars ? `rgba(${t.vars.palette.primary.mainChannel} / calc(\n                ${t.vars.palette.action.selectedOpacity} +\n                ${t.vars.palette.action.hoverOpacity}\n              ))` : alpha(t.palette.primary.main, t.palette.action.selectedOpacity + t.palette.action.hoverOpacity);\n  const pinnedHoverBackground = t.vars ? hoverColor : blend(pinnedBackground, hoverColor, hoverOpacity);\n  const pinnedSelectedBackground = t.vars ? selectedBackground : blend(pinnedBackground, selectedBackground, selectedOpacity);\n  const pinnedSelectedHoverBackground = t.vars ? hoverColor : blend(pinnedSelectedBackground, hoverColor, hoverOpacity);\n  const selectedStyles = {\n    backgroundColor: selectedBackground,\n    '&:hover': {\n      backgroundColor: selectedHoverBackground,\n      // Reset on touch devices, it doesn't add specificity\n      '@media (hover: none)': {\n        backgroundColor: selectedBackground\n      }\n    }\n  };\n  const gridStyle = _extends({\n    '--unstable_DataGrid-radius': typeof radius === 'number' ? `${radius}px` : radius,\n    '--unstable_DataGrid-headWeight': t.typography.fontWeightMedium,\n    '--unstable_DataGrid-overlayBackground': overlayBackground,\n    '--DataGrid-containerBackground': containerBackground,\n    '--DataGrid-pinnedBackground': pinnedBackground,\n    '--DataGrid-rowBorderColor': borderColor,\n    '--DataGrid-cellOffsetMultiplier': 2,\n    '--DataGrid-width': '0px',\n    '--DataGrid-hasScrollX': '0',\n    '--DataGrid-hasScrollY': '0',\n    '--DataGrid-scrollbarSize': '10px',\n    '--DataGrid-rowWidth': '0px',\n    '--DataGrid-columnsTotalWidth': '0px',\n    '--DataGrid-leftPinnedWidth': '0px',\n    '--DataGrid-rightPinnedWidth': '0px',\n    '--DataGrid-headerHeight': '0px',\n    '--DataGrid-headersTotalHeight': '0px',\n    '--DataGrid-topContainerHeight': '0px',\n    '--DataGrid-bottomContainerHeight': '0px',\n    flex: 1,\n    boxSizing: 'border-box',\n    position: 'relative',\n    borderWidth: '1px',\n    borderStyle: 'solid',\n    borderColor,\n    borderRadius: 'var(--unstable_DataGrid-radius)',\n    color: (t.vars || t).palette.text.primary\n  }, t.typography.body2, {\n    outline: 'none',\n    height: '100%',\n    display: 'flex',\n    minWidth: 0,\n    // See https://github.com/mui/mui-x/issues/8547\n    minHeight: 0,\n    flexDirection: 'column',\n    overflow: 'hidden',\n    overflowAnchor: 'none',\n    // Keep the same scrolling position\n    [`.${c.main} > *:first-child${ignoreSsrWarning}`]: {\n      borderTopLeftRadius: 'var(--unstable_DataGrid-radius)',\n      borderTopRightRadius: 'var(--unstable_DataGrid-radius)'\n    },\n    [`&.${c.autoHeight}`]: {\n      height: 'auto'\n    },\n    [`&.${c.autosizing}`]: {\n      [`& .${c.columnHeaderTitleContainerContent} > *`]: {\n        overflow: 'visible !important'\n      },\n      '@media (hover: hover)': {\n        [`& .${c.iconButtonContainer}`]: {\n          width: '0 !important',\n          visibility: 'hidden !important'\n        },\n        [`& .${c.menuIcon}`]: {\n          width: '0 !important',\n          visibility: 'hidden !important'\n        }\n      },\n      [`& .${c.cell}`]: {\n        overflow: 'visible !important',\n        whiteSpace: 'nowrap',\n        minWidth: 'max-content !important',\n        maxWidth: 'max-content !important'\n      },\n      [`& .${c.groupingCriteriaCell}`]: {\n        width: 'unset'\n      },\n      [`& .${c.treeDataGroupingCell}`]: {\n        width: 'unset'\n      }\n    },\n    [`& .${c.columnHeader}, & .${c.cell}`]: {\n      WebkitTapHighlightColor: 'transparent',\n      padding: '0 10px',\n      boxSizing: 'border-box'\n    },\n    [`& .${c.columnHeader}:focus-within, & .${c.cell}:focus-within`]: {\n      outline: `solid ${t.vars ? `rgba(${t.vars.palette.primary.mainChannel} / 0.5)` : alpha(t.palette.primary.main, 0.5)} ${focusOutlineWidth}px`,\n      outlineOffset: focusOutlineWidth * -1\n    },\n    [`& .${c.columnHeader}:focus, & .${c.cell}:focus`]: {\n      outline: `solid ${t.palette.primary.main} ${focusOutlineWidth}px`,\n      outlineOffset: focusOutlineWidth * -1\n    },\n    // Hide the column separator when:\n    // - the column is focused and has an outline\n    // - the next column is focused and has an outline\n    // - the column has a left or right border\n    // - the next column is pinned right and has a left border\n    [`& .${c.columnHeader}:focus,\n      & .${c['columnHeader--withLeftBorder']},\n      & .${c['columnHeader--withRightBorder']},\n      & .${c['columnHeader--siblingFocused']},\n      & .${c['virtualScroller--hasScrollX']} .${c['columnHeader--lastUnpinned']},\n      & .${c['virtualScroller--hasScrollX']} .${c['columnHeader--last']}\n      `]: {\n      [`& .${c.columnSeparator}`]: {\n        opacity: 0\n      },\n      // Show resizable separators at all times on touch devices\n      '@media (hover: none)': {\n        [`& .${c['columnSeparator--resizable']}`]: {\n          opacity: 1\n        }\n      },\n      [`& .${c['columnSeparator--resizable']}:hover`]: {\n        opacity: 1\n      }\n    },\n    [`&.${c['root--noToolbar']} [aria-rowindex=\"1\"] [aria-colindex=\"1\"]`]: {\n      borderTopLeftRadius: 'calc(var(--unstable_DataGrid-radius) - 1px)'\n    },\n    [`&.${c['root--noToolbar']} [aria-rowindex=\"1\"] .${c['columnHeader--last']}`]: {\n      borderTopRightRadius: dimensions.hasScrollX && (!dimensions.hasScrollY || dimensions.scrollbarSize === 0) ? 'calc(var(--unstable_DataGrid-radius) - 1px)' : undefined\n    },\n    [`& .${c.columnHeaderCheckbox}, & .${c.cellCheckbox}`]: {\n      padding: 0,\n      justifyContent: 'center',\n      alignItems: 'center'\n    },\n    [`& .${c.columnHeader}`]: {\n      position: 'relative',\n      display: 'flex',\n      alignItems: 'center'\n    },\n    [`& .${c['virtualScroller--hasScrollX']} .${c['columnHeader--last']}`]: {\n      overflow: 'hidden'\n    },\n    [`& .${c['columnHeader--sorted']} .${c.iconButtonContainer}, & .${c['columnHeader--filtered']} .${c.iconButtonContainer}`]: {\n      visibility: 'visible',\n      width: 'auto'\n    },\n    [`& .${c.columnHeader}:not(.${c['columnHeader--sorted']}) .${c.sortIcon}`]: {\n      opacity: 0,\n      transition: t.transitions.create(['opacity'], {\n        duration: t.transitions.duration.shorter\n      })\n    },\n    [`& .${c.columnHeaderTitleContainer}`]: {\n      display: 'flex',\n      alignItems: 'center',\n      gap: t.spacing(0.25),\n      minWidth: 0,\n      flex: 1,\n      whiteSpace: 'nowrap',\n      overflow: 'hidden'\n    },\n    [`& .${c.columnHeaderTitleContainerContent}`]: {\n      overflow: 'hidden',\n      display: 'flex',\n      alignItems: 'center'\n    },\n    [`& .${c['columnHeader--filledGroup']} .${c.columnHeaderTitleContainer}`]: {\n      borderBottomWidth: '1px',\n      borderBottomStyle: 'solid',\n      boxSizing: 'border-box'\n    },\n    [`& .${c.sortIcon}, & .${c.filterIcon}`]: {\n      fontSize: 'inherit'\n    },\n    [`& .${c['columnHeader--sortable']}`]: {\n      cursor: 'pointer'\n    },\n    [`& .${c['columnHeader--alignCenter']} .${c.columnHeaderTitleContainer}`]: {\n      justifyContent: 'center'\n    },\n    [`& .${c['columnHeader--alignRight']} .${c.columnHeaderDraggableContainer}, & .${c['columnHeader--alignRight']} .${c.columnHeaderTitleContainer}`]: {\n      flexDirection: 'row-reverse'\n    },\n    [`& .${c['columnHeader--alignCenter']} .${c.menuIcon}`]: {\n      marginLeft: 'auto'\n    },\n    [`& .${c['columnHeader--alignRight']} .${c.menuIcon}`]: {\n      marginRight: 'auto',\n      marginLeft: -5\n    },\n    [`& .${c['columnHeader--moving']}`]: {\n      backgroundColor: (t.vars || t).palette.action.hover\n    },\n    [`& .${c['columnHeader--pinnedLeft']}, & .${c['columnHeader--pinnedRight']}`]: {\n      position: 'sticky',\n      zIndex: 4,\n      // Should be above the column separator\n      background: 'var(--DataGrid-pinnedBackground)'\n    },\n    [`& .${c.columnSeparator}`]: {\n      position: 'absolute',\n      overflow: 'hidden',\n      zIndex: 3,\n      display: 'flex',\n      flexDirection: 'column',\n      justifyContent: 'center',\n      alignItems: 'center',\n      maxWidth: columnSeparatorTargetSize,\n      color: borderColor\n    },\n    [`& .${c.columnHeaders}`]: {\n      width: 'var(--DataGrid-rowWidth)'\n    },\n    '@media (hover: hover)': {\n      [`& .${c.columnHeader}:hover`]: columnHeaderStyles,\n      [`& .${c.columnHeader}:not(.${c['columnHeader--sorted']}):hover .${c.sortIcon}`]: {\n        opacity: 0.5\n      }\n    },\n    '@media (hover: none)': {\n      [`& .${c.columnHeader}`]: columnHeaderStyles,\n      [`& .${c.columnHeader}:focus,\n        & .${c['columnHeader--siblingFocused']}`]: {\n        [`.${c['columnSeparator--resizable']}`]: {\n          color: (t.vars || t).palette.primary.main\n        }\n      }\n    },\n    [`& .${c['columnSeparator--sideLeft']}`]: {\n      left: columnSeparatorOffset\n    },\n    [`& .${c['columnSeparator--sideRight']}`]: {\n      right: columnSeparatorOffset\n    },\n    [`& .${c['columnHeader--withRightBorder']} .${c['columnSeparator--sideLeft']}`]: {\n      left: columnSeparatorOffset - 0.5\n    },\n    [`& .${c['columnHeader--withRightBorder']} .${c['columnSeparator--sideRight']}`]: {\n      right: columnSeparatorOffset - 0.5\n    },\n    [`& .${c['columnSeparator--resizable']}`]: {\n      cursor: 'col-resize',\n      touchAction: 'none',\n      [`&.${c['columnSeparator--resizing']}`]: {\n        color: (t.vars || t).palette.primary.main\n      },\n      // Always appear as draggable on touch devices\n      '@media (hover: none)': {\n        [`& .${c.iconSeparator} rect`]: separatorIconDragStyles\n      },\n      '@media (hover: hover)': {\n        '&:hover': {\n          color: (t.vars || t).palette.primary.main,\n          [`& .${c.iconSeparator} rect`]: separatorIconDragStyles\n        }\n      },\n      '& svg': {\n        pointerEvents: 'none'\n      }\n    },\n    [`& .${c.iconSeparator}`]: {\n      color: 'inherit',\n      transition: t.transitions.create(['color', 'width'], {\n        duration: t.transitions.duration.shortest\n      })\n    },\n    [`& .${c.menuIcon}`]: {\n      width: 0,\n      visibility: 'hidden',\n      fontSize: 20,\n      marginRight: -5,\n      display: 'flex',\n      alignItems: 'center'\n    },\n    [`.${c.menuOpen}`]: {\n      visibility: 'visible',\n      width: 'auto'\n    },\n    [`& .${c.headerFilterRow}`]: {\n      [`& .${c.columnHeader}`]: {\n        boxSizing: 'border-box',\n        borderBottom: '1px solid var(--DataGrid-rowBorderColor)'\n      }\n    },\n    /* Bottom border of the top-container */\n    [`& .${c['row--borderBottom']} .${c.columnHeader},\n      & .${c['row--borderBottom']} .${c.filler},\n      & .${c['row--borderBottom']} .${c.scrollbarFiller}`]: {\n      borderBottom: `1px solid var(--DataGrid-rowBorderColor)`\n    },\n    [`& .${c['row--borderBottom']} .${c.cell}`]: {\n      borderBottom: `1px solid var(--rowBorderColor)`\n    },\n    /* Row styles */\n    [`.${c.row}`]: {\n      display: 'flex',\n      width: 'var(--DataGrid-rowWidth)',\n      breakInside: 'avoid',\n      // Avoid the row to be broken in two different print pages.\n\n      '--rowBorderColor': 'var(--DataGrid-rowBorderColor)',\n      [`&.${c['row--firstVisible']}`]: {\n        '--rowBorderColor': 'transparent'\n      },\n      '&:hover': {\n        backgroundColor: (t.vars || t).palette.action.hover,\n        // Reset on touch devices, it doesn't add specificity\n        '@media (hover: none)': {\n          backgroundColor: 'transparent'\n        }\n      },\n      [`&.${c.rowSkeleton}:hover`]: {\n        backgroundColor: 'transparent'\n      },\n      '&.Mui-selected': selectedStyles\n    },\n    [`& .${c['container--top']}, & .${c['container--bottom']}`]: {\n      '[role=row]': {\n        background: 'var(--DataGrid-containerBackground)'\n      }\n    },\n    /* Cell styles */\n    [`& .${c.cell}`]: {\n      height: 'var(--height)',\n      width: 'var(--width)',\n      lineHeight: 'calc(var(--height) - 1px)',\n      // -1px for the border\n\n      boxSizing: 'border-box',\n      borderTop: `1px solid var(--rowBorderColor)`,\n      overflow: 'hidden',\n      whiteSpace: 'nowrap',\n      textOverflow: 'ellipsis',\n      '&.Mui-selected': selectedStyles\n    },\n    [`& .${c['virtualScrollerContent--overflowed']} .${c['row--lastVisible']} .${c.cell}`]: {\n      borderTopColor: 'transparent'\n    },\n    [`& .${c['pinnedRows--top']} :first-of-type`]: {\n      [`& .${c.cell}, .${c.scrollbarFiller}`]: {\n        borderTop: 'none'\n      }\n    },\n    [`&.${c['root--disableUserSelection']} .${c.cell}`]: {\n      userSelect: 'none'\n    },\n    [`& .${c['row--dynamicHeight']} > .${c.cell}`]: {\n      whiteSpace: 'initial',\n      lineHeight: 'inherit'\n    },\n    [`& .${c.cellEmpty}`]: {\n      padding: 0,\n      height: 'unset'\n    },\n    [`& .${c.cell}.${c['cell--selectionMode']}`]: {\n      cursor: 'default'\n    },\n    [`& .${c.cell}.${c['cell--editing']}`]: {\n      padding: 1,\n      display: 'flex',\n      boxShadow: t.shadows[2],\n      backgroundColor: (t.vars || t).palette.background.paper,\n      '&:focus-within': {\n        outline: `${focusOutlineWidth}px solid ${(t.vars || t).palette.primary.main}`,\n        outlineOffset: focusOutlineWidth * -1\n      }\n    },\n    [`& .${c['row--editing']}`]: {\n      boxShadow: t.shadows[2]\n    },\n    [`& .${c['row--editing']} .${c.cell}`]: {\n      boxShadow: t.shadows[0],\n      backgroundColor: (t.vars || t).palette.background.paper\n    },\n    [`& .${c.editBooleanCell}`]: {\n      display: 'flex',\n      height: '100%',\n      width: '100%',\n      alignItems: 'center',\n      justifyContent: 'center'\n    },\n    [`& .${c.booleanCell}[data-value=\"true\"]`]: {\n      color: (t.vars || t).palette.text.secondary\n    },\n    [`& .${c.booleanCell}[data-value=\"false\"]`]: {\n      color: (t.vars || t).palette.text.disabled\n    },\n    [`& .${c.actionsCell}`]: {\n      display: 'inline-flex',\n      alignItems: 'center',\n      gridGap: t.spacing(1)\n    },\n    [`& .${c.rowReorderCell}`]: {\n      display: 'inline-flex',\n      flex: 1,\n      alignItems: 'center',\n      justifyContent: 'center',\n      opacity: (t.vars || t).palette.action.disabledOpacity\n    },\n    [`& .${c['rowReorderCell--draggable']}`]: {\n      cursor: 'move',\n      opacity: 1\n    },\n    [`& .${c.rowReorderCellContainer}`]: {\n      padding: 0,\n      display: 'flex',\n      alignItems: 'stretch'\n    },\n    [`.${c.withBorderColor}`]: {\n      borderColor\n    },\n    [`& .${c['cell--withLeftBorder']}, & .${c['columnHeader--withLeftBorder']}`]: {\n      borderLeftColor: 'var(--DataGrid-rowBorderColor)',\n      borderLeftWidth: '1px',\n      borderLeftStyle: 'solid'\n    },\n    [`& .${c['cell--withRightBorder']}, & .${c['columnHeader--withRightBorder']}`]: {\n      borderRightColor: 'var(--DataGrid-rowBorderColor)',\n      borderRightWidth: '1px',\n      borderRightStyle: 'solid'\n    },\n    [`& .${c['cell--flex']}`]: {\n      display: 'flex',\n      alignItems: 'center',\n      lineHeight: 'inherit'\n    },\n    [`& .${c['cell--textLeft']}`]: {\n      textAlign: 'left',\n      justifyContent: 'flex-start'\n    },\n    [`& .${c['cell--textRight']}`]: {\n      textAlign: 'right',\n      justifyContent: 'flex-end'\n    },\n    [`& .${c['cell--textCenter']}`]: {\n      textAlign: 'center',\n      justifyContent: 'center'\n    },\n    [`& .${c['cell--pinnedLeft']}, & .${c['cell--pinnedRight']}`]: {\n      position: 'sticky',\n      zIndex: 3,\n      background: 'var(--DataGrid-pinnedBackground)'\n    },\n    [`& .${c.virtualScrollerContent} .${c.row}`]: {\n      '&:hover': {\n        [`& .${c['cell--pinnedLeft']}, & .${c['cell--pinnedRight']}`]: {\n          backgroundColor: pinnedHoverBackground\n        }\n      },\n      [`&.Mui-selected`]: {\n        [`& .${c['cell--pinnedLeft']}, & .${c['cell--pinnedRight']}`]: {\n          backgroundColor: pinnedSelectedBackground\n        },\n        '&:hover': {\n          [`& .${c['cell--pinnedLeft']}, & .${c['cell--pinnedRight']}`]: {\n            backgroundColor: pinnedSelectedHoverBackground\n          }\n        }\n      }\n    },\n    [`& .${c.cellOffsetLeft}`]: {\n      flex: '0 0 auto',\n      display: 'inline-block'\n    },\n    [`& .${c.cellSkeleton}`]: {\n      flex: '0 0 auto',\n      height: '100%',\n      display: 'inline-flex',\n      alignItems: 'center'\n    },\n    [`& .${c.columnHeaderDraggableContainer}`]: {\n      display: 'flex',\n      width: '100%',\n      height: '100%'\n    },\n    [`& .${c.rowReorderCellPlaceholder}`]: {\n      display: 'none'\n    },\n    [`& .${c['columnHeader--dragging']}, & .${c['row--dragging']}`]: {\n      background: (t.vars || t).palette.background.paper,\n      padding: '0 12px',\n      borderRadius: 'var(--unstable_DataGrid-radius)',\n      opacity: (t.vars || t).palette.action.disabledOpacity\n    },\n    [`& .${c['row--dragging']}`]: {\n      background: (t.vars || t).palette.background.paper,\n      padding: '0 12px',\n      borderRadius: 'var(--unstable_DataGrid-radius)',\n      opacity: (t.vars || t).palette.action.disabledOpacity,\n      [`& .${c.rowReorderCellPlaceholder}`]: {\n        display: 'flex'\n      }\n    },\n    [`& .${c.treeDataGroupingCell}`]: {\n      display: 'flex',\n      alignItems: 'center',\n      width: '100%'\n    },\n    [`& .${c.treeDataGroupingCellToggle}`]: {\n      flex: '0 0 28px',\n      alignSelf: 'stretch',\n      marginRight: t.spacing(2)\n    },\n    [`& .${c.treeDataGroupingCellLoadingContainer}`]: {\n      display: 'flex',\n      alignItems: 'center',\n      justifyContent: 'center',\n      height: '100%'\n    },\n    [`& .${c.groupingCriteriaCell}`]: {\n      display: 'flex',\n      alignItems: 'center',\n      width: '100%'\n    },\n    [`& .${c.groupingCriteriaCellToggle}`]: {\n      flex: '0 0 28px',\n      alignSelf: 'stretch',\n      marginRight: t.spacing(2)\n    },\n    /* ScrollbarFiller styles */\n    [`.${c.scrollbarFiller}`]: {\n      minWidth: 'calc(var(--DataGrid-hasScrollY) * var(--DataGrid-scrollbarSize))',\n      alignSelf: 'stretch',\n      [`&.${c['scrollbarFiller--borderTop']}`]: {\n        borderTop: '1px solid var(--DataGrid-rowBorderColor)'\n      },\n      [`&.${c['scrollbarFiller--borderBottom']}`]: {\n        borderBottom: '1px solid var(--DataGrid-rowBorderColor)'\n      },\n      [`&.${c['scrollbarFiller--pinnedRight']}`]: {\n        backgroundColor: 'var(--DataGrid-pinnedBackground)',\n        position: 'sticky',\n        right: 0\n      }\n    },\n    [`& .${c.filler}`]: {\n      flex: 1\n    },\n    [`& .${c['filler--borderBottom']}`]: {\n      borderBottom: '1px solid var(--DataGrid-rowBorderColor)'\n    },\n    /* Hide grid rows, row filler, and vertical scrollbar when skeleton overlay is visible */\n    [`& .${c['main--hasSkeletonLoadingOverlay']}`]: {\n      [`& .${c.virtualScrollerContent}`]: {\n        // We use visibility hidden so that the virtual scroller content retains its height.\n        // Position fixed is used to remove the virtual scroller content from the flow.\n        // https://github.com/mui/mui-x/issues/14061\n        position: 'fixed',\n        visibility: 'hidden'\n      },\n      [`& .${c['scrollbar--vertical']}, & .${c.pinnedRows}, & .${c.virtualScroller} > .${c.filler}`]: {\n        display: 'none'\n      }\n    }\n  });\n  return gridStyle;\n});\n\n/**\n * Blend a transparent overlay color with a background color, resulting in a single\n * RGB color.\n */\nfunction blend(background, overlay, opacity, gamma = 1) {\n  const f = (b, o) => Math.round((b ** (1 / gamma) * (1 - opacity) + o ** (1 / gamma) * opacity) ** gamma);\n  const backgroundColor = decomposeColor(background);\n  const overlayColor = decomposeColor(overlay);\n  const rgb = [f(backgroundColor.values[0], overlayColor.values[0]), f(backgroundColor.values[1], overlayColor.values[1]), f(backgroundColor.values[2], overlayColor.values[2])];\n  return recomposeColor({\n    type: 'rgb',\n    values: rgb\n  });\n}","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport _objectWithoutPropertiesLoose from \"@babel/runtime/helpers/esm/objectWithoutPropertiesLoose\";\nconst _excluded = [\"className\"];\nimport * as React from 'react';\nimport PropTypes from 'prop-types';\nimport clsx from 'clsx';\nimport { unstable_useForkRef as useForkRef, unstable_useEnhancedEffect as useEnhancedEffect, unstable_capitalize as capitalize, unstable_composeClasses as composeClasses } from '@mui/utils';\nimport { GridRootStyles } from \"./GridRootStyles.js\";\nimport { useGridSelector } from \"../../hooks/utils/useGridSelector.js\";\nimport { useGridPrivateApiContext } from \"../../hooks/utils/useGridPrivateApiContext.js\";\nimport { useGridRootProps } from \"../../hooks/utils/useGridRootProps.js\";\nimport { getDataGridUtilityClass } from \"../../constants/gridClasses.js\";\nimport { gridDensitySelector } from \"../../hooks/features/density/densitySelector.js\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nconst useUtilityClasses = (ownerState, density) => {\n  const {\n    autoHeight,\n    classes,\n    showCellVerticalBorder\n  } = ownerState;\n  const slots = {\n    root: ['root', autoHeight && 'autoHeight', `root--density${capitalize(density)}`, ownerState.slots.toolbar === null && 'root--noToolbar', 'withBorderColor', showCellVerticalBorder && 'withVerticalBorder']\n  };\n  return composeClasses(slots, getDataGridUtilityClass, classes);\n};\nconst GridRoot = /*#__PURE__*/React.forwardRef(function GridRoot(props, ref) {\n  const rootProps = useGridRootProps();\n  const {\n      className\n    } = props,\n    other = _objectWithoutPropertiesLoose(props, _excluded);\n  const apiRef = useGridPrivateApiContext();\n  const density = useGridSelector(apiRef, gridDensitySelector);\n  const rootElementRef = apiRef.current.rootElementRef;\n  const handleRef = useForkRef(rootElementRef, ref);\n  const ownerState = rootProps;\n  const classes = useUtilityClasses(ownerState, density);\n\n  // Our implementation of <NoSsr />\n  const [mountedState, setMountedState] = React.useState(false);\n  useEnhancedEffect(() => {\n    setMountedState(true);\n  }, []);\n  if (!mountedState) {\n    return null;\n  }\n  return /*#__PURE__*/_jsx(GridRootStyles, _extends({\n    ref: handleRef,\n    className: clsx(className, classes.root),\n    ownerState: ownerState\n  }, other));\n});\nprocess.env.NODE_ENV !== \"production\" ? GridRoot.propTypes = {\n  // ----------------------------- Warning --------------------------------\n  // | These PropTypes are generated from the TypeScript type definitions |\n  // | To update them edit the TypeScript types and run \"pnpm proptypes\"  |\n  // ----------------------------------------------------------------------\n  /**\n   * The system prop that allows defining system overrides as well as additional CSS styles.\n   */\n  sx: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.func, PropTypes.object, PropTypes.bool])), PropTypes.func, PropTypes.object])\n} : void 0;\nexport { GridRoot };","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport _objectWithoutPropertiesLoose from \"@babel/runtime/helpers/esm/objectWithoutPropertiesLoose\";\nconst _excluded = [\"open\", \"target\", \"onClose\", \"children\", \"position\", \"className\", \"onExited\"];\nimport * as React from 'react';\nimport PropTypes from 'prop-types';\nimport clsx from 'clsx';\nimport ClickAwayListener from '@mui/material/ClickAwayListener';\nimport { unstable_composeClasses as composeClasses, unstable_useEnhancedEffect as useEnhancedEffect, HTMLElementType } from '@mui/utils';\nimport Grow from '@mui/material/Grow';\nimport Paper from '@mui/material/Paper';\nimport Popper from '@mui/material/Popper';\nimport { styled } from '@mui/material/styles';\nimport { getDataGridUtilityClass, gridClasses } from \"../../constants/gridClasses.js\";\nimport { useGridRootProps } from \"../../hooks/utils/useGridRootProps.js\";\nimport { useGridApiContext } from \"../../hooks/utils/useGridApiContext.js\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nconst useUtilityClasses = ownerState => {\n  const {\n    classes\n  } = ownerState;\n  const slots = {\n    root: ['menu']\n  };\n  return composeClasses(slots, getDataGridUtilityClass, classes);\n};\nconst GridMenuRoot = styled(Popper, {\n  name: 'MuiDataGrid',\n  slot: 'Menu',\n  overridesResolver: (_, styles) => styles.menu\n})(({\n  theme\n}) => ({\n  zIndex: theme.zIndex.modal,\n  [`& .${gridClasses.menuList}`]: {\n    outline: 0\n  }\n}));\nconst transformOrigin = {\n  'bottom-start': 'top left',\n  'bottom-end': 'top right'\n};\nfunction GridMenu(props) {\n  const {\n      open,\n      target,\n      onClose,\n      children,\n      position,\n      className,\n      onExited\n    } = props,\n    other = _objectWithoutPropertiesLoose(props, _excluded);\n  const apiRef = useGridApiContext();\n  const rootProps = useGridRootProps();\n  const classes = useUtilityClasses(rootProps);\n  const savedFocusRef = React.useRef(null);\n  useEnhancedEffect(() => {\n    if (open) {\n      savedFocusRef.current = document.activeElement instanceof HTMLElement ? document.activeElement : null;\n    } else {\n      savedFocusRef.current?.focus?.();\n      savedFocusRef.current = null;\n    }\n  }, [open]);\n  React.useEffect(() => {\n    // Emit menuOpen or menuClose events\n    const eventName = open ? 'menuOpen' : 'menuClose';\n    apiRef.current.publishEvent(eventName, {\n      target\n    });\n  }, [apiRef, open, target]);\n  const handleExited = popperOnExited => node => {\n    if (popperOnExited) {\n      popperOnExited();\n    }\n    if (onExited) {\n      onExited(node);\n    }\n  };\n  const handleClickAway = event => {\n    if (event.target && (target === event.target || target?.contains(event.target))) {\n      return;\n    }\n    onClose(event);\n  };\n  return /*#__PURE__*/_jsx(GridMenuRoot, _extends({\n    as: rootProps.slots.basePopper,\n    className: clsx(className, classes.root),\n    ownerState: rootProps,\n    open: open,\n    anchorEl: target,\n    transition: true,\n    placement: position\n  }, other, rootProps.slotProps?.basePopper, {\n    children: ({\n      TransitionProps,\n      placement\n    }) => /*#__PURE__*/_jsx(ClickAwayListener, {\n      onClickAway: handleClickAway,\n      mouseEvent: \"onMouseDown\",\n      children: /*#__PURE__*/_jsx(Grow, _extends({}, TransitionProps, {\n        style: {\n          transformOrigin: transformOrigin[placement]\n        },\n        onExited: handleExited(TransitionProps?.onExited),\n        children: /*#__PURE__*/_jsx(Paper, {\n          children: children\n        })\n      }))\n    })\n  }));\n}\nprocess.env.NODE_ENV !== \"production\" ? GridMenu.propTypes = {\n  // ----------------------------- Warning --------------------------------\n  // | These PropTypes are generated from the TypeScript type definitions |\n  // | To update them edit the TypeScript types and run \"pnpm proptypes\"  |\n  // ----------------------------------------------------------------------\n  children: PropTypes.node,\n  onClose: PropTypes.func.isRequired,\n  onExited: PropTypes.func,\n  /**\n   * If `true`, the component is shown.\n   */\n  open: PropTypes.bool.isRequired,\n  position: PropTypes.oneOf(['bottom-end', 'bottom-start', 'bottom', 'left-end', 'left-start', 'left', 'right-end', 'right-start', 'right', 'top-end', 'top-start', 'top']),\n  target: HTMLElementType\n} : void 0;\nexport { GridMenu };","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport * as React from 'react';\nimport PropTypes from 'prop-types';\nimport { unstable_useEventCallback as useEventCallback, HTMLElementType } from '@mui/utils';\nimport { useGridApiContext } from \"../../../hooks/utils/useGridApiContext.js\";\nimport { GridMenu } from \"../GridMenu.js\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nfunction GridColumnHeaderMenu({\n  columnMenuId,\n  columnMenuButtonId,\n  ContentComponent,\n  contentComponentProps,\n  field,\n  open,\n  target,\n  onExited\n}) {\n  const apiRef = useGridApiContext();\n  const colDef = apiRef.current.getColumn(field);\n  const hideMenu = useEventCallback(event => {\n    if (event) {\n      // Prevent triggering the sorting\n      event.stopPropagation();\n      if (target?.contains(event.target)) {\n        return;\n      }\n    }\n    apiRef.current.hideColumnMenu();\n  });\n  if (!target || !colDef) {\n    return null;\n  }\n  return /*#__PURE__*/_jsx(GridMenu, {\n    placement: `bottom-${colDef.align === 'right' ? 'start' : 'end'}`,\n    open: open,\n    target: target,\n    onClose: hideMenu,\n    onExited: onExited,\n    children: /*#__PURE__*/_jsx(ContentComponent, _extends({\n      colDef: colDef,\n      hideMenu: hideMenu,\n      open: open,\n      id: columnMenuId,\n      labelledby: columnMenuButtonId\n    }, contentComponentProps))\n  });\n}\nprocess.env.NODE_ENV !== \"production\" ? GridColumnHeaderMenu.propTypes = {\n  // ----------------------------- Warning --------------------------------\n  // | These PropTypes are generated from the TypeScript type definitions |\n  // | To update them edit the TypeScript types and run \"pnpm proptypes\"  |\n  // ----------------------------------------------------------------------\n  columnMenuButtonId: PropTypes.string,\n  columnMenuId: PropTypes.string,\n  ContentComponent: PropTypes.elementType.isRequired,\n  contentComponentProps: PropTypes.any,\n  field: PropTypes.string.isRequired,\n  onExited: PropTypes.func,\n  open: PropTypes.bool.isRequired,\n  target: HTMLElementType\n} : void 0;\nexport { GridColumnHeaderMenu };","import _objectWithoutPropertiesLoose from \"@babel/runtime/helpers/esm/objectWithoutPropertiesLoose\";\nimport _extends from \"@babel/runtime/helpers/esm/extends\";\nconst _excluded = [\"displayOrder\"];\nimport * as React from 'react';\nimport Divider from '@mui/material/Divider';\nimport { useGridPrivateApiContext } from \"../../utils/useGridPrivateApiContext.js\";\nconst useGridColumnMenuSlots = props => {\n  const apiRef = useGridPrivateApiContext();\n  const {\n    defaultSlots,\n    defaultSlotProps,\n    slots = {},\n    slotProps = {},\n    hideMenu,\n    colDef,\n    addDividers = true\n  } = props;\n  const processedComponents = React.useMemo(() => _extends({}, defaultSlots, slots), [defaultSlots, slots]);\n  const processedSlotProps = React.useMemo(() => {\n    if (!slotProps || Object.keys(slotProps).length === 0) {\n      return defaultSlotProps;\n    }\n    const mergedProps = _extends({}, slotProps);\n    Object.entries(defaultSlotProps).forEach(([key, currentSlotProps]) => {\n      mergedProps[key] = _extends({}, currentSlotProps, slotProps[key] || {});\n    });\n    return mergedProps;\n  }, [defaultSlotProps, slotProps]);\n  const defaultItems = apiRef.current.unstable_applyPipeProcessors('columnMenu', [], props.colDef);\n  const userItems = React.useMemo(() => {\n    const defaultComponentKeys = Object.keys(defaultSlots);\n    return Object.keys(slots).filter(key => !defaultComponentKeys.includes(key));\n  }, [slots, defaultSlots]);\n  return React.useMemo(() => {\n    const uniqueItems = Array.from(new Set([...defaultItems, ...userItems]));\n    const cleansedItems = uniqueItems.filter(key => processedComponents[key] != null);\n    const sorted = cleansedItems.sort((a, b) => {\n      const leftItemProps = processedSlotProps[a];\n      const rightItemProps = processedSlotProps[b];\n      const leftDisplayOrder = Number.isFinite(leftItemProps?.displayOrder) ? leftItemProps.displayOrder : 100;\n      const rightDisplayOrder = Number.isFinite(rightItemProps?.displayOrder) ? rightItemProps.displayOrder : 100;\n      return leftDisplayOrder - rightDisplayOrder;\n    });\n    return sorted.reduce((acc, key, index) => {\n      let itemProps = {\n        colDef,\n        onClick: hideMenu\n      };\n      const processedComponentProps = processedSlotProps[key];\n      if (processedComponentProps) {\n        const customProps = _objectWithoutPropertiesLoose(processedComponentProps, _excluded);\n        itemProps = _extends({}, itemProps, customProps);\n      }\n      return addDividers && index !== sorted.length - 1 ? [...acc, [processedComponents[key], itemProps], [Divider, {}]] : [...acc, [processedComponents[key], itemProps]];\n    }, []);\n  }, [addDividers, colDef, defaultItems, hideMenu, processedComponents, processedSlotProps, userItems]);\n};\nexport { useGridColumnMenuSlots };","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport _objectWithoutPropertiesLoose from \"@babel/runtime/helpers/esm/objectWithoutPropertiesLoose\";\nconst _excluded = [\"defaultSlots\", \"defaultSlotProps\", \"slots\", \"slotProps\"];\nimport * as React from 'react';\nimport PropTypes from 'prop-types';\nimport { useGridColumnMenuSlots } from \"../../../hooks/features/columnMenu/useGridColumnMenuSlots.js\";\nimport { GridColumnMenuContainer } from \"./GridColumnMenuContainer.js\";\nimport { GridColumnMenuColumnsItem } from \"./menuItems/GridColumnMenuColumnsItem.js\";\nimport { GridColumnMenuFilterItem } from \"./menuItems/GridColumnMenuFilterItem.js\";\nimport { GridColumnMenuSortItem } from \"./menuItems/GridColumnMenuSortItem.js\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nexport const GRID_COLUMN_MENU_SLOTS = {\n  columnMenuSortItem: GridColumnMenuSortItem,\n  columnMenuFilterItem: GridColumnMenuFilterItem,\n  columnMenuColumnsItem: GridColumnMenuColumnsItem\n};\nexport const GRID_COLUMN_MENU_SLOT_PROPS = {\n  columnMenuSortItem: {\n    displayOrder: 10\n  },\n  columnMenuFilterItem: {\n    displayOrder: 20\n  },\n  columnMenuColumnsItem: {\n    displayOrder: 30\n  }\n};\nconst GridGenericColumnMenu = /*#__PURE__*/React.forwardRef(function GridGenericColumnMenu(props, ref) {\n  const {\n      defaultSlots,\n      defaultSlotProps,\n      slots,\n      slotProps\n    } = props,\n    other = _objectWithoutPropertiesLoose(props, _excluded);\n  const orderedSlots = useGridColumnMenuSlots(_extends({}, other, {\n    defaultSlots,\n    defaultSlotProps,\n    slots,\n    slotProps\n  }));\n  return /*#__PURE__*/_jsx(GridColumnMenuContainer, _extends({\n    ref: ref\n  }, other, {\n    children: orderedSlots.map(([Component, otherProps], index) => /*#__PURE__*/_jsx(Component, _extends({}, otherProps), index))\n  }));\n});\nconst GridColumnMenu = /*#__PURE__*/React.forwardRef(function GridColumnMenu(props, ref) {\n  return /*#__PURE__*/_jsx(GridGenericColumnMenu, _extends({}, props, {\n    ref: ref,\n    defaultSlots: GRID_COLUMN_MENU_SLOTS,\n    defaultSlotProps: GRID_COLUMN_MENU_SLOT_PROPS\n  }));\n});\nprocess.env.NODE_ENV !== \"production\" ? GridColumnMenu.propTypes = {\n  // ----------------------------- Warning --------------------------------\n  // | These PropTypes are generated from the TypeScript type definitions |\n  // | To update them edit the TypeScript types and run \"pnpm proptypes\"  |\n  // ----------------------------------------------------------------------\n  colDef: PropTypes.object.isRequired,\n  hideMenu: PropTypes.func.isRequired,\n  id: PropTypes.string,\n  labelledby: PropTypes.string,\n  open: PropTypes.bool.isRequired,\n  /**\n   * Could be used to pass new props or override props specific to a column menu component\n   * e.g. `displayOrder`\n   */\n  slotProps: PropTypes.object,\n  /**\n   * `slots` could be used to add new and (or) override default column menu items\n   * If you register a nee component you must pass it's `displayOrder` in `slotProps`\n   * or it will be placed in the end of the list\n   */\n  slots: PropTypes.object\n} : void 0;\nexport { GridColumnMenu, GridGenericColumnMenu };","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport _objectWithoutPropertiesLoose from \"@babel/runtime/helpers/esm/objectWithoutPropertiesLoose\";\nconst _excluded = [\"hideMenu\", \"colDef\", \"id\", \"labelledby\", \"className\", \"children\", \"open\"];\nimport clsx from 'clsx';\nimport PropTypes from 'prop-types';\nimport * as React from 'react';\nimport MenuList from '@mui/material/MenuList';\nimport { styled } from '@mui/material/styles';\nimport { isHideMenuKey } from \"../../../utils/keyboardUtils.js\";\nimport { gridClasses } from \"../../../constants/gridClasses.js\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nconst StyledMenuList = styled(MenuList)(() => ({\n  minWidth: 248\n}));\nconst GridColumnMenuContainer = /*#__PURE__*/React.forwardRef(function GridColumnMenuContainer(props, ref) {\n  const {\n      hideMenu,\n      id,\n      labelledby,\n      className,\n      children,\n      open\n    } = props,\n    other = _objectWithoutPropertiesLoose(props, _excluded);\n  const handleListKeyDown = React.useCallback(event => {\n    if (event.key === 'Tab') {\n      event.preventDefault();\n    }\n    if (isHideMenuKey(event.key)) {\n      hideMenu(event);\n    }\n  }, [hideMenu]);\n  return /*#__PURE__*/_jsx(StyledMenuList, _extends({\n    id: id,\n    ref: ref,\n    className: clsx(gridClasses.menuList, className),\n    \"aria-labelledby\": labelledby,\n    onKeyDown: handleListKeyDown,\n    autoFocus: open\n  }, other, {\n    children: children\n  }));\n});\nprocess.env.NODE_ENV !== \"production\" ? GridColumnMenuContainer.propTypes = {\n  // ----------------------------- Warning --------------------------------\n  // | These PropTypes are generated from the TypeScript type definitions |\n  // | To update them edit the TypeScript types and run \"pnpm proptypes\"  |\n  // ----------------------------------------------------------------------\n  colDef: PropTypes.object.isRequired,\n  hideMenu: PropTypes.func.isRequired,\n  id: PropTypes.string,\n  labelledby: PropTypes.string,\n  open: PropTypes.bool.isRequired\n} : void 0;\nexport { GridColumnMenuContainer };","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport * as React from 'react';\nimport PropTypes from 'prop-types';\nimport { GridColumnMenuHideItem } from \"./GridColumnMenuHideItem.js\";\nimport { GridColumnMenuManageItem } from \"./GridColumnMenuManageItem.js\";\nimport { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nfunction GridColumnMenuColumnsItem(props) {\n  return /*#__PURE__*/_jsxs(React.Fragment, {\n    children: [/*#__PURE__*/_jsx(GridColumnMenuHideItem, _extends({}, props)), /*#__PURE__*/_jsx(GridColumnMenuManageItem, _extends({}, props))]\n  });\n}\nprocess.env.NODE_ENV !== \"production\" ? GridColumnMenuColumnsItem.propTypes = {\n  // ----------------------------- Warning --------------------------------\n  // | These PropTypes are generated from the TypeScript type definitions |\n  // | To update them edit the TypeScript types and run \"pnpm proptypes\"  |\n  // ----------------------------------------------------------------------\n  colDef: PropTypes.object.isRequired,\n  onClick: PropTypes.func.isRequired\n} : void 0;\nexport { GridColumnMenuColumnsItem };","import * as React from 'react';\nimport PropTypes from 'prop-types';\nimport MenuItem from '@mui/material/MenuItem';\nimport ListItemIcon from '@mui/material/ListItemIcon';\nimport ListItemText from '@mui/material/ListItemText';\nimport { useGridApiContext } from \"../../../../hooks/utils/useGridApiContext.js\";\nimport { useGridRootProps } from \"../../../../hooks/utils/useGridRootProps.js\";\nimport { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nfunction GridColumnMenuFilterItem(props) {\n  const {\n    colDef,\n    onClick\n  } = props;\n  const apiRef = useGridApiContext();\n  const rootProps = useGridRootProps();\n  const showFilter = React.useCallback(event => {\n    onClick(event);\n    apiRef.current.showFilterPanel(colDef.field);\n  }, [apiRef, colDef.field, onClick]);\n  if (rootProps.disableColumnFilter || !colDef.filterable) {\n    return null;\n  }\n  return /*#__PURE__*/_jsxs(MenuItem, {\n    onClick: showFilter,\n    children: [/*#__PURE__*/_jsx(ListItemIcon, {\n      children: /*#__PURE__*/_jsx(rootProps.slots.columnMenuFilterIcon, {\n        fontSize: \"small\"\n      })\n    }), /*#__PURE__*/_jsx(ListItemText, {\n      children: apiRef.current.getLocaleText('columnMenuFilter')\n    })]\n  });\n}\nprocess.env.NODE_ENV !== \"production\" ? GridColumnMenuFilterItem.propTypes = {\n  // ----------------------------- Warning --------------------------------\n  // | These PropTypes are generated from the TypeScript type definitions |\n  // | To update them edit the TypeScript types and run \"pnpm proptypes\"  |\n  // ----------------------------------------------------------------------\n  colDef: PropTypes.object.isRequired,\n  onClick: PropTypes.func.isRequired\n} : void 0;\nexport { GridColumnMenuFilterItem };","import * as React from 'react';\nimport PropTypes from 'prop-types';\nimport MenuItem from '@mui/material/MenuItem';\nimport ListItemIcon from '@mui/material/ListItemIcon';\nimport ListItemText from '@mui/material/ListItemText';\nimport { useGridApiContext } from \"../../../../hooks/utils/useGridApiContext.js\";\nimport { useGridRootProps } from \"../../../../hooks/utils/useGridRootProps.js\";\nimport { gridVisibleColumnDefinitionsSelector } from \"../../../../hooks/features/columns/index.js\";\nimport { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nfunction GridColumnMenuHideItem(props) {\n  const {\n    colDef,\n    onClick\n  } = props;\n  const apiRef = useGridApiContext();\n  const rootProps = useGridRootProps();\n  const visibleColumns = gridVisibleColumnDefinitionsSelector(apiRef);\n  const columnsWithMenu = visibleColumns.filter(col => col.disableColumnMenu !== true);\n  // do not allow to hide the last column with menu\n  const disabled = columnsWithMenu.length === 1;\n  const toggleColumn = React.useCallback(event => {\n    /**\n     * Disabled `MenuItem` would trigger `click` event\n     * after imperative `.click()` call on HTML element.\n     * Also, click is triggered in testing environment as well.\n     */\n    if (disabled) {\n      return;\n    }\n    apiRef.current.setColumnVisibility(colDef.field, false);\n    onClick(event);\n  }, [apiRef, colDef.field, onClick, disabled]);\n  if (rootProps.disableColumnSelector) {\n    return null;\n  }\n  if (colDef.hideable === false) {\n    return null;\n  }\n  return /*#__PURE__*/_jsxs(MenuItem, {\n    onClick: toggleColumn,\n    disabled: disabled,\n    children: [/*#__PURE__*/_jsx(ListItemIcon, {\n      children: /*#__PURE__*/_jsx(rootProps.slots.columnMenuHideIcon, {\n        fontSize: \"small\"\n      })\n    }), /*#__PURE__*/_jsx(ListItemText, {\n      children: apiRef.current.getLocaleText('columnMenuHideColumn')\n    })]\n  });\n}\nprocess.env.NODE_ENV !== \"production\" ? GridColumnMenuHideItem.propTypes = {\n  // ----------------------------- Warning --------------------------------\n  // | These PropTypes are generated from the TypeScript type definitions |\n  // | To update them edit the TypeScript types and run \"pnpm proptypes\"  |\n  // ----------------------------------------------------------------------\n  colDef: PropTypes.object.isRequired,\n  onClick: PropTypes.func.isRequired\n} : void 0;\nexport { GridColumnMenuHideItem };","import * as React from 'react';\nimport PropTypes from 'prop-types';\nimport MenuItem from '@mui/material/MenuItem';\nimport ListItemIcon from '@mui/material/ListItemIcon';\nimport ListItemText from '@mui/material/ListItemText';\nimport { GridPreferencePanelsValue } from \"../../../../hooks/features/preferencesPanel/gridPreferencePanelsValue.js\";\nimport { useGridApiContext } from \"../../../../hooks/utils/useGridApiContext.js\";\nimport { useGridRootProps } from \"../../../../hooks/utils/useGridRootProps.js\";\nimport { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nfunction GridColumnMenuManageItem(props) {\n  const {\n    onClick\n  } = props;\n  const apiRef = useGridApiContext();\n  const rootProps = useGridRootProps();\n  const showColumns = React.useCallback(event => {\n    onClick(event); // hide column menu\n    apiRef.current.showPreferences(GridPreferencePanelsValue.columns);\n  }, [apiRef, onClick]);\n  if (rootProps.disableColumnSelector) {\n    return null;\n  }\n  return /*#__PURE__*/_jsxs(MenuItem, {\n    onClick: showColumns,\n    children: [/*#__PURE__*/_jsx(ListItemIcon, {\n      children: /*#__PURE__*/_jsx(rootProps.slots.columnMenuManageColumnsIcon, {\n        fontSize: \"small\"\n      })\n    }), /*#__PURE__*/_jsx(ListItemText, {\n      children: apiRef.current.getLocaleText('columnMenuManageColumns')\n    })]\n  });\n}\nprocess.env.NODE_ENV !== \"production\" ? GridColumnMenuManageItem.propTypes = {\n  // ----------------------------- Warning --------------------------------\n  // | These PropTypes are generated from the TypeScript type definitions |\n  // | To update them edit the TypeScript types and run \"pnpm proptypes\"  |\n  // ----------------------------------------------------------------------\n  colDef: PropTypes.object.isRequired,\n  onClick: PropTypes.func.isRequired\n} : void 0;\nexport { GridColumnMenuManageItem };","import * as React from 'react';\nimport PropTypes from 'prop-types';\nimport MenuItem from '@mui/material/MenuItem';\nimport ListItemIcon from '@mui/material/ListItemIcon';\nimport ListItemText from '@mui/material/ListItemText';\nimport { useGridSelector } from \"../../../../hooks/utils/useGridSelector.js\";\nimport { gridSortModelSelector } from \"../../../../hooks/features/sorting/gridSortingSelector.js\";\nimport { useGridApiContext } from \"../../../../hooks/utils/useGridApiContext.js\";\nimport { useGridRootProps } from \"../../../../hooks/utils/useGridRootProps.js\";\nimport { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nfunction GridColumnMenuSortItem(props) {\n  const {\n    colDef,\n    onClick\n  } = props;\n  const apiRef = useGridApiContext();\n  const sortModel = useGridSelector(apiRef, gridSortModelSelector);\n  const rootProps = useGridRootProps();\n  const sortDirection = React.useMemo(() => {\n    if (!colDef) {\n      return null;\n    }\n    const sortItem = sortModel.find(item => item.field === colDef.field);\n    return sortItem?.sort;\n  }, [colDef, sortModel]);\n  const sortingOrder = colDef.sortingOrder ?? rootProps.sortingOrder;\n  const onSortMenuItemClick = React.useCallback(event => {\n    onClick(event);\n    const direction = event.currentTarget.getAttribute('data-value') || null;\n    apiRef.current.sortColumn(colDef.field, direction === sortDirection ? null : direction);\n  }, [apiRef, colDef, onClick, sortDirection]);\n  if (rootProps.disableColumnSorting || !colDef || !colDef.sortable || !sortingOrder.some(item => !!item)) {\n    return null;\n  }\n  const getLabel = key => {\n    const label = apiRef.current.getLocaleText(key);\n    return typeof label === 'function' ? label(colDef) : label;\n  };\n  return /*#__PURE__*/_jsxs(React.Fragment, {\n    children: [sortingOrder.includes('asc') && sortDirection !== 'asc' ? /*#__PURE__*/_jsxs(MenuItem, {\n      onClick: onSortMenuItemClick,\n      \"data-value\": \"asc\",\n      children: [/*#__PURE__*/_jsx(ListItemIcon, {\n        children: /*#__PURE__*/_jsx(rootProps.slots.columnMenuSortAscendingIcon, {\n          fontSize: \"small\"\n        })\n      }), /*#__PURE__*/_jsx(ListItemText, {\n        children: getLabel('columnMenuSortAsc')\n      })]\n    }) : null, sortingOrder.includes('desc') && sortDirection !== 'desc' ? /*#__PURE__*/_jsxs(MenuItem, {\n      onClick: onSortMenuItemClick,\n      \"data-value\": \"desc\",\n      children: [/*#__PURE__*/_jsx(ListItemIcon, {\n        children: /*#__PURE__*/_jsx(rootProps.slots.columnMenuSortDescendingIcon, {\n          fontSize: \"small\"\n        })\n      }), /*#__PURE__*/_jsx(ListItemText, {\n        children: getLabel('columnMenuSortDesc')\n      })]\n    }) : null, sortingOrder.includes(null) && sortDirection != null ? /*#__PURE__*/_jsxs(MenuItem, {\n      onClick: onSortMenuItemClick,\n      children: [/*#__PURE__*/_jsx(ListItemIcon, {}), /*#__PURE__*/_jsx(ListItemText, {\n        children: apiRef.current.getLocaleText('columnMenuUnsort')\n      })]\n    }) : null]\n  });\n}\nprocess.env.NODE_ENV !== \"production\" ? GridColumnMenuSortItem.propTypes = {\n  // ----------------------------- Warning --------------------------------\n  // | These PropTypes are generated from the TypeScript type definitions |\n  // | To update them edit the TypeScript types and run \"pnpm proptypes\"  |\n  // ----------------------------------------------------------------------\n  colDef: PropTypes.object.isRequired,\n  onClick: PropTypes.func.isRequired\n} : void 0;\nexport { GridColumnMenuSortItem };","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport * as React from 'react';\nimport PropTypes from 'prop-types';\nimport { GridPanelWrapper } from \"./GridPanelWrapper.js\";\nimport { GridColumnsManagement } from \"../columnsManagement/index.js\";\nimport { useGridRootProps } from \"../../hooks/utils/useGridRootProps.js\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nfunction GridColumnsPanel(props) {\n  const rootProps = useGridRootProps();\n  return /*#__PURE__*/_jsx(GridPanelWrapper, _extends({}, props, {\n    children: /*#__PURE__*/_jsx(GridColumnsManagement, _extends({}, rootProps.slotProps?.columnsManagement))\n  }));\n}\nprocess.env.NODE_ENV !== \"production\" ? GridColumnsPanel.propTypes = {\n  // ----------------------------- Warning --------------------------------\n  // | These PropTypes are generated from the TypeScript type definitions |\n  // | To update them edit the TypeScript types and run \"pnpm proptypes\"  |\n  // ----------------------------------------------------------------------\n  slotProps: PropTypes.object\n} : void 0;\nexport { GridColumnsPanel };","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport _objectWithoutPropertiesLoose from \"@babel/runtime/helpers/esm/objectWithoutPropertiesLoose\";\nconst _excluded = [\"children\", \"className\", \"classes\"];\nimport * as React from 'react';\nimport PropTypes from 'prop-types';\nimport clsx from 'clsx';\nimport { styled } from '@mui/material/styles';\nimport { unstable_generateUtilityClasses as generateUtilityClasses } from '@mui/utils';\nimport ClickAwayListener from '@mui/material/ClickAwayListener';\nimport Paper from '@mui/material/Paper';\nimport Popper from '@mui/material/Popper';\nimport { useGridApiContext } from \"../../hooks/utils/useGridApiContext.js\";\nimport { useGridRootProps } from \"../../hooks/utils/useGridRootProps.js\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nexport const gridPanelClasses = generateUtilityClasses('MuiDataGrid', ['panel', 'paper']);\nconst GridPanelRoot = styled(Popper, {\n  name: 'MuiDataGrid',\n  slot: 'Panel',\n  overridesResolver: (props, styles) => styles.panel\n})(({\n  theme\n}) => ({\n  zIndex: theme.zIndex.modal\n}));\nconst GridPaperRoot = styled(Paper, {\n  name: 'MuiDataGrid',\n  slot: 'Paper',\n  overridesResolver: (props, styles) => styles.paper\n})(({\n  theme\n}) => ({\n  backgroundColor: (theme.vars || theme).palette.background.paper,\n  minWidth: 300,\n  maxHeight: 450,\n  display: 'flex',\n  maxWidth: `calc(100vw - ${theme.spacing(0.5)})`,\n  overflow: 'auto'\n}));\nconst GridPanel = /*#__PURE__*/React.forwardRef((props, ref) => {\n  const {\n      children,\n      className\n    } = props,\n    other = _objectWithoutPropertiesLoose(props, _excluded);\n  const apiRef = useGridApiContext();\n  const rootProps = useGridRootProps();\n  const classes = gridPanelClasses;\n  const [isPlaced, setIsPlaced] = React.useState(false);\n  const handleClickAway = React.useCallback(() => {\n    apiRef.current.hidePreferences();\n  }, [apiRef]);\n  const handleKeyDown = React.useCallback(event => {\n    if (event.key === 'Escape') {\n      apiRef.current.hidePreferences();\n    }\n  }, [apiRef]);\n  const modifiers = React.useMemo(() => [{\n    name: 'flip',\n    enabled: true,\n    options: {\n      rootBoundary: 'document'\n    }\n  }, {\n    name: 'isPlaced',\n    enabled: true,\n    phase: 'main',\n    fn: () => {\n      setIsPlaced(true);\n    },\n    effect: () => () => {\n      setIsPlaced(false);\n    }\n  }], []);\n  const [anchorEl, setAnchorEl] = React.useState(null);\n  React.useEffect(() => {\n    const panelAnchor = apiRef.current.rootElementRef?.current?.querySelector('[data-id=\"gridPanelAnchor\"]');\n    if (panelAnchor) {\n      setAnchorEl(panelAnchor);\n    }\n  }, [apiRef]);\n  if (!anchorEl) {\n    return null;\n  }\n  return /*#__PURE__*/_jsx(GridPanelRoot, _extends({\n    ref: ref,\n    placement: \"bottom-start\",\n    className: clsx(className, classes.panel),\n    ownerState: rootProps,\n    anchorEl: anchorEl,\n    modifiers: modifiers\n  }, other, {\n    children: /*#__PURE__*/_jsx(ClickAwayListener, {\n      mouseEvent: \"onMouseUp\",\n      onClickAway: handleClickAway,\n      children: /*#__PURE__*/_jsx(GridPaperRoot, {\n        className: classes.paper,\n        ownerState: rootProps,\n        elevation: 8,\n        onKeyDown: handleKeyDown,\n        children: isPlaced && children\n      })\n    })\n  }));\n});\nprocess.env.NODE_ENV !== \"production\" ? GridPanel.propTypes = {\n  // ----------------------------- Warning --------------------------------\n  // | These PropTypes are generated from the TypeScript type definitions |\n  // | To update them edit the TypeScript types and run \"pnpm proptypes\"  |\n  // ----------------------------------------------------------------------\n  /**\n   * Popper render function or node.\n   */\n  children: PropTypes.node,\n  /**\n   * Override or extend the styles applied to the component.\n   */\n  classes: PropTypes.object,\n  /**\n   * If `true`, the component is shown.\n   */\n  open: PropTypes.bool.isRequired,\n  ownerState: PropTypes.object\n} : void 0;\nexport { GridPanel };","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport _objectWithoutPropertiesLoose from \"@babel/runtime/helpers/esm/objectWithoutPropertiesLoose\";\nconst _excluded = [\"className\"];\nimport * as React from 'react';\nimport PropTypes from 'prop-types';\nimport clsx from 'clsx';\nimport { styled } from '@mui/system';\nimport composeClasses from '@mui/utils/composeClasses';\nimport { getDataGridUtilityClass } from \"../../constants/gridClasses.js\";\nimport { useGridRootProps } from \"../../hooks/utils/useGridRootProps.js\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nconst useUtilityClasses = ownerState => {\n  const {\n    classes\n  } = ownerState;\n  const slots = {\n    root: ['panelContent']\n  };\n  return composeClasses(slots, getDataGridUtilityClass, classes);\n};\nconst GridPanelContentRoot = styled('div', {\n  name: 'MuiDataGrid',\n  slot: 'PanelContent',\n  overridesResolver: (props, styles) => styles.panelContent\n})({\n  display: 'flex',\n  flexDirection: 'column',\n  overflow: 'auto',\n  flex: '1 1',\n  maxHeight: 400\n});\nfunction GridPanelContent(props) {\n  const {\n      className\n    } = props,\n    other = _objectWithoutPropertiesLoose(props, _excluded);\n  const rootProps = useGridRootProps();\n  const classes = useUtilityClasses(rootProps);\n  return /*#__PURE__*/_jsx(GridPanelContentRoot, _extends({\n    className: clsx(className, classes.root),\n    ownerState: rootProps\n  }, other));\n}\nprocess.env.NODE_ENV !== \"production\" ? GridPanelContent.propTypes = {\n  // ----------------------------- Warning --------------------------------\n  // | These PropTypes are generated from the TypeScript type definitions |\n  // | To update them edit the TypeScript types and run \"pnpm proptypes\"  |\n  // ----------------------------------------------------------------------\n  sx: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.func, PropTypes.object, PropTypes.bool])), PropTypes.func, PropTypes.object])\n} : void 0;\nexport { GridPanelContent };","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport _objectWithoutPropertiesLoose from \"@babel/runtime/helpers/esm/objectWithoutPropertiesLoose\";\nconst _excluded = [\"className\"];\nimport * as React from 'react';\nimport PropTypes from 'prop-types';\nimport clsx from 'clsx';\nimport { styled } from '@mui/system';\nimport composeClasses from '@mui/utils/composeClasses';\nimport { getDataGridUtilityClass } from \"../../constants/gridClasses.js\";\nimport { useGridRootProps } from \"../../hooks/utils/useGridRootProps.js\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nconst useUtilityClasses = ownerState => {\n  const {\n    classes\n  } = ownerState;\n  const slots = {\n    root: ['panelFooter']\n  };\n  return composeClasses(slots, getDataGridUtilityClass, classes);\n};\nconst GridPanelFooterRoot = styled('div', {\n  name: 'MuiDataGrid',\n  slot: 'PanelFooter',\n  overridesResolver: (props, styles) => styles.panelFooter\n})(({\n  theme\n}) => ({\n  padding: theme.spacing(0.5),\n  display: 'flex',\n  justifyContent: 'space-between'\n}));\nfunction GridPanelFooter(props) {\n  const {\n      className\n    } = props,\n    other = _objectWithoutPropertiesLoose(props, _excluded);\n  const rootProps = useGridRootProps();\n  const classes = useUtilityClasses(rootProps);\n  return /*#__PURE__*/_jsx(GridPanelFooterRoot, _extends({\n    className: clsx(className, classes.root),\n    ownerState: rootProps\n  }, other));\n}\nprocess.env.NODE_ENV !== \"production\" ? GridPanelFooter.propTypes = {\n  // ----------------------------- Warning --------------------------------\n  // | These PropTypes are generated from the TypeScript type definitions |\n  // | To update them edit the TypeScript types and run \"pnpm proptypes\"  |\n  // ----------------------------------------------------------------------\n  sx: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.func, PropTypes.object, PropTypes.bool])), PropTypes.func, PropTypes.object])\n} : void 0;\nexport { GridPanelFooter };","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport _objectWithoutPropertiesLoose from \"@babel/runtime/helpers/esm/objectWithoutPropertiesLoose\";\nconst _excluded = [\"className\", \"slotProps\"];\nimport * as React from 'react';\nimport PropTypes from 'prop-types';\nimport clsx from 'clsx';\nimport FocusTrap from '@mui/material/Unstable_TrapFocus';\nimport { styled } from '@mui/material/styles';\nimport composeClasses from '@mui/utils/composeClasses';\nimport { getDataGridUtilityClass } from \"../../constants/gridClasses.js\";\nimport { useGridRootProps } from \"../../hooks/utils/useGridRootProps.js\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nconst useUtilityClasses = ownerState => {\n  const {\n    classes\n  } = ownerState;\n  const slots = {\n    root: ['panelWrapper']\n  };\n  return composeClasses(slots, getDataGridUtilityClass, classes);\n};\nconst GridPanelWrapperRoot = styled('div', {\n  name: 'MuiDataGrid',\n  slot: 'PanelWrapper',\n  overridesResolver: (props, styles) => styles.panelWrapper\n})({\n  display: 'flex',\n  flexDirection: 'column',\n  flex: 1,\n  '&:focus': {\n    outline: 0\n  }\n});\nconst isEnabled = () => true;\nconst GridPanelWrapper = /*#__PURE__*/React.forwardRef(function GridPanelWrapper(props, ref) {\n  const {\n      className,\n      slotProps = {}\n    } = props,\n    other = _objectWithoutPropertiesLoose(props, _excluded);\n  const rootProps = useGridRootProps();\n  const classes = useUtilityClasses(rootProps);\n  return /*#__PURE__*/_jsx(FocusTrap, _extends({\n    open: true,\n    disableEnforceFocus: true,\n    isEnabled: isEnabled\n  }, slotProps.TrapFocus, {\n    children: /*#__PURE__*/_jsx(GridPanelWrapperRoot, _extends({\n      ref: ref,\n      tabIndex: -1,\n      className: clsx(className, classes.root),\n      ownerState: rootProps\n    }, other))\n  }));\n});\nprocess.env.NODE_ENV !== \"production\" ? GridPanelWrapper.propTypes = {\n  // ----------------------------- Warning --------------------------------\n  // | These PropTypes are generated from the TypeScript type definitions |\n  // | To update them edit the TypeScript types and run \"pnpm proptypes\"  |\n  // ----------------------------------------------------------------------\n  slotProps: PropTypes.object\n} : void 0;\nexport { GridPanelWrapper };","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport _objectWithoutPropertiesLoose from \"@babel/runtime/helpers/esm/objectWithoutPropertiesLoose\";\nconst _excluded = [\"item\", \"hasMultipleFilters\", \"deleteFilter\", \"applyFilterChanges\", \"showMultiFilterOperators\", \"disableMultiFilterOperator\", \"applyMultiFilterOperatorChanges\", \"focusElementRef\", \"logicOperators\", \"columnsSort\", \"filterColumns\", \"deleteIconProps\", \"logicOperatorInputProps\", \"operatorInputProps\", \"columnInputProps\", \"valueInputProps\", \"readOnly\", \"children\"],\n  _excluded2 = [\"InputComponentProps\"];\nimport * as React from 'react';\nimport PropTypes from 'prop-types';\nimport { unstable_composeClasses as composeClasses, unstable_useId as useId, unstable_capitalize as capitalize } from '@mui/utils';\nimport { styled } from '@mui/material/styles';\nimport clsx from 'clsx';\nimport { gridFilterableColumnDefinitionsSelector, gridColumnLookupSelector } from \"../../../hooks/features/columns/gridColumnsSelector.js\";\nimport { gridFilterModelSelector } from \"../../../hooks/features/filter/gridFilterSelector.js\";\nimport { useGridSelector } from \"../../../hooks/utils/useGridSelector.js\";\nimport { GridLogicOperator } from \"../../../models/gridFilterItem.js\";\nimport { useGridApiContext } from \"../../../hooks/utils/useGridApiContext.js\";\nimport { useGridRootProps } from \"../../../hooks/utils/useGridRootProps.js\";\nimport { getDataGridUtilityClass } from \"../../../constants/gridClasses.js\";\nimport { getValueFromValueOptions, getValueOptions } from \"./filterPanelUtils.js\";\nimport { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nimport { createElement as _createElement } from \"react\";\nconst useUtilityClasses = ownerState => {\n  const {\n    classes\n  } = ownerState;\n  const slots = {\n    root: ['filterForm'],\n    deleteIcon: ['filterFormDeleteIcon'],\n    logicOperatorInput: ['filterFormLogicOperatorInput'],\n    columnInput: ['filterFormColumnInput'],\n    operatorInput: ['filterFormOperatorInput'],\n    valueInput: ['filterFormValueInput']\n  };\n  return composeClasses(slots, getDataGridUtilityClass, classes);\n};\nconst GridFilterFormRoot = styled('div', {\n  name: 'MuiDataGrid',\n  slot: 'FilterForm',\n  overridesResolver: (props, styles) => styles.filterForm\n})(({\n  theme\n}) => ({\n  display: 'flex',\n  padding: theme.spacing(1)\n}));\nconst FilterFormDeleteIcon = styled('div', {\n  name: 'MuiDataGrid',\n  slot: 'FilterFormDeleteIcon',\n  overridesResolver: (_, styles) => styles.filterFormDeleteIcon\n})(({\n  theme\n}) => ({\n  flexShrink: 0,\n  justifyContent: 'flex-end',\n  marginRight: theme.spacing(0.5),\n  marginBottom: theme.spacing(0.2)\n}));\nconst FilterFormLogicOperatorInput = styled('div', {\n  name: 'MuiDataGrid',\n  slot: 'FilterFormLogicOperatorInput',\n  overridesResolver: (_, styles) => styles.filterFormLogicOperatorInput\n})({\n  minWidth: 55,\n  marginRight: 5,\n  justifyContent: 'end'\n});\nconst FilterFormColumnInput = styled('div', {\n  name: 'MuiDataGrid',\n  slot: 'FilterFormColumnInput',\n  overridesResolver: (_, styles) => styles.filterFormColumnInput\n})({\n  width: 150\n});\nconst FilterFormOperatorInput = styled('div', {\n  name: 'MuiDataGrid',\n  slot: 'FilterFormOperatorInput',\n  overridesResolver: (_, styles) => styles.filterFormOperatorInput\n})({\n  width: 150\n});\nconst FilterFormValueInput = styled('div', {\n  name: 'MuiDataGrid',\n  slot: 'FilterFormValueInput',\n  overridesResolver: (_, styles) => styles.filterFormValueInput\n})({\n  width: 190\n});\nconst getLogicOperatorLocaleKey = logicOperator => {\n  switch (logicOperator) {\n    case GridLogicOperator.And:\n      return 'filterPanelOperatorAnd';\n    case GridLogicOperator.Or:\n      return 'filterPanelOperatorOr';\n    default:\n      throw new Error('MUI X: Invalid `logicOperator` property in the `GridFilterPanel`.');\n  }\n};\nconst getColumnLabel = col => col.headerName || col.field;\nconst collator = new Intl.Collator();\nconst GridFilterForm = /*#__PURE__*/React.forwardRef(function GridFilterForm(props, ref) {\n  const {\n      item,\n      hasMultipleFilters,\n      deleteFilter,\n      applyFilterChanges,\n      showMultiFilterOperators,\n      disableMultiFilterOperator,\n      applyMultiFilterOperatorChanges,\n      focusElementRef,\n      logicOperators = [GridLogicOperator.And, GridLogicOperator.Or],\n      columnsSort,\n      filterColumns,\n      deleteIconProps = {},\n      logicOperatorInputProps = {},\n      operatorInputProps = {},\n      columnInputProps = {},\n      valueInputProps = {},\n      readOnly\n    } = props,\n    other = _objectWithoutPropertiesLoose(props, _excluded);\n  const apiRef = useGridApiContext();\n  const columnLookup = useGridSelector(apiRef, gridColumnLookupSelector);\n  const filterableColumns = useGridSelector(apiRef, gridFilterableColumnDefinitionsSelector);\n  const filterModel = useGridSelector(apiRef, gridFilterModelSelector);\n  const columnSelectId = useId();\n  const columnSelectLabelId = useId();\n  const operatorSelectId = useId();\n  const operatorSelectLabelId = useId();\n  const rootProps = useGridRootProps();\n  const classes = useUtilityClasses(rootProps);\n  const valueRef = React.useRef(null);\n  const filterSelectorRef = React.useRef(null);\n  const multiFilterOperator = filterModel.logicOperator ?? GridLogicOperator.And;\n  const hasLogicOperatorColumn = hasMultipleFilters && logicOperators.length > 0;\n  const baseFormControlProps = rootProps.slotProps?.baseFormControl || {};\n  const baseSelectProps = rootProps.slotProps?.baseSelect || {};\n  const isBaseSelectNative = baseSelectProps.native ?? false;\n  const baseInputLabelProps = rootProps.slotProps?.baseInputLabel || {};\n  const baseSelectOptionProps = rootProps.slotProps?.baseSelectOption || {};\n  const {\n      InputComponentProps\n    } = valueInputProps,\n    valueInputPropsOther = _objectWithoutPropertiesLoose(valueInputProps, _excluded2);\n  const {\n    filteredColumns,\n    selectedField\n  } = React.useMemo(() => {\n    let itemField = item.field;\n\n    // Yields a valid value if the current filter belongs to a column that is not filterable\n    const selectedNonFilterableColumn = columnLookup[item.field].filterable === false ? columnLookup[item.field] : null;\n    if (selectedNonFilterableColumn) {\n      return {\n        filteredColumns: [selectedNonFilterableColumn],\n        selectedField: itemField\n      };\n    }\n    if (filterColumns === undefined || typeof filterColumns !== 'function') {\n      return {\n        filteredColumns: filterableColumns,\n        selectedField: itemField\n      };\n    }\n    const filteredFields = filterColumns({\n      field: item.field,\n      columns: filterableColumns,\n      currentFilters: filterModel?.items || []\n    });\n    return {\n      filteredColumns: filterableColumns.filter(column => {\n        const isFieldIncluded = filteredFields.includes(column.field);\n        if (column.field === item.field && !isFieldIncluded) {\n          itemField = undefined;\n        }\n        return isFieldIncluded;\n      }),\n      selectedField: itemField\n    };\n  }, [filterColumns, filterModel?.items, filterableColumns, item.field, columnLookup]);\n  const sortedFilteredColumns = React.useMemo(() => {\n    switch (columnsSort) {\n      case 'asc':\n        return filteredColumns.sort((a, b) => collator.compare(getColumnLabel(a), getColumnLabel(b)));\n      case 'desc':\n        return filteredColumns.sort((a, b) => -collator.compare(getColumnLabel(a), getColumnLabel(b)));\n      default:\n        return filteredColumns;\n    }\n  }, [filteredColumns, columnsSort]);\n  const currentColumn = item.field ? apiRef.current.getColumn(item.field) : null;\n  const currentOperator = React.useMemo(() => {\n    if (!item.operator || !currentColumn) {\n      return null;\n    }\n    return currentColumn.filterOperators?.find(operator => operator.value === item.operator);\n  }, [item, currentColumn]);\n  const changeColumn = React.useCallback(event => {\n    const field = event.target.value;\n    const column = apiRef.current.getColumn(field);\n    if (column.field === currentColumn.field) {\n      // column did not change\n      return;\n    }\n\n    // try to keep the same operator when column change\n    const newOperator = column.filterOperators.find(operator => operator.value === item.operator) || column.filterOperators[0];\n\n    // Erase filter value if the input component or filtered column type is modified\n    const eraseFilterValue = !newOperator.InputComponent || newOperator.InputComponent !== currentOperator?.InputComponent || column.type !== currentColumn.type;\n    let filterValue = eraseFilterValue ? undefined : item.value;\n\n    // Check filter value against the new valueOptions\n    if (column.type === 'singleSelect' && filterValue !== undefined) {\n      const colDef = column;\n      const valueOptions = getValueOptions(colDef);\n      if (Array.isArray(filterValue)) {\n        filterValue = filterValue.filter(val => {\n          return (\n            // Only keep values that are in the new value options\n            getValueFromValueOptions(val, valueOptions, colDef?.getOptionValue) !== undefined\n          );\n        });\n      } else if (getValueFromValueOptions(item.value, valueOptions, colDef?.getOptionValue) === undefined) {\n        // Reset the filter value if it is not in the new value options\n        filterValue = undefined;\n      }\n    }\n    applyFilterChanges(_extends({}, item, {\n      field,\n      operator: newOperator.value,\n      value: filterValue\n    }));\n  }, [apiRef, applyFilterChanges, item, currentColumn, currentOperator]);\n  const changeOperator = React.useCallback(event => {\n    const operator = event.target.value;\n    const newOperator = currentColumn?.filterOperators.find(op => op.value === operator);\n    const eraseItemValue = !newOperator?.InputComponent || newOperator?.InputComponent !== currentOperator?.InputComponent;\n    applyFilterChanges(_extends({}, item, {\n      operator,\n      value: eraseItemValue ? undefined : item.value\n    }));\n  }, [applyFilterChanges, item, currentColumn, currentOperator]);\n  const changeLogicOperator = React.useCallback(event => {\n    const logicOperator = event.target.value === GridLogicOperator.And.toString() ? GridLogicOperator.And : GridLogicOperator.Or;\n    applyMultiFilterOperatorChanges(logicOperator);\n  }, [applyMultiFilterOperatorChanges]);\n  const handleDeleteFilter = () => {\n    deleteFilter(item);\n  };\n  React.useImperativeHandle(focusElementRef, () => ({\n    focus: () => {\n      if (currentOperator?.InputComponent) {\n        valueRef?.current?.focus();\n      } else {\n        filterSelectorRef.current.focus();\n      }\n    }\n  }), [currentOperator]);\n  return /*#__PURE__*/_jsxs(GridFilterFormRoot, _extends({\n    ref: ref,\n    className: classes.root,\n    \"data-id\": item.id,\n    ownerState: rootProps\n  }, other, {\n    children: [/*#__PURE__*/_jsx(FilterFormDeleteIcon, _extends({\n      variant: \"standard\",\n      as: rootProps.slots.baseFormControl\n    }, baseFormControlProps, deleteIconProps, {\n      className: clsx(classes.deleteIcon, baseFormControlProps.className, deleteIconProps.className),\n      ownerState: rootProps,\n      children: /*#__PURE__*/_jsx(rootProps.slots.baseIconButton, _extends({\n        \"aria-label\": apiRef.current.getLocaleText('filterPanelDeleteIconLabel'),\n        title: apiRef.current.getLocaleText('filterPanelDeleteIconLabel'),\n        onClick: handleDeleteFilter,\n        size: \"small\",\n        disabled: readOnly\n      }, rootProps.slotProps?.baseIconButton, {\n        children: /*#__PURE__*/_jsx(rootProps.slots.filterPanelDeleteIcon, {\n          fontSize: \"small\"\n        })\n      }))\n    })), /*#__PURE__*/_jsx(FilterFormLogicOperatorInput, _extends({\n      variant: \"standard\",\n      as: rootProps.slots.baseFormControl\n    }, baseFormControlProps, logicOperatorInputProps, {\n      sx: [hasLogicOperatorColumn ? {\n        display: 'flex'\n      } : {\n        display: 'none'\n      }, showMultiFilterOperators ? {\n        visibility: 'visible'\n      } : {\n        visibility: 'hidden'\n      }, baseFormControlProps.sx, logicOperatorInputProps.sx],\n      className: clsx(classes.logicOperatorInput, baseFormControlProps.className, logicOperatorInputProps.className),\n      ownerState: rootProps,\n      children: /*#__PURE__*/_jsx(rootProps.slots.baseSelect, _extends({\n        inputProps: {\n          'aria-label': apiRef.current.getLocaleText('filterPanelLogicOperator')\n        },\n        value: multiFilterOperator ?? '',\n        onChange: changeLogicOperator,\n        disabled: !!disableMultiFilterOperator || logicOperators.length === 1,\n        native: isBaseSelectNative\n      }, rootProps.slotProps?.baseSelect, {\n        children: logicOperators.map(logicOperator => /*#__PURE__*/_createElement(rootProps.slots.baseSelectOption, _extends({}, baseSelectOptionProps, {\n          native: isBaseSelectNative,\n          key: logicOperator.toString(),\n          value: logicOperator.toString()\n        }), apiRef.current.getLocaleText(getLogicOperatorLocaleKey(logicOperator))))\n      }))\n    })), /*#__PURE__*/_jsxs(FilterFormColumnInput, _extends({\n      variant: \"standard\",\n      as: rootProps.slots.baseFormControl\n    }, baseFormControlProps, columnInputProps, {\n      className: clsx(classes.columnInput, baseFormControlProps.className, columnInputProps.className),\n      ownerState: rootProps,\n      children: [/*#__PURE__*/_jsx(rootProps.slots.baseInputLabel, _extends({}, baseInputLabelProps, {\n        htmlFor: columnSelectId,\n        id: columnSelectLabelId,\n        children: apiRef.current.getLocaleText('filterPanelColumns')\n      })), /*#__PURE__*/_jsx(rootProps.slots.baseSelect, _extends({\n        labelId: columnSelectLabelId,\n        id: columnSelectId,\n        label: apiRef.current.getLocaleText('filterPanelColumns'),\n        value: selectedField ?? '',\n        onChange: changeColumn,\n        native: isBaseSelectNative,\n        disabled: readOnly\n      }, rootProps.slotProps?.baseSelect, {\n        children: sortedFilteredColumns.map(col => /*#__PURE__*/_createElement(rootProps.slots.baseSelectOption, _extends({}, baseSelectOptionProps, {\n          native: isBaseSelectNative,\n          key: col.field,\n          value: col.field\n        }), getColumnLabel(col)))\n      }))]\n    })), /*#__PURE__*/_jsxs(FilterFormOperatorInput, _extends({\n      variant: \"standard\",\n      as: rootProps.slots.baseFormControl\n    }, baseFormControlProps, operatorInputProps, {\n      className: clsx(classes.operatorInput, baseFormControlProps.className, operatorInputProps.className),\n      ownerState: rootProps,\n      children: [/*#__PURE__*/_jsx(rootProps.slots.baseInputLabel, _extends({}, baseInputLabelProps, {\n        htmlFor: operatorSelectId,\n        id: operatorSelectLabelId,\n        children: apiRef.current.getLocaleText('filterPanelOperator')\n      })), /*#__PURE__*/_jsx(rootProps.slots.baseSelect, _extends({\n        labelId: operatorSelectLabelId,\n        label: apiRef.current.getLocaleText('filterPanelOperator'),\n        id: operatorSelectId,\n        value: item.operator,\n        onChange: changeOperator,\n        native: isBaseSelectNative,\n        inputRef: filterSelectorRef,\n        disabled: readOnly\n      }, rootProps.slotProps?.baseSelect, {\n        children: currentColumn?.filterOperators?.map(operator => /*#__PURE__*/_createElement(rootProps.slots.baseSelectOption, _extends({}, baseSelectOptionProps, {\n          native: isBaseSelectNative,\n          key: operator.value,\n          value: operator.value\n        }), operator.label || apiRef.current.getLocaleText(`filterOperator${capitalize(operator.value)}`)))\n      }))]\n    })), /*#__PURE__*/_jsx(FilterFormValueInput, _extends({\n      variant: \"standard\",\n      as: rootProps.slots.baseFormControl\n    }, baseFormControlProps, valueInputPropsOther, {\n      className: clsx(classes.valueInput, baseFormControlProps.className, valueInputPropsOther.className),\n      ownerState: rootProps,\n      children: currentOperator?.InputComponent ? /*#__PURE__*/_jsx(currentOperator.InputComponent, _extends({\n        apiRef: apiRef,\n        item: item,\n        applyValue: applyFilterChanges,\n        focusElementRef: valueRef,\n        disabled: readOnly\n      }, currentOperator.InputComponentProps, InputComponentProps), item.field) : null\n    }))]\n  }));\n});\nprocess.env.NODE_ENV !== \"production\" ? GridFilterForm.propTypes = {\n  // ----------------------------- Warning --------------------------------\n  // | These PropTypes are generated from the TypeScript type definitions |\n  // | To update them edit the TypeScript types and run \"pnpm proptypes\"  |\n  // ----------------------------------------------------------------------\n  /**\n   * Callback called when the operator, column field or value is changed.\n   * @param {GridFilterItem} item The updated [[GridFilterItem]].\n   */\n  applyFilterChanges: PropTypes.func.isRequired,\n  /**\n   * Callback called when the logic operator is changed.\n   * @param {GridLogicOperator} operator The new logic operator.\n   */\n  applyMultiFilterOperatorChanges: PropTypes.func.isRequired,\n  /**\n   * @ignore - do not document.\n   */\n  children: PropTypes.node,\n  /**\n   * Props passed to the column input component.\n   * @default {}\n   */\n  columnInputProps: PropTypes.any,\n  /**\n   * Changes how the options in the columns selector should be ordered.\n   * If not specified, the order is derived from the `columns` prop.\n   */\n  columnsSort: PropTypes.oneOf(['asc', 'desc']),\n  /**\n   * Callback called when the delete button is clicked.\n   * @param {GridFilterItem} item The deleted [[GridFilterItem]].\n   */\n  deleteFilter: PropTypes.func.isRequired,\n  /**\n   * Props passed to the delete icon.\n   * @default {}\n   */\n  deleteIconProps: PropTypes.any,\n  /**\n   * If `true`, disables the logic operator field but still renders it.\n   */\n  disableMultiFilterOperator: PropTypes.bool,\n  /**\n   * Allows to filter the columns displayed in the filter form.\n   * @param {FilterColumnsArgs} args The columns of the grid and name of field.\n   * @returns {GridColDef['field'][]} The filtered fields array.\n   */\n  filterColumns: PropTypes.func,\n  /**\n   * A ref allowing to set imperative focus.\n   * It can be passed to the el\n   */\n  focusElementRef: PropTypes /* @typescript-to-proptypes-ignore */.oneOfType([PropTypes.func, PropTypes.object]),\n  /**\n   * If `true`, the logic operator field is rendered.\n   * The field will be invisible if `showMultiFilterOperators` is also `true`.\n   */\n  hasMultipleFilters: PropTypes.bool.isRequired,\n  /**\n   * The [[GridFilterItem]] representing this form.\n   */\n  item: PropTypes.shape({\n    field: PropTypes.string.isRequired,\n    id: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),\n    operator: PropTypes.string.isRequired,\n    value: PropTypes.any\n  }).isRequired,\n  /**\n   * Props passed to the logic operator input component.\n   * @default {}\n   */\n  logicOperatorInputProps: PropTypes.any,\n  /**\n   * Sets the available logic operators.\n   * @default [GridLogicOperator.And, GridLogicOperator.Or]\n   */\n  logicOperators: PropTypes.arrayOf(PropTypes.oneOf(['and', 'or']).isRequired),\n  /**\n   * Props passed to the operator input component.\n   * @default {}\n   */\n  operatorInputProps: PropTypes.any,\n  /**\n   * `true` if the filter is disabled/read only.\n   * i.e. `colDef.fiterable = false` but passed in `filterModel`\n   * @default false\n   */\n  readOnly: PropTypes.bool,\n  /**\n   * If `true`, the logic operator field is visible.\n   */\n  showMultiFilterOperators: PropTypes.bool,\n  /**\n   * Props passed to the value input component.\n   * @default {}\n   */\n  valueInputProps: PropTypes.any\n} : void 0;\n\n/**\n * Demos:\n * - [Filtering - overview](https://mui.com/x/react-data-grid/filtering/)\n *\n * API:\n * - [GridFilterForm API](https://mui.com/x/api/data-grid/grid-filter-form/)\n */\nexport { GridFilterForm };","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport _objectWithoutPropertiesLoose from \"@babel/runtime/helpers/esm/objectWithoutPropertiesLoose\";\nconst _excluded = [\"item\", \"applyValue\", \"apiRef\", \"focusElementRef\", \"isFilterActive\", \"clearButton\", \"tabIndex\", \"label\", \"variant\", \"InputLabelProps\"];\nimport * as React from 'react';\nimport PropTypes from 'prop-types';\nimport { refType, unstable_useId as useId } from '@mui/utils';\nimport { styled } from '@mui/material/styles';\nimport { useGridRootProps } from \"../../../hooks/utils/useGridRootProps.js\";\nimport { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nconst BooleanOperatorContainer = styled('div')({\n  display: 'flex',\n  alignItems: 'center',\n  width: '100%',\n  [`& button`]: {\n    margin: 'auto 0px 5px 5px'\n  }\n});\nfunction GridFilterInputBoolean(props) {\n  const {\n      item,\n      applyValue,\n      apiRef,\n      focusElementRef,\n      clearButton,\n      tabIndex,\n      label: labelProp,\n      variant = 'standard'\n    } = props,\n    others = _objectWithoutPropertiesLoose(props, _excluded);\n  const [filterValueState, setFilterValueState] = React.useState(item.value || '');\n  const rootProps = useGridRootProps();\n  const labelId = useId();\n  const selectId = useId();\n  const baseSelectProps = rootProps.slotProps?.baseSelect || {};\n  const isSelectNative = baseSelectProps.native ?? false;\n  const baseSelectOptionProps = rootProps.slotProps?.baseSelectOption || {};\n  const onFilterChange = React.useCallback(event => {\n    const value = event.target.value;\n    setFilterValueState(value);\n    applyValue(_extends({}, item, {\n      value\n    }));\n  }, [applyValue, item]);\n  React.useEffect(() => {\n    setFilterValueState(item.value || '');\n  }, [item.value]);\n  const label = labelProp ?? apiRef.current.getLocaleText('filterPanelInputLabel');\n  return /*#__PURE__*/_jsxs(BooleanOperatorContainer, {\n    children: [/*#__PURE__*/_jsxs(rootProps.slots.baseFormControl, {\n      fullWidth: true,\n      children: [/*#__PURE__*/_jsx(rootProps.slots.baseInputLabel, _extends({}, rootProps.slotProps?.baseInputLabel, {\n        id: labelId,\n        shrink: true,\n        variant: variant,\n        children: label\n      })), /*#__PURE__*/_jsxs(rootProps.slots.baseSelect, _extends({\n        labelId: labelId,\n        id: selectId,\n        label: label,\n        value: filterValueState,\n        onChange: onFilterChange,\n        variant: variant,\n        notched: variant === 'outlined' ? true : undefined,\n        native: isSelectNative,\n        displayEmpty: true,\n        inputProps: {\n          ref: focusElementRef,\n          tabIndex\n        }\n      }, others /* FIXME: typing error */, baseSelectProps, {\n        children: [/*#__PURE__*/_jsx(rootProps.slots.baseSelectOption, _extends({}, baseSelectOptionProps, {\n          native: isSelectNative,\n          value: \"\",\n          children: apiRef.current.getLocaleText('filterValueAny')\n        })), /*#__PURE__*/_jsx(rootProps.slots.baseSelectOption, _extends({}, baseSelectOptionProps, {\n          native: isSelectNative,\n          value: \"true\",\n          children: apiRef.current.getLocaleText('filterValueTrue')\n        })), /*#__PURE__*/_jsx(rootProps.slots.baseSelectOption, _extends({}, baseSelectOptionProps, {\n          native: isSelectNative,\n          value: \"false\",\n          children: apiRef.current.getLocaleText('filterValueFalse')\n        }))]\n      }))]\n    }), clearButton]\n  });\n}\nprocess.env.NODE_ENV !== \"production\" ? GridFilterInputBoolean.propTypes = {\n  // ----------------------------- Warning --------------------------------\n  // | These PropTypes are generated from the TypeScript type definitions |\n  // | To update them edit the TypeScript types and run \"pnpm proptypes\"  |\n  // ----------------------------------------------------------------------\n  apiRef: PropTypes.shape({\n    current: PropTypes.object.isRequired\n  }).isRequired,\n  applyValue: PropTypes.func.isRequired,\n  clearButton: PropTypes.node,\n  focusElementRef: refType,\n  /**\n   * It is `true` if the filter either has a value or an operator with no value\n   * required is selected (for example `isEmpty`)\n   */\n  isFilterActive: PropTypes.bool,\n  item: PropTypes.shape({\n    field: PropTypes.string.isRequired,\n    id: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),\n    operator: PropTypes.string.isRequired,\n    value: PropTypes.any\n  }).isRequired\n} : void 0;\nexport { GridFilterInputBoolean };","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport _objectWithoutPropertiesLoose from \"@babel/runtime/helpers/esm/objectWithoutPropertiesLoose\";\nconst _excluded = [\"item\", \"applyValue\", \"type\", \"apiRef\", \"focusElementRef\", \"InputProps\", \"isFilterActive\", \"clearButton\", \"tabIndex\", \"disabled\"];\nimport * as React from 'react';\nimport PropTypes from 'prop-types';\nimport { unstable_useId as useId } from '@mui/utils';\nimport { useTimeout } from \"../../../hooks/utils/useTimeout.js\";\nimport { useGridRootProps } from \"../../../hooks/utils/useGridRootProps.js\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nfunction convertFilterItemValueToInputValue(itemValue, inputType) {\n  if (itemValue == null) {\n    return '';\n  }\n  const dateCopy = new Date(itemValue);\n  if (Number.isNaN(dateCopy.getTime())) {\n    return '';\n  }\n  if (inputType === 'date') {\n    return dateCopy.toISOString().substring(0, 10);\n  }\n  if (inputType === 'datetime-local') {\n    // The date picker expects the date to be in the local timezone.\n    // But .toISOString() converts it to UTC with zero offset.\n    // So we need to subtract the timezone offset.\n    dateCopy.setMinutes(dateCopy.getMinutes() - dateCopy.getTimezoneOffset());\n    return dateCopy.toISOString().substring(0, 19);\n  }\n  return dateCopy.toISOString().substring(0, 10);\n}\nfunction GridFilterInputDate(props) {\n  const {\n      item,\n      applyValue,\n      type,\n      apiRef,\n      focusElementRef,\n      InputProps,\n      clearButton,\n      tabIndex,\n      disabled\n    } = props,\n    other = _objectWithoutPropertiesLoose(props, _excluded);\n  const filterTimeout = useTimeout();\n  const [filterValueState, setFilterValueState] = React.useState(() => convertFilterItemValueToInputValue(item.value, type));\n  const [applying, setIsApplying] = React.useState(false);\n  const id = useId();\n  const rootProps = useGridRootProps();\n  const onFilterChange = React.useCallback(event => {\n    filterTimeout.clear();\n    const value = event.target.value;\n    setFilterValueState(value);\n    setIsApplying(true);\n    filterTimeout.start(rootProps.filterDebounceMs, () => {\n      const date = new Date(value);\n      applyValue(_extends({}, item, {\n        value: Number.isNaN(date.getTime()) ? undefined : date\n      }));\n      setIsApplying(false);\n    });\n  }, [applyValue, item, rootProps.filterDebounceMs, filterTimeout]);\n  React.useEffect(() => {\n    const value = convertFilterItemValueToInputValue(item.value, type);\n    setFilterValueState(value);\n  }, [item.value, type]);\n  return /*#__PURE__*/_jsx(rootProps.slots.baseTextField, _extends({\n    fullWidth: true,\n    id: id,\n    label: apiRef.current.getLocaleText('filterPanelInputLabel'),\n    placeholder: apiRef.current.getLocaleText('filterPanelInputPlaceholder'),\n    value: filterValueState,\n    onChange: onFilterChange,\n    variant: \"standard\",\n    type: type || 'text',\n    InputLabelProps: {\n      shrink: true\n    },\n    inputRef: focusElementRef,\n    InputProps: _extends({}, applying || clearButton ? {\n      endAdornment: applying ? /*#__PURE__*/_jsx(rootProps.slots.loadIcon, {\n        fontSize: \"small\",\n        color: \"action\"\n      }) : clearButton\n    } : {}, {\n      disabled\n    }, InputProps, {\n      inputProps: _extends({\n        max: type === 'datetime-local' ? '9999-12-31T23:59' : '9999-12-31',\n        tabIndex\n      }, InputProps?.inputProps)\n    })\n  }, other, rootProps.slotProps?.baseTextField));\n}\nprocess.env.NODE_ENV !== \"production\" ? GridFilterInputDate.propTypes = {\n  // ----------------------------- Warning --------------------------------\n  // | These PropTypes are generated from the TypeScript type definitions |\n  // | To update them edit the TypeScript types and run \"pnpm proptypes\"  |\n  // ----------------------------------------------------------------------\n  apiRef: PropTypes.shape({\n    current: PropTypes.object.isRequired\n  }).isRequired,\n  applyValue: PropTypes.func.isRequired,\n  clearButton: PropTypes.node,\n  focusElementRef: PropTypes /* @typescript-to-proptypes-ignore */.oneOfType([PropTypes.func, PropTypes.object]),\n  /**\n   * It is `true` if the filter either has a value or an operator with no value\n   * required is selected (for example `isEmpty`)\n   */\n  isFilterActive: PropTypes.bool,\n  item: PropTypes.shape({\n    field: PropTypes.string.isRequired,\n    id: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),\n    operator: PropTypes.string.isRequired,\n    value: PropTypes.any\n  }).isRequired\n} : void 0;\nexport { GridFilterInputDate };","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport _objectWithoutPropertiesLoose from \"@babel/runtime/helpers/esm/objectWithoutPropertiesLoose\";\nconst _excluded = [\"item\", \"applyValue\", \"type\", \"apiRef\", \"focusElementRef\", \"color\", \"error\", \"helperText\", \"size\", \"variant\"],\n  _excluded2 = [\"key\"];\nimport * as React from 'react';\nimport PropTypes from 'prop-types';\nimport Autocomplete, { createFilterOptions } from '@mui/material/Autocomplete';\nimport { unstable_useId as useId } from '@mui/utils';\nimport { getValueOptions, isSingleSelectColDef } from \"./filterPanelUtils.js\";\nimport { useGridRootProps } from \"../../../hooks/utils/useGridRootProps.js\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nconst filter = createFilterOptions();\nfunction GridFilterInputMultipleSingleSelect(props) {\n  const {\n      item,\n      applyValue,\n      apiRef,\n      focusElementRef,\n      color,\n      error,\n      helperText,\n      size,\n      variant = 'standard'\n    } = props,\n    other = _objectWithoutPropertiesLoose(props, _excluded);\n  const TextFieldProps = {\n    color,\n    error,\n    helperText,\n    size,\n    variant\n  };\n  const id = useId();\n  const rootProps = useGridRootProps();\n  let resolvedColumn = null;\n  if (item.field) {\n    const column = apiRef.current.getColumn(item.field);\n    if (isSingleSelectColDef(column)) {\n      resolvedColumn = column;\n    }\n  }\n  const getOptionValue = resolvedColumn?.getOptionValue;\n  const getOptionLabel = resolvedColumn?.getOptionLabel;\n  const isOptionEqualToValue = React.useCallback((option, value) => getOptionValue(option) === getOptionValue(value), [getOptionValue]);\n  const resolvedValueOptions = React.useMemo(() => {\n    return getValueOptions(resolvedColumn) || [];\n  }, [resolvedColumn]);\n\n  // The value is computed from the item.value and used directly\n  // If it was done by a useEffect/useState, the Autocomplete could receive incoherent value and options\n  const filteredValues = React.useMemo(() => {\n    if (!Array.isArray(item.value)) {\n      return [];\n    }\n    return item.value.reduce((acc, value) => {\n      const resolvedValue = resolvedValueOptions.find(v => getOptionValue(v) === value);\n      if (resolvedValue != null) {\n        acc.push(resolvedValue);\n      }\n      return acc;\n    }, []);\n  }, [getOptionValue, item.value, resolvedValueOptions]);\n  const handleChange = React.useCallback((event, value) => {\n    applyValue(_extends({}, item, {\n      value: value.map(getOptionValue)\n    }));\n  }, [applyValue, item, getOptionValue]);\n  return /*#__PURE__*/_jsx(Autocomplete, _extends({\n    multiple: true,\n    options: resolvedValueOptions,\n    isOptionEqualToValue: isOptionEqualToValue,\n    filterOptions: filter,\n    id: id,\n    value: filteredValues,\n    onChange: handleChange,\n    getOptionLabel: getOptionLabel,\n    renderTags: (value, getTagProps) => value.map((option, index) => {\n      const _getTagProps = getTagProps({\n          index\n        }),\n        {\n          key\n        } = _getTagProps,\n        tagProps = _objectWithoutPropertiesLoose(_getTagProps, _excluded2);\n      return /*#__PURE__*/_jsx(rootProps.slots.baseChip, _extends({\n        variant: \"outlined\",\n        size: \"small\",\n        label: getOptionLabel(option)\n      }, tagProps), key);\n    }),\n    renderInput: params => /*#__PURE__*/_jsx(rootProps.slots.baseTextField, _extends({}, params, {\n      label: apiRef.current.getLocaleText('filterPanelInputLabel'),\n      placeholder: apiRef.current.getLocaleText('filterPanelInputPlaceholder'),\n      InputLabelProps: _extends({}, params.InputLabelProps, {\n        shrink: true\n      }),\n      inputRef: focusElementRef,\n      type: \"singleSelect\"\n    }, TextFieldProps, rootProps.slotProps?.baseTextField))\n  }, other));\n}\nprocess.env.NODE_ENV !== \"production\" ? GridFilterInputMultipleSingleSelect.propTypes = {\n  // ----------------------------- Warning --------------------------------\n  // | These PropTypes are generated from the TypeScript type definitions |\n  // | To update them edit the TypeScript types and run \"pnpm proptypes\"  |\n  // ----------------------------------------------------------------------\n  apiRef: PropTypes.shape({\n    current: PropTypes.object.isRequired\n  }).isRequired,\n  applyValue: PropTypes.func.isRequired,\n  focusElementRef: PropTypes /* @typescript-to-proptypes-ignore */.oneOfType([PropTypes.func, PropTypes.object]),\n  item: PropTypes.shape({\n    field: PropTypes.string.isRequired,\n    id: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),\n    operator: PropTypes.string.isRequired,\n    value: PropTypes.any\n  }).isRequired,\n  type: PropTypes.oneOf(['singleSelect'])\n} : void 0;\nexport { GridFilterInputMultipleSingleSelect };","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport _objectWithoutPropertiesLoose from \"@babel/runtime/helpers/esm/objectWithoutPropertiesLoose\";\nconst _excluded = [\"item\", \"applyValue\", \"type\", \"apiRef\", \"focusElementRef\", \"color\", \"error\", \"helperText\", \"size\", \"variant\"],\n  _excluded2 = [\"key\"];\nimport * as React from 'react';\nimport PropTypes from 'prop-types';\nimport Autocomplete from '@mui/material/Autocomplete';\nimport { unstable_useId as useId } from '@mui/utils';\nimport { useGridRootProps } from \"../../../hooks/utils/useGridRootProps.js\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nfunction GridFilterInputMultipleValue(props) {\n  const {\n      item,\n      applyValue,\n      type,\n      apiRef,\n      focusElementRef,\n      color,\n      error,\n      helperText,\n      size,\n      variant = 'standard'\n    } = props,\n    other = _objectWithoutPropertiesLoose(props, _excluded);\n  const TextFieldProps = {\n    color,\n    error,\n    helperText,\n    size,\n    variant\n  };\n  const [filterValueState, setFilterValueState] = React.useState(item.value || []);\n  const id = useId();\n  const rootProps = useGridRootProps();\n  React.useEffect(() => {\n    const itemValue = item.value ?? [];\n    setFilterValueState(itemValue.map(String));\n  }, [item.value]);\n  const handleChange = React.useCallback((event, value) => {\n    setFilterValueState(value.map(String));\n    applyValue(_extends({}, item, {\n      value: [...value]\n    }));\n  }, [applyValue, item]);\n  return /*#__PURE__*/_jsx(Autocomplete, _extends({\n    multiple: true,\n    freeSolo: true,\n    options: [],\n    filterOptions: (options, params) => {\n      const {\n        inputValue\n      } = params;\n      return inputValue == null || inputValue === '' ? [] : [inputValue];\n    },\n    id: id,\n    value: filterValueState,\n    onChange: handleChange,\n    renderTags: (value, getTagProps) => value.map((option, index) => {\n      const _getTagProps = getTagProps({\n          index\n        }),\n        {\n          key\n        } = _getTagProps,\n        tagProps = _objectWithoutPropertiesLoose(_getTagProps, _excluded2);\n      return /*#__PURE__*/_jsx(rootProps.slots.baseChip, _extends({\n        variant: \"outlined\",\n        size: \"small\",\n        label: option\n      }, tagProps), key);\n    }),\n    renderInput: params => /*#__PURE__*/_jsx(rootProps.slots.baseTextField, _extends({}, params, {\n      label: apiRef.current.getLocaleText('filterPanelInputLabel'),\n      placeholder: apiRef.current.getLocaleText('filterPanelInputPlaceholder'),\n      InputLabelProps: _extends({}, params.InputLabelProps, {\n        shrink: true\n      }),\n      inputRef: focusElementRef,\n      type: type || 'text'\n    }, TextFieldProps, rootProps.slotProps?.baseTextField))\n  }, other));\n}\nprocess.env.NODE_ENV !== \"production\" ? GridFilterInputMultipleValue.propTypes = {\n  // ----------------------------- Warning --------------------------------\n  // | These PropTypes are generated from the TypeScript type definitions |\n  // | To update them edit the TypeScript types and run \"pnpm proptypes\"  |\n  // ----------------------------------------------------------------------\n  apiRef: PropTypes.shape({\n    current: PropTypes.object.isRequired\n  }).isRequired,\n  applyValue: PropTypes.func.isRequired,\n  focusElementRef: PropTypes /* @typescript-to-proptypes-ignore */.oneOfType([PropTypes.func, PropTypes.object]),\n  item: PropTypes.shape({\n    field: PropTypes.string.isRequired,\n    id: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),\n    operator: PropTypes.string.isRequired,\n    value: PropTypes.any\n  }).isRequired,\n  type: PropTypes.oneOf(['date', 'datetime-local', 'number', 'text'])\n} : void 0;\nexport { GridFilterInputMultipleValue };","import _objectWithoutPropertiesLoose from \"@babel/runtime/helpers/esm/objectWithoutPropertiesLoose\";\nimport _extends from \"@babel/runtime/helpers/esm/extends\";\nconst _excluded = [\"item\", \"applyValue\", \"type\", \"apiRef\", \"focusElementRef\", \"placeholder\", \"tabIndex\", \"label\", \"variant\", \"isFilterActive\", \"clearButton\", \"InputLabelProps\"];\nimport * as React from 'react';\nimport PropTypes from 'prop-types';\nimport { unstable_useId as useId } from '@mui/utils';\nimport { styled } from '@mui/material/styles';\nimport { useGridRootProps } from \"../../../hooks/utils/useGridRootProps.js\";\nimport { getValueFromValueOptions, getValueOptions, isSingleSelectColDef } from \"./filterPanelUtils.js\";\nimport { createElement as _createElement } from \"react\";\nimport { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nconst renderSingleSelectOptions = ({\n  column,\n  OptionComponent,\n  getOptionLabel,\n  getOptionValue,\n  isSelectNative,\n  baseSelectOptionProps\n}) => {\n  const iterableColumnValues = ['', ...(getValueOptions(column) || [])];\n  return iterableColumnValues.map(option => {\n    const value = getOptionValue(option);\n    let label = getOptionLabel(option);\n    if (label === '') {\n      label = ' '; // To force the height of the empty option\n    }\n    return /*#__PURE__*/_createElement(OptionComponent, _extends({}, baseSelectOptionProps, {\n      native: isSelectNative,\n      key: value,\n      value: value\n    }), label);\n  });\n};\nconst SingleSelectOperatorContainer = styled('div')({\n  display: 'flex',\n  alignItems: 'flex-end',\n  width: '100%',\n  [`& button`]: {\n    margin: 'auto 0px 5px 5px'\n  }\n});\nfunction GridFilterInputSingleSelect(props) {\n  const {\n      item,\n      applyValue,\n      type,\n      apiRef,\n      focusElementRef,\n      placeholder,\n      tabIndex,\n      label: labelProp,\n      variant = 'standard',\n      clearButton\n    } = props,\n    others = _objectWithoutPropertiesLoose(props, _excluded);\n  const filterValue = item.value ?? '';\n  const id = useId();\n  const labelId = useId();\n  const rootProps = useGridRootProps();\n  const isSelectNative = rootProps.slotProps?.baseSelect?.native ?? false;\n  let resolvedColumn = null;\n  if (item.field) {\n    const column = apiRef.current.getColumn(item.field);\n    if (isSingleSelectColDef(column)) {\n      resolvedColumn = column;\n    }\n  }\n  const getOptionValue = resolvedColumn?.getOptionValue;\n  const getOptionLabel = resolvedColumn?.getOptionLabel;\n  const currentValueOptions = React.useMemo(() => {\n    return getValueOptions(resolvedColumn);\n  }, [resolvedColumn]);\n  const onFilterChange = React.useCallback(event => {\n    let value = event.target.value;\n\n    // NativeSelect casts the value to a string.\n    value = getValueFromValueOptions(value, currentValueOptions, getOptionValue);\n    applyValue(_extends({}, item, {\n      value\n    }));\n  }, [currentValueOptions, getOptionValue, applyValue, item]);\n  if (!isSingleSelectColDef(resolvedColumn)) {\n    return null;\n  }\n  const label = labelProp ?? apiRef.current.getLocaleText('filterPanelInputLabel');\n  return /*#__PURE__*/_jsxs(SingleSelectOperatorContainer, {\n    children: [/*#__PURE__*/_jsxs(rootProps.slots.baseFormControl, {\n      fullWidth: true,\n      children: [/*#__PURE__*/_jsx(rootProps.slots.baseInputLabel, _extends({}, rootProps.slotProps?.baseInputLabel, {\n        id: labelId,\n        htmlFor: id,\n        shrink: true,\n        variant: variant,\n        children: label\n      })), /*#__PURE__*/_jsx(rootProps.slots.baseSelect, _extends({\n        id: id,\n        label: label,\n        labelId: labelId,\n        value: filterValue,\n        onChange: onFilterChange,\n        variant: variant,\n        type: type || 'text',\n        inputProps: {\n          tabIndex,\n          ref: focusElementRef,\n          placeholder: placeholder ?? apiRef.current.getLocaleText('filterPanelInputPlaceholder')\n        },\n        native: isSelectNative,\n        notched: variant === 'outlined' ? true : undefined\n      }, others /* FIXME: typing error */, rootProps.slotProps?.baseSelect, {\n        children: renderSingleSelectOptions({\n          column: resolvedColumn,\n          OptionComponent: rootProps.slots.baseSelectOption,\n          getOptionLabel,\n          getOptionValue,\n          isSelectNative,\n          baseSelectOptionProps: rootProps.slotProps?.baseSelectOption\n        })\n      }))]\n    }), clearButton]\n  });\n}\nprocess.env.NODE_ENV !== \"production\" ? GridFilterInputSingleSelect.propTypes = {\n  // ----------------------------- Warning --------------------------------\n  // | These PropTypes are generated from the TypeScript type definitions |\n  // | To update them edit the TypeScript types and run \"pnpm proptypes\"  |\n  // ----------------------------------------------------------------------\n  apiRef: PropTypes.shape({\n    current: PropTypes.object.isRequired\n  }).isRequired,\n  applyValue: PropTypes.func.isRequired,\n  clearButton: PropTypes.node,\n  focusElementRef: PropTypes /* @typescript-to-proptypes-ignore */.oneOfType([PropTypes.func, PropTypes.object]),\n  /**\n   * It is `true` if the filter either has a value or an operator with no value\n   * required is selected (for example `isEmpty`)\n   */\n  isFilterActive: PropTypes.bool,\n  item: PropTypes.shape({\n    field: PropTypes.string.isRequired,\n    id: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),\n    operator: PropTypes.string.isRequired,\n    value: PropTypes.any\n  }).isRequired\n} : void 0;\nexport { GridFilterInputSingleSelect };","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport _objectWithoutPropertiesLoose from \"@babel/runtime/helpers/esm/objectWithoutPropertiesLoose\";\nconst _excluded = [\"item\", \"applyValue\", \"type\", \"apiRef\", \"focusElementRef\", \"tabIndex\", \"disabled\", \"isFilterActive\", \"clearButton\", \"InputProps\", \"variant\"];\nimport * as React from 'react';\nimport PropTypes from 'prop-types';\nimport { unstable_useId as useId } from '@mui/utils';\nimport { useTimeout } from \"../../../hooks/utils/useTimeout.js\";\nimport { useGridRootProps } from \"../../../hooks/utils/useGridRootProps.js\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nfunction GridFilterInputValue(props) {\n  const {\n      item,\n      applyValue,\n      type,\n      apiRef,\n      focusElementRef,\n      tabIndex,\n      disabled,\n      clearButton,\n      InputProps,\n      variant = 'standard'\n    } = props,\n    others = _objectWithoutPropertiesLoose(props, _excluded);\n  const filterTimeout = useTimeout();\n  const [filterValueState, setFilterValueState] = React.useState(item.value ?? '');\n  const [applying, setIsApplying] = React.useState(false);\n  const id = useId();\n  const rootProps = useGridRootProps();\n  const onFilterChange = React.useCallback(event => {\n    const {\n      value\n    } = event.target;\n    setFilterValueState(String(value));\n    setIsApplying(true);\n    filterTimeout.start(rootProps.filterDebounceMs, () => {\n      const newItem = _extends({}, item, {\n        value,\n        fromInput: id\n      });\n      applyValue(newItem);\n      setIsApplying(false);\n    });\n  }, [id, applyValue, item, rootProps.filterDebounceMs, filterTimeout]);\n  React.useEffect(() => {\n    const itemPlusTag = item;\n    if (itemPlusTag.fromInput !== id || item.value === undefined) {\n      setFilterValueState(String(item.value ?? ''));\n    }\n  }, [id, item]);\n  return /*#__PURE__*/_jsx(rootProps.slots.baseTextField, _extends({\n    id: id,\n    label: apiRef.current.getLocaleText('filterPanelInputLabel'),\n    placeholder: apiRef.current.getLocaleText('filterPanelInputPlaceholder'),\n    value: filterValueState,\n    onChange: onFilterChange,\n    variant: variant,\n    type: type || 'text',\n    InputProps: _extends({}, applying || clearButton ? {\n      endAdornment: applying ? /*#__PURE__*/_jsx(rootProps.slots.loadIcon, {\n        fontSize: \"small\",\n        color: \"action\"\n      }) : clearButton\n    } : {}, {\n      disabled\n    }, InputProps, {\n      inputProps: _extends({\n        tabIndex\n      }, InputProps?.inputProps)\n    }),\n    InputLabelProps: {\n      shrink: true\n    },\n    inputRef: focusElementRef\n  }, others, rootProps.slotProps?.baseTextField));\n}\nprocess.env.NODE_ENV !== \"production\" ? GridFilterInputValue.propTypes = {\n  // ----------------------------- Warning --------------------------------\n  // | These PropTypes are generated from the TypeScript type definitions |\n  // | To update them edit the TypeScript types and run \"pnpm proptypes\"  |\n  // ----------------------------------------------------------------------\n  apiRef: PropTypes.shape({\n    current: PropTypes.object.isRequired\n  }).isRequired,\n  applyValue: PropTypes.func.isRequired,\n  clearButton: PropTypes.node,\n  focusElementRef: PropTypes /* @typescript-to-proptypes-ignore */.oneOfType([PropTypes.func, PropTypes.object]),\n  /**\n   * It is `true` if the filter either has a value or an operator with no value\n   * required is selected (for example `isEmpty`)\n   */\n  isFilterActive: PropTypes.bool,\n  item: PropTypes.shape({\n    field: PropTypes.string.isRequired,\n    id: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),\n    operator: PropTypes.string.isRequired,\n    value: PropTypes.any\n  }).isRequired\n} : void 0;\nexport { GridFilterInputValue };","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport _objectWithoutPropertiesLoose from \"@babel/runtime/helpers/esm/objectWithoutPropertiesLoose\";\nconst _excluded = [\"logicOperators\", \"columnsSort\", \"filterFormProps\", \"getColumnForNewFilter\", \"children\", \"disableAddFilterButton\", \"disableRemoveAllButton\"];\nimport * as React from 'react';\nimport PropTypes from 'prop-types';\nimport { GridLogicOperator } from \"../../../models/gridFilterItem.js\";\nimport { useGridApiContext } from \"../../../hooks/utils/useGridApiContext.js\";\nimport { GridPanelContent } from \"../GridPanelContent.js\";\nimport { GridPanelFooter } from \"../GridPanelFooter.js\";\nimport { GridPanelWrapper } from \"../GridPanelWrapper.js\";\nimport { GridFilterForm } from \"./GridFilterForm.js\";\nimport { useGridRootProps } from \"../../../hooks/utils/useGridRootProps.js\";\nimport { useGridSelector } from \"../../../hooks/utils/useGridSelector.js\";\nimport { gridFilterModelSelector } from \"../../../hooks/features/filter/gridFilterSelector.js\";\nimport { gridFilterableColumnDefinitionsSelector, gridFilterableColumnLookupSelector } from \"../../../hooks/features/columns/gridColumnsSelector.js\";\nimport { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nconst getGridFilter = col => ({\n  field: col.field,\n  operator: col.filterOperators[0].value,\n  id: Math.round(Math.random() * 1e5)\n});\nconst GridFilterPanel = /*#__PURE__*/React.forwardRef(function GridFilterPanel(props, ref) {\n  const apiRef = useGridApiContext();\n  const rootProps = useGridRootProps();\n  const filterModel = useGridSelector(apiRef, gridFilterModelSelector);\n  const filterableColumns = useGridSelector(apiRef, gridFilterableColumnDefinitionsSelector);\n  const filterableColumnsLookup = useGridSelector(apiRef, gridFilterableColumnLookupSelector);\n  const lastFilterRef = React.useRef(null);\n  const placeholderFilter = React.useRef(null);\n  const {\n      logicOperators = [GridLogicOperator.And, GridLogicOperator.Or],\n      columnsSort,\n      filterFormProps,\n      getColumnForNewFilter,\n      disableAddFilterButton = false,\n      disableRemoveAllButton = false\n    } = props,\n    other = _objectWithoutPropertiesLoose(props, _excluded);\n  const applyFilter = apiRef.current.upsertFilterItem;\n  const applyFilterLogicOperator = React.useCallback(operator => {\n    apiRef.current.setFilterLogicOperator(operator);\n  }, [apiRef]);\n  const getDefaultFilter = React.useCallback(() => {\n    let nextColumnWithOperator;\n    if (getColumnForNewFilter && typeof getColumnForNewFilter === 'function') {\n      // To allow override the column for default (first) filter\n      const nextFieldName = getColumnForNewFilter({\n        currentFilters: filterModel?.items || [],\n        columns: filterableColumns\n      });\n      if (nextFieldName === null) {\n        return null;\n      }\n      nextColumnWithOperator = filterableColumns.find(({\n        field\n      }) => field === nextFieldName);\n    } else {\n      nextColumnWithOperator = filterableColumns.find(colDef => colDef.filterOperators?.length);\n    }\n    if (!nextColumnWithOperator) {\n      return null;\n    }\n    return getGridFilter(nextColumnWithOperator);\n  }, [filterModel?.items, filterableColumns, getColumnForNewFilter]);\n  const getNewFilter = React.useCallback(() => {\n    if (getColumnForNewFilter === undefined || typeof getColumnForNewFilter !== 'function') {\n      return getDefaultFilter();\n    }\n    const currentFilters = filterModel.items.length ? filterModel.items : [getDefaultFilter()].filter(Boolean);\n\n    // If no items are there in filterModel, we have to pass defaultFilter\n    const nextColumnFieldName = getColumnForNewFilter({\n      currentFilters: currentFilters,\n      columns: filterableColumns\n    });\n    if (nextColumnFieldName === null) {\n      return null;\n    }\n    const nextColumnWithOperator = filterableColumns.find(({\n      field\n    }) => field === nextColumnFieldName);\n    if (!nextColumnWithOperator) {\n      return null;\n    }\n    return getGridFilter(nextColumnWithOperator);\n  }, [filterModel.items, filterableColumns, getColumnForNewFilter, getDefaultFilter]);\n  const items = React.useMemo(() => {\n    if (filterModel.items.length) {\n      return filterModel.items;\n    }\n    if (!placeholderFilter.current) {\n      placeholderFilter.current = getDefaultFilter();\n    }\n    return placeholderFilter.current ? [placeholderFilter.current] : [];\n  }, [filterModel.items, getDefaultFilter]);\n  const hasMultipleFilters = items.length > 1;\n  const {\n    readOnlyFilters,\n    validFilters\n  } = React.useMemo(() => items.reduce((acc, item) => {\n    if (filterableColumnsLookup[item.field]) {\n      acc.validFilters.push(item);\n    } else {\n      acc.readOnlyFilters.push(item);\n    }\n    return acc;\n  }, {\n    readOnlyFilters: [],\n    validFilters: []\n  }), [items, filterableColumnsLookup]);\n  const addNewFilter = React.useCallback(() => {\n    const newFilter = getNewFilter();\n    if (!newFilter) {\n      return;\n    }\n    apiRef.current.upsertFilterItems([...items, newFilter]);\n  }, [apiRef, getNewFilter, items]);\n  const deleteFilter = React.useCallback(item => {\n    const shouldCloseFilterPanel = validFilters.length === 1;\n    apiRef.current.deleteFilterItem(item);\n    if (shouldCloseFilterPanel) {\n      apiRef.current.hideFilterPanel();\n    }\n  }, [apiRef, validFilters.length]);\n  const handleRemoveAll = React.useCallback(() => {\n    if (validFilters.length === 1 && validFilters[0].value === undefined) {\n      apiRef.current.deleteFilterItem(validFilters[0]);\n      return apiRef.current.hideFilterPanel();\n    }\n    return apiRef.current.setFilterModel(_extends({}, filterModel, {\n      items: readOnlyFilters\n    }), 'removeAllFilterItems');\n  }, [apiRef, readOnlyFilters, filterModel, validFilters]);\n  React.useEffect(() => {\n    if (logicOperators.length > 0 && filterModel.logicOperator && !logicOperators.includes(filterModel.logicOperator)) {\n      applyFilterLogicOperator(logicOperators[0]);\n    }\n  }, [logicOperators, applyFilterLogicOperator, filterModel.logicOperator]);\n  React.useEffect(() => {\n    if (validFilters.length > 0) {\n      lastFilterRef.current.focus();\n    }\n  }, [validFilters.length]);\n  return /*#__PURE__*/_jsxs(GridPanelWrapper, _extends({\n    ref: ref\n  }, other, {\n    children: [/*#__PURE__*/_jsxs(GridPanelContent, {\n      children: [readOnlyFilters.map((item, index) => /*#__PURE__*/_jsx(GridFilterForm, _extends({\n        item: item,\n        applyFilterChanges: applyFilter,\n        deleteFilter: deleteFilter,\n        hasMultipleFilters: hasMultipleFilters,\n        showMultiFilterOperators: index > 0,\n        disableMultiFilterOperator: index !== 1,\n        applyMultiFilterOperatorChanges: applyFilterLogicOperator,\n        focusElementRef: null,\n        readOnly: true,\n        logicOperators: logicOperators,\n        columnsSort: columnsSort\n      }, filterFormProps), item.id == null ? index : item.id)), validFilters.map((item, index) => /*#__PURE__*/_jsx(GridFilterForm, _extends({\n        item: item,\n        applyFilterChanges: applyFilter,\n        deleteFilter: deleteFilter,\n        hasMultipleFilters: hasMultipleFilters,\n        showMultiFilterOperators: readOnlyFilters.length + index > 0,\n        disableMultiFilterOperator: readOnlyFilters.length + index !== 1,\n        applyMultiFilterOperatorChanges: applyFilterLogicOperator,\n        focusElementRef: index === validFilters.length - 1 ? lastFilterRef : null,\n        logicOperators: logicOperators,\n        columnsSort: columnsSort\n      }, filterFormProps), item.id == null ? index + readOnlyFilters.length : item.id))]\n    }), !rootProps.disableMultipleColumnsFiltering && !(disableAddFilterButton && disableRemoveAllButton) ? /*#__PURE__*/_jsxs(GridPanelFooter, {\n      children: [!disableAddFilterButton ? /*#__PURE__*/_jsx(rootProps.slots.baseButton, _extends({\n        onClick: addNewFilter,\n        startIcon: /*#__PURE__*/_jsx(rootProps.slots.filterPanelAddIcon, {})\n      }, rootProps.slotProps?.baseButton, {\n        children: apiRef.current.getLocaleText('filterPanelAddFilter')\n      })) : /*#__PURE__*/_jsx(\"span\", {}), !disableRemoveAllButton && validFilters.length > 0 ? /*#__PURE__*/_jsx(rootProps.slots.baseButton, _extends({\n        onClick: handleRemoveAll,\n        startIcon: /*#__PURE__*/_jsx(rootProps.slots.filterPanelRemoveAllIcon, {})\n      }, rootProps.slotProps?.baseButton, {\n        children: apiRef.current.getLocaleText('filterPanelRemoveAll')\n      })) : null]\n    }) : null]\n  }));\n});\nprocess.env.NODE_ENV !== \"production\" ? GridFilterPanel.propTypes = {\n  // ----------------------------- Warning --------------------------------\n  // | These PropTypes are generated from the TypeScript type definitions |\n  // | To update them edit the TypeScript types and run \"pnpm proptypes\"  |\n  // ----------------------------------------------------------------------\n  /**\n   * @ignore - do not document.\n   */\n  children: PropTypes.node,\n  /**\n   * Changes how the options in the columns selector should be ordered.\n   * If not specified, the order is derived from the `columns` prop.\n   */\n  columnsSort: PropTypes.oneOf(['asc', 'desc']),\n  /**\n   * If `true`, the `Add filter` button will not be displayed.\n   * @default false\n   */\n  disableAddFilterButton: PropTypes.bool,\n  /**\n   * If `true`, the `Remove all` button will be disabled\n   * @default false\n   */\n  disableRemoveAllButton: PropTypes.bool,\n  /**\n   * Props passed to each filter form.\n   */\n  filterFormProps: PropTypes.shape({\n    columnInputProps: PropTypes.any,\n    columnsSort: PropTypes.oneOf(['asc', 'desc']),\n    deleteIconProps: PropTypes.any,\n    filterColumns: PropTypes.func,\n    logicOperatorInputProps: PropTypes.any,\n    operatorInputProps: PropTypes.any,\n    valueInputProps: PropTypes.any\n  }),\n  /**\n   * Function that returns the next filter item to be picked as default filter.\n   * @param {GetColumnForNewFilterArgs} args Currently configured filters and columns.\n   * @returns {GridColDef['field']} The field to be used for the next filter or `null` to prevent adding a filter.\n   */\n  getColumnForNewFilter: PropTypes.func,\n  /**\n   * Sets the available logic operators.\n   * @default [GridLogicOperator.And, GridLogicOperator.Or]\n   */\n  logicOperators: PropTypes.arrayOf(PropTypes.oneOf(['and', 'or']).isRequired),\n  /**\n   * The system prop that allows defining system overrides as well as additional CSS styles.\n   */\n  sx: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.func, PropTypes.object, PropTypes.bool])), PropTypes.func, PropTypes.object])\n} : void 0;\n\n/**\n * Demos:\n * - [Filtering - overview](https://mui.com/x/react-data-grid/filtering/)\n *\n * API:\n * - [GridFilterPanel API](https://mui.com/x/api/data-grid/grid-filter-panel/)\n */\nexport { GridFilterPanel, getGridFilter };","import _extends from \"@babel/runtime/helpers/esm/extends\";\nexport function isSingleSelectColDef(colDef) {\n  return colDef?.type === 'singleSelect';\n}\nexport function getValueOptions(column, additionalParams) {\n  if (!column) {\n    return undefined;\n  }\n  return typeof column.valueOptions === 'function' ? column.valueOptions(_extends({\n    field: column.field\n  }, additionalParams)) : column.valueOptions;\n}\nexport function getValueFromValueOptions(value, valueOptions, getOptionValue) {\n  if (valueOptions === undefined) {\n    return undefined;\n  }\n  const result = valueOptions.find(option => {\n    const optionValue = getOptionValue(option);\n    return String(optionValue) === String(value);\n  });\n  return getOptionValue(result);\n}","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport _objectWithoutPropertiesLoose from \"@babel/runtime/helpers/esm/objectWithoutPropertiesLoose\";\nconst _excluded = [\"hideMenu\", \"options\"],\n  _excluded2 = [\"hideMenu\", \"options\"],\n  _excluded3 = [\"csvOptions\", \"printOptions\", \"excelOptions\"];\nimport * as React from 'react';\nimport PropTypes from 'prop-types';\nimport MenuItem from '@mui/material/MenuItem';\nimport { useGridApiContext } from \"../../hooks/utils/useGridApiContext.js\";\nimport { GridToolbarExportContainer } from \"./GridToolbarExportContainer.js\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nexport function GridCsvExportMenuItem(props) {\n  const apiRef = useGridApiContext();\n  const {\n      hideMenu,\n      options\n    } = props,\n    other = _objectWithoutPropertiesLoose(props, _excluded);\n  return /*#__PURE__*/_jsx(MenuItem, _extends({\n    onClick: () => {\n      apiRef.current.exportDataAsCsv(options);\n      hideMenu?.();\n    }\n  }, other, {\n    children: apiRef.current.getLocaleText('toolbarExportCSV')\n  }));\n}\nexport function GridPrintExportMenuItem(props) {\n  const apiRef = useGridApiContext();\n  const {\n      hideMenu,\n      options\n    } = props,\n    other = _objectWithoutPropertiesLoose(props, _excluded2);\n  return /*#__PURE__*/_jsx(MenuItem, _extends({\n    onClick: () => {\n      apiRef.current.exportDataAsPrint(options);\n      hideMenu?.();\n    }\n  }, other, {\n    children: apiRef.current.getLocaleText('toolbarExportPrint')\n  }));\n}\nconst GridToolbarExport = /*#__PURE__*/React.forwardRef(function GridToolbarExport(props, ref) {\n  const {\n      csvOptions = {},\n      printOptions = {},\n      excelOptions\n    } = props,\n    other = _objectWithoutPropertiesLoose(props, _excluded3);\n  const apiRef = useGridApiContext();\n  const preProcessedButtons = apiRef.current.unstable_applyPipeProcessors('exportMenu', [], {\n    excelOptions,\n    csvOptions,\n    printOptions\n  }).sort((a, b) => a.componentName > b.componentName ? 1 : -1);\n  if (preProcessedButtons.length === 0) {\n    return null;\n  }\n  return /*#__PURE__*/_jsx(GridToolbarExportContainer, _extends({}, other, {\n    ref: ref,\n    children: preProcessedButtons.map((button, index) => /*#__PURE__*/React.cloneElement(button.component, {\n      key: index\n    }))\n  }));\n});\nprocess.env.NODE_ENV !== \"production\" ? GridToolbarExport.propTypes = {\n  // ----------------------------- Warning --------------------------------\n  // | These PropTypes are generated from the TypeScript type definitions |\n  // | To update them edit the TypeScript types and run \"pnpm proptypes\"  |\n  // ----------------------------------------------------------------------\n  csvOptions: PropTypes.object,\n  printOptions: PropTypes.object,\n  /**\n   * The props used for each slot inside.\n   * @default {}\n   */\n  slotProps: PropTypes.object\n} : void 0;\nexport { GridToolbarExport };","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport * as React from 'react';\nimport PropTypes from 'prop-types';\nimport { unstable_useId as useId, unstable_useForkRef as useForkRef } from '@mui/utils';\nimport MenuList from '@mui/material/MenuList';\nimport { isHideMenuKey } from \"../../utils/keyboardUtils.js\";\nimport { useGridApiContext } from \"../../hooks/utils/useGridApiContext.js\";\nimport { GridMenu } from \"../menu/GridMenu.js\";\nimport { useGridRootProps } from \"../../hooks/utils/useGridRootProps.js\";\nimport { gridClasses } from \"../../constants/gridClasses.js\";\nimport { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nconst GridToolbarExportContainer = /*#__PURE__*/React.forwardRef(function GridToolbarExportContainer(props, ref) {\n  const {\n    children,\n    slotProps = {}\n  } = props;\n  const buttonProps = slotProps.button || {};\n  const tooltipProps = slotProps.tooltip || {};\n  const apiRef = useGridApiContext();\n  const rootProps = useGridRootProps();\n  const exportButtonId = useId();\n  const exportMenuId = useId();\n  const [open, setOpen] = React.useState(false);\n  const buttonRef = React.useRef(null);\n  const handleRef = useForkRef(ref, buttonRef);\n  const handleMenuOpen = event => {\n    setOpen(prevOpen => !prevOpen);\n    buttonProps.onClick?.(event);\n  };\n  const handleMenuClose = () => setOpen(false);\n  const handleListKeyDown = event => {\n    if (event.key === 'Tab') {\n      event.preventDefault();\n    }\n    if (isHideMenuKey(event.key)) {\n      handleMenuClose();\n    }\n  };\n  if (children == null) {\n    return null;\n  }\n  return /*#__PURE__*/_jsxs(React.Fragment, {\n    children: [/*#__PURE__*/_jsx(rootProps.slots.baseTooltip, _extends({\n      title: apiRef.current.getLocaleText('toolbarExportLabel'),\n      enterDelay: 1000\n    }, tooltipProps, rootProps.slotProps?.baseTooltip, {\n      children: /*#__PURE__*/_jsx(rootProps.slots.baseButton, _extends({\n        ref: handleRef,\n        size: \"small\",\n        startIcon: /*#__PURE__*/_jsx(rootProps.slots.exportIcon, {}),\n        \"aria-expanded\": open,\n        \"aria-label\": apiRef.current.getLocaleText('toolbarExportLabel'),\n        \"aria-haspopup\": \"menu\",\n        \"aria-controls\": open ? exportMenuId : undefined,\n        id: exportButtonId\n      }, buttonProps, {\n        onClick: handleMenuOpen\n      }, rootProps.slotProps?.baseButton, {\n        children: apiRef.current.getLocaleText('toolbarExport')\n      }))\n    })), /*#__PURE__*/_jsx(GridMenu, {\n      open: open,\n      target: buttonRef.current,\n      onClose: handleMenuClose,\n      position: \"bottom-start\",\n      children: /*#__PURE__*/_jsx(MenuList, {\n        id: exportMenuId,\n        className: gridClasses.menuList,\n        \"aria-labelledby\": exportButtonId,\n        onKeyDown: handleListKeyDown,\n        autoFocusItem: open,\n        children: React.Children.map(children, child => {\n          if (! /*#__PURE__*/React.isValidElement(child)) {\n            return child;\n          }\n          return /*#__PURE__*/React.cloneElement(child, {\n            hideMenu: handleMenuClose\n          });\n        })\n      })\n    })]\n  });\n});\nprocess.env.NODE_ENV !== \"production\" ? GridToolbarExportContainer.propTypes = {\n  // ----------------------------- Warning --------------------------------\n  // | These PropTypes are generated from the TypeScript type definitions |\n  // | To update them edit the TypeScript types and run \"pnpm proptypes\"  |\n  // ----------------------------------------------------------------------\n  /**\n   * The props used for each slot inside.\n   * @default {}\n   */\n  slotProps: PropTypes.object\n} : void 0;\nexport { GridToolbarExportContainer };","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport * as React from 'react';\nimport clsx from 'clsx';\nimport { unstable_composeClasses as composeClasses, unstable_useEventCallback as useEventCallback } from '@mui/utils';\nimport { styled } from '@mui/system';\nimport { fastMemo } from '@mui/x-internals/fastMemo';\nimport { useGridRootProps } from \"../hooks/utils/useGridRootProps.js\";\nimport { getDataGridUtilityClass, gridClasses } from \"../constants/index.js\";\nimport { useGridApiContext } from \"../hooks/utils/useGridApiContext.js\";\nimport { useGridApiEventHandler } from \"../hooks/utils/useGridApiEventHandler.js\";\nimport { useGridSelector } from \"../hooks/utils/useGridSelector.js\";\nimport { gridDimensionsSelector } from \"../hooks/features/dimensions/gridDimensionsSelectors.js\";\nimport { gridDensityFactorSelector } from \"../hooks/features/density/densitySelector.js\";\nimport { gridColumnsTotalWidthSelector } from \"../hooks/features/columns/gridColumnsSelector.js\";\nimport { useTimeout } from \"../hooks/utils/useTimeout.js\";\nimport { getTotalHeaderHeight } from \"../hooks/features/columns/gridColumnsUtils.js\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nconst CLIFF = 1;\nconst SLOP = 1.5;\nconst useUtilityClasses = ownerState => {\n  const {\n    scrollDirection,\n    classes\n  } = ownerState;\n  const slots = {\n    root: ['scrollArea', `scrollArea--${scrollDirection}`]\n  };\n  return composeClasses(slots, getDataGridUtilityClass, classes);\n};\nconst GridScrollAreaRawRoot = styled('div', {\n  name: 'MuiDataGrid',\n  slot: 'ScrollArea',\n  overridesResolver: (props, styles) => [{\n    [`&.${gridClasses['scrollArea--left']}`]: styles['scrollArea--left']\n  }, {\n    [`&.${gridClasses['scrollArea--right']}`]: styles['scrollArea--right']\n  }, styles.scrollArea]\n})(() => ({\n  position: 'absolute',\n  top: 0,\n  zIndex: 101,\n  width: 20,\n  bottom: 0,\n  [`&.${gridClasses['scrollArea--left']}`]: {\n    left: 0\n  },\n  [`&.${gridClasses['scrollArea--right']}`]: {\n    right: 0\n  }\n}));\nfunction GridScrollAreaRaw(props) {\n  const {\n    scrollDirection\n  } = props;\n  const rootRef = React.useRef(null);\n  const apiRef = useGridApiContext();\n  const timeout = useTimeout();\n  const densityFactor = useGridSelector(apiRef, gridDensityFactorSelector);\n  const columnsTotalWidth = useGridSelector(apiRef, gridColumnsTotalWidthSelector);\n  const dimensions = useGridSelector(apiRef, gridDimensionsSelector);\n  const scrollPosition = React.useRef({\n    left: 0,\n    top: 0\n  });\n  const getCanScrollMore = () => {\n    if (scrollDirection === 'left') {\n      // Only render if the user has not reached yet the start of the list\n      return scrollPosition.current.left > 0;\n    }\n    if (scrollDirection === 'right') {\n      // Only render if the user has not reached yet the end of the list\n      const maxScrollLeft = columnsTotalWidth - dimensions.viewportInnerSize.width;\n      return scrollPosition.current.left < maxScrollLeft;\n    }\n    return false;\n  };\n  const [dragging, setDragging] = React.useState(false);\n  const [canScrollMore, setCanScrollMore] = React.useState(getCanScrollMore);\n  const rootProps = useGridRootProps();\n  const ownerState = _extends({}, rootProps, {\n    scrollDirection\n  });\n  const classes = useUtilityClasses(ownerState);\n  const totalHeaderHeight = getTotalHeaderHeight(apiRef, rootProps);\n  const headerHeight = Math.floor(rootProps.columnHeaderHeight * densityFactor);\n  const style = {\n    height: headerHeight,\n    top: totalHeaderHeight - headerHeight\n  };\n  if (scrollDirection === 'left') {\n    style.left = dimensions.leftPinnedWidth;\n  } else if (scrollDirection === 'right') {\n    style.right = dimensions.rightPinnedWidth + (dimensions.hasScrollX ? dimensions.scrollbarSize : 0);\n  }\n  const handleScrolling = newScrollPosition => {\n    scrollPosition.current = newScrollPosition;\n    setCanScrollMore(getCanScrollMore);\n  };\n  const handleDragOver = useEventCallback(event => {\n    let offset;\n\n    // Prevents showing the forbidden cursor\n    event.preventDefault();\n    if (scrollDirection === 'left') {\n      offset = event.clientX - rootRef.current.getBoundingClientRect().right;\n    } else if (scrollDirection === 'right') {\n      offset = Math.max(1, event.clientX - rootRef.current.getBoundingClientRect().left);\n    } else {\n      throw new Error('MUI X: Wrong drag direction');\n    }\n    offset = (offset - CLIFF) * SLOP + CLIFF;\n\n    // Avoid freeze and inertia.\n    timeout.start(0, () => {\n      apiRef.current.scroll({\n        left: scrollPosition.current.left + offset,\n        top: scrollPosition.current.top\n      });\n    });\n  });\n  const handleColumnHeaderDragStart = useEventCallback(() => {\n    setDragging(true);\n  });\n  const handleColumnHeaderDragEnd = useEventCallback(() => {\n    setDragging(false);\n  });\n  useGridApiEventHandler(apiRef, 'scrollPositionChange', handleScrolling);\n  useGridApiEventHandler(apiRef, 'columnHeaderDragStart', handleColumnHeaderDragStart);\n  useGridApiEventHandler(apiRef, 'columnHeaderDragEnd', handleColumnHeaderDragEnd);\n  if (!dragging || !canScrollMore) {\n    return null;\n  }\n  return /*#__PURE__*/_jsx(GridScrollAreaRawRoot, {\n    ref: rootRef,\n    className: clsx(classes.root),\n    ownerState: ownerState,\n    onDragOver: handleDragOver,\n    style: style\n  });\n}\nexport const GridScrollArea = fastMemo(GridScrollAreaRaw);","import { useGridSelector } from \"../../utils/index.js\";\nimport { useGridApiContext } from \"../../utils/useGridApiContext.js\";\nimport { useGridRootProps } from \"../../utils/useGridRootProps.js\";\nimport { gridExpandedRowCountSelector } from \"../filter/index.js\";\nimport { gridRowCountSelector, gridRowsLoadingSelector } from \"../rows/index.js\";\n/**\n * Uses the grid state to determine which overlay to display.\n * Returns the active overlay type and the active loading overlay variant.\n */\nexport const useGridOverlays = () => {\n  const apiRef = useGridApiContext();\n  const rootProps = useGridRootProps();\n  const totalRowCount = useGridSelector(apiRef, gridRowCountSelector);\n  const visibleRowCount = useGridSelector(apiRef, gridExpandedRowCountSelector);\n  const noRows = totalRowCount === 0;\n  const loading = useGridSelector(apiRef, gridRowsLoadingSelector);\n  const showNoRowsOverlay = !loading && noRows;\n  const showNoResultsOverlay = !loading && totalRowCount > 0 && visibleRowCount === 0;\n  let overlayType = null;\n  let loadingOverlayVariant = null;\n  if (showNoRowsOverlay) {\n    overlayType = 'noRowsOverlay';\n  }\n  if (showNoResultsOverlay) {\n    overlayType = 'noResultsOverlay';\n  }\n  if (loading) {\n    overlayType = 'loadingOverlay';\n    loadingOverlayVariant = rootProps.slotProps?.loadingOverlay?.[noRows ? 'noRowsVariant' : 'variant'] || null;\n  }\n  return {\n    overlayType,\n    loadingOverlayVariant\n  };\n};","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport * as React from 'react';\nimport { fastMemo } from '@mui/x-internals/fastMemo';\nimport { useGridPrivateApiContext } from \"../hooks/utils/useGridPrivateApiContext.js\";\nimport { useGridSelector } from \"../hooks/utils/useGridSelector.js\";\nimport { useGridRootProps } from \"../hooks/utils/useGridRootProps.js\";\nimport { gridColumnVisibilityModelSelector, gridVisibleColumnDefinitionsSelector } from \"../hooks/features/columns/gridColumnsSelector.js\";\nimport { gridFilterActiveItemsLookupSelector } from \"../hooks/features/filter/gridFilterSelector.js\";\nimport { gridSortColumnLookupSelector } from \"../hooks/features/sorting/gridSortingSelector.js\";\nimport { gridTabIndexColumnHeaderSelector, gridTabIndexCellSelector, gridFocusColumnHeaderSelector, gridTabIndexColumnGroupHeaderSelector, gridFocusColumnGroupHeaderSelector } from \"../hooks/features/focus/gridFocusStateSelector.js\";\nimport { gridColumnGroupsHeaderMaxDepthSelector, gridColumnGroupsHeaderStructureSelector } from \"../hooks/features/columnGrouping/gridColumnGroupsSelector.js\";\nimport { gridColumnMenuSelector } from \"../hooks/features/columnMenu/columnMenuSelector.js\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nfunction GridHeaders() {\n  const apiRef = useGridPrivateApiContext();\n  const rootProps = useGridRootProps();\n  const visibleColumns = useGridSelector(apiRef, gridVisibleColumnDefinitionsSelector);\n  const filterColumnLookup = useGridSelector(apiRef, gridFilterActiveItemsLookupSelector);\n  const sortColumnLookup = useGridSelector(apiRef, gridSortColumnLookupSelector);\n  const columnHeaderTabIndexState = useGridSelector(apiRef, gridTabIndexColumnHeaderSelector);\n  const cellTabIndexState = useGridSelector(apiRef, gridTabIndexCellSelector);\n  const columnGroupHeaderTabIndexState = useGridSelector(apiRef, gridTabIndexColumnGroupHeaderSelector);\n  const columnHeaderFocus = useGridSelector(apiRef, gridFocusColumnHeaderSelector);\n  const columnGroupHeaderFocus = useGridSelector(apiRef, gridFocusColumnGroupHeaderSelector);\n  const headerGroupingMaxDepth = useGridSelector(apiRef, gridColumnGroupsHeaderMaxDepthSelector);\n  const columnMenuState = useGridSelector(apiRef, gridColumnMenuSelector);\n  const columnVisibility = useGridSelector(apiRef, gridColumnVisibilityModelSelector);\n  const columnGroupsHeaderStructure = useGridSelector(apiRef, gridColumnGroupsHeaderStructureSelector);\n  const hasOtherElementInTabSequence = !(columnGroupHeaderTabIndexState === null && columnHeaderTabIndexState === null && cellTabIndexState === null);\n  const columnsContainerRef = apiRef.current.columnHeadersContainerRef;\n  return /*#__PURE__*/_jsx(rootProps.slots.columnHeaders, _extends({\n    ref: columnsContainerRef,\n    visibleColumns: visibleColumns,\n    filterColumnLookup: filterColumnLookup,\n    sortColumnLookup: sortColumnLookup,\n    columnHeaderTabIndexState: columnHeaderTabIndexState,\n    columnGroupHeaderTabIndexState: columnGroupHeaderTabIndexState,\n    columnHeaderFocus: columnHeaderFocus,\n    columnGroupHeaderFocus: columnGroupHeaderFocus,\n    headerGroupingMaxDepth: headerGroupingMaxDepth,\n    columnMenuState: columnMenuState,\n    columnVisibility: columnVisibility,\n    columnGroupsHeaderStructure: columnGroupsHeaderStructure,\n    hasOtherElementInTabSequence: hasOtherElementInTabSequence\n  }, rootProps.slotProps?.columnHeaders));\n}\nconst MemoizedGridHeaders = fastMemo(GridHeaders);\nexport { MemoizedGridHeaders as GridHeaders };","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport * as React from 'react';\nimport { styled } from '@mui/system';\nimport { useGridRootProps } from \"../../hooks/utils/useGridRootProps.js\";\nimport { useGridConfiguration } from \"../../hooks/utils/useGridConfiguration.js\";\nimport { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nconst GridPanelAnchor = styled('div')({\n  position: 'absolute',\n  top: `var(--DataGrid-headersTotalHeight)`,\n  left: 0\n});\nconst Element = styled('div', {\n  name: 'MuiDataGrid',\n  slot: 'Main',\n  overridesResolver: (props, styles) => styles.main\n})({\n  flexGrow: 1,\n  position: 'relative',\n  overflow: 'hidden'\n});\nexport const GridMainContainer = /*#__PURE__*/React.forwardRef((props, ref) => {\n  const rootProps = useGridRootProps();\n  const configuration = useGridConfiguration();\n  const ariaAttributes = configuration.hooks.useGridAriaAttributes();\n  return /*#__PURE__*/_jsxs(Element, _extends({\n    ref: ref,\n    ownerState: rootProps,\n    className: props.className,\n    tabIndex: -1\n  }, ariaAttributes, {\n    children: [/*#__PURE__*/_jsx(GridPanelAnchor, {\n      role: \"presentation\",\n      \"data-id\": \"gridPanelAnchor\"\n    }), props.children]\n  }));\n});","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport * as React from 'react';\nimport clsx from 'clsx';\nimport { styled } from '@mui/system';\nimport composeClasses from '@mui/utils/composeClasses';\nimport { gridClasses, getDataGridUtilityClass } from \"../../constants/gridClasses.js\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nconst useUtilityClasses = () => {\n  const slots = {\n    root: ['topContainer']\n  };\n  return composeClasses(slots, getDataGridUtilityClass, {});\n};\nconst Element = styled('div')({\n  position: 'sticky',\n  zIndex: 4,\n  top: 0\n});\nexport function GridTopContainer(props) {\n  const classes = useUtilityClasses();\n  return /*#__PURE__*/_jsx(Element, _extends({}, props, {\n    className: clsx(classes.root, props.className, gridClasses['container--top']),\n    role: \"presentation\"\n  }));\n}","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport * as React from 'react';\nimport clsx from 'clsx';\nimport { styled } from '@mui/system';\nimport composeClasses from '@mui/utils/composeClasses';\nimport { gridClasses, getDataGridUtilityClass } from \"../../constants/gridClasses.js\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nconst useUtilityClasses = () => {\n  const slots = {\n    root: ['bottomContainer']\n  };\n  return composeClasses(slots, getDataGridUtilityClass, {});\n};\nconst Element = styled('div')({\n  position: 'sticky',\n  zIndex: 4,\n  bottom: 'calc(var(--DataGrid-hasScrollX) * var(--DataGrid-scrollbarSize))'\n});\nexport function GridBottomContainer(props) {\n  const classes = useUtilityClasses();\n  return /*#__PURE__*/_jsx(Element, _extends({}, props, {\n    className: clsx(classes.root, props.className, gridClasses['container--bottom']),\n    role: \"presentation\"\n  }));\n}","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport * as React from 'react';\nimport clsx from 'clsx';\nimport { styled } from '@mui/system';\nimport composeClasses from '@mui/utils/composeClasses';\nimport { useGridRootProps } from \"../../hooks/utils/useGridRootProps.js\";\nimport { getDataGridUtilityClass } from \"../../constants/gridClasses.js\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nconst useUtilityClasses = (props, overflowedContent) => {\n  const {\n    classes\n  } = props;\n  const slots = {\n    root: ['virtualScrollerContent', overflowedContent && 'virtualScrollerContent--overflowed']\n  };\n  return composeClasses(slots, getDataGridUtilityClass, classes);\n};\nconst VirtualScrollerContentRoot = styled('div', {\n  name: 'MuiDataGrid',\n  slot: 'VirtualScrollerContent',\n  overridesResolver: (props, styles) => styles.virtualScrollerContent\n})({});\nconst GridVirtualScrollerContent = /*#__PURE__*/React.forwardRef(function GridVirtualScrollerContent(props, ref) {\n  const rootProps = useGridRootProps();\n  const overflowedContent = !rootProps.autoHeight && props.style?.minHeight === 'auto';\n  const classes = useUtilityClasses(rootProps, overflowedContent);\n  return /*#__PURE__*/_jsx(VirtualScrollerContentRoot, _extends({\n    ref: ref\n  }, props, {\n    ownerState: rootProps,\n    className: clsx(classes.root, props.className)\n  }));\n});\nexport { GridVirtualScrollerContent };","import * as React from 'react';\nimport { styled } from '@mui/system';\nimport { fastMemo } from '@mui/x-internals/fastMemo';\nimport { useGridSelector } from \"../../hooks/utils/useGridSelector.js\";\nimport { useGridApiContext } from \"../../hooks/utils/useGridApiContext.js\";\nimport { gridDimensionsSelector } from \"../../hooks/features/dimensions/index.js\";\nimport { gridClasses } from \"../../constants/index.js\";\nimport { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nconst Filler = styled('div')({\n  display: 'flex',\n  flexDirection: 'row',\n  width: 'var(--DataGrid-rowWidth)',\n  boxSizing: 'border-box'\n});\nconst Pinned = styled('div')({\n  position: 'sticky',\n  height: '100%',\n  boxSizing: 'border-box',\n  borderTop: '1px solid var(--rowBorderColor)',\n  backgroundColor: 'var(--DataGrid-pinnedBackground)'\n});\nconst PinnedLeft = styled(Pinned)({\n  left: 0,\n  borderRight: '1px solid var(--rowBorderColor)'\n});\nconst PinnedRight = styled(Pinned)({\n  right: 0,\n  borderLeft: '1px solid var(--rowBorderColor)'\n});\nconst Main = styled('div')({\n  flexGrow: 1,\n  borderTop: '1px solid var(--rowBorderColor)'\n});\nfunction GridVirtualScrollerFiller({\n  rowsLength\n}) {\n  const apiRef = useGridApiContext();\n  const {\n    viewportOuterSize,\n    minimumSize,\n    hasScrollX,\n    hasScrollY,\n    scrollbarSize,\n    leftPinnedWidth,\n    rightPinnedWidth\n  } = useGridSelector(apiRef, gridDimensionsSelector);\n  const scrollbarHeight = hasScrollX ? scrollbarSize : 0;\n  const expandedHeight = viewportOuterSize.height - minimumSize.height - scrollbarHeight;\n  const height = Math.max(scrollbarHeight, expandedHeight);\n  if (height === 0) {\n    return null;\n  }\n  return /*#__PURE__*/_jsxs(Filler, {\n    className: gridClasses.filler,\n    role: \"presentation\",\n    style: {\n      height,\n      '--rowBorderColor': rowsLength === 0 ? 'transparent' : 'var(--DataGrid-rowBorderColor)'\n    },\n    children: [leftPinnedWidth > 0 && /*#__PURE__*/_jsx(PinnedLeft, {\n      className: gridClasses['filler--pinnedLeft'],\n      style: {\n        width: leftPinnedWidth\n      }\n    }), /*#__PURE__*/_jsx(Main, {}), rightPinnedWidth > 0 && /*#__PURE__*/_jsx(PinnedRight, {\n      className: gridClasses['filler--pinnedRight'],\n      style: {\n        width: rightPinnedWidth + (hasScrollY ? scrollbarSize : 0)\n      }\n    })]\n  });\n}\nconst Memoized = fastMemo(GridVirtualScrollerFiller);\nexport { Memoized as GridVirtualScrollerFiller };","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport _objectWithoutPropertiesLoose from \"@babel/runtime/helpers/esm/objectWithoutPropertiesLoose\";\nconst _excluded = [\"className\"];\nimport * as React from 'react';\nimport clsx from 'clsx';\nimport { styled } from '@mui/system';\nimport composeClasses from '@mui/utils/composeClasses';\nimport { useGridApiContext } from \"../../hooks/utils/useGridApiContext.js\";\nimport { useGridSelector } from \"../../hooks/utils/useGridSelector.js\";\nimport { gridRowsMetaSelector } from \"../../hooks/features/rows/index.js\";\nimport { gridRenderContextSelector } from \"../../hooks/features/virtualization/index.js\";\nimport { useGridRootProps } from \"../../hooks/utils/useGridRootProps.js\";\nimport { getDataGridUtilityClass } from \"../../constants/gridClasses.js\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nconst useUtilityClasses = ownerState => {\n  const {\n    classes\n  } = ownerState;\n  const slots = {\n    root: ['virtualScrollerRenderZone']\n  };\n  return composeClasses(slots, getDataGridUtilityClass, classes);\n};\nconst VirtualScrollerRenderZoneRoot = styled('div', {\n  name: 'MuiDataGrid',\n  slot: 'VirtualScrollerRenderZone',\n  overridesResolver: (props, styles) => styles.virtualScrollerRenderZone\n})({\n  position: 'absolute',\n  display: 'flex',\n  // Prevents margin collapsing when using `getRowSpacing`\n  flexDirection: 'column'\n});\nconst GridVirtualScrollerRenderZone = /*#__PURE__*/React.forwardRef(function GridVirtualScrollerRenderZone(props, ref) {\n  const {\n      className\n    } = props,\n    other = _objectWithoutPropertiesLoose(props, _excluded);\n  const apiRef = useGridApiContext();\n  const rootProps = useGridRootProps();\n  const classes = useUtilityClasses(rootProps);\n  const offsetTop = useGridSelector(apiRef, () => {\n    const renderContext = gridRenderContextSelector(apiRef);\n    const rowsMeta = gridRowsMetaSelector(apiRef.current.state);\n    return rowsMeta.positions[renderContext.firstRowIndex] ?? 0;\n  });\n  return /*#__PURE__*/_jsx(VirtualScrollerRenderZoneRoot, _extends({\n    ref: ref,\n    className: clsx(classes.root, className),\n    ownerState: rootProps,\n    style: {\n      transform: `translate3d(0, ${offsetTop}px, 0)`\n    }\n  }, other));\n});\nexport { GridVirtualScrollerRenderZone };","import * as React from 'react';\nimport { styled } from '@mui/system';\nimport { unstable_composeClasses as composeClasses, unstable_useForkRef as useForkRef, unstable_useEventCallback as useEventCallback } from '@mui/utils';\nimport { useOnMount } from \"../../hooks/utils/useOnMount.js\";\nimport { useGridPrivateApiContext } from \"../../hooks/utils/useGridPrivateApiContext.js\";\nimport { gridDimensionsSelector, useGridSelector } from \"../../hooks/index.js\";\nimport { useGridRootProps } from \"../../hooks/utils/useGridRootProps.js\";\nimport { getDataGridUtilityClass } from \"../../constants/gridClasses.js\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nconst useUtilityClasses = (ownerState, position) => {\n  const {\n    classes\n  } = ownerState;\n  const slots = {\n    root: ['scrollbar', `scrollbar--${position}`],\n    content: ['scrollbarContent']\n  };\n  return composeClasses(slots, getDataGridUtilityClass, classes);\n};\nconst Scrollbar = styled('div')({\n  position: 'absolute',\n  display: 'inline-block',\n  zIndex: 6,\n  '& > div': {\n    display: 'inline-block'\n  },\n  // In macOS Safari and Gnome Web, scrollbars are overlaid and don't affect the layout. So we consider\n  // their size to be 0px throughout all the calculations, but the floating scrollbar container does need\n  // to appear and have a real size. We set it to 14px because it seems like an acceptable value and we\n  // don't have a method to find the required size for scrollbars on those platforms.\n  '--size': 'calc(max(var(--DataGrid-scrollbarSize), 14px))'\n});\nconst ScrollbarVertical = styled(Scrollbar)({\n  width: 'var(--size)',\n  height: 'calc(var(--DataGrid-hasScrollY) * (100% - var(--DataGrid-topContainerHeight) - var(--DataGrid-bottomContainerHeight) - var(--DataGrid-hasScrollX) * var(--DataGrid-scrollbarSize)))',\n  overflowY: 'auto',\n  overflowX: 'hidden',\n  // Disable focus-visible style, it's a scrollbar.\n  outline: 0,\n  '& > div': {\n    width: 'var(--size)'\n  },\n  top: 'var(--DataGrid-topContainerHeight)',\n  right: '0px'\n});\nconst ScrollbarHorizontal = styled(Scrollbar)({\n  width: '100%',\n  height: 'var(--size)',\n  overflowY: 'hidden',\n  overflowX: 'auto',\n  // Disable focus-visible style, it's a scrollbar.\n  outline: 0,\n  '& > div': {\n    height: 'var(--size)'\n  },\n  bottom: '0px'\n});\nconst Content = styled('div')({\n  display: 'inline-block'\n});\nconst GridVirtualScrollbar = /*#__PURE__*/React.forwardRef(function GridVirtualScrollbar(props, ref) {\n  const apiRef = useGridPrivateApiContext();\n  const rootProps = useGridRootProps();\n  const isLocked = React.useRef(false);\n  const lastPosition = React.useRef(0);\n  const scrollbarRef = React.useRef(null);\n  const contentRef = React.useRef(null);\n  const classes = useUtilityClasses(rootProps, props.position);\n  const dimensions = useGridSelector(apiRef, gridDimensionsSelector);\n  const propertyDimension = props.position === 'vertical' ? 'height' : 'width';\n  const propertyScroll = props.position === 'vertical' ? 'scrollTop' : 'scrollLeft';\n  const hasScroll = props.position === 'vertical' ? dimensions.hasScrollX : dimensions.hasScrollY;\n  const contentSize = dimensions.minimumSize[propertyDimension] + (hasScroll ? dimensions.scrollbarSize : 0);\n  const scrollbarSize = props.position === 'vertical' ? dimensions.viewportInnerSize.height : dimensions.viewportOuterSize.width;\n  const scrollbarInnerSize = scrollbarSize * (contentSize / dimensions.viewportOuterSize[propertyDimension]);\n  const onScrollerScroll = useEventCallback(() => {\n    const scroller = apiRef.current.virtualScrollerRef.current;\n    const scrollbar = scrollbarRef.current;\n    if (scroller[propertyScroll] === lastPosition.current) {\n      return;\n    }\n    if (isLocked.current) {\n      isLocked.current = false;\n      return;\n    }\n    isLocked.current = true;\n    const value = scroller[propertyScroll] / contentSize;\n    scrollbar[propertyScroll] = value * scrollbarInnerSize;\n    lastPosition.current = scroller[propertyScroll];\n  });\n  const onScrollbarScroll = useEventCallback(() => {\n    const scroller = apiRef.current.virtualScrollerRef.current;\n    const scrollbar = scrollbarRef.current;\n    if (isLocked.current) {\n      isLocked.current = false;\n      return;\n    }\n    isLocked.current = true;\n    const value = scrollbar[propertyScroll] / scrollbarInnerSize;\n    scroller[propertyScroll] = value * contentSize;\n  });\n  useOnMount(() => {\n    const scroller = apiRef.current.virtualScrollerRef.current;\n    const scrollbar = scrollbarRef.current;\n    scroller.addEventListener('scroll', onScrollerScroll, {\n      capture: true\n    });\n    scrollbar.addEventListener('scroll', onScrollbarScroll, {\n      capture: true\n    });\n    return () => {\n      scroller.removeEventListener('scroll', onScrollerScroll, {\n        capture: true\n      });\n      scrollbar.removeEventListener('scroll', onScrollbarScroll, {\n        capture: true\n      });\n    };\n  });\n  React.useEffect(() => {\n    const content = contentRef.current;\n    content.style.setProperty(propertyDimension, `${scrollbarInnerSize}px`);\n  }, [scrollbarInnerSize, propertyDimension]);\n  const Container = props.position === 'vertical' ? ScrollbarVertical : ScrollbarHorizontal;\n  return /*#__PURE__*/_jsx(Container, {\n    ref: useForkRef(ref, scrollbarRef),\n    className: classes.root,\n    tabIndex: -1,\n    \"aria-hidden\": \"true\",\n    children: /*#__PURE__*/_jsx(Content, {\n      ref: contentRef,\n      className: classes.content\n    })\n  });\n});\nexport { GridVirtualScrollbar };","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport * as React from 'react';\nimport { styled } from '@mui/system';\nimport composeClasses from '@mui/utils/composeClasses';\nimport { GridScrollArea } from \"../GridScrollArea.js\";\nimport { useGridRootProps } from \"../../hooks/utils/useGridRootProps.js\";\nimport { useGridApiContext } from \"../../hooks/utils/useGridApiContext.js\";\nimport { useGridSelector } from \"../../hooks/utils/useGridSelector.js\";\nimport { getDataGridUtilityClass } from \"../../constants/gridClasses.js\";\nimport { gridDimensionsSelector } from \"../../hooks/features/dimensions/index.js\";\nimport { useGridVirtualScroller } from \"../../hooks/features/virtualization/useGridVirtualScroller.js\";\nimport { useGridOverlays } from \"../../hooks/features/overlays/useGridOverlays.js\";\nimport { GridOverlays as Overlays } from \"../base/GridOverlays.js\";\nimport { GridHeaders } from \"../GridHeaders.js\";\nimport { GridMainContainer as Container } from \"./GridMainContainer.js\";\nimport { GridTopContainer as TopContainer } from \"./GridTopContainer.js\";\nimport { GridBottomContainer as BottomContainer } from \"./GridBottomContainer.js\";\nimport { GridVirtualScrollerContent as Content } from \"./GridVirtualScrollerContent.js\";\nimport { GridVirtualScrollerFiller as SpaceFiller } from \"./GridVirtualScrollerFiller.js\";\nimport { GridVirtualScrollerRenderZone as RenderZone } from \"./GridVirtualScrollerRenderZone.js\";\nimport { GridVirtualScrollbar as Scrollbar } from \"./GridVirtualScrollbar.js\";\nimport { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nconst useUtilityClasses = (ownerState, dimensions, loadingOverlayVariant) => {\n  const {\n    classes\n  } = ownerState;\n  const slots = {\n    root: ['main', dimensions.rightPinnedWidth > 0 && 'main--hasPinnedRight', loadingOverlayVariant === 'skeleton' && 'main--hasSkeletonLoadingOverlay'],\n    scroller: ['virtualScroller', dimensions.hasScrollX && 'virtualScroller--hasScrollX']\n  };\n  return composeClasses(slots, getDataGridUtilityClass, classes);\n};\nconst Scroller = styled('div', {\n  name: 'MuiDataGrid',\n  slot: 'VirtualScroller',\n  overridesResolver: (props, styles) => styles.virtualScroller\n})({\n  position: 'relative',\n  height: '100%',\n  overflow: 'scroll',\n  scrollbarWidth: 'none' /* Firefox */,\n  '&::-webkit-scrollbar': {\n    display: 'none' /* Safari and Chrome */\n  },\n  '@media print': {\n    overflow: 'hidden'\n  },\n  // See https://github.com/mui/mui-x/issues/10547\n  zIndex: 0\n});\nfunction GridVirtualScroller(props) {\n  const apiRef = useGridApiContext();\n  const rootProps = useGridRootProps();\n  const dimensions = useGridSelector(apiRef, gridDimensionsSelector);\n  const overlaysProps = useGridOverlays();\n  const classes = useUtilityClasses(rootProps, dimensions, overlaysProps.loadingOverlayVariant);\n  const virtualScroller = useGridVirtualScroller();\n  const {\n    getContainerProps,\n    getScrollerProps,\n    getContentProps,\n    getRenderZoneProps,\n    getScrollbarVerticalProps,\n    getScrollbarHorizontalProps,\n    getRows\n  } = virtualScroller;\n  const rows = getRows();\n  return /*#__PURE__*/_jsxs(Container, _extends({\n    className: classes.root\n  }, getContainerProps(), {\n    children: [/*#__PURE__*/_jsx(GridScrollArea, {\n      scrollDirection: \"left\"\n    }), /*#__PURE__*/_jsx(GridScrollArea, {\n      scrollDirection: \"right\"\n    }), /*#__PURE__*/_jsxs(Scroller, _extends({\n      className: classes.scroller\n    }, getScrollerProps(), {\n      ownerState: rootProps,\n      children: [/*#__PURE__*/_jsxs(TopContainer, {\n        children: [/*#__PURE__*/_jsx(GridHeaders, {}), /*#__PURE__*/_jsx(rootProps.slots.pinnedRows, {\n          position: \"top\",\n          virtualScroller: virtualScroller\n        })]\n      }), /*#__PURE__*/_jsx(Overlays, _extends({}, overlaysProps)), /*#__PURE__*/_jsx(Content, _extends({}, getContentProps(), {\n        children: /*#__PURE__*/_jsxs(RenderZone, _extends({}, getRenderZoneProps(), {\n          children: [rows, /*#__PURE__*/_jsx(rootProps.slots.detailPanels, {\n            virtualScroller: virtualScroller\n          })]\n        }))\n      })), /*#__PURE__*/_jsx(SpaceFiller, {\n        rowsLength: rows.length\n      }), /*#__PURE__*/_jsx(BottomContainer, {\n        children: /*#__PURE__*/_jsx(rootProps.slots.pinnedRows, {\n          position: \"bottom\",\n          virtualScroller: virtualScroller\n        })\n      })]\n    })), dimensions.hasScrollY && /*#__PURE__*/_jsx(Scrollbar, _extends({\n      position: \"vertical\"\n    }, getScrollbarVerticalProps())), dimensions.hasScrollX && /*#__PURE__*/_jsx(Scrollbar, _extends({\n      position: \"horizontal\"\n    }, getScrollbarHorizontalProps())), props.children]\n  }));\n}\nexport { GridVirtualScroller };","import { unstable_generateUtilityClasses as generateUtilityClasses, unstable_generateUtilityClass as generateUtilityClass } from '@mui/utils';\nexport function getDataGridUtilityClass(slot) {\n  return generateUtilityClass('MuiDataGrid', slot);\n}\nexport const gridClasses = generateUtilityClasses('MuiDataGrid', ['actionsCell', 'aggregationColumnHeader', 'aggregationColumnHeader--alignLeft', 'aggregationColumnHeader--alignCenter', 'aggregationColumnHeader--alignRight', 'aggregationColumnHeaderLabel', 'autoHeight', 'autosizing', 'booleanCell', 'cell--editable', 'cell--editing', 'cell--flex', 'cell--textCenter', 'cell--textLeft', 'cell--textRight', 'cell--rangeTop', 'cell--rangeBottom', 'cell--rangeLeft', 'cell--rangeRight', 'cell--pinnedLeft', 'cell--pinnedRight', 'cell--selectionMode', 'cell', 'cellCheckbox', 'cellEmpty', 'cellSkeleton', 'cellOffsetLeft', 'checkboxInput', 'columnHeader', 'columnHeader--alignCenter', 'columnHeader--alignLeft', 'columnHeader--alignRight', 'columnHeader--dragging', 'columnHeader--moving', 'columnHeader--numeric', 'columnHeader--sortable', 'columnHeader--sorted', 'columnHeader--filtered', 'columnHeader--pinnedLeft', 'columnHeader--pinnedRight', 'columnHeader--last', 'columnHeader--lastUnpinned', 'columnHeader--siblingFocused', 'columnHeaderCheckbox', 'columnHeaderDraggableContainer', 'columnHeaderTitle', 'columnHeaderTitleContainer', 'columnHeaderTitleContainerContent', 'columnHeader--filledGroup', 'columnHeader--emptyGroup', 'columnHeaders', 'columnSeparator--resizable', 'columnSeparator--resizing', 'columnSeparator--sideLeft', 'columnSeparator--sideRight', 'columnSeparator', 'columnsManagement', 'columnsManagementRow', 'columnsManagementHeader', 'columnsManagementFooter', 'container--top', 'container--bottom', 'detailPanel', 'detailPanels', 'detailPanelToggleCell', 'detailPanelToggleCell--expanded', 'footerCell', 'panel', 'panelHeader', 'panelWrapper', 'panelContent', 'panelFooter', 'paper', 'editBooleanCell', 'editInputCell', 'filler', 'filler--borderBottom', 'filler--pinnedLeft', 'filler--pinnedRight', 'filterForm', 'filterFormDeleteIcon', 'filterFormLogicOperatorInput', 'filterFormColumnInput', 'filterFormOperatorInput', 'filterFormValueInput', 'filterIcon', 'footerContainer', 'headerFilterRow', 'iconButtonContainer', 'iconSeparator', 'main', 'main--hasPinnedRight', 'main--hasSkeletonLoadingOverlay', 'menu', 'menuIcon', 'menuIconButton', 'menuOpen', 'menuList', 'overlay', 'overlayWrapper', 'overlayWrapperInner', 'root', 'root--densityStandard', 'root--densityComfortable', 'root--densityCompact', 'root--disableUserSelection', 'root--noToolbar', 'row', 'row--editable', 'row--editing', 'row--firstVisible', 'row--lastVisible', 'row--dragging', 'row--dynamicHeight', 'row--detailPanelExpanded', 'row--borderBottom', 'rowReorderCellPlaceholder', 'rowCount', 'rowReorderCellContainer', 'rowReorderCell', 'rowReorderCell--draggable', 'rowSkeleton', 'scrollArea--left', 'scrollArea--right', 'scrollArea', 'scrollbar', 'scrollbar--vertical', 'scrollbar--horizontal', 'scrollbarFiller', 'scrollbarFiller--header', 'scrollbarFiller--borderTop', 'scrollbarFiller--borderBottom', 'scrollbarFiller--pinnedRight', 'selectedRowCount', 'sortIcon', 'toolbarContainer', 'toolbarFilterList', 'virtualScroller', 'virtualScroller--hasScrollX', 'virtualScrollerContent', 'virtualScrollerContent--overflowed', 'virtualScrollerRenderZone', 'pinnedColumns', 'withVerticalBorder', 'withBorderColor', 'cell--withRightBorder', 'cell--withLeftBorder', 'columnHeader--withRightBorder', 'columnHeader--withLeftBorder', 'treeDataGroupingCell', 'treeDataGroupingCellToggle', 'treeDataGroupingCellLoadingContainer', 'groupingCriteriaCell', 'groupingCriteriaCellToggle', 'pinnedRows', 'pinnedRows--top', 'pinnedRows--bottom', 'pinnedRowsRenderZone']);","// Can't import from pro package - hence duplication\nexport const GRID_DETAIL_PANEL_TOGGLE_FIELD = '__detail_panel_toggle__';","export const GRID_DEFAULT_LOCALE_TEXT = {\n  // Root\n  noRowsLabel: 'No rows',\n  noResultsOverlayLabel: 'No results found.',\n  // Density selector toolbar button text\n  toolbarDensity: 'Density',\n  toolbarDensityLabel: 'Density',\n  toolbarDensityCompact: 'Compact',\n  toolbarDensityStandard: 'Standard',\n  toolbarDensityComfortable: 'Comfortable',\n  // Columns selector toolbar button text\n  toolbarColumns: 'Columns',\n  toolbarColumnsLabel: 'Select columns',\n  // Filters toolbar button text\n  toolbarFilters: 'Filters',\n  toolbarFiltersLabel: 'Show filters',\n  toolbarFiltersTooltipHide: 'Hide filters',\n  toolbarFiltersTooltipShow: 'Show filters',\n  toolbarFiltersTooltipActive: count => count !== 1 ? `${count} active filters` : `${count} active filter`,\n  // Quick filter toolbar field\n  toolbarQuickFilterPlaceholder: 'Search…',\n  toolbarQuickFilterLabel: 'Search',\n  toolbarQuickFilterDeleteIconLabel: 'Clear',\n  // Export selector toolbar button text\n  toolbarExport: 'Export',\n  toolbarExportLabel: 'Export',\n  toolbarExportCSV: 'Download as CSV',\n  toolbarExportPrint: 'Print',\n  toolbarExportExcel: 'Download as Excel',\n  // Columns management text\n  columnsManagementSearchTitle: 'Search',\n  columnsManagementNoColumns: 'No columns',\n  columnsManagementShowHideAllText: 'Show/Hide All',\n  columnsManagementReset: 'Reset',\n  // Filter panel text\n  filterPanelAddFilter: 'Add filter',\n  filterPanelRemoveAll: 'Remove all',\n  filterPanelDeleteIconLabel: 'Delete',\n  filterPanelLogicOperator: 'Logic operator',\n  filterPanelOperator: 'Operator',\n  filterPanelOperatorAnd: 'And',\n  filterPanelOperatorOr: 'Or',\n  filterPanelColumns: 'Columns',\n  filterPanelInputLabel: 'Value',\n  filterPanelInputPlaceholder: 'Filter value',\n  // Filter operators text\n  filterOperatorContains: 'contains',\n  filterOperatorDoesNotContain: 'does not contain',\n  filterOperatorEquals: 'equals',\n  filterOperatorDoesNotEqual: 'does not equal',\n  filterOperatorStartsWith: 'starts with',\n  filterOperatorEndsWith: 'ends with',\n  filterOperatorIs: 'is',\n  filterOperatorNot: 'is not',\n  filterOperatorAfter: 'is after',\n  filterOperatorOnOrAfter: 'is on or after',\n  filterOperatorBefore: 'is before',\n  filterOperatorOnOrBefore: 'is on or before',\n  filterOperatorIsEmpty: 'is empty',\n  filterOperatorIsNotEmpty: 'is not empty',\n  filterOperatorIsAnyOf: 'is any of',\n  'filterOperator=': '=',\n  'filterOperator!=': '!=',\n  'filterOperator>': '>',\n  'filterOperator>=': '>=',\n  'filterOperator<': '<',\n  'filterOperator<=': '<=',\n  // Header filter operators text\n  headerFilterOperatorContains: 'Contains',\n  headerFilterOperatorDoesNotContain: 'Does not contain',\n  headerFilterOperatorEquals: 'Equals',\n  headerFilterOperatorDoesNotEqual: 'Does not equal',\n  headerFilterOperatorStartsWith: 'Starts with',\n  headerFilterOperatorEndsWith: 'Ends with',\n  headerFilterOperatorIs: 'Is',\n  headerFilterOperatorNot: 'Is not',\n  headerFilterOperatorAfter: 'Is after',\n  headerFilterOperatorOnOrAfter: 'Is on or after',\n  headerFilterOperatorBefore: 'Is before',\n  headerFilterOperatorOnOrBefore: 'Is on or before',\n  headerFilterOperatorIsEmpty: 'Is empty',\n  headerFilterOperatorIsNotEmpty: 'Is not empty',\n  headerFilterOperatorIsAnyOf: 'Is any of',\n  'headerFilterOperator=': 'Equals',\n  'headerFilterOperator!=': 'Not equals',\n  'headerFilterOperator>': 'Greater than',\n  'headerFilterOperator>=': 'Greater than or equal to',\n  'headerFilterOperator<': 'Less than',\n  'headerFilterOperator<=': 'Less than or equal to',\n  // Filter values text\n  filterValueAny: 'any',\n  filterValueTrue: 'true',\n  filterValueFalse: 'false',\n  // Column menu text\n  columnMenuLabel: 'Menu',\n  columnMenuShowColumns: 'Show columns',\n  columnMenuManageColumns: 'Manage columns',\n  columnMenuFilter: 'Filter',\n  columnMenuHideColumn: 'Hide column',\n  columnMenuUnsort: 'Unsort',\n  columnMenuSortAsc: 'Sort by ASC',\n  columnMenuSortDesc: 'Sort by DESC',\n  // Column header text\n  columnHeaderFiltersTooltipActive: count => count !== 1 ? `${count} active filters` : `${count} active filter`,\n  columnHeaderFiltersLabel: 'Show filters',\n  columnHeaderSortIconLabel: 'Sort',\n  // Rows selected footer text\n  footerRowSelected: count => count !== 1 ? `${count.toLocaleString()} rows selected` : `${count.toLocaleString()} row selected`,\n  // Total row amount footer text\n  footerTotalRows: 'Total Rows:',\n  // Total visible row amount footer text\n  footerTotalVisibleRows: (visibleCount, totalCount) => `${visibleCount.toLocaleString()} of ${totalCount.toLocaleString()}`,\n  // Checkbox selection text\n  checkboxSelectionHeaderName: 'Checkbox selection',\n  checkboxSelectionSelectAllRows: 'Select all rows',\n  checkboxSelectionUnselectAllRows: 'Unselect all rows',\n  checkboxSelectionSelectRow: 'Select row',\n  checkboxSelectionUnselectRow: 'Unselect row',\n  // Boolean cell text\n  booleanCellTrueLabel: 'yes',\n  booleanCellFalseLabel: 'no',\n  // Actions cell more text\n  actionsCellMore: 'more',\n  // Column pinning text\n  pinToLeft: 'Pin to left',\n  pinToRight: 'Pin to right',\n  unpin: 'Unpin',\n  // Tree Data\n  treeDataGroupingHeaderName: 'Group',\n  treeDataExpand: 'see children',\n  treeDataCollapse: 'hide children',\n  // Grouping columns\n  groupingColumnHeaderName: 'Group',\n  groupColumn: name => `Group by ${name}`,\n  unGroupColumn: name => `Stop grouping by ${name}`,\n  // Master/detail\n  detailPanelToggle: 'Detail panel toggle',\n  expandDetailPanel: 'Expand',\n  collapseDetailPanel: 'Collapse',\n  // Used core components translation keys\n  MuiTablePagination: {},\n  // Row reordering text\n  rowReorderingHeaderName: 'Row reordering',\n  // Aggregation\n  aggregationMenuItemHeader: 'Aggregation',\n  aggregationFunctionLabelSum: 'sum',\n  aggregationFunctionLabelAvg: 'avg',\n  aggregationFunctionLabelMin: 'min',\n  aggregationFunctionLabelMax: 'max',\n  aggregationFunctionLabelSize: 'size'\n};","import * as React from 'react';\nimport { GridApiContext } from \"../components/GridApiContext.js\";\nimport { GridPrivateApiContext } from \"../hooks/utils/useGridPrivateApiContext.js\";\nimport { GridRootPropsContext } from \"./GridRootPropsContext.js\";\nimport { GridConfigurationContext } from \"../components/GridConfigurationContext.js\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nexport function GridContextProvider({\n  privateApiRef,\n  configuration,\n  props,\n  children\n}) {\n  const apiRef = React.useRef(privateApiRef.current.getPublicApi());\n  return /*#__PURE__*/_jsx(GridConfigurationContext.Provider, {\n    value: configuration,\n    children: /*#__PURE__*/_jsx(GridRootPropsContext.Provider, {\n      value: props,\n      children: /*#__PURE__*/_jsx(GridPrivateApiContext.Provider, {\n        value: privateApiRef,\n        children: /*#__PURE__*/_jsx(GridApiContext.Provider, {\n          value: apiRef,\n          children: children\n        })\n      })\n    })\n  });\n}","import { createSelector, createSelectorMemoized } from \"../../../utils/createSelector.js\";\n/**\n * @category ColumnGrouping\n * @ignore - do not document.\n */\nexport const gridColumnGroupingSelector = state => state.columnGrouping;\nexport const gridColumnGroupsUnwrappedModelSelector = createSelectorMemoized(gridColumnGroupingSelector, columnGrouping => columnGrouping?.unwrappedGroupingModel ?? {});\nexport const gridColumnGroupsLookupSelector = createSelectorMemoized(gridColumnGroupingSelector, columnGrouping => columnGrouping?.lookup ?? {});\nexport const gridColumnGroupsHeaderStructureSelector = createSelectorMemoized(gridColumnGroupingSelector, columnGrouping => columnGrouping?.headerStructure ?? []);\nexport const gridColumnGroupsHeaderMaxDepthSelector = createSelector(gridColumnGroupingSelector, columnGrouping => columnGrouping?.maxDepth ?? 0);","export const gridColumnMenuSelector = state => state.columnMenu;","export const DEFAULT_GRID_AUTOSIZE_OPTIONS = {\n  includeHeaders: true,\n  includeOutliers: false,\n  outliersFactor: 1.5,\n  expand: false\n};\n\n/**\n * The Resize API interface that is available in the grid `apiRef`.\n */","export let GridPinnedColumnPosition = /*#__PURE__*/function (GridPinnedColumnPosition) {\n  GridPinnedColumnPosition[\"LEFT\"] = \"left\";\n  GridPinnedColumnPosition[\"RIGHT\"] = \"right\";\n  return GridPinnedColumnPosition;\n}({});\nexport const EMPTY_PINNED_COLUMN_FIELDS = {\n  left: [],\n  right: []\n};","/**\n * Get the theme state\n * @category Core\n */\nexport const gridIsRtlSelector = state => state.isRtl;","import { createSelector, createSelectorMemoized } from \"../../../utils/createSelector.js\";\nimport { EMPTY_PINNED_COLUMN_FIELDS } from \"./gridColumnsInterfaces.js\";\nimport { gridIsRtlSelector } from \"../../core/gridCoreSelector.js\";\n\n/**\n * Get the columns state\n * @category Columns\n */\nexport const gridColumnsStateSelector = state => state.columns;\n\n/**\n * Get an array of column fields in the order rendered on screen.\n * @category Columns\n */\nexport const gridColumnFieldsSelector = createSelector(gridColumnsStateSelector, columnsState => columnsState.orderedFields);\n\n/**\n * Get the columns as a lookup (an object containing the field for keys and the definition for values).\n * @category Columns\n */\nexport const gridColumnLookupSelector = createSelector(gridColumnsStateSelector, columnsState => columnsState.lookup);\n\n/**\n * Get an array of column definitions in the order rendered on screen..\n * @category Columns\n */\nexport const gridColumnDefinitionsSelector = createSelectorMemoized(gridColumnFieldsSelector, gridColumnLookupSelector, (allFields, lookup) => allFields.map(field => lookup[field]));\n\n/**\n * Get the column visibility model, containing the visibility status of each column.\n * If a column is not registered in the model, it is visible.\n * @category Visible Columns\n */\nexport const gridColumnVisibilityModelSelector = createSelector(gridColumnsStateSelector, columnsState => columnsState.columnVisibilityModel);\n\n/**\n * Get the visible columns as a lookup (an object containing the field for keys and the definition for values).\n * @category Visible Columns\n */\nexport const gridVisibleColumnDefinitionsSelector = createSelectorMemoized(gridColumnDefinitionsSelector, gridColumnVisibilityModelSelector, (columns, columnVisibilityModel) => columns.filter(column => columnVisibilityModel[column.field] !== false));\n\n/**\n * Get the field of each visible column.\n * @category Visible Columns\n */\nexport const gridVisibleColumnFieldsSelector = createSelectorMemoized(gridVisibleColumnDefinitionsSelector, visibleColumns => visibleColumns.map(column => column.field));\n\n/**\n * Get the visible pinned columns model.\n * @category Visible Columns\n */\nexport const gridPinnedColumnsSelector = state => state.pinnedColumns;\n\n/**\n * Get the visible pinned columns.\n * @category Visible Columns\n */\nexport const gridVisiblePinnedColumnDefinitionsSelector = createSelectorMemoized(gridColumnsStateSelector, gridPinnedColumnsSelector, gridVisibleColumnFieldsSelector, gridIsRtlSelector, (columnsState, model, visibleColumnFields, isRtl) => {\n  const visiblePinnedFields = filterVisibleColumns(model, visibleColumnFields, isRtl);\n  const visiblePinnedColumns = {\n    left: visiblePinnedFields.left.map(field => columnsState.lookup[field]),\n    right: visiblePinnedFields.right.map(field => columnsState.lookup[field])\n  };\n  return visiblePinnedColumns;\n});\nfunction filterVisibleColumns(pinnedColumns, columns, invert) {\n  if (!Array.isArray(pinnedColumns.left) && !Array.isArray(pinnedColumns.right)) {\n    return EMPTY_PINNED_COLUMN_FIELDS;\n  }\n  if (pinnedColumns.left?.length === 0 && pinnedColumns.right?.length === 0) {\n    return EMPTY_PINNED_COLUMN_FIELDS;\n  }\n  const filter = (newPinnedColumns, remainingColumns) => {\n    if (!Array.isArray(newPinnedColumns)) {\n      return [];\n    }\n    return newPinnedColumns.filter(field => remainingColumns.includes(field));\n  };\n  const leftPinnedColumns = filter(pinnedColumns.left, columns);\n  const columnsWithoutLeftPinnedColumns = columns.filter(\n  // Filter out from the remaining columns those columns already pinned to the left\n  field => !leftPinnedColumns.includes(field));\n  const rightPinnedColumns = filter(pinnedColumns.right, columnsWithoutLeftPinnedColumns);\n  if (invert) {\n    return {\n      left: rightPinnedColumns,\n      right: leftPinnedColumns\n    };\n  }\n  return {\n    left: leftPinnedColumns,\n    right: rightPinnedColumns\n  };\n}\n\n/**\n * Get the left position in pixel of each visible columns relative to the left of the first column.\n * @category Visible Columns\n */\nexport const gridColumnPositionsSelector = createSelectorMemoized(gridVisibleColumnDefinitionsSelector, visibleColumns => {\n  const positions = [];\n  let currentPosition = 0;\n  for (let i = 0; i < visibleColumns.length; i += 1) {\n    positions.push(currentPosition);\n    currentPosition += visibleColumns[i].computedWidth;\n  }\n  return positions;\n});\n\n/**\n * Get the summed width of all the visible columns.\n * @category Visible Columns\n */\nexport const gridColumnsTotalWidthSelector = createSelector(gridVisibleColumnDefinitionsSelector, gridColumnPositionsSelector, (visibleColumns, positions) => {\n  const colCount = visibleColumns.length;\n  if (colCount === 0) {\n    return 0;\n  }\n  return positions[colCount - 1] + visibleColumns[colCount - 1].computedWidth;\n});\n\n/**\n * Get the filterable columns as an array.\n * @category Columns\n */\nexport const gridFilterableColumnDefinitionsSelector = createSelectorMemoized(gridColumnDefinitionsSelector, columns => columns.filter(col => col.filterable));\n\n/**\n * Get the filterable columns as a lookup (an object containing the field for keys and the definition for values).\n * @category Columns\n */\nexport const gridFilterableColumnLookupSelector = createSelectorMemoized(gridColumnDefinitionsSelector, columns => columns.reduce((acc, col) => {\n  if (col.filterable) {\n    acc[col.field] = col;\n  }\n  return acc;\n}, {}));\n\n/**\n * Checks if some column has a colSpan field.\n * @category Columns\n * @ignore - Do not document\n */\nexport const gridHasColSpanSelector = createSelectorMemoized(gridColumnDefinitionsSelector, columns => columns.some(column => column.colSpan !== undefined));","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport { DEFAULT_GRID_COL_TYPE_KEY, GRID_STRING_COL_DEF, getGridDefaultColumnTypes } from \"../../../colDef/index.js\";\nimport { gridColumnsStateSelector, gridColumnVisibilityModelSelector } from \"./gridColumnsSelector.js\";\nimport { clamp } from \"../../../utils/utils.js\";\nimport { gridDensityFactorSelector } from \"../density/densitySelector.js\";\nimport { gridHeaderFilteringEnabledSelector } from \"../headerFiltering/gridHeaderFilteringSelectors.js\";\nimport { gridColumnGroupsHeaderMaxDepthSelector } from \"../columnGrouping/gridColumnGroupsSelector.js\";\nexport const COLUMNS_DIMENSION_PROPERTIES = ['maxWidth', 'minWidth', 'width', 'flex'];\nconst COLUMN_TYPES = getGridDefaultColumnTypes();\n\n/**\n * Computes width for flex columns.\n * Based on CSS Flexbox specification:\n * https://drafts.csswg.org/css-flexbox-1/#resolve-flexible-lengths\n */\nexport function computeFlexColumnsWidth({\n  initialFreeSpace,\n  totalFlexUnits,\n  flexColumns\n}) {\n  const uniqueFlexColumns = new Set(flexColumns.map(col => col.field));\n  const flexColumnsLookup = {\n    all: {},\n    frozenFields: [],\n    freeze: field => {\n      const value = flexColumnsLookup.all[field];\n      if (value && value.frozen !== true) {\n        flexColumnsLookup.all[field].frozen = true;\n        flexColumnsLookup.frozenFields.push(field);\n      }\n    }\n  };\n\n  // Step 5 of https://drafts.csswg.org/css-flexbox-1/#resolve-flexible-lengths\n  function loopOverFlexItems() {\n    // 5a: If all the flex items on the line are frozen, free space has been distributed.\n    if (flexColumnsLookup.frozenFields.length === uniqueFlexColumns.size) {\n      return;\n    }\n    const violationsLookup = {\n      min: {},\n      max: {}\n    };\n    let remainingFreeSpace = initialFreeSpace;\n    let flexUnits = totalFlexUnits;\n    let totalViolation = 0;\n\n    // 5b: Calculate the remaining free space\n    flexColumnsLookup.frozenFields.forEach(field => {\n      remainingFreeSpace -= flexColumnsLookup.all[field].computedWidth;\n      flexUnits -= flexColumnsLookup.all[field].flex;\n    });\n    for (let i = 0; i < flexColumns.length; i += 1) {\n      const column = flexColumns[i];\n      if (flexColumnsLookup.all[column.field] && flexColumnsLookup.all[column.field].frozen === true) {\n        continue;\n      }\n\n      // 5c: Distribute remaining free space proportional to the flex factors\n      const widthPerFlexUnit = remainingFreeSpace / flexUnits;\n      let computedWidth = widthPerFlexUnit * column.flex;\n\n      // 5d: Fix min/max violations\n      if (computedWidth < column.minWidth) {\n        totalViolation += column.minWidth - computedWidth;\n        computedWidth = column.minWidth;\n        violationsLookup.min[column.field] = true;\n      } else if (computedWidth > column.maxWidth) {\n        totalViolation += column.maxWidth - computedWidth;\n        computedWidth = column.maxWidth;\n        violationsLookup.max[column.field] = true;\n      }\n      flexColumnsLookup.all[column.field] = {\n        frozen: false,\n        computedWidth,\n        flex: column.flex\n      };\n    }\n\n    // 5e: Freeze over-flexed items\n    if (totalViolation < 0) {\n      // Freeze all the items with max violations\n      Object.keys(violationsLookup.max).forEach(field => {\n        flexColumnsLookup.freeze(field);\n      });\n    } else if (totalViolation > 0) {\n      // Freeze all the items with min violations\n      Object.keys(violationsLookup.min).forEach(field => {\n        flexColumnsLookup.freeze(field);\n      });\n    } else {\n      // Freeze all items\n      flexColumns.forEach(({\n        field\n      }) => {\n        flexColumnsLookup.freeze(field);\n      });\n    }\n\n    // 5f: Return to the start of this loop\n    loopOverFlexItems();\n  }\n  loopOverFlexItems();\n  return flexColumnsLookup.all;\n}\n\n/**\n * Compute the `computedWidth` (ie: the width the column should have during rendering) based on the `width` / `flex` / `minWidth` / `maxWidth` properties of `GridColDef`.\n * The columns already have been merged with there `type` default values for `minWidth`, `maxWidth` and `width`, thus the `!` for those properties below.\n * TODO: Unit test this function in depth and only keep basic cases for the whole grid testing.\n * TODO: Improve the `GridColDef` typing to reflect the fact that `minWidth` / `maxWidth` and `width` can't be null after the merge with the `type` default values.\n */\nexport const hydrateColumnsWidth = (rawState, dimensions) => {\n  const columnsLookup = {};\n  let totalFlexUnits = 0;\n  let widthAllocatedBeforeFlex = 0;\n  const flexColumns = [];\n\n  // For the non-flex columns, compute their width\n  // For the flex columns, compute their minimum width and how much width must be allocated during the flex allocation\n  rawState.orderedFields.forEach(columnField => {\n    let column = rawState.lookup[columnField];\n    let computedWidth = 0;\n    let isFlex = false;\n    if (rawState.columnVisibilityModel[columnField] !== false) {\n      if (column.flex && column.flex > 0) {\n        totalFlexUnits += column.flex;\n        isFlex = true;\n      } else {\n        computedWidth = clamp(column.width || GRID_STRING_COL_DEF.width, column.minWidth || GRID_STRING_COL_DEF.minWidth, column.maxWidth || GRID_STRING_COL_DEF.maxWidth);\n      }\n      widthAllocatedBeforeFlex += computedWidth;\n    }\n    if (column.computedWidth !== computedWidth) {\n      column = _extends({}, column, {\n        computedWidth\n      });\n    }\n    if (isFlex) {\n      flexColumns.push(column);\n    }\n    columnsLookup[columnField] = column;\n  });\n  const availableWidth = dimensions === undefined ? 0 : dimensions.viewportOuterSize.width - (dimensions.hasScrollY ? dimensions.scrollbarSize : 0);\n  const initialFreeSpace = Math.max(availableWidth - widthAllocatedBeforeFlex, 0);\n\n  // Allocate the remaining space to the flex columns\n  if (totalFlexUnits > 0 && availableWidth > 0) {\n    const computedColumnWidths = computeFlexColumnsWidth({\n      initialFreeSpace,\n      totalFlexUnits,\n      flexColumns\n    });\n    Object.keys(computedColumnWidths).forEach(field => {\n      columnsLookup[field].computedWidth = computedColumnWidths[field].computedWidth;\n    });\n  }\n  return _extends({}, rawState, {\n    lookup: columnsLookup\n  });\n};\n\n/**\n * Apply the order and the dimensions of the initial state.\n * The columns not registered in `orderedFields` will be placed after the imported columns.\n */\nexport const applyInitialState = (columnsState, initialState) => {\n  if (!initialState) {\n    return columnsState;\n  }\n  const {\n    orderedFields = [],\n    dimensions = {}\n  } = initialState;\n  const columnsWithUpdatedDimensions = Object.keys(dimensions);\n  if (columnsWithUpdatedDimensions.length === 0 && orderedFields.length === 0) {\n    return columnsState;\n  }\n  const orderedFieldsLookup = {};\n  const cleanOrderedFields = [];\n  for (let i = 0; i < orderedFields.length; i += 1) {\n    const field = orderedFields[i];\n\n    // Ignores the fields in the initialState that matches no field on the current column state\n    if (columnsState.lookup[field]) {\n      orderedFieldsLookup[field] = true;\n      cleanOrderedFields.push(field);\n    }\n  }\n  const newOrderedFields = cleanOrderedFields.length === 0 ? columnsState.orderedFields : [...cleanOrderedFields, ...columnsState.orderedFields.filter(field => !orderedFieldsLookup[field])];\n  const newColumnLookup = _extends({}, columnsState.lookup);\n  for (let i = 0; i < columnsWithUpdatedDimensions.length; i += 1) {\n    const field = columnsWithUpdatedDimensions[i];\n    const newColDef = _extends({}, newColumnLookup[field], {\n      hasBeenResized: true\n    });\n    Object.entries(dimensions[field]).forEach(([key, value]) => {\n      newColDef[key] = value === -1 ? Infinity : value;\n    });\n    newColumnLookup[field] = newColDef;\n  }\n  const newColumnsState = _extends({}, columnsState, {\n    orderedFields: newOrderedFields,\n    lookup: newColumnLookup\n  });\n  return newColumnsState;\n};\nfunction getDefaultColTypeDef(type) {\n  let colDef = COLUMN_TYPES[DEFAULT_GRID_COL_TYPE_KEY];\n  if (type && COLUMN_TYPES[type]) {\n    colDef = COLUMN_TYPES[type];\n  }\n  return colDef;\n}\nexport const createColumnsState = ({\n  apiRef,\n  columnsToUpsert,\n  initialState,\n  columnVisibilityModel = gridColumnVisibilityModelSelector(apiRef),\n  keepOnlyColumnsToUpsert = false\n}) => {\n  const isInsideStateInitializer = !apiRef.current.state.columns;\n  let columnsState;\n  if (isInsideStateInitializer) {\n    columnsState = {\n      orderedFields: [],\n      lookup: {},\n      columnVisibilityModel\n    };\n  } else {\n    const currentState = gridColumnsStateSelector(apiRef.current.state);\n    columnsState = {\n      orderedFields: keepOnlyColumnsToUpsert ? [] : [...currentState.orderedFields],\n      lookup: _extends({}, currentState.lookup),\n      // Will be cleaned later if keepOnlyColumnsToUpsert=true\n      columnVisibilityModel\n    };\n  }\n  let columnsToKeep = {};\n  if (keepOnlyColumnsToUpsert && !isInsideStateInitializer) {\n    columnsToKeep = Object.keys(columnsState.lookup).reduce((acc, key) => _extends({}, acc, {\n      [key]: false\n    }), {});\n  }\n  const columnsToUpsertLookup = {};\n  columnsToUpsert.forEach(newColumn => {\n    const {\n      field\n    } = newColumn;\n    columnsToUpsertLookup[field] = true;\n    columnsToKeep[field] = true;\n    let existingState = columnsState.lookup[field];\n    if (existingState == null) {\n      existingState = _extends({}, getDefaultColTypeDef(newColumn.type), {\n        field,\n        hasBeenResized: false\n      });\n      columnsState.orderedFields.push(field);\n    } else if (keepOnlyColumnsToUpsert) {\n      columnsState.orderedFields.push(field);\n    }\n\n    // If the column type has changed - merge the existing state with the default column type definition\n    if (existingState && existingState.type !== newColumn.type) {\n      existingState = _extends({}, getDefaultColTypeDef(newColumn.type), {\n        field\n      });\n    }\n    let hasBeenResized = existingState.hasBeenResized;\n    COLUMNS_DIMENSION_PROPERTIES.forEach(key => {\n      if (newColumn[key] !== undefined) {\n        hasBeenResized = true;\n        if (newColumn[key] === -1) {\n          newColumn[key] = Infinity;\n        }\n      }\n    });\n    columnsState.lookup[field] = _extends({}, existingState, newColumn, {\n      hasBeenResized\n    });\n  });\n  if (keepOnlyColumnsToUpsert && !isInsideStateInitializer) {\n    Object.keys(columnsState.lookup).forEach(field => {\n      if (!columnsToKeep[field]) {\n        delete columnsState.lookup[field];\n      }\n    });\n  }\n  const columnsStateWithPreProcessing = apiRef.current.unstable_applyPipeProcessors('hydrateColumns', columnsState);\n  const columnsStateWithPortableColumns = applyInitialState(columnsStateWithPreProcessing, initialState);\n  return hydrateColumnsWidth(columnsStateWithPortableColumns, apiRef.current.getRootDimensions?.() ?? undefined);\n};\nexport function getFirstNonSpannedColumnToRender({\n  firstColumnToRender,\n  apiRef,\n  firstRowToRender,\n  lastRowToRender,\n  visibleRows\n}) {\n  let firstNonSpannedColumnToRender = firstColumnToRender;\n  for (let i = firstRowToRender; i < lastRowToRender; i += 1) {\n    const row = visibleRows[i];\n    if (row) {\n      const rowId = visibleRows[i].id;\n      const cellColSpanInfo = apiRef.current.unstable_getCellColSpanInfo(rowId, firstColumnToRender);\n      if (cellColSpanInfo && cellColSpanInfo.spannedByColSpan) {\n        firstNonSpannedColumnToRender = cellColSpanInfo.leftVisibleCellIndex;\n      }\n    }\n  }\n  return firstNonSpannedColumnToRender;\n}\nexport function getTotalHeaderHeight(apiRef, props) {\n  const densityFactor = gridDensityFactorSelector(apiRef);\n  const maxDepth = gridColumnGroupsHeaderMaxDepthSelector(apiRef);\n  const isHeaderFilteringEnabled = gridHeaderFilteringEnabledSelector(apiRef);\n  const columnHeadersHeight = Math.floor(props.columnHeaderHeight * densityFactor);\n  const filterHeadersHeight = isHeaderFilteringEnabled ? Math.floor((props.headerFilterHeight ?? props.columnHeaderHeight) * densityFactor) : 0;\n  return columnHeadersHeight * (1 + (maxDepth ?? 0)) + filterHeadersHeight;\n}","import { createSelector } from \"../../../utils/createSelector.js\";\nexport const COMPACT_DENSITY_FACTOR = 0.7;\nexport const COMFORTABLE_DENSITY_FACTOR = 1.3;\nconst DENSITY_FACTORS = {\n  compact: COMPACT_DENSITY_FACTOR,\n  comfortable: COMFORTABLE_DENSITY_FACTOR,\n  standard: 1\n};\nexport const gridDensitySelector = state => state.density;\nexport const gridDensityFactorSelector = createSelector(gridDensitySelector, density => DENSITY_FACTORS[density]);","export const gridDimensionsSelector = state => state.dimensions;","/**\n * Select the row editing state.\n */\nexport const gridEditRowsStateSelector = state => state.editRows;","import { createSelector, createSelectorMemoized } from \"../../../utils/createSelector.js\";\nimport { gridSortedRowEntriesSelector } from \"../sorting/gridSortingSelector.js\";\nimport { gridColumnLookupSelector } from \"../columns/gridColumnsSelector.js\";\nimport { gridRowMaximumTreeDepthSelector, gridRowTreeSelector } from \"../rows/gridRowsSelector.js\";\n\n/**\n * @category Filtering\n */\nconst gridFilterStateSelector = state => state.filter;\n\n/**\n * Get the current filter model.\n * @category Filtering\n */\nexport const gridFilterModelSelector = createSelector(gridFilterStateSelector, filterState => filterState.filterModel);\n\n/**\n * Get the current quick filter values.\n * @category Filtering\n */\nexport const gridQuickFilterValuesSelector = createSelector(gridFilterModelSelector, filterModel => filterModel.quickFilterValues);\n\n/**\n * @category Visible rows\n * @ignore - do not document.\n */\nexport const gridVisibleRowsLookupSelector = state => state.visibleRowsLookup;\n\n/**\n * @category Filtering\n * @ignore - do not document.\n */\nexport const gridFilteredRowsLookupSelector = createSelector(gridFilterStateSelector, filterState => filterState.filteredRowsLookup);\n\n/**\n * @category Filtering\n * @ignore - do not document.\n */\nexport const gridFilteredChildrenCountLookupSelector = createSelector(gridFilterStateSelector, filterState => filterState.filteredChildrenCountLookup);\n\n/**\n * @category Filtering\n * @ignore - do not document.\n */\nexport const gridFilteredDescendantCountLookupSelector = createSelector(gridFilterStateSelector, filterState => filterState.filteredDescendantCountLookup);\n\n/**\n * Get the id and the model of the rows accessible after the filtering process.\n * Does not contain the collapsed children.\n * @category Filtering\n */\nexport const gridExpandedSortedRowEntriesSelector = createSelectorMemoized(gridVisibleRowsLookupSelector, gridSortedRowEntriesSelector, (visibleRowsLookup, sortedRows) => sortedRows.filter(row => visibleRowsLookup[row.id] !== false));\n\n/**\n * Get the id of the rows accessible after the filtering process.\n * Does not contain the collapsed children.\n * @category Filtering\n */\nexport const gridExpandedSortedRowIdsSelector = createSelectorMemoized(gridExpandedSortedRowEntriesSelector, visibleSortedRowEntries => visibleSortedRowEntries.map(row => row.id));\n\n/**\n * Get the id and the model of the rows accessible after the filtering process.\n * Contains the collapsed children.\n * @category Filtering\n */\nexport const gridFilteredSortedRowEntriesSelector = createSelectorMemoized(gridFilteredRowsLookupSelector, gridSortedRowEntriesSelector, (filteredRowsLookup, sortedRows) => sortedRows.filter(row => filteredRowsLookup[row.id] !== false));\n\n/**\n * Get the id of the rows accessible after the filtering process.\n * Contains the collapsed children.\n * @category Filtering\n */\nexport const gridFilteredSortedRowIdsSelector = createSelectorMemoized(gridFilteredSortedRowEntriesSelector, filteredSortedRowEntries => filteredSortedRowEntries.map(row => row.id));\n\n/**\n * Get the ids to position in the current tree level lookup of the rows accessible after the filtering process.\n * Does not contain the collapsed children.\n * @category Filtering\n * @ignore - do not document.\n */\nexport const gridExpandedSortedRowTreeLevelPositionLookupSelector = createSelectorMemoized(gridExpandedSortedRowIdsSelector, gridRowTreeSelector, (visibleSortedRowIds, rowTree) => {\n  const depthPositionCounter = {};\n  let lastDepth = 0;\n  return visibleSortedRowIds.reduce((acc, rowId) => {\n    const rowNode = rowTree[rowId];\n    if (!depthPositionCounter[rowNode.depth]) {\n      depthPositionCounter[rowNode.depth] = 0;\n    }\n\n    // going deeper in the tree should reset the counter\n    // since it might have been used in some other branch at the same level, up in the tree\n    // going back up should keep the counter and continue where it left off\n    if (rowNode.depth > lastDepth) {\n      depthPositionCounter[rowNode.depth] = 0;\n    }\n    lastDepth = rowNode.depth;\n    depthPositionCounter[rowNode.depth] += 1;\n    acc[rowId] = depthPositionCounter[rowNode.depth];\n    return acc;\n  }, {});\n});\n\n/**\n * Get the id and the model of the top level rows accessible after the filtering process.\n * @category Filtering\n */\nexport const gridFilteredSortedTopLevelRowEntriesSelector = createSelectorMemoized(gridExpandedSortedRowEntriesSelector, gridRowTreeSelector, gridRowMaximumTreeDepthSelector, (visibleSortedRows, rowTree, rowTreeDepth) => {\n  if (rowTreeDepth < 2) {\n    return visibleSortedRows;\n  }\n  return visibleSortedRows.filter(row => rowTree[row.id]?.depth === 0);\n});\n\n/**\n * Get the amount of rows accessible after the filtering process.\n * @category Filtering\n */\nexport const gridExpandedRowCountSelector = createSelector(gridExpandedSortedRowEntriesSelector, visibleSortedRows => visibleSortedRows.length);\n\n/**\n * Get the amount of top level rows accessible after the filtering process.\n * @category Filtering\n */\nexport const gridFilteredTopLevelRowCountSelector = createSelector(gridFilteredSortedTopLevelRowEntriesSelector, visibleSortedTopLevelRows => visibleSortedTopLevelRows.length);\n\n/**\n * Get the amount of rows accessible after the filtering process.\n * Includes top level and descendant rows.\n * @category Filtering\n */\nexport const gridFilteredRowCountSelector = createSelector(gridFilteredSortedRowEntriesSelector, filteredSortedRowEntries => filteredSortedRowEntries.length);\n\n/**\n * Get the amount of descendant rows accessible after the filtering process.\n * @category Filtering\n */\nexport const gridFilteredDescendantRowCountSelector = createSelector(gridFilteredRowCountSelector, gridFilteredTopLevelRowCountSelector, (totalRowCount, topLevelRowCount) => totalRowCount - topLevelRowCount);\n\n/**\n * @category Filtering\n * @ignore - do not document.\n */\nexport const gridFilterActiveItemsSelector = createSelectorMemoized(gridFilterModelSelector, gridColumnLookupSelector, (filterModel, columnLookup) => filterModel.items?.filter(item => {\n  if (!item.field) {\n    return false;\n  }\n  const column = columnLookup[item.field];\n  if (!column?.filterOperators || column?.filterOperators?.length === 0) {\n    return false;\n  }\n  const filterOperator = column.filterOperators.find(operator => operator.value === item.operator);\n  if (!filterOperator) {\n    return false;\n  }\n  return !filterOperator.InputComponent || item.value != null && item.value?.toString() !== '';\n}));\n/**\n * @category Filtering\n * @ignore - do not document.\n */\nexport const gridFilterActiveItemsLookupSelector = createSelectorMemoized(gridFilterActiveItemsSelector, activeFilters => {\n  const result = activeFilters.reduce((res, filterItem) => {\n    if (!res[filterItem.field]) {\n      res[filterItem.field] = [filterItem];\n    } else {\n      res[filterItem.field].push(filterItem);\n    }\n    return res;\n  }, {});\n  return result;\n});","import { GridLogicOperator } from \"../../../models/gridFilterItem.js\";\nexport const getDefaultGridFilterModel = () => ({\n  items: [],\n  logicOperator: GridLogicOperator.And,\n  quickFilterValues: [],\n  quickFilterLogicOperator: GridLogicOperator.And\n});\n\n/**\n * @param {GridRowId} rowId The id of the row we want to filter.\n * @param {(filterItem: GridFilterItem) => boolean} shouldApplyItem An optional callback to allow the filtering engine to only apply some items.\n */\n\n/**\n * Visibility status for each row.\n * A row is visible if it is passing the filters AND if its parents are expanded.\n * If a row is not registered in this lookup, it is visible.\n */","export function getPublicApiRef(apiRef) {\n  return {\n    current: apiRef.current.getPublicApi()\n  };\n}","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport { warnOnce } from '@mui/x-internals/warning';\nimport { GridLogicOperator } from \"../../../models/index.js\";\nimport { getDefaultGridFilterModel } from \"./gridFilterState.js\";\nimport { getPublicApiRef } from \"../../../utils/getPublicApiRef.js\";\nimport { gridColumnFieldsSelector, gridColumnLookupSelector, gridVisibleColumnFieldsSelector } from \"../columns/index.js\";\nlet hasEval;\nfunction getHasEval() {\n  if (hasEval !== undefined) {\n    return hasEval;\n  }\n  try {\n    hasEval = new Function('return true')();\n  } catch (_) {\n    hasEval = false;\n  }\n  return hasEval;\n}\n/**\n * Adds default values to the optional fields of a filter items.\n * @param {GridFilterItem} item The raw filter item.\n * @param {React.MutableRefObject<GridPrivateApiCommunity>} apiRef The API of the grid.\n * @return {GridFilterItem} The clean filter item with an uniq ID and an always-defined operator.\n * TODO: Make the typing reflect the different between GridFilterInputItem and GridFilterItem.\n */\nexport const cleanFilterItem = (item, apiRef) => {\n  const cleanItem = _extends({}, item);\n  if (cleanItem.id == null) {\n    cleanItem.id = Math.round(Math.random() * 1e5);\n  }\n  if (cleanItem.operator == null) {\n    // Selects a default operator\n    // We don't use `apiRef.current.getColumn` because it is not ready during state initialization\n    const column = gridColumnLookupSelector(apiRef)[cleanItem.field];\n    cleanItem.operator = column && column.filterOperators[0].value;\n  }\n  return cleanItem;\n};\nexport const sanitizeFilterModel = (model, disableMultipleColumnsFiltering, apiRef) => {\n  const hasSeveralItems = model.items.length > 1;\n  let items;\n  if (hasSeveralItems && disableMultipleColumnsFiltering) {\n    if (process.env.NODE_ENV !== 'production') {\n      warnOnce(['MUI X: The `filterModel` can only contain a single item when the `disableMultipleColumnsFiltering` prop is set to `true`.', 'If you are using the community version of the `DataGrid`, this prop is always `true`.'], 'error');\n    }\n    items = [model.items[0]];\n  } else {\n    items = model.items;\n  }\n  const hasItemsWithoutIds = hasSeveralItems && items.some(item => item.id == null);\n  const hasItemWithoutOperator = items.some(item => item.operator == null);\n  if (process.env.NODE_ENV !== 'production') {\n    if (hasItemsWithoutIds) {\n      warnOnce('MUI X: The `id` field is required on `filterModel.items` when you use multiple filters.', 'error');\n    }\n  }\n  if (process.env.NODE_ENV !== 'production') {\n    if (hasItemWithoutOperator) {\n      warnOnce('MUI X: The `operator` field is required on `filterModel.items`, one or more of your filtering item has no `operator` provided.', 'error');\n    }\n  }\n  if (hasItemWithoutOperator || hasItemsWithoutIds) {\n    return _extends({}, model, {\n      items: items.map(item => cleanFilterItem(item, apiRef))\n    });\n  }\n  if (model.items !== items) {\n    return _extends({}, model, {\n      items\n    });\n  }\n  return model;\n};\nexport const mergeStateWithFilterModel = (filterModel, disableMultipleColumnsFiltering, apiRef) => filteringState => _extends({}, filteringState, {\n  filterModel: sanitizeFilterModel(filterModel, disableMultipleColumnsFiltering, apiRef)\n});\nexport const removeDiacritics = value => {\n  if (typeof value === 'string') {\n    return value.normalize('NFD').replace(/[\\u0300-\\u036f]/g, '');\n  }\n  return value;\n};\nconst getFilterCallbackFromItem = (filterItem, apiRef) => {\n  if (!filterItem.field || !filterItem.operator) {\n    return null;\n  }\n  const column = apiRef.current.getColumn(filterItem.field);\n  if (!column) {\n    return null;\n  }\n  let parsedValue;\n  if (column.valueParser) {\n    const parser = column.valueParser;\n    parsedValue = Array.isArray(filterItem.value) ? filterItem.value?.map(x => parser(x, undefined, column, apiRef)) : parser(filterItem.value, undefined, column, apiRef);\n  } else {\n    parsedValue = filterItem.value;\n  }\n  const {\n    ignoreDiacritics\n  } = apiRef.current.rootProps;\n  if (ignoreDiacritics) {\n    parsedValue = removeDiacritics(parsedValue);\n  }\n  const newFilterItem = _extends({}, filterItem, {\n    value: parsedValue\n  });\n  const filterOperators = column.filterOperators;\n  if (!filterOperators?.length) {\n    throw new Error(`MUI X: No filter operators found for column '${column.field}'.`);\n  }\n  const filterOperator = filterOperators.find(operator => operator.value === newFilterItem.operator);\n  if (!filterOperator) {\n    throw new Error(`MUI X: No filter operator found for column '${column.field}' and operator value '${newFilterItem.operator}'.`);\n  }\n  const publicApiRef = getPublicApiRef(apiRef);\n  const applyFilterOnRow = filterOperator.getApplyFilterFn(newFilterItem, column);\n  if (typeof applyFilterOnRow !== 'function') {\n    return null;\n  }\n  return {\n    item: newFilterItem,\n    fn: row => {\n      let value = apiRef.current.getRowValue(row, column);\n      if (ignoreDiacritics) {\n        value = removeDiacritics(value);\n      }\n      return applyFilterOnRow(value, row, column, publicApiRef);\n    }\n  };\n};\nlet filterItemsApplierId = 1;\n\n/**\n * Generates a method to easily check if a row is matching the current filter model.\n * @param {GridFilterModel} filterModel The model with which we want to filter the rows.\n * @param {React.MutableRefObject<GridPrivateApiCommunity>} apiRef The API of the grid.\n * @returns {GridAggregatedFilterItemApplier | null} A method that checks if a row is matching the current filter model. If `null`, we consider that all the rows are matching the filters.\n */\nconst buildAggregatedFilterItemsApplier = (filterModel, apiRef, disableEval) => {\n  const {\n    items\n  } = filterModel;\n  const appliers = items.map(item => getFilterCallbackFromItem(item, apiRef)).filter(callback => !!callback);\n  if (appliers.length === 0) {\n    return null;\n  }\n  if (disableEval || !getHasEval()) {\n    // This is the original logic, which is used if `eval()` is not supported (aka prevented by CSP).\n    return (row, shouldApplyFilter) => {\n      const resultPerItemId = {};\n      for (let i = 0; i < appliers.length; i += 1) {\n        const applier = appliers[i];\n        if (!shouldApplyFilter || shouldApplyFilter(applier.item.field)) {\n          resultPerItemId[applier.item.id] = applier.fn(row);\n        }\n      }\n      return resultPerItemId;\n    };\n  }\n\n  // We generate a new function with `new Function()` to avoid expensive patterns for JS engines\n  // such as a dynamic object assignment, for example `{ [dynamicKey]: value }`.\n  const filterItemCore = new Function('appliers', 'row', 'shouldApplyFilter', `\"use strict\";\n${appliers.map((applier, i) => `const shouldApply${i} = !shouldApplyFilter || shouldApplyFilter(${JSON.stringify(applier.item.field)});`).join('\\n')}\n\nconst result$$ = {\n${appliers.map((applier, i) => `  ${JSON.stringify(String(applier.item.id))}: !shouldApply${i} ? false : appliers[${i}].fn(row),`).join('\\n')}\n};\n\nreturn result$$;`.replaceAll('$$', String(filterItemsApplierId)));\n  filterItemsApplierId += 1;\n\n  // Assign to the arrow function a name to help debugging\n  const filterItem = (row, shouldApplyItem) => filterItemCore(appliers, row, shouldApplyItem);\n  return filterItem;\n};\nexport const shouldQuickFilterExcludeHiddenColumns = filterModel => {\n  return filterModel.quickFilterExcludeHiddenColumns ?? true;\n};\n\n/**\n * Generates a method to easily check if a row is matching the current quick filter.\n * @param {any[]} filterModel The model with which we want to filter the rows.\n * @param {React.MutableRefObject<GridPrivateApiCommunity>} apiRef The API of the grid.\n * @returns {GridAggregatedFilterItemApplier | null} A method that checks if a row is matching the current filter model. If `null`, we consider that all the rows are matching the filters.\n */\nconst buildAggregatedQuickFilterApplier = (filterModel, apiRef) => {\n  const quickFilterValues = filterModel.quickFilterValues?.filter(Boolean) ?? [];\n  if (quickFilterValues.length === 0) {\n    return null;\n  }\n  const columnFields = shouldQuickFilterExcludeHiddenColumns(filterModel) ? gridVisibleColumnFieldsSelector(apiRef) : gridColumnFieldsSelector(apiRef);\n  const appliersPerField = [];\n  const {\n    ignoreDiacritics\n  } = apiRef.current.rootProps;\n  const publicApiRef = getPublicApiRef(apiRef);\n  columnFields.forEach(field => {\n    const column = apiRef.current.getColumn(field);\n    const getApplyQuickFilterFn = column?.getApplyQuickFilterFn;\n    if (getApplyQuickFilterFn) {\n      appliersPerField.push({\n        column,\n        appliers: quickFilterValues.map(quickFilterValue => {\n          const value = ignoreDiacritics ? removeDiacritics(quickFilterValue) : quickFilterValue;\n          return {\n            fn: getApplyQuickFilterFn(value, column, publicApiRef)\n          };\n        })\n      });\n    }\n  });\n  return function isRowMatchingQuickFilter(row, shouldApplyFilter) {\n    const result = {};\n\n    /* eslint-disable no-labels */\n    outer: for (let v = 0; v < quickFilterValues.length; v += 1) {\n      const filterValue = quickFilterValues[v];\n      for (let i = 0; i < appliersPerField.length; i += 1) {\n        const {\n          column,\n          appliers\n        } = appliersPerField[i];\n        const {\n          field\n        } = column;\n        if (shouldApplyFilter && !shouldApplyFilter(field)) {\n          continue;\n        }\n        const applier = appliers[v];\n        let value = apiRef.current.getRowValue(row, column);\n        if (applier.fn === null) {\n          continue;\n        }\n        if (ignoreDiacritics) {\n          value = removeDiacritics(value);\n        }\n        const isMatching = applier.fn(value, row, column, publicApiRef);\n        if (isMatching) {\n          result[filterValue] = true;\n          continue outer;\n        }\n      }\n      result[filterValue] = false;\n    }\n    return result;\n  };\n};\nexport const buildAggregatedFilterApplier = (filterModel, apiRef, disableEval) => {\n  const isRowMatchingFilterItems = buildAggregatedFilterItemsApplier(filterModel, apiRef, disableEval);\n  const isRowMatchingQuickFilter = buildAggregatedQuickFilterApplier(filterModel, apiRef);\n  return function isRowMatchingFilters(row, shouldApplyFilter, result) {\n    result.passingFilterItems = isRowMatchingFilterItems?.(row, shouldApplyFilter) ?? null;\n    result.passingQuickFilterValues = isRowMatchingQuickFilter?.(row, shouldApplyFilter) ?? null;\n  };\n};\nconst isNotNull = result => result != null;\nconst filterModelItems = (cache, apiRef, items) => {\n  if (!cache.cleanedFilterItems) {\n    cache.cleanedFilterItems = items.filter(item => getFilterCallbackFromItem(item, apiRef) !== null);\n  }\n  return cache.cleanedFilterItems;\n};\nexport const passFilterLogic = (allFilterItemResults, allQuickFilterResults, filterModel, apiRef, cache) => {\n  const cleanedFilterItems = filterModelItems(cache, apiRef, filterModel.items);\n  const cleanedFilterItemResults = allFilterItemResults.filter(isNotNull);\n  const cleanedQuickFilterResults = allQuickFilterResults.filter(isNotNull);\n\n  // get result for filter items model\n  if (cleanedFilterItemResults.length > 0) {\n    // Return true if the item pass with one of the rows\n    const filterItemPredicate = item => {\n      return cleanedFilterItemResults.some(filterItemResult => filterItemResult[item.id]);\n    };\n    const logicOperator = filterModel.logicOperator ?? getDefaultGridFilterModel().logicOperator;\n    if (logicOperator === GridLogicOperator.And) {\n      const passesAllFilters = cleanedFilterItems.every(filterItemPredicate);\n      if (!passesAllFilters) {\n        return false;\n      }\n    } else {\n      const passesSomeFilters = cleanedFilterItems.some(filterItemPredicate);\n      if (!passesSomeFilters) {\n        return false;\n      }\n    }\n  }\n\n  // get result for quick filter model\n  if (cleanedQuickFilterResults.length > 0 && filterModel.quickFilterValues != null) {\n    // Return true if the item pass with one of the rows\n    const quickFilterValuePredicate = value => {\n      return cleanedQuickFilterResults.some(quickFilterValueResult => quickFilterValueResult[value]);\n    };\n    const quickFilterLogicOperator = filterModel.quickFilterLogicOperator ?? getDefaultGridFilterModel().quickFilterLogicOperator;\n    if (quickFilterLogicOperator === GridLogicOperator.And) {\n      const passesAllQuickFilterValues = filterModel.quickFilterValues.every(quickFilterValuePredicate);\n      if (!passesAllQuickFilterValues) {\n        return false;\n      }\n    } else {\n      const passesSomeQuickFilterValues = filterModel.quickFilterValues.some(quickFilterValuePredicate);\n      if (!passesSomeQuickFilterValues) {\n        return false;\n      }\n    }\n  }\n  return true;\n};","import { createSelector } from \"../../../utils/createSelector.js\";\nexport const gridFocusStateSelector = state => state.focus;\nexport const gridFocusCellSelector = createSelector(gridFocusStateSelector, focusState => focusState.cell);\nexport const gridFocusColumnHeaderSelector = createSelector(gridFocusStateSelector, focusState => focusState.columnHeader);\nexport const gridFocusColumnHeaderFilterSelector = createSelector(gridFocusStateSelector, focusState => focusState.columnHeaderFilter);\nexport const gridFocusColumnGroupHeaderSelector = createSelector(gridFocusStateSelector, focusState => focusState.columnGroupHeader);\nexport const gridTabIndexStateSelector = state => state.tabIndex;\nexport const gridTabIndexCellSelector = createSelector(gridTabIndexStateSelector, state => state.cell);\nexport const gridTabIndexColumnHeaderSelector = createSelector(gridTabIndexStateSelector, state => state.columnHeader);\nexport const gridTabIndexColumnHeaderFilterSelector = createSelector(gridTabIndexStateSelector, state => state.columnHeaderFilter);\nexport const gridTabIndexColumnGroupHeaderSelector = createSelector(gridTabIndexStateSelector, state => state.columnGroupHeader);","import { createSelector } from \"../../../utils/createSelector.js\";\nexport const gridHeaderFilteringStateSelector = state => state.headerFiltering;\nexport const gridHeaderFilteringEnabledSelector = createSelector(gridHeaderFilteringStateSelector,\n// No initialization in MIT, so we need to default to false to be used by `getTotalHeaderHeight`\nheaderFilteringState => headerFilteringState?.enabled ?? false);\nexport const gridHeaderFilteringEditFieldSelector = createSelector(gridHeaderFilteringStateSelector, headerFilteringState => headerFilteringState.editing);\nexport const gridHeaderFilteringMenuSelector = createSelector(gridHeaderFilteringStateSelector, headerFilteringState => headerFilteringState.menuOpen);","import { createSelector, createSelectorMemoized } from \"../../../utils/createSelector.js\";\nimport { gridExpandedSortedRowEntriesSelector, gridExpandedSortedRowIdsSelector, gridFilteredSortedTopLevelRowEntriesSelector } from \"../filter/gridFilterSelector.js\";\nimport { gridRowMaximumTreeDepthSelector, gridRowTreeSelector } from \"../rows/gridRowsSelector.js\";\nimport { getPageCount } from \"./gridPaginationUtils.js\";\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 row count\n * @category Pagination\n */\nexport const gridPaginationRowCountSelector = createSelector(gridPaginationSelector, pagination => pagination.rowCount);\n\n/**\n * Get the pagination meta\n * @category Pagination\n */\nexport const gridPaginationMetaSelector = createSelector(gridPaginationSelector, pagination => pagination.meta);\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, gridPaginationRowCountSelector, (paginationModel, rowCount) => getPageCount(rowCount, paginationModel.pageSize, paginationModel.page));\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    const row = visibleSortedRowEntries[lastRowIndex];\n    const depth = 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 { GridSignature } from \"../../utils/index.js\";\nconst MAX_PAGE_SIZE = 100;\nexport const defaultPageSize = autoPageSize => autoPageSize ? 0 : 100;\nexport const getPageCount = (rowCount, pageSize, page) => {\n  if (pageSize > 0 && rowCount > 0) {\n    return Math.ceil(rowCount / pageSize);\n  }\n  if (rowCount === -1) {\n    // With unknown row-count, we can assume a page after the current one\n    return page + 2;\n  }\n  return 0;\n};\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 X: `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};","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 { createSelector, createSelectorMemoized } from \"../../../utils/createSelector.js\";\nimport { gridRowsLookupSelector } from \"../rows/gridRowsSelector.js\";\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 { GridSignature } from \"../../utils/useGridApiEventHandler.js\";\nexport function isMultipleRowSelectionEnabled(props) {\n  if (props.signature === GridSignature.DataGrid) {\n    // DataGrid Community has multiple row selection enabled only if checkbox selection is enabled.\n    return props.checkboxSelection && props.disableMultipleRowSelection !== true;\n  }\n  return !props.disableMultipleRowSelection;\n}","import { createSelector } from \"../../../utils/createSelector.js\";\nconst gridRowSpanningStateSelector = state => state.rowSpanning;\nexport const gridRowSpanningHiddenCellsSelector = createSelector(gridRowSpanningStateSelector, rowSpanning => rowSpanning.hiddenCells);\nexport const gridRowSpanningSpannedCellsSelector = createSelector(gridRowSpanningStateSelector, rowSpanning => rowSpanning.spannedCells);\nexport const gridRowSpanningHiddenCellsOriginMapSelector = createSelector(gridRowSpanningStateSelector, rowSpanning => rowSpanning.hiddenCellOriginMap);","export const gridRowsMetaSelector = state => state.rowsMeta;","import { createSelector, createSelectorMemoized } from \"../../../utils/createSelector.js\";\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 gridRowGroupsToFetchSelector = createSelector(gridRowsStateSelector, rows => rows.groupsToFetch);\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?.additionalRowGroups);\n\n/**\n * @ignore - do not document.\n */\nexport const gridPinnedRowsSelector = createSelectorMemoized(gridAdditionalRowGroupsSelector, additionalRowGroups => {\n  const rawPinnedRows = additionalRowGroups?.pinnedRows;\n  return {\n    bottom: rawPinnedRows?.bottom?.map(rowEntry => ({\n      id: rowEntry.id,\n      model: rowEntry.model ?? {}\n    })) ?? [],\n    top: rawPinnedRows?.top?.map(rowEntry => ({\n      id: rowEntry.id,\n      model: rowEntry.model ?? {}\n    })) ?? []\n  };\n});\n\n/**\n * @ignore - do not document.\n */\nexport const gridPinnedRowsCountSelector = createSelector(gridPinnedRowsSelector, pinnedRows => {\n  return (pinnedRows?.top?.length || 0) + (pinnedRows?.bottom?.length || 0);\n});","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport { gridPinnedRowsSelector } from \"./gridRowsSelector.js\";\nimport { gridDimensionsSelector } from \"../dimensions/gridDimensionsSelectors.js\";\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<GridRowModel>} 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 X: 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  previousGroupsToFetch\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    groupsToFetch = []\n  } = apiRef.current.applyStrategyProcessor('rowTreeCreation', {\n    previousTree,\n    previousTreeDepths,\n    updates: cache.updates,\n    dataRowIdToIdLookup: cache.dataRowIdToIdLookup,\n    dataRowIdToModelLookup: cache.dataRowIdToModelLookup,\n    previousGroupsToFetch\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    groupsToFetch\n  });\n};\nexport const isAutogeneratedRow = row => GRID_ID_AUTOGENERATED in row;\nexport const isAutogeneratedRowNode = 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 || !isAutogeneratedRowNode(tree[child])) {\n      validDescendants.push(child);\n    }\n    const childDescendants = getTreeNodeDescendants(tree, child, skipAutoGeneratedRows);\n    for (let j = 0; j < childDescendants.length; j += 1) {\n      validDescendants.push(childDescendants[j]);\n    }\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  groupKeys\n}) => {\n  if (previousCache.updates.type === 'full') {\n    throw new Error('MUI X: 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.updates.actions.insert ?? [])],\n      modify: [...(previousCache.updates.actions.modify ?? [])],\n      remove: [...(previousCache.updates.actions.remove ?? [])]\n    },\n    idToActionLookup: _extends({}, previousCache.updates.idToActionLookup),\n    groupKeys\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  const pinnedRows = gridPinnedRowsSelector(apiRef);\n  const topPinnedRowsHeight = pinnedRows?.top?.reduce((acc, value) => {\n    acc += apiRef.current.unstable_getRowHeight(value.id);\n    return acc;\n  }, 0) || 0;\n  const bottomPinnedRowsHeight = 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) {\n  const dimensions = gridDimensionsSelector(apiRef.current.state);\n  return `var(--DataGrid-overlayHeight, ${2 * dimensions.rowHeight}px)`;\n}\nexport function computeRowsUpdates(apiRef, updates, getRowId) {\n  const nonPinnedRowsUpdates = [];\n  updates.forEach(update => {\n    const id = getRowIdFromRowModel(update, getRowId, 'A row was provided without id when calling updateRows():');\n    const rowNode = apiRef.current.getRowNode(id);\n    if (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  return nonPinnedRowsUpdates;\n}","import * as React from 'react';\nimport { getGridCellElement, getGridColumnHeaderElement, getGridRowElement } from \"../../../utils/domUtils.js\";\nimport { useGridApiMethod } from \"../../utils/useGridApiMethod.js\";\nimport { gridFocusCellSelector, gridTabIndexCellSelector } from \"../focus/gridFocusStateSelector.js\";\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) {\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 getCellParams = React.useCallback((id, field) => {\n    const colDef = apiRef.current.getColumn(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 rawValue = row[field];\n    const value = colDef?.valueGetter ? colDef.valueGetter(rawValue, row, colDef, apiRef) : rawValue;\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      api: {}\n    };\n    if (colDef && colDef.valueFormatter) {\n      params.formattedValue = colDef.valueFormatter(value, row, colDef, apiRef);\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    const row = apiRef.current.getRow(id);\n    if (!row) {\n      throw new MissingRowIdError(`No row with id #${id} found`);\n    }\n    if (!colDef || !colDef.valueGetter) {\n      return row[field];\n    }\n    return colDef.valueGetter(row[colDef.field], row, colDef, apiRef);\n  }, [apiRef]);\n  const getRowValue = React.useCallback((row, colDef) => {\n    const field = colDef.field;\n    if (!colDef || !colDef.valueGetter) {\n      return row[field];\n    }\n    const value = row[colDef.field];\n    return colDef.valueGetter(value, row, colDef, apiRef);\n  }, [apiRef]);\n  const getRowFormattedValue = React.useCallback((row, colDef) => {\n    const value = getRowValue(row, colDef);\n    if (!colDef || !colDef.valueFormatter) {\n      return value;\n    }\n    return colDef.valueFormatter(value, row, colDef, apiRef);\n  }, [apiRef, 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 { createSelector, createSelectorMemoized } from \"../../../utils/createSelector.js\";\nimport { gridRowTreeSelector, gridRowsLookupSelector } from \"../rows/gridRowsSelector.js\";\nimport { GRID_ID_AUTOGENERATED, isAutogeneratedRowNode } from \"../rows/gridRowsUtils.js\";\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, gridRowTreeSelector, (sortedIds, idRowsLookup, rowTree) => sortedIds.reduce((acc, id) => {\n  const model = idRowsLookup[id];\n  if (model) {\n    acc.push({\n      id,\n      model\n    });\n  }\n  const rowNode = rowTree[id];\n  if (rowNode && isAutogeneratedRowNode(rowNode)) {\n    acc.push({\n      id,\n      model: {\n        [GRID_ID_AUTOGENERATED]: id\n      }\n    });\n  }\n  return acc;\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 { warnOnce } from '@mui/x-internals/warning';\nexport const sanitizeSortModel = (model, disableMultipleColumnsSorting) => {\n  if (disableMultipleColumnsSorting && model.length > 1) {\n    if (process.env.NODE_ENV !== 'production') {\n      warnOnce(['MUI X: 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');\n    }\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<GridApiCommunity>} 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 || sortItem.sort === null) {\n    return null;\n  }\n  let comparator;\n  if (column.getSortComparator) {\n    comparator = column.getSortComparator(sortItem.sort);\n  } else {\n    comparator = isDesc(sortItem.sort) ? (...args) => -1 * column.sortComparator(...args) : column.sortComparator;\n  }\n  if (!comparator) {\n    return null;\n  }\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<GridApiCommunity>} 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 { createSelector, createSelectorMemoized } from \"../../../utils/createSelector.js\";\n/**\n * Get the columns state\n * @category Virtualization\n */\nexport const gridVirtualizationSelector = state => state.virtualization;\n\n/**\n * Get the enabled state for virtualization\n * @category Virtualization\n * @deprecated Use `gridVirtualizationColumnEnabledSelector` and `gridVirtualizationRowEnabledSelector`\n */\nexport const gridVirtualizationEnabledSelector = createSelector(gridVirtualizationSelector, state => state.enabled);\n\n/**\n * Get the enabled state for column virtualization\n * @category Virtualization\n */\nexport const gridVirtualizationColumnEnabledSelector = createSelector(gridVirtualizationSelector, state => state.enabledForColumns);\n\n/**\n * Get the enabled state for row virtualization\n * @category Virtualization\n */\nexport const gridVirtualizationRowEnabledSelector = createSelector(gridVirtualizationSelector, state => state.enabledForRows);\n\n/**\n * Get the render context\n * @category Virtualization\n * @ignore - do not document.\n */\nexport const gridRenderContextSelector = createSelector(gridVirtualizationSelector, state => state.renderContext);\n\n/**\n * Get the render context, with only columns filled in.\n * This is cached, so it can be used to only re-render when the column interval changes.\n * @category Virtualization\n * @ignore - do not document.\n */\nexport const gridRenderContextColumnsSelector = createSelectorMemoized(state => state.virtualization.renderContext.firstColumnIndex, state => state.virtualization.renderContext.lastColumnIndex, (firstColumnIndex, lastColumnIndex) => ({\n  firstColumnIndex,\n  lastColumnIndex\n}));","'use client';\n\nimport * as React from 'react';\n\n/**\n * A version of `React.useLayoutEffect` that does not show a warning when server-side rendering.\n * This is useful for effects that are only needed for client-side rendering but not for SSR.\n *\n * Before you use this hook, make sure to read https://gist.github.com/gaearon/e7d97cdf38a2907924ea12e4ebdf3c85\n * and confirm it doesn't apply to your use-case.\n */\nconst useEnhancedEffect = typeof window !== 'undefined' ? React.useLayoutEffect : React.useEffect;\nexport default useEnhancedEffect;","import * as React from 'react';\nimport { unstable_useEnhancedEffect as useEnhancedEffect } from '@mui/utils';\nconst isDevEnvironment = process.env.NODE_ENV === 'development';\nconst noop = () => {};\nexport function useResizeObserver(ref, fn, enabled) {\n  const fnRef = React.useRef(null);\n  fnRef.current = fn;\n  useEnhancedEffect(() => {\n    if (enabled === false || typeof ResizeObserver === 'undefined') {\n      return noop;\n    }\n    let frameID = 0;\n    const target = ref.current;\n    const observer = new ResizeObserver(entries => {\n      // See https://github.com/mui/mui-x/issues/8733\n      // In dev, we avoid the React warning by moving the task to the next frame.\n      // In prod, we want the task to run in the same frame as to avoid tear.\n      if (isDevEnvironment) {\n        frameID = requestAnimationFrame(() => {\n          fnRef.current(entries);\n        });\n      } else {\n        fnRef.current(entries);\n      }\n    });\n    if (target) {\n      observer.observe(target);\n    }\n    return () => {\n      if (frameID) {\n        cancelAnimationFrame(frameID);\n      }\n      observer.disconnect();\n    };\n  }, [ref, enabled]);\n}","const userAgent = typeof navigator !== 'undefined' ? navigator.userAgent.toLowerCase() : 'empty';\nexport const isFirefox = userAgent.includes('firefox');","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport * as React from 'react';\nimport * as ReactDOM from 'react-dom';\nimport { unstable_useEnhancedEffect as useEnhancedEffect, unstable_useEventCallback as useEventCallback } from '@mui/utils';\nimport useLazyRef from '@mui/utils/useLazyRef';\nimport useTimeout from '@mui/utils/useTimeout';\nimport { useResizeObserver } from '@mui/x-internals/useResizeObserver';\nimport { useRtl } from '@mui/system/RtlProvider';\nimport { useGridPrivateApiContext } from \"../../utils/useGridPrivateApiContext.js\";\nimport { useGridRootProps } from \"../../utils/useGridRootProps.js\";\nimport { useGridSelector } from \"../../utils/useGridSelector.js\";\nimport { useRunOnce } from \"../../utils/useRunOnce.js\";\nimport { gridVisibleColumnDefinitionsSelector, gridVisiblePinnedColumnDefinitionsSelector, gridColumnPositionsSelector, gridHasColSpanSelector } from \"../columns/gridColumnsSelector.js\";\nimport { gridDimensionsSelector } from \"../dimensions/gridDimensionsSelectors.js\";\nimport { gridPinnedRowsSelector } from \"../rows/gridRowsSelector.js\";\nimport { gridFocusCellSelector, gridTabIndexCellSelector } from \"../focus/gridFocusStateSelector.js\";\nimport { useGridVisibleRows, getVisibleRows } from \"../../utils/useGridVisibleRows.js\";\nimport { useGridApiEventHandler } from \"../../utils/index.js\";\nimport * as platform from \"../../../utils/platform.js\";\nimport { clamp, range } from \"../../../utils/utils.js\";\nimport { selectedIdsLookupSelector } from \"../rowSelection/gridRowSelectionSelector.js\";\nimport { gridRowsMetaSelector } from \"../rows/gridRowsMetaSelector.js\";\nimport { getFirstNonSpannedColumnToRender } from \"../columns/gridColumnsUtils.js\";\nimport { getMinimalContentHeight } from \"../rows/gridRowsUtils.js\";\nimport { gridRenderContextSelector, gridVirtualizationRowEnabledSelector, gridVirtualizationColumnEnabledSelector } from \"./gridVirtualizationSelectors.js\";\nimport { EMPTY_RENDER_CONTEXT } from \"./useGridVirtualization.js\";\nimport { gridRowSpanningHiddenCellsOriginMapSelector } from \"../rows/gridRowSpanningSelectors.js\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nconst MINIMUM_COLUMN_WIDTH = 50;\nvar ScrollDirection = /*#__PURE__*/function (ScrollDirection) {\n  ScrollDirection[ScrollDirection[\"NONE\"] = 0] = \"NONE\";\n  ScrollDirection[ScrollDirection[\"UP\"] = 1] = \"UP\";\n  ScrollDirection[ScrollDirection[\"DOWN\"] = 2] = \"DOWN\";\n  ScrollDirection[ScrollDirection[\"LEFT\"] = 3] = \"LEFT\";\n  ScrollDirection[ScrollDirection[\"RIGHT\"] = 4] = \"RIGHT\";\n  return ScrollDirection;\n}(ScrollDirection || {});\nconst EMPTY_SCROLL_POSITION = {\n  top: 0,\n  left: 0\n};\nexport const EMPTY_DETAIL_PANELS = Object.freeze(new Map());\nconst createScrollCache = (isRtl, rowBufferPx, columnBufferPx, verticalBuffer, horizontalBuffer) => ({\n  direction: ScrollDirection.NONE,\n  buffer: bufferForDirection(isRtl, ScrollDirection.NONE, rowBufferPx, columnBufferPx, verticalBuffer, horizontalBuffer)\n});\nlet isJSDOM = false;\ntry {\n  if (typeof window !== 'undefined') {\n    isJSDOM = /jsdom/.test(window.navigator.userAgent);\n  }\n} catch (_) {\n  /* ignore */\n}\nexport const useGridVirtualScroller = () => {\n  const apiRef = useGridPrivateApiContext();\n  const rootProps = useGridRootProps();\n  const visibleColumns = useGridSelector(apiRef, gridVisibleColumnDefinitionsSelector);\n  const enabledForRows = useGridSelector(apiRef, gridVirtualizationRowEnabledSelector) && !isJSDOM;\n  const enabledForColumns = useGridSelector(apiRef, gridVirtualizationColumnEnabledSelector) && !isJSDOM;\n  const dimensions = useGridSelector(apiRef, gridDimensionsSelector);\n  const outerSize = dimensions.viewportOuterSize;\n  const pinnedRows = useGridSelector(apiRef, gridPinnedRowsSelector);\n  const pinnedColumns = useGridSelector(apiRef, gridVisiblePinnedColumnDefinitionsSelector);\n  const hasBottomPinnedRows = pinnedRows.bottom.length > 0;\n  const [panels, setPanels] = React.useState(EMPTY_DETAIL_PANELS);\n  const isRtl = useRtl();\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 gridRootRef = apiRef.current.rootElementRef;\n  const mainRef = apiRef.current.mainElementRef;\n  const scrollerRef = apiRef.current.virtualScrollerRef;\n  const scrollbarVerticalRef = React.useRef(null);\n  const scrollbarHorizontalRef = React.useRef(null);\n  const contentHeight = dimensions.contentSize.height;\n  const columnsTotalWidth = dimensions.columnsTotalWidth;\n  const hasColSpan = useGridSelector(apiRef, gridHasColSpanSelector);\n  useResizeObserver(mainRef, () => apiRef.current.resize());\n\n  /*\n   * Scroll context logic\n   * ====================\n   * We only render the cells contained in the `renderContext`. However, when the user starts scrolling the grid\n   * in a direction, we want to render as many cells as possible in that direction, as to avoid presenting white\n   * areas if the user scrolls too fast/far and the viewport ends up in a region we haven't rendered yet. To render\n   * more cells, we store some offsets to add to the viewport in `scrollCache.buffer`. Those offsets make the render\n   * context wider in the direction the user is going, but also makes the buffer around the viewport `0` for the\n   * dimension (horizontal or vertical) in which the user is not scrolling. So if the normal viewport is 8 columns\n   * wide, with a 1 column buffer (10 columns total), then we want it to be exactly 8 columns wide during vertical\n   * scroll.\n   * However, we don't want the rows in the old context to re-render from e.g. 10 columns to 8 columns, because that's\n   * work that's not necessary. Thus we store the context at the start of the scroll in `frozenContext`, and the rows\n   * that are part of this old context will keep their same render context as to avoid re-rendering.\n   */\n  const scrollPosition = React.useRef(EMPTY_SCROLL_POSITION);\n  const previousContextScrollPosition = React.useRef(EMPTY_SCROLL_POSITION);\n  const previousRowContext = React.useRef(EMPTY_RENDER_CONTEXT);\n  const renderContext = useGridSelector(apiRef, gridRenderContextSelector);\n  const scrollTimeout = useTimeout();\n  const frozenContext = React.useRef(undefined);\n  const scrollCache = useLazyRef(() => createScrollCache(isRtl, rootProps.rowBufferPx, rootProps.columnBufferPx, dimensions.rowHeight * 15, MINIMUM_COLUMN_WIDTH * 6)).current;\n  const focusedCell = {\n    rowIndex: React.useMemo(() => cellFocus ? currentPage.rows.findIndex(row => row.id === cellFocus.id) : -1, [cellFocus, currentPage.rows]),\n    columnIndex: React.useMemo(() => cellFocus ? visibleColumns.findIndex(column => column.field === cellFocus.field) : -1, [cellFocus, visibleColumns])\n  };\n  const updateRenderContext = React.useCallback(nextRenderContext => {\n    if (areRenderContextsEqual(nextRenderContext, apiRef.current.state.virtualization.renderContext)) {\n      return;\n    }\n    const didRowsIntervalChange = nextRenderContext.firstRowIndex !== previousRowContext.current.firstRowIndex || nextRenderContext.lastRowIndex !== previousRowContext.current.lastRowIndex;\n    apiRef.current.setState(state => {\n      return _extends({}, state, {\n        virtualization: _extends({}, state.virtualization, {\n          renderContext: nextRenderContext\n        })\n      });\n    });\n\n    // The lazy-loading hook is listening to `renderedRowsIntervalChange`,\n    // but only does something if the dimensions are also available.\n    // So we wait until we have valid dimensions before publishing the first event.\n    if (dimensions.isReady && didRowsIntervalChange) {\n      previousRowContext.current = nextRenderContext;\n      apiRef.current.publishEvent('renderedRowsIntervalChange', nextRenderContext);\n    }\n    previousContextScrollPosition.current = scrollPosition.current;\n  }, [apiRef, dimensions.isReady]);\n  const triggerUpdateRenderContext = () => {\n    const newScroll = {\n      top: scrollerRef.current.scrollTop,\n      left: scrollerRef.current.scrollLeft\n    };\n    const dx = newScroll.left - scrollPosition.current.left;\n    const dy = newScroll.top - scrollPosition.current.top;\n    const isScrolling = dx !== 0 || dy !== 0;\n    scrollPosition.current = newScroll;\n    const direction = isScrolling ? directionForDelta(dx, dy) : ScrollDirection.NONE;\n\n    // Since previous render, we have scrolled...\n    const rowScroll = Math.abs(scrollPosition.current.top - previousContextScrollPosition.current.top);\n    const columnScroll = Math.abs(scrollPosition.current.left - previousContextScrollPosition.current.left);\n\n    // PERF: use the computed minimum column width instead of a static one\n    const didCrossThreshold = rowScroll >= dimensions.rowHeight || columnScroll >= MINIMUM_COLUMN_WIDTH;\n    const didChangeDirection = scrollCache.direction !== direction;\n    const shouldUpdate = didCrossThreshold || didChangeDirection;\n    if (!shouldUpdate) {\n      return renderContext;\n    }\n\n    // Render a new context\n\n    if (didChangeDirection) {\n      switch (direction) {\n        case ScrollDirection.NONE:\n        case ScrollDirection.LEFT:\n        case ScrollDirection.RIGHT:\n          frozenContext.current = undefined;\n          break;\n        default:\n          frozenContext.current = renderContext;\n          break;\n      }\n    }\n    scrollCache.direction = direction;\n    scrollCache.buffer = bufferForDirection(isRtl, direction, rootProps.rowBufferPx, rootProps.columnBufferPx, dimensions.rowHeight * 15, MINIMUM_COLUMN_WIDTH * 6);\n    const inputs = inputsSelector(apiRef, rootProps, enabledForRows, enabledForColumns);\n    const nextRenderContext = computeRenderContext(inputs, scrollPosition.current, scrollCache);\n\n    // Prevents batching render context changes\n    ReactDOM.flushSync(() => {\n      updateRenderContext(nextRenderContext);\n    });\n    scrollTimeout.start(1000, triggerUpdateRenderContext);\n    return nextRenderContext;\n  };\n  const forceUpdateRenderContext = () => {\n    const inputs = inputsSelector(apiRef, rootProps, enabledForRows, enabledForColumns);\n    const nextRenderContext = computeRenderContext(inputs, scrollPosition.current, scrollCache);\n    // Reset the frozen context when the render context changes, see the illustration in https://github.com/mui/mui-x/pull/12353\n    frozenContext.current = undefined;\n    updateRenderContext(nextRenderContext);\n  };\n  const handleScroll = useEventCallback(event => {\n    const {\n      scrollTop,\n      scrollLeft\n    } = event.currentTarget;\n\n    // On iOS and macOS, negative offsets are possible when swiping past the start\n    if (scrollTop < 0) {\n      return;\n    }\n    if (!isRtl) {\n      if (scrollLeft < 0) {\n        return;\n      }\n    }\n    if (isRtl) {\n      if (scrollLeft > 0) {\n        return;\n      }\n    }\n    const nextRenderContext = triggerUpdateRenderContext();\n    apiRef.current.publishEvent('scrollPositionChange', {\n      top: scrollTop,\n      left: scrollLeft,\n      renderContext: nextRenderContext\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 getRows = (params = {}) => {\n    if (!params.rows && !currentPage.range) {\n      return [];\n    }\n    const baseRenderContext = params.renderContext ?? renderContext;\n    const isLastSection = !hasBottomPinnedRows && params.position === undefined || hasBottomPinnedRows && params.position === 'bottom';\n    const isPinnedSection = params.position !== undefined;\n    let rowIndexOffset;\n    // FIXME: Why is the switch check exhaustiveness not validated with typescript-eslint?\n    // eslint-disable-next-line default-case\n    switch (params.position) {\n      case 'top':\n        rowIndexOffset = 0;\n        break;\n      case 'bottom':\n        rowIndexOffset = pinnedRows.top.length + currentPage.rows.length;\n        break;\n      case undefined:\n        rowIndexOffset = pinnedRows.top.length;\n        break;\n    }\n    const rowModels = params.rows ?? currentPage.rows;\n    const firstRowToRender = baseRenderContext.firstRowIndex;\n    const lastRowToRender = Math.min(baseRenderContext.lastRowIndex, rowModels.length);\n    const rowIndexes = params.rows ? range(0, params.rows.length) : range(firstRowToRender, lastRowToRender);\n    let virtualRowIndex = -1;\n    if (!isPinnedSection && focusedCell.rowIndex !== -1) {\n      if (focusedCell.rowIndex < firstRowToRender) {\n        virtualRowIndex = focusedCell.rowIndex;\n        rowIndexes.unshift(virtualRowIndex);\n      }\n      if (focusedCell.rowIndex >= lastRowToRender) {\n        virtualRowIndex = focusedCell.rowIndex;\n        rowIndexes.push(virtualRowIndex);\n      }\n    }\n    const rows = [];\n    const rowProps = rootProps.slotProps?.row;\n    const columnPositions = gridColumnPositionsSelector(apiRef);\n    rowIndexes.forEach(rowIndexInPage => {\n      const {\n        id,\n        model\n      } = rowModels[rowIndexInPage];\n      const rowIndex = (currentPage?.range?.firstRowIndex || 0) + rowIndexOffset + rowIndexInPage;\n\n      // NOTE: This is an expensive feature, the colSpan code could be optimized.\n      if (hasColSpan) {\n        const minFirstColumn = pinnedColumns.left.length;\n        const maxLastColumn = visibleColumns.length - pinnedColumns.right.length;\n        apiRef.current.calculateColSpan({\n          rowId: id,\n          minFirstColumn,\n          maxLastColumn,\n          columns: visibleColumns\n        });\n        if (pinnedColumns.left.length > 0) {\n          apiRef.current.calculateColSpan({\n            rowId: id,\n            minFirstColumn: 0,\n            maxLastColumn: pinnedColumns.left.length,\n            columns: visibleColumns\n          });\n        }\n        if (pinnedColumns.right.length > 0) {\n          apiRef.current.calculateColSpan({\n            rowId: id,\n            minFirstColumn: visibleColumns.length - pinnedColumns.right.length,\n            maxLastColumn: visibleColumns.length,\n            columns: visibleColumns\n          });\n        }\n      }\n      const hasFocus = cellFocus?.id === id;\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      let isFirstVisible = false;\n      if (params.position === undefined) {\n        isFirstVisible = rowIndexInPage === 0;\n      }\n      let isLastVisible = false;\n      const isLastVisibleInSection = rowIndexInPage === rowModels.length - 1;\n      if (isLastSection) {\n        if (!isPinnedSection) {\n          const lastIndex = currentPage.rows.length - 1;\n          const isLastVisibleRowIndex = rowIndexInPage === lastIndex;\n          if (isLastVisibleRowIndex) {\n            isLastVisible = true;\n          }\n        } else {\n          isLastVisible = isLastVisibleInSection;\n        }\n      }\n      const isVirtualRow = rowIndexInPage === virtualRowIndex;\n      const isNotVisible = isVirtualRow;\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      let currentRenderContext = baseRenderContext;\n      if (!isPinnedSection && frozenContext.current && rowIndexInPage >= frozenContext.current.firstRowIndex && rowIndexInPage < frozenContext.current.lastRowIndex) {\n        currentRenderContext = frozenContext.current;\n      }\n      const offsetLeft = computeOffsetLeft(columnPositions, currentRenderContext, pinnedColumns.left.length);\n      const showBottomBorder = isLastVisibleInSection && params.position === 'top';\n      rows.push(/*#__PURE__*/_jsx(rootProps.slots.row, _extends({\n        row: model,\n        rowId: id,\n        index: rowIndex,\n        selected: isSelected,\n        offsetTop: params.rows ? undefined : rowsMeta.positions[rowIndexInPage],\n        offsetLeft: offsetLeft,\n        dimensions: dimensions,\n        rowHeight: baseRowHeight,\n        tabbableCell: tabbableCell,\n        pinnedColumns: pinnedColumns,\n        visibleColumns: visibleColumns,\n        renderContext: currentRenderContext,\n        focusedColumnIndex: hasFocus ? focusedCell.columnIndex : undefined,\n        isFirstVisible: isFirstVisible,\n        isLastVisible: isLastVisible,\n        isNotVisible: isNotVisible,\n        showBottomBorder: showBottomBorder\n      }, rowProps), id));\n      if (isNotVisible) {\n        return;\n      }\n      const panel = panels.get(id);\n      if (panel) {\n        rows.push(panel);\n      }\n      if (params.position === undefined && isLastVisibleInSection) {\n        rows.push(apiRef.current.getInfiniteLoadingTriggerElement?.({\n          lastRowId: id\n        }));\n      }\n    });\n    return rows;\n  };\n  const needsHorizontalScrollbar = outerSize.width && columnsTotalWidth >= outerSize.width;\n  const scrollerStyle = React.useMemo(() => ({\n    overflowX: !needsHorizontalScrollbar ? 'hidden' : undefined,\n    overflowY: rootProps.autoHeight ? 'hidden' : undefined\n  }), [needsHorizontalScrollbar, rootProps.autoHeight]);\n  const contentSize = React.useMemo(() => {\n    const size = {\n      width: needsHorizontalScrollbar ? columnsTotalWidth : 'auto',\n      height: contentHeight\n    };\n    if (rootProps.autoHeight && currentPage.rows.length === 0) {\n      size.height = getMinimalContentHeight(apiRef); // Give room to show the overlay when there no rows.\n    }\n    return size;\n  }, [apiRef, columnsTotalWidth, contentHeight, needsHorizontalScrollbar, rootProps.autoHeight, currentPage.rows.length]);\n  React.useEffect(() => {\n    apiRef.current.publishEvent('virtualScrollerContentSizeChange');\n  }, [apiRef, contentSize]);\n  useEnhancedEffect(() => {\n    // FIXME: Is this really necessary?\n    apiRef.current.resize();\n  }, [apiRef, rowsMeta.currentPageTotalHeight]);\n  useEnhancedEffect(() => {\n    // TODO a scroll reset should not be necessary\n    if (enabledForColumns) {\n      scrollerRef.current.scrollLeft = 0;\n    }\n    if (enabledForRows) {\n      scrollerRef.current.scrollTop = 0;\n    }\n  }, [enabledForColumns, enabledForRows, gridRootRef, scrollerRef]);\n  useRunOnce(outerSize.width !== 0, () => {\n    const inputs = inputsSelector(apiRef, rootProps, enabledForRows, enabledForColumns);\n    const initialRenderContext = computeRenderContext(inputs, scrollPosition.current, scrollCache);\n    updateRenderContext(initialRenderContext);\n    apiRef.current.publishEvent('scrollPositionChange', {\n      top: scrollPosition.current.top,\n      left: scrollPosition.current.left,\n      renderContext: initialRenderContext\n    });\n  });\n  apiRef.current.register('private', {\n    updateRenderContext: forceUpdateRenderContext\n  });\n  useGridApiEventHandler(apiRef, 'columnsChange', forceUpdateRenderContext);\n  useGridApiEventHandler(apiRef, 'filteredRowsSet', forceUpdateRenderContext);\n  useGridApiEventHandler(apiRef, 'rowExpansionChange', forceUpdateRenderContext);\n  return {\n    renderContext,\n    setPanels,\n    getRows,\n    getContainerProps: () => ({\n      ref: mainRef\n    }),\n    getScrollerProps: () => ({\n      ref: scrollerRef,\n      onScroll: handleScroll,\n      onWheel: handleWheel,\n      onTouchMove: handleTouchMove,\n      style: scrollerStyle,\n      role: 'presentation',\n      // `tabIndex` shouldn't be used along role=presentation, but it fixes a Firefox bug\n      // https://github.com/mui/mui-x/pull/13891#discussion_r1683416024\n      tabIndex: platform.isFirefox ? -1 : undefined\n    }),\n    getContentProps: () => ({\n      style: contentSize,\n      role: 'presentation'\n    }),\n    getRenderZoneProps: () => ({\n      role: 'rowgroup'\n    }),\n    getScrollbarVerticalProps: () => ({\n      ref: scrollbarVerticalRef,\n      role: 'presentation'\n    }),\n    getScrollbarHorizontalProps: () => ({\n      ref: scrollbarHorizontalRef,\n      role: 'presentation'\n    })\n  };\n};\nfunction inputsSelector(apiRef, rootProps, enabledForRows, enabledForColumns) {\n  const dimensions = gridDimensionsSelector(apiRef.current.state);\n  const currentPage = getVisibleRows(apiRef, rootProps);\n  const visibleColumns = gridVisibleColumnDefinitionsSelector(apiRef);\n  const hiddenCellsOriginMap = gridRowSpanningHiddenCellsOriginMapSelector(apiRef);\n  const lastRowId = apiRef.current.state.rows.dataRowIds.at(-1);\n  const lastColumn = visibleColumns.at(-1);\n  return {\n    enabledForRows,\n    enabledForColumns,\n    apiRef,\n    autoHeight: rootProps.autoHeight,\n    rowBufferPx: rootProps.rowBufferPx,\n    columnBufferPx: rootProps.columnBufferPx,\n    leftPinnedWidth: dimensions.leftPinnedWidth,\n    columnsTotalWidth: dimensions.columnsTotalWidth,\n    viewportInnerWidth: dimensions.viewportInnerSize.width,\n    viewportInnerHeight: dimensions.viewportInnerSize.height,\n    lastRowHeight: lastRowId !== undefined ? apiRef.current.unstable_getRowHeight(lastRowId) : 0,\n    lastColumnWidth: lastColumn?.computedWidth ?? 0,\n    rowsMeta: gridRowsMetaSelector(apiRef.current.state),\n    columnPositions: gridColumnPositionsSelector(apiRef),\n    rows: currentPage.rows,\n    range: currentPage.range,\n    pinnedColumns: gridVisiblePinnedColumnDefinitionsSelector(apiRef),\n    visibleColumns,\n    hiddenCellsOriginMap\n  };\n}\nfunction computeRenderContext(inputs, scrollPosition, scrollCache) {\n  const renderContext = {\n    firstRowIndex: 0,\n    lastRowIndex: inputs.rows.length,\n    firstColumnIndex: 0,\n    lastColumnIndex: inputs.visibleColumns.length\n  };\n  const {\n    top,\n    left\n  } = scrollPosition;\n  const realLeft = Math.abs(left) + inputs.leftPinnedWidth;\n  if (inputs.enabledForRows) {\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    let firstRowIndex = Math.min(getNearestIndexToRender(inputs, top, {\n      atStart: true,\n      lastPosition: inputs.rowsMeta.positions[inputs.rowsMeta.positions.length - 1] + inputs.lastRowHeight\n    }), inputs.rowsMeta.positions.length - 1);\n\n    // If any of the cells in the `firstRowIndex` is hidden due to an extended row span,\n    // Make sure the row from where the rowSpan is originated is visible.\n    const rowSpanHiddenCellOrigin = inputs.hiddenCellsOriginMap[firstRowIndex];\n    if (rowSpanHiddenCellOrigin) {\n      const minSpannedRowIndex = Math.min(...Object.values(rowSpanHiddenCellOrigin));\n      firstRowIndex = Math.min(firstRowIndex, minSpannedRowIndex);\n    }\n    const lastRowIndex = inputs.autoHeight ? firstRowIndex + inputs.rows.length : getNearestIndexToRender(inputs, top + inputs.viewportInnerHeight);\n    renderContext.firstRowIndex = firstRowIndex;\n    renderContext.lastRowIndex = lastRowIndex;\n  }\n  if (inputs.enabledForColumns) {\n    let firstColumnIndex = 0;\n    let lastColumnIndex = inputs.columnPositions.length;\n    let hasRowWithAutoHeight = false;\n    const [firstRowToRender, lastRowToRender] = getIndexesToRender({\n      firstIndex: renderContext.firstRowIndex,\n      lastIndex: renderContext.lastRowIndex,\n      minFirstIndex: 0,\n      maxLastIndex: inputs.rows.length,\n      bufferBefore: scrollCache.buffer.rowBefore,\n      bufferAfter: scrollCache.buffer.rowAfter,\n      positions: inputs.rowsMeta.positions,\n      lastSize: inputs.lastRowHeight\n    });\n    for (let i = firstRowToRender; i < lastRowToRender && !hasRowWithAutoHeight; i += 1) {\n      const row = inputs.rows[i];\n      hasRowWithAutoHeight = inputs.apiRef.current.rowHasAutoHeight(row.id);\n    }\n    if (!hasRowWithAutoHeight) {\n      firstColumnIndex = binarySearch(realLeft, inputs.columnPositions, {\n        atStart: true,\n        lastPosition: inputs.columnsTotalWidth\n      });\n      lastColumnIndex = binarySearch(realLeft + inputs.viewportInnerWidth, inputs.columnPositions);\n    }\n    renderContext.firstColumnIndex = firstColumnIndex;\n    renderContext.lastColumnIndex = lastColumnIndex;\n  }\n  const actualRenderContext = deriveRenderContext(inputs, renderContext, scrollCache);\n  return actualRenderContext;\n}\nfunction getNearestIndexToRender(inputs, offset, options) {\n  const lastMeasuredIndexRelativeToAllRows = inputs.apiRef.current.getLastMeasuredRowIndex();\n  let allRowsMeasured = lastMeasuredIndexRelativeToAllRows === Infinity;\n  if (inputs.range?.lastRowIndex && !allRowsMeasured) {\n    // Check if all rows in this page are already measured\n    allRowsMeasured = lastMeasuredIndexRelativeToAllRows >= inputs.range.lastRowIndex;\n  }\n  const lastMeasuredIndexRelativeToCurrentPage = clamp(lastMeasuredIndexRelativeToAllRows - (inputs.range?.firstRowIndex || 0), 0, inputs.rowsMeta.positions.length);\n  if (allRowsMeasured || inputs.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, inputs.rowsMeta.positions, options);\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, inputs.rowsMeta.positions, lastMeasuredIndexRelativeToCurrentPage, options);\n}\n\n/**\n * Accepts as input a raw render context (the area visible in the viewport) and adds\n * computes the actual render context based on pinned elements, buffer dimensions and\n * spanning.\n */\nfunction deriveRenderContext(inputs, nextRenderContext, scrollCache) {\n  const [firstRowToRender, lastRowToRender] = getIndexesToRender({\n    firstIndex: nextRenderContext.firstRowIndex,\n    lastIndex: nextRenderContext.lastRowIndex,\n    minFirstIndex: 0,\n    maxLastIndex: inputs.rows.length,\n    bufferBefore: scrollCache.buffer.rowBefore,\n    bufferAfter: scrollCache.buffer.rowAfter,\n    positions: inputs.rowsMeta.positions,\n    lastSize: inputs.lastRowHeight\n  });\n  const [initialFirstColumnToRender, lastColumnToRender] = getIndexesToRender({\n    firstIndex: nextRenderContext.firstColumnIndex,\n    lastIndex: nextRenderContext.lastColumnIndex,\n    minFirstIndex: inputs.pinnedColumns.left.length,\n    maxLastIndex: inputs.visibleColumns.length - inputs.pinnedColumns.right.length,\n    bufferBefore: scrollCache.buffer.columnBefore,\n    bufferAfter: scrollCache.buffer.columnAfter,\n    positions: inputs.columnPositions,\n    lastSize: inputs.lastColumnWidth\n  });\n  const firstColumnToRender = getFirstNonSpannedColumnToRender({\n    firstColumnToRender: initialFirstColumnToRender,\n    apiRef: inputs.apiRef,\n    firstRowToRender,\n    lastRowToRender,\n    visibleRows: inputs.rows\n  });\n  return {\n    firstRowIndex: firstRowToRender,\n    lastRowIndex: lastRowToRender,\n    firstColumnIndex: firstColumnToRender,\n    lastColumnIndex: lastColumnToRender\n  };\n}\n/**\n * Use binary search to avoid looping through all possible positions.\n * The `options.atStart` provides the possibility to match for the first element that\n * intersects the screen, even if said element's start position is before `offset`. In\n * other words, we search for `offset + width`.\n */\nfunction binarySearch(offset, positions, options = undefined, 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 position = positions[pivot];\n  let isBefore;\n  if (options?.atStart) {\n    const width = (pivot === positions.length - 1 ? options.lastPosition : positions[pivot + 1]) - position;\n    isBefore = offset - width < position;\n  } else {\n    isBefore = offset <= position;\n  }\n  return isBefore ? binarySearch(offset, positions, options, sliceStart, pivot) : binarySearch(offset, positions, options, pivot + 1, sliceEnd);\n}\nfunction exponentialSearch(offset, positions, index, options = undefined) {\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, options, Math.floor(index / 2), Math.min(index, positions.length));\n}\nfunction getIndexesToRender({\n  firstIndex,\n  lastIndex,\n  bufferBefore,\n  bufferAfter,\n  minFirstIndex,\n  maxLastIndex,\n  positions,\n  lastSize\n}) {\n  const firstPosition = positions[firstIndex] - bufferBefore;\n  const lastPosition = positions[lastIndex] + bufferAfter;\n  const firstIndexPadded = binarySearch(firstPosition, positions, {\n    atStart: true,\n    lastPosition: positions[positions.length - 1] + lastSize\n  });\n  const lastIndexPadded = binarySearch(lastPosition, positions);\n  return [clamp(firstIndexPadded, minFirstIndex, maxLastIndex), clamp(lastIndexPadded, minFirstIndex, maxLastIndex)];\n}\nexport function 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}\nexport function computeOffsetLeft(columnPositions, renderContext, pinnedLeftLength) {\n  const left = (columnPositions[renderContext.firstColumnIndex] ?? 0) - (columnPositions[pinnedLeftLength] ?? 0);\n  return Math.abs(left);\n}\nfunction directionForDelta(dx, dy) {\n  if (dx === 0 && dy === 0) {\n    return ScrollDirection.NONE;\n  }\n  /* eslint-disable */\n  if (Math.abs(dy) >= Math.abs(dx)) {\n    if (dy > 0) {\n      return ScrollDirection.DOWN;\n    } else {\n      return ScrollDirection.UP;\n    }\n  } else {\n    if (dx > 0) {\n      return ScrollDirection.RIGHT;\n    } else {\n      return ScrollDirection.LEFT;\n    }\n  }\n  /* eslint-enable */\n}\nfunction bufferForDirection(isRtl, direction, rowBufferPx, columnBufferPx, verticalBuffer, horizontalBuffer) {\n  if (isRtl) {\n    switch (direction) {\n      case ScrollDirection.LEFT:\n        direction = ScrollDirection.RIGHT;\n        break;\n      case ScrollDirection.RIGHT:\n        direction = ScrollDirection.LEFT;\n        break;\n      default:\n    }\n  }\n  switch (direction) {\n    case ScrollDirection.NONE:\n      return {\n        rowAfter: rowBufferPx,\n        rowBefore: rowBufferPx,\n        columnAfter: columnBufferPx,\n        columnBefore: columnBufferPx\n      };\n    case ScrollDirection.LEFT:\n      return {\n        rowAfter: 0,\n        rowBefore: 0,\n        columnAfter: 0,\n        columnBefore: horizontalBuffer\n      };\n    case ScrollDirection.RIGHT:\n      return {\n        rowAfter: 0,\n        rowBefore: 0,\n        columnAfter: horizontalBuffer,\n        columnBefore: 0\n      };\n    case ScrollDirection.UP:\n      return {\n        rowAfter: 0,\n        rowBefore: verticalBuffer,\n        columnAfter: 0,\n        columnBefore: 0\n      };\n    case ScrollDirection.DOWN:\n      return {\n        rowAfter: verticalBuffer,\n        rowBefore: 0,\n        columnAfter: 0,\n        columnBefore: 0\n      };\n    default:\n      // eslint unable to figure out enum exhaustiveness\n      throw new Error('unreachable');\n  }\n}","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport * as React from 'react';\nimport { useGridApiMethod } from \"../../utils/useGridApiMethod.js\";\nexport const EMPTY_RENDER_CONTEXT = {\n  firstRowIndex: 0,\n  lastRowIndex: 0,\n  firstColumnIndex: 0,\n  lastColumnIndex: 0\n};\nexport const virtualizationStateInitializer = (state, props) => {\n  const {\n    disableVirtualization,\n    autoHeight\n  } = props;\n  const virtualization = {\n    enabled: !disableVirtualization,\n    enabledForColumns: !disableVirtualization,\n    enabledForRows: !disableVirtualization && !autoHeight,\n    renderContext: EMPTY_RENDER_CONTEXT\n  };\n  return _extends({}, state, {\n    virtualization\n  });\n};\nexport function useGridVirtualization(apiRef, props) {\n  /*\n   * API METHODS\n   */\n\n  const setVirtualization = enabled => {\n    apiRef.current.setState(state => _extends({}, state, {\n      virtualization: _extends({}, state.virtualization, {\n        enabled,\n        enabledForColumns: enabled,\n        enabledForRows: enabled && !props.autoHeight\n      })\n    }));\n  };\n  const setColumnVirtualization = enabled => {\n    apiRef.current.setState(state => _extends({}, state, {\n      virtualization: _extends({}, state.virtualization, {\n        enabledForColumns: enabled\n      })\n    }));\n  };\n  const api = {\n    unstable_setVirtualization: setVirtualization,\n    unstable_setColumnVirtualization: setColumnVirtualization\n  };\n  useGridApiMethod(apiRef, api, 'public');\n\n  /*\n   * EFFECTS\n   */\n\n  /* eslint-disable react-hooks/exhaustive-deps */\n  React.useEffect(() => {\n    setVirtualization(!props.disableVirtualization);\n  }, [props.disableVirtualization, props.autoHeight]);\n  /* eslint-enable react-hooks/exhaustive-deps */\n}","import * as React from 'react';\nexport const useFirstRender = callback => {\n  const isFirstRender = React.useRef(true);\n  if (isFirstRender.current) {\n    isFirstRender.current = false;\n    callback();\n  }\n};","// If no effect ran after this amount of time, we assume that the render was not committed by React\nconst CLEANUP_TIMER_LOOP_MILLIS = 1000;\nexport class TimerBasedCleanupTracking {\n  constructor(timeout = CLEANUP_TIMER_LOOP_MILLIS) {\n    this.timeouts = new Map();\n    this.cleanupTimeout = CLEANUP_TIMER_LOOP_MILLIS;\n    this.cleanupTimeout = timeout;\n  }\n  register(object, unsubscribe, unregisterToken) {\n    if (!this.timeouts) {\n      this.timeouts = new Map();\n    }\n    const timeout = setTimeout(() => {\n      if (typeof unsubscribe === 'function') {\n        unsubscribe();\n      }\n      this.timeouts.delete(unregisterToken.cleanupToken);\n    }, this.cleanupTimeout);\n    this.timeouts.set(unregisterToken.cleanupToken, timeout);\n  }\n  unregister(unregisterToken) {\n    const timeout = this.timeouts.get(unregisterToken.cleanupToken);\n    if (timeout) {\n      this.timeouts.delete(unregisterToken.cleanupToken);\n      clearTimeout(timeout);\n    }\n  }\n  reset() {\n    if (this.timeouts) {\n      this.timeouts.forEach((value, key) => {\n        this.unregister({\n          cleanupToken: key\n        });\n      });\n      this.timeouts = undefined;\n    }\n  }\n}","export class FinalizationRegistryBasedCleanupTracking {\n  constructor() {\n    this.registry = new FinalizationRegistry(unsubscribe => {\n      if (typeof unsubscribe === 'function') {\n        unsubscribe();\n      }\n    });\n  }\n  register(object, unsubscribe, unregisterToken) {\n    this.registry.register(object, unsubscribe, unregisterToken);\n  }\n  unregister(unregisterToken) {\n    this.registry.unregister(unregisterToken);\n  }\n\n  // eslint-disable-next-line class-methods-use-this\n  reset() {}\n}","import * as React from 'react';\nimport { TimerBasedCleanupTracking } from \"../../utils/cleanupTracking/TimerBasedCleanupTracking.js\";\nimport { FinalizationRegistryBasedCleanupTracking } from \"../../utils/cleanupTracking/FinalizationRegistryBasedCleanupTracking.js\";\n/**\n * Signal to the underlying logic what version of the public component API\n * of the data grid is exposed.\n */\nvar GridSignature = /*#__PURE__*/function (GridSignature) {\n  GridSignature[\"DataGrid\"] = \"DataGrid\";\n  GridSignature[\"DataGridPro\"] = \"DataGridPro\";\n  GridSignature[\"DataGridPremium\"] = \"DataGridPremium\";\n  return GridSignature;\n}(GridSignature || {});\n// We use class to make it easier to detect in heap snapshots by name\nclass ObjectToBeRetainedByReact {}\n\n// Based on https://github.com/Bnaya/use-dispose-uncommitted/blob/main/src/finalization-registry-based-impl.ts\n// Check https://github.com/facebook/react/issues/15317 to get more information\nexport function createUseGridApiEventHandler(registryContainer) {\n  let cleanupTokensCounter = 0;\n  return function useGridApiEventHandler(apiRef, eventName, handler, options) {\n    if (registryContainer.registry === null) {\n      registryContainer.registry = typeof FinalizationRegistry !== 'undefined' ? new FinalizationRegistryBasedCleanupTracking() : new TimerBasedCleanupTracking();\n    }\n    const [objectRetainedByReact] = React.useState(new ObjectToBeRetainedByReact());\n    const subscription = React.useRef(null);\n    const handlerRef = React.useRef();\n    handlerRef.current = handler;\n    const cleanupTokenRef = React.useRef(null);\n    if (!subscription.current && handlerRef.current) {\n      const enhancedHandler = (params, event, details) => {\n        if (!event.defaultMuiPrevented) {\n          handlerRef.current?.(params, event, details);\n        }\n      };\n      subscription.current = apiRef.current.subscribeEvent(eventName, enhancedHandler, options);\n      cleanupTokensCounter += 1;\n      cleanupTokenRef.current = {\n        cleanupToken: cleanupTokensCounter\n      };\n      registryContainer.registry.register(objectRetainedByReact,\n      // The callback below will be called once this reference stops being retained\n      () => {\n        subscription.current?.();\n        subscription.current = null;\n        cleanupTokenRef.current = null;\n      }, cleanupTokenRef.current);\n    } else if (!handlerRef.current && subscription.current) {\n      subscription.current();\n      subscription.current = null;\n      if (cleanupTokenRef.current) {\n        registryContainer.registry.unregister(cleanupTokenRef.current);\n        cleanupTokenRef.current = null;\n      }\n    }\n    React.useEffect(() => {\n      if (!subscription.current && handlerRef.current) {\n        const enhancedHandler = (params, event, details) => {\n          if (!event.defaultMuiPrevented) {\n            handlerRef.current?.(params, event, details);\n          }\n        };\n        subscription.current = apiRef.current.subscribeEvent(eventName, enhancedHandler, options);\n      }\n      if (cleanupTokenRef.current && registryContainer.registry) {\n        // If the effect was called, it means that this render was committed\n        // so we can trust the cleanup function to remove the listener.\n        registryContainer.registry.unregister(cleanupTokenRef.current);\n        cleanupTokenRef.current = null;\n      }\n      return () => {\n        subscription.current?.();\n        subscription.current = null;\n      };\n    }, [apiRef, eventName, options]);\n  };\n}\nconst registryContainer = {\n  registry: null\n};\n\n// TODO: move to @mui/x-data-grid/internals\n// eslint-disable-next-line @typescript-eslint/naming-convention\nexport const unstable_resetCleanupTracking = () => {\n  registryContainer.registry?.reset();\n  registryContainer.registry = null;\n};\nexport const useGridApiEventHandler = createUseGridApiEventHandler(registryContainer);\nconst optionsSubscriberOptions = {\n  isFirst: true\n};\nexport function useGridApiOptionHandler(apiRef, eventName, handler) {\n  useGridApiEventHandler(apiRef, eventName, handler, optionsSubscriberOptions);\n}\nexport { GridSignature };","import * as React from 'react';\nexport function useGridApiMethod(privateApiRef, apiMethods, visibility) {\n  const isFirstRender = React.useRef(true);\n  React.useEffect(() => {\n    isFirstRender.current = false;\n    privateApiRef.current.register(visibility, apiMethods);\n  }, [privateApiRef, visibility, apiMethods]);\n  if (isFirstRender.current) {\n    privateApiRef.current.register(visibility, apiMethods);\n  }\n}","import * as React from 'react';\nimport { GridConfigurationContext } from \"../../components/GridConfigurationContext.js\";\nexport const useGridConfiguration = () => {\n  const configuration = React.useContext(GridConfigurationContext);\n  if (configuration === undefined) {\n    throw new Error(['MUI X: Could not find the data grid configuration context.', 'It looks like you rendered your component outside of a DataGrid, DataGridPro or DataGridPremium parent component.', 'This can also happen if you are bundling multiple versions of the data grid.'].join('\\n'));\n  }\n  return configuration;\n};","import * as React from 'react';\nexport function useGridLogger(privateApiRef, name) {\n  const logger = React.useRef(null);\n  if (logger.current) {\n    return logger.current;\n  }\n  const newLogger = privateApiRef.current.getLogger(name);\n  logger.current = newLogger;\n  return newLogger;\n}","import * as React from 'react';\nimport { isFunction } from \"../../utils/utils.js\";\nimport { useGridLogger } from \"./useGridLogger.js\";\nexport const useGridNativeEventListener = (apiRef, ref, eventName, handler, options) => {\n  const logger = useGridLogger(apiRef, 'useNativeEventListener');\n  const [added, setAdded] = React.useState(false);\n  const handlerRef = React.useRef(handler);\n  const targetElement = isFunction(ref) ? ref() : ref?.current ?? null;\n  const wrapHandler = React.useCallback(event => {\n    return handlerRef.current && handlerRef.current(event);\n  }, []);\n  React.useEffect(() => {\n    handlerRef.current = handler;\n  }, [handler]);\n  React.useEffect(() => {\n    if (targetElement && eventName && !added) {\n      logger.debug(`Binding native ${eventName} event`);\n      targetElement.addEventListener(eventName, wrapHandler, options);\n      setAdded(true);\n      const unsubscribe = () => {\n        logger.debug(`Clearing native ${eventName} event`);\n        targetElement.removeEventListener(eventName, wrapHandler, options);\n      };\n      apiRef.current.subscribeEvent('unmount', unsubscribe);\n    }\n  }, [targetElement, wrapHandler, eventName, added, logger, options, apiRef]);\n};","import * as React from 'react';\nexport const GridPrivateApiContext = /*#__PURE__*/React.createContext(undefined);\nif (process.env.NODE_ENV !== 'production') {\n  GridPrivateApiContext.displayName = 'GridPrivateApiContext';\n}\nexport function useGridPrivateApiContext() {\n  const privateApiRef = React.useContext(GridPrivateApiContext);\n  if (privateApiRef === undefined) {\n    throw new Error(['MUI X: Could not find the data grid private context.', 'It looks like you rendered your component outside of a DataGrid, DataGridPro or DataGridPremium parent component.', 'This can also happen if you are bundling multiple versions of the data grid.'].join('\\n'));\n  }\n  return privateApiRef;\n}","import * as React from 'react';\nimport { fastObjectShallowCompare } from '@mui/x-internals/fastObjectShallowCompare';\nimport { warnOnce } from '@mui/x-internals/warning';\nimport { useLazyRef } from \"./useLazyRef.js\";\nimport { useOnMount } from \"./useOnMount.js\";\nfunction isOutputSelector(selector) {\n  return selector.acceptsApiRef;\n}\n// TODO v8: Remove this function\nfunction applySelector(apiRef, selector) {\n  if (isOutputSelector(selector)) {\n    return selector(apiRef);\n  }\n  return selector(apiRef.current.state);\n}\n\n// TODO v8: Rename this function to `applySelector`\nfunction applySelectorV8(apiRef, selector, args, instanceId) {\n  if (isOutputSelector(selector)) {\n    return selector(apiRef, args);\n  }\n  return selector(apiRef.current.state, instanceId);\n}\nconst defaultCompare = Object.is;\nexport const objectShallowCompare = fastObjectShallowCompare;\nconst createRefs = () => ({\n  state: null,\n  equals: null,\n  selector: null\n});\n\n// TODO v8: Remove this function\nexport const useGridSelector = (apiRef, selector, equals = defaultCompare) => {\n  if (process.env.NODE_ENV !== 'production') {\n    if (!apiRef.current.state) {\n      warnOnce(['MUI X: `useGridSelector` has been called before the initialization of the state.', 'This hook can only be used inside the context of the grid.']);\n    }\n  }\n  const refs = useLazyRef(createRefs);\n  const didInit = refs.current.selector !== null;\n  const [state, setState] = React.useState(\n  // We don't use an initialization function to avoid allocations\n  didInit ? null : applySelector(apiRef, selector));\n  refs.current.state = state;\n  refs.current.equals = equals;\n  refs.current.selector = selector;\n  useOnMount(() => {\n    return apiRef.current.store.subscribe(() => {\n      const newState = applySelector(apiRef, refs.current.selector);\n      if (!refs.current.equals(refs.current.state, newState)) {\n        refs.current.state = newState;\n        setState(newState);\n      }\n    });\n  });\n  return state;\n};\n\n// TODO v8: Rename this function to `useGridSelector`\nexport const useGridSelectorV8 = (apiRef, selector, args = undefined, equals = defaultCompare) => {\n  if (process.env.NODE_ENV !== 'production') {\n    if (!apiRef.current.state) {\n      warnOnce(['MUI X: `useGridSelector` has been called before the initialization of the state.', 'This hook can only be used inside the context of the grid.']);\n    }\n  }\n  const refs = useLazyRef(createRefs);\n  const didInit = refs.current.selector !== null;\n  const [state, setState] = React.useState(\n  // We don't use an initialization function to avoid allocations\n  didInit ? null : applySelectorV8(apiRef, selector, args, apiRef.current.instanceId));\n  refs.current.state = state;\n  refs.current.equals = equals;\n  refs.current.selector = selector;\n  useOnMount(() => {\n    return apiRef.current.store.subscribe(() => {\n      const newState = applySelectorV8(apiRef, refs.current.selector, args, apiRef.current.instanceId);\n      if (!refs.current.equals(refs.current.state, newState)) {\n        refs.current.state = newState;\n        setState(newState);\n      }\n    });\n  });\n  return state;\n};","import * as React from 'react';\nimport { gridPaginationRowRangeSelector, gridPaginatedVisibleSortedGridRowEntriesSelector } from \"../features/pagination/gridPaginationSelector.js\";\nimport { gridExpandedSortedRowEntriesSelector } from \"../features/filter/gridFilterSelector.js\";\nexport const getVisibleRows = (apiRef, props) => {\n  let rows;\n  let range;\n  if (props.pagination && props.paginationMode === 'client') {\n    range = gridPaginationRowRangeSelector(apiRef);\n    rows = gridPaginatedVisibleSortedGridRowEntriesSelector(apiRef);\n  } else {\n    rows = gridExpandedSortedRowEntriesSelector(apiRef);\n    if (rows.length === 0) {\n      range = null;\n    } else {\n      range = {\n        firstRowIndex: 0,\n        lastRowIndex: rows.length - 1\n      };\n    }\n  }\n  return {\n    rows,\n    range\n  };\n};\n\n/**\n * Computes the list of rows that are reachable by scroll.\n * Depending on whether pagination is enabled, it will return the rows in the current page.\n * - If the pagination is disabled or in server mode, it equals all the visible rows.\n * - If the row tree has several layers, it contains up to `state.pageSize` top level rows and all their descendants.\n * - If the row tree is flat, it only contains up to `state.pageSize` rows.\n */\nexport const useGridVisibleRows = (apiRef, props) => {\n  const response = getVisibleRows(apiRef, props);\n  return React.useMemo(() => ({\n    rows: response.rows,\n    range: response.range\n  }), [response.rows, response.range]);\n};","import * as React from 'react';\nimport { unstable_useEnhancedEffect as useEnhancedEffect } from '@mui/utils';\nconst noop = () => {};\n\n/**\n * Runs an effect once, when `condition` is true.\n */\nexport const useRunOnce = (condition, effect) => {\n  const didRun = React.useRef(false);\n  useEnhancedEffect(() => {\n    if (didRun.current || !condition) {\n      return noop;\n    }\n    didRun.current = true;\n    return effect();\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n  }, [didRun.current || condition]);\n};","import { GridPinnedColumnPosition } from \"../../hooks/features/columns/index.js\";\nexport const getPinnedCellOffset = (pinnedPosition, computedWidth, columnIndex, columnPositions, dimensions) => {\n  const scrollbarWidth = dimensions.hasScrollY ? dimensions.scrollbarSize : 0;\n  let pinnedOffset;\n  switch (pinnedPosition) {\n    case GridPinnedColumnPosition.LEFT:\n      pinnedOffset = columnPositions[columnIndex];\n      break;\n    case GridPinnedColumnPosition.RIGHT:\n      pinnedOffset = dimensions.columnsTotalWidth - columnPositions[columnIndex] - computedWidth + scrollbarWidth;\n      break;\n    default:\n      pinnedOffset = 0;\n      break;\n  }\n  return pinnedOffset;\n};","import * as React from 'react';\nimport { createSvgIcon } from '@mui/material/utils';\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nexport const GridArrowUpwardIcon = createSvgIcon(/*#__PURE__*/_jsx(\"path\", {\n  d: \"M4 12l1.41 1.41L11 7.83V20h2V7.83l5.58 5.59L20 12l-8-8-8 8z\"\n}), 'ArrowUpward');\nexport const GridArrowDownwardIcon = createSvgIcon(/*#__PURE__*/_jsx(\"path\", {\n  d: \"M20 12l-1.41-1.41L13 16.17V4h-2v12.17l-5.58-5.59L4 12l8 8 8-8z\"\n}), 'ArrowDownward');\nexport const GridKeyboardArrowRight = createSvgIcon(/*#__PURE__*/_jsx(\"path\", {\n  d: \"M8.59 16.59 13.17 12 8.59 7.41 10 6l6 6-6 6-1.41-1.41z\"\n}), 'KeyboardArrowRight');\nexport const GridExpandMoreIcon = createSvgIcon(/*#__PURE__*/_jsx(\"path\", {\n  d: \"M16.59 8.59 12 13.17 7.41 8.59 6 10l6 6 6-6z\"\n}), 'ExpandMore');\nexport const GridFilterListIcon = createSvgIcon(/*#__PURE__*/_jsx(\"path\", {\n  d: \"M10 18h4v-2h-4v2zM3 6v2h18V6H3zm3 7h12v-2H6v2z\"\n}), 'FilterList');\nexport const GridFilterAltIcon = createSvgIcon(/*#__PURE__*/_jsx(\"path\", {\n  d: \"M4.25 5.61C6.27 8.2 10 13 10 13v6c0 .55.45 1 1 1h2c.55 0 1-.45 1-1v-6s3.72-4.8 5.74-7.39c.51-.66.04-1.61-.79-1.61H5.04c-.83 0-1.3.95-.79 1.61z\"\n}), 'FilterAlt');\nexport const GridSearchIcon = createSvgIcon(/*#__PURE__*/_jsx(\"path\", {\n  d: \"M15.5 14h-.79l-.28-.27C15.41 12.59 16 11.11 16 9.5 16 5.91 13.09 3 9.5 3S3 5.91 3 9.5 5.91 16 9.5 16c1.61 0 3.09-.59 4.23-1.57l.27.28v.79l5 4.99L20.49 19l-4.99-5zm-6 0C7.01 14 5 11.99 5 9.5S7.01 5 9.5 5 14 7.01 14 9.5 11.99 14 9.5 14z\"\n}), 'Search');\nexport const GridMenuIcon = createSvgIcon(/*#__PURE__*/_jsx(\"path\", {\n  d: \"M3 18h18v-2H3v2zm0-5h18v-2H3v2zm0-7v2h18V6H3z\"\n}), 'Menu');\nexport const GridCheckCircleIcon = createSvgIcon(/*#__PURE__*/_jsx(\"path\", {\n  d: \"M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm-2 15l-5-5 1.41-1.41L10 14.17l7.59-7.59L19 8l-9 9z\"\n}), 'CheckCircle');\nexport const GridColumnIcon = createSvgIcon(/*#__PURE__*/_jsx(\"path\", {\n  d: \"M6 5H3c-.55 0-1 .45-1 1v12c0 .55.45 1 1 1h3c.55 0 1-.45 1-1V6c0-.55-.45-1-1-1zm14 0h-3c-.55 0-1 .45-1 1v12c0 .55.45 1 1 1h3c.55 0 1-.45 1-1V6c0-.55-.45-1-1-1zm-7 0h-3c-.55 0-1 .45-1 1v12c0 .55.45 1 1 1h3c.55 0 1-.45 1-1V6c0-.55-.45-1-1-1z\"\n}), 'ColumnIcon');\nexport const GridSeparatorIcon = createSvgIcon(/*#__PURE__*/_jsx(\"rect\", {\n  width: \"1\",\n  height: \"24\",\n  x: \"11.5\",\n  rx: \"0.5\"\n}), 'Separator');\nexport const GridViewHeadlineIcon = createSvgIcon(/*#__PURE__*/_jsx(\"path\", {\n  d: \"M4 15h16v-2H4v2zm0 4h16v-2H4v2zm0-8h16V9H4v2zm0-6v2h16V5H4z\"\n}), 'ViewHeadline');\nexport const GridTableRowsIcon = createSvgIcon(/*#__PURE__*/_jsx(\"path\", {\n  d: \"M21,8H3V4h18V8z M21,10H3v4h18V10z M21,16H3v4h18V16z\"\n}), 'TableRows');\nexport const GridViewStreamIcon = createSvgIcon(/*#__PURE__*/_jsx(\"path\", {\n  d: \"M4 18h17v-6H4v6zM4 5v6h17V5H4z\"\n}), 'ViewStream');\nexport const GridTripleDotsVerticalIcon = createSvgIcon(/*#__PURE__*/_jsx(\"path\", {\n  d: \"M12 8c1.1 0 2-.9 2-2s-.9-2-2-2-2 .9-2 2 .9 2 2 2zm0 2c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2zm0 6c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2z\"\n}), 'TripleDotsVertical');\nexport const GridCloseIcon = createSvgIcon(/*#__PURE__*/_jsx(\"path\", {\n  d: \"M19 6.41L17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z\"\n}), 'Close');\nexport const GridAddIcon = createSvgIcon(/*#__PURE__*/_jsx(\"path\", {\n  d: \"M19 13h-6v6h-2v-6H5v-2h6V5h2v6h6v2z\"\n}), 'Add');\nexport const GridRemoveIcon = createSvgIcon(/*#__PURE__*/_jsx(\"path\", {\n  d: \"M19 13H5v-2h14v2z\"\n}), 'Remove');\nexport const GridLoadIcon = createSvgIcon(/*#__PURE__*/_jsx(\"path\", {\n  d: \"M12 4V1L8 5l4 4V6c3.31 0 6 2.69 6 6 0 1.01-.25 1.97-.7 2.8l1.46 1.46C19.54 15.03 20 13.57 20 12c0-4.42-3.58-8-8-8zm0 14c-3.31 0-6-2.69-6-6 0-1.01.25-1.97.7-2.8L5.24 7.74C4.46 8.97 4 10.43 4 12c0 4.42 3.58 8 8 8v3l4-4-4-4v3z\"\n}), 'Load');\nexport const GridDragIcon = createSvgIcon(/*#__PURE__*/_jsx(\"path\", {\n  d: \"M11 18c0 1.1-.9 2-2 2s-2-.9-2-2 .9-2 2-2 2 .9 2 2zm-2-8c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2zm0-6c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2zm6 4c1.1 0 2-.9 2-2s-.9-2-2-2-2 .9-2 2 .9 2 2 2zm0 2c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2zm0 6c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2z\"\n}), 'Drag');\nexport const GridSaveAltIcon = createSvgIcon(/*#__PURE__*/_jsx(\"path\", {\n  d: \"M19 12v7H5v-7H3v7c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2v-7h-2zm-6 .67l2.59-2.58L17 11.5l-5 5-5-5 1.41-1.41L11 12.67V3h2z\"\n}), 'SaveAlt');\nexport const GridCheckIcon = createSvgIcon(/*#__PURE__*/_jsx(\"path\", {\n  d: \"M9 16.17L4.83 12l-1.42 1.41L9 19 21 7l-1.41-1.41z\"\n}), 'Check');\nexport const GridMoreVertIcon = createSvgIcon(/*#__PURE__*/_jsx(\"path\", {\n  d: \"M12 8c1.1 0 2-.9 2-2s-.9-2-2-2-2 .9-2 2 .9 2 2 2zm0 2c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2zm0 6c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2z\"\n}), 'MoreVert');\nexport const GridVisibilityOffIcon = createSvgIcon(/*#__PURE__*/_jsx(\"path\", {\n  d: \"M12 7c2.76 0 5 2.24 5 5 0 .65-.13 1.26-.36 1.83l2.92 2.92c1.51-1.26 2.7-2.89 3.43-4.75-1.73-4.39-6-7.5-11-7.5-1.4 0-2.74.25-3.98.7l2.16 2.16C10.74 7.13 11.35 7 12 7zM2 4.27l2.28 2.28.46.46C3.08 8.3 1.78 10.02 1 12c1.73 4.39 6 7.5 11 7.5 1.55 0 3.03-.3 4.38-.84l.42.42L19.73 22 21 20.73 3.27 3 2 4.27zM7.53 9.8l1.55 1.55c-.05.21-.08.43-.08.65 0 1.66 1.34 3 3 3 .22 0 .44-.03.65-.08l1.55 1.55c-.67.33-1.41.53-2.2.53-2.76 0-5-2.24-5-5 0-.79.2-1.53.53-2.2zm4.31-.78l3.15 3.15.02-.16c0-1.66-1.34-3-3-3l-.17.01z\"\n}), 'VisibilityOff');\nexport const GridViewColumnIcon = createSvgIcon(/*#__PURE__*/_jsx(\"g\", {\n  children: /*#__PURE__*/_jsx(\"path\", {\n    d: \"M14.67,5v14H9.33V5H14.67z M15.67,19H21V5h-5.33V19z M8.33,19V5H3v14H8.33z\"\n  })\n}), 'ViewColumn');\nexport const GridClearIcon = createSvgIcon(/*#__PURE__*/_jsx(\"path\", {\n  d: \"M19 6.41L17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z\"\n}), 'Clear');\nexport const GridDeleteIcon = createSvgIcon(/*#__PURE__*/_jsx(\"path\", {\n  d: \"M6 19c0 1.1.9 2 2 2h8c1.1 0 2-.9 2-2V7H6v12zM19 4h-3.5l-1-1h-5l-1 1H5v2h14V4z\"\n}), 'Delete');\nexport const GridDeleteForeverIcon = createSvgIcon(/*#__PURE__*/_jsx(\"path\", {\n  d: \"M6 19c0 1.1.9 2 2 2h8c1.1 0 2-.9 2-2V7H6v12zm2.46-7.12l1.41-1.41L12 12.59l2.12-2.12 1.41 1.41L13.41 14l2.12 2.12-1.41 1.41L12 15.41l-2.12 2.12-1.41-1.41L10.59 14l-2.13-2.12zM15.5 4l-1-1h-5l-1 1H5v2h14V4z\"\n}), 'Delete');","export function isLeaf(node) {\n  return node.field !== undefined;\n}\n\n/**\n * A function used to process headerClassName params.\n */\n\n/**\n * The union type representing the [[GridColDef]] column header class type.\n */","var GridEditModes = /*#__PURE__*/function (GridEditModes) {\n  GridEditModes[\"Cell\"] = \"cell\";\n  GridEditModes[\"Row\"] = \"row\";\n  return GridEditModes;\n}(GridEditModes || {});\nvar GridCellModes = /*#__PURE__*/function (GridCellModes) {\n  GridCellModes[\"Edit\"] = \"edit\";\n  GridCellModes[\"View\"] = \"view\";\n  return GridCellModes;\n}(GridCellModes || {});\nvar GridRowModes = /*#__PURE__*/function (GridRowModes) {\n  GridRowModes[\"Edit\"] = \"edit\";\n  GridRowModes[\"View\"] = \"view\";\n  return GridRowModes;\n}(GridRowModes || {});\nexport { GridEditModes, GridCellModes, GridRowModes };","/**\n * Filter item definition interface.\n * @demos\n *   - [Custom filter operator](/x/react-data-grid/filtering/customization/#create-a-custom-operator)\n */\nvar GridLogicOperator = /*#__PURE__*/function (GridLogicOperator) {\n  GridLogicOperator[\"And\"] = \"and\";\n  GridLogicOperator[\"Or\"] = \"or\";\n  return GridLogicOperator;\n}(GridLogicOperator || {});\nexport { GridLogicOperator };","/**\n * Params passed to `apiRef.current.setEditCellValue`.\n */\nvar GridCellEditStartReasons = /*#__PURE__*/function (GridCellEditStartReasons) {\n  GridCellEditStartReasons[\"enterKeyDown\"] = \"enterKeyDown\";\n  GridCellEditStartReasons[\"cellDoubleClick\"] = \"cellDoubleClick\";\n  GridCellEditStartReasons[\"printableKeyDown\"] = \"printableKeyDown\";\n  GridCellEditStartReasons[\"deleteKeyDown\"] = \"deleteKeyDown\";\n  GridCellEditStartReasons[\"pasteKeyDown\"] = \"pasteKeyDown\";\n  return GridCellEditStartReasons;\n}(GridCellEditStartReasons || {});\n/**\n * Params passed to the `cellEditStart` event.\n */\nvar GridCellEditStopReasons = /*#__PURE__*/function (GridCellEditStopReasons) {\n  GridCellEditStopReasons[\"cellFocusOut\"] = \"cellFocusOut\";\n  GridCellEditStopReasons[\"escapeKeyDown\"] = \"escapeKeyDown\";\n  GridCellEditStopReasons[\"enterKeyDown\"] = \"enterKeyDown\";\n  GridCellEditStopReasons[\"tabKeyDown\"] = \"tabKeyDown\";\n  GridCellEditStopReasons[\"shiftTabKeyDown\"] = \"shiftTabKeyDown\";\n  return GridCellEditStopReasons;\n}(GridCellEditStopReasons || {});\n/**\n * Params passed to the `cellEditStop event.\n */\n// https://github.com/mui/mui-x/pull/3738#discussion_r798504277\nexport { GridCellEditStartReasons, GridCellEditStopReasons };","/**\n * Object passed as parameter in the row callbacks.\n * @demos\n *   - [Master detail](/x/react-data-grid/master-detail/)\n */\n/**\n * Object passed as parameter in the row `getRowClassName` callback prop.\n * @demos\n *   - [Styling rows](/x/react-data-grid/style/#styling-rows)\n */\n/**\n * Object passed as parameter in the row `getRowHeight` callback prop.\n */\n/**\n * The getRowHeight return value.\n */\nvar GridRowEditStartReasons = /*#__PURE__*/function (GridRowEditStartReasons) {\n  GridRowEditStartReasons[\"enterKeyDown\"] = \"enterKeyDown\";\n  GridRowEditStartReasons[\"cellDoubleClick\"] = \"cellDoubleClick\";\n  GridRowEditStartReasons[\"printableKeyDown\"] = \"printableKeyDown\";\n  GridRowEditStartReasons[\"deleteKeyDown\"] = \"deleteKeyDown\";\n  return GridRowEditStartReasons;\n}(GridRowEditStartReasons || {});\n/**\n * Params passed to the `rowEditStart` event.\n */\nvar GridRowEditStopReasons = /*#__PURE__*/function (GridRowEditStopReasons) {\n  GridRowEditStopReasons[\"rowFocusOut\"] = \"rowFocusOut\";\n  GridRowEditStopReasons[\"escapeKeyDown\"] = \"escapeKeyDown\";\n  GridRowEditStopReasons[\"enterKeyDown\"] = \"enterKeyDown\";\n  GridRowEditStopReasons[\"tabKeyDown\"] = \"tabKeyDown\";\n  GridRowEditStopReasons[\"shiftTabKeyDown\"] = \"shiftTabKeyDown\";\n  return GridRowEditStopReasons;\n}(GridRowEditStopReasons || {});\n/**\n * Object passed as parameter in the row `getRowSpacing` callback prop.\n * @demos\n *   - [Row spacing](/x/react-data-grid/row-height/#row-spacing)\n */\n/**\n * The getRowSpacing return value.\n */\n// https://github.com/mui/mui-x/pull/3738#discussion_r798504277\nexport { GridRowEditStartReasons, GridRowEditStopReasons };","import _formatMuiErrorMessage from \"@mui/utils/formatMuiErrorMessage\";\n// It should to be noted that this function isn't equivalent to `text-transform: capitalize`.\n//\n// A strict capitalization should uppercase the first letter of each word in the sentence.\n// We only handle the first word.\nexport default function capitalize(string) {\n  if (typeof string !== 'string') {\n    throw new Error(process.env.NODE_ENV !== \"production\" ? `MUI: \\`capitalize(string)\\` expects a string argument.` : _formatMuiErrorMessage(7));\n  }\n  return string.charAt(0).toUpperCase() + string.slice(1);\n}","/**\n * WARNING: Don't import this directly.\n * Use `MuiError` from `@mui/internal-babel-macros/MuiError.macro` instead.\n * @param {number} code\n */\nexport default function formatMuiErrorMessage(code) {\n  // Apply babel-plugin-transform-template-literals in loose mode\n  // loose mode is safe if we're concatenating primitives\n  // see https://babeljs.io/docs/en/babel-plugin-transform-template-literals#loose\n  /* eslint-disable prefer-template */\n  let url = 'https://mui.com/production-error/?code=' + code;\n  for (let i = 1; i < arguments.length; i += 1) {\n    // rest params over-transpile for this case\n    // eslint-disable-next-line prefer-rest-params\n    url += '&args[]=' + encodeURIComponent(arguments[i]);\n  }\n  return 'Minified MUI error #' + code + '; visit ' + url + ' for the full message.';\n  /* eslint-enable prefer-template */\n}","export default function composeClasses(slots, getUtilityClass, classes = undefined) {\n  const output = {};\n  Object.keys(slots).forEach(\n  // `Object.keys(slots)` can't be wider than `T` because we infer `T` from `slots`.\n  // @ts-expect-error https://github.com/microsoft/TypeScript/pull/12253#issuecomment-263132208\n  slot => {\n    output[slot] = slots[slot].reduce((acc, key) => {\n      if (key) {\n        const utilityClass = getUtilityClass(key);\n        if (utilityClass !== '') {\n          acc.push(utilityClass);\n        }\n        if (classes && classes[key]) {\n          acc.push(classes[key]);\n        }\n      }\n      return acc;\n    }, []).join(' ');\n  });\n  return output;\n}","// Corresponds to 10 frames at 60 Hz.\n// A few bytes payload overhead when lodash/debounce is ~3 kB and debounce ~300 B.\nexport default function debounce(func, wait = 166) {\n  let timeout;\n  function debounced(...args) {\n    const later = () => {\n      // @ts-ignore\n      func.apply(this, args);\n    };\n    clearTimeout(timeout);\n    timeout = setTimeout(later, wait);\n  }\n  debounced.clear = () => {\n    clearTimeout(timeout);\n  };\n  return debounced;\n}","const defaultGenerator = componentName => componentName;\nconst createClassNameGenerator = () => {\n  let generate = defaultGenerator;\n  return {\n    configure(generator) {\n      generate = generator;\n    },\n    generate(componentName) {\n      return generate(componentName);\n    },\n    reset() {\n      generate = defaultGenerator;\n    }\n  };\n};\nconst ClassNameGenerator = createClassNameGenerator();\nexport default ClassNameGenerator;","import ClassNameGenerator from '../ClassNameGenerator';\nexport const globalStateClasses = {\n  active: 'active',\n  checked: 'checked',\n  completed: 'completed',\n  disabled: 'disabled',\n  error: 'error',\n  expanded: 'expanded',\n  focused: 'focused',\n  focusVisible: 'focusVisible',\n  open: 'open',\n  readOnly: 'readOnly',\n  required: 'required',\n  selected: 'selected'\n};\nexport default function generateUtilityClass(componentName, slot, globalStatePrefix = 'Mui') {\n  const globalStateClass = globalStateClasses[slot];\n  return globalStateClass ? `${globalStatePrefix}-${globalStateClass}` : `${ClassNameGenerator.generate(componentName)}-${slot}`;\n}\nexport function isGlobalState(slot) {\n  return globalStateClasses[slot] !== undefined;\n}","import generateUtilityClass from '../generateUtilityClass';\nexport default function generateUtilityClasses(componentName, slots, globalStatePrefix = 'Mui') {\n  const result = {};\n  slots.forEach(slot => {\n    result[slot] = generateUtilityClass(componentName, slot, globalStatePrefix);\n  });\n  return result;\n}","export default function ownerDocument(node) {\n  return node && node.ownerDocument || document;\n}","'use client';\n\nimport * as React from 'react';\n\n/**\n * A version of `React.useLayoutEffect` that does not show a warning when server-side rendering.\n * This is useful for effects that are only needed for client-side rendering but not for SSR.\n *\n * Before you use this hook, make sure to read https://gist.github.com/gaearon/e7d97cdf38a2907924ea12e4ebdf3c85\n * and confirm it doesn't apply to your use-case.\n */\nconst useEnhancedEffect = typeof window !== 'undefined' ? React.useLayoutEffect : React.useEffect;\nexport default useEnhancedEffect;","'use client';\n\nimport * as React from 'react';\nimport useEnhancedEffect from '../useEnhancedEffect';\n\n/**\n * Inspired by https://github.com/facebook/react/issues/14099#issuecomment-440013892\n * See RFC in https://github.com/reactjs/rfcs/pull/220\n */\n\nfunction useEventCallback(fn) {\n  const ref = React.useRef(fn);\n  useEnhancedEffect(() => {\n    ref.current = fn;\n  });\n  return React.useRef((...args) =>\n  // @ts-expect-error hide `this`\n  (0, ref.current)(...args)).current;\n}\nexport default useEventCallback;","'use client';\n\nimport * as React from 'react';\nimport setRef from '../setRef';\nexport default function useForkRef(...refs) {\n  /**\n   * This will create a new function if the refs passed to this hook change and are all defined.\n   * This means react will call the old forkRef with `null` and the new forkRef\n   * with the ref. Cleanup naturally emerges from this behavior.\n   */\n  return React.useMemo(() => {\n    if (refs.every(ref => ref == null)) {\n      return null;\n    }\n    return instance => {\n      refs.forEach(ref => {\n        setRef(ref, instance);\n      });\n    };\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n  }, refs);\n}","/**\n * TODO v5: consider making it private\n *\n * passes {value} to {ref}\n *\n * WARNING: Be sure to only call this inside a callback that is passed as a ref.\n * Otherwise, make sure to cleanup the previous {ref} if it changes. See\n * https://github.com/mui/material-ui/issues/13539\n *\n * Useful if you want to expose the ref of an inner component to the public API\n * while still using it inside the component.\n * @param ref A ref callback or ref object. If anything falsy, this is a no-op.\n */\nexport default function setRef(ref, value) {\n  if (typeof ref === 'function') {\n    ref(value);\n  } else if (ref) {\n    ref.current = value;\n  }\n}","'use client';\n\nimport * as React from 'react';\nlet globalId = 0;\nfunction useGlobalId(idOverride) {\n  const [defaultId, setDefaultId] = React.useState(idOverride);\n  const id = idOverride || defaultId;\n  React.useEffect(() => {\n    if (defaultId == null) {\n      // Fallback to this default id when possible.\n      // Use the incrementing value for client-side rendering only.\n      // We can't use it server-side.\n      // If you want to use random values please consider the Birthday Problem: https://en.wikipedia.org/wiki/Birthday_problem\n      globalId += 1;\n      setDefaultId(`mui-${globalId}`);\n    }\n  }, [defaultId]);\n  return id;\n}\n\n// downstream bundlers may remove unnecessary concatenation, but won't remove toString call -- Workaround for https://github.com/webpack/webpack/issues/14814\nconst maybeReactUseId = React['useId'.toString()];\n/**\n *\n * @example <div id={useId()} />\n * @param idOverride\n * @returns {string}\n */\nexport default function useId(idOverride) {\n  if (maybeReactUseId !== undefined) {\n    const reactId = maybeReactUseId();\n    return idOverride != null ? idOverride : reactId;\n  }\n  // eslint-disable-next-line react-hooks/rules-of-hooks -- `React.useId` is invariant at runtime.\n  return useGlobalId(idOverride);\n}","'use client';\n\nimport * as React from 'react';\nconst UNINITIALIZED = {};\n\n/**\n * A React.useRef() that is initialized lazily with a function. Note that it accepts an optional\n * initialization argument, so the initialization function doesn't need to be an inline closure.\n *\n * @usage\n *   const ref = useLazyRef(sortColumns, columns)\n */\nexport default function useLazyRef(init, initArg) {\n  const ref = React.useRef(UNINITIALIZED);\n  if (ref.current === UNINITIALIZED) {\n    ref.current = init(initArg);\n  }\n  return ref;\n}","'use client';\n\nimport * as React from 'react';\nconst EMPTY = [];\n\n/**\n * A React.useEffect equivalent that runs once, when the component is mounted.\n */\nexport default function useOnMount(fn) {\n  /* eslint-disable react-hooks/exhaustive-deps */\n  React.useEffect(fn, EMPTY);\n  /* eslint-enable react-hooks/exhaustive-deps */\n}","'use client';\n\nimport useLazyRef from '../useLazyRef/useLazyRef';\nimport useOnMount from '../useOnMount/useOnMount';\nexport class Timeout {\n  constructor() {\n    this.currentId = null;\n    this.clear = () => {\n      if (this.currentId !== null) {\n        clearTimeout(this.currentId);\n        this.currentId = null;\n      }\n    };\n    this.disposeEffect = () => {\n      return this.clear;\n    };\n  }\n  static create() {\n    return new Timeout();\n  }\n  /**\n   * Executes `fn` after `delay`, clearing any previously scheduled call.\n   */\n  start(delay, fn) {\n    this.clear();\n    this.currentId = setTimeout(() => {\n      this.currentId = null;\n      fn();\n    }, delay);\n  }\n}\nexport default function useTimeout() {\n  const timeout = useLazyRef(Timeout.create).current;\n  useOnMount(timeout.disposeEffect);\n  return timeout;\n}","import { GridPinnedColumnPosition } from \"../hooks/features/columns/gridColumnsInterfaces.js\";\nexport const shouldCellShowRightBorder = (pinnedPosition, indexInSection, sectionLength, showCellVerticalBorderRootProp, gridHasFiller) => {\n  const isSectionLastCell = indexInSection === sectionLength - 1;\n  if (pinnedPosition === GridPinnedColumnPosition.LEFT && isSectionLastCell) {\n    return true;\n  }\n  if (showCellVerticalBorderRootProp) {\n    if (pinnedPosition === GridPinnedColumnPosition.LEFT) {\n      return true;\n    }\n    if (pinnedPosition === GridPinnedColumnPosition.RIGHT) {\n      return !isSectionLastCell;\n    }\n    // pinnedPosition === undefined, middle section\n    return !isSectionLastCell || gridHasFiller;\n  }\n  return false;\n};\nexport const shouldCellShowLeftBorder = (pinnedPosition, indexInSection) => {\n  return pinnedPosition === GridPinnedColumnPosition.RIGHT && indexInSection === 0;\n};","import { lruMemoize, createSelectorCreator } from 'reselect';\nimport { warnOnce } from '@mui/x-internals/warning';\nconst reselectCreateSelector = createSelectorCreator({\n  memoize: lruMemoize,\n  memoizeOptions: {\n    maxSize: 1,\n    equalityCheck: Object.is\n  }\n});\n\n// TODO v8: Remove this type\n\n// TODO v8: Rename this type to `OutputSelector`\n\n// TODO v8: Remove this type\n\n// TODO v8: Rename this type to `SelectorArgs`\n\n// TODO v8: Remove this type\n\n// TODO v8: Rename this type to `CreateSelectorFunction`\n\nconst cache = new WeakMap();\nfunction checkIsAPIRef(value) {\n  return 'current' in value && 'instanceId' in value.current;\n}\nconst DEFAULT_INSTANCE_ID = {\n  id: 'default'\n};\n\n// TODO v8: Remove this function\nexport const createSelector = (a, b, c, d, e, f, ...other) => {\n  if (other.length > 0) {\n    throw new Error('Unsupported number of selectors');\n  }\n  let selector;\n  if (a && b && c && d && e && f) {\n    selector = (stateOrApiRef, instanceIdParam) => {\n      const isAPIRef = checkIsAPIRef(stateOrApiRef);\n      const instanceId = instanceIdParam ?? (isAPIRef ? stateOrApiRef.current.instanceId : DEFAULT_INSTANCE_ID);\n      const state = isAPIRef ? stateOrApiRef.current.state : stateOrApiRef;\n      const va = a(state, instanceId);\n      const vb = b(state, instanceId);\n      const vc = c(state, instanceId);\n      const vd = d(state, instanceId);\n      const ve = e(state, instanceId);\n      return f(va, vb, vc, vd, ve);\n    };\n  } else if (a && b && c && d && e) {\n    selector = (stateOrApiRef, instanceIdParam) => {\n      const isAPIRef = checkIsAPIRef(stateOrApiRef);\n      const instanceId = instanceIdParam ?? (isAPIRef ? stateOrApiRef.current.instanceId : DEFAULT_INSTANCE_ID);\n      const state = isAPIRef ? stateOrApiRef.current.state : stateOrApiRef;\n      const va = a(state, instanceId);\n      const vb = b(state, instanceId);\n      const vc = c(state, instanceId);\n      const vd = d(state, instanceId);\n      return e(va, vb, vc, vd);\n    };\n  } else if (a && b && c && d) {\n    selector = (stateOrApiRef, instanceIdParam) => {\n      const isAPIRef = checkIsAPIRef(stateOrApiRef);\n      const instanceId = instanceIdParam ?? (isAPIRef ? stateOrApiRef.current.instanceId : DEFAULT_INSTANCE_ID);\n      const state = isAPIRef ? stateOrApiRef.current.state : stateOrApiRef;\n      const va = a(state, instanceId);\n      const vb = b(state, instanceId);\n      const vc = c(state, instanceId);\n      return d(va, vb, vc);\n    };\n  } else if (a && b && c) {\n    selector = (stateOrApiRef, instanceIdParam) => {\n      const isAPIRef = checkIsAPIRef(stateOrApiRef);\n      const instanceId = instanceIdParam ?? (isAPIRef ? stateOrApiRef.current.instanceId : DEFAULT_INSTANCE_ID);\n      const state = isAPIRef ? stateOrApiRef.current.state : stateOrApiRef;\n      const va = a(state, instanceId);\n      const vb = b(state, instanceId);\n      return c(va, vb);\n    };\n  } else if (a && b) {\n    selector = (stateOrApiRef, instanceIdParam) => {\n      const isAPIRef = checkIsAPIRef(stateOrApiRef);\n      const instanceId = instanceIdParam ?? (isAPIRef ? stateOrApiRef.current.instanceId : DEFAULT_INSTANCE_ID);\n      const state = isAPIRef ? stateOrApiRef.current.state : stateOrApiRef;\n      const va = a(state, instanceId);\n      return b(va);\n    };\n  } else {\n    throw new Error('Missing arguments');\n  }\n\n  // We use this property to detect if the selector was created with createSelector\n  // or it's only a simple function the receives the state and returns part of it.\n  selector.acceptsApiRef = true;\n  return selector;\n};\n\n// TODO v8: Rename this function to `createSelector`\nexport const createSelectorV8 = (a, b, c, d, e, f, ...other) => {\n  if (other.length > 0) {\n    throw new Error('Unsupported number of selectors');\n  }\n  let selector;\n  if (a && b && c && d && e && f) {\n    selector = (stateOrApiRef, args, instanceIdParam) => {\n      const isAPIRef = checkIsAPIRef(stateOrApiRef);\n      const instanceId = instanceIdParam ?? (isAPIRef ? stateOrApiRef.current.instanceId : DEFAULT_INSTANCE_ID);\n      const state = isAPIRef ? stateOrApiRef.current.state : stateOrApiRef;\n      const va = a(state, args, instanceId);\n      const vb = b(state, args, instanceId);\n      const vc = c(state, args, instanceId);\n      const vd = d(state, args, instanceId);\n      const ve = e(state, args, instanceId);\n      return f(va, vb, vc, vd, ve, args);\n    };\n  } else if (a && b && c && d && e) {\n    selector = (stateOrApiRef, args, instanceIdParam) => {\n      const isAPIRef = checkIsAPIRef(stateOrApiRef);\n      const instanceId = instanceIdParam ?? (isAPIRef ? stateOrApiRef.current.instanceId : DEFAULT_INSTANCE_ID);\n      const state = isAPIRef ? stateOrApiRef.current.state : stateOrApiRef;\n      const va = a(state, args, instanceId);\n      const vb = b(state, args, instanceId);\n      const vc = c(state, args, instanceId);\n      const vd = d(state, args, instanceId);\n      return e(va, vb, vc, vd, args);\n    };\n  } else if (a && b && c && d) {\n    selector = (stateOrApiRef, args, instanceIdParam) => {\n      const isAPIRef = checkIsAPIRef(stateOrApiRef);\n      const instanceId = instanceIdParam ?? (isAPIRef ? stateOrApiRef.current.instanceId : DEFAULT_INSTANCE_ID);\n      const state = isAPIRef ? stateOrApiRef.current.state : stateOrApiRef;\n      const va = a(state, args, instanceId);\n      const vb = b(state, args, instanceId);\n      const vc = c(state, args, instanceId);\n      return d(va, vb, vc, args);\n    };\n  } else if (a && b && c) {\n    selector = (stateOrApiRef, args, instanceIdParam) => {\n      const isAPIRef = checkIsAPIRef(stateOrApiRef);\n      const instanceId = instanceIdParam ?? (isAPIRef ? stateOrApiRef.current.instanceId : DEFAULT_INSTANCE_ID);\n      const state = isAPIRef ? stateOrApiRef.current.state : stateOrApiRef;\n      const va = a(state, args, instanceId);\n      const vb = b(state, args, instanceId);\n      return c(va, vb, args);\n    };\n  } else if (a && b) {\n    selector = (stateOrApiRef, args, instanceIdParam) => {\n      const isAPIRef = checkIsAPIRef(stateOrApiRef);\n      const instanceId = instanceIdParam ?? (isAPIRef ? stateOrApiRef.current.instanceId : DEFAULT_INSTANCE_ID);\n      const state = isAPIRef ? stateOrApiRef.current.state : stateOrApiRef;\n      const va = a(state, args, instanceId);\n      return b(va, args);\n    };\n  } else {\n    throw new Error('Missing arguments');\n  }\n\n  // We use this property to detect if the selector was created with createSelector\n  // or it's only a simple function the receives the state and returns part of it.\n  selector.acceptsApiRef = true;\n  return selector;\n};\n\n// TODO v8: Remove this function\nexport const createSelectorMemoized = (...args) => {\n  const selector = (stateOrApiRef, instanceId) => {\n    const isAPIRef = checkIsAPIRef(stateOrApiRef);\n    const cacheKey = isAPIRef ? stateOrApiRef.current.instanceId : instanceId ?? DEFAULT_INSTANCE_ID;\n    const state = isAPIRef ? stateOrApiRef.current.state : stateOrApiRef;\n    if (process.env.NODE_ENV !== 'production') {\n      if (cacheKey.id === 'default') {\n        warnOnce(['MUI X: A selector was called without passing the instance ID, which may impact the performance of the grid.', 'To fix, call it with `apiRef`, for example `mySelector(apiRef)`, or pass the instance ID explicitly, for example `mySelector(state, apiRef.current.instanceId)`.']);\n      }\n    }\n    const cacheArgsInit = cache.get(cacheKey);\n    const cacheArgs = cacheArgsInit ?? new Map();\n    const cacheFn = cacheArgs?.get(args);\n    if (cacheArgs && cacheFn) {\n      // We pass the cache key because the called selector might have as\n      // dependency another selector created with this `createSelector`.\n      return cacheFn(state, cacheKey);\n    }\n    const fn = reselectCreateSelector(...args);\n    if (!cacheArgsInit) {\n      cache.set(cacheKey, cacheArgs);\n    }\n    cacheArgs.set(args, fn);\n    return fn(state, cacheKey);\n  };\n\n  // We use this property to detect if the selector was created with createSelector\n  // or it's only a simple function the receives the state and returns part of it.\n  selector.acceptsApiRef = true;\n  return selector;\n};\n\n// TODO v8: Rename this function to `createSelectorMemoized`\nexport const createSelectorMemoizedV8 = (...args) => {\n  const selector = (stateOrApiRef, selectorArgs, instanceId) => {\n    const isAPIRef = checkIsAPIRef(stateOrApiRef);\n    const cacheKey = isAPIRef ? stateOrApiRef.current.instanceId : instanceId ?? DEFAULT_INSTANCE_ID;\n    const state = isAPIRef ? stateOrApiRef.current.state : stateOrApiRef;\n    if (process.env.NODE_ENV !== 'production') {\n      if (cacheKey.id === 'default') {\n        warnOnce(['MUI X: A selector was called without passing the instance ID, which may impact the performance of the grid.', 'To fix, call it with `apiRef`, for example `mySelector(apiRef)`, or pass the instance ID explicitly, for example `mySelector(state, apiRef.current.instanceId)`.']);\n      }\n    }\n    const cacheArgsInit = cache.get(cacheKey);\n    const cacheArgs = cacheArgsInit ?? new Map();\n    const cacheFn = cacheArgs?.get(args);\n    if (cacheArgs && cacheFn) {\n      // We pass the cache key because the called selector might have as\n      // dependency another selector created with this `createSelector`.\n      return cacheFn(state, selectorArgs, cacheKey);\n    }\n    const fn = reselectCreateSelector(...args);\n    if (!cacheArgsInit) {\n      cache.set(cacheKey, cacheArgs);\n    }\n    cacheArgs.set(args, fn);\n    return fn(state, selectorArgs, cacheKey);\n  };\n\n  // We use this property to detect if the selector was created with createSelector\n  // or it's only a simple function the receives the state and returns part of it.\n  selector.acceptsApiRef = true;\n  return selector;\n};","import { gridClasses } from \"../constants/gridClasses.js\";\nexport function isOverflown(element) {\n  return element.scrollHeight > element.clientHeight || element.scrollWidth > element.clientWidth;\n}\nexport function findParentElementFromClassName(elem, className) {\n  return elem.closest(`.${className}`);\n}\n\n// TODO, eventually replaces this function with CSS.escape, once available in jsdom, either added manually or built in\n// https://github.com/jsdom/jsdom/issues/1550#issuecomment-236734471\nexport function escapeOperandAttributeSelector(operand) {\n  return operand.replace(/[\"\\\\]/g, '\\\\$&');\n}\nexport function getGridColumnHeaderElement(root, field) {\n  return root.querySelector(`[role=\"columnheader\"][data-field=\"${escapeOperandAttributeSelector(field)}\"]`);\n}\nfunction getGridRowElementSelector(id) {\n  return `.${gridClasses.row}[data-id=\"${escapeOperandAttributeSelector(String(id))}\"]`;\n}\nexport function getGridRowElement(root, id) {\n  return root.querySelector(getGridRowElementSelector(id));\n}\nexport function getGridCellElement(root, {\n  id,\n  field\n}) {\n  const rowSelector = getGridRowElementSelector(id);\n  const cellSelector = `.${gridClasses.cell}[data-field=\"${escapeOperandAttributeSelector(field)}\"]`;\n  const selector = `${rowSelector} ${cellSelector}`;\n  return root.querySelector(selector);\n}\n\n// https://www.abeautifulsite.net/posts/finding-the-active-element-in-a-shadow-root/\nexport const getActiveElement = (root = document) => {\n  const activeEl = root.activeElement;\n  if (!activeEl) {\n    return null;\n  }\n  if (activeEl.shadowRoot) {\n    return getActiveElement(activeEl.shadowRoot);\n  }\n  return activeEl;\n};\nexport function isEventTargetInPortal(event) {\n  if (\n  // The target is not an element when triggered by a Select inside the cell\n  // See https://github.com/mui/material-ui/issues/10534\n  event.target.nodeType === 1 && !event.currentTarget.contains(event.target)) {\n    return true;\n  }\n  return false;\n}\nexport function getFieldFromHeaderElem(colCellEl) {\n  return colCellEl.getAttribute('data-field');\n}\nexport function findHeaderElementFromField(elem, field) {\n  return elem.querySelector(`[data-field=\"${escapeOperandAttributeSelector(field)}\"]`);\n}\nexport function getFieldsFromGroupHeaderElem(colCellEl) {\n  return colCellEl.getAttribute('data-fields').slice(2, -2).split('-|-');\n}\nexport function findGroupHeaderElementsFromField(elem, field) {\n  return Array.from(elem.querySelectorAll(`[data-fields*=\"|-${escapeOperandAttributeSelector(field)}-|\"]`) ?? []);\n}\nexport function findGridCellElementsFromCol(col, api) {\n  const root = findParentElementFromClassName(col, gridClasses.root);\n  if (!root) {\n    throw new Error('MUI X: The root element is not found.');\n  }\n  const ariaColIndex = col.getAttribute('aria-colindex');\n  if (!ariaColIndex) {\n    return [];\n  }\n  const colIndex = Number(ariaColIndex) - 1;\n  const cells = [];\n  if (!api.virtualScrollerRef?.current) {\n    return [];\n  }\n  queryRows(api).forEach(rowElement => {\n    const rowId = rowElement.getAttribute('data-id');\n    if (!rowId) {\n      return;\n    }\n    let columnIndex = colIndex;\n    const cellColSpanInfo = api.unstable_getCellColSpanInfo(rowId, colIndex);\n    if (cellColSpanInfo && cellColSpanInfo.spannedByColSpan) {\n      columnIndex = cellColSpanInfo.leftVisibleCellIndex;\n    }\n    const cell = rowElement.querySelector(`[data-colindex=\"${columnIndex}\"]`);\n    if (cell) {\n      cells.push(cell);\n    }\n  });\n  return cells;\n}\nexport function findGridElement(api, klass) {\n  return api.rootElementRef.current.querySelector(`.${gridClasses[klass]}`);\n}\nconst findPinnedCells = ({\n  api,\n  colIndex,\n  position,\n  filterFn\n}) => {\n  if (colIndex === null) {\n    return [];\n  }\n  const cells = [];\n  queryRows(api).forEach(rowElement => {\n    const rowId = rowElement.getAttribute('data-id');\n    if (!rowId) {\n      return;\n    }\n    rowElement.querySelectorAll(`.${gridClasses[position === 'left' ? 'cell--pinnedLeft' : 'cell--pinnedRight']}`).forEach(cell => {\n      const currentColIndex = parseCellColIndex(cell);\n      if (currentColIndex !== null && filterFn(currentColIndex)) {\n        cells.push(cell);\n      }\n    });\n  });\n  return cells;\n};\nexport function findLeftPinnedCellsAfterCol(api, col, isRtl) {\n  const colIndex = parseCellColIndex(col);\n  return findPinnedCells({\n    api,\n    colIndex,\n    position: isRtl ? 'right' : 'left',\n    filterFn: index => isRtl ? index < colIndex : index > colIndex\n  });\n}\nexport function findRightPinnedCellsBeforeCol(api, col, isRtl) {\n  const colIndex = parseCellColIndex(col);\n  return findPinnedCells({\n    api,\n    colIndex,\n    position: isRtl ? 'left' : 'right',\n    filterFn: index => isRtl ? index > colIndex : index < colIndex\n  });\n}\nconst findPinnedHeaders = ({\n  api,\n  colIndex,\n  position,\n  filterFn\n}) => {\n  if (!api.columnHeadersContainerRef?.current) {\n    return [];\n  }\n  if (colIndex === null) {\n    return [];\n  }\n  const elements = [];\n  api.columnHeadersContainerRef.current.querySelectorAll(`.${gridClasses[position === 'left' ? 'columnHeader--pinnedLeft' : 'columnHeader--pinnedRight']}`).forEach(element => {\n    const currentColIndex = parseCellColIndex(element);\n    if (currentColIndex !== null && filterFn(currentColIndex)) {\n      elements.push(element);\n    }\n  });\n  return elements;\n};\nexport function findLeftPinnedHeadersAfterCol(api, col, isRtl) {\n  const colIndex = parseCellColIndex(col);\n  return findPinnedHeaders({\n    api,\n    position: isRtl ? 'right' : 'left',\n    colIndex,\n    filterFn: index => isRtl ? index < colIndex : index > colIndex\n  });\n}\nexport function findRightPinnedHeadersBeforeCol(api, col, isRtl) {\n  const colIndex = parseCellColIndex(col);\n  return findPinnedHeaders({\n    api,\n    position: isRtl ? 'left' : 'right',\n    colIndex,\n    filterFn: index => isRtl ? index > colIndex : index < colIndex\n  });\n}\nexport function findGridHeader(api, field) {\n  const headers = api.columnHeadersContainerRef.current;\n  return headers.querySelector(`:scope > div > [data-field=\"${escapeOperandAttributeSelector(field)}\"][role=\"columnheader\"]`);\n}\nexport function findGridCells(api, field) {\n  const container = api.virtualScrollerRef.current;\n  return Array.from(container.querySelectorAll(`:scope > div > div > div > [data-field=\"${escapeOperandAttributeSelector(field)}\"][role=\"gridcell\"]`));\n}\nfunction queryRows(api) {\n  return api.virtualScrollerRef.current.querySelectorAll(\n  // Use > to ignore rows from nested data grids (for example in detail panel)\n  `:scope > div > div > .${gridClasses.row}`);\n}\nfunction parseCellColIndex(col) {\n  const ariaColIndex = col.getAttribute('aria-colindex');\n  if (!ariaColIndex) {\n    return null;\n  }\n  return Number(ariaColIndex) - 1;\n}","// Non printable keys have a name, for example \"ArrowRight\", see the whole list:\n// https://developer.mozilla.org/en-US/docs/Web/API/UI_Events/Keyboard_event_key_values\n// So event.key.length === 1 is often enough.\n//\n// However, we also need to ignore shortcuts, for example: select all:\n// - Windows: Ctrl+A, event.ctrlKey is true\n// - macOS: ⌘ Command+A, event.metaKey is true\nexport function isPrintableKey(event) {\n  return event.key.length === 1 && !event.ctrlKey && !event.metaKey;\n}\nexport const GRID_MULTIPLE_SELECTION_KEYS = ['Meta', 'Control', 'Shift'];\nexport const GRID_CELL_EXIT_EDIT_MODE_KEYS = ['Enter', 'Escape', 'Tab'];\nexport const GRID_CELL_EDIT_COMMIT_KEYS = ['Enter', 'Tab'];\nexport const isMultipleKey = key => GRID_MULTIPLE_SELECTION_KEYS.indexOf(key) > -1;\nexport const isCellEnterEditModeKeys = event => isPrintableKey(event) || event.key === 'Enter' || event.key === 'Backspace' || event.key === 'Delete';\nexport const isCellExitEditModeKeys = key => GRID_CELL_EXIT_EDIT_MODE_KEYS.indexOf(key) > -1;\nexport const isCellEditCommitKeys = key => GRID_CELL_EDIT_COMMIT_KEYS.indexOf(key) > -1;\nexport const isNavigationKey = key => key.indexOf('Arrow') === 0 || key.indexOf('Page') === 0 || key === ' ' || key === 'Home' || key === 'End';\nexport const isKeyboardEvent = event => !!event.key;\nexport const isHideMenuKey = key => key === 'Tab' || key === 'Escape';\n\n// In theory, on macOS, ctrl + v doesn't trigger a paste, so the function should return false.\n// However, maybe it's overkill to fix, so let's be lazy.\nexport function isPasteShortcut(event) {\n  if ((event.ctrlKey || event.metaKey) && event.key.toLowerCase() === 'v' && !event.shiftKey && !event.altKey) {\n    return true;\n  }\n  return false;\n}","export function isNumber(value) {\n  return typeof value === 'number' && !Number.isNaN(value);\n}\nexport function isFunction(value) {\n  return typeof value === 'function';\n}\nexport function isObject(value) {\n  return typeof value === 'object' && value !== null;\n}\nexport function localStorageAvailable() {\n  try {\n    // Incognito mode might reject access to the localStorage for security reasons.\n    // window isn't defined on Node.js\n    // https://stackoverflow.com/questions/16427636/check-if-localstorage-is-available\n    const key = '__some_random_key_you_are_not_going_to_use__';\n    window.localStorage.setItem(key, key);\n    window.localStorage.removeItem(key);\n    return true;\n  } catch (err) {\n    return false;\n  }\n}\nexport function escapeRegExp(value) {\n  return value.replace(/[-[\\]{}()*+?.,\\\\^$|#\\s]/g, '\\\\$&');\n}\n\n/**\n * Follows the CSS specification behavior for min and max\n * If min > max, then the min have priority\n */\nexport const clamp = (value, min, max) => Math.max(min, Math.min(max, value));\n\n/**\n * Create an array containing the range [from, to[\n */\nexport function range(from, to) {\n  return Array.from({\n    length: to - from\n  }).map((_, i) => from + i);\n}\n\n/**\n * Based on `fast-deep-equal`\n *\n * MIT License\n *\n * Copyright (c) 2017 Evgeny Poberezkin\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n * We only type the public interface to avoid dozens of `as` in the function.\n */\n\nexport function isDeepEqual(a, b) {\n  if (a === b) {\n    return true;\n  }\n  if (a && b && typeof a === 'object' && typeof b === 'object') {\n    if (a.constructor !== b.constructor) {\n      return false;\n    }\n    if (Array.isArray(a)) {\n      const length = a.length;\n      if (length !== b.length) {\n        return false;\n      }\n      for (let i = 0; i < length; i += 1) {\n        if (!isDeepEqual(a[i], b[i])) {\n          return false;\n        }\n      }\n      return true;\n    }\n    if (a instanceof Map && b instanceof Map) {\n      if (a.size !== b.size) {\n        return false;\n      }\n      const entriesA = Array.from(a.entries());\n      for (let i = 0; i < entriesA.length; i += 1) {\n        if (!b.has(entriesA[i][0])) {\n          return false;\n        }\n      }\n      for (let i = 0; i < entriesA.length; i += 1) {\n        const entryA = entriesA[i];\n        if (!isDeepEqual(entryA[1], b.get(entryA[0]))) {\n          return false;\n        }\n      }\n      return true;\n    }\n    if (a instanceof Set && b instanceof Set) {\n      if (a.size !== b.size) {\n        return false;\n      }\n      const entries = Array.from(a.entries());\n      for (let i = 0; i < entries.length; i += 1) {\n        if (!b.has(entries[i][0])) {\n          return false;\n        }\n      }\n      return true;\n    }\n    if (ArrayBuffer.isView(a) && ArrayBuffer.isView(b)) {\n      const length = a.length;\n      if (length !== b.length) {\n        return false;\n      }\n      for (let i = 0; i < length; i += 1) {\n        if (a[i] !== b[i]) {\n          return false;\n        }\n      }\n      return true;\n    }\n    if (a.constructor === RegExp) {\n      return a.source === b.source && a.flags === b.flags;\n    }\n    if (a.valueOf !== Object.prototype.valueOf) {\n      return a.valueOf() === b.valueOf();\n    }\n    if (a.toString !== Object.prototype.toString) {\n      return a.toString() === b.toString();\n    }\n    const keys = Object.keys(a);\n    const length = keys.length;\n    if (length !== Object.keys(b).length) {\n      return false;\n    }\n    for (let i = 0; i < length; i += 1) {\n      if (!Object.prototype.hasOwnProperty.call(b, keys[i])) {\n        return false;\n      }\n    }\n    for (let i = 0; i < length; i += 1) {\n      const key = keys[i];\n      if (!isDeepEqual(a[key], b[key])) {\n        return false;\n      }\n    }\n    return true;\n  }\n\n  // true if both NaN, false otherwise\n  // eslint-disable-next-line no-self-compare\n  return a !== a && b !== b;\n}\n\n// Pseudo random number. See https://stackoverflow.com/a/47593316\nfunction mulberry32(a) {\n  return () => {\n    /* eslint-disable */\n    let t = a += 0x6d2b79f5;\n    t = Math.imul(t ^ t >>> 15, t | 1);\n    t ^= t + Math.imul(t ^ t >>> 7, t | 61);\n    return ((t ^ t >>> 14) >>> 0) / 4294967296;\n    /* eslint-enable */\n  };\n}\n\n/**\n * Create a random number generator from a seed. The seed\n * ensures that the random number generator produces the\n * same sequence of 'random' numbers on every render. It\n * returns a function that generates a random number between\n * a specified min and max.\n */\nexport function createRandomNumberGenerator(seed) {\n  const random = mulberry32(seed);\n  return (min, max) => min + (max - min) * random();\n}\nexport function deepClone(obj) {\n  if (typeof structuredClone === 'function') {\n    return structuredClone(obj);\n  }\n  return JSON.parse(JSON.stringify(obj));\n}\n\n/* eslint-disable @typescript-eslint/no-unused-vars */\n/**\n * Mark a value as used so eslint doesn't complain. Use this instead\n * of a `eslint-disable-next-line react-hooks/exhaustive-deps` because\n * that hint disables checks on all values instead of just one.\n */\nexport function eslintUseValue(_) {}\n/* eslint-enable @typescript-eslint/no-unused-vars */","import * as React from 'react';\nimport { fastObjectShallowCompare } from \"../fastObjectShallowCompare/index.js\";\nexport function fastMemo(component) {\n  return /*#__PURE__*/React.memo(component, fastObjectShallowCompare);\n}","const is = Object.is;\nexport function fastObjectShallowCompare(a, b) {\n  if (a === b) {\n    return true;\n  }\n  if (!(a instanceof Object) || !(b instanceof Object)) {\n    return false;\n  }\n  let aLength = 0;\n  let bLength = 0;\n\n  /* eslint-disable guard-for-in */\n  for (const key in a) {\n    aLength += 1;\n    if (!is(a[key], b[key])) {\n      return false;\n    }\n    if (!(key in b)) {\n      return false;\n    }\n  }\n\n  /* eslint-disable-next-line @typescript-eslint/naming-convention, @typescript-eslint/no-unused-vars */\n  for (const _ in b) {\n    bLength += 1;\n  }\n  return aLength === bLength;\n}","/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n'use strict';\n\nvar ReactPropTypesSecret = require('./lib/ReactPropTypesSecret');\n\nfunction emptyFunction() {}\nfunction emptyFunctionWithReset() {}\nemptyFunctionWithReset.resetWarningCache = emptyFunction;\n\nmodule.exports = function() {\n  function shim(props, propName, componentName, location, propFullName, secret) {\n    if (secret === ReactPropTypesSecret) {\n      // It is still safe when called from React.\n      return;\n    }\n    var err = new Error(\n      'Calling PropTypes validators directly is not supported by the `prop-types` package. ' +\n      'Use PropTypes.checkPropTypes() to call them. ' +\n      'Read more at http://fb.me/use-check-prop-types'\n    );\n    err.name = 'Invariant Violation';\n    throw err;\n  };\n  shim.isRequired = shim;\n  function getShim() {\n    return shim;\n  };\n  // Important!\n  // Keep this list in sync with production version in `./factoryWithTypeCheckers.js`.\n  var ReactPropTypes = {\n    array: shim,\n    bigint: shim,\n    bool: shim,\n    func: shim,\n    number: shim,\n    object: shim,\n    string: shim,\n    symbol: shim,\n\n    any: shim,\n    arrayOf: getShim,\n    element: shim,\n    elementType: shim,\n    instanceOf: getShim,\n    node: shim,\n    objectOf: getShim,\n    oneOf: getShim,\n    oneOfType: getShim,\n    shape: getShim,\n    exact: getShim,\n\n    checkPropTypes: emptyFunctionWithReset,\n    resetWarningCache: emptyFunction\n  };\n\n  ReactPropTypes.PropTypes = ReactPropTypes;\n\n  return ReactPropTypes;\n};\n","/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nif (process.env.NODE_ENV !== 'production') {\n  var ReactIs = require('react-is');\n\n  // By explicitly using `prop-types` you are opting into new development behavior.\n  // http://fb.me/prop-types-in-prod\n  var throwOnDirectAccess = true;\n  module.exports = require('./factoryWithTypeCheckers')(ReactIs.isElement, throwOnDirectAccess);\n} else {\n  // By explicitly using `prop-types` you are opting into new production behavior.\n  // http://fb.me/prop-types-in-prod\n  module.exports = require('./factoryWithThrowingShims')();\n}\n","/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n'use strict';\n\nvar ReactPropTypesSecret = 'SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED';\n\nmodule.exports = ReactPropTypesSecret;\n","import type { AnyFunction } from '../types'\r\n\r\n/**\r\n * Runs a check to determine if the given result function behaves as an\r\n * identity function. An identity function is one that returns its\r\n * input unchanged, for example, `x => x`. This check helps ensure\r\n * efficient memoization and prevent unnecessary re-renders by encouraging\r\n * proper use of transformation logic in result functions and\r\n * extraction logic in input selectors.\r\n *\r\n * @param resultFunc - The result function to be checked.\r\n * @param inputSelectorsResults - The results of the input selectors.\r\n * @param outputSelectorResult - The result of the output selector.\r\n *\r\n * @see {@link https://reselect.js.org/api/development-only-stability-checks#identityfunctioncheck `identityFunctionCheck`}\r\n *\r\n * @since 5.0.0\r\n * @internal\r\n */\r\nexport const runIdentityFunctionCheck = (\r\n  resultFunc: AnyFunction,\r\n  inputSelectorsResults: unknown[],\r\n  outputSelectorResult: unknown\r\n) => {\r\n  if (\r\n    inputSelectorsResults.length === 1 &&\r\n    inputSelectorsResults[0] === outputSelectorResult\r\n  ) {\r\n    let isInputSameAsOutput = false\r\n    try {\r\n      const emptyObject = {}\r\n      if (resultFunc(emptyObject) === emptyObject) isInputSameAsOutput = true\r\n    } catch {\r\n      // Do nothing\r\n    }\r\n    if (isInputSameAsOutput) {\r\n      let stack: string | undefined = undefined\r\n      try {\r\n        throw new Error()\r\n      } catch (e) {\r\n        // eslint-disable-next-line @typescript-eslint/no-extra-semi, no-extra-semi\r\n        ;({ stack } = e as Error)\r\n      }\r\n      console.warn(\r\n        'The result function returned its own inputs without modification. e.g' +\r\n          '\\n`createSelector([state => state.todos], todos => todos)`' +\r\n          '\\nThis could lead to inefficient memoization and unnecessary re-renders.' +\r\n          '\\nEnsure transformation logic is in the result function, and extraction logic is in the input selectors.',\r\n        { stack }\r\n      )\r\n    }\r\n  }\r\n}\r\n","import { runIdentityFunctionCheck } from './devModeChecks/identityFunctionCheck'\r\nimport { runInputStabilityCheck } from './devModeChecks/inputStabilityCheck'\r\nimport { globalDevModeChecks } from './devModeChecks/setGlobalDevModeChecks'\r\n// eslint-disable-next-line @typescript-eslint/consistent-type-imports\r\nimport type {\r\n  DevModeChecks,\r\n  Selector,\r\n  SelectorArray,\r\n  DevModeChecksExecutionInfo\r\n} from './types'\r\n\r\nexport const NOT_FOUND = /* @__PURE__ */ Symbol('NOT_FOUND')\r\nexport type NOT_FOUND_TYPE = typeof NOT_FOUND\r\n\r\n/**\r\n * Assert that the provided value is a function. If the assertion fails,\r\n * a `TypeError` is thrown with an optional custom error message.\r\n *\r\n * @param func - The value to be checked.\r\n * @param  errorMessage - An optional custom error message to use if the assertion fails.\r\n * @throws A `TypeError` if the assertion fails.\r\n */\r\nexport function assertIsFunction<FunctionType extends Function>(\r\n  func: unknown,\r\n  errorMessage = `expected a function, instead received ${typeof func}`\r\n): asserts func is FunctionType {\r\n  if (typeof func !== 'function') {\r\n    throw new TypeError(errorMessage)\r\n  }\r\n}\r\n\r\n/**\r\n * Assert that the provided value is an object. If the assertion fails,\r\n * a `TypeError` is thrown with an optional custom error message.\r\n *\r\n * @param object - The value to be checked.\r\n * @param  errorMessage - An optional custom error message to use if the assertion fails.\r\n * @throws A `TypeError` if the assertion fails.\r\n */\r\nexport function assertIsObject<ObjectType extends Record<string, unknown>>(\r\n  object: unknown,\r\n  errorMessage = `expected an object, instead received ${typeof object}`\r\n): asserts object is ObjectType {\r\n  if (typeof object !== 'object') {\r\n    throw new TypeError(errorMessage)\r\n  }\r\n}\r\n\r\n/**\r\n * Assert that the provided array is an array of functions. If the assertion fails,\r\n * a `TypeError` is thrown with an optional custom error message.\r\n *\r\n * @param array - The array to be checked.\r\n * @param  errorMessage - An optional custom error message to use if the assertion fails.\r\n * @throws A `TypeError` if the assertion fails.\r\n */\r\nexport function assertIsArrayOfFunctions<FunctionType extends Function>(\r\n  array: unknown[],\r\n  errorMessage = `expected all items to be functions, instead received the following types: `\r\n): asserts array is FunctionType[] {\r\n  if (\r\n    !array.every((item): item is FunctionType => typeof item === 'function')\r\n  ) {\r\n    const itemTypes = array\r\n      .map(item =>\r\n        typeof item === 'function'\r\n          ? `function ${item.name || 'unnamed'}()`\r\n          : typeof item\r\n      )\r\n      .join(', ')\r\n    throw new TypeError(`${errorMessage}[${itemTypes}]`)\r\n  }\r\n}\r\n\r\n/**\r\n * Ensure that the input is an array. If it's already an array, it's returned as is.\r\n * If it's not an array, it will be wrapped in a new array.\r\n *\r\n * @param item - The item to be checked.\r\n * @returns An array containing the input item. If the input is already an array, it's returned without modification.\r\n */\r\nexport const ensureIsArray = (item: unknown) => {\r\n  return Array.isArray(item) ? item : [item]\r\n}\r\n\r\n/**\r\n * Extracts the \"dependencies\" / \"input selectors\" from the arguments of `createSelector`.\r\n *\r\n * @param createSelectorArgs - Arguments passed to `createSelector` as an array.\r\n * @returns An array of \"input selectors\" / \"dependencies\".\r\n * @throws A `TypeError` if any of the input selectors is not function.\r\n */\r\nexport function getDependencies(createSelectorArgs: unknown[]) {\r\n  const dependencies = Array.isArray(createSelectorArgs[0])\r\n    ? createSelectorArgs[0]\r\n    : createSelectorArgs\r\n\r\n  assertIsArrayOfFunctions<Selector>(\r\n    dependencies,\r\n    `createSelector expects all input-selectors to be functions, but received the following types: `\r\n  )\r\n\r\n  return dependencies as SelectorArray\r\n}\r\n\r\n/**\r\n * Runs each input selector and returns their collective results as an array.\r\n *\r\n * @param dependencies - An array of \"dependencies\" or \"input selectors\".\r\n * @param inputSelectorArgs - An array of arguments being passed to the input selectors.\r\n * @returns An array of input selector results.\r\n */\r\nexport function collectInputSelectorResults(\r\n  dependencies: SelectorArray,\r\n  inputSelectorArgs: unknown[] | IArguments\r\n) {\r\n  const inputSelectorResults = []\r\n  const { length } = dependencies\r\n  for (let i = 0; i < length; i++) {\r\n    // @ts-ignore\r\n    // apply arguments instead of spreading and mutate a local list of params for performance.\r\n    inputSelectorResults.push(dependencies[i].apply(null, inputSelectorArgs))\r\n  }\r\n  return inputSelectorResults\r\n}\r\n\r\n/**\r\n * Retrieves execution information for development mode checks.\r\n *\r\n * @param devModeChecks - Custom Settings for development mode checks. These settings will override the global defaults.\r\n * @param firstRun - Indicates whether it is the first time the selector has run.\r\n * @returns  An object containing the execution information for each development mode check.\r\n */\r\nexport const getDevModeChecksExecutionInfo = (\r\n  firstRun: boolean,\r\n  devModeChecks: Partial<DevModeChecks>\r\n) => {\r\n  const { identityFunctionCheck, inputStabilityCheck } = {\r\n    ...globalDevModeChecks,\r\n    ...devModeChecks\r\n  }\r\n  return {\r\n    identityFunctionCheck: {\r\n      shouldRun:\r\n        identityFunctionCheck === 'always' ||\r\n        (identityFunctionCheck === 'once' && firstRun),\r\n      run: runIdentityFunctionCheck\r\n    },\r\n    inputStabilityCheck: {\r\n      shouldRun:\r\n        inputStabilityCheck === 'always' ||\r\n        (inputStabilityCheck === 'once' && firstRun),\r\n      run: runInputStabilityCheck\r\n    }\r\n  } satisfies DevModeChecksExecutionInfo\r\n}\r\n","// Original source:\r\n// - https://github.com/simonihmig/tracked-redux/blob/master/packages/tracked-redux/src/-private/proxy.ts\r\n\r\nimport type { Node, Tag } from './tracking'\r\nimport {\r\n  consumeCollection,\r\n  consumeTag,\r\n  createTag,\r\n  dirtyCollection,\r\n  dirtyTag\r\n} from './tracking'\r\n\r\nexport const REDUX_PROXY_LABEL = Symbol()\r\n\r\nlet nextId = 0\r\n\r\nconst proto = Object.getPrototypeOf({})\r\n\r\nclass ObjectTreeNode<T extends Record<string, unknown>> implements Node<T> {\r\n  proxy: T = new Proxy(this, objectProxyHandler) as unknown as T\r\n  tag = createTag()\r\n  tags = {} as Record<string, Tag>\r\n  children = {} as Record<string, Node>\r\n  collectionTag = null\r\n  id = nextId++\r\n\r\n  constructor(public value: T) {\r\n    this.value = value\r\n    this.tag.value = value\r\n  }\r\n}\r\n\r\nconst objectProxyHandler = {\r\n  get(node: Node, key: string | symbol): unknown {\r\n    function calculateResult() {\r\n      const { value } = node\r\n\r\n      const childValue = Reflect.get(value, key)\r\n\r\n      if (typeof key === 'symbol') {\r\n        return childValue\r\n      }\r\n\r\n      if (key in proto) {\r\n        return childValue\r\n      }\r\n\r\n      if (typeof childValue === 'object' && childValue !== null) {\r\n        let childNode = node.children[key]\r\n\r\n        if (childNode === undefined) {\r\n          childNode = node.children[key] = createNode(childValue)\r\n        }\r\n\r\n        if (childNode.tag) {\r\n          consumeTag(childNode.tag)\r\n        }\r\n\r\n        return childNode.proxy\r\n      } else {\r\n        let tag = node.tags[key]\r\n\r\n        if (tag === undefined) {\r\n          tag = node.tags[key] = createTag()\r\n          tag.value = childValue\r\n        }\r\n\r\n        consumeTag(tag)\r\n\r\n        return childValue\r\n      }\r\n    }\r\n    const res = calculateResult()\r\n    return res\r\n  },\r\n\r\n  ownKeys(node: Node): ArrayLike<string | symbol> {\r\n    consumeCollection(node)\r\n    return Reflect.ownKeys(node.value)\r\n  },\r\n\r\n  getOwnPropertyDescriptor(\r\n    node: Node,\r\n    prop: string | symbol\r\n  ): PropertyDescriptor | undefined {\r\n    return Reflect.getOwnPropertyDescriptor(node.value, prop)\r\n  },\r\n\r\n  has(node: Node, prop: string | symbol): boolean {\r\n    return Reflect.has(node.value, prop)\r\n  }\r\n}\r\n\r\nclass ArrayTreeNode<T extends Array<unknown>> implements Node<T> {\r\n  proxy: T = new Proxy([this], arrayProxyHandler) as unknown as T\r\n  tag = createTag()\r\n  tags = {}\r\n  children = {}\r\n  collectionTag = null\r\n  id = nextId++\r\n\r\n  constructor(public value: T) {\r\n    this.value = value\r\n    this.tag.value = value\r\n  }\r\n}\r\n\r\nconst arrayProxyHandler = {\r\n  get([node]: [Node], key: string | symbol): unknown {\r\n    if (key === 'length') {\r\n      consumeCollection(node)\r\n    }\r\n\r\n    return objectProxyHandler.get(node, key)\r\n  },\r\n\r\n  ownKeys([node]: [Node]): ArrayLike<string | symbol> {\r\n    return objectProxyHandler.ownKeys(node)\r\n  },\r\n\r\n  getOwnPropertyDescriptor(\r\n    [node]: [Node],\r\n    prop: string | symbol\r\n  ): PropertyDescriptor | undefined {\r\n    return objectProxyHandler.getOwnPropertyDescriptor(node, prop)\r\n  },\r\n\r\n  has([node]: [Node], prop: string | symbol): boolean {\r\n    return objectProxyHandler.has(node, prop)\r\n  }\r\n}\r\n\r\nexport function createNode<T extends Array<unknown> | Record<string, unknown>>(\r\n  value: T\r\n): Node<T> {\r\n  if (Array.isArray(value)) {\r\n    return new ArrayTreeNode(value)\r\n  }\r\n\r\n  return new ObjectTreeNode(value) as Node<T>\r\n}\r\n\r\nconst keysMap = new WeakMap<\r\n  Array<unknown> | Record<string, unknown>,\r\n  Set<string>\r\n>()\r\n\r\nexport function updateNode<T extends Array<unknown> | Record<string, unknown>>(\r\n  node: Node<T>,\r\n  newValue: T\r\n): void {\r\n  const { value, tags, children } = node\r\n\r\n  node.value = newValue\r\n\r\n  if (\r\n    Array.isArray(value) &&\r\n    Array.isArray(newValue) &&\r\n    value.length !== newValue.length\r\n  ) {\r\n    dirtyCollection(node)\r\n  } else {\r\n    if (value !== newValue) {\r\n      let oldKeysSize = 0\r\n      let newKeysSize = 0\r\n      let anyKeysAdded = false\r\n\r\n      for (const _key in value) {\r\n        oldKeysSize++\r\n      }\r\n\r\n      for (const key in newValue) {\r\n        newKeysSize++\r\n        if (!(key in value)) {\r\n          anyKeysAdded = true\r\n          break\r\n        }\r\n      }\r\n\r\n      const isDifferent = anyKeysAdded || oldKeysSize !== newKeysSize\r\n\r\n      if (isDifferent) {\r\n        dirtyCollection(node)\r\n      }\r\n    }\r\n  }\r\n\r\n  for (const key in tags) {\r\n    const childValue = (value as Record<string, unknown>)[key]\r\n    const newChildValue = (newValue as Record<string, unknown>)[key]\r\n\r\n    if (childValue !== newChildValue) {\r\n      dirtyCollection(node)\r\n      dirtyTag(tags[key], newChildValue)\r\n    }\r\n\r\n    if (typeof newChildValue === 'object' && newChildValue !== null) {\r\n      delete tags[key]\r\n    }\r\n  }\r\n\r\n  for (const key in children) {\r\n    const childNode = children[key]\r\n    const newChildValue = (newValue as Record<string, unknown>)[key]\r\n\r\n    const childValue = childNode.value\r\n\r\n    if (childValue === newChildValue) {\r\n      continue\r\n    } else if (typeof newChildValue === 'object' && newChildValue !== null) {\r\n      updateNode(childNode, newChildValue as Record<string, unknown>)\r\n    } else {\r\n      deleteNode(childNode)\r\n      delete children[key]\r\n    }\r\n  }\r\n}\r\n\r\nfunction deleteNode(node: Node): void {\r\n  if (node.tag) {\r\n    dirtyTag(node.tag, null)\r\n  }\r\n  dirtyCollection(node)\r\n  for (const key in node.tags) {\r\n    dirtyTag(node.tags[key], null)\r\n  }\r\n  for (const key in node.children) {\r\n    deleteNode(node.children[key])\r\n  }\r\n}\r\n","import type {\r\n  AnyFunction,\r\n  DefaultMemoizeFields,\r\n  EqualityFn,\r\n  Simplify\r\n} from './types'\r\n\r\nimport type { NOT_FOUND_TYPE } from './utils'\r\nimport { NOT_FOUND } from './utils'\r\n\r\n// Cache implementation based on Erik Rasmussen's `lru-memoize`:\r\n// https://github.com/erikras/lru-memoize\r\n\r\ninterface Entry {\r\n  key: unknown\r\n  value: unknown\r\n}\r\n\r\ninterface Cache {\r\n  get(key: unknown): unknown | NOT_FOUND_TYPE\r\n  put(key: unknown, value: unknown): void\r\n  getEntries(): Entry[]\r\n  clear(): void\r\n}\r\n\r\nfunction createSingletonCache(equals: EqualityFn): Cache {\r\n  let entry: Entry | undefined\r\n  return {\r\n    get(key: unknown) {\r\n      if (entry && equals(entry.key, key)) {\r\n        return entry.value\r\n      }\r\n\r\n      return NOT_FOUND\r\n    },\r\n\r\n    put(key: unknown, value: unknown) {\r\n      entry = { key, value }\r\n    },\r\n\r\n    getEntries() {\r\n      return entry ? [entry] : []\r\n    },\r\n\r\n    clear() {\r\n      entry = undefined\r\n    }\r\n  }\r\n}\r\n\r\nfunction createLruCache(maxSize: number, equals: EqualityFn): Cache {\r\n  let entries: Entry[] = []\r\n\r\n  function get(key: unknown) {\r\n    const cacheIndex = entries.findIndex(entry => equals(key, entry.key))\r\n\r\n    // We found a cached entry\r\n    if (cacheIndex > -1) {\r\n      const entry = entries[cacheIndex]\r\n\r\n      // Cached entry not at top of cache, move it to the top\r\n      if (cacheIndex > 0) {\r\n        entries.splice(cacheIndex, 1)\r\n        entries.unshift(entry)\r\n      }\r\n\r\n      return entry.value\r\n    }\r\n\r\n    // No entry found in cache, return sentinel\r\n    return NOT_FOUND\r\n  }\r\n\r\n  function put(key: unknown, value: unknown) {\r\n    if (get(key) === NOT_FOUND) {\r\n      // TODO Is unshift slow?\r\n      entries.unshift({ key, value })\r\n      if (entries.length > maxSize) {\r\n        entries.pop()\r\n      }\r\n    }\r\n  }\r\n\r\n  function getEntries() {\r\n    return entries\r\n  }\r\n\r\n  function clear() {\r\n    entries = []\r\n  }\r\n\r\n  return { get, put, getEntries, clear }\r\n}\r\n\r\n/**\r\n * Runs a simple reference equality check.\r\n * What {@linkcode lruMemoize lruMemoize} uses by default.\r\n *\r\n * **Note**: This function was previously known as `defaultEqualityCheck`.\r\n *\r\n * @public\r\n */\r\nexport const referenceEqualityCheck: EqualityFn = (a, b) => a === b\r\n\r\nexport function createCacheKeyComparator(equalityCheck: EqualityFn) {\r\n  return function areArgumentsShallowlyEqual(\r\n    prev: unknown[] | IArguments | null,\r\n    next: unknown[] | IArguments | null\r\n  ): boolean {\r\n    if (prev === null || next === null || prev.length !== next.length) {\r\n      return false\r\n    }\r\n\r\n    // Do this in a for loop (and not a `forEach` or an `every`) so we can determine equality as fast as possible.\r\n    const { length } = prev\r\n    for (let i = 0; i < length; i++) {\r\n      if (!equalityCheck(prev[i], next[i])) {\r\n        return false\r\n      }\r\n    }\r\n\r\n    return true\r\n  }\r\n}\r\n\r\n/**\r\n * Options for configuring the behavior of a function memoized with\r\n * LRU (Least Recently Used) caching.\r\n *\r\n * @template Result - The type of the return value of the memoized function.\r\n *\r\n * @public\r\n */\r\nexport interface LruMemoizeOptions<Result = any> {\r\n  /**\r\n   * Function used to compare the individual arguments of the\r\n   * provided calculation function.\r\n   *\r\n   * @default referenceEqualityCheck\r\n   */\r\n  equalityCheck?: EqualityFn\r\n\r\n  /**\r\n   * If provided, used to compare a newly generated output value against\r\n   * previous values in the cache. If a match is found,\r\n   * the old value is returned. This addresses the common\r\n   * ```ts\r\n   * todos.map(todo => todo.id)\r\n   * ```\r\n   * use case, where an update to another field in the original data causes\r\n   * a recalculation due to changed references, but the output is still\r\n   * effectively the same.\r\n   *\r\n   * @since 4.1.0\r\n   */\r\n  resultEqualityCheck?: EqualityFn<Result>\r\n\r\n  /**\r\n   * The maximum size of the cache used by the selector.\r\n   * A size greater than 1 means the selector will use an\r\n   * LRU (Least Recently Used) cache, allowing for the caching of multiple\r\n   * results based on different sets of arguments.\r\n   *\r\n   * @default 1\r\n   */\r\n  maxSize?: number\r\n}\r\n\r\n/**\r\n * Creates a memoized version of a function with an optional\r\n * LRU (Least Recently Used) cache. The memoized function uses a cache to\r\n * store computed values. Depending on the `maxSize` option, it will use\r\n * either a singleton cache (for a single entry) or an\r\n * LRU cache (for multiple entries).\r\n *\r\n * **Note**: This function was previously known as `defaultMemoize`.\r\n *\r\n * @param func - The function to be memoized.\r\n * @param equalityCheckOrOptions - Either an equality check function or an options object.\r\n * @returns A memoized function with a `.clearCache()` method attached.\r\n *\r\n * @template Func - The type of the function that is memoized.\r\n *\r\n * @see {@link https://reselect.js.org/api/lruMemoize `lruMemoize`}\r\n *\r\n * @public\r\n */\r\nexport function lruMemoize<Func extends AnyFunction>(\r\n  func: Func,\r\n  equalityCheckOrOptions?: EqualityFn | LruMemoizeOptions<ReturnType<Func>>\r\n) {\r\n  const providedOptions =\r\n    typeof equalityCheckOrOptions === 'object'\r\n      ? equalityCheckOrOptions\r\n      : { equalityCheck: equalityCheckOrOptions }\r\n\r\n  const {\r\n    equalityCheck = referenceEqualityCheck,\r\n    maxSize = 1,\r\n    resultEqualityCheck\r\n  } = providedOptions\r\n\r\n  const comparator = createCacheKeyComparator(equalityCheck)\r\n\r\n  let resultsCount = 0\r\n\r\n  const cache =\r\n    maxSize <= 1\r\n      ? createSingletonCache(comparator)\r\n      : createLruCache(maxSize, comparator)\r\n\r\n  function memoized() {\r\n    let value = cache.get(arguments) as ReturnType<Func>\r\n    if (value === NOT_FOUND) {\r\n      // apply arguments instead of spreading for performance.\r\n      // @ts-ignore\r\n      value = func.apply(null, arguments) as ReturnType<Func>\r\n      resultsCount++\r\n\r\n      if (resultEqualityCheck) {\r\n        const entries = cache.getEntries()\r\n        const matchingEntry = entries.find(entry =>\r\n          resultEqualityCheck(entry.value as ReturnType<Func>, value)\r\n        )\r\n\r\n        if (matchingEntry) {\r\n          value = matchingEntry.value as ReturnType<Func>\r\n          resultsCount !== 0 && resultsCount--\r\n        }\r\n      }\r\n\r\n      cache.put(arguments, value)\r\n    }\r\n    return value\r\n  }\r\n\r\n  memoized.clearCache = () => {\r\n    cache.clear()\r\n    memoized.resetResultsCount()\r\n  }\r\n\r\n  memoized.resultsCount = () => resultsCount\r\n\r\n  memoized.resetResultsCount = () => {\r\n    resultsCount = 0\r\n  }\r\n\r\n  return memoized as Func & Simplify<DefaultMemoizeFields>\r\n}\r\n","// Original source:\r\n// - https://github.com/facebook/react/blob/0b974418c9a56f6c560298560265dcf4b65784bc/packages/react/src/ReactCache.js\r\n\r\nimport type {\r\n  AnyFunction,\r\n  DefaultMemoizeFields,\r\n  EqualityFn,\r\n  Simplify\r\n} from './types'\r\n\r\nclass StrongRef<T> {\r\n  constructor(private value: T) {}\r\n  deref() {\r\n    return this.value\r\n  }\r\n}\r\n\r\nconst Ref =\r\n  typeof WeakRef !== 'undefined'\r\n    ? WeakRef\r\n    : (StrongRef as unknown as typeof WeakRef)\r\n\r\nconst UNTERMINATED = 0\r\nconst TERMINATED = 1\r\n\r\ninterface UnterminatedCacheNode<T> {\r\n  /**\r\n   * Status, represents whether the cached computation returned a value or threw an error.\r\n   */\r\n  s: 0\r\n  /**\r\n   * Value, either the cached result or an error, depending on status.\r\n   */\r\n  v: void\r\n  /**\r\n   * Object cache, a `WeakMap` where non-primitive arguments are stored.\r\n   */\r\n  o: null | WeakMap<Function | Object, CacheNode<T>>\r\n  /**\r\n   * Primitive cache, a regular Map where primitive arguments are stored.\r\n   */\r\n  p: null | Map<string | number | null | void | symbol | boolean, CacheNode<T>>\r\n}\r\n\r\ninterface TerminatedCacheNode<T> {\r\n  /**\r\n   * Status, represents whether the cached computation returned a value or threw an error.\r\n   */\r\n  s: 1\r\n  /**\r\n   * Value, either the cached result or an error, depending on status.\r\n   */\r\n  v: T\r\n  /**\r\n   * Object cache, a `WeakMap` where non-primitive arguments are stored.\r\n   */\r\n  o: null | WeakMap<Function | Object, CacheNode<T>>\r\n  /**\r\n   * Primitive cache, a regular `Map` where primitive arguments are stored.\r\n   */\r\n  p: null | Map<string | number | null | void | symbol | boolean, CacheNode<T>>\r\n}\r\n\r\ntype CacheNode<T> = TerminatedCacheNode<T> | UnterminatedCacheNode<T>\r\n\r\nfunction createCacheNode<T>(): CacheNode<T> {\r\n  return {\r\n    s: UNTERMINATED,\r\n    v: undefined,\r\n    o: null,\r\n    p: null\r\n  }\r\n}\r\n\r\n/**\r\n * Configuration options for a memoization function utilizing `WeakMap` for\r\n * its caching mechanism.\r\n *\r\n * @template Result - The type of the return value of the memoized function.\r\n *\r\n * @since 5.0.0\r\n * @public\r\n */\r\nexport interface WeakMapMemoizeOptions<Result = any> {\r\n  /**\r\n   * If provided, used to compare a newly generated output value against previous values in the cache.\r\n   * If a match is found, the old value is returned. This addresses the common\r\n   * ```ts\r\n   * todos.map(todo => todo.id)\r\n   * ```\r\n   * use case, where an update to another field in the original data causes a recalculation\r\n   * due to changed references, but the output is still effectively the same.\r\n   *\r\n   * @since 5.0.0\r\n   */\r\n  resultEqualityCheck?: EqualityFn<Result>\r\n}\r\n\r\n/**\r\n * Creates a tree of `WeakMap`-based cache nodes based on the identity of the\r\n * arguments it's been called with (in this case, the extracted values from your input selectors).\r\n * This allows `weakMapMemoize` to have an effectively infinite cache size.\r\n * Cache results will be kept in memory as long as references to the arguments still exist,\r\n * and then cleared out as the arguments are garbage-collected.\r\n *\r\n * __Design Tradeoffs for `weakMapMemoize`:__\r\n * - Pros:\r\n *   - It has an effectively infinite cache size, but you have no control over\r\n *   how long values are kept in cache as it's based on garbage collection and `WeakMap`s.\r\n * - Cons:\r\n *   - There's currently no way to alter the argument comparisons.\r\n *   They're based on strict reference equality.\r\n *   - It's roughly the same speed as `lruMemoize`, although likely a fraction slower.\r\n *\r\n * __Use Cases for `weakMapMemoize`:__\r\n * - This memoizer is likely best used for cases where you need to call the\r\n * same selector instance with many different arguments, such as a single\r\n * selector instance that is used in a list item component and called with\r\n * item IDs like:\r\n *   ```ts\r\n *   useSelector(state => selectSomeData(state, props.category))\r\n *   ```\r\n * @param func - The function to be memoized.\r\n * @returns A memoized function with a `.clearCache()` method attached.\r\n *\r\n * @example\r\n * <caption>Using `createSelector`</caption>\r\n * ```ts\r\n * import { createSelector, weakMapMemoize } from 'reselect'\r\n *\r\n * interface RootState {\r\n *   items: { id: number; category: string; name: string }[]\r\n * }\r\n *\r\n * const selectItemsByCategory = createSelector(\r\n *   [\r\n *     (state: RootState) => state.items,\r\n *     (state: RootState, category: string) => category\r\n *   ],\r\n *   (items, category) => items.filter(item => item.category === category),\r\n *   {\r\n *     memoize: weakMapMemoize,\r\n *     argsMemoize: weakMapMemoize\r\n *   }\r\n * )\r\n * ```\r\n *\r\n * @example\r\n * <caption>Using `createSelectorCreator`</caption>\r\n * ```ts\r\n * import { createSelectorCreator, weakMapMemoize } from 'reselect'\r\n *\r\n * const createSelectorWeakMap = createSelectorCreator({ memoize: weakMapMemoize, argsMemoize: weakMapMemoize })\r\n *\r\n * const selectItemsByCategory = createSelectorWeakMap(\r\n *   [\r\n *     (state: RootState) => state.items,\r\n *     (state: RootState, category: string) => category\r\n *   ],\r\n *   (items, category) => items.filter(item => item.category === category)\r\n * )\r\n * ```\r\n *\r\n * @template Func - The type of the function that is memoized.\r\n *\r\n * @see {@link https://reselect.js.org/api/weakMapMemoize `weakMapMemoize`}\r\n *\r\n * @since 5.0.0\r\n * @public\r\n * @experimental\r\n */\r\nexport function weakMapMemoize<Func extends AnyFunction>(\r\n  func: Func,\r\n  options: WeakMapMemoizeOptions<ReturnType<Func>> = {}\r\n) {\r\n  let fnNode = createCacheNode()\r\n  const { resultEqualityCheck } = options\r\n\r\n  let lastResult: WeakRef<object> | undefined\r\n\r\n  let resultsCount = 0\r\n\r\n  function memoized() {\r\n    let cacheNode = fnNode\r\n    const { length } = arguments\r\n    for (let i = 0, l = length; i < l; i++) {\r\n      const arg = arguments[i]\r\n      if (\r\n        typeof arg === 'function' ||\r\n        (typeof arg === 'object' && arg !== null)\r\n      ) {\r\n        // Objects go into a WeakMap\r\n        let objectCache = cacheNode.o\r\n        if (objectCache === null) {\r\n          cacheNode.o = objectCache = new WeakMap()\r\n        }\r\n        const objectNode = objectCache.get(arg)\r\n        if (objectNode === undefined) {\r\n          cacheNode = createCacheNode()\r\n          objectCache.set(arg, cacheNode)\r\n        } else {\r\n          cacheNode = objectNode\r\n        }\r\n      } else {\r\n        // Primitives go into a regular Map\r\n        let primitiveCache = cacheNode.p\r\n        if (primitiveCache === null) {\r\n          cacheNode.p = primitiveCache = new Map()\r\n        }\r\n        const primitiveNode = primitiveCache.get(arg)\r\n        if (primitiveNode === undefined) {\r\n          cacheNode = createCacheNode()\r\n          primitiveCache.set(arg, cacheNode)\r\n        } else {\r\n          cacheNode = primitiveNode\r\n        }\r\n      }\r\n    }\r\n\r\n    const terminatedNode = cacheNode as unknown as TerminatedCacheNode<any>\r\n\r\n    let result\r\n\r\n    if (cacheNode.s === TERMINATED) {\r\n      result = cacheNode.v\r\n    } else {\r\n      // Allow errors to propagate\r\n      result = func.apply(null, arguments as unknown as any[])\r\n      resultsCount++\r\n\r\n      if (resultEqualityCheck) {\r\n        const lastResultValue = lastResult?.deref?.() ?? lastResult\r\n\r\n        if (\r\n          lastResultValue != null &&\r\n          resultEqualityCheck(lastResultValue as ReturnType<Func>, result)\r\n        ) {\r\n          result = lastResultValue\r\n\r\n          resultsCount !== 0 && resultsCount--\r\n        }\r\n\r\n        const needsWeakRef =\r\n          (typeof result === 'object' && result !== null) ||\r\n          typeof result === 'function'\r\n\r\n        lastResult = needsWeakRef ? new Ref(result) : result\r\n      }\r\n    }\r\n\r\n    terminatedNode.s = TERMINATED\r\n\r\n    terminatedNode.v = result\r\n    return result\r\n  }\r\n\r\n  memoized.clearCache = () => {\r\n    fnNode = createCacheNode()\r\n    memoized.resetResultsCount()\r\n  }\r\n\r\n  memoized.resultsCount = () => resultsCount\r\n\r\n  memoized.resetResultsCount = () => {\r\n    resultsCount = 0\r\n  }\r\n\r\n  return memoized as Func & Simplify<DefaultMemoizeFields>\r\n}\r\n","import { weakMapMemoize } from './weakMapMemoize'\r\n\r\nimport type {\r\n  Combiner,\r\n  CreateSelectorOptions,\r\n  DropFirstParameter,\r\n  ExtractMemoizerFields,\r\n  GetParamsFromSelectors,\r\n  GetStateFromSelectors,\r\n  InterruptRecursion,\r\n  OutputSelector,\r\n  Selector,\r\n  SelectorArray,\r\n  SetRequired,\r\n  Simplify,\r\n  UnknownMemoizer\r\n} from './types'\r\n\r\nimport {\r\n  assertIsFunction,\r\n  collectInputSelectorResults,\r\n  ensureIsArray,\r\n  getDependencies,\r\n  getDevModeChecksExecutionInfo\r\n} from './utils'\r\n\r\n/**\r\n * An instance of `createSelector`, customized with a given memoize implementation.\r\n *\r\n * @template MemoizeFunction - The type of the memoize function that is used to memoize the `resultFunc` inside `createSelector` (e.g., `lruMemoize` or `weakMapMemoize`).\r\n * @template ArgsMemoizeFunction - The type of the optional memoize function that is used to memoize the arguments passed into the output selector generated by `createSelector` (e.g., `lruMemoize` or `weakMapMemoize`). If none is explicitly provided, `weakMapMemoize` will be used.\r\n * @template StateType - The type of state that the selectors created with this selector creator will operate on.\r\n *\r\n * @public\r\n */\r\nexport interface CreateSelectorFunction<\r\n  MemoizeFunction extends UnknownMemoizer = typeof weakMapMemoize,\r\n  ArgsMemoizeFunction extends UnknownMemoizer = typeof weakMapMemoize,\r\n  StateType = any\r\n> {\r\n  /**\r\n   * Creates a memoized selector function.\r\n   *\r\n   * @param createSelectorArgs - An arbitrary number of input selectors as separate inline arguments and a `combiner` function.\r\n   * @returns A memoized output selector.\r\n   *\r\n   * @template InputSelectors - The type of the input selectors as an array.\r\n   * @template Result - The return type of the `combiner` as well as the output selector.\r\n   * @template OverrideMemoizeFunction - The type of the optional `memoize` function that could be passed into the options object to override the original `memoize` function that was initially passed into `createSelectorCreator`.\r\n   * @template OverrideArgsMemoizeFunction - The type of the optional `argsMemoize` function that could be passed into the options object to override the original `argsMemoize` function that was initially passed into `createSelectorCreator`.\r\n   *\r\n   * @see {@link https://reselect.js.org/api/createselector `createSelector`}\r\n   */\r\n  <InputSelectors extends SelectorArray<StateType>, Result>(\r\n    ...createSelectorArgs: [\r\n      ...inputSelectors: InputSelectors,\r\n      combiner: Combiner<InputSelectors, Result>\r\n    ]\r\n  ): OutputSelector<\r\n    InputSelectors,\r\n    Result,\r\n    MemoizeFunction,\r\n    ArgsMemoizeFunction\r\n  > &\r\n    InterruptRecursion\r\n\r\n  /**\r\n   * Creates a memoized selector function.\r\n   *\r\n   * @param createSelectorArgs - An arbitrary number of input selectors as separate inline arguments, a `combiner` function and an `options` object.\r\n   * @returns A memoized output selector.\r\n   *\r\n   * @template InputSelectors - The type of the input selectors as an array.\r\n   * @template Result - The return type of the `combiner` as well as the output selector.\r\n   * @template OverrideMemoizeFunction - The type of the optional `memoize` function that could be passed into the options object to override the original `memoize` function that was initially passed into `createSelectorCreator`.\r\n   * @template OverrideArgsMemoizeFunction - The type of the optional `argsMemoize` function that could be passed into the options object to override the original `argsMemoize` function that was initially passed into `createSelectorCreator`.\r\n   *\r\n   * @see {@link https://reselect.js.org/api/createselector `createSelector`}\r\n   */\r\n  <\r\n    InputSelectors extends SelectorArray<StateType>,\r\n    Result,\r\n    OverrideMemoizeFunction extends UnknownMemoizer = MemoizeFunction,\r\n    OverrideArgsMemoizeFunction extends UnknownMemoizer = ArgsMemoizeFunction\r\n  >(\r\n    ...createSelectorArgs: [\r\n      ...inputSelectors: InputSelectors,\r\n      combiner: Combiner<InputSelectors, Result>,\r\n      createSelectorOptions: Simplify<\r\n        CreateSelectorOptions<\r\n          MemoizeFunction,\r\n          ArgsMemoizeFunction,\r\n          OverrideMemoizeFunction,\r\n          OverrideArgsMemoizeFunction\r\n        >\r\n      >\r\n    ]\r\n  ): OutputSelector<\r\n    InputSelectors,\r\n    Result,\r\n    OverrideMemoizeFunction,\r\n    OverrideArgsMemoizeFunction\r\n  > &\r\n    InterruptRecursion\r\n\r\n  /**\r\n   * Creates a memoized selector function.\r\n   *\r\n   * @param inputSelectors - An array of input selectors.\r\n   * @param combiner - A function that Combines the input selectors and returns an output selector. Otherwise known as the result function.\r\n   * @param createSelectorOptions - An optional options object that allows for further customization per selector.\r\n   * @returns A memoized output selector.\r\n   *\r\n   * @template InputSelectors - The type of the input selectors array.\r\n   * @template Result - The return type of the `combiner` as well as the output selector.\r\n   * @template OverrideMemoizeFunction - The type of the optional `memoize` function that could be passed into the options object to override the original `memoize` function that was initially passed into `createSelectorCreator`.\r\n   * @template OverrideArgsMemoizeFunction - The type of the optional `argsMemoize` function that could be passed into the options object to override the original `argsMemoize` function that was initially passed into `createSelectorCreator`.\r\n   *\r\n   * @see {@link https://reselect.js.org/api/createselector `createSelector`}\r\n   */\r\n  <\r\n    InputSelectors extends SelectorArray<StateType>,\r\n    Result,\r\n    OverrideMemoizeFunction extends UnknownMemoizer = MemoizeFunction,\r\n    OverrideArgsMemoizeFunction extends UnknownMemoizer = ArgsMemoizeFunction\r\n  >(\r\n    inputSelectors: [...InputSelectors],\r\n    combiner: Combiner<InputSelectors, Result>,\r\n    createSelectorOptions?: Simplify<\r\n      CreateSelectorOptions<\r\n        MemoizeFunction,\r\n        ArgsMemoizeFunction,\r\n        OverrideMemoizeFunction,\r\n        OverrideArgsMemoizeFunction\r\n      >\r\n    >\r\n  ): OutputSelector<\r\n    InputSelectors,\r\n    Result,\r\n    OverrideMemoizeFunction,\r\n    OverrideArgsMemoizeFunction\r\n  > &\r\n    InterruptRecursion\r\n\r\n  /**\r\n   * Creates a \"pre-typed\" version of {@linkcode createSelector createSelector}\r\n   * where the `state` type is predefined.\r\n   *\r\n   * This allows you to set the `state` type once, eliminating the need to\r\n   * specify it with every {@linkcode createSelector createSelector} call.\r\n   *\r\n   * @returns A pre-typed `createSelector` with the state type already defined.\r\n   *\r\n   * @example\r\n   * ```ts\r\n   * import { createSelector } from 'reselect'\r\n   *\r\n   * export interface RootState {\r\n   *   todos: { id: number; completed: boolean }[]\r\n   *   alerts: { id: number; read: boolean }[]\r\n   * }\r\n   *\r\n   * export const createAppSelector = createSelector.withTypes<RootState>()\r\n   *\r\n   * const selectTodoIds = createAppSelector(\r\n   *   [\r\n   *     // Type of `state` is set to `RootState`, no need to manually set the type\r\n   *     state => state.todos\r\n   *   ],\r\n   *   todos => todos.map(({ id }) => id)\r\n   * )\r\n   * ```\r\n   * @template OverrideStateType - The specific type of state used by all selectors created with this selector creator.\r\n   *\r\n   * @see {@link https://reselect.js.org/api/createselector#defining-a-pre-typed-createselector `createSelector.withTypes`}\r\n   *\r\n   * @since 5.1.0\r\n   */\r\n  withTypes: <OverrideStateType extends StateType>() => CreateSelectorFunction<\r\n    MemoizeFunction,\r\n    ArgsMemoizeFunction,\r\n    OverrideStateType\r\n  >\r\n}\r\n\r\n/**\r\n * Creates a selector creator function with the specified memoization function\r\n * and options for customizing memoization behavior.\r\n *\r\n * @param options - An options object containing the `memoize` function responsible for memoizing the `resultFunc` inside `createSelector` (e.g., `lruMemoize` or `weakMapMemoize`). It also provides additional options for customizing memoization. While the `memoize` property is mandatory, the rest are optional.\r\n * @returns A customized `createSelector` function.\r\n *\r\n * @example\r\n * ```ts\r\n * const customCreateSelector = createSelectorCreator({\r\n *   memoize: customMemoize, // Function to be used to memoize `resultFunc`\r\n *   memoizeOptions: [memoizeOption1, memoizeOption2], // Options passed to `customMemoize` as the second argument onwards\r\n *   argsMemoize: customArgsMemoize, // Function to be used to memoize the selector's arguments\r\n *   argsMemoizeOptions: [argsMemoizeOption1, argsMemoizeOption2] // Options passed to `customArgsMemoize` as the second argument onwards\r\n * })\r\n *\r\n * const customSelector = customCreateSelector(\r\n *   [inputSelector1, inputSelector2],\r\n *   resultFunc // `resultFunc` will be passed as the first argument to `customMemoize`\r\n * )\r\n *\r\n * customSelector(\r\n *   ...selectorArgs // Will be memoized by `customArgsMemoize`\r\n * )\r\n * ```\r\n *\r\n * @template MemoizeFunction - The type of the memoize function that is used to memoize the `resultFunc` inside `createSelector` (e.g., `lruMemoize` or `weakMapMemoize`).\r\n * @template ArgsMemoizeFunction - The type of the optional memoize function that is used to memoize the arguments passed into the output selector generated by `createSelector` (e.g., `lruMemoize` or `weakMapMemoize`). If none is explicitly provided, `weakMapMemoize` will be used.\r\n *\r\n * @see {@link https://reselect.js.org/api/createSelectorCreator#using-options-since-500 `createSelectorCreator`}\r\n *\r\n * @since 5.0.0\r\n * @public\r\n */\r\nexport function createSelectorCreator<\r\n  MemoizeFunction extends UnknownMemoizer,\r\n  ArgsMemoizeFunction extends UnknownMemoizer = typeof weakMapMemoize\r\n>(\r\n  options: Simplify<\r\n    SetRequired<\r\n      CreateSelectorOptions<\r\n        typeof weakMapMemoize,\r\n        typeof weakMapMemoize,\r\n        MemoizeFunction,\r\n        ArgsMemoizeFunction\r\n      >,\r\n      'memoize'\r\n    >\r\n  >\r\n): CreateSelectorFunction<MemoizeFunction, ArgsMemoizeFunction>\r\n\r\n/**\r\n * Creates a selector creator function with the specified memoization function\r\n * and options for customizing memoization behavior.\r\n *\r\n * @param memoize - The `memoize` function responsible for memoizing the `resultFunc` inside `createSelector` (e.g., `lruMemoize` or `weakMapMemoize`).\r\n * @param memoizeOptionsFromArgs - Optional configuration options for the memoization function. These options are then passed to the memoize function as the second argument onwards.\r\n * @returns A customized `createSelector` function.\r\n *\r\n * @example\r\n * ```ts\r\n * const customCreateSelector = createSelectorCreator(customMemoize, // Function to be used to memoize `resultFunc`\r\n *   option1, // Will be passed as second argument to `customMemoize`\r\n *   option2, // Will be passed as third argument to `customMemoize`\r\n *   option3 // Will be passed as fourth argument to `customMemoize`\r\n * )\r\n *\r\n * const customSelector = customCreateSelector(\r\n *   [inputSelector1, inputSelector2],\r\n *   resultFunc // `resultFunc` will be passed as the first argument to `customMemoize`\r\n * )\r\n * ```\r\n *\r\n * @template MemoizeFunction - The type of the memoize function that is used to memoize the `resultFunc` inside `createSelector` (e.g., `lruMemoize` or `weakMapMemoize`).\r\n *\r\n * @see {@link https://reselect.js.org/api/createSelectorCreator#using-memoize-and-memoizeoptions `createSelectorCreator`}\r\n *\r\n * @public\r\n */\r\nexport function createSelectorCreator<MemoizeFunction extends UnknownMemoizer>(\r\n  memoize: MemoizeFunction,\r\n  ...memoizeOptionsFromArgs: DropFirstParameter<MemoizeFunction>\r\n): CreateSelectorFunction<MemoizeFunction>\r\n\r\n/**\r\n * Creates a selector creator function with the specified memoization\r\n * function and options for customizing memoization behavior.\r\n *\r\n * @param memoizeOrOptions - Either A `memoize` function or an `options` object containing the `memoize` function.\r\n * @param memoizeOptionsFromArgs - Optional configuration options for the memoization function. These options are then passed to the memoize function as the second argument onwards.\r\n * @returns A customized `createSelector` function.\r\n *\r\n * @template MemoizeFunction - The type of the memoize function that is used to memoize the `resultFunc` inside `createSelector` (e.g., `lruMemoize` or `weakMapMemoize`).\r\n * @template ArgsMemoizeFunction - The type of the optional memoize function that is used to memoize the arguments passed into the output selector generated by `createSelector` (e.g., `lruMemoize` or `weakMapMemoize`). If none is explicitly provided, `weakMapMemoize` will be used.\r\n * @template MemoizeOrOptions - The type of the first argument. It can either be a `memoize` function or an `options` object containing the `memoize` function.\r\n */\r\nexport function createSelectorCreator<\r\n  MemoizeFunction extends UnknownMemoizer,\r\n  ArgsMemoizeFunction extends UnknownMemoizer,\r\n  MemoizeOrOptions extends\r\n    | MemoizeFunction\r\n    | SetRequired<\r\n        CreateSelectorOptions<MemoizeFunction, ArgsMemoizeFunction>,\r\n        'memoize'\r\n      >\r\n>(\r\n  memoizeOrOptions: MemoizeOrOptions,\r\n  ...memoizeOptionsFromArgs: MemoizeOrOptions extends SetRequired<\r\n    CreateSelectorOptions<MemoizeFunction, ArgsMemoizeFunction>,\r\n    'memoize'\r\n  >\r\n    ? never\r\n    : DropFirstParameter<MemoizeFunction>\r\n) {\r\n  /** options initially passed into `createSelectorCreator`. */\r\n  const createSelectorCreatorOptions: SetRequired<\r\n    CreateSelectorOptions<MemoizeFunction, ArgsMemoizeFunction>,\r\n    'memoize'\r\n  > = typeof memoizeOrOptions === 'function'\r\n    ? {\r\n        memoize: memoizeOrOptions as MemoizeFunction,\r\n        memoizeOptions: memoizeOptionsFromArgs\r\n      }\r\n    : memoizeOrOptions\r\n\r\n  const createSelector = <\r\n    InputSelectors extends SelectorArray,\r\n    Result,\r\n    OverrideMemoizeFunction extends UnknownMemoizer = MemoizeFunction,\r\n    OverrideArgsMemoizeFunction extends UnknownMemoizer = ArgsMemoizeFunction\r\n  >(\r\n    ...createSelectorArgs: [\r\n      ...inputSelectors: [...InputSelectors],\r\n      combiner: Combiner<InputSelectors, Result>,\r\n      createSelectorOptions?: CreateSelectorOptions<\r\n        MemoizeFunction,\r\n        ArgsMemoizeFunction,\r\n        OverrideMemoizeFunction,\r\n        OverrideArgsMemoizeFunction\r\n      >\r\n    ]\r\n  ) => {\r\n    let recomputations = 0\r\n    let dependencyRecomputations = 0\r\n    let lastResult: Result\r\n\r\n    // Due to the intricacies of rest params, we can't do an optional arg after `...createSelectorArgs`.\r\n    // So, start by declaring the default value here.\r\n    // (And yes, the words 'memoize' and 'options' appear too many times in this next sequence.)\r\n    let directlyPassedOptions: CreateSelectorOptions<\r\n      MemoizeFunction,\r\n      ArgsMemoizeFunction,\r\n      OverrideMemoizeFunction,\r\n      OverrideArgsMemoizeFunction\r\n    > = {}\r\n\r\n    // Normally, the result func or \"combiner\" is the last arg\r\n    let resultFunc = createSelectorArgs.pop() as\r\n      | Combiner<InputSelectors, Result>\r\n      | CreateSelectorOptions<\r\n          MemoizeFunction,\r\n          ArgsMemoizeFunction,\r\n          OverrideMemoizeFunction,\r\n          OverrideArgsMemoizeFunction\r\n        >\r\n\r\n    // If the result func is actually an _object_, assume it's our options object\r\n    if (typeof resultFunc === 'object') {\r\n      directlyPassedOptions = resultFunc\r\n      // and pop the real result func off\r\n      resultFunc = createSelectorArgs.pop() as Combiner<InputSelectors, Result>\r\n    }\r\n\r\n    assertIsFunction(\r\n      resultFunc,\r\n      `createSelector expects an output function after the inputs, but received: [${typeof resultFunc}]`\r\n    )\r\n\r\n    // Determine which set of options we're using. Prefer options passed directly,\r\n    // but fall back to options given to `createSelectorCreator`.\r\n    const combinedOptions = {\r\n      ...createSelectorCreatorOptions,\r\n      ...directlyPassedOptions\r\n    }\r\n\r\n    const {\r\n      memoize,\r\n      memoizeOptions = [],\r\n      argsMemoize = weakMapMemoize,\r\n      argsMemoizeOptions = [],\r\n      devModeChecks = {}\r\n    } = combinedOptions\r\n\r\n    // Simplifying assumption: it's unlikely that the first options arg of the provided memoizer\r\n    // is an array. In most libs I've looked at, it's an equality function or options object.\r\n    // Based on that, if `memoizeOptions` _is_ an array, we assume it's a full\r\n    // user-provided array of options. Otherwise, it must be just the _first_ arg, and so\r\n    // we wrap it in an array so we can apply it.\r\n    const finalMemoizeOptions = ensureIsArray(memoizeOptions)\r\n    const finalArgsMemoizeOptions = ensureIsArray(argsMemoizeOptions)\r\n    const dependencies = getDependencies(createSelectorArgs) as InputSelectors\r\n\r\n    const memoizedResultFunc = memoize(function recomputationWrapper() {\r\n      recomputations++\r\n      // apply arguments instead of spreading for performance.\r\n      // @ts-ignore\r\n      return (resultFunc as Combiner<InputSelectors, Result>).apply(\r\n        null,\r\n        arguments as unknown as Parameters<Combiner<InputSelectors, Result>>\r\n      )\r\n    }, ...finalMemoizeOptions) as Combiner<InputSelectors, Result> &\r\n      ExtractMemoizerFields<OverrideMemoizeFunction>\r\n\r\n    let firstRun = true\r\n\r\n    // If a selector is called with the exact same arguments we don't need to traverse our dependencies again.\r\n    const selector = argsMemoize(function dependenciesChecker() {\r\n      dependencyRecomputations++\r\n      /** Return values of input selectors which the `resultFunc` takes as arguments. */\r\n      const inputSelectorResults = collectInputSelectorResults(\r\n        dependencies,\r\n        arguments\r\n      )\r\n\r\n      // apply arguments instead of spreading for performance.\r\n      // @ts-ignore\r\n      lastResult = memoizedResultFunc.apply(null, inputSelectorResults)\r\n\r\n      if (process.env.NODE_ENV !== 'production') {\r\n        const { identityFunctionCheck, inputStabilityCheck } =\r\n          getDevModeChecksExecutionInfo(firstRun, devModeChecks)\r\n        if (identityFunctionCheck.shouldRun) {\r\n          identityFunctionCheck.run(\r\n            resultFunc as Combiner<InputSelectors, Result>,\r\n            inputSelectorResults,\r\n            lastResult\r\n          )\r\n        }\r\n\r\n        if (inputStabilityCheck.shouldRun) {\r\n          // make a second copy of the params, to check if we got the same results\r\n          const inputSelectorResultsCopy = collectInputSelectorResults(\r\n            dependencies,\r\n            arguments\r\n          )\r\n\r\n          inputStabilityCheck.run(\r\n            { inputSelectorResults, inputSelectorResultsCopy },\r\n            { memoize, memoizeOptions: finalMemoizeOptions },\r\n            arguments\r\n          )\r\n        }\r\n\r\n        if (firstRun) firstRun = false\r\n      }\r\n\r\n      return lastResult\r\n    }, ...finalArgsMemoizeOptions) as unknown as Selector<\r\n      GetStateFromSelectors<InputSelectors>,\r\n      Result,\r\n      GetParamsFromSelectors<InputSelectors>\r\n    > &\r\n      ExtractMemoizerFields<OverrideArgsMemoizeFunction>\r\n\r\n    return Object.assign(selector, {\r\n      resultFunc,\r\n      memoizedResultFunc,\r\n      dependencies,\r\n      dependencyRecomputations: () => dependencyRecomputations,\r\n      resetDependencyRecomputations: () => {\r\n        dependencyRecomputations = 0\r\n      },\r\n      lastResult: () => lastResult,\r\n      recomputations: () => recomputations,\r\n      resetRecomputations: () => {\r\n        recomputations = 0\r\n      },\r\n      memoize,\r\n      argsMemoize\r\n    }) as OutputSelector<\r\n      InputSelectors,\r\n      Result,\r\n      OverrideMemoizeFunction,\r\n      OverrideArgsMemoizeFunction\r\n    >\r\n  }\r\n\r\n  Object.assign(createSelector, {\r\n    withTypes: () => createSelector\r\n  })\r\n\r\n  return createSelector as CreateSelectorFunction<\r\n    MemoizeFunction,\r\n    ArgsMemoizeFunction\r\n  >\r\n}\r\n\r\n/**\r\n * Accepts one or more \"input selectors\" (either as separate arguments or a single array),\r\n * a single \"result function\" / \"combiner\", and an optional options object, and\r\n * generates a memoized selector function.\r\n *\r\n * @see {@link https://reselect.js.org/api/createSelector `createSelector`}\r\n *\r\n * @public\r\n */\r\nexport const createSelector =\r\n  /* #__PURE__ */ createSelectorCreator(weakMapMemoize)\r\n","import { createSelector } from './createSelectorCreator'\r\n\r\nimport type { CreateSelectorFunction } from './createSelectorCreator'\r\nimport type {\r\n  InterruptRecursion,\r\n  ObjectValuesToTuple,\r\n  OutputSelector,\r\n  Selector,\r\n  Simplify,\r\n  UnknownMemoizer\r\n} from './types'\r\nimport { assertIsObject } from './utils'\r\nimport type { weakMapMemoize } from './weakMapMemoize'\r\n\r\n/**\r\n * Represents a mapping of selectors to their return types.\r\n *\r\n * @template TObject - An object type where each property is a selector function.\r\n *\r\n * @public\r\n */\r\nexport type SelectorResultsMap<TObject extends SelectorsObject> = {\r\n  [Key in keyof TObject]: ReturnType<TObject[Key]>\r\n}\r\n\r\n/**\r\n * Represents a mapping of selectors for each key in a given root state.\r\n *\r\n * This type is a utility that takes a root state object type and\r\n * generates a corresponding set of selectors. Each selector is associated\r\n * with a key in the root state, allowing for the selection\r\n * of specific parts of the state.\r\n *\r\n * @template RootState - The type of the root state object.\r\n *\r\n * @since 5.0.0\r\n * @public\r\n */\r\nexport type RootStateSelectors<RootState = any> = {\r\n  [Key in keyof RootState]: Selector<RootState, RootState[Key], []>\r\n}\r\n\r\n/**\r\n * @deprecated Please use {@linkcode StructuredSelectorCreator.withTypes createStructuredSelector.withTypes<RootState>()} instead. This type will be removed in the future.\r\n * @template RootState - The type of the root state object.\r\n *\r\n * @since 5.0.0\r\n * @public\r\n */\r\nexport type TypedStructuredSelectorCreator<RootState = any> =\r\n  /**\r\n   * A convenience function that simplifies returning an object\r\n   * made up of selector results.\r\n   *\r\n   * @param inputSelectorsObject - A key value pair consisting of input selectors.\r\n   * @param selectorCreator - A custom selector creator function. It defaults to `createSelector`.\r\n   * @returns A memoized structured selector.\r\n   *\r\n   * @example\r\n   * <caption>Modern Use Case</caption>\r\n   * ```ts\r\n   * import { createSelector, createStructuredSelector } from 'reselect'\r\n   *\r\n   * interface RootState {\r\n   *   todos: {\r\n   *     id: number\r\n   *     completed: boolean\r\n   *     title: string\r\n   *     description: string\r\n   *   }[]\r\n   *   alerts: { id: number; read: boolean }[]\r\n   * }\r\n   *\r\n   * // This:\r\n   * const structuredSelector = createStructuredSelector(\r\n   *   {\r\n   *     todos: (state: RootState) => state.todos,\r\n   *     alerts: (state: RootState) => state.alerts,\r\n   *     todoById: (state: RootState, id: number) => state.todos[id]\r\n   *   },\r\n   *   createSelector\r\n   * )\r\n   *\r\n   * // Is essentially the same as this:\r\n   * const selector = createSelector(\r\n   *   [\r\n   *     (state: RootState) => state.todos,\r\n   *     (state: RootState) => state.alerts,\r\n   *     (state: RootState, id: number) => state.todos[id]\r\n   *   ],\r\n   *   (todos, alerts, todoById) => {\r\n   *     return {\r\n   *       todos,\r\n   *       alerts,\r\n   *       todoById\r\n   *     }\r\n   *   }\r\n   * )\r\n   * ```\r\n   *\r\n   * @example\r\n   * <caption>In your component:</caption>\r\n   * ```tsx\r\n   * import type { RootState } from 'createStructuredSelector/modernUseCase'\r\n   * import { structuredSelector } from 'createStructuredSelector/modernUseCase'\r\n   * import type { FC } from 'react'\r\n   * import { useSelector } from 'react-redux'\r\n   *\r\n   * interface Props {\r\n   *   id: number\r\n   * }\r\n   *\r\n   * const MyComponent: FC<Props> = ({ id }) => {\r\n   *   const { todos, alerts, todoById } = useSelector((state: RootState) =>\r\n   *     structuredSelector(state, id)\r\n   *   )\r\n   *\r\n   *   return (\r\n   *     <div>\r\n   *       Next to do is:\r\n   *       <h2>{todoById.title}</h2>\r\n   *       <p>Description: {todoById.description}</p>\r\n   *       <ul>\r\n   *         <h3>All other to dos:</h3>\r\n   *         {todos.map(todo => (\r\n   *           <li key={todo.id}>{todo.title}</li>\r\n   *         ))}\r\n   *       </ul>\r\n   *     </div>\r\n   *   )\r\n   * }\r\n   * ```\r\n   *\r\n   * @example\r\n   * <caption>Simple Use Case</caption>\r\n   * ```ts\r\n   * const selectA = state => state.a\r\n   * const selectB = state => state.b\r\n   *\r\n   * // The result function in the following selector\r\n   * // is simply building an object from the input selectors\r\n   * const structuredSelector = createSelector(selectA, selectB, (a, b) => ({\r\n   *   a,\r\n   *   b\r\n   * }))\r\n   *\r\n   * const result = structuredSelector({ a: 1, b: 2 }) // will produce { x: 1, y: 2 }\r\n   * ```\r\n   *\r\n   * @template InputSelectorsObject - The shape of the input selectors object.\r\n   * @template MemoizeFunction - The type of the memoize function that is used to create the structured selector. It defaults to `weakMapMemoize`.\r\n   * @template ArgsMemoizeFunction - The type of the of the memoize function that is used to memoize the arguments passed into the generated structured selector. It defaults to `weakMapMemoize`.\r\n   *\r\n   * @see {@link https://reselect.js.org/api/createStructuredSelector `createStructuredSelector`}\r\n   */\r\n  <\r\n    InputSelectorsObject extends RootStateSelectors<RootState> = RootStateSelectors<RootState>,\r\n    MemoizeFunction extends UnknownMemoizer = typeof weakMapMemoize,\r\n    ArgsMemoizeFunction extends UnknownMemoizer = typeof weakMapMemoize\r\n  >(\r\n    inputSelectorsObject: InputSelectorsObject,\r\n    selectorCreator?: CreateSelectorFunction<\r\n      MemoizeFunction,\r\n      ArgsMemoizeFunction\r\n    >\r\n  ) => OutputSelector<\r\n    ObjectValuesToTuple<InputSelectorsObject>,\r\n    Simplify<SelectorResultsMap<InputSelectorsObject>>,\r\n    MemoizeFunction,\r\n    ArgsMemoizeFunction\r\n  > &\r\n    InterruptRecursion\r\n\r\n/**\r\n * Represents an object where each property is a selector function.\r\n *\r\n * @template StateType - The type of state that all the selectors operate on.\r\n *\r\n * @public\r\n */\r\nexport type SelectorsObject<StateType = any> = Record<\r\n  string,\r\n  Selector<StateType>\r\n>\r\n\r\n/**\r\n * It provides a way to create structured selectors.\r\n * The structured selector can take multiple input selectors\r\n * and map their output to an object with specific keys.\r\n *\r\n * @template StateType - The type of state that the structured selectors created with this structured selector creator will operate on.\r\n *\r\n * @see {@link https://reselect.js.org/api/createStructuredSelector `createStructuredSelector`}\r\n *\r\n * @public\r\n */\r\nexport interface StructuredSelectorCreator<StateType = any> {\r\n  /**\r\n   * A convenience function that simplifies returning an object\r\n   * made up of selector results.\r\n   *\r\n   * @param inputSelectorsObject - A key value pair consisting of input selectors.\r\n   * @param selectorCreator - A custom selector creator function. It defaults to `createSelector`.\r\n   * @returns A memoized structured selector.\r\n   *\r\n   * @example\r\n   * <caption>Modern Use Case</caption>\r\n   * ```ts\r\n   * import { createSelector, createStructuredSelector } from 'reselect'\r\n   *\r\n   * interface RootState {\r\n   *   todos: {\r\n   *     id: number\r\n   *     completed: boolean\r\n   *     title: string\r\n   *     description: string\r\n   *   }[]\r\n   *   alerts: { id: number; read: boolean }[]\r\n   * }\r\n   *\r\n   * // This:\r\n   * const structuredSelector = createStructuredSelector(\r\n   *   {\r\n   *     todos: (state: RootState) => state.todos,\r\n   *     alerts: (state: RootState) => state.alerts,\r\n   *     todoById: (state: RootState, id: number) => state.todos[id]\r\n   *   },\r\n   *   createSelector\r\n   * )\r\n   *\r\n   * // Is essentially the same as this:\r\n   * const selector = createSelector(\r\n   *   [\r\n   *     (state: RootState) => state.todos,\r\n   *     (state: RootState) => state.alerts,\r\n   *     (state: RootState, id: number) => state.todos[id]\r\n   *   ],\r\n   *   (todos, alerts, todoById) => {\r\n   *     return {\r\n   *       todos,\r\n   *       alerts,\r\n   *       todoById\r\n   *     }\r\n   *   }\r\n   * )\r\n   * ```\r\n   *\r\n   * @example\r\n   * <caption>In your component:</caption>\r\n   * ```tsx\r\n   * import type { RootState } from 'createStructuredSelector/modernUseCase'\r\n   * import { structuredSelector } from 'createStructuredSelector/modernUseCase'\r\n   * import type { FC } from 'react'\r\n   * import { useSelector } from 'react-redux'\r\n   *\r\n   * interface Props {\r\n   *   id: number\r\n   * }\r\n   *\r\n   * const MyComponent: FC<Props> = ({ id }) => {\r\n   *   const { todos, alerts, todoById } = useSelector((state: RootState) =>\r\n   *     structuredSelector(state, id)\r\n   *   )\r\n   *\r\n   *   return (\r\n   *     <div>\r\n   *       Next to do is:\r\n   *       <h2>{todoById.title}</h2>\r\n   *       <p>Description: {todoById.description}</p>\r\n   *       <ul>\r\n   *         <h3>All other to dos:</h3>\r\n   *         {todos.map(todo => (\r\n   *           <li key={todo.id}>{todo.title}</li>\r\n   *         ))}\r\n   *       </ul>\r\n   *     </div>\r\n   *   )\r\n   * }\r\n   * ```\r\n   *\r\n   * @example\r\n   * <caption>Simple Use Case</caption>\r\n   * ```ts\r\n   * const selectA = state => state.a\r\n   * const selectB = state => state.b\r\n   *\r\n   * // The result function in the following selector\r\n   * // is simply building an object from the input selectors\r\n   * const structuredSelector = createSelector(selectA, selectB, (a, b) => ({\r\n   *   a,\r\n   *   b\r\n   * }))\r\n   *\r\n   * const result = structuredSelector({ a: 1, b: 2 }) // will produce { x: 1, y: 2 }\r\n   * ```\r\n   *\r\n   * @template InputSelectorsObject - The shape of the input selectors object.\r\n   * @template MemoizeFunction - The type of the memoize function that is used to create the structured selector. It defaults to `weakMapMemoize`.\r\n   * @template ArgsMemoizeFunction - The type of the of the memoize function that is used to memoize the arguments passed into the generated structured selector. It defaults to `weakMapMemoize`.\r\n   *\r\n   * @see {@link https://reselect.js.org/api/createStructuredSelector `createStructuredSelector`}\r\n   */\r\n  <\r\n    InputSelectorsObject extends SelectorsObject<StateType>,\r\n    MemoizeFunction extends UnknownMemoizer = typeof weakMapMemoize,\r\n    ArgsMemoizeFunction extends UnknownMemoizer = typeof weakMapMemoize\r\n  >(\r\n    inputSelectorsObject: InputSelectorsObject,\r\n    selectorCreator?: CreateSelectorFunction<\r\n      MemoizeFunction,\r\n      ArgsMemoizeFunction\r\n    >\r\n  ): OutputSelector<\r\n    ObjectValuesToTuple<InputSelectorsObject>,\r\n    Simplify<SelectorResultsMap<InputSelectorsObject>>,\r\n    MemoizeFunction,\r\n    ArgsMemoizeFunction\r\n  > &\r\n    InterruptRecursion\r\n\r\n  /**\r\n   * Creates a \"pre-typed\" version of\r\n   * {@linkcode createStructuredSelector createStructuredSelector}\r\n   * where the `state` type is predefined.\r\n   *\r\n   * This allows you to set the `state` type once, eliminating the need to\r\n   * specify it with every\r\n   * {@linkcode createStructuredSelector createStructuredSelector} call.\r\n   *\r\n   * @returns A pre-typed `createStructuredSelector` with the state type already defined.\r\n   *\r\n   * @example\r\n   * ```ts\r\n   * import { createStructuredSelector } from 'reselect'\r\n   *\r\n   * export interface RootState {\r\n   *   todos: { id: number; completed: boolean }[]\r\n   *   alerts: { id: number; read: boolean }[]\r\n   * }\r\n   *\r\n   * export const createStructuredAppSelector =\r\n   *   createStructuredSelector.withTypes<RootState>()\r\n   *\r\n   * const structuredAppSelector = createStructuredAppSelector({\r\n   *   // Type of `state` is set to `RootState`, no need to manually set the type\r\n   *   todos: state => state.todos,\r\n   *   alerts: state => state.alerts,\r\n   *   todoById: (state, id: number) => state.todos[id]\r\n   * })\r\n   *\r\n   * ```\r\n   * @template OverrideStateType - The specific type of state used by all structured selectors created with this structured selector creator.\r\n   *\r\n   * @see {@link https://reselect.js.org/api/createstructuredselector#defining-a-pre-typed-createstructuredselector `createSelector.withTypes`}\r\n   *\r\n   * @since 5.1.0\r\n   */\r\n  withTypes: <\r\n    OverrideStateType extends StateType\r\n  >() => StructuredSelectorCreator<OverrideStateType>\r\n}\r\n\r\n/**\r\n * A convenience function that simplifies returning an object\r\n * made up of selector results.\r\n *\r\n * @param inputSelectorsObject - A key value pair consisting of input selectors.\r\n * @param selectorCreator - A custom selector creator function. It defaults to `createSelector`.\r\n * @returns A memoized structured selector.\r\n *\r\n * @example\r\n * <caption>Modern Use Case</caption>\r\n * ```ts\r\n * import { createSelector, createStructuredSelector } from 'reselect'\r\n *\r\n * interface RootState {\r\n *   todos: {\r\n *     id: number\r\n *     completed: boolean\r\n *     title: string\r\n *     description: string\r\n *   }[]\r\n *   alerts: { id: number; read: boolean }[]\r\n * }\r\n *\r\n * // This:\r\n * const structuredSelector = createStructuredSelector(\r\n *   {\r\n *     todos: (state: RootState) => state.todos,\r\n *     alerts: (state: RootState) => state.alerts,\r\n *     todoById: (state: RootState, id: number) => state.todos[id]\r\n *   },\r\n *   createSelector\r\n * )\r\n *\r\n * // Is essentially the same as this:\r\n * const selector = createSelector(\r\n *   [\r\n *     (state: RootState) => state.todos,\r\n *     (state: RootState) => state.alerts,\r\n *     (state: RootState, id: number) => state.todos[id]\r\n *   ],\r\n *   (todos, alerts, todoById) => {\r\n *     return {\r\n *       todos,\r\n *       alerts,\r\n *       todoById\r\n *     }\r\n *   }\r\n * )\r\n * ```\r\n *\r\n * @see {@link https://reselect.js.org/api/createStructuredSelector `createStructuredSelector`}\r\n *\r\n * @public\r\n */\r\nexport const createStructuredSelector: StructuredSelectorCreator =\r\n  Object.assign(\r\n    <\r\n      InputSelectorsObject extends SelectorsObject,\r\n      MemoizeFunction extends UnknownMemoizer = typeof weakMapMemoize,\r\n      ArgsMemoizeFunction extends UnknownMemoizer = typeof weakMapMemoize\r\n    >(\r\n      inputSelectorsObject: InputSelectorsObject,\r\n      selectorCreator: CreateSelectorFunction<\r\n        MemoizeFunction,\r\n        ArgsMemoizeFunction\r\n      > = createSelector as CreateSelectorFunction<\r\n        MemoizeFunction,\r\n        ArgsMemoizeFunction\r\n      >\r\n    ) => {\r\n      assertIsObject(\r\n        inputSelectorsObject,\r\n        'createStructuredSelector expects first argument to be an object ' +\r\n          `where each property is a selector, instead received a ${typeof inputSelectorsObject}`\r\n      )\r\n      const inputSelectorKeys = Object.keys(inputSelectorsObject)\r\n      const dependencies = inputSelectorKeys.map(\r\n        key => inputSelectorsObject[key]\r\n      )\r\n      const structuredSelector = selectorCreator(\r\n        dependencies,\r\n        (...inputSelectorResults: any[]) => {\r\n          return inputSelectorResults.reduce((composition, value, index) => {\r\n            composition[inputSelectorKeys[index]] = value\r\n            return composition\r\n          }, {})\r\n        }\r\n      )\r\n      return structuredSelector\r\n    },\r\n    { withTypes: () => createStructuredSelector }\r\n  ) as StructuredSelectorCreator\r\n"],"names":["indeterminate1Keyframe","indeterminate1Animation","indeterminate2Keyframe","indeterminate2Animation","bufferKeyframe","bufferAnimation","getColorShade","theme","color","vars","palette","LinearProgress","mode","main","LinearProgressRoot","name","slot","overridesResolver","props","styles","ownerState","root","variant","position","overflow","display","height","zIndex","colorAdjust","variants","Object","entries","filter","map","style","backgroundColor","content","left","top","right","bottom","opacity","transform","LinearProgressDashed","dashed","marginTop","width","backgroundSize","backgroundPosition","backgroundImage","animation","LinearProgressBar1","bar","bar1Indeterminate","bar1Determinate","bar1Buffer","transition","transformOrigin","LinearProgressBar2","bar2Indeterminate","bar2Buffer","inProps","ref","className","value","valueBuffer","other","classes","slots","bar1","bar2","useUtilityClasses","isRtl","rootProps","inlineStyles","undefined","Math","round","role","children","getLinearProgressUtilityClass","pulseKeyframe","waveKeyframe","pulseAnimation","waveAnimation","SkeletonRoot","hasChildren","withChildren","fitContent","heightAuto","radiusUnit","shape","borderRadius","radiusValue","Skeleton","bg","text","primary","marginBottom","visibility","maxWidth","WebkitMaskImage","background","action","hover","component","Boolean","as","getSkeletonUtilityClass","forceDebug","window","localStorage","getItem","noop","noopLogger","debug","info","warn","error","LOG_LEVELS","getAppender","logLevel","appender","console","minLogLevelIdx","indexOf","Error","reduce","loggerObj","method","idx","args","message","EventManager","constructor","this","maxListeners","warnOnce","events","on","eventName","listener","options","collection","highPriority","Map","regular","isFirst","set","removeListener","delete","removeAllListeners","emit","highPriorityListeners","Array","from","keys","regularListeners","i","length","has","apply","once","that","oneTimeListener","Store","create","_value","listeners","subscribe","fn","add","getSnapshot","update","forEach","l","Set","SYMBOL_API_PRIVATE","Symbol","globalId","_typeof","o","iterator","prototype","toPropertyKey","t","e","toPrimitive","call","r","TypeError","String","GRID_DEFAULT_STRATEGY","GRID_STRATEGIES_PROCESSORS","rowTreeCreation","filtering","sorting","visibleRowsLookupCreation","useGridInitialization","inputApiRef","privateApiRef","publicApiRef","current","existingPrivateApi","state","privateApi","store","instanceId","id","getPublicApi","register","methods","methodName","currentPrivateMethod","spying","target","publicApi","currentPublicMethod","caches","eventManager","createPrivateAPI","createPublicAPI","publishEvent","params","event","defaultMuiPrevented","isPropagationStopped","isSyntheticEvent","details","signature","DataGridPro","DataGridPremium","api","subscribeEvent","handler","useGridApiMethod","useGridApiInitialization","apiRef","rootElementRef","mainElementRef","virtualScrollerRef","columnHeadersContainerRef","useGridRefs","isFirstEffect","setState","useGridIsRtl","getLogger","logger","toString","useGridLoggerFactory","controlStateMapRef","rawForceUpdate","registerControlState","controlStateItem","stateId","reason","newState","ignoreSetState","updatedControlStateIds","controlState","oldSubState","stateSelector","newSubState","push","hasPropChanged","propModel","el","join","model","propOnChange","changeEvent","updateControlState","key","previousState","publicStateApi","forceUpdate","privateStateApi","useGridStateInitialization","cache","isRunning","runAppliers","groupCache","values","appliers","callback","preProcessingPrivateApi","registerPipeProcessor","group","processor","processors","processorsAsArray","get","registerPipeApplier","applier","_appliers","otherAppliers","requestPipeProcessorsApplication","preProcessingPublicApi","unstable_applyPipeProcessors","context","result","useGridPipeProcessing","availableStrategies","strategiesCache","strategyProcessingApi","registerStrategyProcessor","strategyName","processorName","cleanup","_ref","otherProcessors","groupPreProcessors","previousProcessor","getActiveStrategy","applyStrategyProcessor","activeStrategy","strategyGroup","availableStrategyEntry","find","strategy","isAvailable","setStrategyAvailability","useGridStrategyProcessing","getLocaleText","localeText","useGridLocaleText","useGridInitializeState","initializer","isInitialized","sanitizeCellValue","csvOptions","valueStr","shouldAppendQuotes","escapeFormulas","escapedValue","replace","includes","delimiter","some","serializeCellValue","cellParams","ignoreValueFormatter","columnType","colDef","type","toISOString","formattedValue","CSVRow","rowString","isEmpty","addValue","getRowString","writeToClipboardPolyfill","data","span","document","createElement","whiteSpace","userSelect","textContent","body","appendChild","range","createRange","selectNode","selection","getSelection","removeAllRanges","addRange","execCommand","removeChild","columnMenuStateInitializer","columnMenu","open","useGridRegisterPipeProcessor","random","registerPreProcessor","useFirstRender","isFirstRender","useGridRegisterPipeApplier","columnsStateInitializer","columnsState","columnsToUpsert","columns","initialState","columnVisibilityModel","keepOnlyColumnsToUpsert","pinnedColumns","mergeColumnsState","densityStateInitializer","density","getColumnsToExport","fields","currentColumns","field","column","col","allColumns","disableExport","defaultGetRowsToExport","filteredSortedRowIds","rowTree","selectedRows","getSelectedRows","bodyRows","pinnedRows","topPinnedRowsIds","row","bottomPinnedRowsIds","unshift","size","useGridCsvExport","useGridLogger","ignoreValueFormatterProp","ignoreValueFormatterDuringExport","csvExport","getDataAsCsv","rowIds","CSVBody","acc","getCellParams","serializeRow","trim","includeHeaders","filteredColumns","headerRows","includeColumnGroupsHeaders","columnGroupLookup","getAllGroupDetails","maxColumnGroupsDepth","columnGroupPathsLookup","columnGroupPath","getColumnGroupPath","max","headerGroupRow","columnGroupId","columnGroup","headerName","groupId","mainHeaderRow","buildCSV","getRowsToExport","exportDataAsCsv","csv","blob","extension","filename","title","fullName","HTMLAnchorElement","url","URL","createObjectURL","a","href","download","click","setTimeout","revokeObjectURL","exportAs","Blob","utf8WithBom","Uint8Array","fileName","csvExportApi","addExportMenuButtons","initialValue","disableToolbarButton","componentName","getDerivedPaginationModel","paginationState","paginationModelProp","paginationModel","rowCount","pageSize","page","pageCount","validPage","useGridRegisterStrategyProcessor","filterStateInitializer","filterModel","disableMultipleColumnsFiltering","filteredRowsLookup","filteredChildrenCountLookup","filteredDescendantCountLookup","visibleRowsLookup","getVisibleRowsLookup","getVisibleRowsLookupState","tree","rows","createMemoizedValues","focusStateInitializer","focus","cell","columnHeader","columnHeaderFilter","columnGroupHeader","tabIndex","getLeftColumnIndex","currentColIndex","firstColIndex","lastColIndex","getRightColumnIndex","paginationStateInitializer","autoPageSize","pagination","meta","paginationMeta","preferencePanelStateInitializer","preferencePanel","getDefaultCellValue","_excluded","_excluded2","editingStateInitializer","editRows","rowsStateInitializer","isDataSourceAvailable","unstable_dataSource","getRowId","loading","rowCountProp","loadingProp","previousTree","previousTreeDepths","flatRowTreeCreationMethod","updates","rowId","depth","parent","groupingKey","groupingName","treeDepths","dataRowIds","createFlatRowTree","actions","idsToRemoveFromRootGroup","remove","idToDelete","insert","idToInsert","rootGroup","rootGroupChildren","updateFlatRowTree","getSelectionModelPropValue","selectionModelProp","prevSelectionModel","isArray","rowSelectionStateInitializer","rowSelection","rowSelectionModel","sortingStateInitializer","sortModel","disableMultipleColumnsSorting","sortedRows","scrollIntoView","dimensions","clientHeight","scrollTop","offsetHeight","offsetTop","elementBottom","EMPTY_SIZE","EMPTY_DIMENSIONS","isReady","viewportOuterSize","viewportInnerSize","contentSize","minimumSize","hasScrollX","hasScrollY","scrollbarSize","headerHeight","groupHeaderHeight","headerFilterHeight","rowWidth","rowHeight","columnsTotalWidth","leftPinnedWidth","rightPinnedWidth","headersTotalHeight","topContainerHeight","bottomContainerHeight","dimensionsStateInitializer","areElementSizesEqual","b","rowsMetaStateInitializer","rowsMeta","currentPageTotalHeight","positions","getValidRowHeight","rowHeightProp","defaultRowHeight","warningMessage","calculateCellColSpan","lookup","columnIndex","minFirstColumnIndex","maxLastColumnIndex","columnsLength","getRow","getRowValue","colSpan","setCellColSpanInfo","spannedByColSpan","cellProps","computedWidth","j","nextColumnIndex","rightVisibleCellIndex","min","leftVisibleCellIndex","cellColSpanInfo","recurrentUnwrapGroupingColumnModel","columnGroupNode","parents","unwrappedGroupingModelToComplete","child","unwrapGroupingColumnModel","columnGroupingModel","unwrappedSubTree","getColumnGroupsHeaderStructure","orderedColumns","unwrappedGroupingModel","pinnedFields","getParents","groupingHeaderStructure","maxDepth","haveSameParents","field1","field2","slice","depthStructure","structure","newField","columnFields","lastGroup","prevField","createGroupLookup","groupLookup","node","groupParam","subTreeLookup","columnGroupsStateInitializer","visibleColumnFields","columnGroupsHeaderStructure","columnGrouping","headerStructure","trackFinger","currentTouchId","changedTouches","touch","identifier","x","clientX","y","clientY","computeNewWidth","initialOffsetToSeparator","clickX","columnBounds","resizeDirection","newWidth","preventClick","preventDefault","stopImmediatePropagation","columnResizeStateInitializer","columnResize","resizingColumnField","createResizeRefs","initialColWidth","initialTotalWidth","previousMouseClickEvent","columnHeaderElement","headerFilterElement","groupHeaderElements","cellElements","leftPinnedCellsAfter","rightPinnedCellsBefore","fillerLeft","fillerRight","leftPinnedHeadersAfter","rightPinnedHeadersBefore","useGridColumnResize","refs","useLazyRef","stopResizeEventTimeout","useTimeout","touchId","updateWidth","prevWidth","offsetWidth","widthDiff","columnWidthDiff","newTotalWidth","setProperty","flex","element","div","finalWidth","getAttribute","pinnedPosition","LEFT","updateProperty","header","RIGHT","finishResize","nativeEvent","stopListening","prevEvent","prevTimeStamp","timeStamp","prevClientX","prevClientY","setColumnWidth","start","storeReferences","separator","xStart","getRootDimensions","querySelector","gridClasses","headerFilterRow","side","classList","contains","flipResizeDirection","getResizeDirection","computeOffsetToSeparator","getBoundingClientRect","handleResizeMouseUp","useEventCallback","handleResizeMouseMove","buttons","minWidth","handleTouchEnd","handleTouchMove","finger","handleTouchStart","cellSeparator","getColumn","doc","ownerDocument","currentTarget","addEventListener","removeProperty","removeEventListener","pointerEvents","handleResizeStart","handleResizeStop","handleColumnResizeMouseDown","button","cursor","handleColumnSeparatorDoubleClick","disableAutosize","resizable","autosizeColumns","autosizeOptions","columnVirtualizationDisabled","promise","selector","useGridSelector","resolve","Promise","reject","_resolve","_reject","createControllablePromise","useColumnVirtualizationDisabled","isAutosizingRef","async","userOptions","orderedFields","c","unstable_setColumnVirtualization","widthByField","autosizing","widths","filteredWidths","includeOutliers","inputValues","factor","sort","q1","floor","q3","iqr","deviation","v","excludeOutliers","outliersFactor","columnHeaderTitle","columnHeaderTitleContainerContent","iconContainer","iconButtonContainer","menuContainer","menuIcon","getComputedStyle","paddingWidth","parseInt","paddingLeft","paddingRight","scrollWidth","clientWidth","hasColumnMin","hasColumnMax","Infinity","maxContent","extractColumnWidths","newColumns","expand","totalWidth","total","remainingWidth","widthPerColumn","updateColumns","newColumn","index","getColumnHeaderElement","useOnMount","autosizeOnMount","then","useGridNativeEventListener","passive","useGridApiEventHandler","onColumnResize","onColumnWidthChange","property","delta","isRowRangeUpdated","range1","range2","firstRowIndex","lastRowIndex","getCellValue","cellValue","valueGetter","rowSpanValueGetter","EMPTY_STATE","spannedCells","hiddenCells","hiddenCellOriginMap","EMPTY_RANGE","skippedFields","computeRowSpanningState","colDefs","visibleRows","rangeToProcess","resetState","processedRange","rowSpanning","spannedRowId","spannedRowIndex","rowSpan","backwardsHiddenCells","prevIndex","prevRowEntry","currentRow","hiddenCellIndex","relativeIndex","rowSpanningStateInitializer","unstable_rowSpanning","dataRowIdToModelLookup","columnsLookup","isFilteringPending","items","quickFilterValues","DEFAULT_ROWS_TO_PROCESS","useDataGridComponent","composeClasses","cellCheckbox","columnHeaderCheckbox","updateSelectionColumn","selectionColumn","cellClassName","headerClassName","shouldHaveSelectionColumn","checkboxSelection","haveSelectionColumn","useGridRowSelectionPreProcessors","useGridRowsPreProcessors","initialCurrentPageRows","useGridVisibleRows","currentPageRows","enrichPageRowsWithPinnedRows","headerFilteringEnabled","headerFilters","goToCell","colIndex","closestColumnToUse","rowSpanScanDirection","visibleSortedRows","nextCellColSpanInfo","unstable_getCellColSpanInfo","nonRowSpannedRowId","rowSpanHiddenCells","nextRowIndex","nextRowId","findNonRowSpannedCell","rowIndexRelativeToAllRows","findIndex","scrollToIndexes","rowIndex","setCellFocus","goToHeader","getVisibleColumns","setColumnHeaderFocus","goToHeaderFilter","setColumnHeaderFilterFocus","goToGroupHeader","setColumnGroupHeaderFocus","getRowIdFromIndex","handleColumnHeaderKeyDown","headerTitleNode","viewportPageSize","getViewportPageSize","colIndexBefore","getColumnIndex","firstRowIndexInPage","lastRowIndexInPage","columnGroupMaxDepth","shouldPreventDefault","rightColIndex","leftColIndex","ctrlKey","metaKey","toggleColumnMenu","handleHeaderFilterKeyDown","isEditing","isHeaderMenuOpen","handleColumnGroupHeaderKeyDown","focusedColumnGroup","currentField","currentDepth","remainingRightColumns","remainingLeftColumns","handleCellKeyDown","cellMode","Edit","rowIndexBefore","shiftKey","checkIfCanStartEditing","useGridKeyboardNavigation","runIfRowSelectionIsEnabled","propRowSelectionModel","lastRowToggled","onRowSelectionModelChange","disableRowSelectionOnClick","isRowSelectable","propIsRowSelectable","canHaveMultipleSelection","expandMouseRowRangeSelection","endId","startId","isSelected","isRowSelected","visibleRowIds","startIndex","endIndex","selectRowRange","setRowSelectionModel","DataGrid","getRowParams","rowNode","getRowNode","selectRow","resetSelection","newSelection","selectRows","ids","selectableIds","selectionLookup","allPagesRowIds","end","rowsBetweenStartAndEnd","selectionPublicApi","selectionPrivateApi","removeOutdatedSelection","keepNonExistentRowsSelected","currentSelection","rowsLookup","hasChanged","handleSingleRowSelection","hasCtrlKey","isMultipleSelectionDisabled","handleRowClick","closest","preventSelectionOnShift","handleRowSelectionCheckboxChange","handleHeaderSelectionCheckboxChange","rowsToBeSelected","checkboxSelectionVisibleOnly","paginationMode","getCellMode","focusCell","isNextRowSelected","newRowIndex","getRowIndexRelativeToVisibleRows","previousRowIndex","getAllRowIds","isStateControlled","useGridRowSelection","previousColumnsProp","onColumnVisibilityModelChange","setGridColumnsState","updateRenderContext","getAllColumns","useVisibleColumns","getColumnPosition","setColumnVisibilityModel","setColumnVisibility","isVisible","newModel","getColumnIndexRelativeToVisibleColumns","setColumnIndex","targetIndexPosition","oldIndexPosition","updatedColumns","fieldRemoved","splice","targetIndex","oldIndex","hasBeenResized","columnApi","columnReorderApi","stateExportPreProcessing","prevState","columnsStateToExport","columnVisibilityModelToExport","exportOnlyDirtyModels","colDefDimensions","propertyName","propertyValue","stateRestorePreProcessing","columnVisibilityModelToImport","stateToRestore","preferencePanelPreProcessing","ColumnsPanel","columnsPanel","slotProps","addColumnMenuItems","columnMenuItems","disableColumnSelector","prevInnerWidth","hydrateColumns","useGridColumns","currentPage","lastUpdateMs","Date","now","lastRowCount","timeout","getRowIdProp","throttledRowsChange","throttle","run","previousGroupsToFetch","clear","throttleRemainingTimeMs","throttleRowsMs","setRows","prevCache","rowsBeforePartialUpdates","updateRows","nonPinnedRowsUpdates","previousCache","updateServerRows","groupKeys","setLoading","loadingPropBeforePartialUpdates","getRowModels","dataRows","idRowsLookup","getRowsCount","setRowChildrenExpansion","isExpanded","currentNode","newNode","childrenExpanded","getRowGroupChildren","skipAutoGeneratedRows","applySorting","applyFiltering","groupNode","sortedRowIds","childId","setRowIndex","allRows","updatedRows","rowApi","unstable_replaceRows","firstRowToRender","newRows","dataRowIdToIdLookup","seenIds","rowModel","removedRowId","rowTreeNodeConfig","rowProApi","rowProPrivateApi","groupRows","handleStrategyProcessorChange","handleStrategyActivityChange","applyHydrateRowsProcessor","response","totalTopLevelRowCount","isRowCountPropUpdated","areNewRowsAlreadyInState","isNewLoadingAlreadyInState","isNewRowCountAlreadyInState","rowCountPropBeforePartialUpdates","totalRowCount","useGridRows","renderContext","lastRange","updateRowSpanningState","isRowContextInitialized","testRange","getUnprocessedRange","newProcessedRange","newSpannedCellsCount","newHiddenCellsCount","currentSpannedCellsCount","currentHiddenCellsCount","prevRenderContext","shouldResetState","firstRender","useGridRowSpanning","useGridParamsApi","resetColSpan","columnSpanningPublicApi","columnSpanningPrivateApi","calculateColSpan","minFirstColumn","maxLastColumn","useGridColumnSpanning","columnGroupingApi","handleColumnIndexChange","updateColumnGroupingState","getPinnedColumns","useGridColumnGrouping","cellModesModel","setCellModesModel","cellModesModelRef","prevCellModesModel","processRowUpdate","onProcessRowUpdateError","cellModesModelProp","onCellModesModelChange","runIfEditModeIsCell","editMode","Cell","throwIfNotEditable","isCellEditable","throwIfNotInMode","handleCellDoubleClick","isEditable","newParams","cellDoubleClick","handleCellFocusOut","View","cellFocusOut","which","escapeKeyDown","enterKeyDown","shiftTabKeyDown","tabKeyDown","printableKeyDown","pasteKeyDown","deleteKeyDown","handleCellEditStart","startCellEditModeParams","deleteValue","startCellEditMode","handleCellEditStop","cellToFocusAfter","runPendingEditCellValueMutation","ignoreModifications","stopCellEditMode","onCellEditStart","onCellEditStop","editRowsState","hasFieldErrors","editingState","updateCellModesModel","isNewModelDifferentFromProp","updateFieldInCellModesModel","newProps","_newModel$id","otherFields","updateOrDeleteFieldState","newEditingState","updateStateToStartCellEditMode","newValue","isProcessingProps","updateStateToStopCellEditMode","finishCellEditMode","moveFocusToRelativeCell","rowUpdate","getRowWithUpdatedValuesFromCellEditing","handleError","errorThrown","finalRowUpdate","catch","editingApi","editingPrivateApi","setCellEditingEditCellValue","debounceMs","unstable_skipValueParser","skipValueParser","parsedValue","valueParser","changeReason","preProcessEditCellProps","valueSetter","useEnhancedEffect","idToIdLookup","copyOfPrevCellModes","prevMode","originalId","useGridCellEditing","rowModesModel","setRowModesModel","rowModesModelRef","prevRowModesModel","focusTimeout","nextFocusedCell","rowModesModelProp","onRowModesModelChange","runIfEditModeIsRow","Row","getRowMode","hasFieldsWithErrors","fieldProps","rowParams","handleCellFocusIn","rowFocusOut","clearTimeout","nextFieldToFocus","handleRowEditStart","startRowEditModeParams","fieldToFocus","startRowEditMode","handleRowEditStop","stopRowEditMode","onRowEditStart","onRowEditStop","updateRowModesModel","updateRowInRowModesModel","updateOrDeleteRowState","updateStateToStartRowEditMode","updateStateToStopRowEditMode","focusedField","finishRowEditMode","getRowWithUpdatedValuesFromRowEditing","setRowEditingEditCellValue","promises","_editingState$id","otherFieldsProps","processedProps","thisField","fieldColumn","_editingState$id2","all","copyOfPrevRowModesModel","useGridRowEditing","debounceMap","isCellEditableProp","editable","renderEditCell","debounces","runCallback","debouncedField","editingSharedApi","setEditCellValue","maybeDebounce","setEditCellValueToCall","getRowWithUpdatedValues","unstable_getEditCellMeta","editingSharedPrivateApi","useGridEditing","lastClickedCell","hasRootReference","publishCellFocusOut","focusedCell","getColumnGroupHeaderFocus","direction","columnIndexToFocus","visibleColumns","concat","rowIndexToFocus","rowToFocus","colSpanInfo","columnToFocus","handleColumnHeaderFocus","handleColumnGroupHeaderFocus","handleBlur","_","relatedTarget","handleCellMouseDown","handleDocumentClick","cellElement","getCellElement","handleCellModeChange","handleRowSet","handlePaginationModelChange","currentFocusedCell","focusApi","focusPrivateApi","useGridFocus","hideTimeout","immediateTimeout","hidePreferences","preferencePanelState","openedPanelValue","doNotHidePanel","hidePreferencesDelayed","showPreferences","panelId","labelId","preferencePanelToExport","useGridPreferencesPanel","onFilterModelChange","updateFilteredRows","filterState","getFilterState","visibleRowsLookupState","addColumnMenuItem","filterable","disableColumnFilter","applyFilters","upsertFilterItem","item","itemIndex","filterItem","setFilterModel","upsertFilterItems","existingItems","deleteFilterItem","itemToDelete","showFilterPanel","targetColumnField","filterItemsWithValue","filterOperator","filterOperators","operator","requiresFilterValue","newFilterItems","filterItemOnTarget","targetColumn","filters","hideFilterPanel","setFilterLogicOperator","logicOperator","setQuickFilterValues","unstable_applyFilters","inputFilterModel","isRowMatchingFilters","filterMode","disableEval","filterResult","filterApi","ignoreDiacritics","filterModelToExport","callbacks","FilterPanel","filterPanel","getRowsRef","flatFilteringMethod","filterCache","passingFilterItems","passingQuickFilterValues","isRowPassing","footerId","handleColumnsChange","updateVisibleRowsLookupState","useGridFilter","onSortModelChange","upsertSortModel","sortItem","existingIdx","newSortModel","createSortItem","directionOverride","existing","nextSort","sortingOrder","sortable","disableColumnSorting","sortingMode","sortRowList","setSortModel","sortColumn","allowMultipleSorting","sortApi","getSortModel","getSortedRows","getSortedRowIds","getRowIdFromRowIndex","sortModelToExport","flatSortingMethod","rootGroupNode","sortedChildren","handleColumnHeaderClick","latestColumns","useGridSorting","onDensityChange","densityApi","setDensity","newDensity","exportedDensity","restoredDensity","useGridDensity","onPaginationMetaChange","paginationMetaApi","setPaginationMeta","newPaginationMeta","exportedPaginationMeta","restoredPaginationMeta","useGridPaginationMeta","densityFactor","onPaginationModelChange","paginationModelApi","setPage","currentModel","setPaginationModel","setPageSize","handleUpdateAutoPageSize","maximumPageSizeWithoutScrollBar","handleRowCountChange","newRowCount","useGridPaginationModel","visibleTopLevelRowCount","rowCountState","previousPageSize","onRowCountChange","paginationRowCountApi","setRowCount","exportedRowCount","restoredRowCount","isLastPage","hasNextPage","useGridRowCount","useGridPagination","getRowHeight","getRowHeightProp","getRowSpacing","getEstimatedRowHeight","rowsHeightLookup","lastMeasuredRowIndex","hasRowWithAutoHeight","gridPaginationSelector","validRowHeight","hydrateRowsMeta","calculateRowProcessedSizes","sizes","baseCenter","isResized","autoHeight","needsFirstMeasurement","baseRowHeight","existingBaseRowHeight","rowHeightFromUser","initialHeights","indexRelativeToCurrentPage","spacing","isFirstVisible","isLastVisible","spacingTop","spacingBottom","processedSizes","otherSizes","setRowHeight","debouncedHydrateRowsMeta","debounce","rowPositionsDebounceMs","storeMeasuredRowHeight","needsHydration","rowHasAutoHeight","getLastMeasuredRowIndex","setLastMeasuredRowIndex","resetRowHeights","rowsMetaApi","unstable_setLastMeasuredRowIndex","unstable_getRowHeight","unstable_getRowInternalSizes","unstable_setRowHeight","unstable_storeRowHeightMeasurement","rowsMetaPrivateApi","useGridRowsMeta","colRef","scrollCoordinates","columnPositions","cellWidth","abs","scrollLeft","gridRowsMetaSelector","elementIndex","targetOffsetHeight","scroll","scrollApi","getScrollPosition","useGridScroll","showColumnMenu","columnMenuState","hideColumnMenu","columnLookup","visibleOrderedFields","fieldIndex","columnMenuApi","useGridColumnMenu","previousGridState","previousColumnVisibility","previousRows","previousVirtualizationState","updateGridColumnsForPrint","includeCheckboxes","exportedColumnFields","newColumnVisibilityModel","updateGridRowsForPrint","handlePrintWindowLoad","printWindow","normalizeOptions","copyStyles","hideToolbar","hideFooter","printDoc","contentDocument","gridRootElement","gridClone","cloneNode","contain","gridToolbarElementHeight","toolbarContainer","gridFooterElementHeight","footerContainer","computedTotalHeight","boxSizing","gridFooterElement","container","innerHTML","defaultPageStyle","pageStyle","styleElement","createTextNode","head","bodyClassName","split","stylesheetLoadPromises","rootCandidate","getRootNode","headStyleElements","querySelectorAll","tagName","newHeadStyleElements","sheet","styleCSS","cssRules","cssText","attributes","attr","setAttribute","nodeName","nodeValue","contentWindow","print","handlePrintWindowAfterPrint","restoreState","virtualization","printExportApi","exportDataAsPrint","exportState","enabled","enabledForColumns","requestAnimationFrame","iframeEl","buildPrintWindow","onload","matchMedia","mql","matches","printOptions","useGridPrintExport","clipboardExport","clipboardCopyCellDelimiter","handleCopy","toLowerCase","altKey","selectionEnd","selectionStart","textToCopy","navigator","clipboard","writeText","onClipboardCopy","useGridClipboard","errorShown","rootDimensionsRef","dimensionsState","columnHeaderHeight","columnGroupHeaderHeight","w","savedSize","setSavedSize","debouncedSetSavedSize","func","wait","lastArgs","later","throttled","resizeThrottleMs","previousSize","setDimensions","resize","computedStyle","defaultView","newSize","parseFloat","updateDimensions","rootElement","pinnedRowsHeight","scrollDiv","measureScrollbarSize","hasScrollXIfNoYScrollBar","hasScrollYIfNoXScrollBar","newDimensions","prevDimensions","apiPublic","apiPrivate","k","Number","isFirstSizing","handleResize","isJSDOM","test","userAgent","onResize","useGridDimensions","onColumnHeaderClick","onColumnHeaderDoubleClick","onColumnHeaderOver","onColumnHeaderOut","onColumnHeaderEnter","onColumnHeaderLeave","onCellClick","onCellDoubleClick","onCellKeyDown","onPreferencePanelClose","onPreferencePanelOpen","onMenuOpen","onMenuClose","onRowDoubleClick","onRowClick","onStateChange","useGridEvents","statePersistenceApi","useGridStatePersistence","useGridVirtualization","configuration","hooks","useGridAriaAttributes","useGridPrivateApiContext","useGridRootProps","accessibleRowCount","headerGroupingMaxDepth","pinnedRowsCount","useGridRowAriaAttributes","selectedIdsLookup","ariaAttributes","ariaRowIndex","DataGridRaw","useDataGridProps","GridContextProvider","GridRoot","sx","forwardedProps","GridHeader","GridFooterPlaceholder","propTypes","isRequired","columnBufferPx","disableColumnMenu","disableColumnResize","disableDensitySelector","disableMultipleRowSelection","disableVirtualization","estimatedRowCount","experimentalFeatures","warnIfFocusStateIsNotSynced","filterDebounceMs","quickFilterExcludeHiddenColumns","quickFilterLogicOperator","getCellClassName","getDetailPanelContent","getRowClassName","hideFooterPagination","hideFooterSelectedRowCount","indeterminateCheckboxAction","nonce","onColumnOrderChange","pageSizeOptions","label","rowBufferPx","rowSpacingType","showCellVerticalBorder","showColumnVerticalBorder","GridNoResultsOverlay","noResultsOverlayLabel","useGridApiContext","GridOverlay","GridColumnUnsortedIcon","nextSortDirection","Icon","columnSortedAscendingIcon","columnSortedDescendingIcon","iconSlots","booleanCellTrueIcon","booleanCellFalseIcon","columnMenuIcon","openFilterButtonIcon","filterPanelDeleteIcon","columnFilteredIcon","columnSelectorIcon","columnUnsortedIcon","columnResizeIcon","densityCompactIcon","densityStandardIcon","densityComfortableIcon","exportIcon","moreActionsIcon","treeDataCollapseIcon","treeDataExpandIcon","groupingCriteriaCollapseIcon","groupingCriteriaExpandIcon","detailPanelExpandIcon","detailPanelCollapseIcon","rowReorderIcon","quickFilterIcon","quickFilterClearIcon","columnMenuHideIcon","columnMenuSortAscendingIcon","columnMenuSortDescendingIcon","columnMenuFilterIcon","columnMenuManageColumnsIcon","columnMenuClearIcon","loadIcon","filterPanelAddIcon","filterPanelRemoveAllIcon","columnReorderIcon","baseCheckbox","baseTextField","baseFormControl","baseSelect","baseButton","baseIconButton","baseInputAdornment","baseTooltip","basePopper","baseInputLabel","baseSelectOption","native","baseChip","DATA_GRID_DEFAULT_SLOTS_COMPONENTS","material","GridCell","skeletonCell","GridSkeletonCell","columnHeaderFilterIconButton","GridColumnHeaderFilterIconButton","columnHeaderSortIcon","GridColumnHeaderSortIcon","GridColumnMenu","columnHeaders","GridColumnHeaders","detailPanels","footer","GridFooter","footerRowCount","GridRowCount","toolbar","loadingOverlay","GridLoadingOverlay","noResultsOverlay","noRowsOverlay","GridNoRowsOverlay","GridPagination","GridFilterPanel","GridColumnsPanel","G","columnsManagement","GridColumnsManagement","panel","GridPanel","GridRow","DATA_GRID_FORCED_PROPS","hideFooterRowCount","disableColumnReorder","keepColumnPositionIfDraggedOutside","DATA_GRID_PROPS_DEFAULT_VALUES","defaultSlots","themedProps","allProps","useThemeProps","startsWith","groupForwardedProps","overrides","computeSlots","injectDefaultProps","GRID_ACTIONS_COLUMN_TYPE","GRID_ACTIONS_COL_DEF","aggregable","align","headerAlign","renderCell","getApplyQuickFilterFn","GRID_BOOLEAN_COL_DEF","sortComparator","valueFormatter","pastedValueParser","stringToBoolean","getGridBooleanOperators","getApplyFilterFn","valueAsBoolean","InputComponent","GRID_CHECKBOX_SELECTION_FIELD","GRID_CHECKBOX_SELECTION_COL_DEF","disableReorder","renderHeader","throwIfNotDateObject","gridDateFormatter","toLocaleDateString","gridDateTimeFormatter","toLocaleString","GRID_DATE_COL_DEF","GRID_DATETIME_COL_DEF","buildApplyFilterFn","compareFn","showTime","keepHours","date","setSeconds","setMinutes","getMinutes","getTimezoneOffset","setHours","time","getTime","dateCopy","getGridDateOperators","value1","value2","InputComponentProps","DEFAULT_GRID_COL_TYPE_KEY","getGridDefaultColumnTypes","string","number","dateTime","boolean","singleSelect","custom","GRID_NUMERIC_COL_DEF","parseNumericValue","getGridNumericQuickFilterFn","isNaN","columnValue","getGridNumericOperators","GRID_SINGLE_SELECT_COL_DEF","getOptionLabel","getOptionValue","valueOptions","valueOption","option","parseObjectValue","getGridSingleSelectOperators","filterItemValues","GRID_STRING_COL_DEF","hideable","groupable","pinnable","getGridStringQuickFilterFn","filterRegex","RegExp","getRowFormattedValue","createContainsFilterFn","disableTrim","negate","trimmedValue","createEqualityFilterFn","collator","Intl","Collator","sensitivity","usage","isEqual","compare","createEmptyFilterFn","getGridStringOperators","filterItemValue","val","filterValue","GridColumnGroupHeader","hasFocus","isLastColumn","indexInSection","sectionLength","gridHasFiller","headerCellRef","columnGroupsLookup","description","headerComponent","render","renderHeaderGroup","renderParams","showLeftBorder","showRightBorder","isDragging","useId","elementId","draggableContainer","titleContainer","titleContainerContent","elementToFocus","publish","mouseEventsHandlers","onKeyDown","onFocus","onBlur","GridGenericColumnHeaderItem","columnMenuOpen","isResizing","sortDirection","isDraggable","columnMenuIconButton","columnTitleIconButtons","GridColumnHeaderRow","styled","columnHeaderRow","GridColumnHeadersRoot","flexDirection","borderTopLeftRadius","borderTopRightRadius","GridBaseColumnHeaders","clsx","sortColumnLookup","filterColumnLookup","columnHeaderTabIndexState","columnGroupHeaderTabIndexState","columnHeaderFocus","columnGroupHeaderFocus","columnVisibility","hasOtherElementInTabSequence","getInnerProps","getColumnHeadersRow","getColumnGroupHeadersRows","dragCol","setDragCol","resizeCol","setResizeCol","hasVirtualization","columnGroupsModel","offsetLeft","handleColumnResizeStart","handleColumnResizeStop","handleColumnReorderStart","handleColumnReorderStop","leftRenderContext","firstColumnIndex","lastColumnIndex","rightRenderContext","getColumnsToRender","currentContext","firstColumnToRender","lastColumnToRender","renderedColumns","getFillers","leftOverflow","borderBottom","isPinnedRight","isNotPinned","hasScrollbarFiller","leftOffsetWidth","filler","pinnedRight","borderTop","getCellOffsetStyle","isLeftPinned","isRightPinned","pinnedOffset","getPinnedCellOffset","getColumnHeaders","isFirstColumn","siblingWithBorderingSeparator","isSiblingFocused","isLastUnpinned","GridColumnHeaderItem","filterItemsCounter","isLast","getColumnGroupHeaders","columnsToRender","rowStructure","firstColumnFieldToRender","firstGroupToRender","firstGroupIndex","lastColumnFieldToRender","lastGroupToRender","lastGroupIndex","visibleColumnGroupHeader","groupStructure","firstVisibleColumnIndex","headerInfo","separatorSide","GridColumnHeaderSeparator","Left","useGridColumnHeaders","MemoizedGridColumnHeaders","fastMemo","GridConfigurationContext","selectedRowCount","selectedRowCountElement","rowCountElement","visibleRowCount","paginationElement","GridPreferencesPanel","panelContent","SkeletonOverlay","skeletonLoadingOverlay","getColIndex","GridSkeletonLoadingOverlay","forwardedRef","handleRef","useForkRef","viewportHeight","skeletonRowsCount","ceil","inViewportCount","allVisibleColumns","getPinnedStyle","getPinnedPosition","array","rowCells","isPinnedLeft","sectionIndex","pinnedStyle","isFirstPinnedRight","hasFillerBefore","hasFillerAfter","expandedWidth","emptyCellWidth","emptyCell","empty","scrollbarWidth","GridScrollbarFillerCell","rowSkeleton","cells","resizedColIndex","currentWidth","getPropertyValue","pinnedCells","LOADING_VARIANTS","CircularProgress","skeleton","noRowsVariant","rowsCount","activeVariant","noRowsLabel","GridPaginationRoot","maxHeight","selectLabel","breakpoints","up","input","defaultLabelDisplayedRows","to","count","estimated","computedProps","backIconButtonProps","disabled","nextIconButtonProps","lastPage","computedPage","handlePageSizeChange","handlePageChange","isPageSizeIncludedInPageSizeOptions","locales","wrappedLabelDisplayedRows","labelDisplayedRows","rowsPerPageOptions","rowsPerPage","onPageChange","onRowsPerPageChange","EmptyCell","cellEmpty","refProp","selected","styleProp","focusedColumnIndex","isNotVisible","showBottomBorder","onClick","onDoubleClick","onMouseEnter","onMouseLeave","onMouseOut","onMouseOver","useGridConfiguration","treeDepth","editing","hasFocusCell","hasVirtualFocusCellLeft","hasVirtualFocusCellRight","composeGridClasses","getRowAriaAttributes","ResizeObserver","resizeObserver","entry","borderBoxSize","blockSize","contentRect","observe","disconnect","propHandler","publishClick","rowReordering","minHeight","numberOfBaseSizes","maximumSize","rowStyle","rowClassNames","getCell","indexRelativeToAllColumns","NONE","editCellState","isReorderCell","isEditingRows","canReorderColumn","canReorderRow","disableDragEvents","cellIsNotVisible","VIRTUAL","leftCells","rightCells","middleColumnsLength","eventHandlers","cellOffsetLeft","MemoizedGridRow","GridRowCountRoot","alignItems","margin","scrollbarFiller","GridSelectedRowCountRoot","GridSelectedRowCount","rowSelectedText","GridOverlayWrapperRoot","shouldForwardProp","prop","overlayWrapper","overlayType","loadingOverlayVariant","GridOverlayWrapperInner","overlayWrapperInner","inner","GridOverlayWrapper","GridOverlays","Overlay","overlayProps","hasActions","getActions","GridActionsCell","focusElementRef","focusedButtonIndex","setFocusedButtonIndex","setOpen","rootRef","buttonRef","ignoreCallToFocus","touchRippleRefs","menuId","buttonId","iconButtons","showInMenu","menuButtons","numberOfButtons","stop","preventScroll","focusableButtonIndex","hideMenu","handleTouchRippleRef","instance","handleButtonClick","actionsCell","getNewIndex","indexMod","newIndex","stopPropagation","touchRippleRef","fontSize","onClose","menuList","autoFocusItem","closeMenu","renderActionsCell","GridBooleanCellRaw","titleAccess","GridBooleanCell","renderBooleanCell","cachedSupportsPreventScroll","PinnedPosition","gridPinnedColumnPositionLookup","EMPTY_CELL_PARAMS","onMouseDown","onMouseUp","onKeyUp","onDragEnter","onDragOver","canManageOwnFocus","rootClasses","classNames","valueToRender","cellRef","isSelectionMode","cellSelection","capitalize","publishMouseUp","publishMouseDown","isCellRowSpanned","padding","border","cellStyle","activeElement","focusableElement","scrollPosition","handleFocus","updatedRow","editCellStateRest","valueString","draggableEventHandlers","MemoizedGridCell","GridEditBooleanCell","idProp","onValueChange","inputRef","valueState","setValueState","handleChange","checked","htmlFor","onChange","renderEditBooleanCell","StyledInputBase","GridEditDateCell","valueProp","inputProps","isDateTime","valueTransformed","parsedDate","formattedDate","substr","parsed","formatted","parseValueToDate","year","month","day","setFullYear","hours","minutes","newFormattedDate","newParsedDate","fullWidth","renderEditDateCell","GridEditInputCellRoot","editInputCell","typography","body2","GridEditInputCell","endAdornment","renderEditInputCell","GridEditSingleSelectCell","initialOpen","isSelectNative","MenuProps","otherBaseSelectProps","formattedTargetValue","onOpen","isKeyboardEvent","renderEditSingleSelectCell","CIRCULAR_CONTENT_SIZE","DEFAULT_CONTENT_WIDTH_RANGE","CONTENT_WIDTH_RANGE_BY_TYPE","randomNumberGenerator","Memoized","skeletonProps","icon","counter","toggleFilter","getColumnHeaderParams","iconButton","enterDelay","badgeContent","ColumnHeaderMenuIcon","columnMenuId","columnMenuButtonId","iconButtonRef","handleMenuIconClick","sortIndex","showColumnMenuIcon","setShowColumnMenuIcon","isColumnSorted","isColumnFiltered","isColumnNumeric","onDragStart","onDragEnd","columnHeaderSeparatorProps","handleExited","GridColumnHeaderMenu","ContentComponent","contentComponentProps","onExited","showSortIcon","hideSortIcons","draggableContainerProps","GridColumnHeaderSeparatorSides","GridColumnHeaderSeparatorRaw","Right","resizing","stopClick","GridColumnHeaderSortIconRaw","iconElement","icons","iconProps","getIcon","overlap","GridColumnHeaderTitleRoot","textOverflow","fontWeight","lineHeight","ColumnHeaderInnerTitle","GridColumnHeaderTitle","titleRef","tooltip","setTooltip","handleMouseOver","isOver","ariaSort","draggable","columnWidth","GridIconButtonContainerRoot","GridIconButtonContainer","GridCellCheckboxForwardRef","isChecked","checkboxElement","rippleRef","handleKeyDown","isSelectable","GridCellCheckboxRenderer","GridHeaderCheckbox","tabIndexState","paginatedVisibleRowIds","filteredSelection","selectionCandidates","currentSelectionSize","isIndeterminate","handleSelectionChange","p","indeterminate","checkColumnVisibilityModelsSame","aFalseValues","bFalseValues","defaultSearchPredicate","searchValue","searchInputRef","initialColumnVisibilityModel","setSearchValue","searchPredicate","autoFocusSearchField","disableShowHideToggle","disableResetButton","toggleAllMode","getTogglableColumns","isResetDisabled","sortedColumns","toggleColumn","togglableColumns","togglableSortedColumns","toggleAllColumns","handleSearchValueChange","hideableColumns","allHideableColumnsVisible","every","allHideableColumnsHidden","firstSwitchRef","firstHideableColumnFound","isFirstHideableColumn","GridColumnsManagementHeader","placeholder","InputProps","startAdornment","pl","GridColumnsManagementBody","FormControlLabel","control","GridColumnsManagementEmptyText","GridColumnsManagementFooter","columnsManagementHeader","columnsManagementFooter","justifyContent","divider","grey","GridFooterContainerRoot","GridFooterContainer","GridOverlayRoot","overlay","alignSelf","columnHeaderStyles","separatorIconDragStyles","rx","GridRootStyles","aggregationColumnHeader","aggregationColumnHeaderLabel","editBooleanCell","cellSkeleton","checkboxInput","columnHeaderDraggableContainer","columnHeaderTitleContainer","columnSeparator","filterIcon","iconSeparator","menuIconButton","menuOpen","rowReorderCellPlaceholder","rowReorderCell","sortIcon","withBorderColor","treeDataGroupingCell","treeDataGroupingCellToggle","treeDataGroupingCellLoadingContainer","detailPanelToggleCell","borderColor","TableCell","radius","containerBackground","default","mixins","MuiDataGrid","pinnedBackground","overlayBackground","defaultChannel","disabledOpacity","hoverOpacity","hoverColor","selectedOpacity","selectedBackground","mainChannel","selectedHoverBackground","pinnedHoverBackground","blend","pinnedSelectedBackground","pinnedSelectedHoverBackground","selectedStyles","fontWeightMedium","borderWidth","borderStyle","outline","overflowAnchor","groupingCriteriaCell","WebkitTapHighlightColor","outlineOffset","focusOutlineWidth","transitions","duration","shorter","gap","borderBottomWidth","borderBottomStyle","marginLeft","marginRight","columnSeparatorOffset","touchAction","shortest","breakInside","borderTopColor","boxShadow","shadows","paper","booleanCell","secondary","gridGap","rowReorderCellContainer","borderLeftColor","borderLeftWidth","borderLeftStyle","borderRightColor","borderRightWidth","borderRightStyle","textAlign","virtualScrollerContent","groupingCriteriaCellToggle","virtualScroller","gamma","f","overlayColor","rgb","mountedState","setMountedState","GridMenuRoot","menu","modal","GridMenu","savedFocusRef","HTMLElement","handleClickAway","anchorEl","placement","TransitionProps","onClickAway","mouseEvent","popperOnExited","labelledby","GRID_COLUMN_MENU_SLOTS","columnMenuSortItem","GridColumnMenuSortItem","columnMenuFilterItem","GridColumnMenuFilterItem","columnMenuColumnsItem","GridColumnMenuColumnsItem","GRID_COLUMN_MENU_SLOT_PROPS","displayOrder","GridGenericColumnMenu","defaultSlotProps","orderedSlots","addDividers","processedComponents","processedSlotProps","mergedProps","currentSlotProps","defaultItems","userItems","defaultComponentKeys","sorted","leftItemProps","rightItemProps","isFinite","itemProps","processedComponentProps","customProps","Divider","useGridColumnMenuSlots","GridColumnMenuContainer","Component","otherProps","StyledMenuList","handleListKeyDown","autoFocus","showFilter","GridColumnMenuHideItem","GridColumnMenuManageItem","showColumns","onSortMenuItemClick","getLabel","gridPanelClasses","GridPanelRoot","GridPaperRoot","isPlaced","setIsPlaced","modifiers","rootBoundary","phase","effect","setAnchorEl","panelAnchor","elevation","GridPanelContentRoot","GridPanelContent","GridPanelFooterRoot","panelFooter","GridPanelFooter","GridPanelWrapperRoot","panelWrapper","isEnabled","GridPanelWrapper","disableEnforceFocus","TrapFocus","GridFilterFormRoot","filterForm","FilterFormDeleteIcon","filterFormDeleteIcon","flexShrink","FilterFormLogicOperatorInput","filterFormLogicOperatorInput","FilterFormColumnInput","filterFormColumnInput","FilterFormOperatorInput","filterFormOperatorInput","FilterFormValueInput","filterFormValueInput","getColumnLabel","GridFilterForm","hasMultipleFilters","deleteFilter","applyFilterChanges","showMultiFilterOperators","disableMultiFilterOperator","applyMultiFilterOperatorChanges","logicOperators","And","Or","columnsSort","filterColumns","deleteIconProps","logicOperatorInputProps","operatorInputProps","columnInputProps","valueInputProps","readOnly","filterableColumns","columnSelectId","columnSelectLabelId","operatorSelectId","operatorSelectLabelId","deleteIcon","logicOperatorInput","columnInput","operatorInput","valueInput","valueRef","filterSelectorRef","multiFilterOperator","hasLogicOperatorColumn","baseFormControlProps","isBaseSelectNative","baseInputLabelProps","baseSelectOptionProps","valueInputPropsOther","selectedField","itemField","selectedNonFilterableColumn","filteredFields","currentFilters","isFieldIncluded","sortedFilteredColumns","currentColumn","currentOperator","changeColumn","newOperator","changeOperator","op","eraseItemValue","changeLogicOperator","getLogicOperatorLocaleKey","applyValue","BooleanOperatorContainer","GridFilterInputBoolean","clearButton","labelProp","others","filterValueState","setFilterValueState","selectId","baseSelectProps","onFilterChange","shrink","notched","displayEmpty","convertFilterItemValueToInputValue","itemValue","inputType","substring","GridFilterInputDate","filterTimeout","applying","setIsApplying","InputLabelProps","GridFilterInputMultipleSingleSelect","helperText","TextFieldProps","resolvedColumn","isOptionEqualToValue","resolvedValueOptions","filteredValues","resolvedValue","A","multiple","filterOptions","renderTags","getTagProps","_getTagProps","tagProps","renderInput","GridFilterInputMultipleValue","freeSolo","inputValue","renderSingleSelectOptions","OptionComponent","SingleSelectOperatorContainer","GridFilterInputSingleSelect","currentValueOptions","GridFilterInputValue","newItem","fromInput","getGridFilter","filterableColumnsLookup","lastFilterRef","placeholderFilter","filterFormProps","getColumnForNewFilter","disableAddFilterButton","disableRemoveAllButton","applyFilter","applyFilterLogicOperator","getDefaultFilter","nextColumnWithOperator","nextFieldName","getNewFilter","nextColumnFieldName","readOnlyFilters","validFilters","addNewFilter","newFilter","shouldCloseFilterPanel","handleRemoveAll","startIcon","isSingleSelectColDef","getValueOptions","additionalParams","getValueFromValueOptions","optionValue","_excluded3","GridCsvExportMenuItem","GridPrintExportMenuItem","GridToolbarExport","excelOptions","preProcessedButtons","GridToolbarExportContainer","buttonProps","tooltipProps","exportButtonId","exportMenuId","handleMenuClose","prevOpen","GridScrollAreaRawRoot","scrollArea","GridScrollArea","scrollDirection","getCanScrollMore","maxScrollLeft","dragging","setDragging","canScrollMore","setCanScrollMore","totalHeaderHeight","handleDragOver","offset","handleColumnHeaderDragStart","handleColumnHeaderDragEnd","newScrollPosition","useGridOverlays","noRows","MemoizedGridHeaders","cellTabIndexState","columnsContainerRef","GridPanelAnchor","Element","flexGrow","GridMainContainer","GridTopContainer","GridBottomContainer","VirtualScrollerContentRoot","GridVirtualScrollerContent","overflowedContent","Filler","Pinned","PinnedLeft","borderRight","PinnedRight","borderLeft","Main","rowsLength","scrollbarHeight","expandedHeight","VirtualScrollerRenderZoneRoot","virtualScrollerRenderZone","GridVirtualScrollerRenderZone","Scrollbar","ScrollbarVertical","overflowY","overflowX","ScrollbarHorizontal","Content","GridVirtualScrollbar","isLocked","lastPosition","scrollbarRef","contentRef","propertyDimension","propertyScroll","hasScroll","scrollbarInnerSize","onScrollerScroll","scroller","scrollbar","onScrollbarScroll","capture","Container","Scroller","GridVirtualScroller","overlaysProps","useGridVirtualScroller","getContainerProps","getScrollerProps","getContentProps","getRenderZoneProps","getScrollbarVerticalProps","getScrollbarHorizontalProps","getRows","getDataGridUtilityClass","GRID_DETAIL_PANEL_TOGGLE_FIELD","GRID_DEFAULT_LOCALE_TEXT","toolbarDensity","toolbarDensityLabel","toolbarDensityCompact","toolbarDensityStandard","toolbarDensityComfortable","toolbarColumns","toolbarColumnsLabel","toolbarFilters","toolbarFiltersLabel","toolbarFiltersTooltipHide","toolbarFiltersTooltipShow","toolbarFiltersTooltipActive","toolbarQuickFilterPlaceholder","toolbarQuickFilterLabel","toolbarQuickFilterDeleteIconLabel","toolbarExport","toolbarExportLabel","toolbarExportCSV","toolbarExportPrint","toolbarExportExcel","columnsManagementSearchTitle","columnsManagementNoColumns","columnsManagementShowHideAllText","columnsManagementReset","filterPanelAddFilter","filterPanelRemoveAll","filterPanelDeleteIconLabel","filterPanelLogicOperator","filterPanelOperator","filterPanelOperatorAnd","filterPanelOperatorOr","filterPanelColumns","filterPanelInputLabel","filterPanelInputPlaceholder","filterOperatorContains","filterOperatorDoesNotContain","filterOperatorEquals","filterOperatorDoesNotEqual","filterOperatorStartsWith","filterOperatorEndsWith","filterOperatorIs","filterOperatorNot","filterOperatorAfter","filterOperatorOnOrAfter","filterOperatorBefore","filterOperatorOnOrBefore","filterOperatorIsEmpty","filterOperatorIsNotEmpty","filterOperatorIsAnyOf","headerFilterOperatorContains","headerFilterOperatorDoesNotContain","headerFilterOperatorEquals","headerFilterOperatorDoesNotEqual","headerFilterOperatorStartsWith","headerFilterOperatorEndsWith","headerFilterOperatorIs","headerFilterOperatorNot","headerFilterOperatorAfter","headerFilterOperatorOnOrAfter","headerFilterOperatorBefore","headerFilterOperatorOnOrBefore","headerFilterOperatorIsEmpty","headerFilterOperatorIsNotEmpty","headerFilterOperatorIsAnyOf","filterValueAny","filterValueTrue","filterValueFalse","columnMenuLabel","columnMenuShowColumns","columnMenuManageColumns","columnMenuFilter","columnMenuHideColumn","columnMenuUnsort","columnMenuSortAsc","columnMenuSortDesc","columnHeaderFiltersTooltipActive","columnHeaderFiltersLabel","columnHeaderSortIconLabel","footerRowSelected","footerTotalRows","footerTotalVisibleRows","visibleCount","totalCount","checkboxSelectionHeaderName","checkboxSelectionSelectAllRows","checkboxSelectionUnselectAllRows","checkboxSelectionSelectRow","checkboxSelectionUnselectRow","booleanCellTrueLabel","booleanCellFalseLabel","actionsCellMore","pinToLeft","pinToRight","unpin","treeDataGroupingHeaderName","treeDataExpand","treeDataCollapse","groupingColumnHeaderName","groupColumn","unGroupColumn","detailPanelToggle","expandDetailPanel","collapseDetailPanel","MuiTablePagination","rowReorderingHeaderName","aggregationMenuItemHeader","aggregationFunctionLabelSum","aggregationFunctionLabelAvg","aggregationFunctionLabelMin","aggregationFunctionLabelMax","aggregationFunctionLabelSize","Provider","gridColumnGroupingSelector","gridColumnGroupsUnwrappedModelSelector","gridColumnGroupsLookupSelector","gridColumnGroupsHeaderStructureSelector","gridColumnGroupsHeaderMaxDepthSelector","gridColumnMenuSelector","DEFAULT_GRID_AUTOSIZE_OPTIONS","GridPinnedColumnPosition","EMPTY_PINNED_COLUMN_FIELDS","gridColumnsStateSelector","gridColumnFieldsSelector","createSelector","gridColumnLookupSelector","gridColumnDefinitionsSelector","allFields","gridColumnVisibilityModelSelector","gridVisibleColumnDefinitionsSelector","gridVisibleColumnFieldsSelector","gridPinnedColumnsSelector","gridVisiblePinnedColumnDefinitionsSelector","visiblePinnedFields","invert","newPinnedColumns","remainingColumns","leftPinnedColumns","columnsWithoutLeftPinnedColumns","rightPinnedColumns","filterVisibleColumns","gridColumnPositionsSelector","currentPosition","gridColumnsTotalWidthSelector","colCount","gridFilterableColumnDefinitionsSelector","gridFilterableColumnLookupSelector","gridHasColSpanSelector","COLUMNS_DIMENSION_PROPERTIES","COLUMN_TYPES","hydrateColumnsWidth","rawState","totalFlexUnits","widthAllocatedBeforeFlex","flexColumns","columnField","isFlex","availableWidth","initialFreeSpace","computedColumnWidths","uniqueFlexColumns","flexColumnsLookup","frozenFields","freeze","frozen","loopOverFlexItems","violationsLookup","remainingFreeSpace","flexUnits","totalViolation","computeFlexColumnsWidth","getDefaultColTypeDef","createColumnsState","isInsideStateInitializer","currentState","columnsToKeep","columnsToUpsertLookup","existingState","columnsStateWithPortableColumns","columnsWithUpdatedDimensions","orderedFieldsLookup","cleanOrderedFields","newOrderedFields","newColumnLookup","newColDef","applyInitialState","getFirstNonSpannedColumnToRender","lastRowToRender","firstNonSpannedColumnToRender","getTotalHeaderHeight","isHeaderFilteringEnabled","COMPACT_DENSITY_FACTOR","COMFORTABLE_DENSITY_FACTOR","DENSITY_FACTORS","compact","comfortable","standard","gridDensitySelector","gridDensityFactorSelector","gridDimensionsSelector","gridEditRowsStateSelector","gridFilterStateSelector","gridFilterModelSelector","gridQuickFilterValuesSelector","gridVisibleRowsLookupSelector","gridFilteredRowsLookupSelector","gridFilteredDescendantCountLookupSelector","gridExpandedSortedRowEntriesSelector","gridExpandedSortedRowIdsSelector","visibleSortedRowEntries","gridFilteredSortedRowEntriesSelector","gridFilteredSortedRowIdsSelector","filteredSortedRowEntries","gridFilteredSortedTopLevelRowEntriesSelector","visibleSortedRowIds","depthPositionCounter","lastDepth","rowTreeDepth","gridExpandedRowCountSelector","gridFilteredTopLevelRowCountSelector","visibleSortedTopLevelRows","gridFilteredRowCountSelector","gridFilteredDescendantRowCountSelector","topLevelRowCount","gridFilterActiveItemsSelector","gridFilterActiveItemsLookupSelector","activeFilters","res","getDefaultGridFilterModel","getPublicApiRef","hasEval","cleanFilterItem","cleanItem","sanitizeFilterModel","hasSeveralItems","hasItemsWithoutIds","mergeStateWithFilterModel","filteringState","removeDiacritics","normalize","getFilterCallbackFromItem","parser","newFilterItem","applyFilterOnRow","filterItemsApplierId","shouldQuickFilterExcludeHiddenColumns","buildAggregatedFilterApplier","isRowMatchingFilterItems","Function","getHasEval","shouldApplyFilter","resultPerItemId","filterItemCore","JSON","stringify","replaceAll","shouldApplyItem","buildAggregatedFilterItemsApplier","isRowMatchingQuickFilter","appliersPerField","quickFilterValue","outer","buildAggregatedQuickFilterApplier","isNotNull","passFilterLogic","allFilterItemResults","allQuickFilterResults","cleanedFilterItems","filterModelItems","cleanedFilterItemResults","cleanedQuickFilterResults","filterItemPredicate","filterItemResult","quickFilterValuePredicate","quickFilterValueResult","gridFocusStateSelector","gridFocusCellSelector","focusState","gridFocusColumnHeaderSelector","gridFocusColumnHeaderFilterSelector","gridFocusColumnGroupHeaderSelector","gridTabIndexStateSelector","gridTabIndexCellSelector","gridTabIndexColumnHeaderSelector","gridTabIndexColumnHeaderFilterSelector","gridTabIndexColumnGroupHeaderSelector","gridHeaderFilteringStateSelector","headerFiltering","gridHeaderFilteringEnabledSelector","headerFilteringState","gridHeaderFilteringEditFieldSelector","gridHeaderFilteringMenuSelector","gridPaginationModelSelector","gridPaginationRowCountSelector","gridPaginationMetaSelector","gridPageSelector","gridPageSizeSelector","gridPageCountSelector","gridPaginationRowRangeSelector","visibleSortedTopLevelRowEntries","topLevelFirstRowIndex","topLevelLastRowIndex","topLevelFirstRow","topLevelRowsInCurrentPageCount","topLevelRowAdded","gridPaginatedVisibleSortedGridRowEntriesSelector","paginationRange","gridPaginatedVisibleSortedGridRowIdsSelector","defaultPageSize","getPageCount","getDefaultGridPaginationModel","getValidPage","throwIfPageSizeExceedsTheLimit","signatureProp","gridPreferencePanelStateSelector","GridPreferencePanelsValue","gridRowSelectionStateSelector","selectedGridRowsCountSelector","selectedGridRowsSelector","selectedIdsLookupSelector","isMultipleRowSelectionEnabled","gridRowSpanningStateSelector","gridRowSpanningHiddenCellsSelector","gridRowSpanningSpannedCellsSelector","gridRowSpanningHiddenCellsOriginMapSelector","gridRowsStateSelector","gridRowCountSelector","gridRowsLoadingSelector","gridTopLevelRowCountSelector","gridRowsLookupSelector","gridRowsDataRowIdToIdLookupSelector","gridRowTreeSelector","gridRowGroupsToFetchSelector","groupsToFetch","gridRowGroupingNameSelector","gridRowTreeDepthsSelector","gridRowMaximumTreeDepthSelector","nodeCount","gridDataRowIdsSelector","gridAdditionalRowGroupsSelector","additionalRowGroups","gridPinnedRowsSelector","rawPinnedRows","rowEntry","gridPinnedRowsCountSelector","GRID_ROOT_GROUP_ID","GRID_ID_AUTOGENERATED","buildRootGroup","groupingField","isAutoGenerated","childrenFromPath","checkGridRowIdIsValid","detailErrorMessage","getRowIdFromRowModel","createRowsInternalCache","getTopLevelRowCount","getRowsStateFromCache","unProcessedTree","unProcessedTreeDepths","unProcessedDataRowIds","groupingParamsWithHydrateRows","modify","idToActionLookup","isAutogeneratedRow","isAutogeneratedRowNode","getTreeNodeDescendants","parentId","validDescendants","childDescendants","updateCacheWithNewRows","uniqueUpdates","partialUpdates","alreadyAppliedActionsToRemove","partialRow","actionAlreadyAppliedToRow","_action","oldRow","actionTypeWithActionsToRemove","actionType","idsToRemove","calculatePinnedRowsHeight","getMinimalContentHeight","computeRowsUpdates","pinnedRowsCache","prevModel","idLookup","MissingRowIdError","rawValue","cellFocus","cellTabIndex","getRowElement","paramsApi","gridSortingStateSelector","gridSortedRowIdsSelector","sortingState","gridSortedRowEntriesSelector","sortedIds","gridSortModelSelector","gridSortColumnLookupSelector","sanitizeSortModel","mergeStateWithSortModel","buildAggregatedSortingApplier","comparatorList","comparator","getSortComparator","getSortCellParams","parseSortItem","rowList","compareRows","row1","row2","sortCellParams1","sortCellParams2","getNextGridSortDirection","currentIdx","gridNillComparator","v1","v2","gridStringOrNumberComparator","nillResult","gridNumberComparator","gridDateComparator","gridVirtualizationSelector","gridVirtualizationEnabledSelector","gridVirtualizationColumnEnabledSelector","gridVirtualizationRowEnabledSelector","enabledForRows","gridRenderContextSelector","gridRenderContextColumnsSelector","isFirefox","ScrollDirection","EMPTY_SCROLL_POSITION","EMPTY_DETAIL_PANELS","outerSize","hasBottomPinnedRows","panels","setPanels","selectedRowsLookup","gridRootRef","mainRef","scrollerRef","scrollbarVerticalRef","scrollbarHorizontalRef","contentHeight","hasColSpan","fnRef","observer","useResizeObserver","previousContextScrollPosition","previousRowContext","scrollTimeout","frozenContext","scrollCache","verticalBuffer","buffer","bufferForDirection","MINIMUM_COLUMN_WIDTH","createScrollCache","nextRenderContext","context1","context2","didRowsIntervalChange","triggerUpdateRenderContext","newScroll","dx","dy","isScrolling","DOWN","UP","directionForDelta","rowScroll","columnScroll","didCrossThreshold","didChangeDirection","computeRenderContext","inputsSelector","forceUpdateRenderContext","handleScroll","handleWheel","needsHorizontalScrollbar","scrollerStyle","useRunOnce","initialRenderContext","baseRenderContext","isLastSection","isPinnedSection","rowIndexOffset","rowModels","rowIndexes","virtualRowIndex","rowProps","rowIndexInPage","isLastVisibleInSection","tabbableCell","currentRenderContext","computeOffsetLeft","getInfiniteLoadingTriggerElement","lastRowId","onScroll","onWheel","onTouchMove","hiddenCellsOriginMap","at","lastColumn","viewportInnerWidth","viewportInnerHeight","lastRowHeight","lastColumnWidth","inputs","realLeft","getNearestIndexToRender","atStart","rowSpanHiddenCellOrigin","minSpannedRowIndex","getIndexesToRender","firstIndex","lastIndex","minFirstIndex","maxLastIndex","bufferBefore","rowBefore","bufferAfter","rowAfter","lastSize","binarySearch","actualRenderContext","initialFirstColumnToRender","columnBefore","columnAfter","deriveRenderContext","lastMeasuredIndexRelativeToAllRows","allRowsMeasured","lastMeasuredIndexRelativeToCurrentPage","interval","exponentialSearch","sliceStart","sliceEnd","pivot","isBefore","firstPosition","firstIndexPadded","lastIndexPadded","pinnedLeftLength","horizontalBuffer","EMPTY_RENDER_CONTEXT","virtualizationStateInitializer","setVirtualization","unstable_setVirtualization","TimerBasedCleanupTracking","timeouts","cleanupTimeout","object","unsubscribe","unregisterToken","cleanupToken","unregister","reset","FinalizationRegistryBasedCleanupTracking","registry","FinalizationRegistry","GridSignature","ObjectToBeRetainedByReact","createUseGridApiEventHandler","registryContainer","cleanupTokensCounter","objectRetainedByReact","subscription","handlerRef","cleanupTokenRef","enhancedHandler","unstable_resetCleanupTracking","optionsSubscriberOptions","useGridApiOptionHandler","apiMethods","newLogger","added","setAdded","targetElement","wrapHandler","GridPrivateApiContext","applySelector","acceptsApiRef","isOutputSelector","defaultCompare","is","objectShallowCompare","createRefs","equals","didInit","getVisibleRows","condition","didRun","GridArrowUpwardIcon","d","GridArrowDownwardIcon","GridKeyboardArrowRight","GridExpandMoreIcon","GridFilterListIcon","GridFilterAltIcon","GridSearchIcon","GridMenuIcon","GridCheckCircleIcon","GridColumnIcon","GridSeparatorIcon","GridViewHeadlineIcon","GridTableRowsIcon","GridViewStreamIcon","GridTripleDotsVerticalIcon","GridCloseIcon","GridAddIcon","GridRemoveIcon","GridLoadIcon","GridDragIcon","GridSaveAltIcon","GridCheckIcon","GridMoreVertIcon","GridVisibilityOffIcon","GridViewColumnIcon","GridClearIcon","GridDeleteIcon","GridDeleteForeverIcon","isLeaf","GridEditModes","GridCellModes","GridRowModes","GridLogicOperator","GridCellEditStartReasons","GridCellEditStopReasons","GridRowEditStartReasons","GridRowEditStopReasons","code","arguments","encodeURIComponent","charAt","toUpperCase","getUtilityClass","output","utilityClass","debounced","defaultGenerator","generate","configure","generator","createClassNameGenerator","globalStateClasses","active","completed","expanded","focused","focusVisible","required","generateUtilityClass","globalStatePrefix","globalStateClass","generateUtilityClasses","setRef","maybeReactUseId","idOverride","reactId","defaultId","setDefaultId","useGlobalId","UNINITIALIZED","init","initArg","EMPTY","Timeout","currentId","disposeEffect","delay","shouldCellShowRightBorder","showCellVerticalBorderRootProp","isSectionLastCell","shouldCellShowLeftBorder","reselectCreateSelector","memoize","memoizeOptions","maxSize","equalityCheck","WeakMap","checkIsAPIRef","DEFAULT_INSTANCE_ID","stateOrApiRef","instanceIdParam","isAPIRef","va","vb","vc","vd","ve","createSelectorMemoized","cacheKey","cacheArgsInit","cacheArgs","cacheFn","isOverflown","scrollHeight","findParentElementFromClassName","elem","escapeOperandAttributeSelector","operand","getGridColumnHeaderElement","getGridRowElementSelector","getGridRowElement","getGridCellElement","isEventTargetInPortal","nodeType","getFieldFromHeaderElem","colCellEl","findHeaderElementFromField","getFieldsFromGroupHeaderElem","findGroupHeaderElementsFromField","findGridCellElementsFromCol","ariaColIndex","queryRows","rowElement","findGridElement","klass","findPinnedCells","filterFn","parseCellColIndex","findLeftPinnedCellsAfterCol","findRightPinnedCellsBeforeCol","findPinnedHeaders","elements","findLeftPinnedHeadersAfterCol","findRightPinnedHeadersBeforeCol","findGridHeader","findGridCells","isPrintableKey","isNavigationKey","isHideMenuKey","isPasteShortcut","isNumber","isFunction","isObject","localStorageAvailable","setItem","removeItem","err","escapeRegExp","clamp","isDeepEqual","entriesA","entryA","ArrayBuffer","isView","source","flags","valueOf","hasOwnProperty","createRandomNumberGenerator","seed","imul","deepClone","obj","structuredClone","parse","fastObjectShallowCompare","aLength","bLength","ReactPropTypesSecret","emptyFunction","emptyFunctionWithReset","resetWarningCache","module","exports","shim","propName","location","propFullName","secret","getShim","ReactPropTypes","bigint","bool","symbol","any","arrayOf","elementType","instanceOf","objectOf","oneOf","oneOfType","exact","checkPropTypes","PropTypes","NOT_FOUND","ensureIsArray","getPrototypeOf","referenceEqualityCheck","lruMemoize","equalityCheckOrOptions","providedOptions","resultEqualityCheck","prev","next","createCacheKeyComparator","resultsCount","put","getEntries","createSingletonCache","cacheIndex","pop","createLruCache","memoized","matchingEntry","clearCache","resetResultsCount","Ref","WeakRef","deref","weakMapMemoize","fnNode","s","lastResult","cacheNode","arg","objectCache","objectNode","primitiveCache","primitiveNode","terminatedNode","lastResultValue","createSelectorCreator","memoizeOrOptions","memoizeOptionsFromArgs","createSelectorCreatorOptions","createSelectorArgs","recomputations","dependencyRecomputations","directlyPassedOptions","resultFunc","errorMessage","assertIsFunction","combinedOptions","argsMemoize","argsMemoizeOptions","devModeChecks","finalMemoizeOptions","finalArgsMemoizeOptions","dependencies","itemTypes","assertIsArrayOfFunctions","getDependencies","memoizedResultFunc","inputSelectorResults","inputSelectorArgs","collectInputSelectorResults","assign","resetDependencyRecomputations","resetRecomputations","withTypes","createStructuredSelector","inputSelectorsObject","selectorCreator","assertIsObject","inputSelectorKeys","composition"],"sourceRoot":""}