Meerkit
Meerkit
HomeDocsComponentsAPI
GitHub

Getting Started

5
IntroductionInstallationProject StructureThemingDeployment

CLI

6
CLI Overviewinit & setupstart, stop & openstatus, check, env & logsdbadd, test & update

Core Concepts

5
AuthenticationRoles & PermissionsData ModelLogin LockoutSecurity

Guides

3
Protect a pageAdd a roleCall your own API

Components

24

사용자 화면12

Login FormSignup FormEmail VerificationTerms AgreementGoogle LoginPassword ResetProfile & PasswordNicknameAuth DialogProfile ImageUser AvatarUser Menu

관리자 화면6

Member TableMember DirectoryMember AI UsageMember AI Usage HistoryRole ManagerRole Select

공통5

Address FieldFile DropzoneLoadingDateRoute Guards

AI Components

4
AI Prompt InputThinking IndicatorAPI Key InputVoice

API

6
OverviewHealthAuthUsers · 내 정보Users · 관리자LLM

Reference

2
Hooks & StateFAQ

Thinking Indicator

AI가 답을 준비하는 동안 보여 주는 "생각 중" 애니메이션입니다.

UI만 제공합니다. AI 호출과 응답 생성은 들어 있지 않습니다. 이 컴포넌트는 "생각 중" 표시만 그려 주며, 언제 보여 주고 숨길지(요청 시작·응답 도착)는 서비스에서 연결해 주세요. 미리보기의 상태 변화는 데모입니다.

AI가 답을 준비하는 동안 보여 주는 "생각 중" 표시입니다. 점으로 이루어진 구슬(Orb), 물결치는 점, 빛이 지나가는 글자 중에서 고를 수 있고, 문구는 "생각하는 중 → 자료를 찾는 중 → 답변을 정리하는 중"처럼 돌아가며 부드럽게 바뀝니다.

Preview

아래 버튼으로 모양, 크기, 구슬의 상태를 바꿔 보세요.

모양
크기
상태
생각하는 중...
tsx
<ThinkingIndicator variant="orb" size="md" orbState="working" />

Variants

생각하는 중...

구슬 orb

점으로 이루어진 구슬이 돌고, 문구 뒤에는 ...만 붙습니다. 가장 AI다운 표시

생각하는 중

점 dots

문구 옆에서 점 세 개가 물결칩니다. 채팅 말풍선처럼 작은 자리에

생각하는 중...

반짝이는 글자 shimmer

글자 위로 빛이 지나갑니다. 아이콘 없이 문구만 쓰고 싶을 때

구슬(orb)에는 물결치는 점이 함께 나오지 않습니다. 구슬이 움직임을 맡고, 문구 뒤에는 정적인 ...만 붙습니다. 물결치는 점은 dots 모양에서만 쓰입니다.

Orb states

구슬은 9가지 상태가 있고, 상태마다 움직임이 다릅니다. AI가 지금 무엇을 하는지에 맞춰 고르세요.

Sizes

size구슬 크기이럴 때
sm20px글줄 안, 버튼 옆처럼 작은 자리
md32px (기본)채팅 응답 자리
lg64px빈 화면 가운데, 아바타 크기의 큰 표시

Labels

labels에 문구를 여러 개 주면 정해진 간격(기본 2.6초)으로 돌아가며 바뀌고, 하나만 주면 고정됩니다. 서비스가 하는 일에 맞게 바꾸세요. 문구 뒤의 ...은 자동으로 붙으니 직접 쓰지 않아도 됩니다.

문서를 읽는 중...잠시만요
tsx
<ThinkingIndicator
  labels={["문서를 읽는 중", "근거를 찾는 중", "답변을 작성하는 중"]}
  orbState="searching"
  interval={2000}
/>

<ThinkingIndicator labels={["잠시만요"]} variant="dots" />   // 고정

With the prompt input

응답을 기다리는 동안 대화 영역 끝에 놓고, 답이 오면 지웁니다. AiPromptInput의 pending과 같은 값을 쓰면 됩니다.

tsx
{messages.map((m) => <Bubble key={m.id} message={m} />)}
{isPending && <ThinkingIndicator />}

<AiPromptInput onSubmit={ask} pending={isPending} onStop={stop} />

ThinkingOrb on its own

구슬만 따로 쓸 수도 있습니다. 로딩 자리를 채우거나 AI의 아바타처럼 놓기에 알맞습니다.

tsx
import { ThinkingOrb } from "@/meerkit";

<ThinkingOrb state="searching" size={64} />
<ThinkingOrb state="composing" size={20} speed={1.5} />
<ThinkingOrb state="breathing" size={48} paused />

Motion

  • 구슬은 점 수십~수백 개를 3D 구 위에 고르게 놓고 상태별로 회전·숨쉬기·비틀림·물결·떨림을 줍니다. 앞쪽 점은 크고 진하게, 뒤쪽 점은 작고 흐리게 그려 입체감이 납니다.
  • 점 색은 글자색을 따라가서, 구슬을 놓은 곳의 text-* 클래스로 바꿀 수 있습니다 (예: text-brand).
  • 문구가 바뀔 때는 아래에서 살짝 떠오르며 나타납니다. Meerkit의 다른 움직임과 같은 곡선을 씁니다.
  • meerkit.config.ts의 motion: false이거나 OS에서 "동작 줄이기"를 켰다면 모든 움직임이 멈추고 멈춘 모양과 문구만 보입니다.
  • 구슬은 canvas 한 장에 그리고 화면에서 사라지면 정리되므로 가볍습니다.

Props

ThinkingIndicator

PropType설명
variant"orb" | "dots" | "shimmer"모양. 기본 orb.
orbStateOrbStateorb 모양일 때 구슬의 상태. 기본 working.
labelsstring[]표시할 문구. 둘 이상이면 돌아가며 바뀝니다. 기본은 "생각하는 중" 등 3개.
intervalnumber문구가 바뀌는 간격(ms). 기본 2600.
size"sm" | "md" | "lg"크기. 기본 md.
classNamestring추가 클래스.

ThinkingOrb

PropType설명
state"working" | "searching" | "solving" | "listening" | "connecting" | "weaving" | "composing" | "breathing" | "shaping"구슬의 상태(움직임). 기본 working.
sizenumber한 변의 크기(px). 기본 32. 20쯤이면 글줄 안, 64쯤이면 채팅 아바타 크기.
speednumber움직임 속도 배율. 기본 1.
pausedbooleantrue면 멈춘 모양으로 그립니다.
classNamestring추가 클래스. 점 색은 text-* 클래스로 바꿉니다.

Customization

  • 상태별 움직임은 ai/ThinkingOrb.tsx의 ORB_STATES 값(회전 속도, 숨쉬기, 비틀림, 물결, 떨림 등)을 바꿔 조절합니다.
  • 기본 문구는 ai/ThinkingIndicator.tsx의 DEFAULT_LABELS에서 바꿉니다.
  • 반짝이는 글자의 색은 muted-foreground와 foreground 토큰을 따릅니다.

Accessibility

  • role="status"와 aria-live="polite"라서 스크린리더가 현재 문구를 읽어 줍니다. 구슬과 점은 장식이라 숨겨집니다.
  • 문구는 색과 움직임에만 의존하지 않고 글자로 상태를 알려 줍니다.
Tip

작업이 오래 걸리는 경우(수십 초 이상)에는 문구만 돌리지 말고, 어떤 단계인지 알려 주는 문구(예: "문서 3개를 읽는 중")를 서버에서 받아 labels로 넘기면 체감 시간이 줄어듭니다. 단계에 맞춰 orbState도 함께 바꿔 보세요(찾는 중 → searching, 작성 중 → composing).

AI Prompt InputAPI Key Input
© Meerkit. All rights reserved.GitHub