Media slot

Exports

Import these components from @mbsw/ui.

MediaSlot

Props

The tables list common props for each component. See the full types for supported prop combinations and inherited HTML and Radix props.

MediaSlot

MediaSlot props
PropTypeRequirement
aria-label

Defines a string value that labels the current element.

stringRequired
onClickMouseEventHandler<HTMLButtonElement>Optional
shape'round' | 'square'Optional
size'lg' | 'md' | 'sm'Optional
childrenReactElement<unknown, string | JSXElementConstructor<any>>Conditional
disabledbooleanConditional
errorMessagestringConditional
state"empty" | "filled" | "error" | "uploading"Conditional
uploadLabelstringConditional
onRemoveMouseEventHandler<HTMLButtonElement>Conditional
removeLabelstringConditional

Type reference

Show full types

Full TypeScript definitions, including prop combinations and inherited props.

import { type ButtonHTMLAttributes, type MouseEventHandler, type ReactElement } from 'react';

export type MediaSlotShape = 'round' | 'square';

export type MediaSlotSize = 'lg' | 'md' | 'sm';

export type MediaSlotState = 'empty' | 'error' | 'filled' | 'uploading';

type MediaSlotBaseProps = Omit<ButtonHTMLAttributes<HTMLButtonElement>, 'children' | 'disabled' | 'onClick' | 'size' | 'type'> & {
    'aria-label': string;
    onClick?: MouseEventHandler<HTMLButtonElement>;
    shape?: MediaSlotShape;
    size?: MediaSlotSize;
};

type RemoveProps = {
    onRemove: MouseEventHandler<HTMLButtonElement>;
    removeLabel: string;
} | {
    onRemove?: never;
    removeLabel?: never;
};

export type MediaSlotProps = MediaSlotBaseProps & (({
    children?: never;
    disabled?: boolean;
    errorMessage?: never;
    state?: 'empty';
    uploadLabel?: never;
} & {
    onRemove?: never;
    removeLabel?: never;
}) | ({
    children: ReactElement;
    disabled?: boolean;
    errorMessage?: never;
    state: 'filled';
    uploadLabel?: never;
} & RemoveProps) | ({
    children?: never;
    disabled?: never;
    errorMessage: string;
    state: 'error';
    uploadLabel?: never;
} & RemoveProps) | {
    children?: never;
    disabled?: never;
    errorMessage?: never;
    onRemove?: never;
    removeLabel?: never;
    state: 'uploading';
    uploadLabel: string;
});

export declare const MediaSlot: import("react").ForwardRefExoticComponent<MediaSlotProps & import("react").RefAttributes<HTMLButtonElement>>;