image
Akan.js
Docs
문서컨벤션레퍼런스Cheatsheet
한국어
image
Akan.js
Akan.js v2 문서가 새로 나왔습니다.v1 문서 보기
문서컨벤션레퍼런스Cheatsheet
MIT 라이선스 하에 배포되었습니다.
Akan.js 공식 컨설팅 서비스Akansoft
Copyright © 2026 Akan.js 모든 권리 보유.
시스템 관리자bassman
CLI 레퍼런스
• 명령어
• Workspace
• Application
• Library
• Module
• Scalar
• Package
• Page
• Cloud
• Context
• Agent
• Guideline
AkanJS 레퍼런스
• akanjs/base
• akanjs/common
• akanjs/constant
• akanjs/fetch
• akanjs/signal
• akanjs/server
• akanjs/client
• akanjs/webkit
UI 레퍼런스
• Overview
• Core
• Display
• Forms
• Overlays
• System
• 커스터마이즈
CLI 레퍼런스
• 명령어
• Workspace
• Application
• Library
• Module
• Scalar
• Package
• Page
• Cloud
• Context
• Agent
• Guideline
AkanJS 레퍼런스
• akanjs/base
• akanjs/common
• akanjs/constant
• akanjs/fetch
• akanjs/signal
• akanjs/server
• akanjs/client
• akanjs/webkit
UI 레퍼런스
• Overview
• Core
• Display
• Forms
• Overlays
• System
• 커스터마이즈
이전
System

커스터마이즈

모든 `akanjs/ui` 컴포넌트는 fork 없이 route 단위로 re-skin할 수 있습니다. app의 `ui/` 폴더에 drop-in 교체 컴포넌트를 작성하고 `page/**/_overrides.tsx` manifest에서 framework slot에 bind하면 됩니다. 해당 route subtree의 기존 `<Modal>`, `<Button>`, `<Table>` 호출부는 call-site 변경 없이 여러분의 버전으로 렌더링됩니다.
override는 layout과 똑같이 route tree를 따라 cascade됩니다. 상위에 선언한 override는 그 아래 전체에 적용되고, 하위 manifest는 자신의 subtree에 대해 이를 좁히거나 교체합니다(가장 가까운 조상이 우선).
`_overrides.tsx` manifest는 logic-free이고 `"use client"` directive가 필요 없습니다. `override()`는 server-safe한 순수 map을 반환하고, provider를 mount하는 client boundary는 framework가 생성합니다. 파일은 import와 단 하나의 `export default override({ … })`로만 유지하세요.

동작 방식

1. `apps/<app>/ui/`에 drop-in 컴포넌트를 작성합니다. slot contract(`AkanModalComponent`, 그 외 slot은 `AkanUiOverrides["<Slot>"]`)로 타입을 지정해 실제 교체 가능 여부를 검증받으세요. 동작을 재구현하지 말고 framework의 headless 부품(예: `Dialog`)을 조합하세요.
1. App 컴포넌트
2. `page/**/_overrides.tsx`에 선언합니다. `override(map)`은 typed identity helper입니다. key는 PascalCase framework slot 이름이고, 각 value는 해당 slot의 props로 검사되며, 알 수 없는 slot 이름은 compile 시점에 거부됩니다.
2. Manifest

적용 범위

app 전체 skin은 `page/`에, 특정 subtree에만 적용하려면 route group/segment 안에 `_overrides.tsx`를 두세요. 중첩된 manifest는 slot 단위로 조상 위에 merge되므로, 자식 manifest는 나열한 slot만 override하고 나머지는 상속합니다.
중첩 적용

Override 가능한 slot

framework가 제공하는 slot 목록입니다. 동작/인프라 성격의 컴포넌트(Portal, InfiniteScroll, ClientSide, …)는 skin이 아니라 wiring이므로 의도적으로 override 대상에서 제외했습니다.
Leaf primitive
ModalEmptyPaginationPopconfirmDropdownTableMenuUnauthorized
Generic
ButtonSelect
Input (compound)
InputInputTextAreaInputPasswordInputEmailInputNumberInputCheckbox
Radio (compound)
RadioRadioItem
DatePicker (compound)
DatePickerDatePickerRangePickerDatePickerTimePicker
ToggleSelect (compound)
ToggleSelectToggleSelectMulti
Loading (namespace)
LoadingSpinLoadingSkeletonLoadingProgressBarLoadingButtonLoadingInputLoadingArea

Generic 컴포넌트

`Button`과 `Select`는 generic입니다. 공개 컴포넌트는 generic signature를 그대로 유지하므로 `<Select<MyEnum, true> … />` 같은 call-site는 value/onChange 형태를 그대로 추론합니다. override slot은 가장 넓은 instantiation을 저장하므로, 여러분은 generic 없는 평범한 교체 컴포넌트를 작성하면 됩니다.
Generic override

Compound 컴포넌트

하위 부품을 가진 컴포넌트(`Input.Password`, `Radio.Item`, `DatePicker.RangePicker`, `ToggleSelect.Multi`, 그리고 모든 `Loading.*` member)는 leaf마다 하나의 slot을 노출하며 이름은 `<Base><Sub>`입니다(예: `InputPassword`, `LoadingSpin`). 원하는 leaf만 override하면 나머지는 기본값을 유지하고, `Input.Password` / `Loading.Spin` 접근도 그대로 동작합니다.
Compound leaf override
커스터마이즈
동작 방식
적용 범위
Override 가능한 slot
Generic 컴포넌트
Compound 컴포넌트