text: import _extends from "@babel/runtime/helpers/esm/extends";
  import _objectWithoutProperties from "@babel/runtime/helpers/esm/objectWithoutProperties";
  import * as React from 'react';
  import PropTypes from 'prop-types';
  import clsx from 'clsx';
  import { withStyles } from '@material-ui/core/styles';
  import usePagination from './usePagination';
  import PaginationItem from '../PaginationItem';
  export var styles = {
    /* Styles applied to the root element. */
    root: {},
  
    /* Styles applied to the ul element. */
    ul: {
      display: 'flex',
      flexWrap: 'wrap',
      alignItems: 'center',
      padding: 0,
      margin: 0,
      listStyle: 'none'
    }
  };
  
  function defaultGetAriaLabel(type, page, selected) {
    if (type === 'page') {
      return "".concat(selected ? '' : 'Go to ', "page ").concat(page);
    }
  
    return "Go to ".concat(type, " page");
  }
  
  var Pagination = React.forwardRef(function Pagination(props, ref) {
    var boundaryCount = props.boundaryCount,
        classes = props.classes,
        className = props.className,
        _props$color = props.color,
        color = _props$color === void 0 ? 'standard' : _props$color,
        count = props.count,
        defaultPage = props.defaultPage,
        disabled = props.disabled,
        _props$getItemAriaLab = props.getItemAriaLabel,
        getAriaLabel = _props$getItemAriaLab === void 0 ? defaultGetAriaLabel : _props$getItemAriaLab,
        hideNextButton = props.hideNextButton,
        hidePrevButton = props.hidePrevButton,
        onChange = props.onChange,
        page = props.page,
        _props$renderItem = props.renderItem,
        renderItem = _props$renderItem === void 0 ? function (item) {
      return /*#__PURE__*/React.createElement(PaginationItem, item);
    } : _props$renderItem,
        _props$shape = props.shape,
        shape = _props$shape === void 0 ? 'round' : _props$shape,
        showFirstButton = props.showFirstButton,
        showLastButton = props.showLastButton,
        siblingCount = props.siblingCount,
        _props$size = props.size,
        size = _props$size === void 0 ? 'medium' : _props$size,
        _props$variant = props.variant,
        variant = _props$variant === void 0 ? 'text' : _props$variant,
        other = _objectWithoutProperties(props, ["boundaryCount", "classes", "className", "color", "count", "defaultPage", "disabled", "getItemAriaLabel", "hideNextButton", "hidePrevButton", "onChange", "page", "renderItem", "shape", "showFirstButton", "showLastButton", "siblingCount", "size", "variant"]);
  
    var _usePagination = usePagination(_extends({}, props, {
      componentName: 'Pagination'
    })),
        items = _usePagination.items;
  
    return /*#__PURE__*/React.createElement("nav", _extends({
      "aria-label": "pagination navigation",
      className: clsx(classes.root, className),
      ref: ref
    }, other), /*#__PURE__*/React.createElement("ul", {
      className: classes.ul
    }, items.map(function (item, index) {
      return /*#__PURE__*/React.createElement("li", {
        key: index
      }, renderItem(_extends({}, item, {
        color: color,
        'aria-label': getAriaLabel(item.type, item.page, item.selected),
        shape: shape,
        size: size,
        variant: variant
      })));
    })));
  }); // @default tags synced with default values from usePagination
  
  process.env.NODE_ENV !== "production" ? Pagination.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: PropTypes.number,
  
    /**
     * Override or extend the styles applied to the component.
     * See [CSS API](#css) below for more details.
     */
    classes: PropTypes.object,
  
    /**
     * @ignore
     */
    className: PropTypes.string,
  
    /**
     * The active color.
     */
    color: PropTypes.oneOf(['default', 'primary', 'secondary']),
  
    /**
     * The total number of pages.
     * @default 1
     */
    count: PropTypes.number,
  
    /**
     * The page selected by default when the component is uncontrolled.
     * @default 1
     */
    defaultPage: PropTypes.number,
  
    /**
     * If `true`, the pagination component will be disabled.
     * @default false
     */
    disabled: PropTypes.bool,
  
    /**
     * Accepts a function which returns a string value that provides a user-friendly name for the current page.
     *
     * For localization purposes, you can use the provided [translations](/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.func,
  
    /**
     * If `true`, hide the next-page button.
     * @default false
     */
    hideNextButton: PropTypes.bool,
  
    /**
     * If `true`, hide the previous-page button.
     * @default false
     */
    hidePrevButton: PropTypes.bool,
  
    /**
     * Callback fired when the page is changed.
     *
     * @param {object} event The event source of the callback.
     * @param {number} page The page selected.
     */
    onChange: PropTypes.func,
  
    /**
     * The current page.
     */
    page: PropTypes.number,
  
    /**
     * Render the item.
     *
     * @param {object} params The props to spread on a PaginationItem.
     * @returns {ReactNode}
     */
    renderItem: PropTypes.func,
  
    /**
     * The shape of the pagination items.
     */
    shape: PropTypes.oneOf(['round', 'rounded']),
  
    /**
     * If `true`, show the first-page button.
     * @default false
     */
    showFirstButton: PropTypes.bool,
  
    /**
     * If `true`, show the last-page button.
     * @default false
     */
    showLastButton: PropTypes.bool,
  
    /**
     * Number of always visible pages before and after the current page.
     * @default 1
     */
    siblingCount: PropTypes.number,
  
    /**
     * The size of the pagination component.
     */
    size: PropTypes.oneOf(['large', 'medium', 'small']),
  
    /**
     * The variant to use.
     */
    variant: PropTypes.oneOf(['outlined', 'text'])
  } : void 0;
  export default withStyles(styles, {
    name: 'MuiPagination'
  })(Pagination);