UNPKG

@patreon/studio

Version:

Patreon Studio Design System

40 lines (37 loc) 1.91 kB
'use client'; import React from 'react'; import { BodyText } from '~/components/BodyText'; import { InlineError } from '~/components/InlineError'; import { InlineSuccess } from '~/components/InlineSuccess'; import { LoadingSpinner } from '~/components/LoadingSpinner'; import { MediaLockup } from '~/components/MediaLockup'; import { Spacer } from '~/components/Spacer'; import { Stack } from '~/components/Stack'; import { useTestIdGenerator } from '~/hooks/useTestIdGenerator'; import { tokens } from '~/tokens'; export function InlineHelpText({ id, inputId, helpText, error, success, loading, 'data-tag': dataTag, }) { const getTestId = useTestIdGenerator(dataTag); const shouldDisplayError = !!error && typeof error !== 'boolean'; const shouldDisplaySuccess = !error && !!success && typeof success !== 'boolean'; // Ensure we don't render an empty `HelpTextContainer` if (!helpText && !shouldDisplayError && !shouldDisplaySuccess && !loading) { return null; } return (<Spacer pt={tokens.global.space.x8}> <Stack alignItems="flex-start" gap={tokens.global.space.x4}> {shouldDisplayError && (<InlineError aria-live="assertive" data-tag={getTestId('error')} id={inputId} size="xs"> {error} </InlineError>)} {shouldDisplaySuccess && (<InlineSuccess aria-live="polite" data-tag={getTestId('success')} id={inputId} size="xs"> {success} </InlineSuccess>)} {loading && (<MediaLockup aria-live="polite" data-tag={getTestId('loading')} id={inputId} leadingMedia={{ type: 'loading', component: LoadingSpinner }} variant="body" size="xs"> {loading} </MediaLockup>)} {!!helpText && (<BodyText size="sm" aria-live="polite" data-tag={getTestId('helpText')} id={id}> {helpText} </BodyText>)} </Stack> </Spacer>); } //# sourceMappingURL=index.jsx.map