{/* UnifiedSelect 탭 */}
UnifiedSelect
통합 선택 컴포넌트 - dropdown, radio, check, tag, toggle, swap
{/* Dropdown */}
setSelectValues({ ...selectValues, dropdown: String(v) })}
/>
{/* Radio */}
setSelectValues({ ...selectValues, radio: String(v) })}
/>
{/* Checkbox */}
setSelectValues({ ...selectValues, check: v as string[] })}
/>
{/* Tag */}
setSelectValues({ ...selectValues, tag: v as string[] })}
/>
{/* Toggle */}
setSelectValues({ ...selectValues, toggle: String(v) })}
/>
현재 값:
{JSON.stringify(selectValues, null, 2)}
{/* UnifiedDate 탭 */}
UnifiedDate
통합 날짜/시간 컴포넌트 - date, time, datetime, range
{/* Date */}
setDateValues({ ...dateValues, date: String(v) })}
/>
{/* Time */}
setDateValues({ ...dateValues, time: String(v) })}
/>
{/* DateTime */}
setDateValues({ ...dateValues, datetime: String(v) })}
/>
{/* Range */}
setDateValues({ ...dateValues, range: v as [string, string] })}
/>
현재 값:
{JSON.stringify(dateValues, null, 2)}
{/* UnifiedList 탭 */}
UnifiedList
통합 리스트 컴포넌트 - table, card, list
console.log("Row clicked:", row)}
/>
{/* UnifiedLayout 탭 */}
UnifiedLayout
통합 레이아웃 컴포넌트 - 12컬럼 그리드 시스템, split, flex
{/* 12컬럼 그리드 시스템 */}
12컬럼 그리드 시스템
shadcn/Tailwind 표준 12컬럼 시스템. 자식 요소에 col-span-* 클래스로 너비 조절
{/* 12컬럼 전체 보기 */}
{Array.from({ length: 12 }).map((_, i) => (
{i + 1}
))}
{/* col-span 예시 */}
col-span 활용 예시
col-span-12 (전체)
col-span-6 (절반)
col-span-6 (절반)
col-span-4 (1/3)
col-span-4 (1/3)
col-span-4 (1/3)
col-span-3 (1/4)
col-span-3 (1/4)
col-span-3 (1/4)
col-span-3 (1/4)
col-span-8 (2/3)
col-span-4 (1/3)
{/* Split Layout */}
Split Layout (리사이즈 가능)
왼쪽 패널
오른쪽 패널
{/* UnifiedGroup 탭 */}
UnifiedGroup
통합 그룹 컴포넌트 - tabs, accordion, section, card-section
{/* Tabs */}
탭 1 내용
},
{ id: "tab2", title: "탭 2", content:
탭 2 내용
},
{ id: "tab3", title: "탭 3", content:
탭 3 내용
},
],
}}
/>
{/* Accordion */}
이 내용은 접었다 펼 수 있습니다.
{/* Card Section */}
카드 스타일 섹션 내용입니다.
{/* UnifiedMedia 탭 */}
UnifiedMedia
통합 미디어 컴포넌트 - file, image, video, audio
{/* File Upload */}
{/* Image Upload */}
{/* UnifiedBiz 탭 */}
UnifiedBiz
통합 비즈니스 컴포넌트 - numbering, category, flow 등 (플레이스홀더)
{/* UnifiedHierarchy 탭 */}
UnifiedHierarchy
통합 계층 구조 컴포넌트 - tree, org, bom, cascading
{/* Tree View */}
트리 뷰
{/* Cascading Dropdowns */}
연쇄 드롭다운
);
}
export default UnifiedComponentsDemo;
// ===== 조건부 동작 데모 컴포넌트 =====
/**
* 조건부 동작을 시연하는 데모 컴포넌트
*
* 시나리오:
* 1. 계약 유형 선택 → 유형별 다른 필드 표시
* 2. VIP 여부 체크 → VIP 전용 필드 활성화
* 3. 국가 선택 → 해당 국가의 도시만 표시 (연쇄)
*/
function ConditionalDemo() {
return (
);
}
function ConditionalDemoContent() {
const { formData, setValue, evaluateCondition } = useUnifiedForm();
// 국가별 도시 데이터
const cityOptions: Record> = {
korea: [
{ value: "seoul", label: "서울" },
{ value: "busan", label: "부산" },
{ value: "incheon", label: "인천" },
{ value: "daegu", label: "대구" },
],
japan: [
{ value: "tokyo", label: "도쿄" },
{ value: "osaka", label: "오사카" },
{ value: "kyoto", label: "교토" },
],
usa: [
{ value: "newyork", label: "뉴욕" },
{ value: "la", label: "로스앤젤레스" },
{ value: "chicago", label: "시카고" },
],
};
// 현재 선택된 국가의 도시 옵션
const currentCountry = formData.country as string;
const availableCities = currentCountry ? cityOptions[currentCountry] || [] : [];
// 조건부 설정
const showB2BFields: ConditionalConfig = {
enabled: true,
field: "contractType",
operator: "=",
value: "b2b",
action: "show",
};
const showB2CFields: ConditionalConfig = {
enabled: true,
field: "contractType",
operator: "=",
value: "b2c",
action: "show",
};
const showDiscountField: ConditionalConfig = {
enabled: true,
field: "isVip",
operator: "=",
value: true,
action: "show",
};
// 조건 평가
const b2bState = evaluateCondition("b2bFields", showB2BFields);
const b2cState = evaluateCondition("b2cFields", showB2CFields);
const discountState = evaluateCondition("discountRate", showDiscountField);
return (
{/* 시나리오 1: 계약 유형에 따른 필드 표시 */}
시나리오 1: 계약 유형별 필드 표시
계약 유형을 선택하면 해당 유형에 맞는 입력 필드가 나타납니다
{/* 계약 유형 선택 */}
setValue("contractType", v)}
/>
{/* B2B 전용 필드 */}
{b2bState.visible && (