neue Homepage auf react basis

This commit is contained in:
2026-08-07 21:39:30 +02:00
parent 164bdd19ad
commit ee89442c04
52191 changed files with 1230242 additions and 58 deletions
@@ -0,0 +1,2 @@
import * as React from 'react';
export declare const GridApiContext: React.Context<unknown>;
+2
View File
@@ -0,0 +1,2 @@
import * as React from 'react';
export declare const GridApiContext: React.Context<unknown>;
+11
View File
@@ -0,0 +1,11 @@
"use strict";
'use client';
var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard").default;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.GridApiContext = void 0;
var React = _interopRequireWildcard(require("react"));
const GridApiContext = exports.GridApiContext = /*#__PURE__*/React.createContext(undefined);
if (process.env.NODE_ENV !== "production") GridApiContext.displayName = "GridApiContext";
+5
View File
@@ -0,0 +1,5 @@
'use client';
import * as React from 'react';
export const GridApiContext = /*#__PURE__*/React.createContext(undefined);
if (process.env.NODE_ENV !== "production") GridApiContext.displayName = "GridApiContext";
@@ -0,0 +1,7 @@
import * as React from 'react';
import type { UseGridColumnHeadersProps } from "../hooks/features/columnHeaders/useGridColumnHeaders.mjs";
export interface GridColumnHeadersProps extends React.HTMLAttributes<HTMLDivElement>, UseGridColumnHeadersProps {
ref?: React.Ref<HTMLDivElement>;
}
declare const MemoizedGridColumnHeaders: React.ForwardRefExoticComponent<GridColumnHeadersProps> | React.ForwardRefExoticComponent<Omit<GridColumnHeadersProps, "ref"> & React.RefAttributes<HTMLDivElement>>;
export { MemoizedGridColumnHeaders as GridColumnHeaders };
@@ -0,0 +1,7 @@
import * as React from 'react';
import type { UseGridColumnHeadersProps } from "../hooks/features/columnHeaders/useGridColumnHeaders.js";
export interface GridColumnHeadersProps extends React.HTMLAttributes<HTMLDivElement>, UseGridColumnHeadersProps {
ref?: React.Ref<HTMLDivElement>;
}
declare const MemoizedGridColumnHeaders: React.ForwardRefExoticComponent<GridColumnHeadersProps> | React.ForwardRefExoticComponent<Omit<GridColumnHeadersProps, "ref"> & React.RefAttributes<HTMLDivElement>>;
export { MemoizedGridColumnHeaders as GridColumnHeaders };
+94
View File
@@ -0,0 +1,94 @@
"use strict";
'use client';
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard").default;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.GridColumnHeaders = void 0;
var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
var _objectWithoutPropertiesLoose2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutPropertiesLoose"));
var React = _interopRequireWildcard(require("react"));
var _propTypes = _interopRequireDefault(require("prop-types"));
var _fastMemo = require("@mui/x-internals/fastMemo");
var _forwardRef = require("@mui/x-internals/forwardRef");
var _useGridColumnHeaders = require("../hooks/features/columnHeaders/useGridColumnHeaders");
var _GridBaseColumnHeaders = require("./columnHeaders/GridBaseColumnHeaders");
var _jsxRuntime = require("react/jsx-runtime");
const _excluded = ["className", "visibleColumns", "sortColumnLookup", "filterColumnLookup", "columnHeaderTabIndexState", "columnGroupHeaderTabIndexState", "columnHeaderFocus", "columnGroupHeaderFocus", "headerGroupingMaxDepth", "columnMenuState", "columnVisibility", "columnGroupsHeaderStructure", "hasOtherElementInTabSequence"];
const GridColumnHeaders = (0, _forwardRef.forwardRef)(function GridColumnHeaders(props, ref) {
const {
visibleColumns,
sortColumnLookup,
filterColumnLookup,
columnHeaderTabIndexState,
columnGroupHeaderTabIndexState,
columnHeaderFocus,
columnGroupHeaderFocus,
headerGroupingMaxDepth,
columnMenuState,
columnVisibility,
columnGroupsHeaderStructure,
hasOtherElementInTabSequence
} = props,
other = (0, _objectWithoutPropertiesLoose2.default)(props, _excluded);
const {
getInnerProps,
getColumnHeadersRow,
getColumnGroupHeadersRows
} = (0, _useGridColumnHeaders.useGridColumnHeaders)({
visibleColumns,
sortColumnLookup,
filterColumnLookup,
columnHeaderTabIndexState,
columnGroupHeaderTabIndexState,
columnHeaderFocus,
columnGroupHeaderFocus,
headerGroupingMaxDepth,
columnMenuState,
columnVisibility,
columnGroupsHeaderStructure,
hasOtherElementInTabSequence
});
return /*#__PURE__*/(0, _jsxRuntime.jsxs)(_GridBaseColumnHeaders.GridBaseColumnHeaders, (0, _extends2.default)({}, other, getInnerProps(), {
ref: ref,
children: [getColumnGroupHeadersRows(), getColumnHeadersRow()]
}));
});
if (process.env.NODE_ENV !== "production") GridColumnHeaders.displayName = "GridColumnHeaders";
process.env.NODE_ENV !== "production" ? GridColumnHeaders.propTypes /* remove-proptypes */ = {
// ----------------------------- Warning --------------------------------
// | These PropTypes are generated from the TypeScript type definitions |
// | To update them edit the TypeScript types and run "pnpm proptypes" |
// ----------------------------------------------------------------------
columnGroupHeaderFocus: _propTypes.default.shape({
depth: _propTypes.default.number.isRequired,
field: _propTypes.default.string.isRequired
}),
columnGroupHeaderTabIndexState: _propTypes.default.shape({
depth: _propTypes.default.number.isRequired,
field: _propTypes.default.string.isRequired
}),
columnGroupsHeaderStructure: _propTypes.default.arrayOf(_propTypes.default.arrayOf(_propTypes.default.shape({
columnFields: _propTypes.default.arrayOf(_propTypes.default.string).isRequired,
groupId: _propTypes.default.string
}))).isRequired,
columnHeaderFocus: _propTypes.default.shape({
field: _propTypes.default.string.isRequired
}),
columnHeaderTabIndexState: _propTypes.default.shape({
field: _propTypes.default.string.isRequired
}),
columnMenuState: _propTypes.default.shape({
field: _propTypes.default.string,
open: _propTypes.default.bool.isRequired
}).isRequired,
columnVisibility: _propTypes.default.object.isRequired,
filterColumnLookup: _propTypes.default.object.isRequired,
hasOtherElementInTabSequence: _propTypes.default.bool.isRequired,
headerGroupingMaxDepth: _propTypes.default.number.isRequired,
sortColumnLookup: _propTypes.default.object.isRequired,
visibleColumns: _propTypes.default.arrayOf(_propTypes.default.object).isRequired
} : void 0;
const MemoizedGridColumnHeaders = exports.GridColumnHeaders = (0, _fastMemo.fastMemo)(GridColumnHeaders);
+88
View File
@@ -0,0 +1,88 @@
'use client';
import _extends from "@babel/runtime/helpers/esm/extends";
import _objectWithoutPropertiesLoose from "@babel/runtime/helpers/esm/objectWithoutPropertiesLoose";
const _excluded = ["className", "visibleColumns", "sortColumnLookup", "filterColumnLookup", "columnHeaderTabIndexState", "columnGroupHeaderTabIndexState", "columnHeaderFocus", "columnGroupHeaderFocus", "headerGroupingMaxDepth", "columnMenuState", "columnVisibility", "columnGroupsHeaderStructure", "hasOtherElementInTabSequence"];
import * as React from 'react';
import PropTypes from 'prop-types';
import { fastMemo } from '@mui/x-internals/fastMemo';
import { forwardRef } from '@mui/x-internals/forwardRef';
import { useGridColumnHeaders } from "../hooks/features/columnHeaders/useGridColumnHeaders.mjs";
import { GridBaseColumnHeaders } from "./columnHeaders/GridBaseColumnHeaders.mjs";
import { jsxs as _jsxs } from "react/jsx-runtime";
const GridColumnHeaders = forwardRef(function GridColumnHeaders(props, ref) {
const {
visibleColumns,
sortColumnLookup,
filterColumnLookup,
columnHeaderTabIndexState,
columnGroupHeaderTabIndexState,
columnHeaderFocus,
columnGroupHeaderFocus,
headerGroupingMaxDepth,
columnMenuState,
columnVisibility,
columnGroupsHeaderStructure,
hasOtherElementInTabSequence
} = props,
other = _objectWithoutPropertiesLoose(props, _excluded);
const {
getInnerProps,
getColumnHeadersRow,
getColumnGroupHeadersRows
} = useGridColumnHeaders({
visibleColumns,
sortColumnLookup,
filterColumnLookup,
columnHeaderTabIndexState,
columnGroupHeaderTabIndexState,
columnHeaderFocus,
columnGroupHeaderFocus,
headerGroupingMaxDepth,
columnMenuState,
columnVisibility,
columnGroupsHeaderStructure,
hasOtherElementInTabSequence
});
return /*#__PURE__*/_jsxs(GridBaseColumnHeaders, _extends({}, other, getInnerProps(), {
ref: ref,
children: [getColumnGroupHeadersRows(), getColumnHeadersRow()]
}));
});
if (process.env.NODE_ENV !== "production") GridColumnHeaders.displayName = "GridColumnHeaders";
process.env.NODE_ENV !== "production" ? GridColumnHeaders.propTypes /* remove-proptypes */ = {
// ----------------------------- Warning --------------------------------
// | These PropTypes are generated from the TypeScript type definitions |
// | To update them edit the TypeScript types and run "pnpm proptypes" |
// ----------------------------------------------------------------------
columnGroupHeaderFocus: PropTypes.shape({
depth: PropTypes.number.isRequired,
field: PropTypes.string.isRequired
}),
columnGroupHeaderTabIndexState: PropTypes.shape({
depth: PropTypes.number.isRequired,
field: PropTypes.string.isRequired
}),
columnGroupsHeaderStructure: PropTypes.arrayOf(PropTypes.arrayOf(PropTypes.shape({
columnFields: PropTypes.arrayOf(PropTypes.string).isRequired,
groupId: PropTypes.string
}))).isRequired,
columnHeaderFocus: PropTypes.shape({
field: PropTypes.string.isRequired
}),
columnHeaderTabIndexState: PropTypes.shape({
field: PropTypes.string.isRequired
}),
columnMenuState: PropTypes.shape({
field: PropTypes.string,
open: PropTypes.bool.isRequired
}).isRequired,
columnVisibility: PropTypes.object.isRequired,
filterColumnLookup: PropTypes.object.isRequired,
hasOtherElementInTabSequence: PropTypes.bool.isRequired,
headerGroupingMaxDepth: PropTypes.number.isRequired,
sortColumnLookup: PropTypes.object.isRequired,
visibleColumns: PropTypes.arrayOf(PropTypes.object).isRequired
} : void 0;
const MemoizedGridColumnHeaders = fastMemo(GridColumnHeaders);
export { MemoizedGridColumnHeaders as GridColumnHeaders };
@@ -0,0 +1,16 @@
import * as React from 'react';
import type { GridSlotProps } from "../models/index.mjs";
import type { GridSortDirection } from "../models/gridSortModel.mjs";
export type GridColumnSortButtonProps = GridSlotProps['baseIconButton'] & {
field: string;
direction: GridSortDirection;
index?: number;
sortingOrder: readonly GridSortDirection[];
disabled?: boolean;
onClick?: (event: React.MouseEvent<HTMLButtonElement>) => void;
};
declare function GridColumnSortButton(props: GridColumnSortButtonProps): React.JSX.Element | null;
declare namespace GridColumnSortButton {
var propTypes: any;
}
export { GridColumnSortButton };
@@ -0,0 +1,16 @@
import * as React from 'react';
import type { GridSlotProps } from "../models/index.js";
import type { GridSortDirection } from "../models/gridSortModel.js";
export type GridColumnSortButtonProps = GridSlotProps['baseIconButton'] & {
field: string;
direction: GridSortDirection;
index?: number;
sortingOrder: readonly GridSortDirection[];
disabled?: boolean;
onClick?: (event: React.MouseEvent<HTMLButtonElement>) => void;
};
declare function GridColumnSortButton(props: GridColumnSortButtonProps): React.JSX.Element | null;
declare namespace GridColumnSortButton {
var propTypes: any;
}
export { GridColumnSortButton };
@@ -0,0 +1,112 @@
"use strict";
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard").default;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.GridColumnSortButton = GridColumnSortButton;
var _objectWithoutPropertiesLoose2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutPropertiesLoose"));
var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
var React = _interopRequireWildcard(require("react"));
var _propTypes = _interopRequireDefault(require("prop-types"));
var _composeClasses = _interopRequireDefault(require("@mui/utils/composeClasses"));
var _styles = require("@mui/material/styles");
var _clsx = _interopRequireDefault(require("clsx"));
var _useGridApiContext = require("../hooks/utils/useGridApiContext");
var _gridClasses = require("../constants/gridClasses");
var _useGridRootProps = require("../hooks/utils/useGridRootProps");
var _cssVariables = require("../constants/cssVariables");
var _assert = require("../utils/assert");
var _jsxRuntime = require("react/jsx-runtime");
const _excluded = ["direction", "index", "sortingOrder", "disabled", "className"];
const useUtilityClasses = ownerState => {
const {
classes
} = ownerState;
const slots = {
root: ['sortButton'],
icon: ['sortIcon']
};
return (0, _composeClasses.default)(slots, _gridClasses.getDataGridUtilityClass, classes);
};
const GridColumnSortButtonRoot = (0, _styles.styled)(_assert.NotRendered, {
name: 'MuiDataGrid',
slot: 'SortButton'
})({
transition: _cssVariables.vars.transition(['opacity'], {
duration: _cssVariables.vars.transitions.duration.short,
easing: _cssVariables.vars.transitions.easing.easeInOut
})
});
function getIcon(icons, direction, className, sortingOrder) {
let Icon;
const iconProps = {};
if (direction === 'asc') {
Icon = icons.columnSortedAscendingIcon;
} else if (direction === 'desc') {
Icon = icons.columnSortedDescendingIcon;
} else {
Icon = icons.columnUnsortedIcon;
iconProps.sortingOrder = sortingOrder;
}
return Icon ? /*#__PURE__*/(0, _jsxRuntime.jsx)(Icon, (0, _extends2.default)({
fontSize: "small",
className: className
}, iconProps)) : null;
}
function GridColumnSortButton(props) {
const {
direction,
index,
sortingOrder,
disabled,
className
} = props,
other = (0, _objectWithoutPropertiesLoose2.default)(props, _excluded);
const apiRef = (0, _useGridApiContext.useGridApiContext)();
const rootProps = (0, _useGridRootProps.useGridRootProps)();
const ownerState = (0, _extends2.default)({}, props, {
classes: rootProps.classes
});
const classes = useUtilityClasses(ownerState);
const iconElement = getIcon(rootProps.slots, direction, classes.icon, sortingOrder);
if (!iconElement) {
return null;
}
const iconButton = /*#__PURE__*/(0, _jsxRuntime.jsx)(GridColumnSortButtonRoot, (0, _extends2.default)({
as: rootProps.slots.baseIconButton,
ownerState: ownerState,
"aria-label": apiRef.current.getLocaleText('columnHeaderSortIconLabel'),
size: "small",
disabled: disabled,
className: (0, _clsx.default)(classes.root, className)
}, rootProps.slotProps?.baseIconButton, other, {
children: iconElement
}));
return /*#__PURE__*/(0, _jsxRuntime.jsx)(rootProps.slots.baseTooltip, (0, _extends2.default)({
title: apiRef.current.getLocaleText('columnHeaderSortIconLabel'),
enterDelay: 1000
}, rootProps.slotProps?.baseTooltip, {
children: /*#__PURE__*/(0, _jsxRuntime.jsxs)("span", {
children: [index != null && /*#__PURE__*/(0, _jsxRuntime.jsx)(rootProps.slots.baseBadge, {
badgeContent: index,
color: "default",
overlap: "circular",
children: iconButton
}), index == null && iconButton]
})
}));
}
process.env.NODE_ENV !== "production" ? GridColumnSortButton.propTypes = {
// ----------------------------- Warning --------------------------------
// | These PropTypes are generated from the TypeScript type definitions |
// | To update them edit the TypeScript types and run "pnpm proptypes" |
// ----------------------------------------------------------------------
direction: _propTypes.default.oneOf(['asc', 'desc']),
disabled: _propTypes.default.bool,
field: _propTypes.default.string.isRequired,
index: _propTypes.default.number,
onClick: _propTypes.default.func,
sortingOrder: _propTypes.default.arrayOf(_propTypes.default.oneOf(['asc', 'desc'])).isRequired
} : void 0;
@@ -0,0 +1,105 @@
import _objectWithoutPropertiesLoose from "@babel/runtime/helpers/esm/objectWithoutPropertiesLoose";
import _extends from "@babel/runtime/helpers/esm/extends";
const _excluded = ["direction", "index", "sortingOrder", "disabled", "className"];
import * as React from 'react';
import PropTypes from 'prop-types';
import composeClasses from '@mui/utils/composeClasses';
import { styled } from '@mui/material/styles';
import clsx from 'clsx';
import { useGridApiContext } from "../hooks/utils/useGridApiContext.mjs";
import { getDataGridUtilityClass } from "../constants/gridClasses.mjs";
import { useGridRootProps } from "../hooks/utils/useGridRootProps.mjs";
import { vars } from "../constants/cssVariables.mjs";
import { NotRendered } from "../utils/assert.mjs";
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
const useUtilityClasses = ownerState => {
const {
classes
} = ownerState;
const slots = {
root: ['sortButton'],
icon: ['sortIcon']
};
return composeClasses(slots, getDataGridUtilityClass, classes);
};
const GridColumnSortButtonRoot = styled(NotRendered, {
name: 'MuiDataGrid',
slot: 'SortButton'
})({
transition: vars.transition(['opacity'], {
duration: vars.transitions.duration.short,
easing: vars.transitions.easing.easeInOut
})
});
function getIcon(icons, direction, className, sortingOrder) {
let Icon;
const iconProps = {};
if (direction === 'asc') {
Icon = icons.columnSortedAscendingIcon;
} else if (direction === 'desc') {
Icon = icons.columnSortedDescendingIcon;
} else {
Icon = icons.columnUnsortedIcon;
iconProps.sortingOrder = sortingOrder;
}
return Icon ? /*#__PURE__*/_jsx(Icon, _extends({
fontSize: "small",
className: className
}, iconProps)) : null;
}
function GridColumnSortButton(props) {
const {
direction,
index,
sortingOrder,
disabled,
className
} = props,
other = _objectWithoutPropertiesLoose(props, _excluded);
const apiRef = useGridApiContext();
const rootProps = useGridRootProps();
const ownerState = _extends({}, props, {
classes: rootProps.classes
});
const classes = useUtilityClasses(ownerState);
const iconElement = getIcon(rootProps.slots, direction, classes.icon, sortingOrder);
if (!iconElement) {
return null;
}
const iconButton = /*#__PURE__*/_jsx(GridColumnSortButtonRoot, _extends({
as: rootProps.slots.baseIconButton,
ownerState: ownerState,
"aria-label": apiRef.current.getLocaleText('columnHeaderSortIconLabel'),
size: "small",
disabled: disabled,
className: clsx(classes.root, className)
}, rootProps.slotProps?.baseIconButton, other, {
children: iconElement
}));
return /*#__PURE__*/_jsx(rootProps.slots.baseTooltip, _extends({
title: apiRef.current.getLocaleText('columnHeaderSortIconLabel'),
enterDelay: 1000
}, rootProps.slotProps?.baseTooltip, {
children: /*#__PURE__*/_jsxs("span", {
children: [index != null && /*#__PURE__*/_jsx(rootProps.slots.baseBadge, {
badgeContent: index,
color: "default",
overlap: "circular",
children: iconButton
}), index == null && iconButton]
})
}));
}
process.env.NODE_ENV !== "production" ? GridColumnSortButton.propTypes = {
// ----------------------------- Warning --------------------------------
// | These PropTypes are generated from the TypeScript type definitions |
// | To update them edit the TypeScript types and run "pnpm proptypes" |
// ----------------------------------------------------------------------
direction: PropTypes.oneOf(['asc', 'desc']),
disabled: PropTypes.bool,
field: PropTypes.string.isRequired,
index: PropTypes.number,
onClick: PropTypes.func,
sortingOrder: PropTypes.arrayOf(PropTypes.oneOf(['asc', 'desc'])).isRequired
} : void 0;
export { GridColumnSortButton };
@@ -0,0 +1,11 @@
import * as React from 'react';
import type { GridBaseIconProps } from "../models/gridSlotsComponentsProps.mjs";
import type { GridSortDirection } from "../models/gridSortModel.mjs";
export interface GridColumnUnsortedIconProps extends GridBaseIconProps {
sortingOrder: GridSortDirection[];
}
declare function GridColumnUnsortedIcon(props: GridColumnUnsortedIconProps): React.JSX.Element | null;
declare namespace GridColumnUnsortedIcon {
var propTypes: any;
}
export { GridColumnUnsortedIcon };
@@ -0,0 +1,11 @@
import * as React from 'react';
import type { GridBaseIconProps } from "../models/gridSlotsComponentsProps.js";
import type { GridSortDirection } from "../models/gridSortModel.js";
export interface GridColumnUnsortedIconProps extends GridBaseIconProps {
sortingOrder: GridSortDirection[];
}
declare function GridColumnUnsortedIcon(props: GridColumnUnsortedIconProps): React.JSX.Element | null;
declare namespace GridColumnUnsortedIcon {
var propTypes: any;
}
export { GridColumnUnsortedIcon };
@@ -0,0 +1,39 @@
"use strict";
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard").default;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.GridColumnUnsortedIcon = GridColumnUnsortedIcon;
var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
var _objectWithoutPropertiesLoose2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutPropertiesLoose"));
var React = _interopRequireWildcard(require("react"));
var _propTypes = _interopRequireDefault(require("prop-types"));
var _useGridRootProps = require("../hooks/utils/useGridRootProps");
var _jsxRuntime = require("react/jsx-runtime");
const _excluded = ["sortingOrder"];
function GridColumnUnsortedIcon(props) {
const {
sortingOrder
} = props,
other = (0, _objectWithoutPropertiesLoose2.default)(props, _excluded);
const {
slots
} = (0, _useGridRootProps.useGridRootProps)();
const [nextSortDirection] = sortingOrder;
const Icon = nextSortDirection === 'asc' ? slots.columnSortedAscendingIcon : slots.columnSortedDescendingIcon;
return Icon ? /*#__PURE__*/(0, _jsxRuntime.jsx)(Icon, (0, _extends2.default)({}, other)) : null;
}
process.env.NODE_ENV !== "production" ? GridColumnUnsortedIcon.propTypes /* remove-proptypes */ = {
// ----------------------------- Warning --------------------------------
// | These PropTypes are generated from the TypeScript type definitions |
// | To update them edit the TypeScript types and run "pnpm proptypes" |
// ----------------------------------------------------------------------
className: _propTypes.default.string,
color: _propTypes.default.string,
fontSize: _propTypes.default.oneOf(['inherit', 'large', 'medium', 'small']),
sortingOrder: _propTypes.default.arrayOf(_propTypes.default.oneOf(['asc', 'desc'])).isRequired,
style: _propTypes.default.object,
titleAccess: _propTypes.default.string
} : void 0;
@@ -0,0 +1,32 @@
import _extends from "@babel/runtime/helpers/esm/extends";
import _objectWithoutPropertiesLoose from "@babel/runtime/helpers/esm/objectWithoutPropertiesLoose";
const _excluded = ["sortingOrder"];
import * as React from 'react';
import PropTypes from 'prop-types';
import { useGridRootProps } from "../hooks/utils/useGridRootProps.mjs";
import { jsx as _jsx } from "react/jsx-runtime";
function GridColumnUnsortedIcon(props) {
const {
sortingOrder
} = props,
other = _objectWithoutPropertiesLoose(props, _excluded);
const {
slots
} = useGridRootProps();
const [nextSortDirection] = sortingOrder;
const Icon = nextSortDirection === 'asc' ? slots.columnSortedAscendingIcon : slots.columnSortedDescendingIcon;
return Icon ? /*#__PURE__*/_jsx(Icon, _extends({}, other)) : null;
}
process.env.NODE_ENV !== "production" ? GridColumnUnsortedIcon.propTypes /* remove-proptypes */ = {
// ----------------------------- Warning --------------------------------
// | These PropTypes are generated from the TypeScript type definitions |
// | To update them edit the TypeScript types and run "pnpm proptypes" |
// ----------------------------------------------------------------------
className: PropTypes.string,
color: PropTypes.string,
fontSize: PropTypes.oneOf(['inherit', 'large', 'medium', 'small']),
sortingOrder: PropTypes.arrayOf(PropTypes.oneOf(['asc', 'desc'])).isRequired,
style: PropTypes.object,
titleAccess: PropTypes.string
} : void 0;
export { GridColumnUnsortedIcon };
@@ -0,0 +1,2 @@
import * as React from 'react';
export declare const GridConfigurationContext: React.Context<unknown>;
@@ -0,0 +1,2 @@
import * as React from 'react';
export declare const GridConfigurationContext: React.Context<unknown>;
@@ -0,0 +1,11 @@
"use strict";
'use client';
var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard").default;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.GridConfigurationContext = void 0;
var React = _interopRequireWildcard(require("react"));
const GridConfigurationContext = exports.GridConfigurationContext = /*#__PURE__*/React.createContext(undefined);
if (process.env.NODE_ENV !== "production") GridConfigurationContext.displayName = "GridConfigurationContext";
@@ -0,0 +1,5 @@
'use client';
import * as React from 'react';
export const GridConfigurationContext = /*#__PURE__*/React.createContext(undefined);
if (process.env.NODE_ENV !== "production") GridConfigurationContext.displayName = "GridConfigurationContext";
@@ -0,0 +1,2 @@
export interface GridDetailPanelsProps {}
export declare function GridDetailPanels(_: GridDetailPanelsProps): null;
@@ -0,0 +1,2 @@
export interface GridDetailPanelsProps {}
export declare function GridDetailPanels(_: GridDetailPanelsProps): null;
+9
View File
@@ -0,0 +1,9 @@
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.GridDetailPanels = GridDetailPanels;
function GridDetailPanels(_) {
return null;
}
@@ -0,0 +1,3 @@
export function GridDetailPanels(_) {
return null;
}
+5
View File
@@ -0,0 +1,5 @@
import type { GridFooterContainerProps } from "./containers/GridFooterContainer.mjs";
declare const GridFooter: import("react").ForwardRefExoticComponent<GridFooterContainerProps> | import("react").ForwardRefExoticComponent<import("react").HTMLAttributes<HTMLDivElement> & {
sx?: import("@mui/system").SxProps<import("@mui/system").Theme>;
} & import("react").RefAttributes<HTMLDivElement>>;
export { GridFooter };
+5
View File
@@ -0,0 +1,5 @@
import type { GridFooterContainerProps } from "./containers/GridFooterContainer.js";
declare const GridFooter: import("react").ForwardRefExoticComponent<GridFooterContainerProps> | import("react").ForwardRefExoticComponent<import("react").HTMLAttributes<HTMLDivElement> & {
sx?: import("@mui/system").SxProps<import("@mui/system").Theme>;
} & import("react").RefAttributes<HTMLDivElement>>;
export { GridFooter };
+47
View File
@@ -0,0 +1,47 @@
"use strict";
'use client';
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.GridFooter = void 0;
var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
var _propTypes = _interopRequireDefault(require("prop-types"));
var _forwardRef = require("@mui/x-internals/forwardRef");
var _useGridSelector = require("../hooks/utils/useGridSelector");
var _gridRowsSelector = require("../hooks/features/rows/gridRowsSelector");
var _gridRowSelectionSelector = require("../hooks/features/rowSelection/gridRowSelectionSelector");
var _gridFilterSelector = require("../hooks/features/filter/gridFilterSelector");
var _useGridApiContext = require("../hooks/utils/useGridApiContext");
var _GridSelectedRowCount = require("./GridSelectedRowCount");
var _GridFooterContainer = require("./containers/GridFooterContainer");
var _useGridRootProps = require("../hooks/utils/useGridRootProps");
var _jsxRuntime = require("react/jsx-runtime");
const GridFooter = exports.GridFooter = (0, _forwardRef.forwardRef)(function GridFooter(props, ref) {
const apiRef = (0, _useGridApiContext.useGridApiContext)();
const rootProps = (0, _useGridRootProps.useGridRootProps)();
const totalTopLevelRowCount = (0, _useGridSelector.useGridSelector)(apiRef, _gridRowsSelector.gridTopLevelRowCountSelector);
const selectedRowCount = (0, _useGridSelector.useGridSelector)(apiRef, _gridRowSelectionSelector.gridRowSelectionCountSelector);
const visibleTopLevelRowCount = (0, _useGridSelector.useGridSelector)(apiRef, _gridFilterSelector.gridFilteredTopLevelRowCountSelector);
const selectedRowCountElement = !rootProps.hideFooterSelectedRowCount && selectedRowCount > 0 ? /*#__PURE__*/(0, _jsxRuntime.jsx)(_GridSelectedRowCount.GridSelectedRowCount, {
selectedRowCount: selectedRowCount
}) : /*#__PURE__*/(0, _jsxRuntime.jsx)("div", {});
const rowCountElement = !rootProps.hideFooterRowCount && !rootProps.pagination ? /*#__PURE__*/(0, _jsxRuntime.jsx)(rootProps.slots.footerRowCount, (0, _extends2.default)({}, rootProps.slotProps?.footerRowCount, {
rowCount: totalTopLevelRowCount,
visibleRowCount: visibleTopLevelRowCount
})) : null;
const paginationElement = rootProps.pagination && !rootProps.hideFooterPagination && rootProps.slots.pagination && /*#__PURE__*/(0, _jsxRuntime.jsx)(rootProps.slots.pagination, (0, _extends2.default)({}, rootProps.slotProps?.pagination));
return /*#__PURE__*/(0, _jsxRuntime.jsxs)(_GridFooterContainer.GridFooterContainer, (0, _extends2.default)({}, props, {
ref: ref,
children: [selectedRowCountElement, rowCountElement, paginationElement]
}));
});
if (process.env.NODE_ENV !== "production") GridFooter.displayName = "GridFooter";
process.env.NODE_ENV !== "production" ? GridFooter.propTypes /* remove-proptypes */ = {
// ----------------------------- Warning --------------------------------
// | These PropTypes are generated from the TypeScript type definitions |
// | To update them edit the TypeScript types and run "pnpm proptypes" |
// ----------------------------------------------------------------------
sx: _propTypes.default.oneOfType([_propTypes.default.arrayOf(_propTypes.default.oneOfType([_propTypes.default.func, _propTypes.default.object, _propTypes.default.bool])), _propTypes.default.func, _propTypes.default.object])
} : void 0;
+42
View File
@@ -0,0 +1,42 @@
'use client';
import _extends from "@babel/runtime/helpers/esm/extends";
import PropTypes from 'prop-types';
import { forwardRef } from '@mui/x-internals/forwardRef';
import { useGridSelector } from "../hooks/utils/useGridSelector.mjs";
import { gridTopLevelRowCountSelector } from "../hooks/features/rows/gridRowsSelector.mjs";
import { gridRowSelectionCountSelector } from "../hooks/features/rowSelection/gridRowSelectionSelector.mjs";
import { gridFilteredTopLevelRowCountSelector } from "../hooks/features/filter/gridFilterSelector.mjs";
import { useGridApiContext } from "../hooks/utils/useGridApiContext.mjs";
import { GridSelectedRowCount } from "./GridSelectedRowCount.mjs";
import { GridFooterContainer } from "./containers/GridFooterContainer.mjs";
import { useGridRootProps } from "../hooks/utils/useGridRootProps.mjs";
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
const GridFooter = forwardRef(function GridFooter(props, ref) {
const apiRef = useGridApiContext();
const rootProps = useGridRootProps();
const totalTopLevelRowCount = useGridSelector(apiRef, gridTopLevelRowCountSelector);
const selectedRowCount = useGridSelector(apiRef, gridRowSelectionCountSelector);
const visibleTopLevelRowCount = useGridSelector(apiRef, gridFilteredTopLevelRowCountSelector);
const selectedRowCountElement = !rootProps.hideFooterSelectedRowCount && selectedRowCount > 0 ? /*#__PURE__*/_jsx(GridSelectedRowCount, {
selectedRowCount: selectedRowCount
}) : /*#__PURE__*/_jsx("div", {});
const rowCountElement = !rootProps.hideFooterRowCount && !rootProps.pagination ? /*#__PURE__*/_jsx(rootProps.slots.footerRowCount, _extends({}, rootProps.slotProps?.footerRowCount, {
rowCount: totalTopLevelRowCount,
visibleRowCount: visibleTopLevelRowCount
})) : null;
const paginationElement = rootProps.pagination && !rootProps.hideFooterPagination && rootProps.slots.pagination && /*#__PURE__*/_jsx(rootProps.slots.pagination, _extends({}, rootProps.slotProps?.pagination));
return /*#__PURE__*/_jsxs(GridFooterContainer, _extends({}, props, {
ref: ref,
children: [selectedRowCountElement, rowCountElement, paginationElement]
}));
});
if (process.env.NODE_ENV !== "production") GridFooter.displayName = "GridFooter";
process.env.NODE_ENV !== "production" ? GridFooter.propTypes /* remove-proptypes */ = {
// ----------------------------- Warning --------------------------------
// | These PropTypes are generated from the TypeScript type definitions |
// | To update them edit the TypeScript types and run "pnpm proptypes" |
// ----------------------------------------------------------------------
sx: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.func, PropTypes.object, PropTypes.bool])), PropTypes.func, PropTypes.object])
} : void 0;
export { GridFooter };
+2
View File
@@ -0,0 +1,2 @@
import * as React from 'react';
export declare function GridHeader(): React.JSX.Element;
+2
View File
@@ -0,0 +1,2 @@
import * as React from 'react';
export declare function GridHeader(): React.JSX.Element;
+19
View File
@@ -0,0 +1,19 @@
"use strict";
var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard").default;
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.GridHeader = GridHeader;
var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
var React = _interopRequireWildcard(require("react"));
var _useGridRootProps = require("../hooks/utils/useGridRootProps");
var _GridPreferencesPanel = require("./panel/GridPreferencesPanel");
var _jsxRuntime = require("react/jsx-runtime");
function GridHeader() {
const rootProps = (0, _useGridRootProps.useGridRootProps)();
return /*#__PURE__*/(0, _jsxRuntime.jsxs)(React.Fragment, {
children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_GridPreferencesPanel.GridPreferencesPanel, {}), rootProps.showToolbar && /*#__PURE__*/(0, _jsxRuntime.jsx)(rootProps.slots.toolbar, (0, _extends2.default)({}, rootProps.slotProps?.toolbar))]
});
}
+11
View File
@@ -0,0 +1,11 @@
import _extends from "@babel/runtime/helpers/esm/extends";
import * as React from 'react';
import { useGridRootProps } from "../hooks/utils/useGridRootProps.mjs";
import { GridPreferencesPanel } from "./panel/GridPreferencesPanel.mjs";
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
export function GridHeader() {
const rootProps = useGridRootProps();
return /*#__PURE__*/_jsxs(React.Fragment, {
children: [/*#__PURE__*/_jsx(GridPreferencesPanel, {}), rootProps.showToolbar && /*#__PURE__*/_jsx(rootProps.slots.toolbar, _extends({}, rootProps.slotProps?.toolbar))]
});
}
+3
View File
@@ -0,0 +1,3 @@
declare function GridHeaders(): import("react").JSX.Element;
declare const MemoizedGridHeaders: typeof GridHeaders;
export { MemoizedGridHeaders as GridHeaders };
+3
View File
@@ -0,0 +1,3 @@
declare function GridHeaders(): import("react").JSX.Element;
declare const MemoizedGridHeaders: typeof GridHeaders;
export { MemoizedGridHeaders as GridHeaders };
+54
View File
@@ -0,0 +1,54 @@
"use strict";
'use client';
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.GridHeaders = void 0;
var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
var _fastMemo = require("@mui/x-internals/fastMemo");
var _useGridPrivateApiContext = require("../hooks/utils/useGridPrivateApiContext");
var _useGridSelector = require("../hooks/utils/useGridSelector");
var _useGridRootProps = require("../hooks/utils/useGridRootProps");
var _gridColumnsSelector = require("../hooks/features/columns/gridColumnsSelector");
var _gridFilterSelector = require("../hooks/features/filter/gridFilterSelector");
var _gridSortingSelector = require("../hooks/features/sorting/gridSortingSelector");
var _gridFocusStateSelector = require("../hooks/features/focus/gridFocusStateSelector");
var _gridColumnGroupsSelector = require("../hooks/features/columnGrouping/gridColumnGroupsSelector");
var _columnMenuSelector = require("../hooks/features/columnMenu/columnMenuSelector");
var _jsxRuntime = require("react/jsx-runtime");
function GridHeaders() {
const apiRef = (0, _useGridPrivateApiContext.useGridPrivateApiContext)();
const rootProps = (0, _useGridRootProps.useGridRootProps)();
const visibleColumns = (0, _useGridSelector.useGridSelector)(apiRef, _gridColumnsSelector.gridVisibleColumnDefinitionsSelector);
const filterColumnLookup = (0, _useGridSelector.useGridSelector)(apiRef, _gridFilterSelector.gridFilterActiveItemsLookupSelector);
const sortColumnLookup = (0, _useGridSelector.useGridSelector)(apiRef, _gridSortingSelector.gridSortColumnLookupSelector);
const columnHeaderTabIndexState = (0, _useGridSelector.useGridSelector)(apiRef, _gridFocusStateSelector.gridTabIndexColumnHeaderSelector);
const hasNoCellTabIndexState = (0, _useGridSelector.useGridSelector)(apiRef, () => (0, _gridFocusStateSelector.gridTabIndexCellSelector)(apiRef) === null);
const columnGroupHeaderTabIndexState = (0, _useGridSelector.useGridSelector)(apiRef, _gridFocusStateSelector.gridTabIndexColumnGroupHeaderSelector);
const columnHeaderFocus = (0, _useGridSelector.useGridSelector)(apiRef, _gridFocusStateSelector.gridFocusColumnHeaderSelector);
const columnGroupHeaderFocus = (0, _useGridSelector.useGridSelector)(apiRef, _gridFocusStateSelector.gridFocusColumnGroupHeaderSelector);
const headerGroupingMaxDepth = (0, _useGridSelector.useGridSelector)(apiRef, _gridColumnGroupsSelector.gridColumnGroupsHeaderMaxDepthSelector);
const columnMenuState = (0, _useGridSelector.useGridSelector)(apiRef, _columnMenuSelector.gridColumnMenuSelector);
const columnVisibility = (0, _useGridSelector.useGridSelector)(apiRef, _gridColumnsSelector.gridColumnVisibilityModelSelector);
const columnGroupsHeaderStructure = (0, _useGridSelector.useGridSelector)(apiRef, _gridColumnGroupsSelector.gridColumnGroupsHeaderStructureSelector);
const hasOtherElementInTabSequence = !(columnGroupHeaderTabIndexState === null && columnHeaderTabIndexState === null && hasNoCellTabIndexState);
const columnsContainerRef = apiRef.current.columnHeadersContainerRef;
return /*#__PURE__*/(0, _jsxRuntime.jsx)(rootProps.slots.columnHeaders, (0, _extends2.default)({
ref: columnsContainerRef,
visibleColumns: visibleColumns,
filterColumnLookup: filterColumnLookup,
sortColumnLookup: sortColumnLookup,
columnHeaderTabIndexState: columnHeaderTabIndexState,
columnGroupHeaderTabIndexState: columnGroupHeaderTabIndexState,
columnHeaderFocus: columnHeaderFocus,
columnGroupHeaderFocus: columnGroupHeaderFocus,
headerGroupingMaxDepth: headerGroupingMaxDepth,
columnMenuState: columnMenuState,
columnVisibility: columnVisibility,
columnGroupsHeaderStructure: columnGroupsHeaderStructure,
hasOtherElementInTabSequence: hasOtherElementInTabSequence
}, rootProps.slotProps?.columnHeaders));
}
const MemoizedGridHeaders = exports.GridHeaders = (0, _fastMemo.fastMemo)(GridHeaders);
+49
View File
@@ -0,0 +1,49 @@
'use client';
import _extends from "@babel/runtime/helpers/esm/extends";
import { fastMemo } from '@mui/x-internals/fastMemo';
import { useGridPrivateApiContext } from "../hooks/utils/useGridPrivateApiContext.mjs";
import { useGridSelector } from "../hooks/utils/useGridSelector.mjs";
import { useGridRootProps } from "../hooks/utils/useGridRootProps.mjs";
import { gridColumnVisibilityModelSelector, gridVisibleColumnDefinitionsSelector } from "../hooks/features/columns/gridColumnsSelector.mjs";
import { gridFilterActiveItemsLookupSelector } from "../hooks/features/filter/gridFilterSelector.mjs";
import { gridSortColumnLookupSelector } from "../hooks/features/sorting/gridSortingSelector.mjs";
import { gridTabIndexColumnHeaderSelector, gridTabIndexCellSelector, gridFocusColumnHeaderSelector, gridTabIndexColumnGroupHeaderSelector, gridFocusColumnGroupHeaderSelector } from "../hooks/features/focus/gridFocusStateSelector.mjs";
import { gridColumnGroupsHeaderMaxDepthSelector, gridColumnGroupsHeaderStructureSelector } from "../hooks/features/columnGrouping/gridColumnGroupsSelector.mjs";
import { gridColumnMenuSelector } from "../hooks/features/columnMenu/columnMenuSelector.mjs";
import { jsx as _jsx } from "react/jsx-runtime";
function GridHeaders() {
const apiRef = useGridPrivateApiContext();
const rootProps = useGridRootProps();
const visibleColumns = useGridSelector(apiRef, gridVisibleColumnDefinitionsSelector);
const filterColumnLookup = useGridSelector(apiRef, gridFilterActiveItemsLookupSelector);
const sortColumnLookup = useGridSelector(apiRef, gridSortColumnLookupSelector);
const columnHeaderTabIndexState = useGridSelector(apiRef, gridTabIndexColumnHeaderSelector);
const hasNoCellTabIndexState = useGridSelector(apiRef, () => gridTabIndexCellSelector(apiRef) === null);
const columnGroupHeaderTabIndexState = useGridSelector(apiRef, gridTabIndexColumnGroupHeaderSelector);
const columnHeaderFocus = useGridSelector(apiRef, gridFocusColumnHeaderSelector);
const columnGroupHeaderFocus = useGridSelector(apiRef, gridFocusColumnGroupHeaderSelector);
const headerGroupingMaxDepth = useGridSelector(apiRef, gridColumnGroupsHeaderMaxDepthSelector);
const columnMenuState = useGridSelector(apiRef, gridColumnMenuSelector);
const columnVisibility = useGridSelector(apiRef, gridColumnVisibilityModelSelector);
const columnGroupsHeaderStructure = useGridSelector(apiRef, gridColumnGroupsHeaderStructureSelector);
const hasOtherElementInTabSequence = !(columnGroupHeaderTabIndexState === null && columnHeaderTabIndexState === null && hasNoCellTabIndexState);
const columnsContainerRef = apiRef.current.columnHeadersContainerRef;
return /*#__PURE__*/_jsx(rootProps.slots.columnHeaders, _extends({
ref: columnsContainerRef,
visibleColumns: visibleColumns,
filterColumnLookup: filterColumnLookup,
sortColumnLookup: sortColumnLookup,
columnHeaderTabIndexState: columnHeaderTabIndexState,
columnGroupHeaderTabIndexState: columnGroupHeaderTabIndexState,
columnHeaderFocus: columnHeaderFocus,
columnGroupHeaderFocus: columnGroupHeaderFocus,
headerGroupingMaxDepth: headerGroupingMaxDepth,
columnMenuState: columnMenuState,
columnVisibility: columnVisibility,
columnGroupsHeaderStructure: columnGroupsHeaderStructure,
hasOtherElementInTabSequence: hasOtherElementInTabSequence
}, rootProps.slotProps?.columnHeaders));
}
const MemoizedGridHeaders = fastMemo(GridHeaders);
export { MemoizedGridHeaders as GridHeaders };
@@ -0,0 +1,17 @@
import * as React from 'react';
import type { GridOverlayProps } from "./containers/GridOverlay.mjs";
import type { GridLoadingOverlayVariant } from "../hooks/features/overlays/gridOverlaysInterfaces.mjs";
export interface GridLoadingOverlayProps extends GridOverlayProps {
/**
* The variant of the overlay.
* @default 'linear-progress'
*/
variant?: GridLoadingOverlayVariant;
/**
* The variant of the overlay when no rows are displayed.
* @default 'skeleton'
*/
noRowsVariant?: GridLoadingOverlayVariant;
}
declare const GridLoadingOverlay: React.ForwardRefExoticComponent<GridLoadingOverlayProps> | React.ForwardRefExoticComponent<GridLoadingOverlayProps & React.RefAttributes<HTMLDivElement>>;
export { GridLoadingOverlay };
@@ -0,0 +1,17 @@
import * as React from 'react';
import type { GridOverlayProps } from "./containers/GridOverlay.js";
import type { GridLoadingOverlayVariant } from "../hooks/features/overlays/gridOverlaysInterfaces.js";
export interface GridLoadingOverlayProps extends GridOverlayProps {
/**
* The variant of the overlay.
* @default 'linear-progress'
*/
variant?: GridLoadingOverlayVariant;
/**
* The variant of the overlay when no rows are displayed.
* @default 'skeleton'
*/
noRowsVariant?: GridLoadingOverlayVariant;
}
declare const GridLoadingOverlay: React.ForwardRefExoticComponent<GridLoadingOverlayProps> | React.ForwardRefExoticComponent<GridLoadingOverlayProps & React.RefAttributes<HTMLDivElement>>;
export { GridLoadingOverlay };
+76
View File
@@ -0,0 +1,76 @@
"use strict";
'use client';
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard").default;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.GridLoadingOverlay = void 0;
var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
var _objectWithoutPropertiesLoose2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutPropertiesLoose"));
var React = _interopRequireWildcard(require("react"));
var _propTypes = _interopRequireDefault(require("prop-types"));
var _forwardRef = require("@mui/x-internals/forwardRef");
var _useGridRootProps = require("../hooks/utils/useGridRootProps");
var _GridOverlay = require("./containers/GridOverlay");
var _GridSkeletonLoadingOverlay = require("./GridSkeletonLoadingOverlay");
var _useGridApiContext = require("../hooks/utils/useGridApiContext");
var _hooks = require("../hooks");
var _jsxRuntime = require("react/jsx-runtime");
const _excluded = ["variant", "noRowsVariant", "style"];
const LOADING_VARIANTS = {
'circular-progress': {
component: rootProps => rootProps.slots.baseCircularProgress,
style: {}
},
'linear-progress': {
component: rootProps => rootProps.slots.baseLinearProgress,
style: {
display: 'block'
}
},
skeleton: {
component: () => _GridSkeletonLoadingOverlay.GridSkeletonLoadingOverlay,
style: {
display: 'block'
}
}
};
const GridLoadingOverlay = exports.GridLoadingOverlay = (0, _forwardRef.forwardRef)(function GridLoadingOverlay(props, ref) {
const {
variant = 'linear-progress',
noRowsVariant = 'skeleton',
style
} = props,
other = (0, _objectWithoutPropertiesLoose2.default)(props, _excluded);
const apiRef = (0, _useGridApiContext.useGridApiContext)();
const rootProps = (0, _useGridRootProps.useGridRootProps)();
const rowsCount = (0, _hooks.useGridSelector)(apiRef, _hooks.gridRowCountSelector);
const activeVariant = LOADING_VARIANTS[rowsCount === 0 ? noRowsVariant : variant];
const Component = activeVariant.component(rootProps);
return /*#__PURE__*/(0, _jsxRuntime.jsx)(_GridOverlay.GridOverlay, (0, _extends2.default)({
style: (0, _extends2.default)({}, activeVariant.style, style)
}, other, {
ref: ref,
children: /*#__PURE__*/(0, _jsxRuntime.jsx)(Component, {})
}));
});
if (process.env.NODE_ENV !== "production") GridLoadingOverlay.displayName = "GridLoadingOverlay";
process.env.NODE_ENV !== "production" ? GridLoadingOverlay.propTypes /* remove-proptypes */ = {
// ----------------------------- Warning --------------------------------
// | These PropTypes are generated from the TypeScript type definitions |
// | To update them edit the TypeScript types and run "pnpm proptypes" |
// ----------------------------------------------------------------------
/**
* The variant of the overlay when no rows are displayed.
* @default 'skeleton'
*/
noRowsVariant: _propTypes.default.oneOf(['circular-progress', 'linear-progress', 'skeleton']),
sx: _propTypes.default.oneOfType([_propTypes.default.arrayOf(_propTypes.default.oneOfType([_propTypes.default.func, _propTypes.default.object, _propTypes.default.bool])), _propTypes.default.func, _propTypes.default.object]),
/**
* The variant of the overlay.
* @default 'linear-progress'
*/
variant: _propTypes.default.oneOf(['circular-progress', 'linear-progress', 'skeleton'])
} : void 0;
@@ -0,0 +1,70 @@
'use client';
import _extends from "@babel/runtime/helpers/esm/extends";
import _objectWithoutPropertiesLoose from "@babel/runtime/helpers/esm/objectWithoutPropertiesLoose";
const _excluded = ["variant", "noRowsVariant", "style"];
import * as React from 'react';
import PropTypes from 'prop-types';
import { forwardRef } from '@mui/x-internals/forwardRef';
import { useGridRootProps } from "../hooks/utils/useGridRootProps.mjs";
import { GridOverlay } from "./containers/GridOverlay.mjs";
import { GridSkeletonLoadingOverlay } from "./GridSkeletonLoadingOverlay.mjs";
import { useGridApiContext } from "../hooks/utils/useGridApiContext.mjs";
import { gridRowCountSelector, useGridSelector } from "../hooks/index.mjs";
import { jsx as _jsx } from "react/jsx-runtime";
const LOADING_VARIANTS = {
'circular-progress': {
component: rootProps => rootProps.slots.baseCircularProgress,
style: {}
},
'linear-progress': {
component: rootProps => rootProps.slots.baseLinearProgress,
style: {
display: 'block'
}
},
skeleton: {
component: () => GridSkeletonLoadingOverlay,
style: {
display: 'block'
}
}
};
const GridLoadingOverlay = forwardRef(function GridLoadingOverlay(props, ref) {
const {
variant = 'linear-progress',
noRowsVariant = 'skeleton',
style
} = props,
other = _objectWithoutPropertiesLoose(props, _excluded);
const apiRef = useGridApiContext();
const rootProps = useGridRootProps();
const rowsCount = useGridSelector(apiRef, gridRowCountSelector);
const activeVariant = LOADING_VARIANTS[rowsCount === 0 ? noRowsVariant : variant];
const Component = activeVariant.component(rootProps);
return /*#__PURE__*/_jsx(GridOverlay, _extends({
style: _extends({}, activeVariant.style, style)
}, other, {
ref: ref,
children: /*#__PURE__*/_jsx(Component, {})
}));
});
if (process.env.NODE_ENV !== "production") GridLoadingOverlay.displayName = "GridLoadingOverlay";
process.env.NODE_ENV !== "production" ? GridLoadingOverlay.propTypes /* remove-proptypes */ = {
// ----------------------------- Warning --------------------------------
// | These PropTypes are generated from the TypeScript type definitions |
// | To update them edit the TypeScript types and run "pnpm proptypes" |
// ----------------------------------------------------------------------
/**
* The variant of the overlay when no rows are displayed.
* @default 'skeleton'
*/
noRowsVariant: PropTypes.oneOf(['circular-progress', 'linear-progress', 'skeleton']),
sx: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.func, PropTypes.object, PropTypes.bool])), PropTypes.func, PropTypes.object]),
/**
* The variant of the overlay.
* @default 'linear-progress'
*/
variant: PropTypes.oneOf(['circular-progress', 'linear-progress', 'skeleton'])
} : void 0;
export { GridLoadingOverlay };
@@ -0,0 +1,5 @@
import type { GridOverlayProps } from "./containers/GridOverlay.mjs";
declare const GridNoColumnsOverlay: import("react").ForwardRefExoticComponent<GridOverlayProps> | import("react").ForwardRefExoticComponent<import("react").HTMLAttributes<HTMLDivElement> & {
sx?: import("@mui/system").SxProps<import("@mui/system").Theme>;
} & import("react").RefAttributes<HTMLDivElement>>;
export { GridNoColumnsOverlay };
@@ -0,0 +1,5 @@
import type { GridOverlayProps } from "./containers/GridOverlay.js";
declare const GridNoColumnsOverlay: import("react").ForwardRefExoticComponent<GridOverlayProps> | import("react").ForwardRefExoticComponent<import("react").HTMLAttributes<HTMLDivElement> & {
sx?: import("@mui/system").SxProps<import("@mui/system").Theme>;
} & import("react").RefAttributes<HTMLDivElement>>;
export { GridNoColumnsOverlay };
@@ -0,0 +1,43 @@
"use strict";
'use client';
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.GridNoColumnsOverlay = void 0;
var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
var _propTypes = _interopRequireDefault(require("prop-types"));
var _forwardRef = require("@mui/x-internals/forwardRef");
var _useGridRootProps = require("../hooks/utils/useGridRootProps");
var _useGridApiContext = require("../hooks/utils/useGridApiContext");
var _GridOverlay = require("./containers/GridOverlay");
var _gridPreferencePanelsValue = require("../hooks/features/preferencesPanel/gridPreferencePanelsValue");
var _hooks = require("../hooks");
var _jsxRuntime = require("react/jsx-runtime");
const GridNoColumnsOverlay = exports.GridNoColumnsOverlay = (0, _forwardRef.forwardRef)(function GridNoColumnsOverlay(props, ref) {
const rootProps = (0, _useGridRootProps.useGridRootProps)();
const apiRef = (0, _useGridApiContext.useGridApiContext)();
const columns = (0, _hooks.useGridSelector)(apiRef, _hooks.gridColumnFieldsSelector);
const handleOpenManageColumns = () => {
apiRef.current.showPreferences(_gridPreferencePanelsValue.GridPreferencePanelsValue.columns);
};
const showManageColumnsButton = !rootProps.disableColumnSelector && columns.length > 0;
return /*#__PURE__*/(0, _jsxRuntime.jsxs)(_GridOverlay.GridOverlay, (0, _extends2.default)({}, props, {
ref: ref,
children: [apiRef.current.getLocaleText('noColumnsOverlayLabel'), showManageColumnsButton && /*#__PURE__*/(0, _jsxRuntime.jsx)(rootProps.slots.baseButton, (0, _extends2.default)({
size: "small"
}, rootProps.slotProps?.baseButton, {
onClick: handleOpenManageColumns,
children: apiRef.current.getLocaleText('noColumnsOverlayManageColumns')
}))]
}));
});
if (process.env.NODE_ENV !== "production") GridNoColumnsOverlay.displayName = "GridNoColumnsOverlay";
process.env.NODE_ENV !== "production" ? GridNoColumnsOverlay.propTypes /* remove-proptypes */ = {
// ----------------------------- Warning --------------------------------
// | These PropTypes are generated from the TypeScript type definitions |
// | To update them edit the TypeScript types and run "pnpm proptypes" |
// ----------------------------------------------------------------------
sx: _propTypes.default.oneOfType([_propTypes.default.arrayOf(_propTypes.default.oneOfType([_propTypes.default.func, _propTypes.default.object, _propTypes.default.bool])), _propTypes.default.func, _propTypes.default.object])
} : void 0;
@@ -0,0 +1,38 @@
'use client';
import _extends from "@babel/runtime/helpers/esm/extends";
import PropTypes from 'prop-types';
import { forwardRef } from '@mui/x-internals/forwardRef';
import { useGridRootProps } from "../hooks/utils/useGridRootProps.mjs";
import { useGridApiContext } from "../hooks/utils/useGridApiContext.mjs";
import { GridOverlay } from "./containers/GridOverlay.mjs";
import { GridPreferencePanelsValue } from "../hooks/features/preferencesPanel/gridPreferencePanelsValue.mjs";
import { gridColumnFieldsSelector, useGridSelector } from "../hooks/index.mjs";
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
const GridNoColumnsOverlay = forwardRef(function GridNoColumnsOverlay(props, ref) {
const rootProps = useGridRootProps();
const apiRef = useGridApiContext();
const columns = useGridSelector(apiRef, gridColumnFieldsSelector);
const handleOpenManageColumns = () => {
apiRef.current.showPreferences(GridPreferencePanelsValue.columns);
};
const showManageColumnsButton = !rootProps.disableColumnSelector && columns.length > 0;
return /*#__PURE__*/_jsxs(GridOverlay, _extends({}, props, {
ref: ref,
children: [apiRef.current.getLocaleText('noColumnsOverlayLabel'), showManageColumnsButton && /*#__PURE__*/_jsx(rootProps.slots.baseButton, _extends({
size: "small"
}, rootProps.slotProps?.baseButton, {
onClick: handleOpenManageColumns,
children: apiRef.current.getLocaleText('noColumnsOverlayManageColumns')
}))]
}));
});
if (process.env.NODE_ENV !== "production") GridNoColumnsOverlay.displayName = "GridNoColumnsOverlay";
process.env.NODE_ENV !== "production" ? GridNoColumnsOverlay.propTypes /* remove-proptypes */ = {
// ----------------------------- Warning --------------------------------
// | These PropTypes are generated from the TypeScript type definitions |
// | To update them edit the TypeScript types and run "pnpm proptypes" |
// ----------------------------------------------------------------------
sx: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.func, PropTypes.object, PropTypes.bool])), PropTypes.func, PropTypes.object])
} : void 0;
export { GridNoColumnsOverlay };
@@ -0,0 +1,4 @@
import type { GridOverlayProps } from "./containers/GridOverlay.mjs";
export declare const GridNoResultsOverlay: import("react").ForwardRefExoticComponent<GridOverlayProps> | import("react").ForwardRefExoticComponent<import("react").HTMLAttributes<HTMLDivElement> & {
sx?: import("@mui/system").SxProps<import("@mui/system").Theme>;
} & import("react").RefAttributes<HTMLDivElement>>;
@@ -0,0 +1,4 @@
import type { GridOverlayProps } from "./containers/GridOverlay.js";
export declare const GridNoResultsOverlay: import("react").ForwardRefExoticComponent<GridOverlayProps> | import("react").ForwardRefExoticComponent<import("react").HTMLAttributes<HTMLDivElement> & {
sx?: import("@mui/system").SxProps<import("@mui/system").Theme>;
} & import("react").RefAttributes<HTMLDivElement>>;
@@ -0,0 +1,22 @@
"use strict";
'use client';
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.GridNoResultsOverlay = void 0;
var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
var _forwardRef = require("@mui/x-internals/forwardRef");
var _useGridApiContext = require("../hooks/utils/useGridApiContext");
var _GridOverlay = require("./containers/GridOverlay");
var _jsxRuntime = require("react/jsx-runtime");
const GridNoResultsOverlay = exports.GridNoResultsOverlay = (0, _forwardRef.forwardRef)(function GridNoResultsOverlay(props, ref) {
const apiRef = (0, _useGridApiContext.useGridApiContext)();
const noResultsOverlayLabel = apiRef.current.getLocaleText('noResultsOverlayLabel');
return /*#__PURE__*/(0, _jsxRuntime.jsx)(_GridOverlay.GridOverlay, (0, _extends2.default)({}, props, {
ref: ref,
children: noResultsOverlayLabel
}));
});
if (process.env.NODE_ENV !== "production") GridNoResultsOverlay.displayName = "GridNoResultsOverlay";
@@ -0,0 +1,16 @@
'use client';
import _extends from "@babel/runtime/helpers/esm/extends";
import { forwardRef } from '@mui/x-internals/forwardRef';
import { useGridApiContext } from "../hooks/utils/useGridApiContext.mjs";
import { GridOverlay } from "./containers/GridOverlay.mjs";
import { jsx as _jsx } from "react/jsx-runtime";
export const GridNoResultsOverlay = forwardRef(function GridNoResultsOverlay(props, ref) {
const apiRef = useGridApiContext();
const noResultsOverlayLabel = apiRef.current.getLocaleText('noResultsOverlayLabel');
return /*#__PURE__*/_jsx(GridOverlay, _extends({}, props, {
ref: ref,
children: noResultsOverlayLabel
}));
});
if (process.env.NODE_ENV !== "production") GridNoResultsOverlay.displayName = "GridNoResultsOverlay";
@@ -0,0 +1,5 @@
import type { GridOverlayProps } from "./containers/GridOverlay.mjs";
declare const GridNoRowsOverlay: import("react").ForwardRefExoticComponent<GridOverlayProps> | import("react").ForwardRefExoticComponent<import("react").HTMLAttributes<HTMLDivElement> & {
sx?: import("@mui/system").SxProps<import("@mui/system").Theme>;
} & import("react").RefAttributes<HTMLDivElement>>;
export { GridNoRowsOverlay };
@@ -0,0 +1,5 @@
import type { GridOverlayProps } from "./containers/GridOverlay.js";
declare const GridNoRowsOverlay: import("react").ForwardRefExoticComponent<GridOverlayProps> | import("react").ForwardRefExoticComponent<import("react").HTMLAttributes<HTMLDivElement> & {
sx?: import("@mui/system").SxProps<import("@mui/system").Theme>;
} & import("react").RefAttributes<HTMLDivElement>>;
export { GridNoRowsOverlay };
+30
View File
@@ -0,0 +1,30 @@
"use strict";
'use client';
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.GridNoRowsOverlay = void 0;
var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
var _propTypes = _interopRequireDefault(require("prop-types"));
var _forwardRef = require("@mui/x-internals/forwardRef");
var _useGridApiContext = require("../hooks/utils/useGridApiContext");
var _GridOverlay = require("./containers/GridOverlay");
var _jsxRuntime = require("react/jsx-runtime");
const GridNoRowsOverlay = exports.GridNoRowsOverlay = (0, _forwardRef.forwardRef)(function GridNoRowsOverlay(props, ref) {
const apiRef = (0, _useGridApiContext.useGridApiContext)();
const noRowsLabel = apiRef.current.getLocaleText('noRowsLabel');
return /*#__PURE__*/(0, _jsxRuntime.jsx)(_GridOverlay.GridOverlay, (0, _extends2.default)({}, props, {
ref: ref,
children: noRowsLabel
}));
});
if (process.env.NODE_ENV !== "production") GridNoRowsOverlay.displayName = "GridNoRowsOverlay";
process.env.NODE_ENV !== "production" ? GridNoRowsOverlay.propTypes /* remove-proptypes */ = {
// ----------------------------- Warning --------------------------------
// | These PropTypes are generated from the TypeScript type definitions |
// | To update them edit the TypeScript types and run "pnpm proptypes" |
// ----------------------------------------------------------------------
sx: _propTypes.default.oneOfType([_propTypes.default.arrayOf(_propTypes.default.oneOfType([_propTypes.default.func, _propTypes.default.object, _propTypes.default.bool])), _propTypes.default.func, _propTypes.default.object])
} : void 0;
+25
View File
@@ -0,0 +1,25 @@
'use client';
import _extends from "@babel/runtime/helpers/esm/extends";
import PropTypes from 'prop-types';
import { forwardRef } from '@mui/x-internals/forwardRef';
import { useGridApiContext } from "../hooks/utils/useGridApiContext.mjs";
import { GridOverlay } from "./containers/GridOverlay.mjs";
import { jsx as _jsx } from "react/jsx-runtime";
const GridNoRowsOverlay = forwardRef(function GridNoRowsOverlay(props, ref) {
const apiRef = useGridApiContext();
const noRowsLabel = apiRef.current.getLocaleText('noRowsLabel');
return /*#__PURE__*/_jsx(GridOverlay, _extends({}, props, {
ref: ref,
children: noRowsLabel
}));
});
if (process.env.NODE_ENV !== "production") GridNoRowsOverlay.displayName = "GridNoRowsOverlay";
process.env.NODE_ENV !== "production" ? GridNoRowsOverlay.propTypes /* remove-proptypes */ = {
// ----------------------------- Warning --------------------------------
// | These PropTypes are generated from the TypeScript type definitions |
// | To update them edit the TypeScript types and run "pnpm proptypes" |
// ----------------------------------------------------------------------
sx: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.func, PropTypes.object, PropTypes.bool])), PropTypes.func, PropTypes.object])
} : void 0;
export { GridNoRowsOverlay };
@@ -0,0 +1,6 @@
import * as React from 'react';
declare function GridPagination(): React.JSX.Element;
declare namespace GridPagination {
var propTypes: any;
}
export { GridPagination };
+6
View File
@@ -0,0 +1,6 @@
import * as React from 'react';
declare function GridPagination(): React.JSX.Element;
declare namespace GridPagination {
var propTypes: any;
}
export { GridPagination };
+92
View File
@@ -0,0 +1,92 @@
"use strict";
'use client';
var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard").default;
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.GridPagination = GridPagination;
var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
var React = _interopRequireWildcard(require("react"));
var _styles = require("@mui/material/styles");
var _propTypes = _interopRequireDefault(require("prop-types"));
var _assert = require("../utils/assert");
var _useGridSelector = require("../hooks/utils/useGridSelector");
var _useGridApiContext = require("../hooks/utils/useGridApiContext");
var _useGridRootProps = require("../hooks/utils/useGridRootProps");
var _gridPaginationSelector = require("../hooks/features/pagination/gridPaginationSelector");
var _jsxRuntime = require("react/jsx-runtime");
const GridPaginationRoot = (0, _styles.styled)(_assert.NotRendered, {
slot: 'internal'
})({
maxHeight: 'calc(100% + 1px)',
// border width
flexGrow: 1
});
function GridPagination() {
const apiRef = (0, _useGridApiContext.useGridApiContext)();
const rootProps = (0, _useGridRootProps.useGridRootProps)();
const paginationModel = (0, _useGridSelector.useGridSelector)(apiRef, _gridPaginationSelector.gridPaginationModelSelector);
const rowCount = (0, _useGridSelector.useGridSelector)(apiRef, _gridPaginationSelector.gridPaginationRowCountSelector);
const pageCount = (0, _useGridSelector.useGridSelector)(apiRef, _gridPaginationSelector.gridPageCountSelector);
const {
paginationMode,
loading
} = rootProps;
const unknownRowCount = rowCount == null || rowCount === -1;
const disabled = unknownRowCount && paginationMode === 'server' && loading;
const lastPage = React.useMemo(() => Math.max(0, pageCount - 1), [pageCount]);
const computedPage = React.useMemo(() => {
if (unknownRowCount) {
return paginationModel.page;
}
return paginationModel.page <= lastPage ? paginationModel.page : lastPage;
}, [lastPage, paginationModel.page, unknownRowCount]);
const handlePageSizeChange = React.useCallback(pageSize => {
apiRef.current.setPageSize(pageSize);
}, [apiRef]);
const handlePageChange = React.useCallback((_, page) => {
apiRef.current.setPage(page);
}, [apiRef]);
const isPageSizeIncludedInPageSizeOptions = pageSize => {
for (let i = 0; i < rootProps.pageSizeOptions.length; i += 1) {
const option = rootProps.pageSizeOptions[i];
if (typeof option === 'number') {
if (option === pageSize) {
return true;
}
} else if (option.value === pageSize) {
return true;
}
}
return false;
};
if (process.env.NODE_ENV !== 'production') {
// eslint-disable-next-line react-hooks/rules-of-hooks
const warnedOnceMissingInPageSizeOptions = React.useRef(false);
const pageSize = rootProps.paginationModel?.pageSize ?? paginationModel.pageSize;
if (!warnedOnceMissingInPageSizeOptions.current && !rootProps.autoPageSize && !isPageSizeIncludedInPageSizeOptions(pageSize)) {
console.warn([`MUI X: The page size \`${paginationModel.pageSize}\` is not present in the \`pageSizeOptions\`.`, `Add it to show the pagination select.`].join('\n'));
warnedOnceMissingInPageSizeOptions.current = true;
}
}
const pageSizeOptions = isPageSizeIncludedInPageSizeOptions(paginationModel.pageSize) ? rootProps.pageSizeOptions : [];
return /*#__PURE__*/(0, _jsxRuntime.jsx)(GridPaginationRoot, (0, _extends2.default)({
as: rootProps.slots.basePagination,
count: rowCount ?? -1,
page: computedPage,
rowsPerPageOptions: pageSizeOptions,
rowsPerPage: paginationModel.pageSize,
onPageChange: handlePageChange,
onRowsPerPageChange: handlePageSizeChange,
disabled: disabled
}, rootProps.slotProps?.basePagination));
}
process.env.NODE_ENV !== "production" ? GridPagination.propTypes = {
// ----------------------------- Warning --------------------------------
// | These PropTypes are generated from the TypeScript type definitions |
// | To update them edit the TypeScript types and run "pnpm proptypes" |
// ----------------------------------------------------------------------
component: _propTypes.default.elementType
} : void 0;
+86
View File
@@ -0,0 +1,86 @@
'use client';
import _extends from "@babel/runtime/helpers/esm/extends";
import * as React from 'react';
import { styled } from '@mui/material/styles';
import PropTypes from 'prop-types';
import { NotRendered } from "../utils/assert.mjs";
import { useGridSelector } from "../hooks/utils/useGridSelector.mjs";
import { useGridApiContext } from "../hooks/utils/useGridApiContext.mjs";
import { useGridRootProps } from "../hooks/utils/useGridRootProps.mjs";
import { gridPaginationModelSelector, gridPaginationRowCountSelector, gridPageCountSelector } from "../hooks/features/pagination/gridPaginationSelector.mjs";
import { jsx as _jsx } from "react/jsx-runtime";
const GridPaginationRoot = styled(NotRendered, {
slot: 'internal'
})({
maxHeight: 'calc(100% + 1px)',
// border width
flexGrow: 1
});
function GridPagination() {
const apiRef = useGridApiContext();
const rootProps = useGridRootProps();
const paginationModel = useGridSelector(apiRef, gridPaginationModelSelector);
const rowCount = useGridSelector(apiRef, gridPaginationRowCountSelector);
const pageCount = useGridSelector(apiRef, gridPageCountSelector);
const {
paginationMode,
loading
} = rootProps;
const unknownRowCount = rowCount == null || rowCount === -1;
const disabled = unknownRowCount && paginationMode === 'server' && loading;
const lastPage = React.useMemo(() => Math.max(0, pageCount - 1), [pageCount]);
const computedPage = React.useMemo(() => {
if (unknownRowCount) {
return paginationModel.page;
}
return paginationModel.page <= lastPage ? paginationModel.page : lastPage;
}, [lastPage, paginationModel.page, unknownRowCount]);
const handlePageSizeChange = React.useCallback(pageSize => {
apiRef.current.setPageSize(pageSize);
}, [apiRef]);
const handlePageChange = React.useCallback((_, page) => {
apiRef.current.setPage(page);
}, [apiRef]);
const isPageSizeIncludedInPageSizeOptions = pageSize => {
for (let i = 0; i < rootProps.pageSizeOptions.length; i += 1) {
const option = rootProps.pageSizeOptions[i];
if (typeof option === 'number') {
if (option === pageSize) {
return true;
}
} else if (option.value === pageSize) {
return true;
}
}
return false;
};
if (process.env.NODE_ENV !== 'production') {
// eslint-disable-next-line react-hooks/rules-of-hooks
const warnedOnceMissingInPageSizeOptions = React.useRef(false);
const pageSize = rootProps.paginationModel?.pageSize ?? paginationModel.pageSize;
if (!warnedOnceMissingInPageSizeOptions.current && !rootProps.autoPageSize && !isPageSizeIncludedInPageSizeOptions(pageSize)) {
console.warn([`MUI X: The page size \`${paginationModel.pageSize}\` is not present in the \`pageSizeOptions\`.`, `Add it to show the pagination select.`].join('\n'));
warnedOnceMissingInPageSizeOptions.current = true;
}
}
const pageSizeOptions = isPageSizeIncludedInPageSizeOptions(paginationModel.pageSize) ? rootProps.pageSizeOptions : [];
return /*#__PURE__*/_jsx(GridPaginationRoot, _extends({
as: rootProps.slots.basePagination,
count: rowCount ?? -1,
page: computedPage,
rowsPerPageOptions: pageSizeOptions,
rowsPerPage: paginationModel.pageSize,
onPageChange: handlePageChange,
onRowsPerPageChange: handlePageSizeChange,
disabled: disabled
}, rootProps.slotProps?.basePagination));
}
process.env.NODE_ENV !== "production" ? GridPagination.propTypes = {
// ----------------------------- Warning --------------------------------
// | These PropTypes are generated from the TypeScript type definitions |
// | To update them edit the TypeScript types and run "pnpm proptypes" |
// ----------------------------------------------------------------------
component: PropTypes.elementType
} : void 0;
export { GridPagination };
@@ -0,0 +1,4 @@
export interface GridPinnedRowsProps {
position: 'top' | 'bottom';
}
export declare function GridPinnedRows(_: GridPinnedRowsProps): null;
+4
View File
@@ -0,0 +1,4 @@
export interface GridPinnedRowsProps {
position: 'top' | 'bottom';
}
export declare function GridPinnedRows(_: GridPinnedRowsProps): null;
+9
View File
@@ -0,0 +1,9 @@
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.GridPinnedRows = GridPinnedRows;
function GridPinnedRows(_) {
return null;
}
+3
View File
@@ -0,0 +1,3 @@
export function GridPinnedRows(_) {
return null;
}
+39
View File
@@ -0,0 +1,39 @@
import * as React from 'react';
import type { GridRowId, GridRowModel } from "../models/gridRows.mjs";
import type { GridPinnedColumns } from "../hooks/features/columns/index.mjs";
import type { GridStateColDef } from "../models/colDef/gridColDef.mjs";
export interface GridRowProps extends React.HTMLAttributes<HTMLDivElement> {
row: GridRowModel;
rowId: GridRowId;
selected: boolean;
/**
* Index of the row in the whole sorted and filtered dataset.
* If some rows above have expanded children, this index also take those children into account.
*/
index: number;
rowHeight: number | 'auto';
offsetLeft: number;
columnsTotalWidth: number;
firstColumnIndex: number;
lastColumnIndex: number;
visibleColumns: GridStateColDef[];
pinnedColumns: GridPinnedColumns;
/**
* Determines which cell has focus.
* If `null`, no cell in this row has focus.
*/
focusedColumnIndex: number | undefined;
isFirstVisible: boolean;
isLastVisible: boolean;
isNotVisible: boolean;
showBottomBorder: boolean;
scrollbarWidth: number;
gridHasFiller: boolean;
onClick?: React.MouseEventHandler<HTMLDivElement>;
onDoubleClick?: React.MouseEventHandler<HTMLDivElement>;
onMouseEnter?: React.MouseEventHandler<HTMLDivElement>;
onMouseLeave?: React.MouseEventHandler<HTMLDivElement>;
[x: `data-${string}`]: string;
}
declare const MemoizedGridRow: React.ForwardRefExoticComponent<GridRowProps> | React.ForwardRefExoticComponent<GridRowProps & React.RefAttributes<HTMLDivElement>>;
export { MemoizedGridRow as GridRow };
+39
View File
@@ -0,0 +1,39 @@
import * as React from 'react';
import type { GridRowId, GridRowModel } from "../models/gridRows.js";
import type { GridPinnedColumns } from "../hooks/features/columns/index.js";
import type { GridStateColDef } from "../models/colDef/gridColDef.js";
export interface GridRowProps extends React.HTMLAttributes<HTMLDivElement> {
row: GridRowModel;
rowId: GridRowId;
selected: boolean;
/**
* Index of the row in the whole sorted and filtered dataset.
* If some rows above have expanded children, this index also take those children into account.
*/
index: number;
rowHeight: number | 'auto';
offsetLeft: number;
columnsTotalWidth: number;
firstColumnIndex: number;
lastColumnIndex: number;
visibleColumns: GridStateColDef[];
pinnedColumns: GridPinnedColumns;
/**
* Determines which cell has focus.
* If `null`, no cell in this row has focus.
*/
focusedColumnIndex: number | undefined;
isFirstVisible: boolean;
isLastVisible: boolean;
isNotVisible: boolean;
showBottomBorder: boolean;
scrollbarWidth: number;
gridHasFiller: boolean;
onClick?: React.MouseEventHandler<HTMLDivElement>;
onDoubleClick?: React.MouseEventHandler<HTMLDivElement>;
onMouseEnter?: React.MouseEventHandler<HTMLDivElement>;
onMouseLeave?: React.MouseEventHandler<HTMLDivElement>;
[x: `data-${string}`]: string;
}
declare const MemoizedGridRow: React.ForwardRefExoticComponent<GridRowProps> | React.ForwardRefExoticComponent<GridRowProps & React.RefAttributes<HTMLDivElement>>;
export { MemoizedGridRow as GridRow };
+369
View File
@@ -0,0 +1,369 @@
"use strict";
'use client';
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard").default;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.GridRow = void 0;
var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
var _objectWithoutPropertiesLoose2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutPropertiesLoose"));
var React = _interopRequireWildcard(require("react"));
var _propTypes = _interopRequireDefault(require("prop-types"));
var _clsx = _interopRequireDefault(require("clsx"));
var _useForkRef = _interopRequireDefault(require("@mui/utils/useForkRef"));
var _fastMemo = require("@mui/x-internals/fastMemo");
var _forwardRef = require("@mui/x-internals/forwardRef");
var _isObjectEmpty = require("@mui/x-internals/isObjectEmpty");
var _cssVariables = require("../constants/cssVariables");
var _gridEditRowModel = require("../models/gridEditRowModel");
var _gridClasses = require("../constants/gridClasses");
var _composeGridClasses = require("../utils/composeGridClasses");
var _useGridRootProps = require("../hooks/utils/useGridRootProps");
var _cellBorderUtils = require("../utils/cellBorderUtils");
var _gridColumnsSelector = require("../hooks/features/columns/gridColumnsSelector");
var _useGridSelector = require("../hooks/utils/useGridSelector");
var _useGridVisibleRows = require("../hooks/utils/useGridVisibleRows");
var _domUtils = require("../utils/domUtils");
var _gridCheckboxSelectionColDef = require("../colDef/gridCheckboxSelectionColDef");
var _gridActionsColDef = require("../colDef/gridActionsColDef");
var _constants = require("../internals/constants");
var _gridSortingSelector = require("../hooks/features/sorting/gridSortingSelector");
var _gridRowsSelector = require("../hooks/features/rows/gridRowsSelector");
var _gridEditingSelectors = require("../hooks/features/editing/gridEditingSelectors");
var _gridRowReorderSelector = require("../hooks/features/rowReorder/gridRowReorderSelector");
var _GridRowDragAndDropOverlay = require("./GridRowDragAndDropOverlay");
var _getPinnedCellOffset = require("../internals/utils/getPinnedCellOffset");
var _useGridConfiguration = require("../hooks/utils/useGridConfiguration");
var _useGridPrivateApiContext = require("../hooks/utils/useGridPrivateApiContext");
var _createSelector = require("../utils/createSelector");
var _jsxRuntime = require("react/jsx-runtime");
const _excluded = ["selected", "rowId", "row", "index", "style", "rowHeight", "className", "visibleColumns", "pinnedColumns", "offsetLeft", "columnsTotalWidth", "firstColumnIndex", "lastColumnIndex", "focusedColumnIndex", "isFirstVisible", "isLastVisible", "isNotVisible", "showBottomBorder", "scrollbarWidth", "gridHasFiller", "onClick", "onDoubleClick", "onMouseEnter", "onMouseLeave", "onMouseOut", "onMouseOver"];
const isRowReorderingEnabledSelector = (0, _createSelector.createSelector)(_gridEditingSelectors.gridEditRowsStateSelector, (editRows, {
rowReordering,
treeData
}) => {
if (!rowReordering || treeData) {
return false;
}
const isEditingRows = !(0, _isObjectEmpty.isObjectEmpty)(editRows);
return !isEditingRows;
});
const GridRow = (0, _forwardRef.forwardRef)(function GridRow(props, refProp) {
const {
selected,
rowId,
row,
index,
style: styleProp,
rowHeight,
className,
visibleColumns,
pinnedColumns,
offsetLeft,
columnsTotalWidth,
firstColumnIndex,
lastColumnIndex,
focusedColumnIndex,
isFirstVisible,
isLastVisible,
isNotVisible,
showBottomBorder,
scrollbarWidth,
gridHasFiller,
onClick,
onDoubleClick,
onMouseEnter,
onMouseLeave,
onMouseOut,
onMouseOver
} = props,
other = (0, _objectWithoutPropertiesLoose2.default)(props, _excluded);
const apiRef = (0, _useGridPrivateApiContext.useGridPrivateApiContext)();
const configuration = (0, _useGridConfiguration.useGridConfiguration)();
const ref = React.useRef(null);
const rootProps = (0, _useGridRootProps.useGridRootProps)();
const currentPage = (0, _useGridVisibleRows.useGridVisibleRows)(apiRef, rootProps);
const sortModel = (0, _useGridSelector.useGridSelector)(apiRef, _gridSortingSelector.gridSortModelSelector);
const columnPositions = (0, _useGridSelector.useGridSelector)(apiRef, _gridColumnsSelector.gridColumnPositionsSelector);
const rowReordering = rootProps.rowReordering;
const treeData = rootProps.treeData;
const isRowReorderingEnabled = (0, _useGridSelector.useGridSelector)(apiRef, isRowReorderingEnabledSelector, {
rowReordering,
treeData
});
const isRowDragActive = (0, _useGridSelector.useGridSelector)(apiRef, _gridRowReorderSelector.gridIsRowDragActiveSelector);
const handleRef = (0, _useForkRef.default)(ref, refProp);
const rowNode = (0, _gridRowsSelector.gridRowNodeSelector)(apiRef, rowId);
const editing = (0, _useGridSelector.useGridSelector)(apiRef, _gridEditingSelectors.gridRowIsEditingSelector, {
rowId,
editMode: rootProps.editMode
});
const editable = rootProps.editMode === _gridEditRowModel.GridEditModes.Row;
const hasFocusCell = focusedColumnIndex !== undefined;
const hasVirtualFocusCellLeft = hasFocusCell && focusedColumnIndex >= pinnedColumns.left.length && focusedColumnIndex < firstColumnIndex;
const hasVirtualFocusCellRight = hasFocusCell && focusedColumnIndex < visibleColumns.length - pinnedColumns.right.length && focusedColumnIndex >= lastColumnIndex;
const classes = (0, _composeGridClasses.composeGridClasses)(rootProps.classes, {
root: ['row', selected && 'selected', editable && 'row--editable', editing && 'row--editing', isFirstVisible && 'row--firstVisible', isLastVisible && 'row--lastVisible', showBottomBorder && 'row--borderBottom', rowHeight === 'auto' && 'row--dynamicHeight']
});
const getRowAriaAttributes = configuration.hooks.useGridRowAriaAttributes();
React.useLayoutEffect(() => {
if (currentPage.range) {
const rowIndex = apiRef.current.getRowIndexRelativeToVisibleRows(rowId);
// Pinned rows are not part of the visible rows
if (rowIndex !== undefined) {
apiRef.current.unstable_setLastMeasuredRowIndex(rowIndex);
}
}
if (ref.current && rowHeight === 'auto') {
return apiRef.current.observeRowHeight(ref.current, rowId);
}
return undefined;
}, [apiRef, currentPage.range, rowHeight, rowId]);
const publish = React.useCallback((eventName, propHandler) => event => {
// Ignore portal
if ((0, _domUtils.isEventTargetInPortal)(event)) {
return;
}
// The row might have been deleted
if (!apiRef.current.getRow(rowId)) {
return;
}
apiRef.current.publishEvent(eventName, apiRef.current.getRowParams(rowId), event);
if (propHandler) {
propHandler(event);
}
}, [apiRef, rowId]);
const publishClick = React.useCallback(event => {
const cell = (0, _domUtils.findParentElementFromClassName)(event.target, _gridClasses.gridClasses.cell);
const field = cell?.getAttribute('data-field');
// Check if the field is available because the cell that fills the empty
// space of the row has no field.
if (field) {
// User clicked in the checkbox added by checkboxSelection
if (field === _gridCheckboxSelectionColDef.GRID_CHECKBOX_SELECTION_COL_DEF.field) {
return;
}
// User opened a detail panel
if (field === _constants.GRID_DETAIL_PANEL_TOGGLE_FIELD) {
return;
}
// User reorders a row
if (field === '__reorder__') {
return;
}
// User is editing a cell
if (apiRef.current.getCellMode(rowId, field) === _gridEditRowModel.GridCellModes.Edit) {
return;
}
// User clicked a button from the "actions" column type
const column = apiRef.current.getColumn(field);
if (column?.type === _gridActionsColDef.GRID_ACTIONS_COLUMN_TYPE) {
return;
}
}
publish('rowClick', onClick)(event);
}, [apiRef, onClick, publish, rowId]);
const {
slots,
slotProps,
disableColumnReorder
} = rootProps;
const heightEntry = (0, _useGridSelector.useGridSelector)(apiRef, () => (0, _extends2.default)({}, apiRef.current.getRowHeightEntry(rowId)), undefined, _useGridSelector.objectShallowCompare);
const style = React.useMemo(() => {
if (isNotVisible) {
return {
opacity: 0,
width: 0,
height: 0
};
}
const rowStyle = (0, _extends2.default)({}, styleProp, {
maxHeight: rowHeight === 'auto' ? 'none' : rowHeight,
// max-height doesn't support "auto"
minHeight: rowHeight,
'--height': typeof rowHeight === 'number' ? `${rowHeight}px` : rowHeight
});
if (heightEntry.spacingTop) {
const property = rootProps.rowSpacingType === 'border' ? 'borderTopWidth' : 'marginTop';
rowStyle[property] = heightEntry.spacingTop;
}
if (heightEntry.spacingBottom) {
const property = rootProps.rowSpacingType === 'border' ? 'borderBottomWidth' : 'marginBottom';
let propertyValue = rowStyle[property];
// avoid overriding existing value
if (typeof propertyValue !== 'number') {
propertyValue = parseInt(propertyValue || '0', 10);
}
propertyValue += heightEntry.spacingBottom;
rowStyle[property] = propertyValue;
}
return rowStyle;
}, [isNotVisible, rowHeight, styleProp, heightEntry.spacingTop, heightEntry.spacingBottom, rootProps.rowSpacingType]);
// HACK: Sometimes, the rowNode has already been removed from the state but the row is still rendered.
if (!rowNode) {
return null;
}
const rowClassNames = apiRef.current.unstable_applyPipeProcessors('rowClassName', [], rowId);
const ariaAttributes = getRowAriaAttributes(rowNode, index);
if (typeof rootProps.getRowClassName === 'function') {
const indexRelativeToCurrentPage = index - (currentPage.range?.firstRowIndex || 0);
const rowParams = (0, _extends2.default)({}, apiRef.current.getRowParams(rowId), {
isFirstVisible: indexRelativeToCurrentPage === 0,
isLastVisible: indexRelativeToCurrentPage === currentPage.rows.length - 1,
indexRelativeToCurrentPage
});
rowClassNames.push(rootProps.getRowClassName(rowParams));
}
const getCell = (column, indexInSection, indexRelativeToAllColumns, sectionLength, pinnedPosition = _constants.PinnedColumnPosition.NONE) => {
const cellColSpanInfo = apiRef.current.unstable_getCellColSpanInfo(rowId, indexRelativeToAllColumns);
if (cellColSpanInfo?.spannedByColSpan) {
return null;
}
const width = cellColSpanInfo?.cellProps.width ?? column.computedWidth;
const colSpan = cellColSpanInfo?.cellProps.colSpan ?? 1;
const pinnedOffset = (0, _getPinnedCellOffset.getPinnedCellOffset)(pinnedPosition, column.computedWidth, indexRelativeToAllColumns, columnPositions, columnsTotalWidth, scrollbarWidth);
if (rowNode.type === 'skeletonRow') {
return /*#__PURE__*/(0, _jsxRuntime.jsx)(slots.skeletonCell, {
type: column.type,
width: width,
height: rowHeight,
field: column.field,
align: column.align,
skeletonProps: {
style: {
marginLeft: indexRelativeToAllColumns === 0 && rowNode.depth > 0 ?
// TODO: Make the factor configurable
_cssVariables.vars.spacing(rowNode.depth * 2) : '0px'
}
}
}, column.field);
}
// when the cell is a reorder cell we are not allowing to reorder the col
// fixes https://github.com/mui/mui-x/issues/11126
const isReorderCell = column.field === '__reorder__';
const canReorderColumn = !(disableColumnReorder || column.disableReorder);
const canReorderRow = isRowReorderingEnabled && !sortModel.length;
const disableDragEvents = !(canReorderColumn || isReorderCell && canReorderRow || isRowDragActive);
const cellIsNotVisible = pinnedPosition === _constants.PinnedColumnPosition.VIRTUAL;
const showLeftBorder = (0, _cellBorderUtils.shouldCellShowLeftBorder)(pinnedPosition, indexInSection, rootProps.showCellVerticalBorder, rootProps.pinnedColumnsSectionSeparator);
const showRightBorder = (0, _cellBorderUtils.shouldCellShowRightBorder)(pinnedPosition, indexInSection, sectionLength, rootProps.showCellVerticalBorder, gridHasFiller, rootProps.pinnedColumnsSectionSeparator);
return /*#__PURE__*/(0, _jsxRuntime.jsx)(slots.cell, (0, _extends2.default)({
column: column,
width: width,
rowId: rowId,
align: column.align || 'left',
colIndex: indexRelativeToAllColumns,
colSpan: colSpan,
disableDragEvents: disableDragEvents,
isNotVisible: cellIsNotVisible,
pinnedOffset: pinnedOffset,
pinnedPosition: pinnedPosition,
showLeftBorder: showLeftBorder,
showRightBorder: showRightBorder,
row: row,
rowNode: rowNode
}, slotProps?.cell), column.field);
};
if (process.env.NODE_ENV !== "production") getCell.displayName = "getCell";
const leftCells = pinnedColumns.left.map((column, i) => {
const indexRelativeToAllColumns = i;
return getCell(column, i, indexRelativeToAllColumns, pinnedColumns.left.length, _constants.PinnedColumnPosition.LEFT);
});
const rightCells = pinnedColumns.right.map((column, i) => {
const indexRelativeToAllColumns = visibleColumns.length - pinnedColumns.right.length + i;
return getCell(column, i, indexRelativeToAllColumns, pinnedColumns.right.length, _constants.PinnedColumnPosition.RIGHT);
});
const middleColumnsLength = visibleColumns.length - pinnedColumns.left.length - pinnedColumns.right.length;
const cells = [];
if (hasVirtualFocusCellLeft) {
cells.push(getCell(visibleColumns[focusedColumnIndex], focusedColumnIndex - pinnedColumns.left.length, focusedColumnIndex, middleColumnsLength, _constants.PinnedColumnPosition.VIRTUAL));
}
for (let i = firstColumnIndex; i < lastColumnIndex; i += 1) {
const column = visibleColumns[i];
const indexInSection = i - pinnedColumns.left.length;
if (!column) {
continue;
}
cells.push(getCell(column, indexInSection, i, middleColumnsLength));
}
if (hasVirtualFocusCellRight) {
cells.push(getCell(visibleColumns[focusedColumnIndex], focusedColumnIndex - pinnedColumns.left.length, focusedColumnIndex, middleColumnsLength, _constants.PinnedColumnPosition.VIRTUAL));
}
const eventHandlers = row ? {
onClick: publishClick,
onDoubleClick: publish('rowDoubleClick', onDoubleClick),
onMouseEnter: publish('rowMouseEnter', onMouseEnter),
onMouseLeave: publish('rowMouseLeave', onMouseLeave),
onMouseOut: publish('rowMouseOut', onMouseOut),
onMouseOver: publish('rowMouseOver', onMouseOver)
} : null;
return /*#__PURE__*/(0, _jsxRuntime.jsxs)("div", (0, _extends2.default)({
"data-id": rowId,
"data-rowindex": index,
role: "row",
className: (0, _clsx.default)(...rowClassNames, classes.root, className),
style: style
}, ariaAttributes, eventHandlers, other, {
ref: handleRef,
children: [leftCells, /*#__PURE__*/(0, _jsxRuntime.jsx)("div", {
role: "none",
className: _gridClasses.gridClasses.cellOffsetLeft,
style: {
width: offsetLeft
}
}), cells, /*#__PURE__*/(0, _jsxRuntime.jsx)("div", {
role: "none",
className: (0, _clsx.default)(_gridClasses.gridClasses.cell, _gridClasses.gridClasses.cellEmpty)
}), rightCells, /*#__PURE__*/(0, _jsxRuntime.jsx)(_GridRowDragAndDropOverlay.GridRowDragAndDropOverlay, {
rowId: rowId
})]
}));
});
if (process.env.NODE_ENV !== "production") GridRow.displayName = "GridRow";
process.env.NODE_ENV !== "production" ? GridRow.propTypes /* remove-proptypes */ = {
// ----------------------------- Warning --------------------------------
// | These PropTypes are generated from the TypeScript type definitions |
// | To update them edit the TypeScript types and run "pnpm proptypes" |
// ----------------------------------------------------------------------
columnsTotalWidth: _propTypes.default.number.isRequired,
firstColumnIndex: _propTypes.default.number.isRequired,
/**
* Determines which cell has focus.
* If `null`, no cell in this row has focus.
*/
focusedColumnIndex: _propTypes.default.number,
gridHasFiller: _propTypes.default.bool.isRequired,
/**
* Index of the row in the whole sorted and filtered dataset.
* If some rows above have expanded children, this index also take those children into account.
*/
index: _propTypes.default.number.isRequired,
isFirstVisible: _propTypes.default.bool.isRequired,
isLastVisible: _propTypes.default.bool.isRequired,
isNotVisible: _propTypes.default.bool.isRequired,
lastColumnIndex: _propTypes.default.number.isRequired,
offsetLeft: _propTypes.default.number.isRequired,
onClick: _propTypes.default.func,
onDoubleClick: _propTypes.default.func,
onMouseEnter: _propTypes.default.func,
onMouseLeave: _propTypes.default.func,
pinnedColumns: _propTypes.default.object.isRequired,
row: _propTypes.default.object.isRequired,
rowHeight: _propTypes.default.oneOfType([_propTypes.default.oneOf(['auto']), _propTypes.default.number]).isRequired,
rowId: _propTypes.default.oneOfType([_propTypes.default.number, _propTypes.default.string]).isRequired,
scrollbarWidth: _propTypes.default.number.isRequired,
selected: _propTypes.default.bool.isRequired,
showBottomBorder: _propTypes.default.bool.isRequired,
visibleColumns: _propTypes.default.arrayOf(_propTypes.default.object).isRequired
} : void 0;
const MemoizedGridRow = exports.GridRow = (0, _fastMemo.fastMemo)(GridRow);
+363
View File
@@ -0,0 +1,363 @@
'use client';
import _extends from "@babel/runtime/helpers/esm/extends";
import _objectWithoutPropertiesLoose from "@babel/runtime/helpers/esm/objectWithoutPropertiesLoose";
const _excluded = ["selected", "rowId", "row", "index", "style", "rowHeight", "className", "visibleColumns", "pinnedColumns", "offsetLeft", "columnsTotalWidth", "firstColumnIndex", "lastColumnIndex", "focusedColumnIndex", "isFirstVisible", "isLastVisible", "isNotVisible", "showBottomBorder", "scrollbarWidth", "gridHasFiller", "onClick", "onDoubleClick", "onMouseEnter", "onMouseLeave", "onMouseOut", "onMouseOver"];
import * as React from 'react';
import PropTypes from 'prop-types';
import clsx from 'clsx';
import useForkRef from '@mui/utils/useForkRef';
import { fastMemo } from '@mui/x-internals/fastMemo';
import { forwardRef } from '@mui/x-internals/forwardRef';
import { isObjectEmpty } from '@mui/x-internals/isObjectEmpty';
import { vars } from "../constants/cssVariables.mjs";
import { GridEditModes, GridCellModes } from "../models/gridEditRowModel.mjs";
import { gridClasses } from "../constants/gridClasses.mjs";
import { composeGridClasses } from "../utils/composeGridClasses.mjs";
import { useGridRootProps } from "../hooks/utils/useGridRootProps.mjs";
import { shouldCellShowLeftBorder, shouldCellShowRightBorder } from "../utils/cellBorderUtils.mjs";
import { gridColumnPositionsSelector } from "../hooks/features/columns/gridColumnsSelector.mjs";
import { useGridSelector, objectShallowCompare } from "../hooks/utils/useGridSelector.mjs";
import { useGridVisibleRows } from "../hooks/utils/useGridVisibleRows.mjs";
import { findParentElementFromClassName, isEventTargetInPortal } from "../utils/domUtils.mjs";
import { GRID_CHECKBOX_SELECTION_COL_DEF } from "../colDef/gridCheckboxSelectionColDef.mjs";
import { GRID_ACTIONS_COLUMN_TYPE } from "../colDef/gridActionsColDef.mjs";
import { GRID_DETAIL_PANEL_TOGGLE_FIELD, PinnedColumnPosition } from "../internals/constants.mjs";
import { gridSortModelSelector } from "../hooks/features/sorting/gridSortingSelector.mjs";
import { gridRowNodeSelector } from "../hooks/features/rows/gridRowsSelector.mjs";
import { gridEditRowsStateSelector, gridRowIsEditingSelector } from "../hooks/features/editing/gridEditingSelectors.mjs";
import { gridIsRowDragActiveSelector } from "../hooks/features/rowReorder/gridRowReorderSelector.mjs";
import { GridRowDragAndDropOverlay } from "./GridRowDragAndDropOverlay.mjs";
import { getPinnedCellOffset } from "../internals/utils/getPinnedCellOffset.mjs";
import { useGridConfiguration } from "../hooks/utils/useGridConfiguration.mjs";
import { useGridPrivateApiContext } from "../hooks/utils/useGridPrivateApiContext.mjs";
import { createSelector } from "../utils/createSelector.mjs";
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
const isRowReorderingEnabledSelector = createSelector(gridEditRowsStateSelector, (editRows, {
rowReordering,
treeData
}) => {
if (!rowReordering || treeData) {
return false;
}
const isEditingRows = !isObjectEmpty(editRows);
return !isEditingRows;
});
const GridRow = forwardRef(function GridRow(props, refProp) {
const {
selected,
rowId,
row,
index,
style: styleProp,
rowHeight,
className,
visibleColumns,
pinnedColumns,
offsetLeft,
columnsTotalWidth,
firstColumnIndex,
lastColumnIndex,
focusedColumnIndex,
isFirstVisible,
isLastVisible,
isNotVisible,
showBottomBorder,
scrollbarWidth,
gridHasFiller,
onClick,
onDoubleClick,
onMouseEnter,
onMouseLeave,
onMouseOut,
onMouseOver
} = props,
other = _objectWithoutPropertiesLoose(props, _excluded);
const apiRef = useGridPrivateApiContext();
const configuration = useGridConfiguration();
const ref = React.useRef(null);
const rootProps = useGridRootProps();
const currentPage = useGridVisibleRows(apiRef, rootProps);
const sortModel = useGridSelector(apiRef, gridSortModelSelector);
const columnPositions = useGridSelector(apiRef, gridColumnPositionsSelector);
const rowReordering = rootProps.rowReordering;
const treeData = rootProps.treeData;
const isRowReorderingEnabled = useGridSelector(apiRef, isRowReorderingEnabledSelector, {
rowReordering,
treeData
});
const isRowDragActive = useGridSelector(apiRef, gridIsRowDragActiveSelector);
const handleRef = useForkRef(ref, refProp);
const rowNode = gridRowNodeSelector(apiRef, rowId);
const editing = useGridSelector(apiRef, gridRowIsEditingSelector, {
rowId,
editMode: rootProps.editMode
});
const editable = rootProps.editMode === GridEditModes.Row;
const hasFocusCell = focusedColumnIndex !== undefined;
const hasVirtualFocusCellLeft = hasFocusCell && focusedColumnIndex >= pinnedColumns.left.length && focusedColumnIndex < firstColumnIndex;
const hasVirtualFocusCellRight = hasFocusCell && focusedColumnIndex < visibleColumns.length - pinnedColumns.right.length && focusedColumnIndex >= lastColumnIndex;
const classes = composeGridClasses(rootProps.classes, {
root: ['row', selected && 'selected', editable && 'row--editable', editing && 'row--editing', isFirstVisible && 'row--firstVisible', isLastVisible && 'row--lastVisible', showBottomBorder && 'row--borderBottom', rowHeight === 'auto' && 'row--dynamicHeight']
});
const getRowAriaAttributes = configuration.hooks.useGridRowAriaAttributes();
React.useLayoutEffect(() => {
if (currentPage.range) {
const rowIndex = apiRef.current.getRowIndexRelativeToVisibleRows(rowId);
// Pinned rows are not part of the visible rows
if (rowIndex !== undefined) {
apiRef.current.unstable_setLastMeasuredRowIndex(rowIndex);
}
}
if (ref.current && rowHeight === 'auto') {
return apiRef.current.observeRowHeight(ref.current, rowId);
}
return undefined;
}, [apiRef, currentPage.range, rowHeight, rowId]);
const publish = React.useCallback((eventName, propHandler) => event => {
// Ignore portal
if (isEventTargetInPortal(event)) {
return;
}
// The row might have been deleted
if (!apiRef.current.getRow(rowId)) {
return;
}
apiRef.current.publishEvent(eventName, apiRef.current.getRowParams(rowId), event);
if (propHandler) {
propHandler(event);
}
}, [apiRef, rowId]);
const publishClick = React.useCallback(event => {
const cell = findParentElementFromClassName(event.target, gridClasses.cell);
const field = cell?.getAttribute('data-field');
// Check if the field is available because the cell that fills the empty
// space of the row has no field.
if (field) {
// User clicked in the checkbox added by checkboxSelection
if (field === GRID_CHECKBOX_SELECTION_COL_DEF.field) {
return;
}
// User opened a detail panel
if (field === GRID_DETAIL_PANEL_TOGGLE_FIELD) {
return;
}
// User reorders a row
if (field === '__reorder__') {
return;
}
// User is editing a cell
if (apiRef.current.getCellMode(rowId, field) === GridCellModes.Edit) {
return;
}
// User clicked a button from the "actions" column type
const column = apiRef.current.getColumn(field);
if (column?.type === GRID_ACTIONS_COLUMN_TYPE) {
return;
}
}
publish('rowClick', onClick)(event);
}, [apiRef, onClick, publish, rowId]);
const {
slots,
slotProps,
disableColumnReorder
} = rootProps;
const heightEntry = useGridSelector(apiRef, () => _extends({}, apiRef.current.getRowHeightEntry(rowId)), undefined, objectShallowCompare);
const style = React.useMemo(() => {
if (isNotVisible) {
return {
opacity: 0,
width: 0,
height: 0
};
}
const rowStyle = _extends({}, styleProp, {
maxHeight: rowHeight === 'auto' ? 'none' : rowHeight,
// max-height doesn't support "auto"
minHeight: rowHeight,
'--height': typeof rowHeight === 'number' ? `${rowHeight}px` : rowHeight
});
if (heightEntry.spacingTop) {
const property = rootProps.rowSpacingType === 'border' ? 'borderTopWidth' : 'marginTop';
rowStyle[property] = heightEntry.spacingTop;
}
if (heightEntry.spacingBottom) {
const property = rootProps.rowSpacingType === 'border' ? 'borderBottomWidth' : 'marginBottom';
let propertyValue = rowStyle[property];
// avoid overriding existing value
if (typeof propertyValue !== 'number') {
propertyValue = parseInt(propertyValue || '0', 10);
}
propertyValue += heightEntry.spacingBottom;
rowStyle[property] = propertyValue;
}
return rowStyle;
}, [isNotVisible, rowHeight, styleProp, heightEntry.spacingTop, heightEntry.spacingBottom, rootProps.rowSpacingType]);
// HACK: Sometimes, the rowNode has already been removed from the state but the row is still rendered.
if (!rowNode) {
return null;
}
const rowClassNames = apiRef.current.unstable_applyPipeProcessors('rowClassName', [], rowId);
const ariaAttributes = getRowAriaAttributes(rowNode, index);
if (typeof rootProps.getRowClassName === 'function') {
const indexRelativeToCurrentPage = index - (currentPage.range?.firstRowIndex || 0);
const rowParams = _extends({}, apiRef.current.getRowParams(rowId), {
isFirstVisible: indexRelativeToCurrentPage === 0,
isLastVisible: indexRelativeToCurrentPage === currentPage.rows.length - 1,
indexRelativeToCurrentPage
});
rowClassNames.push(rootProps.getRowClassName(rowParams));
}
const getCell = (column, indexInSection, indexRelativeToAllColumns, sectionLength, pinnedPosition = PinnedColumnPosition.NONE) => {
const cellColSpanInfo = apiRef.current.unstable_getCellColSpanInfo(rowId, indexRelativeToAllColumns);
if (cellColSpanInfo?.spannedByColSpan) {
return null;
}
const width = cellColSpanInfo?.cellProps.width ?? column.computedWidth;
const colSpan = cellColSpanInfo?.cellProps.colSpan ?? 1;
const pinnedOffset = getPinnedCellOffset(pinnedPosition, column.computedWidth, indexRelativeToAllColumns, columnPositions, columnsTotalWidth, scrollbarWidth);
if (rowNode.type === 'skeletonRow') {
return /*#__PURE__*/_jsx(slots.skeletonCell, {
type: column.type,
width: width,
height: rowHeight,
field: column.field,
align: column.align,
skeletonProps: {
style: {
marginLeft: indexRelativeToAllColumns === 0 && rowNode.depth > 0 ?
// TODO: Make the factor configurable
vars.spacing(rowNode.depth * 2) : '0px'
}
}
}, column.field);
}
// when the cell is a reorder cell we are not allowing to reorder the col
// fixes https://github.com/mui/mui-x/issues/11126
const isReorderCell = column.field === '__reorder__';
const canReorderColumn = !(disableColumnReorder || column.disableReorder);
const canReorderRow = isRowReorderingEnabled && !sortModel.length;
const disableDragEvents = !(canReorderColumn || isReorderCell && canReorderRow || isRowDragActive);
const cellIsNotVisible = pinnedPosition === PinnedColumnPosition.VIRTUAL;
const showLeftBorder = shouldCellShowLeftBorder(pinnedPosition, indexInSection, rootProps.showCellVerticalBorder, rootProps.pinnedColumnsSectionSeparator);
const showRightBorder = shouldCellShowRightBorder(pinnedPosition, indexInSection, sectionLength, rootProps.showCellVerticalBorder, gridHasFiller, rootProps.pinnedColumnsSectionSeparator);
return /*#__PURE__*/_jsx(slots.cell, _extends({
column: column,
width: width,
rowId: rowId,
align: column.align || 'left',
colIndex: indexRelativeToAllColumns,
colSpan: colSpan,
disableDragEvents: disableDragEvents,
isNotVisible: cellIsNotVisible,
pinnedOffset: pinnedOffset,
pinnedPosition: pinnedPosition,
showLeftBorder: showLeftBorder,
showRightBorder: showRightBorder,
row: row,
rowNode: rowNode
}, slotProps?.cell), column.field);
};
if (process.env.NODE_ENV !== "production") getCell.displayName = "getCell";
const leftCells = pinnedColumns.left.map((column, i) => {
const indexRelativeToAllColumns = i;
return getCell(column, i, indexRelativeToAllColumns, pinnedColumns.left.length, PinnedColumnPosition.LEFT);
});
const rightCells = pinnedColumns.right.map((column, i) => {
const indexRelativeToAllColumns = visibleColumns.length - pinnedColumns.right.length + i;
return getCell(column, i, indexRelativeToAllColumns, pinnedColumns.right.length, PinnedColumnPosition.RIGHT);
});
const middleColumnsLength = visibleColumns.length - pinnedColumns.left.length - pinnedColumns.right.length;
const cells = [];
if (hasVirtualFocusCellLeft) {
cells.push(getCell(visibleColumns[focusedColumnIndex], focusedColumnIndex - pinnedColumns.left.length, focusedColumnIndex, middleColumnsLength, PinnedColumnPosition.VIRTUAL));
}
for (let i = firstColumnIndex; i < lastColumnIndex; i += 1) {
const column = visibleColumns[i];
const indexInSection = i - pinnedColumns.left.length;
if (!column) {
continue;
}
cells.push(getCell(column, indexInSection, i, middleColumnsLength));
}
if (hasVirtualFocusCellRight) {
cells.push(getCell(visibleColumns[focusedColumnIndex], focusedColumnIndex - pinnedColumns.left.length, focusedColumnIndex, middleColumnsLength, PinnedColumnPosition.VIRTUAL));
}
const eventHandlers = row ? {
onClick: publishClick,
onDoubleClick: publish('rowDoubleClick', onDoubleClick),
onMouseEnter: publish('rowMouseEnter', onMouseEnter),
onMouseLeave: publish('rowMouseLeave', onMouseLeave),
onMouseOut: publish('rowMouseOut', onMouseOut),
onMouseOver: publish('rowMouseOver', onMouseOver)
} : null;
return /*#__PURE__*/_jsxs("div", _extends({
"data-id": rowId,
"data-rowindex": index,
role: "row",
className: clsx(...rowClassNames, classes.root, className),
style: style
}, ariaAttributes, eventHandlers, other, {
ref: handleRef,
children: [leftCells, /*#__PURE__*/_jsx("div", {
role: "none",
className: gridClasses.cellOffsetLeft,
style: {
width: offsetLeft
}
}), cells, /*#__PURE__*/_jsx("div", {
role: "none",
className: clsx(gridClasses.cell, gridClasses.cellEmpty)
}), rightCells, /*#__PURE__*/_jsx(GridRowDragAndDropOverlay, {
rowId: rowId
})]
}));
});
if (process.env.NODE_ENV !== "production") GridRow.displayName = "GridRow";
process.env.NODE_ENV !== "production" ? GridRow.propTypes /* remove-proptypes */ = {
// ----------------------------- Warning --------------------------------
// | These PropTypes are generated from the TypeScript type definitions |
// | To update them edit the TypeScript types and run "pnpm proptypes" |
// ----------------------------------------------------------------------
columnsTotalWidth: PropTypes.number.isRequired,
firstColumnIndex: PropTypes.number.isRequired,
/**
* Determines which cell has focus.
* If `null`, no cell in this row has focus.
*/
focusedColumnIndex: PropTypes.number,
gridHasFiller: PropTypes.bool.isRequired,
/**
* Index of the row in the whole sorted and filtered dataset.
* If some rows above have expanded children, this index also take those children into account.
*/
index: PropTypes.number.isRequired,
isFirstVisible: PropTypes.bool.isRequired,
isLastVisible: PropTypes.bool.isRequired,
isNotVisible: PropTypes.bool.isRequired,
lastColumnIndex: PropTypes.number.isRequired,
offsetLeft: PropTypes.number.isRequired,
onClick: PropTypes.func,
onDoubleClick: PropTypes.func,
onMouseEnter: PropTypes.func,
onMouseLeave: PropTypes.func,
pinnedColumns: PropTypes.object.isRequired,
row: PropTypes.object.isRequired,
rowHeight: PropTypes.oneOfType([PropTypes.oneOf(['auto']), PropTypes.number]).isRequired,
rowId: PropTypes.oneOfType([PropTypes.number, PropTypes.string]).isRequired,
scrollbarWidth: PropTypes.number.isRequired,
selected: PropTypes.bool.isRequired,
showBottomBorder: PropTypes.bool.isRequired,
visibleColumns: PropTypes.arrayOf(PropTypes.object).isRequired
} : void 0;
const MemoizedGridRow = fastMemo(GridRow);
export { MemoizedGridRow as GridRow };
+13
View File
@@ -0,0 +1,13 @@
import * as React from 'react';
import type { SxProps, Theme } from '@mui/system';
interface RowCountProps {
rowCount: number;
visibleRowCount: number;
}
export type GridRowCountProps = React.HTMLAttributes<HTMLDivElement> & RowCountProps & {
sx?: SxProps<Theme>;
};
declare const GridRowCount: React.ForwardRefExoticComponent<GridRowCountProps> | React.ForwardRefExoticComponent<React.HTMLAttributes<HTMLDivElement> & RowCountProps & {
sx?: SxProps<Theme>;
} & React.RefAttributes<HTMLDivElement>>;
export { GridRowCount };
+13
View File
@@ -0,0 +1,13 @@
import * as React from 'react';
import type { SxProps, Theme } from '@mui/system';
interface RowCountProps {
rowCount: number;
visibleRowCount: number;
}
export type GridRowCountProps = React.HTMLAttributes<HTMLDivElement> & RowCountProps & {
sx?: SxProps<Theme>;
};
declare const GridRowCount: React.ForwardRefExoticComponent<GridRowCountProps> | React.ForwardRefExoticComponent<React.HTMLAttributes<HTMLDivElement> & RowCountProps & {
sx?: SxProps<Theme>;
} & React.RefAttributes<HTMLDivElement>>;
export { GridRowCount };
+72
View File
@@ -0,0 +1,72 @@
"use strict";
'use client';
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard").default;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.GridRowCount = void 0;
var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
var _objectWithoutPropertiesLoose2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutPropertiesLoose"));
var React = _interopRequireWildcard(require("react"));
var _propTypes = _interopRequireDefault(require("prop-types"));
var _clsx = _interopRequireDefault(require("clsx"));
var _composeClasses = _interopRequireDefault(require("@mui/utils/composeClasses"));
var _system = require("@mui/system");
var _forwardRef = require("@mui/x-internals/forwardRef");
var _cssVariables = require("../constants/cssVariables");
var _useGridApiContext = require("../hooks/utils/useGridApiContext");
var _gridClasses = require("../constants/gridClasses");
var _useGridRootProps = require("../hooks/utils/useGridRootProps");
var _jsxRuntime = require("react/jsx-runtime");
const _excluded = ["className", "rowCount", "visibleRowCount"];
const useUtilityClasses = ownerState => {
const {
classes
} = ownerState;
const slots = {
root: ['rowCount']
};
return (0, _composeClasses.default)(slots, _gridClasses.getDataGridUtilityClass, classes);
};
const GridRowCountRoot = (0, _system.styled)('div', {
name: 'MuiDataGrid',
slot: 'RowCount'
})({
alignItems: 'center',
display: 'flex',
margin: _cssVariables.vars.spacing(0, 2)
});
const GridRowCount = exports.GridRowCount = (0, _forwardRef.forwardRef)(function GridRowCount(props, ref) {
const {
className,
rowCount,
visibleRowCount
} = props,
other = (0, _objectWithoutPropertiesLoose2.default)(props, _excluded);
const apiRef = (0, _useGridApiContext.useGridApiContext)();
const ownerState = (0, _useGridRootProps.useGridRootProps)();
const classes = useUtilityClasses(ownerState);
if (rowCount === 0) {
return null;
}
const text = visibleRowCount < rowCount ? apiRef.current.getLocaleText('footerTotalVisibleRows')(visibleRowCount, rowCount) : rowCount.toLocaleString();
return /*#__PURE__*/(0, _jsxRuntime.jsxs)(GridRowCountRoot, (0, _extends2.default)({
className: (0, _clsx.default)(classes.root, className),
ownerState: ownerState
}, other, {
ref: ref,
children: [apiRef.current.getLocaleText('footerTotalRows'), " ", text]
}));
});
if (process.env.NODE_ENV !== "production") GridRowCount.displayName = "GridRowCount";
process.env.NODE_ENV !== "production" ? GridRowCount.propTypes /* remove-proptypes */ = {
// ----------------------------- Warning --------------------------------
// | These PropTypes are generated from the TypeScript type definitions |
// | To update them edit the TypeScript types and run "pnpm proptypes" |
// ----------------------------------------------------------------------
rowCount: _propTypes.default.number.isRequired,
sx: _propTypes.default.oneOfType([_propTypes.default.arrayOf(_propTypes.default.oneOfType([_propTypes.default.func, _propTypes.default.object, _propTypes.default.bool])), _propTypes.default.func, _propTypes.default.object]),
visibleRowCount: _propTypes.default.number.isRequired
} : void 0;
+66
View File
@@ -0,0 +1,66 @@
'use client';
import _extends from "@babel/runtime/helpers/esm/extends";
import _objectWithoutPropertiesLoose from "@babel/runtime/helpers/esm/objectWithoutPropertiesLoose";
const _excluded = ["className", "rowCount", "visibleRowCount"];
import * as React from 'react';
import PropTypes from 'prop-types';
import clsx from 'clsx';
import composeClasses from '@mui/utils/composeClasses';
import { styled } from '@mui/system';
import { forwardRef } from '@mui/x-internals/forwardRef';
import { vars } from "../constants/cssVariables.mjs";
import { useGridApiContext } from "../hooks/utils/useGridApiContext.mjs";
import { getDataGridUtilityClass } from "../constants/gridClasses.mjs";
import { useGridRootProps } from "../hooks/utils/useGridRootProps.mjs";
import { jsxs as _jsxs } from "react/jsx-runtime";
const useUtilityClasses = ownerState => {
const {
classes
} = ownerState;
const slots = {
root: ['rowCount']
};
return composeClasses(slots, getDataGridUtilityClass, classes);
};
const GridRowCountRoot = styled('div', {
name: 'MuiDataGrid',
slot: 'RowCount'
})({
alignItems: 'center',
display: 'flex',
margin: vars.spacing(0, 2)
});
const GridRowCount = forwardRef(function GridRowCount(props, ref) {
const {
className,
rowCount,
visibleRowCount
} = props,
other = _objectWithoutPropertiesLoose(props, _excluded);
const apiRef = useGridApiContext();
const ownerState = useGridRootProps();
const classes = useUtilityClasses(ownerState);
if (rowCount === 0) {
return null;
}
const text = visibleRowCount < rowCount ? apiRef.current.getLocaleText('footerTotalVisibleRows')(visibleRowCount, rowCount) : rowCount.toLocaleString();
return /*#__PURE__*/_jsxs(GridRowCountRoot, _extends({
className: clsx(classes.root, className),
ownerState: ownerState
}, other, {
ref: ref,
children: [apiRef.current.getLocaleText('footerTotalRows'), " ", text]
}));
});
if (process.env.NODE_ENV !== "production") GridRowCount.displayName = "GridRowCount";
process.env.NODE_ENV !== "production" ? GridRowCount.propTypes /* remove-proptypes */ = {
// ----------------------------- Warning --------------------------------
// | These PropTypes are generated from the TypeScript type definitions |
// | To update them edit the TypeScript types and run "pnpm proptypes" |
// ----------------------------------------------------------------------
rowCount: PropTypes.number.isRequired,
sx: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.func, PropTypes.object, PropTypes.bool])), PropTypes.func, PropTypes.object]),
visibleRowCount: PropTypes.number.isRequired
} : void 0;
export { GridRowCount };
@@ -0,0 +1,7 @@
import * as React from 'react';
import type { GridRowId } from "../models/gridRows.mjs";
export interface GridRowDragAndDropOverlayProps {
rowId: GridRowId;
className?: string;
}
export declare const GridRowDragAndDropOverlay: React.MemoExoticComponent<(props: GridRowDragAndDropOverlayProps) => React.JSX.Element | null>;
@@ -0,0 +1,7 @@
import * as React from 'react';
import type { GridRowId } from "../models/gridRows.js";
export interface GridRowDragAndDropOverlayProps {
rowId: GridRowId;
className?: string;
}
export declare const GridRowDragAndDropOverlay: React.MemoExoticComponent<(props: GridRowDragAndDropOverlayProps) => React.JSX.Element | null>;
@@ -0,0 +1,73 @@
"use strict";
'use client';
var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard").default;
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.GridRowDragAndDropOverlay = void 0;
var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
var React = _interopRequireWildcard(require("react"));
var _styles = require("@mui/material/styles");
var _createStyled = require("@mui/system/createStyled");
var _useGridPrivateApiContext = require("../hooks/utils/useGridPrivateApiContext");
var _useGridSelector = require("../hooks/utils/useGridSelector");
var _gridRowReorderSelector = require("../hooks/features/rowReorder/gridRowReorderSelector");
var _jsxRuntime = require("react/jsx-runtime");
const GridRowDragAndDropOverlayRoot = (0, _styles.styled)('div', {
name: 'MuiDataGrid',
slot: 'RowDragOverlay',
shouldForwardProp: prop => (0, _createStyled.shouldForwardProp)(prop) && prop !== 'action'
})(({
theme,
action
}) => (0, _extends2.default)({
position: 'absolute',
left: 0,
right: 0,
top: 0,
bottom: 0,
pointerEvents: 'none',
zIndex: 1
}, action === 'above' && {
'&::before': {
pointerEvents: 'none',
content: '""',
position: 'absolute',
top: 0,
left: 0,
right: 0,
height: '2px',
backgroundColor: (theme.vars || theme).palette.primary.main
}
}, action === 'below' && {
'&::after': {
pointerEvents: 'none',
content: '""',
position: 'absolute',
bottom: '-2px',
left: 0,
right: 0,
height: '2px',
backgroundColor: (theme.vars || theme).palette.primary.main
}
}, action === 'inside' && {
backgroundColor: theme.alpha((theme.vars || theme).palette.primary.main, 0.1)
}));
const GridRowDragAndDropOverlay = exports.GridRowDragAndDropOverlay = /*#__PURE__*/React.memo(function GridRowDragAndDropOverlay(props) {
const {
rowId,
className
} = props;
const apiRef = (0, _useGridPrivateApiContext.useGridPrivateApiContext)();
const dropPosition = (0, _useGridSelector.useGridSelector)(apiRef, _gridRowReorderSelector.gridRowDropPositionSelector, rowId);
if (!dropPosition) {
return null;
}
return /*#__PURE__*/(0, _jsxRuntime.jsx)(GridRowDragAndDropOverlayRoot, {
action: dropPosition,
className: className
});
});
if (process.env.NODE_ENV !== "production") GridRowDragAndDropOverlay.displayName = "GridRowDragAndDropOverlay";
@@ -0,0 +1,66 @@
'use client';
import _extends from "@babel/runtime/helpers/esm/extends";
import * as React from 'react';
import { styled } from '@mui/material/styles';
import { shouldForwardProp } from '@mui/system/createStyled';
import { useGridPrivateApiContext } from "../hooks/utils/useGridPrivateApiContext.mjs";
import { useGridSelector } from "../hooks/utils/useGridSelector.mjs";
import { gridRowDropPositionSelector } from "../hooks/features/rowReorder/gridRowReorderSelector.mjs";
import { jsx as _jsx } from "react/jsx-runtime";
const GridRowDragAndDropOverlayRoot = styled('div', {
name: 'MuiDataGrid',
slot: 'RowDragOverlay',
shouldForwardProp: prop => shouldForwardProp(prop) && prop !== 'action'
})(({
theme,
action
}) => _extends({
position: 'absolute',
left: 0,
right: 0,
top: 0,
bottom: 0,
pointerEvents: 'none',
zIndex: 1
}, action === 'above' && {
'&::before': {
pointerEvents: 'none',
content: '""',
position: 'absolute',
top: 0,
left: 0,
right: 0,
height: '2px',
backgroundColor: (theme.vars || theme).palette.primary.main
}
}, action === 'below' && {
'&::after': {
pointerEvents: 'none',
content: '""',
position: 'absolute',
bottom: '-2px',
left: 0,
right: 0,
height: '2px',
backgroundColor: (theme.vars || theme).palette.primary.main
}
}, action === 'inside' && {
backgroundColor: theme.alpha((theme.vars || theme).palette.primary.main, 0.1)
}));
export const GridRowDragAndDropOverlay = /*#__PURE__*/React.memo(function GridRowDragAndDropOverlay(props) {
const {
rowId,
className
} = props;
const apiRef = useGridPrivateApiContext();
const dropPosition = useGridSelector(apiRef, gridRowDropPositionSelector, rowId);
if (!dropPosition) {
return null;
}
return /*#__PURE__*/_jsx(GridRowDragAndDropOverlayRoot, {
action: dropPosition,
className: className
});
});
if (process.env.NODE_ENV !== "production") GridRowDragAndDropOverlay.displayName = "GridRowDragAndDropOverlay";
+10
View File
@@ -0,0 +1,10 @@
import * as React from 'react';
import type { RefObject } from '@mui/x-internals/types';
import type { GridScrollParams } from "../models/params/gridScrollParams.mjs";
interface ScrollAreaProps {
scrollDirection: 'left' | 'right' | 'up' | 'down';
scrollPosition: RefObject<GridScrollParams>;
}
declare function GridScrollAreaWrapper(props: ScrollAreaProps): React.JSX.Element | null;
export declare const GridScrollArea: typeof GridScrollAreaWrapper;
export {};
+10
View File
@@ -0,0 +1,10 @@
import * as React from 'react';
import type { RefObject } from '@mui/x-internals/types';
import type { GridScrollParams } from "../models/params/gridScrollParams.js";
interface ScrollAreaProps {
scrollDirection: 'left' | 'right' | 'up' | 'down';
scrollPosition: RefObject<GridScrollParams>;
}
declare function GridScrollAreaWrapper(props: ScrollAreaProps): React.JSX.Element | null;
export declare const GridScrollArea: typeof GridScrollAreaWrapper;
export {};
+261
View File
@@ -0,0 +1,261 @@
"use strict";
'use client';
/* eslint-disable @typescript-eslint/no-use-before-define */
var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard").default;
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.GridScrollArea = void 0;
var _formatErrorMessage2 = _interopRequireDefault(require("@mui/x-internals/formatErrorMessage"));
var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
var React = _interopRequireWildcard(require("react"));
var _useEventCallback = _interopRequireDefault(require("@mui/utils/useEventCallback"));
var _composeClasses = _interopRequireDefault(require("@mui/utils/composeClasses"));
var _styles = require("@mui/material/styles");
var _fastMemo = require("@mui/x-internals/fastMemo");
var _forwardRef = require("@mui/x-internals/forwardRef");
var _useGridRootProps = require("../hooks/utils/useGridRootProps");
var _constants = require("../constants");
var _useGridApiContext = require("../hooks/utils/useGridApiContext");
var _useGridEvent = require("../hooks/utils/useGridEvent");
var _useGridSelector = require("../hooks/utils/useGridSelector");
var _gridDimensionsSelectors = require("../hooks/features/dimensions/gridDimensionsSelectors");
var _densitySelector = require("../hooks/features/density/densitySelector");
var _useTimeout = require("../hooks/utils/useTimeout");
var _gridColumnsUtils = require("../hooks/features/columns/gridColumnsUtils");
var _createSelector = require("../utils/createSelector");
var _gridRowsMetaSelector = require("../hooks/features/rows/gridRowsMetaSelector");
var _jsxRuntime = require("react/jsx-runtime");
const CLIFF = 1;
const SLOP = 1.5;
const useUtilityClasses = ownerState => {
const {
scrollDirection,
classes
} = ownerState;
const slots = {
root: ['scrollArea', `scrollArea--${scrollDirection}`]
};
return (0, _composeClasses.default)(slots, _constants.getDataGridUtilityClass, classes);
};
const GridScrollAreaRawRoot = (0, _styles.styled)('div', {
name: 'MuiDataGrid',
slot: 'ScrollArea',
overridesResolver: (props, styles) => {
const {
ownerState
} = props;
return [styles.scrollArea, styles[`scrollArea--${ownerState.scrollDirection}`]];
}
})(() => ({
position: 'absolute',
zIndex: 101,
// Horizontal scroll areas
[`&.${_constants.gridClasses['scrollArea--left']}`]: {
top: 0,
left: 0,
width: 20,
bottom: 0
},
[`&.${_constants.gridClasses['scrollArea--right']}`]: {
top: 0,
right: 0,
width: 20,
bottom: 0
},
// Vertical scroll areas
[`&.${_constants.gridClasses['scrollArea--up']}`]: {
top: 0,
left: 0,
right: 0,
height: 20
},
[`&.${_constants.gridClasses['scrollArea--down']}`]: {
bottom: 0,
left: 0,
right: 0,
height: 20
}
}));
const offsetSelector = (0, _createSelector.createSelector)(_gridDimensionsSelectors.gridDimensionsSelector, (dimensions, direction) => {
if (direction === 'left') {
return dimensions.leftPinnedWidth;
}
if (direction === 'right') {
return dimensions.rightPinnedWidth + (dimensions.hasScrollX ? dimensions.scrollbarSize : 0);
}
// For vertical scroll areas, we don't need horizontal offset
return 0;
});
function GridScrollAreaWrapper(props) {
const apiRef = (0, _useGridApiContext.useGridApiContext)();
const [dragDirection, setDragDirection] = React.useState('none');
// Listen for both column and row drag events
(0, _useGridEvent.useGridEvent)(apiRef, 'columnHeaderDragStart', () => setDragDirection('horizontal'));
(0, _useGridEvent.useGridEvent)(apiRef, 'columnHeaderDragEnd', () => setDragDirection('none'));
(0, _useGridEvent.useGridEvent)(apiRef, 'rowDragStart', () => setDragDirection('vertical'));
(0, _useGridEvent.useGridEvent)(apiRef, 'rowDragEnd', () => setDragDirection('none'));
if (dragDirection === 'none') {
return null;
}
if (dragDirection === 'horizontal') {
return /*#__PURE__*/(0, _jsxRuntime.jsx)(GridHorizontalScrollAreaContent, (0, _extends2.default)({}, props));
}
return /*#__PURE__*/(0, _jsxRuntime.jsx)(GridVerticalScrollAreaContent, (0, _extends2.default)({}, props));
}
function GridHorizontalScrollAreaContent(props) {
const {
scrollDirection,
scrollPosition
} = props;
const rootRef = React.useRef(null);
const apiRef = (0, _useGridApiContext.useGridApiContext)();
const timeout = (0, _useTimeout.useTimeout)();
const densityFactor = (0, _useGridSelector.useGridSelector)(apiRef, _densitySelector.gridDensityFactorSelector);
const columnsTotalWidth = (0, _useGridSelector.useGridSelector)(apiRef, _gridDimensionsSelectors.gridColumnsTotalWidthSelector);
const sideOffset = (0, _useGridSelector.useGridSelector)(apiRef, offsetSelector, scrollDirection);
const getCanScrollMore = () => {
const dimensions = (0, _gridDimensionsSelectors.gridDimensionsSelector)(apiRef);
if (scrollDirection === 'left') {
// Only render if the user has not reached yet the start of the list
return scrollPosition.current.left > 0;
}
if (scrollDirection === 'right') {
// Only render if the user has not reached yet the end of the list
const maxScrollLeft = columnsTotalWidth - dimensions.viewportInnerSize.width;
return scrollPosition.current.left < maxScrollLeft;
}
return false;
};
const rootProps = (0, _useGridRootProps.useGridRootProps)();
const totalHeaderHeight = (0, _gridColumnsUtils.getTotalHeaderHeight)(apiRef, rootProps);
const headerHeight = Math.floor(rootProps.columnHeaderHeight * densityFactor);
const style = (0, _extends2.default)({
height: headerHeight,
top: totalHeaderHeight - headerHeight
}, scrollDirection === 'left' ? {
left: sideOffset
} : {}, scrollDirection === 'right' ? {
right: sideOffset
} : {});
const handleDragOver = (0, _useEventCallback.default)(event => {
let offset;
// Prevents showing the forbidden cursor
event.preventDefault();
if (scrollDirection === 'left') {
offset = event.clientX - rootRef.current.getBoundingClientRect().right;
} else if (scrollDirection === 'right') {
offset = Math.max(1, event.clientX - rootRef.current.getBoundingClientRect().left);
} else {
throw new Error(process.env.NODE_ENV !== "production" ? 'MUI X: Wrong drag direction' : (0, _formatErrorMessage2.default)(55));
}
offset = (offset - CLIFF) * SLOP + CLIFF;
// Avoid freeze and inertia.
timeout.start(0, () => {
apiRef.current.scroll({
left: scrollPosition.current.left + offset,
top: scrollPosition.current.top
});
});
});
return /*#__PURE__*/(0, _jsxRuntime.jsx)(GridScrollAreaContent, (0, _extends2.default)({}, props, {
ref: rootRef,
getCanScrollMore: getCanScrollMore,
style: style,
handleDragOver: handleDragOver
}));
}
function GridVerticalScrollAreaContent(props) {
const {
scrollDirection,
scrollPosition
} = props;
const rootRef = React.useRef(null);
const apiRef = (0, _useGridApiContext.useGridApiContext)();
const timeout = (0, _useTimeout.useTimeout)();
const rowsMeta = (0, _useGridSelector.useGridSelector)(apiRef, _gridRowsMetaSelector.gridRowsMetaSelector);
const getCanScrollMore = () => {
const dimensions = (0, _gridDimensionsSelectors.gridDimensionsSelector)(apiRef);
if (scrollDirection === 'up') {
// Only render if the user has not reached yet the top of the list
return scrollPosition.current.top > 0;
}
if (scrollDirection === 'down') {
// Only render if the user has not reached yet the bottom of the list
const totalRowsHeight = rowsMeta.currentPageTotalHeight || 0;
const maxScrollTop = totalRowsHeight - dimensions.viewportInnerSize.height - (dimensions.hasScrollX ? dimensions.scrollbarSize : 0);
return scrollPosition.current.top < maxScrollTop;
}
return false;
};
const rootProps = (0, _useGridRootProps.useGridRootProps)();
const totalHeaderHeight = (0, _gridColumnsUtils.getTotalHeaderHeight)(apiRef, rootProps);
const style = {
top: scrollDirection === 'up' ? totalHeaderHeight : undefined,
bottom: scrollDirection === 'down' ? 0 : undefined
};
const handleDragOver = (0, _useEventCallback.default)(event => {
let offset;
// Prevents showing the forbidden cursor
event.preventDefault();
if (scrollDirection === 'up') {
offset = event.clientY - rootRef.current.getBoundingClientRect().bottom;
} else if (scrollDirection === 'down') {
offset = Math.max(1, event.clientY - rootRef.current.getBoundingClientRect().top);
} else {
throw new Error(process.env.NODE_ENV !== "production" ? 'MUI X: Wrong drag direction' : (0, _formatErrorMessage2.default)(55));
}
offset = (offset - CLIFF) * SLOP + CLIFF;
// Avoid freeze and inertia.
timeout.start(0, () => {
apiRef.current.scroll({
left: scrollPosition.current.left,
top: scrollPosition.current.top + offset
});
});
});
return /*#__PURE__*/(0, _jsxRuntime.jsx)(GridScrollAreaContent, (0, _extends2.default)({}, props, {
ref: rootRef,
getCanScrollMore: getCanScrollMore,
style: style,
handleDragOver: handleDragOver
}));
}
const GridScrollAreaContent = (0, _forwardRef.forwardRef)(function GridScrollAreaContent(props, ref) {
const {
scrollDirection,
getCanScrollMore,
style,
handleDragOver
} = props;
const apiRef = (0, _useGridApiContext.useGridApiContext)();
const [canScrollMore, setCanScrollMore] = React.useState(getCanScrollMore);
const rootProps = (0, _useGridRootProps.useGridRootProps)();
const ownerState = (0, _extends2.default)({}, rootProps, {
scrollDirection
});
const classes = useUtilityClasses(ownerState);
const handleScrolling = () => {
setCanScrollMore(getCanScrollMore);
};
(0, _useGridEvent.useGridEvent)(apiRef, 'scrollPositionChange', handleScrolling);
if (!canScrollMore) {
return null;
}
return /*#__PURE__*/(0, _jsxRuntime.jsx)(GridScrollAreaRawRoot, {
ref: ref,
className: classes.root,
ownerState: ownerState,
onDragOver: handleDragOver,
style: style
});
});
if (process.env.NODE_ENV !== "production") GridScrollAreaContent.displayName = "GridScrollAreaContent";
const GridScrollArea = exports.GridScrollArea = (0, _fastMemo.fastMemo)(GridScrollAreaWrapper);
+254
View File
@@ -0,0 +1,254 @@
'use client';
/* eslint-disable @typescript-eslint/no-use-before-define */
import _formatErrorMessage from "@mui/x-internals/formatErrorMessage";
import _extends from "@babel/runtime/helpers/esm/extends";
import * as React from 'react';
import useEventCallback from '@mui/utils/useEventCallback';
import composeClasses from '@mui/utils/composeClasses';
import { styled } from '@mui/material/styles';
import { fastMemo } from '@mui/x-internals/fastMemo';
import { forwardRef } from '@mui/x-internals/forwardRef';
import { useGridRootProps } from "../hooks/utils/useGridRootProps.mjs";
import { getDataGridUtilityClass, gridClasses } from "../constants/index.mjs";
import { useGridApiContext } from "../hooks/utils/useGridApiContext.mjs";
import { useGridEvent } from "../hooks/utils/useGridEvent.mjs";
import { useGridSelector } from "../hooks/utils/useGridSelector.mjs";
import { gridDimensionsSelector, gridColumnsTotalWidthSelector } from "../hooks/features/dimensions/gridDimensionsSelectors.mjs";
import { gridDensityFactorSelector } from "../hooks/features/density/densitySelector.mjs";
import { useTimeout } from "../hooks/utils/useTimeout.mjs";
import { getTotalHeaderHeight } from "../hooks/features/columns/gridColumnsUtils.mjs";
import { createSelector } from "../utils/createSelector.mjs";
import { gridRowsMetaSelector } from "../hooks/features/rows/gridRowsMetaSelector.mjs";
import { jsx as _jsx } from "react/jsx-runtime";
const CLIFF = 1;
const SLOP = 1.5;
const useUtilityClasses = ownerState => {
const {
scrollDirection,
classes
} = ownerState;
const slots = {
root: ['scrollArea', `scrollArea--${scrollDirection}`]
};
return composeClasses(slots, getDataGridUtilityClass, classes);
};
const GridScrollAreaRawRoot = styled('div', {
name: 'MuiDataGrid',
slot: 'ScrollArea',
overridesResolver: (props, styles) => {
const {
ownerState
} = props;
return [styles.scrollArea, styles[`scrollArea--${ownerState.scrollDirection}`]];
}
})(() => ({
position: 'absolute',
zIndex: 101,
// Horizontal scroll areas
[`&.${gridClasses['scrollArea--left']}`]: {
top: 0,
left: 0,
width: 20,
bottom: 0
},
[`&.${gridClasses['scrollArea--right']}`]: {
top: 0,
right: 0,
width: 20,
bottom: 0
},
// Vertical scroll areas
[`&.${gridClasses['scrollArea--up']}`]: {
top: 0,
left: 0,
right: 0,
height: 20
},
[`&.${gridClasses['scrollArea--down']}`]: {
bottom: 0,
left: 0,
right: 0,
height: 20
}
}));
const offsetSelector = createSelector(gridDimensionsSelector, (dimensions, direction) => {
if (direction === 'left') {
return dimensions.leftPinnedWidth;
}
if (direction === 'right') {
return dimensions.rightPinnedWidth + (dimensions.hasScrollX ? dimensions.scrollbarSize : 0);
}
// For vertical scroll areas, we don't need horizontal offset
return 0;
});
function GridScrollAreaWrapper(props) {
const apiRef = useGridApiContext();
const [dragDirection, setDragDirection] = React.useState('none');
// Listen for both column and row drag events
useGridEvent(apiRef, 'columnHeaderDragStart', () => setDragDirection('horizontal'));
useGridEvent(apiRef, 'columnHeaderDragEnd', () => setDragDirection('none'));
useGridEvent(apiRef, 'rowDragStart', () => setDragDirection('vertical'));
useGridEvent(apiRef, 'rowDragEnd', () => setDragDirection('none'));
if (dragDirection === 'none') {
return null;
}
if (dragDirection === 'horizontal') {
return /*#__PURE__*/_jsx(GridHorizontalScrollAreaContent, _extends({}, props));
}
return /*#__PURE__*/_jsx(GridVerticalScrollAreaContent, _extends({}, props));
}
function GridHorizontalScrollAreaContent(props) {
const {
scrollDirection,
scrollPosition
} = props;
const rootRef = React.useRef(null);
const apiRef = useGridApiContext();
const timeout = useTimeout();
const densityFactor = useGridSelector(apiRef, gridDensityFactorSelector);
const columnsTotalWidth = useGridSelector(apiRef, gridColumnsTotalWidthSelector);
const sideOffset = useGridSelector(apiRef, offsetSelector, scrollDirection);
const getCanScrollMore = () => {
const dimensions = gridDimensionsSelector(apiRef);
if (scrollDirection === 'left') {
// Only render if the user has not reached yet the start of the list
return scrollPosition.current.left > 0;
}
if (scrollDirection === 'right') {
// Only render if the user has not reached yet the end of the list
const maxScrollLeft = columnsTotalWidth - dimensions.viewportInnerSize.width;
return scrollPosition.current.left < maxScrollLeft;
}
return false;
};
const rootProps = useGridRootProps();
const totalHeaderHeight = getTotalHeaderHeight(apiRef, rootProps);
const headerHeight = Math.floor(rootProps.columnHeaderHeight * densityFactor);
const style = _extends({
height: headerHeight,
top: totalHeaderHeight - headerHeight
}, scrollDirection === 'left' ? {
left: sideOffset
} : {}, scrollDirection === 'right' ? {
right: sideOffset
} : {});
const handleDragOver = useEventCallback(event => {
let offset;
// Prevents showing the forbidden cursor
event.preventDefault();
if (scrollDirection === 'left') {
offset = event.clientX - rootRef.current.getBoundingClientRect().right;
} else if (scrollDirection === 'right') {
offset = Math.max(1, event.clientX - rootRef.current.getBoundingClientRect().left);
} else {
throw new Error(process.env.NODE_ENV !== "production" ? 'MUI X: Wrong drag direction' : _formatErrorMessage(55));
}
offset = (offset - CLIFF) * SLOP + CLIFF;
// Avoid freeze and inertia.
timeout.start(0, () => {
apiRef.current.scroll({
left: scrollPosition.current.left + offset,
top: scrollPosition.current.top
});
});
});
return /*#__PURE__*/_jsx(GridScrollAreaContent, _extends({}, props, {
ref: rootRef,
getCanScrollMore: getCanScrollMore,
style: style,
handleDragOver: handleDragOver
}));
}
function GridVerticalScrollAreaContent(props) {
const {
scrollDirection,
scrollPosition
} = props;
const rootRef = React.useRef(null);
const apiRef = useGridApiContext();
const timeout = useTimeout();
const rowsMeta = useGridSelector(apiRef, gridRowsMetaSelector);
const getCanScrollMore = () => {
const dimensions = gridDimensionsSelector(apiRef);
if (scrollDirection === 'up') {
// Only render if the user has not reached yet the top of the list
return scrollPosition.current.top > 0;
}
if (scrollDirection === 'down') {
// Only render if the user has not reached yet the bottom of the list
const totalRowsHeight = rowsMeta.currentPageTotalHeight || 0;
const maxScrollTop = totalRowsHeight - dimensions.viewportInnerSize.height - (dimensions.hasScrollX ? dimensions.scrollbarSize : 0);
return scrollPosition.current.top < maxScrollTop;
}
return false;
};
const rootProps = useGridRootProps();
const totalHeaderHeight = getTotalHeaderHeight(apiRef, rootProps);
const style = {
top: scrollDirection === 'up' ? totalHeaderHeight : undefined,
bottom: scrollDirection === 'down' ? 0 : undefined
};
const handleDragOver = useEventCallback(event => {
let offset;
// Prevents showing the forbidden cursor
event.preventDefault();
if (scrollDirection === 'up') {
offset = event.clientY - rootRef.current.getBoundingClientRect().bottom;
} else if (scrollDirection === 'down') {
offset = Math.max(1, event.clientY - rootRef.current.getBoundingClientRect().top);
} else {
throw new Error(process.env.NODE_ENV !== "production" ? 'MUI X: Wrong drag direction' : _formatErrorMessage(55));
}
offset = (offset - CLIFF) * SLOP + CLIFF;
// Avoid freeze and inertia.
timeout.start(0, () => {
apiRef.current.scroll({
left: scrollPosition.current.left,
top: scrollPosition.current.top + offset
});
});
});
return /*#__PURE__*/_jsx(GridScrollAreaContent, _extends({}, props, {
ref: rootRef,
getCanScrollMore: getCanScrollMore,
style: style,
handleDragOver: handleDragOver
}));
}
const GridScrollAreaContent = forwardRef(function GridScrollAreaContent(props, ref) {
const {
scrollDirection,
getCanScrollMore,
style,
handleDragOver
} = props;
const apiRef = useGridApiContext();
const [canScrollMore, setCanScrollMore] = React.useState(getCanScrollMore);
const rootProps = useGridRootProps();
const ownerState = _extends({}, rootProps, {
scrollDirection
});
const classes = useUtilityClasses(ownerState);
const handleScrolling = () => {
setCanScrollMore(getCanScrollMore);
};
useGridEvent(apiRef, 'scrollPositionChange', handleScrolling);
if (!canScrollMore) {
return null;
}
return /*#__PURE__*/_jsx(GridScrollAreaRawRoot, {
ref: ref,
className: classes.root,
ownerState: ownerState,
onDragOver: handleDragOver,
style: style
});
});
if (process.env.NODE_ENV !== "production") GridScrollAreaContent.displayName = "GridScrollAreaContent";
export const GridScrollArea = fastMemo(GridScrollAreaWrapper);
@@ -0,0 +1,6 @@
import * as React from 'react';
interface GridScrollShadowsProps {
position: 'vertical' | 'horizontal';
}
declare function GridScrollShadows(props: GridScrollShadowsProps): React.JSX.Element;
export { GridScrollShadows };
@@ -0,0 +1,6 @@
import * as React from 'react';
interface GridScrollShadowsProps {
position: 'vertical' | 'horizontal';
}
declare function GridScrollShadows(props: GridScrollShadowsProps): React.JSX.Element;
export { GridScrollShadows };
+128
View File
@@ -0,0 +1,128 @@
"use strict";
'use client';
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard").default;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.GridScrollShadows = GridScrollShadows;
var React = _interopRequireWildcard(require("react"));
var _styles = require("@mui/material/styles");
var _RtlProvider = require("@mui/system/RtlProvider");
var _composeClasses = _interopRequireDefault(require("@mui/utils/composeClasses"));
var _hooks = require("../hooks");
var _gridRowsSelector = require("../hooks/features/rows/gridRowsSelector");
var _useGridRootProps = require("../hooks/utils/useGridRootProps");
var _cssVariables = require("../constants/cssVariables");
var _useGridPrivateApiContext = require("../hooks/utils/useGridPrivateApiContext");
var _gridDimensionsSelectors = require("../hooks/features/dimensions/gridDimensionsSelectors");
var _constants = require("../constants");
var _jsxRuntime = require("react/jsx-runtime");
const useUtilityClasses = ownerState => {
const {
classes,
position
} = ownerState;
const slots = {
root: ['scrollShadow', `scrollShadow--${position}`]
};
return (0, _composeClasses.default)(slots, _constants.getDataGridUtilityClass, classes);
};
const ScrollShadow = (0, _styles.styled)('div', {
name: 'MuiDataGrid',
slot: 'ScrollShadow',
overridesResolver: (props, styles) => [styles.root, styles[props.position]]
})(({
theme
}) => ({
position: 'absolute',
inset: 0,
pointerEvents: 'none',
transition: _cssVariables.vars.transition(['box-shadow'], {
duration: _cssVariables.vars.transitions.duration.short
}),
'--length': theme.palette.mode === 'dark' ? '8px' : '6px',
'--length-inverse': 'calc(var(--length) * -1)',
'--opacity': theme.palette.mode === 'dark' ? '0.7' : '0.18',
'--blur': 'var(--length)',
'--spread': 'calc(var(--length) * -1)',
'--color': '0, 0, 0',
'--color-start': 'rgba(var(--color), calc(var(--hasScrollStart) * var(--opacity)))',
'--color-end': 'rgba(var(--color), calc(var(--hasScrollEnd) * var(--opacity)))',
variants: [{
props: {
position: 'vertical'
},
style: {
top: 'var(--DataGrid-topContainerHeight)',
bottom: 'calc(var(--DataGrid-bottomContainerHeight) + var(--DataGrid-hasScrollX) * var(--DataGrid-scrollbarSize))',
boxShadow: 'inset 0 var(--length) var(--blur) var(--spread) var(--color-start), inset 0 var(--length-inverse) var(--blur) var(--spread) var(--color-end)'
}
}, {
props: {
position: 'horizontal'
},
style: {
left: 'var(--DataGrid-leftPinnedWidth)',
right: 'calc(var(--DataGrid-rightPinnedWidth) + var(--DataGrid-hasScrollY) * var(--DataGrid-scrollbarSize))',
boxShadow: 'inset var(--length) 0 var(--blur) var(--spread) var(--color-start), inset var(--length-inverse) 0 var(--blur) var(--spread) var(--color-end)'
}
}]
}));
function GridScrollShadows(props) {
const {
position
} = props;
const rootProps = (0, _useGridRootProps.useGridRootProps)();
const ownerState = {
classes: rootProps.classes,
position
};
const classes = useUtilityClasses(ownerState);
const ref = React.useRef(null);
const apiRef = (0, _useGridPrivateApiContext.useGridPrivateApiContext)();
const hasScrollX = (0, _hooks.useGridSelector)(apiRef, _gridDimensionsSelectors.gridHasScrollXSelector);
const hasScrollY = (0, _hooks.useGridSelector)(apiRef, _gridDimensionsSelectors.gridHasScrollYSelector);
const pinnedRows = (0, _hooks.useGridSelector)(apiRef, _gridRowsSelector.gridPinnedRowsSelector);
const pinnedColumns = (0, _hooks.useGridSelector)(apiRef, _hooks.gridPinnedColumnsSelector);
const initialScrollable = position === 'vertical' ? hasScrollY && pinnedRows?.bottom?.length > 0 : hasScrollX && pinnedColumns?.right?.length !== undefined && pinnedColumns?.right?.length > 0;
const isRtl = (0, _RtlProvider.useRtl)();
const updateScrollShadowVisibility = React.useCallback(scrollPosition => {
if (!ref.current) {
return;
}
// Math.abs to convert negative scroll position (RTL) to positive
const scroll = Math.abs(Math.round(scrollPosition));
const dimensions = (0, _hooks.gridDimensionsSelector)(apiRef);
const maxScroll = Math.round(dimensions.contentSize[position === 'vertical' ? 'height' : 'width'] - dimensions.viewportInnerSize[position === 'vertical' ? 'height' : 'width']);
const hasPinnedStart = position === 'vertical' ? pinnedRows?.top?.length > 0 : pinnedColumns?.left?.length !== undefined && pinnedColumns?.left?.length > 0;
const hasPinnedEnd = position === 'vertical' ? pinnedRows?.bottom?.length > 0 : pinnedColumns?.right?.length !== undefined && pinnedColumns?.right?.length > 0;
const scrollIsNotAtStart = isRtl ? scroll < maxScroll : scroll > 0;
const scrollIsNotAtEnd = isRtl ? scroll > 0 : scroll < maxScroll;
ref.current.style.setProperty('--hasScrollStart', hasPinnedStart && scrollIsNotAtStart ? '1' : '0');
ref.current.style.setProperty('--hasScrollEnd', hasPinnedEnd && scrollIsNotAtEnd ? '1' : '0');
}, [pinnedRows, pinnedColumns, isRtl, position, apiRef]);
const handleScrolling = scrollParams => {
updateScrollShadowVisibility(scrollParams[position === 'vertical' ? 'top' : 'left']);
};
const handleColumnResizeStop = () => {
if (position === 'horizontal') {
updateScrollShadowVisibility(apiRef.current.virtualScrollerRef?.current?.scrollLeft || 0);
}
};
(0, _hooks.useGridEvent)(apiRef, 'scrollPositionChange', handleScrolling);
(0, _hooks.useGridEvent)(apiRef, 'columnResizeStop', handleColumnResizeStop);
React.useEffect(() => {
updateScrollShadowVisibility((position === 'horizontal' ? apiRef.current.virtualScrollerRef?.current?.scrollLeft : apiRef.current.virtualScrollerRef?.current?.scrollTop) ?? 0);
}, [updateScrollShadowVisibility, apiRef, position]);
return /*#__PURE__*/(0, _jsxRuntime.jsx)(ScrollShadow, {
className: classes.root,
ownerState: ownerState,
ref: ref,
style: {
'--hasScrollStart': 0,
'--hasScrollEnd': initialScrollable ? '1' : '0'
}
});
}
+122
View File
@@ -0,0 +1,122 @@
'use client';
import * as React from 'react';
import { styled } from '@mui/material/styles';
import { useRtl } from '@mui/system/RtlProvider';
import composeClasses from '@mui/utils/composeClasses';
import { gridDimensionsSelector, gridPinnedColumnsSelector, useGridEvent, useGridSelector } from "../hooks/index.mjs";
import { gridPinnedRowsSelector } from "../hooks/features/rows/gridRowsSelector.mjs";
import { useGridRootProps } from "../hooks/utils/useGridRootProps.mjs";
import { vars } from "../constants/cssVariables.mjs";
import { useGridPrivateApiContext } from "../hooks/utils/useGridPrivateApiContext.mjs";
import { gridHasScrollXSelector, gridHasScrollYSelector } from "../hooks/features/dimensions/gridDimensionsSelectors.mjs";
import { getDataGridUtilityClass } from "../constants/index.mjs";
import { jsx as _jsx } from "react/jsx-runtime";
const useUtilityClasses = ownerState => {
const {
classes,
position
} = ownerState;
const slots = {
root: ['scrollShadow', `scrollShadow--${position}`]
};
return composeClasses(slots, getDataGridUtilityClass, classes);
};
const ScrollShadow = styled('div', {
name: 'MuiDataGrid',
slot: 'ScrollShadow',
overridesResolver: (props, styles) => [styles.root, styles[props.position]]
})(({
theme
}) => ({
position: 'absolute',
inset: 0,
pointerEvents: 'none',
transition: vars.transition(['box-shadow'], {
duration: vars.transitions.duration.short
}),
'--length': theme.palette.mode === 'dark' ? '8px' : '6px',
'--length-inverse': 'calc(var(--length) * -1)',
'--opacity': theme.palette.mode === 'dark' ? '0.7' : '0.18',
'--blur': 'var(--length)',
'--spread': 'calc(var(--length) * -1)',
'--color': '0, 0, 0',
'--color-start': 'rgba(var(--color), calc(var(--hasScrollStart) * var(--opacity)))',
'--color-end': 'rgba(var(--color), calc(var(--hasScrollEnd) * var(--opacity)))',
variants: [{
props: {
position: 'vertical'
},
style: {
top: 'var(--DataGrid-topContainerHeight)',
bottom: 'calc(var(--DataGrid-bottomContainerHeight) + var(--DataGrid-hasScrollX) * var(--DataGrid-scrollbarSize))',
boxShadow: 'inset 0 var(--length) var(--blur) var(--spread) var(--color-start), inset 0 var(--length-inverse) var(--blur) var(--spread) var(--color-end)'
}
}, {
props: {
position: 'horizontal'
},
style: {
left: 'var(--DataGrid-leftPinnedWidth)',
right: 'calc(var(--DataGrid-rightPinnedWidth) + var(--DataGrid-hasScrollY) * var(--DataGrid-scrollbarSize))',
boxShadow: 'inset var(--length) 0 var(--blur) var(--spread) var(--color-start), inset var(--length-inverse) 0 var(--blur) var(--spread) var(--color-end)'
}
}]
}));
function GridScrollShadows(props) {
const {
position
} = props;
const rootProps = useGridRootProps();
const ownerState = {
classes: rootProps.classes,
position
};
const classes = useUtilityClasses(ownerState);
const ref = React.useRef(null);
const apiRef = useGridPrivateApiContext();
const hasScrollX = useGridSelector(apiRef, gridHasScrollXSelector);
const hasScrollY = useGridSelector(apiRef, gridHasScrollYSelector);
const pinnedRows = useGridSelector(apiRef, gridPinnedRowsSelector);
const pinnedColumns = useGridSelector(apiRef, gridPinnedColumnsSelector);
const initialScrollable = position === 'vertical' ? hasScrollY && pinnedRows?.bottom?.length > 0 : hasScrollX && pinnedColumns?.right?.length !== undefined && pinnedColumns?.right?.length > 0;
const isRtl = useRtl();
const updateScrollShadowVisibility = React.useCallback(scrollPosition => {
if (!ref.current) {
return;
}
// Math.abs to convert negative scroll position (RTL) to positive
const scroll = Math.abs(Math.round(scrollPosition));
const dimensions = gridDimensionsSelector(apiRef);
const maxScroll = Math.round(dimensions.contentSize[position === 'vertical' ? 'height' : 'width'] - dimensions.viewportInnerSize[position === 'vertical' ? 'height' : 'width']);
const hasPinnedStart = position === 'vertical' ? pinnedRows?.top?.length > 0 : pinnedColumns?.left?.length !== undefined && pinnedColumns?.left?.length > 0;
const hasPinnedEnd = position === 'vertical' ? pinnedRows?.bottom?.length > 0 : pinnedColumns?.right?.length !== undefined && pinnedColumns?.right?.length > 0;
const scrollIsNotAtStart = isRtl ? scroll < maxScroll : scroll > 0;
const scrollIsNotAtEnd = isRtl ? scroll > 0 : scroll < maxScroll;
ref.current.style.setProperty('--hasScrollStart', hasPinnedStart && scrollIsNotAtStart ? '1' : '0');
ref.current.style.setProperty('--hasScrollEnd', hasPinnedEnd && scrollIsNotAtEnd ? '1' : '0');
}, [pinnedRows, pinnedColumns, isRtl, position, apiRef]);
const handleScrolling = scrollParams => {
updateScrollShadowVisibility(scrollParams[position === 'vertical' ? 'top' : 'left']);
};
const handleColumnResizeStop = () => {
if (position === 'horizontal') {
updateScrollShadowVisibility(apiRef.current.virtualScrollerRef?.current?.scrollLeft || 0);
}
};
useGridEvent(apiRef, 'scrollPositionChange', handleScrolling);
useGridEvent(apiRef, 'columnResizeStop', handleColumnResizeStop);
React.useEffect(() => {
updateScrollShadowVisibility((position === 'horizontal' ? apiRef.current.virtualScrollerRef?.current?.scrollLeft : apiRef.current.virtualScrollerRef?.current?.scrollTop) ?? 0);
}, [updateScrollShadowVisibility, apiRef, position]);
return /*#__PURE__*/_jsx(ScrollShadow, {
className: classes.root,
ownerState: ownerState,
ref: ref,
style: {
'--hasScrollStart': 0,
'--hasScrollEnd': initialScrollable ? '1' : '0'
}
});
}
export { GridScrollShadows };
@@ -0,0 +1,6 @@
declare function GridScrollbarFillerCell({
pinnedRight
}: {
pinnedRight?: boolean;
}): import("react").JSX.Element;
export { GridScrollbarFillerCell };
@@ -0,0 +1,6 @@
declare function GridScrollbarFillerCell({
pinnedRight
}: {
pinnedRight?: boolean;
}): import("react").JSX.Element;
export { GridScrollbarFillerCell };
@@ -0,0 +1,30 @@
"use strict";
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.GridScrollbarFillerCell = GridScrollbarFillerCell;
var _clsx = _interopRequireDefault(require("clsx"));
var _constants = require("../constants");
var _useGridPrivateApiContext = require("../hooks/utils/useGridPrivateApiContext");
var _usePinnedScrollOffset = require("../hooks/utils/usePinnedScrollOffset");
var _constants2 = require("../internals/constants");
var _jsxRuntime = require("react/jsx-runtime");
const classes = {
root: _constants.gridClasses.scrollbarFiller,
pinnedRight: _constants.gridClasses['scrollbarFiller--pinnedRight']
};
function GridScrollbarFillerCell({
pinnedRight
}) {
const apiRef = (0, _useGridPrivateApiContext.useGridPrivateApiContext)();
const pinnedScrollOffset = (0, _usePinnedScrollOffset.usePinnedScrollOffset)(apiRef, pinnedRight ? _constants2.PinnedColumnPosition.RIGHT : undefined);
return /*#__PURE__*/(0, _jsxRuntime.jsx)("div", {
role: "none",
className: (0, _clsx.default)(classes.root, pinnedRight && classes.pinnedRight),
style: {
right: pinnedScrollOffset
}
});
}
@@ -0,0 +1,24 @@
import clsx from 'clsx';
import { gridClasses } from "../constants/index.mjs";
import { useGridPrivateApiContext } from "../hooks/utils/useGridPrivateApiContext.mjs";
import { usePinnedScrollOffset } from "../hooks/utils/usePinnedScrollOffset.mjs";
import { PinnedColumnPosition } from "../internals/constants.mjs";
import { jsx as _jsx } from "react/jsx-runtime";
const classes = {
root: gridClasses.scrollbarFiller,
pinnedRight: gridClasses['scrollbarFiller--pinnedRight']
};
function GridScrollbarFillerCell({
pinnedRight
}) {
const apiRef = useGridPrivateApiContext();
const pinnedScrollOffset = usePinnedScrollOffset(apiRef, pinnedRight ? PinnedColumnPosition.RIGHT : undefined);
return /*#__PURE__*/_jsx("div", {
role: "none",
className: clsx(classes.root, pinnedRight && classes.pinnedRight),
style: {
right: pinnedScrollOffset
}
});
}
export { GridScrollbarFillerCell };
@@ -0,0 +1,12 @@
import * as React from 'react';
import type { SxProps, Theme } from '@mui/system';
interface SelectedRowCountProps {
selectedRowCount: number;
}
type GridSelectedRowCountProps = React.HTMLAttributes<HTMLDivElement> & SelectedRowCountProps & {
sx?: SxProps<Theme>;
};
declare const GridSelectedRowCount: React.ForwardRefExoticComponent<GridSelectedRowCountProps> | React.ForwardRefExoticComponent<React.HTMLAttributes<HTMLDivElement> & SelectedRowCountProps & {
sx?: SxProps<Theme>;
} & React.RefAttributes<HTMLDivElement>>;
export { GridSelectedRowCount };
@@ -0,0 +1,12 @@
import * as React from 'react';
import type { SxProps, Theme } from '@mui/system';
interface SelectedRowCountProps {
selectedRowCount: number;
}
type GridSelectedRowCountProps = React.HTMLAttributes<HTMLDivElement> & SelectedRowCountProps & {
sx?: SxProps<Theme>;
};
declare const GridSelectedRowCount: React.ForwardRefExoticComponent<GridSelectedRowCountProps> | React.ForwardRefExoticComponent<React.HTMLAttributes<HTMLDivElement> & SelectedRowCountProps & {
sx?: SxProps<Theme>;
} & React.RefAttributes<HTMLDivElement>>;
export { GridSelectedRowCount };
@@ -0,0 +1,75 @@
"use strict";
'use client';
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard").default;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.GridSelectedRowCount = void 0;
var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
var _objectWithoutPropertiesLoose2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutPropertiesLoose"));
var React = _interopRequireWildcard(require("react"));
var _propTypes = _interopRequireDefault(require("prop-types"));
var _clsx = _interopRequireDefault(require("clsx"));
var _composeClasses = _interopRequireDefault(require("@mui/utils/composeClasses"));
var _system = require("@mui/system");
var _forwardRef = require("@mui/x-internals/forwardRef");
var _cssVariables = require("../constants/cssVariables");
var _useGridApiContext = require("../hooks/utils/useGridApiContext");
var _gridClasses = require("../constants/gridClasses");
var _useGridRootProps = require("../hooks/utils/useGridRootProps");
var _jsxRuntime = require("react/jsx-runtime");
const _excluded = ["className", "selectedRowCount"];
const useUtilityClasses = ownerState => {
const {
classes
} = ownerState;
const slots = {
root: ['selectedRowCount']
};
return (0, _composeClasses.default)(slots, _gridClasses.getDataGridUtilityClass, classes);
};
const GridSelectedRowCountRoot = (0, _system.styled)('div', {
name: 'MuiDataGrid',
slot: 'SelectedRowCount'
})({
alignItems: 'center',
display: 'flex',
margin: _cssVariables.vars.spacing(0, 2),
visibility: 'hidden',
width: 0,
height: 0,
[_cssVariables.vars.breakpoints.up('sm')]: {
visibility: 'visible',
width: 'auto',
height: 'auto'
}
});
const GridSelectedRowCount = exports.GridSelectedRowCount = (0, _forwardRef.forwardRef)(function GridSelectedRowCount(props, ref) {
const {
className,
selectedRowCount
} = props,
other = (0, _objectWithoutPropertiesLoose2.default)(props, _excluded);
const apiRef = (0, _useGridApiContext.useGridApiContext)();
const ownerState = (0, _useGridRootProps.useGridRootProps)();
const classes = useUtilityClasses(ownerState);
const rowSelectedText = apiRef.current.getLocaleText('footerRowSelected')(selectedRowCount);
return /*#__PURE__*/(0, _jsxRuntime.jsx)(GridSelectedRowCountRoot, (0, _extends2.default)({
className: (0, _clsx.default)(classes.root, className),
ownerState: ownerState
}, other, {
ref: ref,
children: rowSelectedText
}));
});
if (process.env.NODE_ENV !== "production") GridSelectedRowCount.displayName = "GridSelectedRowCount";
process.env.NODE_ENV !== "production" ? GridSelectedRowCount.propTypes /* remove-proptypes */ = {
// ----------------------------- Warning --------------------------------
// | These PropTypes are generated from the TypeScript type definitions |
// | To update them edit the TypeScript types and run "pnpm proptypes" |
// ----------------------------------------------------------------------
selectedRowCount: _propTypes.default.number.isRequired,
sx: _propTypes.default.oneOfType([_propTypes.default.arrayOf(_propTypes.default.oneOfType([_propTypes.default.func, _propTypes.default.object, _propTypes.default.bool])), _propTypes.default.func, _propTypes.default.object])
} : void 0;
@@ -0,0 +1,69 @@
'use client';
import _extends from "@babel/runtime/helpers/esm/extends";
import _objectWithoutPropertiesLoose from "@babel/runtime/helpers/esm/objectWithoutPropertiesLoose";
const _excluded = ["className", "selectedRowCount"];
import * as React from 'react';
import PropTypes from 'prop-types';
import clsx from 'clsx';
import composeClasses from '@mui/utils/composeClasses';
import { styled } from '@mui/system';
import { forwardRef } from '@mui/x-internals/forwardRef';
import { vars } from "../constants/cssVariables.mjs";
import { useGridApiContext } from "../hooks/utils/useGridApiContext.mjs";
import { getDataGridUtilityClass } from "../constants/gridClasses.mjs";
import { useGridRootProps } from "../hooks/utils/useGridRootProps.mjs";
import { jsx as _jsx } from "react/jsx-runtime";
const useUtilityClasses = ownerState => {
const {
classes
} = ownerState;
const slots = {
root: ['selectedRowCount']
};
return composeClasses(slots, getDataGridUtilityClass, classes);
};
const GridSelectedRowCountRoot = styled('div', {
name: 'MuiDataGrid',
slot: 'SelectedRowCount'
})({
alignItems: 'center',
display: 'flex',
margin: vars.spacing(0, 2),
visibility: 'hidden',
width: 0,
height: 0,
[vars.breakpoints.up('sm')]: {
visibility: 'visible',
width: 'auto',
height: 'auto'
}
});
const GridSelectedRowCount = forwardRef(function GridSelectedRowCount(props, ref) {
const {
className,
selectedRowCount
} = props,
other = _objectWithoutPropertiesLoose(props, _excluded);
const apiRef = useGridApiContext();
const ownerState = useGridRootProps();
const classes = useUtilityClasses(ownerState);
const rowSelectedText = apiRef.current.getLocaleText('footerRowSelected')(selectedRowCount);
return /*#__PURE__*/_jsx(GridSelectedRowCountRoot, _extends({
className: clsx(classes.root, className),
ownerState: ownerState
}, other, {
ref: ref,
children: rowSelectedText
}));
});
if (process.env.NODE_ENV !== "production") GridSelectedRowCount.displayName = "GridSelectedRowCount";
process.env.NODE_ENV !== "production" ? GridSelectedRowCount.propTypes /* remove-proptypes */ = {
// ----------------------------- Warning --------------------------------
// | These PropTypes are generated from the TypeScript type definitions |
// | To update them edit the TypeScript types and run "pnpm proptypes" |
// ----------------------------------------------------------------------
selectedRowCount: PropTypes.number.isRequired,
sx: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.func, PropTypes.object, PropTypes.bool])), PropTypes.func, PropTypes.object])
} : void 0;
export { GridSelectedRowCount };
@@ -0,0 +1,9 @@
import * as React from 'react';
export interface GridShadowScrollAreaProps extends React.HTMLAttributes<HTMLDivElement> {
children: React.ReactNode;
}
/**
* Adds scroll shadows above and below content in a scrollable container.
*/
declare const GridShadowScrollArea: React.ForwardRefExoticComponent<GridShadowScrollAreaProps> | React.ForwardRefExoticComponent<GridShadowScrollAreaProps & React.RefAttributes<HTMLDivElement>>;
export { GridShadowScrollArea };
@@ -0,0 +1,9 @@
import * as React from 'react';
export interface GridShadowScrollAreaProps extends React.HTMLAttributes<HTMLDivElement> {
children: React.ReactNode;
}
/**
* Adds scroll shadows above and below content in a scrollable container.
*/
declare const GridShadowScrollArea: React.ForwardRefExoticComponent<GridShadowScrollAreaProps> | React.ForwardRefExoticComponent<GridShadowScrollAreaProps & React.RefAttributes<HTMLDivElement>>;
export { GridShadowScrollArea };
@@ -0,0 +1,103 @@
"use strict";
'use client';
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard").default;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.GridShadowScrollArea = void 0;
var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
var _objectWithoutPropertiesLoose2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutPropertiesLoose"));
var React = _interopRequireWildcard(require("react"));
var _propTypes = _interopRequireDefault(require("prop-types"));
var _system = require("@mui/system");
var _forwardRef = require("@mui/x-internals/forwardRef");
var _jsxRuntime = require("react/jsx-runtime");
const _excluded = ["children"];
const reveal = (0, _system.keyframes)({
from: {
opacity: 0
},
to: {
opacity: 1
}
});
const detectScroll = (0, _system.keyframes)({
'from, to': {
'--scrollable': '" "'
}
});
// This `styled()` function invokes keyframes. `styled-components` only supports keyframes
// in string templates. Do not convert these styles in JS object as it will break.
const ShadowScrollArea = (0, _system.styled)('div', {
name: 'MuiDataGrid',
slot: 'ShadowScrollArea'
})`
flex: 1;
display: flex;
flex-direction: column;
animation: ${detectScroll};
animation-timeline: --scroll-timeline;
animation-fill-mode: none;
box-sizing: border-box;
overflow: auto;
scrollbar-width: thin;
scroll-timeline: --scroll-timeline block;
&::before,
&::after {
content: '';
flex-shrink: 0;
display: block;
position: sticky;
left: 0;
width: 100%;
height: 4px;
animation: ${reveal} linear both;
animation-timeline: --scroll-timeline;
// Custom property toggle trick:
// - Detects if the element is scrollable
// - https://css-tricks.com/the-css-custom-property-toggle-trick/
--visibility-scrollable: var(--scrollable) visible;
--visibility-not-scrollable: hidden;
visibility: var(--visibility-scrollable, var(--visibility-not-scrollable));
}
&::before {
top: 0;
background: linear-gradient(to bottom, rgba(0, 0, 0, 0.05) 0, transparent 100%);
animation-range: 0 4px;
}
&::after {
bottom: 0;
background: linear-gradient(to top, rgba(0, 0, 0, 0.05) 0, transparent 100%);
animation-direction: reverse;
animation-range: calc(100% - 4px) 100%;
}
`;
/**
* Adds scroll shadows above and below content in a scrollable container.
*/
const GridShadowScrollArea = exports.GridShadowScrollArea = (0, _forwardRef.forwardRef)(function GridShadowScrollArea(props, ref) {
const {
children
} = props,
other = (0, _objectWithoutPropertiesLoose2.default)(props, _excluded);
return /*#__PURE__*/(0, _jsxRuntime.jsx)(ShadowScrollArea, (0, _extends2.default)({}, other, {
ref: ref,
children: children
}));
});
if (process.env.NODE_ENV !== "production") GridShadowScrollArea.displayName = "GridShadowScrollArea";
process.env.NODE_ENV !== "production" ? GridShadowScrollArea.propTypes /* remove-proptypes */ = {
// ----------------------------- Warning --------------------------------
// | These PropTypes are generated from the TypeScript type definitions |
// | To update them edit the TypeScript types and run "pnpm proptypes" |
// ----------------------------------------------------------------------
children: _propTypes.default.node
} : void 0;
@@ -0,0 +1,97 @@
'use client';
import _extends from "@babel/runtime/helpers/esm/extends";
import _objectWithoutPropertiesLoose from "@babel/runtime/helpers/esm/objectWithoutPropertiesLoose";
const _excluded = ["children"];
import * as React from 'react';
import PropTypes from 'prop-types';
import { styled, keyframes } from '@mui/system';
import { forwardRef } from '@mui/x-internals/forwardRef';
import { jsx as _jsx } from "react/jsx-runtime";
const reveal = keyframes({
from: {
opacity: 0
},
to: {
opacity: 1
}
});
const detectScroll = keyframes({
'from, to': {
'--scrollable': '" "'
}
});
// This `styled()` function invokes keyframes. `styled-components` only supports keyframes
// in string templates. Do not convert these styles in JS object as it will break.
const ShadowScrollArea = styled('div', {
name: 'MuiDataGrid',
slot: 'ShadowScrollArea'
})`
flex: 1;
display: flex;
flex-direction: column;
animation: ${detectScroll};
animation-timeline: --scroll-timeline;
animation-fill-mode: none;
box-sizing: border-box;
overflow: auto;
scrollbar-width: thin;
scroll-timeline: --scroll-timeline block;
&::before,
&::after {
content: '';
flex-shrink: 0;
display: block;
position: sticky;
left: 0;
width: 100%;
height: 4px;
animation: ${reveal} linear both;
animation-timeline: --scroll-timeline;
// Custom property toggle trick:
// - Detects if the element is scrollable
// - https://css-tricks.com/the-css-custom-property-toggle-trick/
--visibility-scrollable: var(--scrollable) visible;
--visibility-not-scrollable: hidden;
visibility: var(--visibility-scrollable, var(--visibility-not-scrollable));
}
&::before {
top: 0;
background: linear-gradient(to bottom, rgba(0, 0, 0, 0.05) 0, transparent 100%);
animation-range: 0 4px;
}
&::after {
bottom: 0;
background: linear-gradient(to top, rgba(0, 0, 0, 0.05) 0, transparent 100%);
animation-direction: reverse;
animation-range: calc(100% - 4px) 100%;
}
`;
/**
* Adds scroll shadows above and below content in a scrollable container.
*/
const GridShadowScrollArea = forwardRef(function GridShadowScrollArea(props, ref) {
const {
children
} = props,
other = _objectWithoutPropertiesLoose(props, _excluded);
return /*#__PURE__*/_jsx(ShadowScrollArea, _extends({}, other, {
ref: ref,
children: children
}));
});
if (process.env.NODE_ENV !== "production") GridShadowScrollArea.displayName = "GridShadowScrollArea";
process.env.NODE_ENV !== "production" ? GridShadowScrollArea.propTypes /* remove-proptypes */ = {
// ----------------------------- Warning --------------------------------
// | These PropTypes are generated from the TypeScript type definitions |
// | To update them edit the TypeScript types and run "pnpm proptypes" |
// ----------------------------------------------------------------------
children: PropTypes.node
} : void 0;
export { GridShadowScrollArea };
@@ -0,0 +1,14 @@
import * as React from 'react';
import type { GridColDef } from "../models/index.mjs";
type GridSkeletonLoadingOverlayInnerProps = React.HTMLAttributes<HTMLDivElement> & {
skeletonRowsCount: number;
showFirstRowBorder?: boolean;
visibleColumns?: Set<GridColDef['field']>;
};
export declare const GridSkeletonLoadingOverlayInner: React.ForwardRefExoticComponent<GridSkeletonLoadingOverlayInnerProps> | React.ForwardRefExoticComponent<React.HTMLAttributes<HTMLDivElement> & {
skeletonRowsCount: number;
showFirstRowBorder?: boolean;
visibleColumns?: Set<GridColDef['field']>;
} & React.RefAttributes<HTMLDivElement>>;
export declare const GridSkeletonLoadingOverlay: React.ForwardRefExoticComponent<React.HTMLAttributes<HTMLDivElement>> | React.ForwardRefExoticComponent<React.HTMLAttributes<HTMLDivElement> & React.RefAttributes<HTMLDivElement>>;
export {};
@@ -0,0 +1,14 @@
import * as React from 'react';
import type { GridColDef } from "../models/index.js";
type GridSkeletonLoadingOverlayInnerProps = React.HTMLAttributes<HTMLDivElement> & {
skeletonRowsCount: number;
showFirstRowBorder?: boolean;
visibleColumns?: Set<GridColDef['field']>;
};
export declare const GridSkeletonLoadingOverlayInner: React.ForwardRefExoticComponent<GridSkeletonLoadingOverlayInnerProps> | React.ForwardRefExoticComponent<React.HTMLAttributes<HTMLDivElement> & {
skeletonRowsCount: number;
showFirstRowBorder?: boolean;
visibleColumns?: Set<GridColDef['field']>;
} & React.RefAttributes<HTMLDivElement>>;
export declare const GridSkeletonLoadingOverlay: React.ForwardRefExoticComponent<React.HTMLAttributes<HTMLDivElement>> | React.ForwardRefExoticComponent<React.HTMLAttributes<HTMLDivElement> & React.RefAttributes<HTMLDivElement>>;
export {};
@@ -0,0 +1,203 @@
"use strict";
'use client';
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard").default;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.GridSkeletonLoadingOverlayInner = exports.GridSkeletonLoadingOverlay = void 0;
var _formatErrorMessage2 = _interopRequireDefault(require("@mui/x-internals/formatErrorMessage"));
var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
var _objectWithoutPropertiesLoose2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutPropertiesLoose"));
var React = _interopRequireWildcard(require("react"));
var _clsx = _interopRequireDefault(require("clsx"));
var _styles = require("@mui/material/styles");
var _useForkRef = _interopRequireDefault(require("@mui/utils/useForkRef"));
var _composeClasses = _interopRequireDefault(require("@mui/utils/composeClasses"));
var _RtlProvider = require("@mui/system/RtlProvider");
var _forwardRef = require("@mui/x-internals/forwardRef");
var _useGridApiContext = require("../hooks/utils/useGridApiContext");
var _useGridRootProps = require("../hooks/utils/useGridRootProps");
var _hooks = require("../hooks");
var _constants = require("../internals/constants");
var _gridDimensionsSelectors = require("../hooks/features/dimensions/gridDimensionsSelectors");
var _gridClasses = require("../constants/gridClasses");
var _getPinnedCellOffset = require("../internals/utils/getPinnedCellOffset");
var _cellBorderUtils = require("../utils/cellBorderUtils");
var _domUtils = require("../utils/domUtils");
var _rtlFlipSide = require("../utils/rtlFlipSide");
var _utils = require("../internals/utils");
var _jsxRuntime = require("react/jsx-runtime");
const _excluded = ["skeletonRowsCount", "visibleColumns", "showFirstRowBorder"];
const SkeletonOverlay = (0, _styles.styled)('div', {
name: 'MuiDataGrid',
slot: 'SkeletonLoadingOverlay'
})({
minWidth: '100%',
width: 'max-content',
// prevents overflow: clip; cutting off the x axis
height: '100%',
overflow: 'clip' // y axis is hidden while the x axis is allowed to overflow
});
const useUtilityClasses = ownerState => {
const {
classes
} = ownerState;
const slots = {
root: ['skeletonLoadingOverlay']
};
return (0, _composeClasses.default)(slots, _gridClasses.getDataGridUtilityClass, classes);
};
const getColIndex = el => parseInt(el.getAttribute('data-colindex'), 10);
const GridSkeletonLoadingOverlayInner = exports.GridSkeletonLoadingOverlayInner = (0, _forwardRef.forwardRef)(function GridSkeletonLoadingOverlayInner(props, forwardedRef) {
const rootProps = (0, _useGridRootProps.useGridRootProps)();
const {
slots
} = rootProps;
const isRtl = (0, _RtlProvider.useRtl)();
const classes = useUtilityClasses({
classes: rootProps.classes
});
const ref = React.useRef(null);
const handleRef = (0, _useForkRef.default)(ref, forwardedRef);
const apiRef = (0, _useGridApiContext.useGridApiContext)();
const dimensions = (0, _hooks.useGridSelector)(apiRef, _hooks.gridDimensionsSelector);
const totalWidth = (0, _hooks.useGridSelector)(apiRef, _gridDimensionsSelectors.gridColumnsTotalWidthSelector);
const positions = (0, _hooks.useGridSelector)(apiRef, _hooks.gridColumnPositionsSelector);
const inViewportCount = React.useMemo(() => positions.filter(value => value <= totalWidth).length, [totalWidth, positions]);
const {
skeletonRowsCount,
visibleColumns,
showFirstRowBorder
} = props,
other = (0, _objectWithoutPropertiesLoose2.default)(props, _excluded);
const allVisibleColumns = (0, _hooks.useGridSelector)(apiRef, _hooks.gridVisibleColumnDefinitionsSelector);
const columns = React.useMemo(() => allVisibleColumns.slice(0, inViewportCount), [allVisibleColumns, inViewportCount]);
const pinnedColumns = (0, _hooks.useGridSelector)(apiRef, _hooks.gridVisiblePinnedColumnDefinitionsSelector);
const getPinnedPosition = React.useCallback(field => {
if (pinnedColumns.left.findIndex(col => col.field === field) !== -1) {
return _constants.PinnedColumnPosition.LEFT;
}
if (pinnedColumns.right.findIndex(col => col.field === field) !== -1) {
return _constants.PinnedColumnPosition.RIGHT;
}
return undefined;
}, [pinnedColumns.left, pinnedColumns.right]);
const children = React.useMemo(() => {
const array = [];
for (let i = 0; i < skeletonRowsCount; i += 1) {
const rowCells = [];
for (let colIndex = 0; colIndex < columns.length; colIndex += 1) {
const column = columns[colIndex];
const pinnedPosition = getPinnedPosition(column.field);
const isPinnedLeft = pinnedPosition === _constants.PinnedColumnPosition.LEFT;
const isPinnedRight = pinnedPosition === _constants.PinnedColumnPosition.RIGHT;
const pinnedSide = (0, _rtlFlipSide.rtlFlipSide)(pinnedPosition, isRtl);
const sectionLength = pinnedSide ? pinnedColumns[pinnedSide].length // pinned section
: columns.length - pinnedColumns.left.length - pinnedColumns.right.length; // middle section
const sectionIndex = pinnedSide ? pinnedColumns[pinnedSide].findIndex(col => col.field === column.field) // pinned section
: colIndex - pinnedColumns.left.length; // middle section
const scrollbarWidth = dimensions.hasScrollY ? dimensions.scrollbarSize : 0;
const pinnedStyle = (0, _utils.attachPinnedStyle)({}, isRtl, pinnedPosition, (0, _getPinnedCellOffset.getPinnedCellOffset)(pinnedPosition, column.computedWidth, colIndex, positions, dimensions.columnsTotalWidth, scrollbarWidth));
const gridHasFiller = dimensions.columnsTotalWidth < dimensions.viewportOuterSize.width;
const showRightBorder = (0, _cellBorderUtils.shouldCellShowRightBorder)(pinnedPosition, sectionIndex, sectionLength, rootProps.showCellVerticalBorder, gridHasFiller, rootProps.pinnedColumnsSectionSeparator);
const showLeftBorder = (0, _cellBorderUtils.shouldCellShowLeftBorder)(pinnedPosition, sectionIndex, rootProps.showCellVerticalBorder, rootProps.pinnedColumnsSectionSeparator);
const isLastColumn = colIndex === columns.length - 1;
const isFirstPinnedRight = isPinnedRight && sectionIndex === 0;
const hasFillerBefore = isFirstPinnedRight && gridHasFiller;
const hasFillerAfter = isLastColumn && !isFirstPinnedRight && gridHasFiller;
const expandedWidth = dimensions.viewportOuterSize.width - dimensions.columnsTotalWidth;
const emptyCellWidth = Math.max(0, expandedWidth);
const emptyCell = /*#__PURE__*/(0, _jsxRuntime.jsx)(slots.skeletonCell, {
width: emptyCellWidth,
empty: true
}, `skeleton-filler-column-${i}`);
if (hasFillerBefore) {
rowCells.push(emptyCell);
}
rowCells.push(/*#__PURE__*/(0, _jsxRuntime.jsx)(slots.skeletonCell, {
field: column.field,
type: column.type,
align: column.align,
width: "var(--width)",
height: dimensions.rowHeight,
"data-colindex": colIndex,
empty: visibleColumns && !visibleColumns.has(column.field),
className: (0, _clsx.default)(isPinnedLeft && _gridClasses.gridClasses['cell--pinnedLeft'], isPinnedRight && _gridClasses.gridClasses['cell--pinnedRight'], showRightBorder && _gridClasses.gridClasses['cell--withRightBorder'], showLeftBorder && _gridClasses.gridClasses['cell--withLeftBorder']),
style: (0, _extends2.default)({
'--width': `${column.computedWidth}px`
}, pinnedStyle)
}, `skeleton-column-${i}-${column.field}`));
if (hasFillerAfter) {
rowCells.push(emptyCell);
}
}
array.push(/*#__PURE__*/(0, _jsxRuntime.jsx)("div", {
className: (0, _clsx.default)(_gridClasses.gridClasses.row, _gridClasses.gridClasses.rowSkeleton, i === 0 && !showFirstRowBorder && _gridClasses.gridClasses['row--firstVisible']),
children: rowCells
}, `skeleton-row-${i}`));
}
return array;
}, [skeletonRowsCount, columns, getPinnedPosition, isRtl, pinnedColumns, dimensions.hasScrollY, dimensions.scrollbarSize, dimensions.columnsTotalWidth, dimensions.viewportOuterSize.width, dimensions.rowHeight, positions, rootProps.showCellVerticalBorder, rootProps.pinnedColumnsSectionSeparator, slots, visibleColumns, showFirstRowBorder]);
// Sync the column resize of the overlay columns with the grid
const handleColumnResize = params => {
const {
colDef,
width
} = params;
const cells = ref.current?.querySelectorAll(`[data-field="${(0, _domUtils.escapeOperandAttributeSelector)(colDef.field)}"]`);
if (!cells) {
throw new Error(process.env.NODE_ENV !== "production" ? 'MUI X: Expected skeleton cells to be defined with `data-field` attribute.' : (0, _formatErrorMessage2.default)(56));
}
const resizedColIndex = columns.findIndex(col => col.field === colDef.field);
const pinnedPosition = getPinnedPosition(colDef.field);
const isPinnedLeft = pinnedPosition === _constants.PinnedColumnPosition.LEFT;
const isPinnedRight = pinnedPosition === _constants.PinnedColumnPosition.RIGHT;
const currentWidth = getComputedStyle(cells[0]).getPropertyValue('--width');
const delta = parseInt(currentWidth, 10) - width;
if (cells) {
cells.forEach(element => {
element.style.setProperty('--width', `${width}px`);
});
}
if (isPinnedLeft) {
const pinnedCells = ref.current?.querySelectorAll(`.${_gridClasses.gridClasses['cell--pinnedLeft']}`);
pinnedCells?.forEach(element => {
const colIndex = getColIndex(element);
if (colIndex > resizedColIndex) {
element.style.left = `${parseInt(getComputedStyle(element).left, 10) - delta}px`;
}
});
}
if (isPinnedRight) {
const pinnedCells = ref.current?.querySelectorAll(`.${_gridClasses.gridClasses['cell--pinnedRight']}`);
pinnedCells?.forEach(element => {
const colIndex = getColIndex(element);
if (colIndex < resizedColIndex) {
element.style.right = `${parseInt(getComputedStyle(element).right, 10) + delta}px`;
}
});
}
};
(0, _hooks.useGridEvent)(apiRef, 'columnResize', handleColumnResize);
return /*#__PURE__*/(0, _jsxRuntime.jsx)(SkeletonOverlay, (0, _extends2.default)({
className: classes.root
}, other, {
ref: handleRef,
children: children
}));
});
if (process.env.NODE_ENV !== "production") GridSkeletonLoadingOverlayInner.displayName = "GridSkeletonLoadingOverlayInner";
const GridSkeletonLoadingOverlay = exports.GridSkeletonLoadingOverlay = (0, _forwardRef.forwardRef)(function GridSkeletonLoadingOverlay(props, forwardedRef) {
const apiRef = (0, _useGridApiContext.useGridApiContext)();
const dimensions = (0, _hooks.useGridSelector)(apiRef, _hooks.gridDimensionsSelector);
const viewportHeight = dimensions?.viewportInnerSize.height ?? 0;
const skeletonRowsCount = Math.ceil(viewportHeight / dimensions.rowHeight);
return /*#__PURE__*/(0, _jsxRuntime.jsx)(GridSkeletonLoadingOverlayInner, (0, _extends2.default)({}, props, {
skeletonRowsCount: skeletonRowsCount,
ref: forwardedRef
}));
});
if (process.env.NODE_ENV !== "production") GridSkeletonLoadingOverlay.displayName = "GridSkeletonLoadingOverlay";
@@ -0,0 +1,196 @@
'use client';
import _formatErrorMessage from "@mui/x-internals/formatErrorMessage";
import _extends from "@babel/runtime/helpers/esm/extends";
import _objectWithoutPropertiesLoose from "@babel/runtime/helpers/esm/objectWithoutPropertiesLoose";
const _excluded = ["skeletonRowsCount", "visibleColumns", "showFirstRowBorder"];
import * as React from 'react';
import clsx from 'clsx';
import { styled } from '@mui/material/styles';
import useForkRef from '@mui/utils/useForkRef';
import composeClasses from '@mui/utils/composeClasses';
import { useRtl } from '@mui/system/RtlProvider';
import { forwardRef } from '@mui/x-internals/forwardRef';
import { useGridApiContext } from "../hooks/utils/useGridApiContext.mjs";
import { useGridRootProps } from "../hooks/utils/useGridRootProps.mjs";
import { gridColumnPositionsSelector, gridDimensionsSelector, gridVisibleColumnDefinitionsSelector, gridVisiblePinnedColumnDefinitionsSelector, useGridEvent, useGridSelector } from "../hooks/index.mjs";
import { PinnedColumnPosition } from "../internals/constants.mjs";
import { gridColumnsTotalWidthSelector } from "../hooks/features/dimensions/gridDimensionsSelectors.mjs";
import { getDataGridUtilityClass, gridClasses } from "../constants/gridClasses.mjs";
import { getPinnedCellOffset } from "../internals/utils/getPinnedCellOffset.mjs";
import { shouldCellShowLeftBorder, shouldCellShowRightBorder } from "../utils/cellBorderUtils.mjs";
import { escapeOperandAttributeSelector } from "../utils/domUtils.mjs";
import { rtlFlipSide } from "../utils/rtlFlipSide.mjs";
import { attachPinnedStyle } from "../internals/utils/index.mjs";
import { jsx as _jsx } from "react/jsx-runtime";
const SkeletonOverlay = styled('div', {
name: 'MuiDataGrid',
slot: 'SkeletonLoadingOverlay'
})({
minWidth: '100%',
width: 'max-content',
// prevents overflow: clip; cutting off the x axis
height: '100%',
overflow: 'clip' // y axis is hidden while the x axis is allowed to overflow
});
const useUtilityClasses = ownerState => {
const {
classes
} = ownerState;
const slots = {
root: ['skeletonLoadingOverlay']
};
return composeClasses(slots, getDataGridUtilityClass, classes);
};
const getColIndex = el => parseInt(el.getAttribute('data-colindex'), 10);
export const GridSkeletonLoadingOverlayInner = forwardRef(function GridSkeletonLoadingOverlayInner(props, forwardedRef) {
const rootProps = useGridRootProps();
const {
slots
} = rootProps;
const isRtl = useRtl();
const classes = useUtilityClasses({
classes: rootProps.classes
});
const ref = React.useRef(null);
const handleRef = useForkRef(ref, forwardedRef);
const apiRef = useGridApiContext();
const dimensions = useGridSelector(apiRef, gridDimensionsSelector);
const totalWidth = useGridSelector(apiRef, gridColumnsTotalWidthSelector);
const positions = useGridSelector(apiRef, gridColumnPositionsSelector);
const inViewportCount = React.useMemo(() => positions.filter(value => value <= totalWidth).length, [totalWidth, positions]);
const {
skeletonRowsCount,
visibleColumns,
showFirstRowBorder
} = props,
other = _objectWithoutPropertiesLoose(props, _excluded);
const allVisibleColumns = useGridSelector(apiRef, gridVisibleColumnDefinitionsSelector);
const columns = React.useMemo(() => allVisibleColumns.slice(0, inViewportCount), [allVisibleColumns, inViewportCount]);
const pinnedColumns = useGridSelector(apiRef, gridVisiblePinnedColumnDefinitionsSelector);
const getPinnedPosition = React.useCallback(field => {
if (pinnedColumns.left.findIndex(col => col.field === field) !== -1) {
return PinnedColumnPosition.LEFT;
}
if (pinnedColumns.right.findIndex(col => col.field === field) !== -1) {
return PinnedColumnPosition.RIGHT;
}
return undefined;
}, [pinnedColumns.left, pinnedColumns.right]);
const children = React.useMemo(() => {
const array = [];
for (let i = 0; i < skeletonRowsCount; i += 1) {
const rowCells = [];
for (let colIndex = 0; colIndex < columns.length; colIndex += 1) {
const column = columns[colIndex];
const pinnedPosition = getPinnedPosition(column.field);
const isPinnedLeft = pinnedPosition === PinnedColumnPosition.LEFT;
const isPinnedRight = pinnedPosition === PinnedColumnPosition.RIGHT;
const pinnedSide = rtlFlipSide(pinnedPosition, isRtl);
const sectionLength = pinnedSide ? pinnedColumns[pinnedSide].length // pinned section
: columns.length - pinnedColumns.left.length - pinnedColumns.right.length; // middle section
const sectionIndex = pinnedSide ? pinnedColumns[pinnedSide].findIndex(col => col.field === column.field) // pinned section
: colIndex - pinnedColumns.left.length; // middle section
const scrollbarWidth = dimensions.hasScrollY ? dimensions.scrollbarSize : 0;
const pinnedStyle = attachPinnedStyle({}, isRtl, pinnedPosition, getPinnedCellOffset(pinnedPosition, column.computedWidth, colIndex, positions, dimensions.columnsTotalWidth, scrollbarWidth));
const gridHasFiller = dimensions.columnsTotalWidth < dimensions.viewportOuterSize.width;
const showRightBorder = shouldCellShowRightBorder(pinnedPosition, sectionIndex, sectionLength, rootProps.showCellVerticalBorder, gridHasFiller, rootProps.pinnedColumnsSectionSeparator);
const showLeftBorder = shouldCellShowLeftBorder(pinnedPosition, sectionIndex, rootProps.showCellVerticalBorder, rootProps.pinnedColumnsSectionSeparator);
const isLastColumn = colIndex === columns.length - 1;
const isFirstPinnedRight = isPinnedRight && sectionIndex === 0;
const hasFillerBefore = isFirstPinnedRight && gridHasFiller;
const hasFillerAfter = isLastColumn && !isFirstPinnedRight && gridHasFiller;
const expandedWidth = dimensions.viewportOuterSize.width - dimensions.columnsTotalWidth;
const emptyCellWidth = Math.max(0, expandedWidth);
const emptyCell = /*#__PURE__*/_jsx(slots.skeletonCell, {
width: emptyCellWidth,
empty: true
}, `skeleton-filler-column-${i}`);
if (hasFillerBefore) {
rowCells.push(emptyCell);
}
rowCells.push(/*#__PURE__*/_jsx(slots.skeletonCell, {
field: column.field,
type: column.type,
align: column.align,
width: "var(--width)",
height: dimensions.rowHeight,
"data-colindex": colIndex,
empty: visibleColumns && !visibleColumns.has(column.field),
className: clsx(isPinnedLeft && gridClasses['cell--pinnedLeft'], isPinnedRight && gridClasses['cell--pinnedRight'], showRightBorder && gridClasses['cell--withRightBorder'], showLeftBorder && gridClasses['cell--withLeftBorder']),
style: _extends({
'--width': `${column.computedWidth}px`
}, pinnedStyle)
}, `skeleton-column-${i}-${column.field}`));
if (hasFillerAfter) {
rowCells.push(emptyCell);
}
}
array.push(/*#__PURE__*/_jsx("div", {
className: clsx(gridClasses.row, gridClasses.rowSkeleton, i === 0 && !showFirstRowBorder && gridClasses['row--firstVisible']),
children: rowCells
}, `skeleton-row-${i}`));
}
return array;
}, [skeletonRowsCount, columns, getPinnedPosition, isRtl, pinnedColumns, dimensions.hasScrollY, dimensions.scrollbarSize, dimensions.columnsTotalWidth, dimensions.viewportOuterSize.width, dimensions.rowHeight, positions, rootProps.showCellVerticalBorder, rootProps.pinnedColumnsSectionSeparator, slots, visibleColumns, showFirstRowBorder]);
// Sync the column resize of the overlay columns with the grid
const handleColumnResize = params => {
const {
colDef,
width
} = params;
const cells = ref.current?.querySelectorAll(`[data-field="${escapeOperandAttributeSelector(colDef.field)}"]`);
if (!cells) {
throw new Error(process.env.NODE_ENV !== "production" ? 'MUI X: Expected skeleton cells to be defined with `data-field` attribute.' : _formatErrorMessage(56));
}
const resizedColIndex = columns.findIndex(col => col.field === colDef.field);
const pinnedPosition = getPinnedPosition(colDef.field);
const isPinnedLeft = pinnedPosition === PinnedColumnPosition.LEFT;
const isPinnedRight = pinnedPosition === PinnedColumnPosition.RIGHT;
const currentWidth = getComputedStyle(cells[0]).getPropertyValue('--width');
const delta = parseInt(currentWidth, 10) - width;
if (cells) {
cells.forEach(element => {
element.style.setProperty('--width', `${width}px`);
});
}
if (isPinnedLeft) {
const pinnedCells = ref.current?.querySelectorAll(`.${gridClasses['cell--pinnedLeft']}`);
pinnedCells?.forEach(element => {
const colIndex = getColIndex(element);
if (colIndex > resizedColIndex) {
element.style.left = `${parseInt(getComputedStyle(element).left, 10) - delta}px`;
}
});
}
if (isPinnedRight) {
const pinnedCells = ref.current?.querySelectorAll(`.${gridClasses['cell--pinnedRight']}`);
pinnedCells?.forEach(element => {
const colIndex = getColIndex(element);
if (colIndex < resizedColIndex) {
element.style.right = `${parseInt(getComputedStyle(element).right, 10) + delta}px`;
}
});
}
};
useGridEvent(apiRef, 'columnResize', handleColumnResize);
return /*#__PURE__*/_jsx(SkeletonOverlay, _extends({
className: classes.root
}, other, {
ref: handleRef,
children: children
}));
});
if (process.env.NODE_ENV !== "production") GridSkeletonLoadingOverlayInner.displayName = "GridSkeletonLoadingOverlayInner";
export const GridSkeletonLoadingOverlay = forwardRef(function GridSkeletonLoadingOverlay(props, forwardedRef) {
const apiRef = useGridApiContext();
const dimensions = useGridSelector(apiRef, gridDimensionsSelector);
const viewportHeight = dimensions?.viewportInnerSize.height ?? 0;
const skeletonRowsCount = Math.ceil(viewportHeight / dimensions.rowHeight);
return /*#__PURE__*/_jsx(GridSkeletonLoadingOverlayInner, _extends({}, props, {
skeletonRowsCount: skeletonRowsCount,
ref: forwardedRef
}));
});
if (process.env.NODE_ENV !== "production") GridSkeletonLoadingOverlay.displayName = "GridSkeletonLoadingOverlay";
+2
View File
@@ -0,0 +1,2 @@
import { GridVirtualScroller } from "../virtualization/GridVirtualScroller.mjs";
export { GridVirtualScroller as GridBody };
+2
View File
@@ -0,0 +1,2 @@
import { GridVirtualScroller } from "../virtualization/GridVirtualScroller.js";
export { GridVirtualScroller as GridBody };
+12
View File
@@ -0,0 +1,12 @@
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
Object.defineProperty(exports, "GridBody", {
enumerable: true,
get: function () {
return _GridVirtualScroller.GridVirtualScroller;
}
});
var _GridVirtualScroller = require("../virtualization/GridVirtualScroller");
+2
View File
@@ -0,0 +1,2 @@
import { GridVirtualScroller } from "../virtualization/GridVirtualScroller.mjs";
export { GridVirtualScroller as GridBody };

Some files were not shown because too many files have changed in this diff Show More