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

Terms Agreement

사용자용 컴포넌트서비스를 쓰는 일반 사용자가 보는 화면에 쓰입니다.

가입 시 약관 동의를 받는 체크박스 영역과, 체크박스·라디오 컴포넌트입니다.

shadcn/ui · Checkboxshadcn/ui · Radio Group

가입 폼에서 약관 동의를 받는 영역입니다. 전체 동의 체크박스와 약관별 체크박스, 필수/선택 표시, 약관 전문 링크로 구성됩니다. 이 페이지는 약관 동의에 쓰는 shadcn Checkbox와 Radio Group 컴포넌트도 함께 설명합니다.

Preview

약관 동의
보기
보기
tsx
<TermsAgreement
  terms={terms}
  value={agreed}
  onChange={setAgreed}
/>

Behavior

  • 전체 동의를 누르면 모든 약관이 한 번에 켜지고, 다시 누르면 모두 꺼집니다.
  • 일부만 체크하면 전체 동의가 중간 상태(−)로 보입니다.
  • 필수 약관이 하나라도 빠지면 가입 버튼을 눌러도 필수 약관에 모두 동의해 주세요. 오류가 나오고 요청은 나가지 않습니다.
  • 보기 링크는 약관 전문을 새 창으로 엽니다.

Configure the terms

동의받을 약관은 meerkit.config.ts에서 정합니다. 개발자가 약관을 추가·삭제하거나 필수 여부를 바꿀 수 있습니다.

meerkit.config.ts
export default defineMeerkitConfig({
  signup: {
    terms: [
      { id: "terms", label: "이용약관 동의", required: true, href: "/terms" },
      { id: "privacy", label: "개인정보 수집 및 이용 동의", required: true, href: "/privacy" },
      { id: "marketing", label: "마케팅 정보 수신 동의", required: false },
      { id: "age14", label: "만 14세 이상입니다", required: true },
    ],
  },
});
PropType설명
id필수string서버로 전달되는 식별자. 동의한 약관의 id 목록이 agreed_terms로 갑니다.
label필수string화면에 보이는 문구.
required필수booleantrue면 동의하지 않으면 가입할 수 없습니다.
hrefstring약관 전문 주소. 있으면 "보기" 링크가 생깁니다.
빈 배열(terms: [])로 두면 약관 영역이 통째로 사라집니다.

What the server receives

POST /auth/signup
{
  "user_id": "newbie",
  "name": "신입",
  "email": "newbie@example.com",
  "password": "••••••••",
  "agreed_terms": ["terms", "privacy"]
}
  • 체크한 약관의 id만 배열로 갑니다. 체크하지 않은 선택 약관(marketing)은 빠집니다.
  • 필수 약관 동의 여부는 서버도 다시 확인해야 합니다. 화면 검사는 우회할 수 있습니다.
  • 동의 시각을 증빙해야 한다면 서버가 agreed_at을 함께 저장하세요 (Data Model 참고).

Legal pages

킷에는 샘플 약관 페이지 /terms, /privacy가 들어 있어 보기 링크가 바로 동작합니다. 샘플 문구이므로 실제 서비스에서는 반드시 법무 검토를 거친 내용으로 교체하세요. 이미 약관 페이지가 있다면 href를 그 주소로 바꾸면 됩니다.

Checkbox

shadcn Checkbox 기반입니다. 체크, 해제, 중간 상태(indeterminate)를 지원합니다.

tsx
<div className="flex items-center gap-3">
  <Checkbox id="agree" checked={checked} onCheckedChange={setChecked} />
  <Label htmlFor="agree">동의합니다</Label>
</div>
  • 항상 Label과 htmlFor/id로 묶어, 글자를 눌러도 체크되게 하세요.
  • 키보드: Space로 토글, Tab으로 이동합니다.
  • 오류 상태는 aria-invalid를 주면 테두리가 빨갛게 바뀝니다.

Radio Group

여러 선택지 중 하나만 고를 때 씁니다. 가입 폼의 선택 항목 성별이 이 컴포넌트를 사용합니다.

tsx
<RadioGroup value={gender} onValueChange={setGender}>
  <div className="flex items-center gap-2">
    <RadioGroupItem id="g-male" value="male" />
    <Label htmlFor="g-male">남성</Label>
  </div>
  ...
</RadioGroup>
언제무엇을
여러 개를 동시에 고를 수 있다Checkbox
하나만 고른다 (보기가 적다)Radio Group
하나만 고른다 (보기가 많다)Select (RoleSelect 참고)
켜기/끄기 한 가지Checkbox 한 개
  • 키보드: 방향키로 선택지를 이동하며 고르고, Tab은 그룹 전체를 한 번에 지나갑니다.
  • 가입 폼에서 켜려면 signup.optionalFields에 "gender"를 넣으세요.

Props

PropType설명
terms필수TermsItem[]동의받을 약관 목록. 비어 있으면 아무것도 그리지 않습니다.
value필수string[]동의한 약관의 id 목록.
onChange필수(ids: string[]) => void체크가 바뀔 때 새 id 목록을 전달합니다.
invalidbooleantrue면 테두리를 빨갛게 강조합니다.

Related API

이 컴포넌트가 호출하는 API입니다. 누르면 요청·응답 명세로 이동합니다.

GET/api/auth/terms가입 때 동의받을 약관 (현재 버전)
Email VerificationGoogle Login
© Meerkit. All rights reserved.GitHub