import type { ReactNode } from 'react';
import * as React from 'react';
import type { Language, LocalizedLabel } from '../../types';
/** @deprecated Use Language from '../../types' instead */
export type { Language };
/** 레이아웃 전반에 적용되는 테마 값. 라이트·다크 두 가지를 지원합니다. */
export type Theme = 'light' | 'dark';
/**
 * GNB 및 사이드 패널에서 사용할 테마 선택 옵션.
 * 상위 GNB 컴포넌트와 공유되며, 사용자가 테마를 직접 전환할 수 있는지 여부를 제어합니다.
 */
interface ThemeConfig {
    /** 현재 적용 중인 테마 값. 전달되지 않으면 기본적으로 라이트 테마를 사용합니다. */
    value?: Theme;
    /**
     * GNB 외관(theme attribute)에 강제로 적용할 테마.
     * `value`와 별도로 스타일만 다르게 보여줘야 할 때 사용합니다.
     */
    visualTheme?: Theme;
    /** 사용자 테마 선택 메뉴 표시 여부. `false`면 버튼 자체가 렌더링되지 않습니다. */
    enabled?: boolean;
    /** 테마 전환 시 상위 상태 관리자가 호출할 콜백. */
    onChange?: (theme: Theme) => void;
}
/**
 * 패밀리 서비스 진입점을 정의합니다.
 * `type`을 지정하지 않으면 기본적으로 링크 항목으로 처리됩니다.
 */
interface FamilyMenuLink {
    /** 명시적으로 링크 타입을 지정하고 싶을 때 사용하는 필드입니다. */
    type?: 'link';
    /** 링크 왼쪽에 노출할 커스텀 아이콘. React 컴포넌트를 그대로 전달합니다. */
    icon?: ReactNode;
    /** 다국어 링크 라벨 */
    name: LocalizedLabel;
    /** 이동할 URL */
    url: string;
    /** 새 창 여부 등을 제어할 타겟 속성 (`_blank` 등). */
    target?: string;
    /** 폰트 굵게 */
    bold?: boolean;
}
/** 패밀리 메뉴 항목 사이를 구분하기 위한 시각적 구분선 정의 */
interface FamilyMenuSeparator {
    /** 메뉴 유형: 구분선 */
    type: 'separator';
    /** 특정 구분선을 식별해야 할 때 사용할 선택 ID */
    id?: string;
}
/** 패밀리 메뉴 항목 */
type FamilyItem = FamilyMenuLink | FamilyMenuSeparator;
export declare const normalizeFamilyMenuItem: (item: FamilyItem) => FamilyItem;
/**
 * 크레딧 관련 추가 링크 정의.
 * 예: 크레딧 충전, 사용 내역 페이지 등.
 */
interface CreditMenuLink {
    /** 링크 왼쪽에 노출할 커스텀 아이콘 */
    icon?: React.ReactNode;
    /** 다국어 링크 라벨 */
    name: LocalizedLabel;
    /** 링크 오른쪽에 노출할 보조 배지 텍스트 (예: NEW, HOT 등) */
    badge?: string;
    /** 이동할 URL */
    url: string;
    /** 새 창 여부 등을 제어할 타겟 속성. 명시하지 않으면 '_blank' */
    target?: string;
}
/** 사용자 메뉴 안에서 2차로 노출되는 하위 링크 정의 */
interface UserSubLink {
    /** 링크 왼쪽에 노출할 커스텀 아이콘 */
    icon?: React.ReactNode;
    /** 다국어 링크 라벨 */
    name: LocalizedLabel;
    /** 이동할 URL */
    url: string;
    /** 새 창 여부 등을 제어할 타겟 속성 */
    target?: string;
}
/**
 * 사용자 최상위 메뉴 항목 정의.
 * `url`을 지정하면 단일 링크로 동작하며, 지정하지 않으면 `links` 배열을 이용한 인라인 서브 메뉴가 렌더링됩니다.
 */
interface UserMenuLink {
    /** 메뉴에 사용할 커스텀 아이콘 */
    icon?: React.ReactNode;
    /** 다국어 메뉴 라벨 */
    name: LocalizedLabel;
    /** 단일 링크 메뉴로 사용할 경우 이동할 URL */
    url?: string;
    /** 하위 링크 목록 (url이 없을 때 인라인 서브 메뉴로 렌더링) */
    links: UserSubLink[];
}
/**
 * 현재 사용자의 크레딧 상태를 보여주기 위한 데이터.
 * `creditLinks`와 조합하면 충전/사용 내역 등 심화 기능으로 연결할 수 있습니다.
 */
export interface CreditInfo {
    /** 크레딧 이름 라벨 (예: Sound Token) */
    name?: string;
    /** 사용 가능한 크레딧 수 */
    credit: number;
}
/** 로그인한 사용자 정보를 나타냅니다. `null`이면 비로그인 상태로 처리됩니다. */
export interface UserInfo {
    /** 사용자 이름 */
    name: string;
    /** 사용자 이메일 */
    email: string;
    /** 사용자 프로필 페이지 URL */
    profileUrl?: string;
    /** 프로필 링크 버튼의 타겟 속성 */
    profileUrlTarget?: string;
}
/**
 * GNB 사이드 영역에서 사용하는 속성 집합입니다.
 * 로그인 영역, 언어/테마 전환, 패밀리 서비스 링크 등 부가 기능을 컨트롤합니다.
 */
interface GnbAsideProps {
    /** 사이드 섹션에만 적용할 사용자 정의 클래스명 */
    className?: string;
    notificationSlot?: React.ReactNode;
    /** 지원되는 언어 목록 */
    supportedLanguages?: Language[];
    /** 현재 선택된 언어 (기본값: 'ko'). 메뉴 라벨 번역에 사용됩니다. */
    language?: Language;
    /** 언어 선택기 표시 여부 (기본값: true). 글로벌 진출 서비스가 아니면 숨길 수 있습니다. */
    showLanguageSelector?: boolean;
    /** 테마 설정 */
    theme?: ThemeConfig;
    /** 로그인 사용자 정보. `null`이면 로그인 CTA 버튼이 노출됩니다. */
    user: UserInfo | null;
    /** 크레딧 정보 (null이면 크레딧 메뉴 숨김) */
    credits?: CreditInfo | null;
    /** 크레딧 메뉴 링크 목록 */
    creditLinks?: CreditMenuLink[] | null;
    /** 사용자 메뉴 링크 목록 */
    userLinks?: UserMenuLink[];
    /** 패밀리 서비스 링크 및 구분선 목록 */
    familyLinks?: FamilyItem[];
    /** 언어 변경 콜백. 언어 버튼에서 호출됩니다. */
    onChangeLanguage?: (language: Language) => void;
    /** 로그인 버튼 클릭 콜백 */
    onClickLogin?: () => void;
    /** 로그아웃 버튼 클릭 콜백 */
    onClickLogout?: () => void;
    /** 로그인 버튼의 `data-gtm-id` attribute로 설정할 GTM Tracking 식별자 */
    loginGtmId?: string;
}
export declare const COLLISION_PADDING_RIGHT: {
    readonly right: 20;
};
export declare const COLLISION_PADDING_SIDE: {
    readonly left: 20;
    readonly right: 20;
};
export declare const MENU_STYLE: {
    readonly minWidth: 200;
};
export declare const SUBMENU_STYLE: {
    readonly minWidth: 160;
};
export declare const DEFAULT_THEME_CONFIG: {
    value: "light";
    enabled: true;
};
declare const GnbAside: {
    ({ className, notificationSlot, supportedLanguages, language, showLanguageSelector, theme, user, credits, creditLinks, userLinks, familyLinks, onChangeLanguage, onClickLogin, onClickLogout, loginGtmId, ...props }: React.ComponentPropsWithRef<"div"> & GnbAsideProps): React.JSX.Element;
    displayName: string;
};
export type { CreditMenuLink, FamilyItem, FamilyMenuLink, FamilyMenuSeparator, GnbAsideProps, ThemeConfig, UserMenuLink, };
export { CreditSection } from './CreditSection';
export { LangSection } from './LangSection';
export { LinksSection } from './LinksSection';
export { UserSection } from './UserSection';
export { GnbAside };
//# sourceMappingURL=Aside.d.ts.map