UNPKG

@patreon/studio

Version:

Patreon Studio Design System

67 lines 2.85 kB
'use client'; import React from 'react'; import { BodyText } from '~/components/BodyText'; import { Button } from '~/components/Button'; import { IconCheckmark, IconClose, IconNo } from '~/components/Icon'; import { LoadingSpinner } from '~/components/LoadingSpinner'; import { Spacer } from '~/components/Spacer'; import { TextLink } from '~/components/TextLink'; import { tokens } from '~/tokens'; 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.surface.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.surface.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