UNPKG

17.9 kBJavaScriptView Raw
1"use strict";
2'use client';
3
4var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
5var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard").default;
6Object.defineProperty(exports, "__esModule", {
7 value: true
8});
9exports.default = void 0;
10var React = _interopRequireWildcard(require("react"));
11var _propTypes = _interopRequireDefault(require("prop-types"));
12var _clsx = _interopRequireDefault(require("clsx"));
13var _composeClasses = _interopRequireDefault(require("@mui/utils/composeClasses"));
14var _colorManipulator = require("@mui/system/colorManipulator");
15var _RtlProvider = require("@mui/system/RtlProvider");
16var _paginationItemClasses = _interopRequireWildcard(require("./paginationItemClasses"));
17var _ButtonBase = _interopRequireDefault(require("../ButtonBase"));
18var _capitalize = _interopRequireDefault(require("../utils/capitalize"));
19var _createSimplePaletteValueFilter = _interopRequireDefault(require("../utils/createSimplePaletteValueFilter"));
20var _FirstPage = _interopRequireDefault(require("../internal/svg-icons/FirstPage"));
21var _LastPage = _interopRequireDefault(require("../internal/svg-icons/LastPage"));
22var _NavigateBefore = _interopRequireDefault(require("../internal/svg-icons/NavigateBefore"));
23var _NavigateNext = _interopRequireDefault(require("../internal/svg-icons/NavigateNext"));
24var _useSlot = _interopRequireDefault(require("../utils/useSlot"));
25var _zeroStyled = require("../zero-styled");
26var _memoTheme = _interopRequireDefault(require("../utils/memoTheme"));
27var _DefaultPropsProvider = require("../DefaultPropsProvider");
28var _jsxRuntime = require("react/jsx-runtime");
29const overridesResolver = (props, styles) => {
30 const {
31 ownerState
32 } = props;
33 return [styles.root, styles[ownerState.variant], styles[`size${(0, _capitalize.default)(ownerState.size)}`], ownerState.variant === 'text' && styles[`text${(0, _capitalize.default)(ownerState.color)}`], ownerState.variant === 'outlined' && styles[`outlined${(0, _capitalize.default)(ownerState.color)}`], ownerState.shape === 'rounded' && styles.rounded, ownerState.type === 'page' && styles.page, (ownerState.type === 'start-ellipsis' || ownerState.type === 'end-ellipsis') && styles.ellipsis, (ownerState.type === 'previous' || ownerState.type === 'next') && styles.previousNext, (ownerState.type === 'first' || ownerState.type === 'last') && styles.firstLast];
34};
35const useUtilityClasses = ownerState => {
36 const {
37 classes,
38 color,
39 disabled,
40 selected,
41 size,
42 shape,
43 type,
44 variant
45 } = ownerState;
46 const slots = {
47 root: ['root', `size${(0, _capitalize.default)(size)}`, variant, shape, color !== 'standard' && `color${(0, _capitalize.default)(color)}`, color !== 'standard' && `${variant}${(0, _capitalize.default)(color)}`, disabled && 'disabled', selected && 'selected', {
48 page: 'page',
49 first: 'firstLast',
50 last: 'firstLast',
51 'start-ellipsis': 'ellipsis',
52 'end-ellipsis': 'ellipsis',
53 previous: 'previousNext',
54 next: 'previousNext'
55 }[type]],
56 icon: ['icon']
57 };
58 return (0, _composeClasses.default)(slots, _paginationItemClasses.getPaginationItemUtilityClass, classes);
59};
60const PaginationItemEllipsis = (0, _zeroStyled.styled)('div', {
61 name: 'MuiPaginationItem',
62 slot: 'Root',
63 overridesResolver
64})((0, _memoTheme.default)(({
65 theme
66}) => ({
67 ...theme.typography.body2,
68 borderRadius: 32 / 2,
69 textAlign: 'center',
70 boxSizing: 'border-box',
71 minWidth: 32,
72 padding: '0 6px',
73 margin: '0 3px',
74 color: (theme.vars || theme).palette.text.primary,
75 height: 'auto',
76 [`&.${_paginationItemClasses.default.disabled}`]: {
77 opacity: (theme.vars || theme).palette.action.disabledOpacity
78 },
79 variants: [{
80 props: {
81 size: 'small'
82 },
83 style: {
84 minWidth: 26,
85 borderRadius: 26 / 2,
86 margin: '0 1px',
87 padding: '0 4px'
88 }
89 }, {
90 props: {
91 size: 'large'
92 },
93 style: {
94 minWidth: 40,
95 borderRadius: 40 / 2,
96 padding: '0 10px',
97 fontSize: theme.typography.pxToRem(15)
98 }
99 }]
100})));
101const PaginationItemPage = (0, _zeroStyled.styled)(_ButtonBase.default, {
102 name: 'MuiPaginationItem',
103 slot: 'Root',
104 overridesResolver
105})((0, _memoTheme.default)(({
106 theme
107}) => ({
108 ...theme.typography.body2,
109 borderRadius: 32 / 2,
110 textAlign: 'center',
111 boxSizing: 'border-box',
112 minWidth: 32,
113 height: 32,
114 padding: '0 6px',
115 margin: '0 3px',
116 color: (theme.vars || theme).palette.text.primary,
117 [`&.${_paginationItemClasses.default.focusVisible}`]: {
118 backgroundColor: (theme.vars || theme).palette.action.focus
119 },
120 [`&.${_paginationItemClasses.default.disabled}`]: {
121 opacity: (theme.vars || theme).palette.action.disabledOpacity
122 },
123 transition: theme.transitions.create(['color', 'background-color'], {
124 duration: theme.transitions.duration.short
125 }),
126 '&:hover': {
127 backgroundColor: (theme.vars || theme).palette.action.hover,
128 // Reset on touch devices, it doesn't add specificity
129 '@media (hover: none)': {
130 backgroundColor: 'transparent'
131 }
132 },
133 [`&.${_paginationItemClasses.default.selected}`]: {
134 backgroundColor: (theme.vars || theme).palette.action.selected,
135 '&:hover': {
136 backgroundColor: theme.vars ? `rgba(${theme.vars.palette.action.selectedChannel} / calc(${theme.vars.palette.action.selectedOpacity} + ${theme.vars.palette.action.hoverOpacity}))` : (0, _colorManipulator.alpha)(theme.palette.action.selected, theme.palette.action.selectedOpacity + theme.palette.action.hoverOpacity),
137 // Reset on touch devices, it doesn't add specificity
138 '@media (hover: none)': {
139 backgroundColor: (theme.vars || theme).palette.action.selected
140 }
141 },
142 [`&.${_paginationItemClasses.default.focusVisible}`]: {
143 backgroundColor: theme.vars ? `rgba(${theme.vars.palette.action.selectedChannel} / calc(${theme.vars.palette.action.selectedOpacity} + ${theme.vars.palette.action.focusOpacity}))` : (0, _colorManipulator.alpha)(theme.palette.action.selected, theme.palette.action.selectedOpacity + theme.palette.action.focusOpacity)
144 },
145 [`&.${_paginationItemClasses.default.disabled}`]: {
146 opacity: 1,
147 color: (theme.vars || theme).palette.action.disabled,
148 backgroundColor: (theme.vars || theme).palette.action.selected
149 }
150 },
151 variants: [{
152 props: {
153 size: 'small'
154 },
155 style: {
156 minWidth: 26,
157 height: 26,
158 borderRadius: 26 / 2,
159 margin: '0 1px',
160 padding: '0 4px'
161 }
162 }, {
163 props: {
164 size: 'large'
165 },
166 style: {
167 minWidth: 40,
168 height: 40,
169 borderRadius: 40 / 2,
170 padding: '0 10px',
171 fontSize: theme.typography.pxToRem(15)
172 }
173 }, {
174 props: {
175 shape: 'rounded'
176 },
177 style: {
178 borderRadius: (theme.vars || theme).shape.borderRadius
179 }
180 }, {
181 props: {
182 variant: 'outlined'
183 },
184 style: {
185 border: theme.vars ? `1px solid rgba(${theme.vars.palette.common.onBackgroundChannel} / 0.23)` : `1px solid ${theme.palette.mode === 'light' ? 'rgba(0, 0, 0, 0.23)' : 'rgba(255, 255, 255, 0.23)'}`,
186 [`&.${_paginationItemClasses.default.selected}`]: {
187 [`&.${_paginationItemClasses.default.disabled}`]: {
188 borderColor: (theme.vars || theme).palette.action.disabledBackground,
189 color: (theme.vars || theme).palette.action.disabled
190 }
191 }
192 }
193 }, {
194 props: {
195 variant: 'text'
196 },
197 style: {
198 [`&.${_paginationItemClasses.default.selected}`]: {
199 [`&.${_paginationItemClasses.default.disabled}`]: {
200 color: (theme.vars || theme).palette.action.disabled
201 }
202 }
203 }
204 }, ...Object.entries(theme.palette).filter((0, _createSimplePaletteValueFilter.default)(['dark', 'contrastText'])).map(([color]) => ({
205 props: {
206 variant: 'text',
207 color
208 },
209 style: {
210 [`&.${_paginationItemClasses.default.selected}`]: {
211 color: (theme.vars || theme).palette[color].contrastText,
212 backgroundColor: (theme.vars || theme).palette[color].main,
213 '&:hover': {
214 backgroundColor: (theme.vars || theme).palette[color].dark,
215 // Reset on touch devices, it doesn't add specificity
216 '@media (hover: none)': {
217 backgroundColor: (theme.vars || theme).palette[color].main
218 }
219 },
220 [`&.${_paginationItemClasses.default.focusVisible}`]: {
221 backgroundColor: (theme.vars || theme).palette[color].dark
222 },
223 [`&.${_paginationItemClasses.default.disabled}`]: {
224 color: (theme.vars || theme).palette.action.disabled
225 }
226 }
227 }
228 })), ...Object.entries(theme.palette).filter((0, _createSimplePaletteValueFilter.default)(['light'])).map(([color]) => ({
229 props: {
230 variant: 'outlined',
231 color
232 },
233 style: {
234 [`&.${_paginationItemClasses.default.selected}`]: {
235 color: (theme.vars || theme).palette[color].main,
236 border: `1px solid ${theme.vars ? `rgba(${theme.vars.palette[color].mainChannel} / 0.5)` : (0, _colorManipulator.alpha)(theme.palette[color].main, 0.5)}`,
237 backgroundColor: theme.vars ? `rgba(${theme.vars.palette[color].mainChannel} / ${theme.vars.palette.action.activatedOpacity})` : (0, _colorManipulator.alpha)(theme.palette[color].main, theme.palette.action.activatedOpacity),
238 '&:hover': {
239 backgroundColor: theme.vars ? `rgba(${theme.vars.palette[color].mainChannel} / calc(${theme.vars.palette.action.activatedOpacity} + ${theme.vars.palette.action.focusOpacity}))` : (0, _colorManipulator.alpha)(theme.palette[color].main, theme.palette.action.activatedOpacity + theme.palette.action.focusOpacity),
240 // Reset on touch devices, it doesn't add specificity
241 '@media (hover: none)': {
242 backgroundColor: 'transparent'
243 }
244 },
245 [`&.${_paginationItemClasses.default.focusVisible}`]: {
246 backgroundColor: theme.vars ? `rgba(${theme.vars.palette[color].mainChannel} / calc(${theme.vars.palette.action.activatedOpacity} + ${theme.vars.palette.action.focusOpacity}))` : (0, _colorManipulator.alpha)(theme.palette[color].main, theme.palette.action.activatedOpacity + theme.palette.action.focusOpacity)
247 }
248 }
249 }
250 }))]
251})));
252const PaginationItemPageIcon = (0, _zeroStyled.styled)('div', {
253 name: 'MuiPaginationItem',
254 slot: 'Icon',
255 overridesResolver: (props, styles) => styles.icon
256})((0, _memoTheme.default)(({
257 theme
258}) => ({
259 fontSize: theme.typography.pxToRem(20),
260 margin: '0 -8px',
261 variants: [{
262 props: {
263 size: 'small'
264 },
265 style: {
266 fontSize: theme.typography.pxToRem(18)
267 }
268 }, {
269 props: {
270 size: 'large'
271 },
272 style: {
273 fontSize: theme.typography.pxToRem(22)
274 }
275 }]
276})));
277const PaginationItem = /*#__PURE__*/React.forwardRef(function PaginationItem(inProps, ref) {
278 const props = (0, _DefaultPropsProvider.useDefaultProps)({
279 props: inProps,
280 name: 'MuiPaginationItem'
281 });
282 const {
283 className,
284 color = 'standard',
285 component,
286 components = {},
287 disabled = false,
288 page,
289 selected = false,
290 shape = 'circular',
291 size = 'medium',
292 slots = {},
293 slotProps = {},
294 type = 'page',
295 variant = 'text',
296 ...other
297 } = props;
298 const ownerState = {
299 ...props,
300 color,
301 disabled,
302 selected,
303 shape,
304 size,
305 type,
306 variant
307 };
308 const isRtl = (0, _RtlProvider.useRtl)();
309 const classes = useUtilityClasses(ownerState);
310 const externalForwardedProps = {
311 slots: {
312 previous: slots.previous ?? components.previous,
313 next: slots.next ?? components.next,
314 first: slots.first ?? components.first,
315 last: slots.last ?? components.last
316 },
317 slotProps
318 };
319 const [PreviousSlot, previousSlotProps] = (0, _useSlot.default)('previous', {
320 elementType: _NavigateBefore.default,
321 externalForwardedProps,
322 ownerState
323 });
324 const [NextSlot, nextSlotProps] = (0, _useSlot.default)('next', {
325 elementType: _NavigateNext.default,
326 externalForwardedProps,
327 ownerState
328 });
329 const [FirstSlot, firstSlotProps] = (0, _useSlot.default)('first', {
330 elementType: _FirstPage.default,
331 externalForwardedProps,
332 ownerState
333 });
334 const [LastSlot, lastSlotProps] = (0, _useSlot.default)('last', {
335 elementType: _LastPage.default,
336 externalForwardedProps,
337 ownerState
338 });
339 const rtlAwareType = isRtl ? {
340 previous: 'next',
341 next: 'previous',
342 first: 'last',
343 last: 'first'
344 }[type] : type;
345 const IconSlot = {
346 previous: PreviousSlot,
347 next: NextSlot,
348 first: FirstSlot,
349 last: LastSlot
350 }[rtlAwareType];
351 const iconSlotProps = {
352 previous: previousSlotProps,
353 next: nextSlotProps,
354 first: firstSlotProps,
355 last: lastSlotProps
356 }[rtlAwareType];
357 return type === 'start-ellipsis' || type === 'end-ellipsis' ? /*#__PURE__*/(0, _jsxRuntime.jsx)(PaginationItemEllipsis, {
358 ref: ref,
359 ownerState: ownerState,
360 className: (0, _clsx.default)(classes.root, className),
361 children: "\u2026"
362 }) : /*#__PURE__*/(0, _jsxRuntime.jsxs)(PaginationItemPage, {
363 ref: ref,
364 ownerState: ownerState,
365 component: component,
366 disabled: disabled,
367 className: (0, _clsx.default)(classes.root, className),
368 ...other,
369 children: [type === 'page' && page, IconSlot ? /*#__PURE__*/(0, _jsxRuntime.jsx)(PaginationItemPageIcon, {
370 ...iconSlotProps,
371 className: classes.icon,
372 as: IconSlot
373 }) : null]
374 });
375});
376process.env.NODE_ENV !== "production" ? PaginationItem.propTypes /* remove-proptypes */ = {
377 // ┌────────────────────────────── Warning ──────────────────────────────┐
378 // │ These PropTypes are generated from the TypeScript type definitions. │
379 // │ To update them, edit the d.ts file and run `pnpm proptypes`. │
380 // └─────────────────────────────────────────────────────────────────────┘
381 /**
382 * @ignore
383 */
384 children: _propTypes.default.node,
385 /**
386 * Override or extend the styles applied to the component.
387 */
388 classes: _propTypes.default.object,
389 /**
390 * @ignore
391 */
392 className: _propTypes.default.string,
393 /**
394 * The active color.
395 * It supports both default and custom theme colors, which can be added as shown in the
396 * [palette customization guide](https://mui.com/material-ui/customization/palette/#custom-colors).
397 * @default 'standard'
398 */
399 color: _propTypes.default /* @typescript-to-proptypes-ignore */.oneOfType([_propTypes.default.oneOf(['primary', 'secondary', 'standard']), _propTypes.default.string]),
400 /**
401 * The component used for the root node.
402 * Either a string to use a HTML element or a component.
403 */
404 component: _propTypes.default.elementType,
405 /**
406 * The components used for each slot inside.
407 *
408 * This prop is an alias for the `slots` prop.
409 * It's recommended to use the `slots` prop instead.
410 *
411 * @default {}
412 * @deprecated use the `slots` prop instead. This prop will be removed in v7. See [Migrating from deprecated APIs](https://mui.com/material-ui/migration/migrating-from-deprecated-apis/) for more details.
413 */
414 components: _propTypes.default.shape({
415 first: _propTypes.default.elementType,
416 last: _propTypes.default.elementType,
417 next: _propTypes.default.elementType,
418 previous: _propTypes.default.elementType
419 }),
420 /**
421 * If `true`, the component is disabled.
422 * @default false
423 */
424 disabled: _propTypes.default.bool,
425 /**
426 * The current page number.
427 */
428 page: _propTypes.default.node,
429 /**
430 * If `true` the pagination item is selected.
431 * @default false
432 */
433 selected: _propTypes.default.bool,
434 /**
435 * The shape of the pagination item.
436 * @default 'circular'
437 */
438 shape: _propTypes.default.oneOf(['circular', 'rounded']),
439 /**
440 * The size of the component.
441 * @default 'medium'
442 */
443 size: _propTypes.default /* @typescript-to-proptypes-ignore */.oneOfType([_propTypes.default.oneOf(['small', 'medium', 'large']), _propTypes.default.string]),
444 /**
445 * The props used for each slot inside.
446 * @default {}
447 */
448 slotProps: _propTypes.default.shape({
449 first: _propTypes.default.oneOfType([_propTypes.default.func, _propTypes.default.object]),
450 last: _propTypes.default.oneOfType([_propTypes.default.func, _propTypes.default.object]),
451 next: _propTypes.default.oneOfType([_propTypes.default.func, _propTypes.default.object]),
452 previous: _propTypes.default.oneOfType([_propTypes.default.func, _propTypes.default.object])
453 }),
454 /**
455 * The components used for each slot inside.
456 * @default {}
457 */
458 slots: _propTypes.default.shape({
459 first: _propTypes.default.elementType,
460 last: _propTypes.default.elementType,
461 next: _propTypes.default.elementType,
462 previous: _propTypes.default.elementType
463 }),
464 /**
465 * The system prop that allows defining system overrides as well as additional CSS styles.
466 */
467 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]),
468 /**
469 * The type of pagination item.
470 * @default 'page'
471 */
472 type: _propTypes.default.oneOf(['end-ellipsis', 'first', 'last', 'next', 'page', 'previous', 'start-ellipsis']),
473 /**
474 * The variant to use.
475 * @default 'text'
476 */
477 variant: _propTypes.default /* @typescript-to-proptypes-ignore */.oneOfType([_propTypes.default.oneOf(['outlined', 'text']), _propTypes.default.string])
478} : void 0;
479var _default = exports.default = PaginationItem;
\No newline at end of file