UNPKG

@patreon/studio

Version:

Patreon Studio Design System

67 lines 2.79 kB
'use client'; import React from 'react'; import { tokens } from '../../tokens'; import { BodyText } from '../BodyText'; import { Button } from '../Button'; import { IconCheckmark, IconNo, IconClose } from '../Icon'; import { LoadingSpinner } from '../LoadingSpinner'; import { Spacer } from '../Spacer'; import { TextLink } from '../TextLink'; import { ToastTextWrapper } from './styled-components'; function ToastCloseButton({ setState }) { return (<Spacer mr={tokens.global.space.x8} aria-hidden> <Button icon={IconClose} corners="pill" variant="secondary" unfilled data-tag="close-button" onClick={() => setState('leaving')}/> </Spacer>); } function ToastWrapper({ children, action, showCloseButton, setState }) { const { label: actionLabel, ...actionProps } = action ?? {}; return (<> {children} {action && (<Spacer mr={tokens.global.space.x16} aria-hidden> <TextLink {...actionProps}>{actionLabel}</TextLink> </Spacer>)} {showCloseButton && <ToastCloseButton setState={setState}/>} </>); } function FormattedChildren({ children }) { // Automatically add the correct padding if the children is a simple string. // This is mostly for backwards compatibility when previous versions of // toasts only accepted strings for contents. if (typeof children === 'string') { return (<ToastTextWrapper> <BodyText>{children}</BodyText> </ToastTextWrapper>); } return <>{children}</>; } export function SuccessToast({ children, action, setState }) { return (<ToastWrapper showCloseButton action={action} setState={setState}> <Spacer ml={tokens.global.space.x16}> <IconCheckmark color={tokens.global.success.action.default} size="16px"/> </Spacer> <FormattedChildren>{children}</FormattedChildren> </ToastWrapper>); } export function ErrorToast({ children, action, setState }) { return (<ToastWrapper showCloseButton action={action} setState={setState}> <Spacer ml={tokens.global.space.x16}> <IconNo size="16px" color={tokens.global.critical.action.default}/> </Spacer> <FormattedChildren>{children}</FormattedChildren> </ToastWrapper>); } export function LoadingToast({ children, action, setState }) { return (<ToastWrapper action={action} setState={setState}> <Spacer ml={tokens.global.space.x16}> <LoadingSpinner data-tag="loading-spinner" size="xs"/> </Spacer> <FormattedChildren>{children}</FormattedChildren> </ToastWrapper>); } export function CustomToast({ children, showCloseButton, setState }) { return (<> <FormattedChildren>{children}</FormattedChildren> {showCloseButton && <ToastCloseButton setState={setState}/>} </>); } //# sourceMappingURL=variants.jsx.map