본문으로 건너뛰기
Amineslab UI

Component

Callout

본문의 안내, 배경 설명, 주의 사항을 아이콘과 옅은 배경으로 구분합니다.

Playground

옵션을 조절하며 화면과 사용 코드를 함께 확인하세요.

PC 1280px
Controls

안내의 의미와 기본 아이콘

본문 크기와 여백

선택적 제목

본문

기본 아이콘 표시

Code
import { Callout } from '@amineslab/ui'

export default function ExamplePreview() {
  return ((<Callout color={"info"} size={"md"} title={"시작하기 전에"} icon={undefined}>
      {"설정을 변경하기 전에 현재 구성을 확인하세요. 이 안내는 본문과 함께 읽습니다."}
    </Callout>))
}

Props

@amineslab/ui에서 Callout를 가져옵니다.

import { Callout } from '@amineslab/ui'

Callout

HTML <div> 요소의 표준 속성을 그대로 받습니다.

NameTypeDefaultDescription
color'neutral' | 'info' | 'talk' | 'help' | 'success' | 'warning' | 'danger''neutral'배경색과 기본 아이콘을 정합니다. talk는 보충 설명, help는 팁에 사용합니다.
size'sm' | 'md' | 'lg''md'글자 크기와 내부 여백을 정합니다. sm은 짧은 안내, md는 본문, lg는 긴 설명에 사용합니다.
titleReactNode-선택적 제목입니다. 생략하면 본문만 표시합니다.
children*ReactNode-문단, 강조, 링크, 목록을 포함할 수 있는 본문입니다.
iconReactNode-기본 아이콘을 교체합니다. null이면 숨깁니다. 아이콘은 장식용입니다.
actionReactNode-본문 아래에 표시할 선택적 링크나 버튼입니다.

Examples

자주 쓰는 조합을 살펴보고, 필요한 예시의 코드를 펼쳐 확인하세요.

의미별 안내

본문 색은 일정하게 유지하고 아이콘과 배경으로 의미를 구분합니다.

본문을 이해하는 데 필요한 배경이나 참고 사항을 덧붙입니다.
시작하기 전에 확인할 정보와 조건을 안내합니다.
직접 경험한 내용이나 본문에 덧붙일 이야기를 전합니다.
작업을 더 쉽게 진행할 수 있는 팁과 도움말을 제공합니다.
정상적으로 완료되기 위한 조건과 권장 방법을 설명합니다.
계속하기 전에 알아야 할 제한과 주의 사항을 설명합니다.
데이터 삭제처럼 되돌릴 수 없는 작업의 영향을 안내합니다.
import { type ComponentPropsWithoutRef } from 'react'

import { cn } from '@amineslab/ui/utils'

import { Callout, type CalloutColor } from '@amineslab/ui'

const calloutDescriptions: Record<CalloutColor, string> = {
    neutral: '본문을 이해하는 데 필요한 배경이나 참고 사항을 덧붙입니다.',
    info: '시작하기 전에 확인할 정보와 조건을 안내합니다.',
    talk: '직접 경험한 내용이나 본문에 덧붙일 이야기를 전합니다.',
    help: '작업을 더 쉽게 진행할 수 있는 팁과 도움말을 제공합니다.',
    success: '정상적으로 완료되기 위한 조건과 권장 방법을 설명합니다.',
    warning: '계속하기 전에 알아야 할 제한과 주의 사항을 설명합니다.',
    danger: '데이터 삭제처럼 되돌릴 수 없는 작업의 영향을 안내합니다.',
};

const calloutColors = ['neutral', 'info', 'talk', 'help', 'success', 'warning', 'danger'] as const;

function ExampleStack({ className, compact = false, fullWidth = false, ...props }: ComponentPropsWithoutRef<'div'> & {
    compact?: boolean;
    fullWidth?: boolean;
}) {
    return (<div {...props} className={cn('grid', compact ? 'w-auto gap-2' : fullWidth ? 'w-full gap-4' : 'w-full max-w-[360px] gap-3', className)}/>);
}

export default function ExamplePreview() {
  return ((<ExampleStack fullWidth>
          {calloutColors.map((color) => (<Callout key={color} color={color}>
              {calloutDescriptions[color]}
            </Callout>))}
        </ExampleStack>))
}

본문 안의 보충 설명

제목 없이 문단, 강조, 링크를 담을 수 있습니다.

처음 접하는 분도 따라올 수 있도록 개념부터 차근차근 설명합니다.

예제에는 가상 데이터를 사용합니다. example.com을 실제 설정에 맞게 변경하세요.

import { type ComponentPropsWithoutRef } from 'react'

import { cn } from '@amineslab/ui/utils'

import { Callout } from '@amineslab/ui'

function InlineCode({ className, ...props }: ComponentPropsWithoutRef<'code'>) {
    return (<code {...props} className={cn('rounded-sm bg-section-secondary px-1 py-0.5 text-code-3 text-brand-900 [word-break:normal]', className)}/>);
}

function ExampleStack({ className, compact = false, fullWidth = false, ...props }: ComponentPropsWithoutRef<'div'> & {
    compact?: boolean;
    fullWidth?: boolean;
}) {
    return (<div {...props} className={cn('grid', compact ? 'w-auto gap-2' : fullWidth ? 'w-full gap-4' : 'w-full max-w-[360px] gap-3', className)}/>);
}

export default function ExamplePreview() {
  return ((<ExampleStack fullWidth>
          <Callout color="talk">
            <p>
              처음 접하는 분도 따라올 수 있도록 <strong>개념부터 차근차근</strong> 설명합니다.
            </p>
          </Callout>
          <Callout color="info">
            <p>
              예제에는 <strong>가상 데이터</strong>를 사용합니다.{' '}
              <InlineCode>example.com</InlineCode>을 실제 설정에 맞게 변경하세요.
            </p>
          </Callout>
        </ExampleStack>))
}

크기와 여백

sm

안내의 길이와 주변 콘텐츠에 맞춰 여백을 선택합니다.

md

안내의 길이와 주변 콘텐츠에 맞춰 여백을 선택합니다.

lg

안내의 길이와 주변 콘텐츠에 맞춰 여백을 선택합니다.
import { type ComponentPropsWithoutRef } from 'react'

import { cn } from '@amineslab/ui/utils'

import { Callout } from '@amineslab/ui'

function ExampleStack({ className, compact = false, fullWidth = false, ...props }: ComponentPropsWithoutRef<'div'> & {
    compact?: boolean;
    fullWidth?: boolean;
}) {
    return (<div {...props} className={cn('grid', compact ? 'w-auto gap-2' : fullWidth ? 'w-full gap-4' : 'w-full max-w-[360px] gap-3', className)}/>);
}

export default function ExamplePreview() {
  return ((<ExampleStack fullWidth>
          {(['sm', 'md', 'lg'] as const).map((size) => (<Callout key={size} color="info" size={size} title={size}>
              안내의 길이와 주변 콘텐츠에 맞춰 여백을 선택합니다.
            </Callout>))}
        </ExampleStack>))
}

아이콘과 추가 행동

사용 가이드

자세한 설정 방법을 확인하세요.
아이콘 없이 간결하게 표시합니다.
import { type ComponentPropsWithoutRef } from 'react'

import { cn } from '@amineslab/ui/utils'

import { Callout } from '@amineslab/ui'

import { BookOpen } from '@amineslab/ui/icons'

function ExampleStack({ className, compact = false, fullWidth = false, ...props }: ComponentPropsWithoutRef<'div'> & {
    compact?: boolean;
    fullWidth?: boolean;
}) {
    return (<div {...props} className={cn('grid', compact ? 'w-auto gap-2' : fullWidth ? 'w-full gap-4' : 'w-full max-w-[360px] gap-3', className)}/>);
}

export default function ExamplePreview() {
  return ((<ExampleStack fullWidth>
          <Callout icon={<BookOpen />} title="사용 가이드" action={<a href="/getting-started/theming">테마 가이드 읽기</a>}>
            자세한 설정 방법을 확인하세요.
          </Callout>
          <Callout icon={null}>아이콘 없이 간결하게 표시합니다.</Callout>
        </ExampleStack>))
}

사용 기준

권장하는 사용
  • 본문을 이해하는 데 필요한 보충 설명에 사용합니다.
  • 제목은 내용을 요약할 때만 추가합니다.
피해야 할 사용
  • 저장 결과나 즉시 알려야 하는 오류에는 StatusFeedback을 사용하세요.
  • Callout은 live region을 만들지 않습니다.

접근성

화면에 맞는 이름을 제공하고, 키보드만으로 작업을 마칠 수 있는지 확인하세요.

이 컴포넌트에는 별도의 키보드 조작이 필요하지 않습니다.