UNPKG

@restnfeel/agentc-starter-kit

Version:

한국어 기업용 CMS 모듈 - Task Master AI와 함께 빠르게 웹사이트를 구현할 수 있는 재사용 가능한 컴포넌트 시스템

459 lines (423 loc) 8.69 kB
// 템플릿 카테고리 export type TemplateCategory = | "BUSINESS" | "ECOMMERCE" | "PORTFOLIO" | "BLOG" | "LANDING" | "AGENCY" | "RESTAURANT" | "EDUCATION" | "HEALTHCARE" | "NONPROFIT" | "OTHER"; // 템플릿 가격 정책 export type TemplatePricing = "FREE" | "PREMIUM" | "ENTERPRISE"; // 섹션 타입 export type SectionType = | "hero" | "about" | "services" | "features" | "testimonials" | "contact" | "pricing" | "blog" | "gallery" | "team" | "faq" | "cta" | "footer"; // 기본 섹션 설정 export interface SectionSettings { height?: "auto" | "screen" | "half" | string; alignment?: "left" | "center" | "right"; animation?: string; background?: { type: "color" | "image" | "gradient"; value: string; overlay?: boolean; overlayOpacity?: number; }; padding?: { top?: string; bottom?: string; left?: string; right?: string; }; margin?: { top?: string; bottom?: string; }; } // 연락 폼 필드 export interface ContactFormField { name: string; label: string; type: "text" | "email" | "tel" | "textarea" | "select" | "checkbox"; required: boolean; placeholder?: string; options?: string[]; validation?: { pattern?: string; minLength?: number; maxLength?: number; }; } // 연락 폼 설정 export interface ContactForm { fields: ContactFormField[]; submitText?: string; successMessage?: string; errorMessage?: string; redirectUrl?: string; } // 소셜 미디어 링크 export interface SocialLink { platform: | "facebook" | "instagram" | "twitter" | "linkedin" | "youtube" | "tiktok"; url: string; icon?: string; } // 네비게이션 메뉴 아이템 export interface MenuItem { label: string; href: string; children?: MenuItem[]; icon?: string; external?: boolean; } // 로고 설정 export interface LogoSettings { text?: string; image?: string; width?: string; height?: string; } // 색상 팔레트 export interface ColorPalette { primary: string; secondary: string; accent: string; background: string; foreground: string; muted: string; border: string; success?: string; warning?: string; error?: string; } // 타이포그래피 설정 export interface Typography { fontFamily: { sans: string[]; heading: string[]; mono?: string[]; }; fontSize: { xs: string; sm: string; base: string; lg: string; xl: string; "2xl": string; "3xl": string; "4xl": string; "5xl": string; "6xl"?: string; }; fontWeight?: { light?: number; normal?: number; medium?: number; semibold?: number; bold?: number; }; lineHeight?: { tight?: number; normal?: number; relaxed?: number; }; } // 스타일 설정 export interface TemplateStyles { colors: ColorPalette; typography: Typography; spacing: { section: string; container: string; grid?: string; }; borderRadius: { sm: string; md: string; lg: string; xl: string; full?: string; }; shadows?: { sm?: string; md?: string; lg?: string; xl?: string; }; breakpoints?: { sm?: string; md?: string; lg?: string; xl?: string; "2xl"?: string; }; } // SEO 설정 export interface SEOSettings { titleTemplate: string; defaultTitle: string; defaultDescription: string; defaultKeywords?: string[]; ogImage?: string; twitterCard?: "summary" | "summary_large_image"; jsonLd?: Record<string, unknown>; } // 네비게이션 설정 export interface NavigationSettings { position: "top" | "left" | "right"; sticky: boolean; transparent?: boolean; logo: LogoSettings; menuItems: MenuItem[]; ctaButton?: { text: string; href: string; style?: "primary" | "secondary" | "outline"; }; } // 푸터 설정 export interface FooterSettings { showSocial: boolean; socialLinks: SocialLink[]; showNewsletter: boolean; newsletterTitle?: string; newsletterDescription?: string; copyright: string; links?: { title: string; items: MenuItem[]; }[]; address?: { street?: string; city?: string; country?: string; phone?: string; email?: string; }; } // 애널리틱스 설정 export interface AnalyticsSettings { googleAnalytics?: string; facebookPixel?: string; hotjar?: string; mixpanel?: string; customScripts?: { head?: string[]; body?: string[]; }; } // 템플릿 전체 설정 export interface TemplateSettings { seo: SEOSettings; navigation: NavigationSettings; footer: FooterSettings; analytics: AnalyticsSettings; customCss?: string; customJs?: string; favicons?: { ico?: string; png16?: string; png32?: string; png192?: string; png512?: string; }; } // 섹션 콘텐츠 (각 섹션 타입별로 다른 구조) export type SectionContent = | HeroContent | AboutContent | ServicesContent | TestimonialsContent | ContactContent | Record<string, unknown>; // Hero 섹션 콘텐츠 export interface HeroContent { title: string; subtitle?: string; description?: string; ctaText?: string; ctaUrl?: string; secondaryCta?: { text: string; url: string; }; backgroundImage?: string; backgroundVideo?: string; overlay?: boolean; overlayOpacity?: number; } // About 섹션 콘텐츠 export interface AboutContent { title: string; subtitle?: string; description: string; image?: string; features?: { icon: string; title: string; description: string; }[]; stats?: { value: string; label: string; description?: string; }[]; } // Services 섹션 콘텐츠 export interface ServicesContent { title: string; subtitle?: string; services: { icon: string; title: string; description: string; features?: string[]; price?: string; ctaText?: string; ctaUrl?: string; }[]; } // Testimonials 섹션 콘텐츠 export interface TestimonialsContent { title: string; subtitle?: string; testimonials: { name: string; position?: string; company?: string; content: string; rating?: number; image?: string; }[]; } // Contact 섹션 콘텐츠 export interface ContactContent { title: string; subtitle?: string; address?: string; phone?: string; email?: string; hours?: string; mapEmbed?: string; contactForm?: ContactForm; } // 섹션 정의 export interface TemplateSection { type: SectionType; name: string; required: boolean; order: number; defaultContent: SectionContent; settings?: SectionSettings; customFields?: { name: string; label: string; type: "text" | "textarea" | "select" | "checkbox" | "image" | "color"; options?: string[]; description?: string; }[]; } // 메인 템플릿 인터페이스 export interface SiteTemplate { id: string; name: string; slug: string; description?: string; category: TemplateCategory; pricing: TemplatePricing; // 템플릿 구조 sections: Record<string, TemplateSection>; styles: TemplateStyles; settings: TemplateSettings; // 메타데이터 features: string[]; tags: string[]; previewImage?: string; previewUrl?: string; demoUrl?: string; documentationUrl?: string; // 상태 isActive: boolean; isPublic: boolean; version: string; // 추가 정보 author?: string; authorUrl?: string; license?: string; price?: number; downloads?: number; rating?: number; // 호환성 requiredPlugins?: string[]; supportedLanguages?: string[]; minVersion?: string; // 커스터마이제이션 옵션 customizable?: { colors: boolean; fonts: boolean; layout: boolean; content: boolean; }; // 업데이트 정보 changelog?: { version: string; date: string; changes: string[]; }[]; // 생성/수정 일시 createdAt?: Date; updatedAt?: Date; } // 템플릿 설치/사용 정보 export interface TemplateUsage { templateId: string; siteId: string; installedAt: Date; customizations?: Record<string, unknown>; version: string; } // 템플릿 라이브러리 인터페이스 export interface TemplateLibrary { templates: SiteTemplate[]; categories: { id: TemplateCategory; name: string; description: string; icon: string; }[]; featured: string[]; popular: string[]; recent: string[]; } // 템플릿 필터 옵션 export interface TemplateFilters { category?: TemplateCategory; pricing?: TemplatePricing; features?: string[]; tags?: string[]; search?: string; sortBy?: "name" | "popularity" | "rating" | "date" | "price"; sortOrder?: "asc" | "desc"; }