@patreon/studio
Version:
Patreon Studio Design System
44 lines (43 loc) • 1.63 kB
TypeScript
import type { AriaAttributes } from 'react';
import React from 'react';
import type { AvatarProps } from '~/components/Avatar/types';
import type { IconProps } from '~/components/Icon/types';
import type { ImageProps } from '~/components/Image/types';
import type { LoadingSpinnerProps } from '~/components/LoadingSpinner/types';
import type { BaseProps, ChildrenProps, StylableProps } from '~/types/component';
type Variant = 'body' | 'heading' | 'custom';
type Size = 'xs' | 'sm' | 'md' | 'lg';
type MediaComponent = {
type: 'icon';
component: React.FC<IconProps>;
props?: IconProps;
} | {
type: 'avatar';
component: React.FC<AvatarProps>;
props?: AvatarProps;
} | {
type: 'image';
component: React.FC<ImageProps>;
props: ImageProps;
} | {
type: 'loading';
component: React.FC<LoadingSpinnerProps>;
props?: LoadingSpinnerProps;
};
export interface MediaLockupProps extends BaseProps, ChildrenProps, StylableProps, AriaAttributes {
/** The variant of the media lockup. */
variant: Variant;
/** The size of the media lockup. */
size: Size;
/** The media to display before the children. */
leadingMedia?: MediaComponent;
/** The media to display after the children. */
trailingMedia?: MediaComponent;
}
export declare function MediaLockup({ children, 'data-tag': dataTag, id, size, variant, leadingMedia, trailingMedia, className, style, ...props }: MediaLockupProps): React.JSX.Element;
declare function MediaComponent({ variant, size, media }: {
variant: Variant;
size: Size;
media: MediaComponent;
}): React.JSX.Element | null;
export {};