Mercurial > repos > fubar > jbrowse2
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":""}