paradiego

This commit is contained in:
2024-09-18 13:34:19 -03:00
commit 3f0e204289
12510 changed files with 1486101 additions and 0 deletions

View File

@@ -0,0 +1,17 @@
import * as React from 'react';
import { DistributiveOmit, OverridableTypeMap } from '@mui/types';
/**
* A component whose root component can be controlled explicitly with a generic type parameter.
* Adjusts valid props based on the type of `RootComponent`.
*
* @template TypeMap The interface the defines the props and a default root element of the component.
*/
export type PolymorphicComponent<TypeMap extends OverridableTypeMap> = {
<RootComponent extends React.ElementType = TypeMap['defaultComponent']>(props: PolymorphicProps<TypeMap, RootComponent>): React.JSX.Element | null;
propTypes?: any;
displayName?: string | undefined;
};
/**
* Own props of the component augmented with props of the root component.
*/
export type PolymorphicProps<TypeMap extends OverridableTypeMap, RootComponent extends React.ElementType> = TypeMap['props'] & DistributiveOmit<React.ComponentPropsWithRef<RootComponent>, keyof TypeMap['props']>;

View File

@@ -0,0 +1 @@
export {};

3
node_modules/@mui/material/utils/areArraysEqual.d.ts generated vendored Normal file
View File

@@ -0,0 +1,3 @@
type ItemComparer<Item> = (a: Item, b: Item) => boolean;
declare function areArraysEqual<Item>(array1: ReadonlyArray<Item>, array2: ReadonlyArray<Item>, itemComparer?: ItemComparer<Item>): boolean;
export default areArraysEqual;

4
node_modules/@mui/material/utils/areArraysEqual.js generated vendored Normal file
View File

@@ -0,0 +1,4 @@
function areArraysEqual(array1, array2, itemComparer = (a, b) => a === b) {
return array1.length === array2.length && array1.every((value, index) => itemComparer(value, array2[index]));
}
export default areArraysEqual;

3
node_modules/@mui/material/utils/capitalize.d.ts generated vendored Normal file
View File

@@ -0,0 +1,3 @@
import capitalize from '@mui/utils/capitalize';
export default capitalize;

2
node_modules/@mui/material/utils/capitalize.js generated vendored Normal file
View File

@@ -0,0 +1,2 @@
import capitalize from '@mui/utils/capitalize';
export default capitalize;

View File

@@ -0,0 +1,3 @@
import createChainedFunction from '@mui/utils/createChainedFunction';
export default createChainedFunction;

View File

@@ -0,0 +1,2 @@
import createChainedFunction from '@mui/utils/createChainedFunction';
export default createChainedFunction;

View File

@@ -0,0 +1,12 @@
import { PaletteColorOptions, SimplePaletteColorOptions } from '../styles/createPalette';
type AdditionalPropertiesToCheck = (keyof Omit<SimplePaletteColorOptions, 'main'>)[];
/**
* Creates a filter function used to filter simple palette color options.
* The minimum requirement is that the object has a "main" property of type string, this is always checked.
* Optionally, you can pass additional properties to check.
*
* @param additionalPropertiesToCheck - Array containing "light", "dark", and/or "contrastText"
* @returns ([, value]: [any, PaletteColorOptions]) => boolean
*/
export default function createSimplePaletteValueFilter(additionalPropertiesToCheck?: AdditionalPropertiesToCheck): ([, value]: [any, PaletteColorOptions]) => boolean;
export {};

View File

@@ -0,0 +1,41 @@
/**
* Type guard to check if the object has a "main" property of type string.
*
* @param obj - the object to check
* @returns boolean
*/
function hasCorrectMainProperty(obj) {
return typeof obj.main === 'string';
}
/**
* Checks if the object conforms to the SimplePaletteColorOptions type.
* The minimum requirement is that the object has a "main" property of type string, this is always checked.
* Optionally, you can pass additional properties to check.
*
* @param obj - The object to check
* @param additionalPropertiesToCheck - Array containing "light", "dark", and/or "contrastText"
* @returns boolean
*/
function checkSimplePaletteColorValues(obj, additionalPropertiesToCheck = []) {
if (!hasCorrectMainProperty(obj)) {
return false;
}
for (const value of additionalPropertiesToCheck) {
if (!obj.hasOwnProperty(value) || typeof obj[value] !== 'string') {
return false;
}
}
return true;
}
/**
* Creates a filter function used to filter simple palette color options.
* The minimum requirement is that the object has a "main" property of type string, this is always checked.
* Optionally, you can pass additional properties to check.
*
* @param additionalPropertiesToCheck - Array containing "light", "dark", and/or "contrastText"
* @returns ([, value]: [any, PaletteColorOptions]) => boolean
*/
export default function createSimplePaletteValueFilter(additionalPropertiesToCheck = []) {
return ([, value]) => value && checkSimplePaletteColorValues(value, additionalPropertiesToCheck);
}

3
node_modules/@mui/material/utils/createSvgIcon.d.ts generated vendored Normal file
View File

@@ -0,0 +1,3 @@
import SvgIcon from '@mui/material/SvgIcon';
export default function createSvgIcon(path: React.ReactNode, displayName: string): typeof SvgIcon;

26
node_modules/@mui/material/utils/createSvgIcon.js generated vendored Normal file
View File

@@ -0,0 +1,26 @@
'use client';
import * as React from 'react';
import SvgIcon from "../SvgIcon/index.js";
/**
* Private module reserved for @mui packages.
*/
import { jsx as _jsx } from "react/jsx-runtime";
export default function createSvgIcon(path, displayName) {
function Component(props, ref) {
return /*#__PURE__*/_jsx(SvgIcon, {
"data-testid": `${displayName}Icon`,
ref: ref,
...props,
children: path
});
}
if (process.env.NODE_ENV !== 'production') {
// Need to set `displayName` on the inner component for React.memo.
// React prior to 16.14 ignores `displayName` on the wrapper.
Component.displayName = `${displayName}Icon`;
}
Component.muiName = SvgIcon.muiName;
return /*#__PURE__*/React.memo(/*#__PURE__*/React.forwardRef(Component));
}

3
node_modules/@mui/material/utils/debounce.d.ts generated vendored Normal file
View File

@@ -0,0 +1,3 @@
import debounce from '@mui/utils/debounce';
export default debounce;

2
node_modules/@mui/material/utils/debounce.js generated vendored Normal file
View File

@@ -0,0 +1,2 @@
import debounce from '@mui/utils/debounce';
export default debounce;

View File

@@ -0,0 +1,3 @@
import deprecatedPropType from '@mui/utils/deprecatedPropType';
export default deprecatedPropType;

View File

@@ -0,0 +1,2 @@
import deprecatedPropType from '@mui/utils/deprecatedPropType';
export default deprecatedPropType;

View File

@@ -0,0 +1,2 @@
import getScrollbarSize from '@mui/utils/getScrollbarSize';
export default getScrollbarSize;

2
node_modules/@mui/material/utils/getScrollbarSize.js generated vendored Normal file
View File

@@ -0,0 +1,2 @@
import getScrollbarSize from '@mui/utils/getScrollbarSize';
export default getScrollbarSize;

19
node_modules/@mui/material/utils/index.d.ts generated vendored Normal file
View File

@@ -0,0 +1,19 @@
export { unstable_ClassNameGenerator } from '@mui/utils';
export { default as capitalize } from './capitalize';
export { default as createChainedFunction } from './createChainedFunction';
export { default as createSvgIcon } from './createSvgIcon';
export { default as debounce } from './debounce';
export { default as deprecatedPropType } from './deprecatedPropType';
export { default as isMuiElement } from './isMuiElement';
export { default as unstable_memoTheme } from './memoTheme';
export { default as ownerDocument } from './ownerDocument';
export { default as ownerWindow } from './ownerWindow';
export { default as requirePropFactory } from './requirePropFactory';
export { default as setRef } from './setRef';
export { default as unstable_useEnhancedEffect } from './useEnhancedEffect';
export { default as unstable_useId } from './useId';
export { default as unsupportedProp } from './unsupportedProp';
export { default as useControlled } from './useControlled';
export { default as useEventCallback } from './useEventCallback';
export { default as useForkRef } from './useForkRef';
export * from './types';

30
node_modules/@mui/material/utils/index.js generated vendored Normal file
View File

@@ -0,0 +1,30 @@
'use client';
import { unstable_ClassNameGenerator as ClassNameGenerator } from '@mui/utils';
export { default as capitalize } from "./capitalize.js";
export { default as createChainedFunction } from "./createChainedFunction.js";
export { default as createSvgIcon } from "./createSvgIcon.js";
export { default as debounce } from "./debounce.js";
export { default as deprecatedPropType } from "./deprecatedPropType.js";
export { default as isMuiElement } from "./isMuiElement.js";
export { default as unstable_memoTheme } from "./memoTheme.js";
export { default as ownerDocument } from "./ownerDocument.js";
export { default as ownerWindow } from "./ownerWindow.js";
export { default as requirePropFactory } from "./requirePropFactory.js";
export { default as setRef } from "./setRef.js";
export { default as unstable_useEnhancedEffect } from "./useEnhancedEffect.js";
export { default as unstable_useId } from "./useId.js";
export { default as unsupportedProp } from "./unsupportedProp.js";
export { default as useControlled } from "./useControlled.js";
export { default as useEventCallback } from "./useEventCallback.js";
export { default as useForkRef } from "./useForkRef.js";
// TODO: remove this export once ClassNameGenerator is stable
// eslint-disable-next-line @typescript-eslint/naming-convention
export const unstable_ClassNameGenerator = {
configure: generator => {
if (process.env.NODE_ENV !== 'production') {
console.warn(['MUI: `ClassNameGenerator` import from `@mui/material/utils` is outdated and might cause unexpected issues.', '', "You should use `import { unstable_ClassNameGenerator } from '@mui/material/className'` instead", '', 'The detail of the issue: https://github.com/mui/material-ui/issues/30011#issuecomment-1024993401', '', 'The updated documentation: https://mui.com/guides/classname-generator/'].join('\n'));
}
ClassNameGenerator.configure(generator);
}
};

View File

@@ -0,0 +1,6 @@
import * as React from 'react';
/**
* Determines if a given element is a DOM element name (i.e. not a React component).
*/
declare function isHostComponent(element: React.ElementType): element is "symbol" | "object" | "center" | "button" | "meter" | "textarea" | "style" | "progress" | "text" | "ruby" | "table" | "small" | "sub" | "circle" | "embed" | "pre" | "caption" | "menu" | "clipPath" | "filter" | "menuitem" | "mask" | "marker" | "a" | "abbr" | "address" | "area" | "article" | "aside" | "audio" | "b" | "base" | "bdi" | "bdo" | "big" | "blockquote" | "body" | "br" | "canvas" | "cite" | "code" | "col" | "colgroup" | "data" | "datalist" | "dd" | "del" | "details" | "dfn" | "dialog" | "div" | "dl" | "dt" | "em" | "fieldset" | "figcaption" | "figure" | "footer" | "form" | "h1" | "h2" | "h3" | "h4" | "h5" | "h6" | "head" | "header" | "hgroup" | "hr" | "html" | "i" | "iframe" | "img" | "input" | "ins" | "kbd" | "keygen" | "label" | "legend" | "li" | "link" | "main" | "map" | "mark" | "meta" | "nav" | "noindex" | "noscript" | "ol" | "optgroup" | "option" | "output" | "p" | "param" | "picture" | "q" | "rp" | "rt" | "s" | "samp" | "search" | "slot" | "script" | "section" | "select" | "source" | "span" | "strong" | "summary" | "sup" | "template" | "tbody" | "td" | "tfoot" | "th" | "thead" | "time" | "title" | "tr" | "track" | "u" | "ul" | "var" | "video" | "wbr" | "webview" | "svg" | "animate" | "animateMotion" | "animateTransform" | "defs" | "desc" | "ellipse" | "feBlend" | "feColorMatrix" | "feComponentTransfer" | "feComposite" | "feConvolveMatrix" | "feDiffuseLighting" | "feDisplacementMap" | "feDistantLight" | "feDropShadow" | "feFlood" | "feFuncA" | "feFuncB" | "feFuncG" | "feFuncR" | "feGaussianBlur" | "feImage" | "feMerge" | "feMergeNode" | "feMorphology" | "feOffset" | "fePointLight" | "feSpecularLighting" | "feSpotLight" | "feTile" | "feTurbulence" | "foreignObject" | "g" | "image" | "line" | "linearGradient" | "metadata" | "mpath" | "path" | "pattern" | "polygon" | "polyline" | "radialGradient" | "rect" | "set" | "stop" | "switch" | "textPath" | "tspan" | "use" | "view";
export default isHostComponent;

7
node_modules/@mui/material/utils/isHostComponent.js generated vendored Normal file
View File

@@ -0,0 +1,7 @@
/**
* Determines if a given element is a DOM element name (i.e. not a React component).
*/
function isHostComponent(element) {
return typeof element === 'string';
}
export default isHostComponent;

3
node_modules/@mui/material/utils/isMuiElement.d.ts generated vendored Normal file
View File

@@ -0,0 +1,3 @@
import isMuiElement from '@mui/utils/isMuiElement';
export default isMuiElement;

2
node_modules/@mui/material/utils/isMuiElement.js generated vendored Normal file
View File

@@ -0,0 +1,2 @@
import isMuiElement from '@mui/utils/isMuiElement';
export default isMuiElement;

13
node_modules/@mui/material/utils/memoTheme.d.ts generated vendored Normal file
View File

@@ -0,0 +1,13 @@
import { CSSInterpolation } from '@mui/system';
import { Theme } from '../styles/createTheme';
type ThemeStyleFunction = (props: {
theme: Theme;
}) => CSSInterpolation;
/**
* Memoize style function on theme.
* Intended to be used in styled() calls that only need access to the theme.
*/
export default function memoTheme(styleFn: ThemeStyleFunction): (props: {
theme: Theme;
}) => CSSInterpolation;
export {};

24
node_modules/@mui/material/utils/memoTheme.js generated vendored Normal file
View File

@@ -0,0 +1,24 @@
// We need to pass an argument as `{ theme }` for PigmentCSS, but we don't want to
// allocate more objects.
const arg = {
theme: undefined
};
/**
* Memoize style function on theme.
* Intended to be used in styled() calls that only need access to the theme.
*/
export default function memoTheme(styleFn) {
let lastValue;
let lastTheme;
return props => {
let value = lastValue;
if (value === undefined || props.theme !== lastTheme) {
arg.theme = props.theme;
value = styleFn(arg);
lastValue = value;
lastTheme = props.theme;
}
return value;
};
}

View File

@@ -0,0 +1,9 @@
/**
* Removes event handlers from the given object.
* A field is considered an event handler if it is a function with a name beginning with `on`.
*
* @param object Object to remove event handlers from.
* @returns Object with event handlers removed.
*/
declare function omitEventHandlers<Props extends Record<string, unknown>>(object: Props | undefined): {};
export default omitEventHandlers;

18
node_modules/@mui/material/utils/omitEventHandlers.js generated vendored Normal file
View File

@@ -0,0 +1,18 @@
/**
* Removes event handlers from the given object.
* A field is considered an event handler if it is a function with a name beginning with `on`.
*
* @param object Object to remove event handlers from.
* @returns Object with event handlers removed.
*/
function omitEventHandlers(object) {
if (object === undefined) {
return {};
}
const result = {};
Object.keys(object).filter(prop => !(prop.match(/^on[A-Z]/) && typeof object[prop] === 'function')).forEach(prop => {
result[prop] = object[prop];
});
return result;
}
export default omitEventHandlers;

2
node_modules/@mui/material/utils/ownerDocument.d.ts generated vendored Normal file
View File

@@ -0,0 +1,2 @@
import ownerDocument from '@mui/utils/ownerDocument';
export default ownerDocument;

2
node_modules/@mui/material/utils/ownerDocument.js generated vendored Normal file
View File

@@ -0,0 +1,2 @@
import ownerDocument from '@mui/utils/ownerDocument';
export default ownerDocument;

2
node_modules/@mui/material/utils/ownerWindow.d.ts generated vendored Normal file
View File

@@ -0,0 +1,2 @@
import ownerWindow from '@mui/utils/ownerWindow';
export default ownerWindow;

2
node_modules/@mui/material/utils/ownerWindow.js generated vendored Normal file
View File

@@ -0,0 +1,2 @@
import ownerWindow from '@mui/utils/ownerWindow';
export default ownerWindow;

6
node_modules/@mui/material/utils/package.json generated vendored Normal file
View File

@@ -0,0 +1,6 @@
{
"sideEffects": false,
"module": "./index.js",
"main": "../node/utils/index.js",
"types": "./index.d.ts"
}

View File

@@ -0,0 +1,3 @@
import requirePropFactory from '@mui/utils/requirePropFactory';
export default requirePropFactory;

View File

@@ -0,0 +1,2 @@
import requirePropFactory from '@mui/utils/requirePropFactory';
export default requirePropFactory;

2
node_modules/@mui/material/utils/setRef.d.ts generated vendored Normal file
View File

@@ -0,0 +1,2 @@
import setRef from '@mui/utils/setRef';
export default setRef;

2
node_modules/@mui/material/utils/setRef.js generated vendored Normal file
View File

@@ -0,0 +1,2 @@
import setRef from '@mui/utils/setRef';
export default setRef;

View File

@@ -0,0 +1,5 @@
import isHostComponent from "./isHostComponent.js";
const shouldSpreadAdditionalProps = Slot => {
return !Slot || !isHostComponent(Slot);
};
export default shouldSpreadAdditionalProps;

28
node_modules/@mui/material/utils/types.d.ts generated vendored Normal file
View File

@@ -0,0 +1,28 @@
import { SxProps } from '@mui/system';
import { SlotComponentProps } from '@mui/utils';
import { Theme } from '../styles';
export type { EventHandlers, WithOptionalOwnerState, SlotComponentProps, SlotComponentPropsWithSlotState, } from '@mui/utils';
export type SlotCommonProps = {
component?: React.ElementType;
sx?: SxProps<Theme>;
};
export type SlotProps<TSlotComponent extends React.ElementType, TOverrides, TOwnerState> = SlotComponentProps<TSlotComponent, SlotCommonProps & TOverrides, TOwnerState>;
/**
* Use the keys of `Slots` to make sure that K contains all of the keys
*
* @example CreateSlotsAndSlotProps<{ root: React.ElementType, decorator: React.ElementType }, { root: ..., decorator: ... }>
*/
export type CreateSlotsAndSlotProps<Slots, K extends Record<keyof Slots, any>> = {
/**
* The components used for each slot inside.
* @default {}
*/
slots?: Partial<Slots>;
/**
* The props used for each slot inside.
* @default {}
*/
slotProps?: {
[P in keyof K]?: K[P];
};
};

1
node_modules/@mui/material/utils/types.js generated vendored Normal file
View File

@@ -0,0 +1 @@
export {};

View File

@@ -0,0 +1,3 @@
import unsupportedProp from '@mui/utils/unsupportedProp';
export default unsupportedProp;

2
node_modules/@mui/material/utils/unsupportedProp.js generated vendored Normal file
View File

@@ -0,0 +1,2 @@
import unsupportedProp from '@mui/utils/unsupportedProp';
export default unsupportedProp;

3
node_modules/@mui/material/utils/useControlled.d.ts generated vendored Normal file
View File

@@ -0,0 +1,3 @@
import useControlled from '@mui/utils/useControlled';
export default useControlled;

4
node_modules/@mui/material/utils/useControlled.js generated vendored Normal file
View File

@@ -0,0 +1,4 @@
'use client';
import useControlled from '@mui/utils/useControlled';
export default useControlled;

View File

@@ -0,0 +1,3 @@
import useEnhancedEffect from '@mui/utils/useEnhancedEffect';
export default useEnhancedEffect;

View File

@@ -0,0 +1,4 @@
'use client';
import useEnhancedEffect from '@mui/utils/useEnhancedEffect';
export default useEnhancedEffect;

View File

@@ -0,0 +1,3 @@
import useEventCallback from '@mui/utils/useEventCallback';
export default useEventCallback;

4
node_modules/@mui/material/utils/useEventCallback.js generated vendored Normal file
View File

@@ -0,0 +1,4 @@
'use client';
import useEventCallback from '@mui/utils/useEventCallback';
export default useEventCallback;

3
node_modules/@mui/material/utils/useForkRef.d.ts generated vendored Normal file
View File

@@ -0,0 +1,3 @@
import useForkRef from '@mui/utils/useForkRef';
export default useForkRef;

4
node_modules/@mui/material/utils/useForkRef.js generated vendored Normal file
View File

@@ -0,0 +1,4 @@
'use client';
import useForkRef from '@mui/utils/useForkRef';
export default useForkRef;

3
node_modules/@mui/material/utils/useId.d.ts generated vendored Normal file
View File

@@ -0,0 +1,3 @@
import useId from '@mui/utils/useId';
export default useId;

4
node_modules/@mui/material/utils/useId.js generated vendored Normal file
View File

@@ -0,0 +1,4 @@
'use client';
import useId from '@mui/utils/useId';
export default useId;

84
node_modules/@mui/material/utils/useSlot.d.ts generated vendored Normal file
View File

@@ -0,0 +1,84 @@
import * as React from 'react';
import { ClassValue } from 'clsx';
export type WithCommonProps<T> = T & {
className?: string;
style?: React.CSSProperties;
ref?: React.Ref<any>;
};
type EventHandlers = Record<string, React.EventHandler<any>>;
type ExtractComponentProps<P> = P extends infer T | ((ownerState: any) => infer T) ? T : never;
/**
* An internal function to create a Material UI slot.
*
* This is an advanced version of Base UI `useSlotProps` because Material UI allows leaf component to be customized via `component` prop
* while Base UI does not need to support leaf component customization.
*
* @param {string} name: name of the slot
* @param {object} parameters
* @returns {[Slot, slotProps]} The slot's React component and the slot's props
*
* Note: the returned slot's props
* - will never contain `component` prop.
* - might contain `as` prop.
*/
export default function useSlot<T extends string, ElementType extends React.ElementType, SlotProps, OwnerState extends {}, ExternalSlotProps extends {
component?: React.ElementType;
ref?: React.Ref<any>;
}, ExternalForwardedProps extends {
component?: React.ElementType;
slots?: {
[k in T]?: React.ElementType;
};
slotProps?: {
[k in T]?: ExternalSlotProps | ((ownerState: OwnerState) => ExternalSlotProps);
};
}, AdditionalProps, SlotOwnerState extends {}>(
/**
* The slot's name. All Material UI components should have `root` slot.
*
* If the name is `root`, the logic behaves differently from other slots,
* e.g. the `externalForwardedProps` are spread to `root` slot but not other slots.
*/
name: T, parameters: (T extends 'root' ? {
ref: React.ForwardedRef<any>;
} : {
ref?: React.ForwardedRef<any>;
}) & {
/**
* The slot's className
*/
className: ClassValue | ClassValue[];
/**
* The slot's default styled-component
*/
elementType: ElementType;
/**
* The component's ownerState
*/
ownerState: OwnerState;
/**
* The `other` props from the consumer. It has to contain `component`, `slots`, and `slotProps`.
* The function will use those props to calculate the final rendered element and the returned props.
*
* If the slot is not `root`, the rest of the `externalForwardedProps` are neglected.
*/
externalForwardedProps: ExternalForwardedProps;
getSlotProps?: (other: EventHandlers) => WithCommonProps<SlotProps>;
additionalProps?: WithCommonProps<AdditionalProps>;
/**
* For overriding the component's ownerState for the slot.
* This is required for some components that need styling via `ownerState`.
*
* It is a function because `slotProps.{slot}` can be a function which has to be resolved first.
*/
getSlotOwnerState?: (mergedProps: AdditionalProps & SlotProps & ExternalSlotProps & ExtractComponentProps<Exclude<Exclude<ExternalForwardedProps['slotProps'], undefined>[T], undefined>>) => SlotOwnerState;
/**
* props forward to `T` only if the `slotProps.*.component` is not provided.
* e.g. Autocomplete's listbox uses Popper + StyledComponent
*/
internalForwardedProps?: any;
}): [ElementType, {
className: string;
ownerState: OwnerState & SlotOwnerState;
} & AdditionalProps & SlotProps & ExternalSlotProps & ExtractComponentProps<Exclude<Exclude<ExternalForwardedProps["slotProps"], undefined>[T], undefined>>];
export {};

85
node_modules/@mui/material/utils/useSlot.js generated vendored Normal file
View File

@@ -0,0 +1,85 @@
'use client';
import useForkRef from '@mui/utils/useForkRef';
import appendOwnerState from '@mui/utils/appendOwnerState';
import resolveComponentProps from '@mui/utils/resolveComponentProps';
import mergeSlotProps from '@mui/utils/mergeSlotProps';
/**
* An internal function to create a Material UI slot.
*
* This is an advanced version of Base UI `useSlotProps` because Material UI allows leaf component to be customized via `component` prop
* while Base UI does not need to support leaf component customization.
*
* @param {string} name: name of the slot
* @param {object} parameters
* @returns {[Slot, slotProps]} The slot's React component and the slot's props
*
* Note: the returned slot's props
* - will never contain `component` prop.
* - might contain `as` prop.
*/
export default function useSlot(
/**
* The slot's name. All Material UI components should have `root` slot.
*
* If the name is `root`, the logic behaves differently from other slots,
* e.g. the `externalForwardedProps` are spread to `root` slot but not other slots.
*/
name, parameters) {
const {
className,
elementType: initialElementType,
ownerState,
externalForwardedProps,
getSlotOwnerState,
internalForwardedProps,
...useSlotPropsParams
} = parameters;
const {
component: rootComponent,
slots = {
[name]: undefined
},
slotProps = {
[name]: undefined
},
...other
} = externalForwardedProps;
const elementType = slots[name] || initialElementType;
// `slotProps[name]` can be a callback that receives the component's ownerState.
// `resolvedComponentsProps` is always a plain object.
const resolvedComponentsProps = resolveComponentProps(slotProps[name], ownerState);
const {
props: {
component: slotComponent,
...mergedProps
},
internalRef
} = mergeSlotProps({
className,
...useSlotPropsParams,
externalForwardedProps: name === 'root' ? other : undefined,
externalSlotProps: resolvedComponentsProps
});
const ref = useForkRef(internalRef, resolvedComponentsProps?.ref, parameters.ref);
const slotOwnerState = getSlotOwnerState ? getSlotOwnerState(mergedProps) : {};
const finalOwnerState = {
...ownerState,
...slotOwnerState
};
const LeafComponent = name === 'root' ? slotComponent || rootComponent : slotComponent;
const props = appendOwnerState(elementType, {
...(name === 'root' && !rootComponent && !slots[name] && internalForwardedProps),
...(name !== 'root' && !slots[name] && internalForwardedProps),
...mergedProps,
...(LeafComponent && {
as: LeafComponent
}),
ref
}, finalOwnerState);
Object.keys(slotOwnerState).forEach(propName => {
delete props[propName];
});
return [elementType, props];
}