Blame view

天文台pc/tianwentai-ui/node_modules/@mui/material/esm/utils/useSlot.d.ts 3.25 KB
bc518174   王天杨   提交两个项目文件
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
  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>;
    /**
     * props forward to `T` only if the `slotProps.*.component` is not provided.
     * e.g. Autocomplete's listbox uses Popper + StyledComponent
     */
    internalForwardedProps?: any;
    /**
     * Set to true if the `elementType` is a styled component of another Material UI component.
     *
     * For example, the AlertRoot is a styled component of the Paper component.
     * This flag is used to forward the `component` and `slotProps.root.component` to the Paper component.
     * Otherwise, the `component` prop will be converted to `as` prop which replaces the Paper component (the paper styles are gone).
     */
    shouldForwardComponentProp?: boolean;
  }): [ElementType, {
    className: string;
    ownerState: OwnerState & SlotOwnerState;
  } & AdditionalProps & SlotProps & ExternalSlotProps & ExtractComponentProps<Exclude<Exclude<ExternalForwardedProps["slotProps"], undefined>[T], undefined>>];
  export {};