번들 확장 20개 전부에 AGENTS.md · README.md · docs/ 를 채우고, 코어가 들고 있던 확장 소유 문서 두 갈래를 그 확장으로 옮긴다. 번들 템플릿의 컴포넌트· 핸들러·레이아웃 상세와 확장이 구독하는 활동 로그 훅 목록이 그 대상이며, 코어에는 총계와 링크만 남아 확장이 기능을 늘릴 때 코어 문서를 고쳐야 하던 역방향 의존이 사라진다. 전수 완비를 확인하고 강제를 조인다 — 문서 동반 룰을 대상 목록 없는 error 로 승격하고, 검사 스크립트가 문서 미보유를 실패로 올리며, 미채움 마커 baseline 을 0 으로 기록한다. 한쪽만 조이면 "새 확장이 문서 없이 들어와도 초록" 인 상태가 남는데 그 결과는 이상 0건과 구분되지 않는다. 집필 과정에서 드러난 생성기 결함 셋을 함께 고친다. 스케줄 주기 열이 계약 키를 읽지 않아 모든 확장에서 '-' 였고, 네임스페이스를 붙인 핸들러 등록 키가 수집에서 통째로 빠졌으며, README 골격이 폐기된 히어로 배지를 계속 찍어내고 있었다. 셋 다 산출물이 아니라 원천이 틀린 것이라, 가드의 모집단에 생성기 출력 자체를 넣어 다음 확장이 같은 상태로 태어나는 경로를 막는다.
13 KiB
Basic — 컴포넌트
템플릿이 제공하는 컴포넌트 · 진입점: AGENTS.md
제공 컴포넌트
컴포넌트 79개 (루트: src/components).
| 분류 | 개수 |
|---|---|
basic |
38개 |
composite |
36개 |
layout |
5개 |
세 분류는 "얼마나 조합됐는가" 로 나뉩니다 — basic 은 HTML 태그를 그대로 래핑한 최소 단위
(Div→<div>), composite 는 basic 을 조합해 UI 패턴을 캡슐화한 것(Header 가 로고·네비·
검색·사용자 메뉴를 감싸는 식), layout 은 페이지 구조(Container/Grid/Flex)입니다. 새 컴포넌트는
이 구분에 맞는 디렉토리(src/components/{basic,composite,layout}/)에 넣어야 components.json
카탈로그와 editor-spec.json 팔레트 분류가 어긋나지 않습니다.
이 템플릿은 방문자 화면 전용이라 관리자 템플릿(sirsoft-admin_basic)과 컴포넌트 구성이
크게 다릅니다. DataGrid · AdminSidebar · MultilingualInput 같은 관리 도구가 없고, 대신
ProductCard · ProductImageViewer · QuantitySelector · PostReactions · MobileNav ·
SocialLoginButtons 처럼 상점·게시판·인증 화면에 필요한 것들이 있습니다. 모듈이 방문자
화면을 그리지 않고 API 만 제공하는 구조(게시판·이커머스 모두 레이아웃이 전부 admin 그룹)
이므로, 방문자가 보는 커머스·게시판 UI 는 사실상 이 템플릿의 컴포넌트가 전부입니다.
위 개수는 코드에서 실측되므로 시간이 지나면 달라집니다 — 이 문서에 구체적 개수를 하드코딩하지 않습니다. 정확한 전체 목록·Props 는 코어의 컴포넌트 Props 레퍼런스를 따르며, 이 문서는 "이 템플릿에서만" 유효한 것을 다룹니다.
이관 원문 상세
아래는 코어
docs/frontend/templates/sirsoft-basic/components.md에 있던 원문을 이 문서로 옮긴 것입니다(#601). 이관 시점 그대로 보존하되, 코드가 SSoT 인 값과 어긋나는 부분에는 정정 주석을 달았습니다 — 실측 총계는 위 「제공 컴포넌트」 블록이 SSoT 입니다.
sirsoft-basic 컴포넌트
템플릿 식별자:
sirsoft-basic(type: user, v0.4.16) 관련 문서: 핸들러 | 레이아웃 | 컴포넌트 Props 레퍼런스
정정(#601): 위 버전(v0.4.16)은 이관 시점 문서 값입니다. 현재 버전은
template.json이 SSoT 입니다.
TL;DR (5초 요약)
1. Basic 26개: HTML 래핑 (Div, Button, Input, Select, Form, A, H1~H4, PasswordInput 등)
2. Composite 27개: UI 패턴 캡슐화 (Header, Footer, Modal, ProductCard, Pagination 등)
3. Layout 5개: 페이지 구조 (Container, Grid, Flex, SectionLayout, ThreeColumnLayout)
(정정(#601): 개수는 이관 시점 값 — 실측은 위 「제공 컴포넌트」 블록이 SSoT)
4. 사용자(User) 템플릿 전용 — 모듈 레이아웃(user/ 하위)에서 사용
5. features: dark_mode, responsive, multi_language, multi_currency 지원
목차
- 컴포넌트 개요
- Basic Components (26개)
- Composite Components (27개)
- Layout Components (5개)
- sirsoft-admin_basic과의 차이
컴포넌트 개요
정정(#601): 아래 개수는 이관 시점 문서 값입니다. 코드 실측은 basic 38 · composite 36 · layout 5 = 79종이며 위 「제공 컴포넌트」 블록이 SSoT 입니다. 아래 목록에 없는 컴포넌트가 있습니다(basic 의
Code·FileInput·I·Ol·Optgroup·Section·Svg·Tbody·Td·Th·Thead·Tr, composite 의BrandMark·NotificationCenter·PageLoading·SlotContainer등).
| 타입 | 개수 | 설명 |
|---|---|---|
| Basic | 26 | HTML 태그 래핑 — 최소 단위 컴포넌트 |
| Composite | 27 | 기본 컴포넌트 조합 — UI 패턴 캡슐화 |
| Layout | 5 | 페이지 구조 정의 — 컨테이너/그리드/플렉스 |
| 합계 | 58 |
소스: templates/_bundled/sirsoft-basic/components.json
컴포넌트 소스: templates/_bundled/sirsoft-basic/src/components/{basic,composite,layout}/*.tsx
Basic Components (26개)
정정(#601): 제목의 개수는 이관 시점 문서 값입니다(코드 실측 38종). 목록 자체는 원문 그대로입니다.
HTML 태그를 래핑하는 최소 단위 컴포넌트입니다.
텍스트/링크
| 컴포넌트 | 설명 | 주요 Props | 바인딩 |
|---|---|---|---|
A |
앵커/링크 | href | - |
H1 |
제목 (h1) | - | - |
H2 |
제목 (h2) | - | - |
H3 |
제목 (h3) | - | - |
H4 |
제목 (h4) | - | - |
P |
문단 | - | - |
Span |
인라인 텍스트 | - | - |
Label |
라벨 | - | - |
컨테이너
| 컴포넌트 | 설명 | 주요 Props | 바인딩 |
|---|---|---|---|
Div |
범용 컨테이너 | - | - |
Nav |
네비게이션 래퍼 | - | - |
Form |
폼 컨테이너 | - | - |
Header |
HTML header 래퍼 | - | - |
Footer |
HTML footer 래퍼 | - | - |
Hr |
수평선 | - | - |
폼 입력
| 컴포넌트 | 설명 | 주요 Props | 바인딩 |
|---|---|---|---|
Input |
텍스트 입력 | label, error | checkable |
Select |
선택 박스 | label, error | - |
Option |
Select 내부 옵션 | value, disabled | - |
Textarea |
텍스트 영역 | label, error | - |
Checkbox |
체크박스 | label | checked |
PasswordInput |
비밀번호 입력 (보기/숨기기, 조건 검증, 확인 일치) | label, error, showToggle, showValidation, isConfirmField, confirmTarget, showRules, ... | - |
Button |
버튼 | variant, size | - |
미디어
| 컴포넌트 | 설명 | 주요 Props | 바인딩 |
|---|---|---|---|
Icon |
FontAwesome 아이콘 | name | - |
Img |
이미지 | src, alt | - |
기타
| 컴포넌트 | 설명 |
|---|---|
Table |
HTML table wrapper |
Ul |
순서 없는 리스트 |
Li |
리스트 아이템 |
Composite Components (27개)
정정(#601): 제목의 개수는 이관 시점 문서 값입니다(코드 실측 36종). 목록 자체는 원문 그대로입니다.
기본 컴포넌트를 조합하여 UI 패턴을 캡슐화한 복합 컴포넌트입니다.
사이트 레이아웃
| 컴포넌트 | 설명 | 주요 Props |
|---|---|---|
Header |
사이트 헤더 (로고, 네비게이션, 검색, 사용자 메뉴) | siteName |
Footer |
사이트 푸터 (저작권, 링크, 소셜) | siteName |
MobileNav |
모바일 네비게이션 드로어 | - |
쇼핑몰
| 컴포넌트 | 설명 | 주요 Props |
|---|---|---|
ProductCard |
상품 카드 (이미지, 제목, 가격) | product, showDiscount |
ProductImageViewer |
상품 이미지 뷰어 (메인 + 썸네일 + 라이트박스) | images |
QuantitySelector |
수량 선택기 (+/- 버튼) | value, min, max |
게시판
| 컴포넌트 | 설명 | 주요 Props |
|---|---|---|
PostReactions |
게시글 리액션 버튼 그룹 | postId, reactions |
ExpandableContent |
콘텐츠 펼치기/접기 (높이 초과 시 그라데이션) | maxHeight, expandText, collapseText |
인증
| 컴포넌트 | 설명 | 주요 Props |
|---|---|---|
SocialLoginButtons |
소셜 로그인 버튼 그룹 | providers |
사용자
| 컴포넌트 | 설명 | 주요 Props |
|---|---|---|
Avatar |
사용자 아바타 (이미지 또는 이름 첫 글자) | name, avatar, size, text |
AvatarUploader |
아바타 이미지 업로드 (원형 UI, 즉시 업로드) | src, fallbackText, size, uploadEndpoint, deleteEndpoint, showDeleteButton, ... |
UserInfo |
사용자 정보 표시 및 드롭다운 | name, userId, subText, isGuest, showDropdown, clickable, ... |
에디터/콘텐츠
| 컴포넌트 | 설명 | 주요 Props |
|---|---|---|
HtmlContent |
HTML 안전 렌더링 (DOMPurify XSS 방지) | content, text, isHtml, purifyConfig |
HtmlEditor |
HTML/텍스트 에디터 (WYSIWYG, 미리보기) | name, value, placeholder, isHtml, showPreview, minHeight |
RichTextEditor |
리치 텍스트 에디터 | value, placeholder |
ImageGallery |
이미지 갤러리 (썸네일 + 메인 이미지) | images |
파일/미디어
| 컴포넌트 | 설명 | 주요 Props |
|---|---|---|
FileUploader |
파일 업로드 | accept, maxSize, multiple |
네비게이션/피드백
| 컴포넌트 | 설명 | 주요 Props |
|---|---|---|
TabNavigation |
탭 네비게이션 (underline/pills/enclosed) | tabs, activeTabId, variant, onTabChange, hiddenTabIds |
Pagination |
페이지네이션 | currentPage, totalPages, maxVisiblePages, showFirstLast, prevText, nextText |
TabNavigation
hiddenTabIds: 특정 조건에서 탭을 동적으로 숨길 때 사용합니다. 탭 아이템의id배열을 전달하면 해당 탭이 렌더링에서 제외됩니다.{ "name": "TabNavigation", "props": { "tabs": [...], "hiddenTabIds": "{{_global.modules?.['sirsoft-ecommerce']?.inquiry?.board_slug ? [] : ['qna']}}" } }
| SearchBar | 검색 바 (자동완성 지원) | name, placeholder, value, showButton, suggestions, showSuggestions |
| Modal | 모달 다이얼로그 (ESC, 포커스 트랩) | isOpen, onClose, title, width |
| ConfirmDialog | 확인/취소 다이얼로그 | isOpen, onClose, title, message, confirmText, cancelText, ... |
| Toast | 토스트 알림 | toasts, position, duration |
| ThemeToggle | 테마 전환 토글 (auto/light/dark) | autoText, lightText, darkText |
페이지 전환
| 컴포넌트 | 설명 | 주요 Props |
|---|---|---|
PageTransitionIndicator |
페이지 전환 로딩 인디케이터 | - |
PageTransitionBlur |
페이지 전환 시 콘텐츠 블러 오버레이 | - |
PageSkeleton |
동적 스켈레톤 UI 렌더러 | components, options |
Layout Components (5개)
페이지 구조를 정의하는 레이아웃 컴포넌트입니다.
| 컴포넌트 | 설명 | 주요 Props |
|---|---|---|
Container |
레이아웃 컨테이너 | maxWidth |
Flex |
Flexbox 레이아웃 | direction, gap |
Grid |
Grid 레이아웃 | cols, gap |
SectionLayout |
섹션 레이아웃 (제목, 부제목, 패딩) | title, subtitle, padding, background |
ThreeColumnLayout |
3단 레이아웃 (좌/중/우) | leftWidth, centerWidth, rightWidth, gap |
sirsoft-admin_basic과의 차이
공통 컴포넌트
두 템플릿 모두에 존재하는 컴포넌트:
| 타입 | 공통 컴포넌트 |
|---|---|
| Basic | A, Button, Checkbox, Div, Form, H1~H4, Icon, Img, Input, Label, Li, Nav, P, Select, Span, Table, Textarea, Ul |
| Composite | ConfirmDialog, FileUploader, HtmlContent, HtmlEditor, ImageGallery, Modal, Pagination, ProductCard, SearchBar, TabNavigation, ThemeToggle, Toast |
| Layout | Container, Flex, Grid, SectionLayout, ThreeColumnLayout |
sirsoft-basic 전용 컴포넌트
| 타입 | 전용 컴포넌트 | 설명 |
|---|---|---|
| Basic | PasswordInput |
비밀번호 입력 (보기/숨기기, 검증) |
| Basic | Header, Footer, Hr |
HTML5 시맨틱 태그 |
| Composite | Header, Footer |
사이트 헤더/푸터 (composite) |
| Composite | MobileNav |
모바일 드로어 네비게이션 |
| Composite | ProductImageViewer |
상품 이미지 뷰어 |
| Composite | QuantitySelector |
수량 선택기 |
| Composite | PostReactions |
게시글 리액션 |
| Composite | SocialLoginButtons |
소셜 로그인 |
| Composite | Avatar, AvatarUploader |
아바타 관련 |
| Composite | UserInfo |
사용자 정보 드롭다운 |
| Composite | RichTextEditor |
리치 텍스트 에디터 |
| Composite | ExpandableContent |
콘텐츠 접기/펼치기 |
| Composite | PageTransitionBlur |
전환 블러 효과 |
| Composite | PageSkeleton |
스켈레톤 UI |
sirsoft-admin_basic 전용 컴포넌트 (이 템플릿에 없음)
AdminSidebar, AdminHeader, AdminFooter, PageHeader, DataGrid, CodeEditor, DynamicFieldList, MultilingualInput, TagInput, Toggle, RadioGroup, FormField, SlotContainer, FilterGroup 등 관리자 전용 컴포넌트 39개+
정정(#601):
SlotContainer는 이 템플릿에도 있습니다(src/components/composite/SlotContainer.tsx). 나머지 항목은 이관 시점 그대로입니다.