UNPKG

9.4 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 _capitalize = _interopRequireDefault(require("../utils/capitalize"));
16var _TableContext = _interopRequireDefault(require("../Table/TableContext"));
17var _Tablelvl2Context = _interopRequireDefault(require("../Table/Tablelvl2Context"));
18var _zeroStyled = require("../zero-styled");
19var _memoTheme = _interopRequireDefault(require("../utils/memoTheme"));
20var _DefaultPropsProvider = require("../DefaultPropsProvider");
21var _tableCellClasses = _interopRequireWildcard(require("./tableCellClasses"));
22var _jsxRuntime = require("react/jsx-runtime");
23const useUtilityClasses = ownerState => {
24 const {
25 classes,
26 variant,
27 align,
28 padding,
29 size,
30 stickyHeader
31 } = ownerState;
32 const slots = {
33 root: ['root', variant, stickyHeader && 'stickyHeader', align !== 'inherit' && `align${(0, _capitalize.default)(align)}`, padding !== 'normal' && `padding${(0, _capitalize.default)(padding)}`, `size${(0, _capitalize.default)(size)}`]
34 };
35 return (0, _composeClasses.default)(slots, _tableCellClasses.getTableCellUtilityClass, classes);
36};
37const TableCellRoot = (0, _zeroStyled.styled)('td', {
38 name: 'MuiTableCell',
39 slot: 'Root',
40 overridesResolver: (props, styles) => {
41 const {
42 ownerState
43 } = props;
44 return [styles.root, styles[ownerState.variant], styles[`size${(0, _capitalize.default)(ownerState.size)}`], ownerState.padding !== 'normal' && styles[`padding${(0, _capitalize.default)(ownerState.padding)}`], ownerState.align !== 'inherit' && styles[`align${(0, _capitalize.default)(ownerState.align)}`], ownerState.stickyHeader && styles.stickyHeader];
45 }
46})((0, _memoTheme.default)(({
47 theme
48}) => ({
49 ...theme.typography.body2,
50 display: 'table-cell',
51 verticalAlign: 'inherit',
52 // Workaround for a rendering bug with spanned columns in Chrome 62.0.
53 // Removes the alpha (sets it to 1), and lightens or darkens the theme color.
54 borderBottom: theme.vars ? `1px solid ${theme.vars.palette.TableCell.border}` : `1px solid
55 ${theme.palette.mode === 'light' ? (0, _colorManipulator.lighten)((0, _colorManipulator.alpha)(theme.palette.divider, 1), 0.88) : (0, _colorManipulator.darken)((0, _colorManipulator.alpha)(theme.palette.divider, 1), 0.68)}`,
56 textAlign: 'left',
57 padding: 16,
58 variants: [{
59 props: {
60 variant: 'head'
61 },
62 style: {
63 color: (theme.vars || theme).palette.text.primary,
64 lineHeight: theme.typography.pxToRem(24),
65 fontWeight: theme.typography.fontWeightMedium
66 }
67 }, {
68 props: {
69 variant: 'body'
70 },
71 style: {
72 color: (theme.vars || theme).palette.text.primary
73 }
74 }, {
75 props: {
76 variant: 'footer'
77 },
78 style: {
79 color: (theme.vars || theme).palette.text.secondary,
80 lineHeight: theme.typography.pxToRem(21),
81 fontSize: theme.typography.pxToRem(12)
82 }
83 }, {
84 props: {
85 size: 'small'
86 },
87 style: {
88 padding: '6px 16px',
89 [`&.${_tableCellClasses.default.paddingCheckbox}`]: {
90 width: 24,
91 // prevent the checkbox column from growing
92 padding: '0 12px 0 16px',
93 '& > *': {
94 padding: 0
95 }
96 }
97 }
98 }, {
99 props: {
100 padding: 'checkbox'
101 },
102 style: {
103 width: 48,
104 // prevent the checkbox column from growing
105 padding: '0 0 0 4px'
106 }
107 }, {
108 props: {
109 padding: 'none'
110 },
111 style: {
112 padding: 0
113 }
114 }, {
115 props: {
116 align: 'left'
117 },
118 style: {
119 textAlign: 'left'
120 }
121 }, {
122 props: {
123 align: 'center'
124 },
125 style: {
126 textAlign: 'center'
127 }
128 }, {
129 props: {
130 align: 'right'
131 },
132 style: {
133 textAlign: 'right',
134 flexDirection: 'row-reverse'
135 }
136 }, {
137 props: {
138 align: 'justify'
139 },
140 style: {
141 textAlign: 'justify'
142 }
143 }, {
144 props: ({
145 ownerState
146 }) => ownerState.stickyHeader,
147 style: {
148 position: 'sticky',
149 top: 0,
150 zIndex: 2,
151 backgroundColor: (theme.vars || theme).palette.background.default
152 }
153 }]
154})));
155
156/**
157 * The component renders a `<th>` element when the parent context is a header
158 * or otherwise a `<td>` element.
159 */
160const TableCell = /*#__PURE__*/React.forwardRef(function TableCell(inProps, ref) {
161 const props = (0, _DefaultPropsProvider.useDefaultProps)({
162 props: inProps,
163 name: 'MuiTableCell'
164 });
165 const {
166 align = 'inherit',
167 className,
168 component: componentProp,
169 padding: paddingProp,
170 scope: scopeProp,
171 size: sizeProp,
172 sortDirection,
173 variant: variantProp,
174 ...other
175 } = props;
176 const table = React.useContext(_TableContext.default);
177 const tablelvl2 = React.useContext(_Tablelvl2Context.default);
178 const isHeadCell = tablelvl2 && tablelvl2.variant === 'head';
179 let component;
180 if (componentProp) {
181 component = componentProp;
182 } else {
183 component = isHeadCell ? 'th' : 'td';
184 }
185 let scope = scopeProp;
186 // scope is not a valid attribute for <td/> elements.
187 // source: https://html.spec.whatwg.org/multipage/tables.html#the-td-element
188 if (component === 'td') {
189 scope = undefined;
190 } else if (!scope && isHeadCell) {
191 scope = 'col';
192 }
193 const variant = variantProp || tablelvl2 && tablelvl2.variant;
194 const ownerState = {
195 ...props,
196 align,
197 component,
198 padding: paddingProp || (table && table.padding ? table.padding : 'normal'),
199 size: sizeProp || (table && table.size ? table.size : 'medium'),
200 sortDirection,
201 stickyHeader: variant === 'head' && table && table.stickyHeader,
202 variant
203 };
204 const classes = useUtilityClasses(ownerState);
205 let ariaSort = null;
206 if (sortDirection) {
207 ariaSort = sortDirection === 'asc' ? 'ascending' : 'descending';
208 }
209 return /*#__PURE__*/(0, _jsxRuntime.jsx)(TableCellRoot, {
210 as: component,
211 ref: ref,
212 className: (0, _clsx.default)(classes.root, className),
213 "aria-sort": ariaSort,
214 scope: scope,
215 ownerState: ownerState,
216 ...other
217 });
218});
219process.env.NODE_ENV !== "production" ? TableCell.propTypes /* remove-proptypes */ = {
220 // ┌────────────────────────────── Warning ──────────────────────────────┐
221 // │ These PropTypes are generated from the TypeScript type definitions. │
222 // │ To update them, edit the d.ts file and run `pnpm proptypes`. │
223 // └─────────────────────────────────────────────────────────────────────┘
224 /**
225 * Set the text-align on the table cell content.
226 *
227 * Monetary or generally number fields **should be right aligned** as that allows
228 * you to add them up quickly in your head without having to worry about decimals.
229 * @default 'inherit'
230 */
231 align: _propTypes.default.oneOf(['center', 'inherit', 'justify', 'left', 'right']),
232 /**
233 * The content of the component.
234 */
235 children: _propTypes.default.node,
236 /**
237 * Override or extend the styles applied to the component.
238 */
239 classes: _propTypes.default.object,
240 /**
241 * @ignore
242 */
243 className: _propTypes.default.string,
244 /**
245 * The component used for the root node.
246 * Either a string to use a HTML element or a component.
247 */
248 component: _propTypes.default.elementType,
249 /**
250 * Sets the padding applied to the cell.
251 * The prop defaults to the value (`'default'`) inherited from the parent Table component.
252 */
253 padding: _propTypes.default.oneOf(['checkbox', 'none', 'normal']),
254 /**
255 * Set scope attribute.
256 */
257 scope: _propTypes.default.string,
258 /**
259 * Specify the size of the cell.
260 * The prop defaults to the value (`'medium'`) inherited from the parent Table component.
261 */
262 size: _propTypes.default /* @typescript-to-proptypes-ignore */.oneOfType([_propTypes.default.oneOf(['medium', 'small']), _propTypes.default.string]),
263 /**
264 * Set aria-sort direction.
265 */
266 sortDirection: _propTypes.default.oneOf(['asc', 'desc', false]),
267 /**
268 * The system prop that allows defining system overrides as well as additional CSS styles.
269 */
270 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]),
271 /**
272 * Specify the cell type.
273 * The prop defaults to the value inherited from the parent TableHead, TableBody, or TableFooter components.
274 */
275 variant: _propTypes.default /* @typescript-to-proptypes-ignore */.oneOfType([_propTypes.default.oneOf(['body', 'footer', 'head']), _propTypes.default.string])
276} : void 0;
277var _default = exports.default = TableCell;
\No newline at end of file