UNPKG

@mui/material

Version:

React components that implement Google's Material Design.

249 lines (246 loc) 9.62 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); Object.defineProperty(exports, "__esModule", { value: true }); exports.default = 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 _base = require("@mui/base"); var _utils = require("@mui/utils"); var _useThemeProps = _interopRequireDefault(require("../styles/useThemeProps")); var _paginationClasses = require("./paginationClasses"); var _usePagination = _interopRequireDefault(require("../usePagination")); var _PaginationItem = _interopRequireDefault(require("../PaginationItem")); var _styled = _interopRequireDefault(require("../styles/styled")); var _jsxRuntime = require("react/jsx-runtime"); const _excluded = ["boundaryCount", "className", "color", "count", "defaultPage", "disabled", "getItemAriaLabel", "hideNextButton", "hidePrevButton", "onChange", "page", "renderItem", "shape", "showFirstButton", "showLastButton", "siblingCount", "size", "variant"]; function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); } function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; } const useUtilityClasses = ownerState => { const { classes, variant } = ownerState; const slots = { root: ['root', variant], ul: ['ul'] }; return (0, _base.unstable_composeClasses)(slots, _paginationClasses.getPaginationUtilityClass, classes); }; const PaginationRoot = (0, _styled.default)('nav', { name: 'MuiPagination', slot: 'Root', overridesResolver: (props, styles) => { const { ownerState } = props; return [styles.root, styles[ownerState.variant]]; } })({}); const PaginationUl = (0, _styled.default)('ul', { name: 'MuiPagination', slot: 'Ul', overridesResolver: (props, styles) => styles.ul })({ display: 'flex', flexWrap: 'wrap', alignItems: 'center', padding: 0, margin: 0, listStyle: 'none' }); function defaultGetAriaLabel(type, page, selected) { if (type === 'page') { return `${selected ? '' : 'Go to '}page ${page}`; } return `Go to ${type} page`; } const Pagination = /*#__PURE__*/React.forwardRef(function Pagination(inProps, ref) { const props = (0, _useThemeProps.default)({ props: inProps, name: 'MuiPagination' }); const { boundaryCount = 1, className, color = 'standard', count = 1, defaultPage = 1, disabled = false, getItemAriaLabel = defaultGetAriaLabel, hideNextButton = false, hidePrevButton = false, renderItem = item => /*#__PURE__*/(0, _jsxRuntime.jsx)(_PaginationItem.default, (0, _extends2.default)({}, item)), shape = 'circular', showFirstButton = false, showLastButton = false, siblingCount = 1, size = 'medium', variant = 'text' } = props, other = (0, _objectWithoutPropertiesLoose2.default)(props, _excluded); const { items } = (0, _usePagination.default)((0, _extends2.default)({}, props, { componentName: 'Pagination' })); const ownerState = (0, _extends2.default)({}, props, { boundaryCount, color, count, defaultPage, disabled, getItemAriaLabel, hideNextButton, hidePrevButton, renderItem, shape, showFirstButton, showLastButton, siblingCount, size, variant }); const classes = useUtilityClasses(ownerState); return /*#__PURE__*/(0, _jsxRuntime.jsx)(PaginationRoot, (0, _extends2.default)({ "aria-label": "pagination navigation", className: (0, _clsx.default)(classes.root, className), ownerState: ownerState, ref: ref }, other, { children: /*#__PURE__*/(0, _jsxRuntime.jsx)(PaginationUl, { className: classes.ul, ownerState: ownerState, children: items.map((item, index) => /*#__PURE__*/(0, _jsxRuntime.jsx)("li", { children: renderItem((0, _extends2.default)({}, item, { color, 'aria-label': getItemAriaLabel(item.type, item.page, item.selected), shape, size, variant })) }, index)) }) })); }); // @default tags synced with default values from usePagination process.env.NODE_ENV !== "production" ? Pagination.propTypes /* remove-proptypes */ = { // ----------------------------- Warning -------------------------------- // | These PropTypes are generated from the TypeScript type definitions | // | To update them edit the d.ts file and run "yarn proptypes" | // ---------------------------------------------------------------------- /** * Number of always visible pages at the beginning and end. * @default 1 */ boundaryCount: _utils.integerPropType, /** * Override or extend the styles applied to the component. */ classes: _propTypes.default.object, /** * @ignore */ className: _propTypes.default.string, /** * The active color. * It supports both default and custom theme colors, which can be added as shown in the * [palette customization guide](https://mui.com/material-ui/customization/palette/#adding-new-colors). * @default 'standard' */ color: _propTypes.default /* @typescript-to-proptypes-ignore */.oneOfType([_propTypes.default.oneOf(['primary', 'secondary', 'standard']), _propTypes.default.string]), /** * The total number of pages. * @default 1 */ count: _utils.integerPropType, /** * The page selected by default when the component is uncontrolled. * @default 1 */ defaultPage: _utils.integerPropType, /** * If `true`, the component is disabled. * @default false */ disabled: _propTypes.default.bool, /** * Accepts a function which returns a string value that provides a user-friendly name for the current page. * This is important for screen reader users. * * For localization purposes, you can use the provided [translations](/material-ui/guides/localization/). * @param {string} type The link or button type to format ('page' | 'first' | 'last' | 'next' | 'previous'). Defaults to 'page'. * @param {number} page The page number to format. * @param {bool} selected If true, the current page is selected. * @returns {string} */ getItemAriaLabel: _propTypes.default.func, /** * If `true`, hide the next-page button. * @default false */ hideNextButton: _propTypes.default.bool, /** * If `true`, hide the previous-page button. * @default false */ hidePrevButton: _propTypes.default.bool, /** * Callback fired when the page is changed. * * @param {React.ChangeEvent<unknown>} event The event source of the callback. * @param {number} page The page selected. */ onChange: _propTypes.default.func, /** * The current page. */ page: _utils.integerPropType, /** * Render the item. * @param {PaginationRenderItemParams} params The props to spread on a PaginationItem. * @returns {ReactNode} * @default (item) => <PaginationItem {...item} /> */ renderItem: _propTypes.default.func, /** * The shape of the pagination items. * @default 'circular' */ shape: _propTypes.default.oneOf(['circular', 'rounded']), /** * If `true`, show the first-page button. * @default false */ showFirstButton: _propTypes.default.bool, /** * If `true`, show the last-page button. * @default false */ showLastButton: _propTypes.default.bool, /** * Number of always visible pages before and after the current page. * @default 1 */ siblingCount: _utils.integerPropType, /** * The size of the component. * @default 'medium' */ size: _propTypes.default /* @typescript-to-proptypes-ignore */.oneOfType([_propTypes.default.oneOf(['small', 'medium', 'large']), _propTypes.default.string]), /** * The system prop that allows defining system overrides as well as additional CSS styles. */ 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 to use. * @default 'text' */ variant: _propTypes.default /* @typescript-to-proptypes-ignore */.oneOfType([_propTypes.default.oneOf(['outlined', 'text']), _propTypes.default.string]) } : void 0; var _default = Pagination; exports.default = _default;