import { BrandAccent, WithSubCategories, StatusAccent, StatusSubCategories, TextAccent, IconAccent, BackgroundAccent, LineAccent, FillAccent, SemanticColorScheme } from '../tokens/colors/type.js'; import { ShadowAccent, EffectScheme } from '../tokens/effect/type.js'; import { ComponentScheme } from '../tokens/component/type.js'; import { createColorTheme } from './createColorTheme.js'; import { createEffectTheme } from './createEffectTheme.js'; type DeepPartial = { [P in keyof T]?: T[P] extends object ? DeepPartial : T[P]; }; type BaseTheme = ReturnType & ReturnType; interface MetaThemeConfig { colors?: Partial; effects?: Partial; components?: (baseTheme: BaseTheme) => DeepPartial; } /** * 색상, 효과, 컴포넌트 설정을 통합하여 완전한 테마를 생성합니다. * * @param config - 테마 설정 객체 * @param config.colors - 색상 설정 (선택적) * @param config.effects - 효과 설정 (선택적) * @param config.components - 컴포넌트 설정을 생성하는 함수 (선택적) * * @returns 통합된 테마 객체 * * @example * ```typescript * const theme = createMetaTheme({ * colors: { * brand: { * strong: primitiveColor.pink[50], * default: primitiveColor.pink[70], * } * }, * effects: {}, * components: (baseTheme) => ({ * button: { * primary: { * background: baseTheme.colors.brand.default, * text: baseTheme.colors.text.inverse, * } * } * }) * }); * ``` */ declare const createMetaTheme: (config: MetaThemeConfig) => { button: { solidPrimary?: { background?: `#${string}` | undefined; backgroundHover?: `#${string}` | undefined; text?: `#${string}` | undefined; icon?: `#${string}` | undefined; } | undefined; solidSecondary?: { background?: `#${string}` | undefined; backgroundHover?: `#${string}` | undefined; text?: `#${string}` | undefined; icon?: `#${string}` | undefined; } | undefined; solidTertiary?: { background?: `#${string}` | undefined; backgroundHover?: `#${string}` | undefined; text?: `#${string}` | undefined; icon?: `#${string}` | undefined; } | undefined; solidError?: { background?: `#${string}` | undefined; backgroundHover?: `#${string}` | undefined; text?: `#${string}` | undefined; icon?: `#${string}` | undefined; } | undefined; outlinePrimary?: { background?: `#${string}` | undefined; backgroundHover?: `#${string}` | undefined; text?: `#${string}` | undefined; icon?: `#${string}` | undefined; border?: `#${string}` | undefined; } | undefined; outlineSecondary?: { background?: `#${string}` | undefined; backgroundHover?: `#${string}` | undefined; text?: `#${string}` | undefined; icon?: `#${string}` | undefined; border?: `#${string}` | undefined; } | undefined; }; switch: { checkedBrand?: { background?: `#${string}` | undefined; backgroundHover?: `#${string}` | undefined; } | undefined; checkedGreen?: { background?: `#${string}` | undefined; backgroundHover?: `#${string}` | undefined; } | undefined; unchecked?: { background?: `#${string}` | undefined; backgroundHover?: `#${string}` | undefined; } | undefined; }; card: { shadow?: string | undefined; }; bottomSheet: { grabber?: { background?: `#${string}` | undefined; } | undefined; }; spinner: { indicator?: { color?: `#${string}` | undefined; } | undefined; }; checkbox: { checked?: { background?: `#${string}` | undefined; backgroundHover?: `#${string}` | undefined; border?: `#${string}` | undefined; } | undefined; unchecked?: { background?: `#${string}` | undefined; backgroundHover?: `#${string}` | undefined; border?: `#${string}` | undefined; } | undefined; }; radioGroup: { checked?: { background?: `#${string}` | undefined; backgroundHover?: `#${string}` | undefined; accent?: `#${string}` | undefined; accentHover?: `#${string}` | undefined; } | undefined; unchecked?: { background?: `#${string}` | undefined; backgroundHover?: `#${string}` | undefined; accent?: `#${string}` | undefined; accentHover?: `#${string}` | undefined; } | undefined; }; skeleton: { background?: string | undefined; shimmer?: string | undefined; }; accordion: { arrow?: { color?: `#${string}` | undefined; } | undefined; }; calendar: { header?: { navButton?: { background?: `#${string}` | undefined; backgroundHover?: `#${string}` | undefined; border?: `#${string}` | undefined; } | undefined; } | undefined; dateCell?: { default?: { background?: `#${string}` | undefined; backgroundHover?: `#${string}` | undefined; text?: `#${string}` | undefined; } | undefined; selected?: { background?: `#${string}` | undefined; backgroundHover?: `#${string}` | undefined; text?: `#${string}` | undefined; } | undefined; rangeMiddle?: { background?: `#${string}` | undefined; backgroundHover?: `#${string}` | undefined; text?: `#${string}` | undefined; } | undefined; today?: { border?: `#${string}` | undefined; } | undefined; } | undefined; }; blur: Record<"primary", string>; shadow: Record; brand: Record; status: WithSubCategories, StatusSubCategories>; text: Record; icon: Record; background: Record; line: Record; dimm: Record<"default", `#${string}`>; fill: Record & WithSubCategories, "inverse">; }; export { createMetaTheme };