import * as _angular_core from '@angular/core';
import { InjectionToken } from '@angular/core';
import * as i1$1 from '@angular/common';
import * as i1 from '@angular/router';
import { Params } from '@angular/router';
import { SdStorage, SdStorageService } from '@sdcorejs/angular/services';
import * as _sdcorejs_angular_modules_layout from '@sdcorejs/angular/modules/layout';
import { MaybeAsync } from '@sdcorejs/utils/models';

declare class HomeRoutingModule {
    static ɵfac: _angular_core.ɵɵFactoryDeclaration<HomeRoutingModule, never>;
    static ɵmod: _angular_core.ɵɵNgModuleDeclaration<HomeRoutingModule, never, [typeof i1.RouterModule], [typeof i1.RouterModule]>;
    static ɵinj: _angular_core.ɵɵInjectorDeclaration<HomeRoutingModule>;
}

declare class HomeModule {
    static ɵfac: _angular_core.ɵɵFactoryDeclaration<HomeModule, never>;
    static ɵmod: _angular_core.ɵɵNgModuleDeclaration<HomeModule, never, [typeof i1$1.CommonModule, typeof HomeRoutingModule], never>;
    static ɵinj: _angular_core.ɵɵInjectorDeclaration<HomeModule>;
}

declare class NotFoundModule {
    static ɵfac: _angular_core.ɵɵFactoryDeclaration<NotFoundModule, never>;
    static ɵmod: _angular_core.ɵɵNgModuleDeclaration<NotFoundModule, never, [typeof i1$1.CommonModule, typeof i1.RouterModule], never>;
    static ɵinj: _angular_core.ɵɵInjectorDeclaration<NotFoundModule>;
}

declare class ForbiddenModule {
    static ɵfac: _angular_core.ɵɵFactoryDeclaration<ForbiddenModule, never>;
    static ɵmod: _angular_core.ɵɵNgModuleDeclaration<ForbiddenModule, never, [typeof i1$1.CommonModule, typeof i1.RouterModule], never>;
    static ɵinj: _angular_core.ɵɵInjectorDeclaration<ForbiddenModule>;
}

type SdLayoutMenu = SdLayoutRootMenu | SdLayoutChildrenMenu;
type Menus = SdLayoutMenu[];
interface SdLayoutRootMenu {
    id?: string;
    path: string;
    queryParams?: Params;
    icon?: string;
    iconUrl?: string;
    title: string;
    permissionKey?: string;
    permission: string | string[] | boolean | (() => boolean);
    level?: number;
    tooltipTitle?: string;
}
interface SdLayoutChildrenMenu {
    id?: string;
    icon?: string;
    iconUrl?: string;
    title?: string;
    children?: (SdLayoutRootMenu | SdLayoutChildrenMenu)[];
    level?: number;
    tooltipTitle?: string;
}

declare class SdLayoutStorageService {
    private sdStorageService;
    isShowSidebar: SdStorage<boolean>;
    menuLockStatus: SdStorage<boolean>;
    lastActiveMenuGroupId: SdStorage<string>;
    pinnedMenuGroup: SdStorage<SdLayoutChildrenMenu>;
    constructor(sdStorageService: SdStorageService);
    static ɵfac: _angular_core.ɵɵFactoryDeclaration<SdLayoutStorageService, never>;
    static ɵprov: _angular_core.ɵɵInjectableDeclaration<SdLayoutStorageService>;
}

interface ISdLayoutConfiguration {
    homeUrl?: string;
    sidebar: ISdSidebarConfiguration | (() => MaybeAsync<ISdSidebarConfiguration>);
    userInfo: SdLayoutUserInfo | (() => MaybeAsync<SdLayoutUserInfo>);
    signout: () => void | Promise<void>;
    changePassword?: () => void | Promise<void>;
}
interface SdLayoutUserInfo {
    /**
     * Tên đăng nhập hoặc tên định danh của người dùng.
     * Thường dùng làm định danh rút gọn hoặc fallback hiển thị nếu user chưa cập nhật fullName.
     */
    username?: string;
    /**
     * Địa chỉ thư điện tử của người dùng.
     * Thường được hiển thị bên dưới tên người dùng trong popup/menu thông tin tài khoản.
     */
    email?: string;
    /**
     * Họ và tên đầy đủ của người dùng.
     * Đây là thông tin được ưu tiên hiển thị chính trên giao diện (VD: góc phải màn hình, lời chào).
     */
    fullName?: string;
    /**
     * Hình đại diện (avatar) của người dùng.
     * Nếu để trống, hệ thống sẽ tự động lấy ký tự đầu tiên của fullName hoặc username để tạo avatar mặc định.
     * Hỗ trợ các định dạng: URL (http/https), chuỗi base64 (data:image), hoặc đường dẫn nội bộ.
     */
    avatar?: string;
}
type ISdSidebarConfiguration = SidebarConfigurationV1;
interface SidebarConfigurationV1 {
    version: 1;
    /**
     * Màu brand chính.
     * Nên sử dụng mã màu #HEX hoặc rgb để hỗ trợ opacity khi hover.
     * Ví dụ: #1890ff, rgb(24,144,255)
     */
    brandColor?: string;
    /**
     * Màu brand nhạt (light).
     * Dùng cho background, hover nhẹ.
     */
    brandLightColor?: string;
    /**
     * URL logo hiển thị ở sidebar.
     * Nên đặt trong thư mục public hoặc dùng URL CDN.
     */
    logoUrl?: string;
    /**
     * Title mặc định của hệ thống.
     * Nếu menu không truyền title thì sẽ dùng giá trị này.
     * @default "Back Office"
     */
    defaultTitle?: string;
    /**
     * Cấu hình tính năng ghim menu.
     * - `enabled`: bật/tắt tính năng ghim.
     * Hệ thống mặc định là false
     */
    pin?: {
        enabled?: boolean;
    };
}
declare const SD_LAYOUT_CONFIGURATION: InjectionToken<ISdLayoutConfiguration>;

declare class SdLayoutService {
    #private;
    userInfo: _angular_core.WritableSignal<SdLayoutUserInfo | undefined>;
    sidebar: _angular_core.WritableSignal<_sdcorejs_angular_modules_layout.SidebarConfigurationV1 | undefined>;
    constructor();
    static ɵfac: _angular_core.ɵɵFactoryDeclaration<SdLayoutService, never>;
    static ɵprov: _angular_core.ɵɵInjectableDeclaration<SdLayoutService>;
}

declare class SdPageComponent {
    private el;
    title: _angular_core.InputSignal<string>;
    description: _angular_core.InputSignal<string>;
    noHeader: _angular_core.InputSignalWithTransform<boolean, unknown>;
    constructor();
    static ɵfac: _angular_core.ɵɵFactoryDeclaration<SdPageComponent, never>;
    static ɵcmp: _angular_core.ɵɵComponentDeclaration<SdPageComponent, "sd-page", never, { "title": { "alias": "title"; "required": false; "isSignal": true; }; "description": { "alias": "description"; "required": false; "isSignal": true; }; "noHeader": { "alias": "noHeader"; "required": false; "isSignal": true; }; }, {}, never, ["[headerLeft]", "[headerRight]", "*"], true, never>;
}

declare class SdLayoutComponent {
    #private;
    menusInput: _angular_core.InputSignal<SdLayoutMenu[]>;
    menus: _angular_core.Signal<SdLayoutMenu[]>;
    userInfo: _angular_core.WritableSignal<_sdcorejs_angular_modules_layout.SdLayoutUserInfo | undefined>;
    sidebar: _angular_core.WritableSignal<_sdcorejs_angular_modules_layout.SidebarConfigurationV1 | undefined>;
    isMobileOrTablet: _angular_core.WritableSignal<boolean>;
    static ɵfac: _angular_core.ɵɵFactoryDeclaration<SdLayoutComponent, never>;
    static ɵcmp: _angular_core.ɵɵComponentDeclaration<SdLayoutComponent, "sd-layout", never, { "menusInput": { "alias": "menus"; "required": false; "isSignal": true; }; }, {}, never, ["*"], true, never>;
}

declare class SidebarMobileV1Component {
    #private;
    menus: _angular_core.InputSignal<SdLayoutMenu[]>;
    userInfo: _angular_core.InputSignal<SdLayoutUserInfo>;
    sidebar: _angular_core.InputSignal<SidebarConfigurationV1>;
    isShowSidebar: _angular_core.WritableSignal<boolean>;
    titleMenuGroup: _angular_core.WritableSignal<string | undefined>;
    constructor();
    openSidebar: () => void;
    onToggle: (_data: boolean | null) => void;
    onPopupOfSideBarOpened: () => void;
    onPopupOfSideBarClosed: () => void;
    onExpandSideBar: () => void;
    onMouseleaveSideBar: () => void;
    onTitleMenuGroupChanged: (title: string | undefined) => void;
    static ɵfac: _angular_core.ɵɵFactoryDeclaration<SidebarMobileV1Component, never>;
    static ɵcmp: _angular_core.ɵɵComponentDeclaration<SidebarMobileV1Component, "sidebar-mobile-v1", never, { "menus": { "alias": "menus"; "required": false; "isSignal": true; }; "userInfo": { "alias": "userInfo"; "required": true; "isSignal": true; }; "sidebar": { "alias": "sidebar"; "required": true; "isSignal": true; }; }, {}, never, ["*"], true, never>;
}

declare class SidebarMobileOverlayComponent {
    #private;
    isShowSidebar: _angular_core.InputSignal<boolean>;
    menus: _angular_core.InputSignal<SdLayoutMenu[]>;
    userInfo: _angular_core.InputSignal<SdLayoutUserInfo>;
    sidebar: _angular_core.InputSignal<SidebarConfigurationV1>;
    showSideBar: _angular_core.OutputEmitterRef<boolean | null>;
    expandSideBar: _angular_core.OutputEmitterRef<void>;
    popupUserMenuOpened: _angular_core.OutputEmitterRef<void>;
    popupUserMenuClosed: _angular_core.OutputEmitterRef<void>;
    titleMenuGroupChanged: _angular_core.OutputEmitterRef<string | undefined>;
    titleMenuGroup: _angular_core.WritableSignal<string | undefined>;
    currentPath: _angular_core.WritableSignal<string>;
    expandedMobileGroups: _angular_core.WritableSignal<Set<string>>;
    constructor();
    toggleMobileGroup(groupId: string | undefined): void;
    isExpanded(groupId: string | undefined): boolean;
    navigate(args: {
        path?: string;
        queryParams?: Params;
    }): void;
    onClose(): void;
    hasChildren(menu: SdLayoutMenu): boolean;
    getChildren(menu: SdLayoutMenu): SdLayoutMenu[];
    getPath(menu: SdLayoutMenu): string | undefined;
    getQueryParams(menu: SdLayoutMenu): Params;
    onUserMenuOpened: () => void;
    onUserMenuClosed: () => void;
    static ɵfac: _angular_core.ɵɵFactoryDeclaration<SidebarMobileOverlayComponent, never>;
    static ɵcmp: _angular_core.ɵɵComponentDeclaration<SidebarMobileOverlayComponent, "sd-sidebar-mobile-overlay", never, { "isShowSidebar": { "alias": "isShowSidebar"; "required": false; "isSignal": true; }; "menus": { "alias": "menus"; "required": true; "isSignal": true; }; "userInfo": { "alias": "userInfo"; "required": true; "isSignal": true; }; "sidebar": { "alias": "sidebar"; "required": true; "isSignal": true; }; }, { "showSideBar": "showSideBar"; "expandSideBar": "expandSideBar"; "popupUserMenuOpened": "popupUserMenuOpened"; "popupUserMenuClosed": "popupUserMenuClosed"; "titleMenuGroupChanged": "titleMenuGroupChanged"; }, never, never, true, never>;
}

declare class SdLayoutModule {
    static ɵfac: _angular_core.ɵɵFactoryDeclaration<SdLayoutModule, never>;
    static ɵmod: _angular_core.ɵɵNgModuleDeclaration<SdLayoutModule, never, [typeof i1.RouterModule], never>;
    static ɵinj: _angular_core.ɵɵInjectorDeclaration<SdLayoutModule>;
}

export { ForbiddenModule, HomeModule, NotFoundModule, SD_LAYOUT_CONFIGURATION, SdLayoutComponent, SdLayoutModule, SdLayoutService, SdLayoutStorageService, SdPageComponent, SidebarMobileOverlayComponent, SidebarMobileV1Component };
export type { ISdLayoutConfiguration, ISdSidebarConfiguration, Menus, SdLayoutChildrenMenu, SdLayoutMenu, SdLayoutRootMenu, SdLayoutUserInfo, SidebarConfigurationV1 };
