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

Loading

공통 컴포넌트사용자 화면과 관리자 화면 모두에서 쓰입니다.

9가지 스타일의 로더와, 불러오는 중 화면에 공통으로 끼우는 모듈입니다.

"불러오는 중"을 보여 주는 공통 모듈입니다. 서로 다른 스타일의 로더 9종(Loader)과, 화면 곳곳에 같은 방식으로 끼워 넣는LoadingState·LoadingOverlay·Skeleton·useDelayedLoading으로 이루어져 있습니다. 킷 안의 모든 로딩 화면이 이 모듈을 쓰기 때문에, meerkit.config.ts에서 한 줄만 바꾸면 서비스 전체의 로딩 모양이 바뀝니다.

Variants

9가지 스타일입니다. 색은 주변 글자색을 따라가고, 모두 부드럽게 반복됩니다. 눌러서 고르면 아래 미리보기에 적용됩니다.

가장 기본적인 회전 링. 어디에나 무난합니다.

tsx
<Loader variant="ring" size="lg" />

Loader

가장 작은 단위입니다. 글자 옆, 버튼 안, 카드 한가운데 어디든 놓을 수 있습니다. 화면에는 보이지 않는 문구가 필요하면 label을 주세요.

저장하는 중
tsx
<Loader />                                  // config의 기본 모양
<Loader variant="dots" size="sm" />
<Loader variant="spokes" size="xl" label="저장하는 중" />
PropType설명
variant"ring" | "dash" | "dots" | "bars" | "pulse" | "spokes" | "grid" | "progress" | "morph"모양. 생략하면 config의 loading.variant.
size"sm" | "md" | "lg" | "xl"16 / 24 / 40 / 56px. 기본 md.
labelstring스크린리더용 문구. 있으면 role=status로 읽힙니다. 글자가 따로 있으면 생략하세요.
classNamestring색은 text-* 클래스로 바꿉니다. 예: text-primary

LoadingState

"불러오는 중…" 문구를 쓰던 자리에 그대로 넣는 블록입니다. 로더와 문구를 함께 보여 주고, 접근성 속성도 갖고 있습니다.minHeight를 주면 로딩이 끝나고 내용이 들어올 때 화면이 덜 흔들립니다.

불러오는 중…
저장하는 중…
tsx
<LoadingState />
<LoadingState label="멤버를 불러오는 중…" minHeight={160} />
<LoadingState layout="inline" size="sm" />
PropType설명
labelstring | false문구. 기본 "불러오는 중…". false면 로더만 보이고 스크린리더에는 읽힙니다.
layout"stack" | "inline"문구 위치. 기본 stack(아래), inline이면 옆.
fullPageboolean화면 한가운데 큰 영역을 차지합니다. 페이지 전체를 기다릴 때.
minHeightnumber | string영역의 최소 높이.
variant / sizeLoader와 동일생략하면 config와 md.

LoadingOverlay

이미 보이는 내용 위에 로더를 덮습니다. 목록을 다시 불러올 때 화면이 비지 않고, 내용이 살짝 흐려지며 로더가 나타납니다. 관리자 멤버 목록이 이 방식을 씁니다.

김미어 · MASTER
이캣 · OWNER
박서 · VIEWER
tsx
<LoadingOverlay loading={isFetching}>
  <MemberTable ... />
</LoadingOverlay>

Skeleton

내용이 들어올 자리를 미리 잡아 두는 회색 블록입니다. 레이아웃이 정해진 카드나 목록에 어울립니다.

tsx
<div className="flex items-center gap-3">
  <Skeleton className="size-10 rounded-full" />
  <div className="grid flex-1 gap-2">
    <Skeleton className="h-3 w-1/2" />
    <Skeleton className="h-3 w-3/4" />
  </div>
</div>

useDelayedLoading

응답이 빨라도 로더가 번쩍 나타났다 사라지면 오히려 어수선합니다. 이 훅은 250ms 안에 끝나면 아예 보여 주지 않고, 한 번 보였다면 최소 450ms는 유지합니다.

대기 중
tsx
const show = useDelayedLoading(isLoading); // { delay: 250, minDuration: 450 }
return show ? <LoadingState /> : <List />;

Use it in your pages

데이터를 불러오는 화면

tsx
const { data, isLoading } = useQuery({ ... });

if (isLoading) return <LoadingState minHeight={240} />;
return <List items={data} />;

Next.js loading.tsx · Suspense

tsx
// app/dashboard/loading.tsx
import { LoadingState } from "@/meerkit";

export default function Loading() {
  return <LoadingState fullPage />;
}

// 또는 일부분만
<Suspense fallback={<LoadingState minHeight={160} />}>
  <Chart />
</Suspense>

버튼 안에서

tsx
<Button disabled={pending}>
  {pending && <Loader variant="ring" size="sm" />}
  {pending ? "저장 중…" : "저장"}
</Button>

Config

서비스 전체의 기본 모양을 한 곳에서 정합니다. 킷 안의 로딩 화면(로그인 확인, 멤버 목록, 사용량, 주소 검색 등)이 모두 따라갑니다.

meerkit.config.ts
export default defineMeerkitConfig({
  loading: { variant: "dots" }, // 기본 "ring"
});

Where the kit uses it

위치사용
RequireAuth · RequireRole로그인·권한 확인 중 (fullPage)
MemberDirectory처음 불러올 때 LoadingState, 다시 불러올 때 LoadingOverlay
Member AI Usage · Usage History차트 자리에 LoadingState
Address Search Dialog검색 중 · 더 보기 불러오는 중

Accessibility & motion

  • 로더 자체는 장식이라 스크린리더에서 숨겨지고, LoadingState와 LoadingOverlay가 role="status"로 "불러오는 중"을 알립니다.
  • 순수 CSS 애니메이션이라 가볍고, 설정의 움직임 끄기와 OS의 "동작 줄이기"를 지키면 멈춘 모양으로 보입니다.
  • 색은 글자색을 따르므로 라이트·다크 모드에서 따로 손볼 필요가 없습니다.
File DropzoneDate
© Meerkit. All rights reserved.GitHub