platform-core-ng 21.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +73 -0
- package/fesm2022/platform-core-ng.mjs +7139 -0
- package/fesm2022/platform-core-ng.mjs.map +1 -0
- package/package.json +20 -0
- package/styles/base/_breakpoints.scss +1 -0
- package/styles/base/_interaction-mixins.scss +37 -0
- package/styles/base/_tokens.scss +255 -0
- package/styles/base/reset.scss +66 -0
- package/styles/base/scrollbar.scss +22 -0
- package/styles/base/theme.scss +424 -0
- package/styles/base/typography.scss +50 -0
- package/styles/components/index.scss +7 -0
- package/styles/components/mail-client.scss +2165 -0
- package/styles/components/master-detail.scss +137 -0
- package/styles/components/mobile-list-directives.scss +355 -0
- package/styles/control/button.scss +565 -0
- package/styles/control/switch.scss +85 -0
- package/styles/data/table/base.scss +31 -0
- package/styles/data/table/pattern-admin.scss +136 -0
- package/styles/data/table/pattern-screen.scss +36 -0
- package/styles/data/table.scss +3 -0
- package/styles/form/checkbox.scss +97 -0
- package/styles/form/input.scss +201 -0
- package/styles/form/number.scss +17 -0
- package/styles/form/radio.scss +84 -0
- package/styles/form/range.scss +118 -0
- package/styles/form/select.scss +50 -0
- package/styles/form/textarea.scss +65 -0
- package/styles/foundation.scss +16 -0
- package/styles/index.scss +1 -0
- package/styles/profiles/b/index.scss +4 -0
- package/styles/profiles/b/layout.scss +88 -0
- package/styles/profiles/b/theme.scss +44 -0
- package/styles/profiles/screen/index.scss +3 -0
- package/styles/profiles/screen/layout.scss +125 -0
- package/styles/profiles/screen/theme.scss +131 -0
- package/types/platform-core-ng.d.ts +3217 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"platform-core-ng.mjs","sources":["../../src/core/adapter/ElectronRequest.ts","../../src/core/auth/auth.tokens.ts","../../src/core/auth/auth.guards.ts","../../src/core/services/loading.store.ts","../../src/core/base/base-list.component.ts","../../src/core/token/message.token.ts","../../src/core/handlers/global-error-handler.ts","../../src/core/handlers/throw-exception.ts","../../src/core/token/http-config.token.ts","../../src/core/token/http-auth.token.ts","../../src/core/token/http-unauthorized-handler.token.ts","../../src/core/interceptors/response-interceptor.ts","../../src/core/interceptors/request-interceptor.ts","../../src/core/models/outlets.ts","../../src/core/runtime/app-runtime.token.ts","../../src/core/runtime/provide-runtime-context.ts","../../src/core/runtime/runtime.service.ts","../../src/core/permission/permission.service.ts","../../src/core/permission/has-permission.directive.ts","../../src/layouts/shell-layout/shell-config.ts","../../src/layouts/shell-layout/layout-parts/app-shell/app-shell.ts","../../src/layouts/shell-layout/layout-parts/app-shell/app-shell.html","../../src/layouts/shell-layout/layout-parts/content/content.ts","../../src/layouts/shell-layout/layout-parts/content/content.html","../../src/layouts/shell-layout/layout-parts/footer/footer.ts","../../src/layouts/shell-layout/layout-parts/footer/footer.html","../../src/shared/components/s-notification-center/s-notification-center.ts","../../src/shared/components/s-notification-center/s-notification-center.html","../../src/shared/directives/flex-column-fill.directive.ts","../../src/shared/directives/loading-table.directive.ts","../../src/shared/directives/platform-input.directive.ts","../../src/layouts/shell-layout/layout-parts/header/header.ts","../../src/layouts/shell-layout/layout-parts/header/header.html","../../src/layouts/shell-layout/layout-parts/sidebar/sidebar.ts","../../src/layouts/shell-layout/layout-parts/sidebar/sidebar.html","../../src/layouts/shell-layout/layout-parts/footer/empty-footer.ts","../../src/layouts/shell-layout/layout-parts/header/minimal-header.ts","../../src/layouts/shell-layout/layout-parts/header/top-nav-header.ts","../../src/layouts/shell-layout/layout-parts/header/top-nav-header.html","../../src/layouts/shell-layout/layout-parts/sidebar/empty-sidebar.ts","../../src/layouts/shell-layout/layout-modes/sidebar-header/sidebar-header-layout.ts","../../src/layouts/shell-layout/layout-modes/sidebar-header/sidebar-header-layout.html","../../src/layouts/shell-layout/layout-modes/top-nav/top-nav-layout.ts","../../src/layouts/shell-layout/layout-modes/top-nav/top-nav-layout.html","../../src/layouts/shell-layout/layout-modes/shell-layout.ts","../../src/layouts/shell-layout/index.ts","../../src/shared/components/s-action-menu/s-action-menu.ts","../../src/shared/components/s-action-menu/s-action-menu.html","../../src/shared/components/s-avatar/s-avatar.ts","../../src/shared/components/s-avatar/s-avatar.html","../../src/shared/components/s-avatar/s-avatar-group.ts","../../src/shared/components/s-avatar/s-avatar-group.html","../../src/shared/components/s-badge/s-badge.ts","../../src/shared/components/s-badge/s-badge.html","../../src/shared/components/m-tabs/m-tabs.ts","../../src/shared/components/m-tabs/m-tabs.html","../../src/shared/components/m-bottom-nav/m-bottom-nav.ts","../../src/shared/components/m-bottom-nav/m-bottom-nav.html","../../src/shared/components/s-breadcrumb/s-breadcrumb.ts","../../src/shared/components/s-breadcrumb/s-breadcrumb.html","../../src/shared/components/s-bs-base-list/s-bs-base-list.ts","../../src/shared/components/s-bs-base-list/s-bs-base-list.html","../../src/shared/components/s-overlay/s-overlay-portal-host.ts","../../src/shared/components/s-bs-message/s-bs-message-container.ts","../../src/shared/components/s-bs-message/s-bs-message-container.html","../../src/shared/components/s-bs-message/s-bs-message.types.ts","../../src/shared/components/s-bs-message/s-bs-message.ts","../../src/shared/components/s-bs-select/s-bs-select.ts","../../src/shared/components/s-bs-select/s-bs-select.html","../../src/shared/components/s-card/s-card.ts","../../src/shared/components/s-card/s-card.html","../../src/shared/components/s-date-picker/s-date-picker.ts","../../src/shared/components/s-date-picker/s-date-picker.html","../../src/shared/components/s-drawer-form/s-drawer-form.ts","../../src/shared/components/s-drawer-form/s-drawer-form.module.ts","../../src/shared/components/s-emoji-picker/s-emoji-picker.ts","../../src/shared/components/s-emoji-picker/s-emoji-picker.html","../../src/shared/components/s-filter-summary/s-filter-summary.ts","../../src/shared/components/s-filter-summary/s-filter-summary.html","../../src/shared/components/s-file-upload-button/s-file-upload-button.ts","../../src/shared/components/s-file-upload-button/s-file-upload-button.html","../../src/shared/components/m-header/m-header.ts","../../src/shared/components/m-header/m-header.html","../../src/shared/components/s-list-page-layout/directives/s-list-page-layout-slot.directives.ts","../../src/shared/components/s-list-page-layout/directives/s-list-page-layout-filter.directives.ts","../../src/shared/components/s-list-page-layout/directives/s-list-page-layout-table.directives.ts","../../src/shared/components/s-list-page-layout/directives/s-list-page-layout-misc.directives.ts","../../src/shared/components/s-list-page-layout/s-list-page-layout.ts","../../src/shared/components/s-list-page-layout/s-list-page-layout.html","../../src/shared/components/s-list-search-panel/s-list-search-panel.ts","../../src/shared/components/s-list-search-panel/s-list-search-panel.html","../../src/shared/components/s-login-page/s-login-page.ts","../../src/shared/components/s-login-page/s-login-page.html","../../src/shared/components/s-menu/s-menu.ts","../../src/shared/components/s-menu/s-menu.html","../../src/shared/components/s-merchant-card/s-merchant-card.ts","../../src/shared/components/s-merchant-card/s-merchant-card.html","../../src/shared/components/m-alphabet/m-alphabet.ts","../../src/shared/components/m-alphabet/m-alphabet.html","../../src/shared/components/m-list/m-item-directives.ts","../../src/shared/components/m-list/m-item-slots.ts","../../src/shared/components/m-list/m-item.ts","../../src/shared/components/m-list/m-item.html","../../src/shared/components/m-list/m-list.ts","../../src/shared/components/m-list/m-list.html","../../src/shared/components/m-page-layout/m-page-layout.ts","../../src/shared/components/m-page-layout/m-page-layout.html","../../src/shared/components/m-page/m-page.ts","../../src/shared/components/m-page/m-page.html","../../src/shared/components/p-page/p-page.ts","../../src/shared/components/p-page/p-page.html","../../src/shared/components/m-person-card-layer/m-person-card-layer.ts","../../src/shared/components/m-person-card-layer/person-card-mobile-layer.html","../../src/shared/components/m-person-card-layer/person-card-desktop-layer.html","../../src/shared/components/m-product-shell/m-product-shell.ts","../../src/shared/components/m-product-shell/m-product-shell.html","../../src/shared/components/s-pagination/s-pagination.ts","../../src/shared/components/s-pagination/s-pagination.html","../../src/shared/components/m-rail-nav/m-rail-nav.ts","../../src/shared/components/m-rail-nav/m-rail-nav.html","../../src/shared/components/s-route-placeholder-page/s-route-placeholder-page.ts","../../src/shared/components/s-section-nav/s-section-nav.ts","../../src/shared/components/s-section-nav/s-section-nav.html","../../src/shared/components/s-segmented/s-segmented.ts","../../src/shared/components/s-segmented/s-segmented.html","../../src/shared/components/s-search/s-search.ts","../../src/shared/components/s-search/s-search.html","../../src/shared/components/m-search-bar/m-search-bar.ts","../../src/shared/components/m-search-bar/m-search-bar.html","../../src/shared/components/s-status-dot/s-status-dot.ts","../../src/shared/components/s-status-dot/s-status-dot.html","../../src/shared/components/s-steps/s-steps.ts","../../src/shared/components/s-steps/s-steps.html","../../src/shared/components/s-tabs/s-tabs.ts","../../src/shared/components/s-tabs/s-tabs.html","../../src/shared/components/s-tag/s-tag.ts","../../src/shared/components/s-tag/s-tag.html","../../src/shared/components/s-timeline/s-timeline.ts","../../src/shared/components/s-timeline/s-timeline.html","../../src/shared/components/s-tree/s-tree.ts","../../src/shared/components/s-tree/s-tree.html","../../src/shared/components/s-tree-select/s-tree-select.ts","../../src/shared/components/s-tree-select/s-tree-select.html","../../src/shared/components/s-upload/s-upload.ts","../../src/shared/components/s-upload/s-upload.html","../../src/shared/components/s-dialog/s-dialog-container.ref.ts","../../src/shared/components/s-dialog/s-dialog-container.token.ts","../../src/shared/components/s-dialog/delete-confirm-dialog.component.ts","../../src/shared/components/s-dialog/delete-confirm-dialog.component.html","../../src/shared/components/s-dialog/s-dialog-container.component.ts","../../src/shared/components/s-dialog/s-dialog-container.component.html","../../src/shared/components/s-dialog/s-dialog-container.service.ts","../../src/shared/components/s-side-drawer/s-side-drawer.ref.ts","../../src/shared/components/s-side-drawer/s-side-drawer-container.component.ts","../../src/shared/components/s-side-drawer/s-side-drawer-container.component.html","../../src/shared/components/s-side-drawer/s-side-drawer.token.ts","../../src/shared/components/s-side-drawer/s-side-drawer.service.ts","../../src/shared/pipes/enum-pice-pipe.ts","../../src/public-api.ts","../../src/platform-core-ng.ts"],"sourcesContent":["import { from, Observable } from 'rxjs';\n\ninterface ElectronRequestBridge {\n get<T>(url: string, option: string): Promise<T>;\n post<T>(url: string, data: unknown): Promise<T>;\n delete<T>(url: string, option: string): Promise<T>;\n put<T>(url: string, data: unknown): Promise<T>;\n}\n\ndeclare global {\n interface Window {\n electronRequest: ElectronRequestBridge;\n }\n}\n\r\n/**\r\n * @description 用于在 Electron 环境中发送IPC请求\r\n * @param url 请求 URL\r\n * @param option 请求选项\r\n * @author Chen Yu\r\n * @returns 响应数据\r\n */\r\nexport class ElectronRequest {\r\n /**\r\n * 发送 GET 请求\r\n * @param url 请求 URL\r\n * @param option 请求选项\r\n * @returns 响应数据\r\n */\r\n get<T>(url: string, option: string): Observable<T> {\n return from(window.electronRequest.get<T>(url, option));\n }\n\r\n /**\r\n * 发送 POST 请求\r\n * @param url 请求 URL\r\n * @param data 请求数据\r\n * @returns 响应数据\r\n */\r\n post<T>(url: string, data: unknown): Observable<T> {\n return from(window.electronRequest.post<T>(url, data));\n }\n\r\n /**\r\n * 发送 DELETE 请求\r\n * @param url 请求 URL\r\n * @param option 请求选项\r\n * @returns 响应数据\r\n */\r\n delete<T>(url: string, option: string): Observable<T> {\n return from(window.electronRequest.delete<T>(url, option));\n }\n\r\n /**\r\n * 发送 PUT 请求\r\n * @param url 请求 URL\r\n * @param data 请求数据\r\n * @returns 响应数据\r\n */\r\n put<T>(url: string, data: unknown): Observable<T> {\n return from(window.electronRequest.put<T>(url, data));\n }\n}\n","import { InjectionToken, Provider } from '@angular/core';\n\nexport type AuthenticatedStateGetter = () => boolean;\n\nexport interface CoreAuthGuardConfig {\n readonly loginPath?: string;\n readonly authenticatedRedirectPath?: string;\n}\n\nexport const AUTHENTICATED_STATE_GETTER = new InjectionToken<AuthenticatedStateGetter>(\n 'AUTHENTICATED_STATE_GETTER',\n);\n\nexport const CORE_AUTH_GUARD_CONFIG = new InjectionToken<CoreAuthGuardConfig>(\n 'CORE_AUTH_GUARD_CONFIG',\n {\n factory: () => ({\n authenticatedRedirectPath: '/',\n loginPath: '/login',\n }),\n },\n);\n\nexport function provideAuthenticatedStateGetter(\n getterFactory: () => AuthenticatedStateGetter,\n): Provider {\n return {\n provide: AUTHENTICATED_STATE_GETTER,\n useFactory: getterFactory,\n };\n}\n\nexport function provideCoreAuthGuardConfig(config: CoreAuthGuardConfig): Provider {\n return {\n provide: CORE_AUTH_GUARD_CONFIG,\n useValue: config,\n };\n}\n","import { inject } from '@angular/core';\nimport { CanActivateFn, Router } from '@angular/router';\nimport { AUTHENTICATED_STATE_GETTER, CORE_AUTH_GUARD_CONFIG } from './auth.tokens';\n\nexport const coreAuthGuard: CanActivateFn = (_route, state) => {\n const isAuthenticated = inject(AUTHENTICATED_STATE_GETTER);\n const config = inject(CORE_AUTH_GUARD_CONFIG);\n const router = inject(Router);\n\n if (isAuthenticated()) {\n return true;\n }\n\n return router.createUrlTree([config.loginPath ?? '/login'], {\n queryParams: { redirect: state.url },\n });\n};\n\nexport const coreGuestOnlyGuard: CanActivateFn = (route) => {\n const isAuthenticated = inject(AUTHENTICATED_STATE_GETTER);\n const config = inject(CORE_AUTH_GUARD_CONFIG);\n const router = inject(Router);\n\n if (!isAuthenticated()) {\n return true;\n }\n\n const redirect = route.queryParamMap.get('redirect') ?? config.authenticatedRedirectPath ?? '/';\n return router.createUrlTree([redirect]);\n};\n","import { signal, computed, WritableSignal } from '@angular/core';\r\n/**\r\n * 加载状态存储\r\n * @author Chen Yu\r\n * @version 1.0.0\r\n */\r\nconst requestCount: WritableSignal<number> = signal<number>(0);\r\n/**\r\n * 是否正在加载\r\n * @author Chen Yu\r\n * @version 1.0.0\r\n */\r\nexport const isLoading = computed(() => requestCount() > 0);\r\n\r\n/**\r\n * @description 每个请求开始 -> 计数 +1\r\n * @author Chen Yu\r\n * @version 1.0.0\r\n */\r\nexport function increaseLoading() {\r\n requestCount.set(requestCount() + 1);\r\n}\r\n/**\r\n * @description 每个请求结束 -> 计数 -1\r\n * @author Chen Yu\r\n * @version 1.0.0\r\n */\r\nexport function decreaseLoading() {\r\n requestCount.set(Math.max(0, requestCount() - 1));\r\n}\r\n","import { ChangeDetectorRef, Directive, OnInit, Signal, computed, signal, WritableSignal } from '@angular/core';\nimport {\n BaseCrudService,\n BaseListEntity,\n PageRequestDTO,\n PaginationResponse,\n WithSelected,\n} from 'platform-core-ts';\nimport { isLoading } from '../services/loading.store';\n\n@Directive()\nexport abstract class BaseListComponent<\n T extends BaseListEntity,\n S extends BaseCrudService<T>,\n> implements OnInit {\n protected readonly isLoading: Signal<boolean> = isLoading;\n\n paginationResponse: WritableSignal<PaginationResponse<T>> = signal(\n new PaginationResponse<T>([], 0, 1, 10),\n );\n\n private readonly pageRequestRevision = signal(0);\n private pageRequestValue: PageRequestDTO = new PageRequestDTO();\n\n get pageRequestDTO(): PageRequestDTO {\n this.pageRequestRevision();\n return this.pageRequestValue;\n }\n\n set pageRequestDTO(value: PageRequestDTO) {\n this.pageRequestValue = value;\n this.markPageRequestChanged();\n }\n\n checkedAll = false;\n indeterminate = false;\n\n protected readonly rows = computed(() => this.paginationResponse().items);\n protected readonly pagedRows = this.rows;\n protected readonly totalItems = computed(() => this.paginationResponse().totalItems);\n protected readonly currentPage = computed(() => this.pageRequestDTO.pageNum);\n protected readonly pageSize = computed(() => this.pageRequestDTO.pageSize);\n protected readonly selectedItems = computed(() => this.rows().filter((item) => !!item.checked));\n protected readonly hasSelection = computed(() => this.selectedItems().length > 0);\n\n protected constructor(\n protected service: S,\n protected cd: ChangeDetectorRef,\n ) {}\n\n async ngOnInit(): Promise<void> {\n await this.loadData();\n }\n\n protected abstract fetchList(pageRequestDTO: PageRequestDTO): Promise<PaginationResponse<T>>;\n\n async loadData(): Promise<void> {\n this.markPageRequestChanged();\n const response = await this.fetchList(this.pageRequestDTO);\n response.items = response.items.map((item) => ({\n ...item,\n checked: !!item.checked,\n }));\n\n this.paginationResponse.set(response);\n this.updateCheckState();\n }\n\n trackByPropertyKey(_index: number, item: T, propertyKey: keyof T): unknown {\n return item ? item[propertyKey] : _index;\n }\n\n onCheckedChange(checked: boolean, _event?: unknown): void {\n this.paginationResponse.update((response) => ({\n ...response,\n items: response.items.map((item) => ({\n ...item,\n checked,\n })),\n }));\n this.updateCheckState();\n }\n\n onRowCheckedChange(item: T, checked: boolean): void {\n this.paginationResponse.update((response) => ({\n ...response,\n items: response.items.map((current) => (current === item ? { ...current, checked } : current)),\n }));\n this.updateCheckState();\n }\n\n protected getSelectedItem(): T | undefined {\n return this.selectedItems()[0];\n }\n\n protected getSelectedItemOr(item?: T): T | undefined {\n return item ?? this.getSelectedItem();\n }\n\n protected getSelectedIds<TKey extends keyof T>(propertyKey: TKey): Array<NonNullable<T[TKey]>> {\n return this.selectedItems()\n .map((item) => item[propertyKey])\n .filter((value): value is NonNullable<T[TKey]> => value !== undefined && value !== null);\n }\n\n protected buildSelectedIds<TKey extends keyof T>(\n propertyKey: TKey,\n ): Signal<Array<NonNullable<T[TKey]>>> {\n return computed(() => this.getSelectedIds(propertyKey));\n }\n\n protected buildCountSummary(unit: string, prefix = '筛选出 '): Signal<string> {\n return computed(() => `${prefix}${this.totalItems()} ${unit}`);\n }\n\n protected async changePage(page: number): Promise<void> {\n this.pageRequestDTO.pageNum = page;\n this.markPageRequestChanged();\n await this.loadData();\n }\n\n protected async changePageSize(size: number): Promise<void> {\n this.pageRequestDTO.pageSize = size;\n this.pageRequestDTO.pageNum = 1;\n this.markPageRequestChanged();\n await this.loadData();\n }\n\n protected async reloadFirstPage(): Promise<void> {\n this.pageRequestDTO.pageNum = 1;\n this.markPageRequestChanged();\n await this.loadData();\n }\n\n protected updateCheckState(): void {\n const items = this.paginationResponse().items;\n if (items.length === 0) {\n this.checkedAll = false;\n this.indeterminate = false;\n return;\n }\n\n const checkedCount = items.filter((item) => item.checked).length;\n this.checkedAll = checkedCount === items.length;\n this.indeterminate = checkedCount > 0 && checkedCount < items.length;\n }\n\n @WithSelected()\n public async deleteSelected(\n ids: number[] = [],\n _list?: T[],\n _propertyKey?: string,\n ): Promise<void> {\n if (!ids.length) {\n ids = this.getSelectedIds('id' as keyof T).filter((id) => typeof id === 'number') as number[];\n }\n\n if (!ids.length) {\n return;\n }\n\n if (this.service.delete) {\n await this.service.delete(ids);\n } else if ((this.service as unknown as { remove?: (values: number[]) => Promise<void> }).remove) {\n await (this.service as unknown as { remove: (values: number[]) => Promise<void> }).remove(ids);\n }\n\n await this.loadData();\n }\n\n protected async resetList(pageRequestDTO: PageRequestDTO = new PageRequestDTO()): Promise<void> {\n this.onCheckedChange(false);\n this.pageRequestDTO = pageRequestDTO;\n await this.loadData();\n }\n\n public async resetSearch(pageRequestDTO: PageRequestDTO = new PageRequestDTO()): Promise<void> {\n await this.resetList(pageRequestDTO);\n }\n\n private markPageRequestChanged(): void {\n this.pageRequestRevision.update((revision) => revision + 1);\n }\n}\n","import { InjectionToken, Type } from '@angular/core';\r\n\r\n/**\r\n * 消息服务\r\n */\r\nexport interface IMessageService {\n error(message: string, title?: string): unknown;\n success?(message: string, title?: string): unknown;\n}\n\r\n/**\r\n * 消息提示key\r\n */\r\nexport const MESSAGE_SERVICE = new InjectionToken<IMessageService>('MESSAGE_SERVICE');\r\n\r\n/**\r\n * 为 platform-core-ng 提供消息服务的适配器。\r\n *\r\n * 将业务项目中的 MessageService 绑定到库内部使用的 MESSAGE_SERVICE 注入 Token,\r\n * 以便在全局错误处理、HTTP 拦截器等场景中复用业务侧的消息提示实现。\r\n *\r\n * 该方法使用 useExisting,不会创建新的实例,而是复用已注册的 MessageService 单例。\r\n *\r\n * @param messageService 业务项目中实现了 IMessageService 的 Angular 服务类\r\n */\r\nexport function provideIMessageService(messageService: Type<IMessageService>) {\r\n return { provide: MESSAGE_SERVICE, useExisting: messageService };\r\n}\r\n","import { ErrorHandler, Injectable, Injector } from '@angular/core';\r\nimport { BusinessException, HttpCustomException, HttpStatusException } from 'platform-core-ts';\r\nimport { IMessageService, MESSAGE_SERVICE } from '../token/message.token';\r\n\r\n@Injectable()\r\nexport class GlobalErrorHandler implements ErrorHandler {\r\n /**\r\n * 全局错误处理服务\r\n * @param injector\r\n */\r\n constructor(private injector: Injector) {}\r\n\r\n /**\r\n * 全局错误处理\r\n * @param error 错误信息\r\n */\r\n handleError(error: unknown): void {\n // 从 DI 容器获取消息服务(由使用方提供)\r\n const messageService = this.injector.get<IMessageService | null>(MESSAGE_SERVICE, null);\n\r\n // 使用方未提供 MESSAGE_SERVICE:降级为 console,避免直接 NullInjectorError\r\n if (!messageService) {\r\n console.error('[GlobalErrorHandler] MESSAGE_SERVICE not provided.', error);\r\n return;\r\n }\r\n\r\n // 捕获业务异常\r\n const errorMessage = getErrorMessage(error);\n\n if (errorMessage.includes('BusinessException') || error instanceof BusinessException) {\n messageService.error(errorMessage);\n return;\r\n }\r\n\r\n // 捕获 http 自定义异常\r\n if (error instanceof HttpCustomException) {\r\n console.error(error);\r\n messageService.error(error.responseMessage);\r\n return;\r\n }\r\n\r\n // 你如果还要处理 HttpStatusException(你原来引入了但没用)\r\n if (error instanceof HttpStatusException) {\r\n // 这里按你 HttpStatusException 的字段自行调整\r\n messageService.error(error.message ?? '请求错误');\r\n console.error(error);\r\n return;\r\n }\r\n\r\n // 保证不阻断控制台输出\r\n messageService.error('未知错误', '请联系管理员');\r\n console.error(error);\r\n }\r\n}\r\n\r\n/**\r\n * 提供全局错误处理服务\r\n * @returns 全局错误处理服务\r\n */\r\nexport function provideGlobalErrorHandler() {\n return { provide: ErrorHandler, useClass: GlobalErrorHandler };\n}\n\nfunction getErrorMessage(error: unknown): string {\n if (error instanceof Error) {\n return error.message;\n }\n\n return String(error ?? '');\n}\n","/**\r\n * 方法装饰器:捕获异常并抛出指定错误类型\r\n * @param ErrorType 要抛出的错误类(例如 Error、TypeError、自定义异常类)\r\n * @param message 可选的自定义错误信息\r\n */\r\ntype DecoratedMethod = (this: unknown, ...args: unknown[]) => unknown;\n\ninterface ErrorWithMetadata extends Error {\n original?: unknown;\n context?: { method: string | symbol };\n}\n\nexport function ThrowException(ErrorType: new (message?: string) => Error, message?: string) {\n return (\r\n _target: object,\n propertyKey: string | symbol,\r\n descriptor: PropertyDescriptor,\r\n ): PropertyDescriptor => {\r\n // 确保装饰器仅用于方法\r\n const originalMethod = descriptor.value as DecoratedMethod;\n // 确保被装饰的是方法\r\n // 替换方法实现\r\n descriptor.value = function (this: unknown, ...args: unknown[]) {\n try {\r\n // 调用原始方法\r\n const result = originalMethod.apply(this, args);\r\n // 支持 async 方法\r\n if (result instanceof Promise) {\r\n return result.catch((e) => {\r\n throw buildError(ErrorType, message, e, propertyKey);\r\n });\r\n }\r\n // 同步方法直接返回结果\r\n return result;\r\n } catch (e) {\r\n // 捕获异常并抛出指定错误类型\r\n throw buildError(ErrorType, message, e, propertyKey);\r\n }\r\n };\r\n\r\n return descriptor;\r\n };\r\n}\r\n\r\n/**\r\n * 构建新的错误对象,并附加原始异常信息\r\n */\r\nfunction buildError(\r\n ErrorType: new (message?: string) => Error,\r\n message: string | undefined,\r\n originalError: unknown,\r\n propertyKey?: string | symbol,\r\n): Error {\r\n // 构建最终错误消息\r\n const finalMessage =\r\n message ??\r\n (originalError instanceof Error ? originalError.message : String(originalError ?? '未知错误'));\r\n // 创建新的错误实例\r\n const err = new ErrorType(finalMessage) as ErrorWithMetadata;\n // 附加原始异常信息\r\n err.original = originalError;\n // 可选:附加上下文信息(方法名)\r\n if (propertyKey) {\r\n err.context = { method: propertyKey };\n }\r\n // 保留原始堆栈信息(如果可能)\r\n if (originalError instanceof Error && originalError.stack) {\r\n err.stack += '\\nCaused by: ' + originalError.stack;\r\n }\r\n return err;\r\n}\r\n","import { HttpContext, HttpContextToken } from '@angular/common/http';\nimport { InjectionToken, type Provider } from '@angular/core';\n\nexport class HttpConfig {\n baseUrl: string = '';\n clientId: string | null = null;\n\n constructor(appBaseApi: string = '', clientId: string | null = null) {\n this.baseUrl = appBaseApi;\n this.clientId = clientId;\n }\n}\n\r\nexport const HTTP_CONFIG = new InjectionToken<HttpConfig>('HTTP_CONFIG');\r\n\r\n/**\r\n * 设置请求参数\r\n * @param httpConfig\r\n */\r\nexport function provideHttpConfig(httpConfig: HttpConfig) {\n return {\n provide: HTTP_CONFIG,\n useValue: {\n baseUrl: httpConfig.baseUrl,\n clientId: httpConfig.clientId,\n },\n };\n}\n\nexport type HttpSuccessMessageMethod = 'POST' | 'PUT' | 'PATCH' | 'DELETE';\n\nexport interface HttpSuccessMessageOptions {\n message?: string;\n title?: string;\n enabled?: boolean;\n}\n\nexport type HttpSuccessMessageInput = string | false | HttpSuccessMessageOptions;\n\nexport interface HttpSuccessMessageConfig {\n enabled: boolean;\n methods: readonly HttpSuccessMessageMethod[];\n messages: Readonly<Record<HttpSuccessMessageMethod, string>>;\n}\n\nexport interface HttpSuccessMessageConfigInput {\n enabled?: boolean;\n methods?: readonly HttpSuccessMessageMethod[];\n messages?: Partial<Record<HttpSuccessMessageMethod, string>>;\n}\n\nexport const HTTP_SUCCESS_MESSAGE = new HttpContextToken<HttpSuccessMessageInput | undefined>(\n () => undefined,\n);\n\nexport function withHttpSuccessMessage(\n message: HttpSuccessMessageInput = {},\n context = new HttpContext(),\n): HttpContext {\n return context.set(HTTP_SUCCESS_MESSAGE, message);\n}\n\nexport function withoutHttpSuccessMessage(context = new HttpContext()): HttpContext {\n return context.set(HTTP_SUCCESS_MESSAGE, false);\n}\n\nexport interface HttpResponseInterceptorConfig {\n timeoutMs: number;\n minResponseDelayMs: number;\n logErrors: boolean;\n logRequestHeaders: boolean;\n logRequestBody: boolean;\n logResponseBody: boolean;\n redactedValue: string;\n sensitiveHeaderNames: readonly string[];\n sensitiveBodyKeys: readonly string[];\n successMessage: HttpSuccessMessageConfig;\n}\n\nexport interface HttpResponseInterceptorConfigInput\n extends Partial<Omit<HttpResponseInterceptorConfig, 'successMessage'>> {\n successMessage?: HttpSuccessMessageConfigInput;\n}\n\nexport const DEFAULT_HTTP_SUCCESS_MESSAGES: Readonly<Record<HttpSuccessMessageMethod, string>> = {\n POST: '操作成功',\n PUT: '修改成功',\n PATCH: '修改成功',\n DELETE: '删除成功',\n};\n\nexport const DEFAULT_HTTP_RESPONSE_INTERCEPTOR_CONFIG: HttpResponseInterceptorConfig = {\n timeoutMs: 8000,\n minResponseDelayMs: 350,\n logErrors: true,\n logRequestHeaders: true,\n logRequestBody: false,\n logResponseBody: false,\n redactedValue: '[REDACTED]',\n sensitiveHeaderNames: [\n 'authorization',\n 'cookie',\n 'set-cookie',\n 'proxy-authorization',\n 'x-api-key',\n 'api-key',\n 'x-auth-token',\n 'access-token',\n 'refresh-token',\n ],\n sensitiveBodyKeys: [\n 'authorization',\n 'password',\n 'token',\n 'accessToken',\n 'refreshToken',\n 'idToken',\n 'secret',\n 'clientSecret',\n 'credential',\n 'credentials',\n 'cookie',\n 'session',\n 'sessionId',\n ],\n successMessage: {\n enabled: true,\n methods: ['POST', 'PUT', 'PATCH', 'DELETE'],\n messages: DEFAULT_HTTP_SUCCESS_MESSAGES,\n },\n};\n\nexport const HTTP_RESPONSE_INTERCEPTOR_CONFIG = new InjectionToken<HttpResponseInterceptorConfig>(\n 'HTTP_RESPONSE_INTERCEPTOR_CONFIG',\n {\n providedIn: 'root',\n factory: () => DEFAULT_HTTP_RESPONSE_INTERCEPTOR_CONFIG,\n },\n);\n\nexport function provideHttpResponseInterceptorConfig(\n config: HttpResponseInterceptorConfigInput,\n): Provider {\n return {\n provide: HTTP_RESPONSE_INTERCEPTOR_CONFIG,\n useValue: normalizeHttpResponseInterceptorConfig(config),\n };\n}\n\nfunction normalizeHttpResponseInterceptorConfig(\n config: HttpResponseInterceptorConfigInput = {},\n): HttpResponseInterceptorConfig {\n return {\n ...DEFAULT_HTTP_RESPONSE_INTERCEPTOR_CONFIG,\n ...config,\n timeoutMs: config.timeoutMs ?? DEFAULT_HTTP_RESPONSE_INTERCEPTOR_CONFIG.timeoutMs,\n minResponseDelayMs:\n config.minResponseDelayMs ?? DEFAULT_HTTP_RESPONSE_INTERCEPTOR_CONFIG.minResponseDelayMs,\n sensitiveHeaderNames: mergeSensitiveNames(\n DEFAULT_HTTP_RESPONSE_INTERCEPTOR_CONFIG.sensitiveHeaderNames,\n config.sensitiveHeaderNames,\n ),\n sensitiveBodyKeys: mergeSensitiveNames(\n DEFAULT_HTTP_RESPONSE_INTERCEPTOR_CONFIG.sensitiveBodyKeys,\n config.sensitiveBodyKeys,\n ),\n successMessage: normalizeHttpSuccessMessageConfig(config.successMessage),\n };\n}\n\nfunction normalizeHttpSuccessMessageConfig(\n config: HttpSuccessMessageConfigInput = {},\n): HttpSuccessMessageConfig {\n const defaultConfig = DEFAULT_HTTP_RESPONSE_INTERCEPTOR_CONFIG.successMessage;\n\n return {\n enabled: config.enabled ?? defaultConfig.enabled,\n methods: config.methods ?? defaultConfig.methods,\n messages: {\n ...defaultConfig.messages,\n ...(config.messages ?? {}),\n },\n };\n}\n\nfunction mergeSensitiveNames(\n defaultNames: readonly string[],\n configuredNames: readonly string[] | undefined,\n): readonly string[] {\n return Array.from(new Set([...defaultNames, ...(configuredNames ?? [])]));\n}\n","/**\r\n * HTTP认证Token相关的类型和注入令牌定义\r\n * 用于在Angular应用中提供和获取认证Token\r\n */\r\nimport { InjectionToken } from '@angular/core';\r\n\r\n/**\r\n * 认证Token获取函数类型\r\n * @returns 返回认证Token字符串,或者null(如果没有Token)\r\n */\r\nexport type HttpAuthTokenGetter = () => string | null;\r\n\r\n/**\r\n * HTTP认证Token获取器的注入令牌\r\n * 用于在应用中注入Token获取函数\r\n */\r\nexport const HTTP_AUTH_TOKEN_GETTER = new InjectionToken<HttpAuthTokenGetter>(\r\n 'HTTP_AUTH_TOKEN_GETTER'\r\n);\r\n\r\n/**\r\n * 提供HTTP认证Token获取器的函数\r\n * @param getterFactory - 用于创建Token获取函数的工厂函数\r\n * @returns 包含提供者配置的对象\r\n */\r\nexport function provideHttpAuthTokenGetter(getterFactory: () => HttpAuthTokenGetter) {\r\n return {\r\n provide: HTTP_AUTH_TOKEN_GETTER,\r\n useFactory: getterFactory,\r\n };\r\n}\r\n","import { InjectionToken } from '@angular/core';\n\nexport type HttpUnauthorizedHandler = () => void | Promise<void>;\n\nexport const HTTP_UNAUTHORIZED_HANDLER = new InjectionToken<HttpUnauthorizedHandler>(\n 'HTTP_UNAUTHORIZED_HANDLER'\n);\n\nexport function provideHttpUnauthorizedHandler(\n handlerFactory: () => HttpUnauthorizedHandler\n) {\n return {\n provide: HTTP_UNAUTHORIZED_HANDLER,\n useFactory: handlerFactory,\n };\n}\n","import {\n HttpErrorResponse,\n HttpEvent,\n HttpHandlerFn,\n HttpHeaders,\n HttpRequest,\n HttpResponse,\n} from '@angular/common/http';\nimport { inject } from '@angular/core';\nimport {\n catchError,\n delay,\n dematerialize,\n finalize,\n materialize,\n Observable,\n tap,\n throwError,\n timeout,\n} from 'rxjs';\nimport { BusinessException, HttpCustomException, getHttpStatusMessage } from 'platform-core-ts';\n\nimport { decreaseLoading } from '../services/loading.store';\nimport {\n HTTP_SUCCESS_MESSAGE,\n HTTP_RESPONSE_INTERCEPTOR_CONFIG,\n type HttpSuccessMessageInput,\n type HttpSuccessMessageMethod,\n type HttpResponseInterceptorConfig,\n} from '../token';\nimport { HTTP_UNAUTHORIZED_HANDLER, type HttpUnauthorizedHandler } from '../token';\nimport { MESSAGE_SERVICE, type IMessageService } from '../token';\n\nexport function responseInterceptor(\n req: HttpRequest<unknown>,\n next: HttpHandlerFn,\n): Observable<HttpEvent<unknown>> {\n const config = inject(HTTP_RESPONSE_INTERCEPTOR_CONFIG);\n const unauthorizedHandler = inject<HttpUnauthorizedHandler | null>(HTTP_UNAUTHORIZED_HANDLER, {\n optional: true,\n });\n const messageService = inject<IMessageService | null>(MESSAGE_SERVICE, { optional: true });\n let response$ = next(req);\n\n if (config.timeoutMs > 0) {\n response$ = response$.pipe(timeout(config.timeoutMs));\n }\n\n if (config.minResponseDelayMs > 0) {\n response$ = response$.pipe(materialize(), delay(config.minResponseDelayMs), dematerialize());\n }\n\n return response$.pipe(\n tap((event) => showSuccessMessage(req, event, messageService, config)),\n catchError((error: unknown) =>\n catchErrorResponse(req, error, unauthorizedHandler, config),\n ),\n finalize(() => decreaseLoading()),\n );\n}\n\ninterface ResolvedHttpSuccessMessage {\n message: string;\n title?: string;\n}\n\nfunction showSuccessMessage(\n httpRequest: HttpRequest<unknown>,\n event: HttpEvent<unknown>,\n messageService: IMessageService | null,\n config: HttpResponseInterceptorConfig,\n): void {\n if (!(event instanceof HttpResponse) || !messageService?.success) {\n return;\n }\n\n const successMessage = resolveSuccessMessage(httpRequest, config);\n\n if (!successMessage) {\n return;\n }\n\n messageService.success(successMessage.message, successMessage.title);\n}\n\nfunction resolveSuccessMessage(\n httpRequest: HttpRequest<unknown>,\n config: HttpResponseInterceptorConfig,\n): ResolvedHttpSuccessMessage | null {\n const contextMessage = httpRequest.context.get(HTTP_SUCCESS_MESSAGE);\n const method = normalizeHttpMethod(httpRequest.method);\n\n if (contextMessage !== undefined) {\n return resolveContextSuccessMessage(contextMessage, getDefaultSuccessMessage(method, config));\n }\n\n if (\n !config.successMessage.enabled ||\n !isSuccessMessageMethod(method) ||\n !config.successMessage.methods.includes(method)\n ) {\n return null;\n }\n\n return toResolvedSuccessMessage(config.successMessage.messages[method]);\n}\n\nfunction resolveContextSuccessMessage(\n contextMessage: HttpSuccessMessageInput,\n defaultMessage: string | undefined,\n): ResolvedHttpSuccessMessage | null {\n if (contextMessage === false) {\n return null;\n }\n\n if (typeof contextMessage === 'string') {\n return toResolvedSuccessMessage(contextMessage);\n }\n\n if (contextMessage.enabled === false) {\n return null;\n }\n\n return toResolvedSuccessMessage(contextMessage.message ?? defaultMessage, contextMessage.title);\n}\n\nfunction toResolvedSuccessMessage(\n message: string | undefined,\n title?: string,\n): ResolvedHttpSuccessMessage | null {\n const normalizedMessage = message?.trim();\n\n if (!normalizedMessage) {\n return null;\n }\n\n return {\n message: normalizedMessage,\n ...(title ? { title } : {}),\n };\n}\n\nfunction getDefaultSuccessMessage(\n method: string,\n config: HttpResponseInterceptorConfig,\n): string | undefined {\n return isSuccessMessageMethod(method) ? config.successMessage.messages[method] : undefined;\n}\n\nfunction normalizeHttpMethod(method: string): string {\n return method.toUpperCase();\n}\n\nfunction isSuccessMessageMethod(method: string): method is HttpSuccessMessageMethod {\n return method === 'POST' || method === 'PUT' || method === 'PATCH' || method === 'DELETE';\n}\n\nfunction catchErrorResponse(\n httpRequest: HttpRequest<unknown>,\n error: unknown,\n unauthorizedHandler: HttpUnauthorizedHandler | null,\n config: HttpResponseInterceptorConfig,\n): Observable<HttpEvent<unknown>> {\n const httpErrorResponse = normalizeHttpErrorResponse(error, httpRequest.url);\n const message = getHttpStatusMessage(httpErrorResponse.status);\n const errorDetails = createSafeErrorDetails(httpRequest, httpErrorResponse, message, config);\n\n if (httpErrorResponse.status === 500) {\n logHttpError(errorDetails, config);\n return throwError(() => new BusinessException(httpErrorResponse.error?.message));\n }\n\n if (httpErrorResponse.status === 401) {\n unauthorizedHandler?.();\n }\n\n logHttpError(errorDetails, config);\n\n return throwError(\n () =>\n new HttpCustomException(\n httpErrorResponse.status,\n message,\n httpRequest.method,\n httpRequest.url,\n errorDetails.requestHeaders,\n errorDetails.requestBody,\n errorDetails.responseBody,\n ),\n );\n}\n\nfunction normalizeHttpErrorResponse(error: unknown, requestUrl: string): HttpErrorResponse {\n if (error instanceof HttpErrorResponse) {\n return error;\n }\n\n return new HttpErrorResponse({\n error: getSafeErrorPayload(error),\n status: 0,\n statusText: error instanceof Error ? error.message : 'Unknown Error',\n url: requestUrl,\n });\n}\n\nfunction getSafeErrorPayload(error: unknown): unknown {\n if (error instanceof Error) {\n return {\n name: error.name,\n message: error.message,\n };\n }\n\n return error;\n}\n\ninterface SafeHttpErrorDetails {\n requestMethod: string;\n requestUrl: string;\n requestHeaders: string;\n requestBody: string;\n responseBody: string;\n responseStatus: number;\n responseMessage: string;\n}\n\nfunction createSafeErrorDetails(\n httpRequest: HttpRequest<unknown>,\n httpErrorResponse: HttpErrorResponse,\n message: string,\n config: HttpResponseInterceptorConfig,\n): SafeHttpErrorDetails {\n return {\n requestMethod: httpRequest.method,\n requestUrl: httpRequest.url,\n requestHeaders: config.logRequestHeaders\n ? stringifyHeaders(httpRequest.headers, config)\n : config.redactedValue,\n requestBody: config.logRequestBody ? stringifyBody(httpRequest.body, config) : config.redactedValue,\n responseBody: config.logResponseBody\n ? stringifyBody(httpErrorResponse.error, config)\n : config.redactedValue,\n responseStatus: httpErrorResponse.status,\n responseMessage: message,\n };\n}\n\nfunction logHttpError(\n details: SafeHttpErrorDetails,\n config: HttpResponseInterceptorConfig,\n): void {\n if (!config.logErrors) {\n return;\n }\n\n console.error('[HTTP] Request failed', details);\n}\n\nfunction stringifyHeaders(headers: HttpHeaders, config: HttpResponseInterceptorConfig): string {\n const sanitizedHeaders = headers.keys().reduce<Record<string, string | readonly string[]>>(\n (result, headerName) => {\n result[headerName] = isSensitiveName(headerName, config.sensitiveHeaderNames)\n ? config.redactedValue\n : headers.getAll(headerName) ?? headers.get(headerName) ?? '';\n return result;\n },\n {},\n );\n\n return safeStringify(sanitizedHeaders);\n}\n\nfunction stringifyBody(body: unknown, config: HttpResponseInterceptorConfig): string {\n return safeStringify(redactBody(body, config));\n}\n\nfunction redactBody(\n value: unknown,\n config: HttpResponseInterceptorConfig,\n visited = new WeakSet<object>(),\n): unknown {\n if (value === null || typeof value !== 'object') {\n return value;\n }\n\n if (visited.has(value)) {\n return '[Circular]';\n }\n\n if (typeof Blob !== 'undefined' && value instanceof Blob) {\n return `[Blob:${value.type || 'unknown'}]`;\n }\n\n if (typeof FormData !== 'undefined' && value instanceof FormData) {\n return '[FormData]';\n }\n\n if (value instanceof Date) {\n return value.toISOString();\n }\n\n visited.add(value);\n\n if (Array.isArray(value)) {\n return value.map((item) => redactBody(item, config, visited));\n }\n\n return Object.entries(value as Record<string, unknown>).reduce<Record<string, unknown>>(\n (result, [key, item]) => {\n result[key] = isSensitiveName(key, config.sensitiveBodyKeys)\n ? config.redactedValue\n : redactBody(item, config, visited);\n return result;\n },\n {},\n );\n}\n\nfunction isSensitiveName(name: string, sensitiveNames: readonly string[]): boolean {\n const normalizedName = name.toLowerCase();\n\n return sensitiveNames.some((sensitiveName) => {\n const normalizedSensitiveName = sensitiveName.toLowerCase();\n return (\n normalizedName === normalizedSensitiveName ||\n normalizedName.includes(normalizedSensitiveName)\n );\n });\n}\n\nfunction safeStringify(value: unknown): string {\n try {\n return JSON.stringify(value);\n } catch {\n return '[Unserializable]';\n }\n}\n","/**\r\n * HTTP请求拦截器\r\n * 功能:\r\n * 1. 增加加载状态计数\r\n * 2. 处理基础URL拼接\r\n * 3. 为符合条件的请求添加认证Token\r\n */\r\nimport { HttpEvent, HttpHandlerFn, HttpRequest } from '@angular/common/http';\r\nimport { inject } from '@angular/core';\r\nimport { Observable } from 'rxjs';\r\nimport { increaseLoading } from '../services/loading.store';\r\nimport { HTTP_AUTH_TOKEN_GETTER, HTTP_CONFIG } from '../token';\r\n\r\n/**\r\n * 请求拦截器函数\r\n * @param req - 原始HTTP请求对象\r\n * @param next - 下一个请求处理器函数\r\n * @returns 处理后的HTTP事件 Observable\r\n */\r\nexport function requestInterceptor(\r\n req: HttpRequest<unknown>,\r\n next: HttpHandlerFn,\r\n): Observable<HttpEvent<unknown>> {\r\n // 注入HTTP配置(可选)\r\n const config = inject(HTTP_CONFIG, { optional: true });\r\n // 注入Token获取器(可选)\r\n const tokenGetter = inject(HTTP_AUTH_TOKEN_GETTER, { optional: true });\r\n\r\n // 增加加载状态计数\r\n increaseLoading();\r\n\r\n // 获取基础API URL,默认为空字符串\r\n const baseApi = config?.baseUrl ?? '';\n const clientId = config?.clientId ?? null;\n // 构建完整URL:如果是绝对URL则直接使用,否则拼接基础URL\r\n const url = /^https?:\\/\\//.test(req.url) ? req.url : baseApi + req.url;\r\n // 获取认证Token\r\n const token = tokenGetter?.();\n const headers: Record<string, string> = {};\n\n if (clientId) {\n headers['clientId'] = clientId;\n }\n // 判断是否应该附加Token:\r\n // 1. 必须存在Token\r\n // 2. 请求URL必须以'/'开头,或者完整URL以基础API URL开头\r\n const shouldAttachToken = !!token && (req.url.startsWith('/') || (!!baseApi && url.startsWith(baseApi)));\r\n\r\n // 如果不需要附加Token,直接克隆请求并更新URL后继续\r\n if (!shouldAttachToken) {\n return next(\n req.clone({\n url,\n ...(Object.keys(headers).length > 0 ? { setHeaders: headers } : {}),\n }),\n );\n }\n\r\n // 如果需要附加Token,克隆请求并添加Authorization头\r\n return next(\r\n req.clone({\r\n url,\n setHeaders: {\n ...headers,\n Authorization: `Bearer ${token}`,\n },\n }),\r\n );\r\n}\r\n","/**\r\n * @description 路由 outlets 模型,用于路由导航时指定 outlets\r\n * @param primary 主路由 outlets\r\n * @param appPrompt 应用提示路由 outlets\r\n * @author ChenYu\r\n * @version 1.0.0\r\n */\r\nexport class Outlets {\r\n /**\r\n * 主路由 outlets\r\n */\r\n primary: string[] = [];\r\n /**\r\n * 应用提示路由 outlets\r\n */\r\n appPrompt: string[] = [];\r\n\r\n /**\r\n * 路由 outlets 模型\r\n * @param primary 主路由 outlets\r\n * @param appPrompt 应用提示路由 outlets\r\n */\r\n constructor(primary: string[], appPrompt: string[]) {\r\n this.primary = primary;\r\n this.appPrompt = appPrompt;\r\n }\r\n}\r\n","import { InjectionToken } from '@angular/core';\n\nexport type AppRuntimeHost = 'main' | 'standalone' | (string & {});\n\nexport interface AppRuntimeContext {\n readonly host: AppRuntimeHost;\n readonly appCode?: string;\n readonly appName?: string;\n readonly tenantId?: string;\n readonly userId?: string;\n readonly permissions: readonly string[];\n readonly metadata?: Readonly<Record<string, unknown>>;\n}\n\nexport const DEFAULT_APP_RUNTIME_CONTEXT: AppRuntimeContext = {\n host: 'standalone',\n permissions: [],\n};\n\nexport const APP_RUNTIME_CONTEXT = new InjectionToken<AppRuntimeContext>('APP_RUNTIME_CONTEXT', {\n providedIn: 'root',\n factory: () => DEFAULT_APP_RUNTIME_CONTEXT,\n});\n","import { makeEnvironmentProviders, type EnvironmentProviders } from '@angular/core';\nimport { APP_RUNTIME_CONTEXT, DEFAULT_APP_RUNTIME_CONTEXT, type AppRuntimeContext } from './app-runtime.token';\n\nexport function provideRuntimeContext(context: Partial<AppRuntimeContext>): EnvironmentProviders {\n return makeEnvironmentProviders([\n {\n provide: APP_RUNTIME_CONTEXT,\n useValue: {\n ...DEFAULT_APP_RUNTIME_CONTEXT,\n ...context,\n permissions: context.permissions ?? DEFAULT_APP_RUNTIME_CONTEXT.permissions,\n } satisfies AppRuntimeContext,\n },\n ]);\n}\n","import { computed, inject, Injectable, signal } from '@angular/core';\nimport { APP_RUNTIME_CONTEXT, type AppRuntimeContext } from './app-runtime.token';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class RuntimeService {\n private readonly initialContext = inject(APP_RUNTIME_CONTEXT);\n private readonly contextState = signal<AppRuntimeContext>(this.initialContext);\n\n readonly context = this.contextState.asReadonly();\n readonly host = computed(() => this.contextState().host);\n readonly appCode = computed(() => this.contextState().appCode);\n readonly permissions = computed(() => this.contextState().permissions);\n readonly permissionSet = computed(() => new Set(this.contextState().permissions));\n readonly isMainHost = computed(() => this.contextState().host === 'main');\n readonly isStandalone = computed(() => this.contextState().host === 'standalone');\n\n setContext(context: Partial<AppRuntimeContext>): void {\n this.contextState.update((current) => ({\n ...current,\n ...context,\n permissions: context.permissions ?? current.permissions,\n metadata: context.metadata ?? current.metadata,\n }));\n }\n\n setPermissions(permissions: readonly string[]): void {\n this.contextState.update((current) => ({\n ...current,\n permissions,\n }));\n }\n}\n","import { inject, Injectable } from '@angular/core';\nimport { RuntimeService } from '../runtime';\n\nexport type PermissionInput = string | readonly string[];\nexport type OptionalPermissionInput = PermissionInput | null | undefined;\n\n@Injectable({\n providedIn: 'root',\n})\nexport class PermissionService {\n private readonly runtime = inject(RuntimeService);\n readonly permissions = this.runtime.permissions;\n\n has(permission: string): boolean {\n const normalizedPermission = permission.trim();\n\n if (!normalizedPermission) {\n return true;\n }\n\n const permissionSet = this.runtime.permissionSet();\n return permissionSet.has('*') || permissionSet.has('*:*:*') || permissionSet.has(normalizedPermission);\n }\n\n hasPermission(permissions: OptionalPermissionInput): boolean {\n if (!permissions || (Array.isArray(permissions) && permissions.length === 0)) {\n return true;\n }\n\n return this.hasAny(permissions);\n }\n\n hasAny(permissions: PermissionInput): boolean {\n const items = this.normalize(permissions);\n return items.length === 0 || items.some((permission) => this.has(permission));\n }\n\n hasAll(permissions: PermissionInput): boolean {\n const items = this.normalize(permissions);\n return items.every((permission) => this.has(permission));\n }\n\n setPermissions(permissions: readonly string[]): void {\n this.runtime.setPermissions(permissions);\n }\n\n private normalize(permissions: PermissionInput): readonly string[] {\n return typeof permissions === 'string' ? [permissions] : permissions;\n }\n}\n","import { Directive, ElementRef, Renderer2, effect, inject, input } from '@angular/core';\r\nimport { PermissionService, type PermissionInput } from './permission.service';\r\n\r\nexport type RequiredPermissions = PermissionInput | null | undefined;\r\n\r\n@Directive({\r\n selector: '[hasPermission],[vHasPermission],[v-has-permission]',\r\n})\r\nexport class HasPermissionDirective {\r\n private readonly elementRef = inject(ElementRef<HTMLElement>);\r\n private readonly renderer = inject(Renderer2);\r\n private readonly permissionService = inject(PermissionService);\r\n\r\n readonly hasPermission = input<RequiredPermissions>(undefined);\r\n readonly vHasPermission = input<RequiredPermissions>(undefined, { alias: 'vHasPermission' });\r\n readonly vHasPermissionKebab = input<RequiredPermissions>(undefined, { alias: 'v-has-permission' });\r\n\r\n constructor() {\r\n effect(() => {\r\n const required = this.hasPermission() ?? this.vHasPermission() ?? this.vHasPermissionKebab();\r\n const visible = this.permissionService.hasPermission(required);\r\n\r\n if (visible) {\r\n this.renderer.removeStyle(this.elementRef.nativeElement, 'display');\r\n this.renderer.removeAttribute(this.elementRef.nativeElement, 'aria-hidden');\r\n } else {\r\n this.renderer.setStyle(this.elementRef.nativeElement, 'display', 'none');\r\n this.renderer.setAttribute(this.elementRef.nativeElement, 'aria-hidden', 'true');\r\n }\r\n });\r\n }\r\n}\r\n","/**\r\n * Shell配置相关的类型定义和工具函数\r\n * 用于配置应用的整体布局和界面元素\r\n */\r\nimport { inject, InjectionToken, Provider } from '@angular/core';\r\n\r\n/**\r\n * 品牌配置接口\r\n * 用于设置应用的品牌信息\r\n */\r\nexport interface ShellBrandConfig {\r\n /** 品牌标题 */\r\n title: string;\r\n}\r\n\r\n/**\r\n * 搜索分类接口\r\n * 用于定义搜索功能中的分类选项\r\n */\r\nexport interface ShellSearchCategory {\r\n /** 分类ID */\r\n id: string;\r\n /** 分类标签 */\r\n label: string;\r\n}\r\n\r\n/**\r\n * 搜索结果接口\r\n * 用于定义搜索功能中的结果项\r\n */\r\nexport interface ShellSearchResult {\r\n /** 结果标题 */\r\n title: string;\r\n /** 结果元数据 */\r\n meta: string;\r\n /** 结果所有者 */\r\n owner: string;\r\n}\r\n\r\n/**\r\n * 头部操作按钮配置接口\r\n * 用于定义头部的操作按钮\r\n */\r\nexport interface ShellHeaderActionConfig {\r\n /** 按钮标签 */\r\n label: string;\r\n /** 无障碍标签 */\r\n ariaLabel?: string;\r\n /** 点击回调函数 */\r\n onClick: () => void;\r\n}\r\n\r\n/**\r\n * 头部工具项类型\r\n * 定义头部工具栏中项目的类型\r\n */\r\nexport type ShellHeaderUtilityKind =\r\n | 'language' // 语言选择\r\n | 'theme' // 主题切换\r\n | 'notifications' // 通知\r\n | 'fullscreen' // 全屏\r\n | 'custom'; // 自定义\r\n\r\n/**\r\n * 头部语言选项接口\r\n * 用于定义语言选择功能中的语言选项\r\n */\r\nexport interface ShellHeaderLanguageOption {\r\n /** 语言代码 */\r\n code: string;\r\n /** 语言标签 */\r\n label: string;\r\n}\r\n\r\n/**\r\n * 头部通知项接口\r\n * 用于定义通知功能中的通知项\r\n */\r\nexport interface ShellHeaderNotificationItem {\r\n /** 通知标题 */\r\n title: string;\r\n /** 通知描述 */\r\n description: string;\r\n /** 通知时间 */\r\n time: string;\r\n}\r\n\r\n/**\r\n * 头部工具项接口\r\n * 用于定义头部工具栏中的项目\r\n */\r\nexport interface ShellHeaderUtilityItem {\r\n /** 工具项类型 */\r\n kind?: ShellHeaderUtilityKind;\r\n /** 图标文本 */\r\n iconText: string;\r\n /** 图标名称 */\r\n iconName?: string;\r\n /** 无障碍标签 */\r\n ariaLabel: string;\r\n /** 徽章文本或数字 */\r\n badge?: string | number;\r\n /** 点击回调函数 */\r\n onClick?: () => void;\r\n}\r\n\r\n/**\r\n * 头部配置接口\r\n * 用于配置应用头部的各种功能和元素\r\n */\r\nexport interface ShellHeaderConfig {\r\n /** 触发搜索的标签 */\r\n triggerLabel: string;\r\n /** 搜索对话框标签 */\r\n dialogLabel: string;\r\n /** 搜索输入框占位符 */\r\n inputPlaceholder: string;\r\n /** 关闭按钮标签 */\r\n closeLabel: string;\r\n /** 搜索分类列表 */\r\n categories: ShellSearchCategory[];\r\n /** 搜索结果列表 */\r\n results: ShellSearchResult[];\r\n /** 语言选项列表 */\r\n languages?: ShellHeaderLanguageOption[];\r\n /** 通知列表 */\r\n notifications?: ShellHeaderNotificationItem[];\r\n /** 状态文本函数 */\r\n statusText?: () => string;\r\n /** 个人资料徽章文本函数 */\r\n profileBadgeText?: () => string;\r\n /** 工具项列表 */\r\n utilityItems?: ShellHeaderUtilityItem[];\r\n /** 操作按钮配置 */\r\n actionButton?: ShellHeaderActionConfig;\r\n}\r\n\r\n/**\r\n * 导航项接口\r\n * 用于定义侧边栏中的导航项\r\n */\r\nexport interface ShellNavItem {\r\n /** 路由路径 */\r\n route: string;\r\n /** 图标CSS类 */\r\n iconClass?: string;\r\n /** 图标名称 */\r\n iconName?: string;\r\n /** 导航标签 */\r\n label: string;\r\n}\r\n\r\n/**\r\n * 侧边栏配置接口\r\n * 用于配置应用侧边栏的各种元素\r\n */\r\nexport interface ShellSidebarConfig {\r\n /** 头像图片源 */\r\n avatarSrc?: string;\r\n /** 头像替代文本 */\r\n avatarAlt?: string;\r\n /** 导航项列表 */\r\n items: ShellNavItem[];\r\n /** 设置按钮无障碍标签 */\r\n settingsAriaLabel?: string;\r\n}\r\n\r\n/**\r\n * 头部变体类型\r\n * 定义头部的不同样式变体\r\n */\r\nexport type ShellHeaderVariant = 'standard' | 'minimal' | 'top-nav';\r\n\r\n/**\r\n * 底部变体类型\r\n * 定义底部的不同样式变体\r\n */\r\nexport type ShellFooterVariant = 'standard' | 'empty';\r\n\r\n/**\r\n * 侧边栏变体类型\r\n * 定义侧边栏的不同样式变体\r\n */\r\nexport type ShellSidebarVariant = 'standard' | 'none';\r\n\r\n/**\r\n * 布局模式类型\r\n * 定义应用的整体布局模式\r\n */\r\nexport type ShellLayoutMode = 'sidebar-header' | 'top-nav' | 'workbench';\r\n\r\n/**\r\n * 基础Shell配置接口\r\n * 包含所有布局模式共用的配置项\r\n */\r\ninterface BaseShellConfig {\r\n /** 品牌配置 */\r\n brand: ShellBrandConfig;\r\n /** 头部配置 */\r\n header: ShellHeaderConfig;\r\n /** 侧边栏配置 */\r\n sidebar: ShellSidebarConfig;\r\n}\r\n\r\n/**\r\n * 侧边栏头部布局的部分配置接口\r\n * 用于配置侧边栏头部布局模式下的各个部分\r\n */\r\nexport interface SidebarHeaderPartConfig {\r\n /** 头部变体 */\r\n header?: 'standard' | 'minimal' | 'top-nav';\r\n /** 底部变体 */\r\n footer?: 'standard' | 'empty';\r\n /** 侧边栏变体 */\r\n sidebar?: 'standard' | 'none';\r\n}\r\n\r\n/**\r\n * 顶部导航布局的部分配置接口\r\n * 用于配置顶部导航布局模式下的各个部分\r\n */\r\nexport interface TopNavPartConfig {\r\n /** 头部变体 */\r\n header?: 'top-nav' | 'minimal' | 'standard';\r\n /** 底部变体 */\r\n footer?: 'standard' | 'empty';\r\n /** 侧边栏变体 */\r\n sidebar?: 'none';\r\n}\r\n\r\n/**\r\n * 工作台布局的部分配置接口\r\n * 用于配置工作台布局模式下的各个部分\r\n */\r\nexport interface WorkbenchPartConfig {\r\n /** 头部变体 */\r\n header?: 'minimal';\r\n /** 底部变体 */\r\n footer?: 'empty';\r\n /** 侧边栏变体 */\r\n sidebar?: 'none';\r\n}\r\n\r\n/**\r\n * 侧边栏头部布局的Shell配置接口\r\n * 用于配置侧边栏头部布局模式的完整配置\r\n */\r\nexport interface SidebarHeaderShellConfig extends BaseShellConfig {\r\n /** 布局模式 */\r\n layoutMode: 'sidebar-header';\r\n /** 部分配置 */\r\n parts?: SidebarHeaderPartConfig;\r\n}\r\n\r\n/**\r\n * 顶部导航布局的Shell配置接口\r\n * 用于配置顶部导航布局模式的完整配置\r\n */\r\nexport interface TopNavShellConfig extends BaseShellConfig {\r\n /** 布局模式 */\r\n layoutMode: 'top-nav';\r\n /** 部分配置 */\r\n parts?: TopNavPartConfig;\r\n}\r\n\r\n/**\r\n * 工作台布局的Shell配置接口\r\n * 用于配置工作台布局模式的完整配置\r\n */\r\nexport interface WorkbenchShellConfig extends BaseShellConfig {\r\n /** 布局模式 */\r\n layoutMode: 'workbench';\r\n /** 部分配置 */\r\n parts?: WorkbenchPartConfig;\r\n}\r\n\r\n/**\r\n * Shell配置类型\r\n * 包含所有布局模式的配置类型\r\n */\r\nexport type ShellConfig =\r\n | SidebarHeaderShellConfig\r\n | TopNavShellConfig\r\n | WorkbenchShellConfig;\r\n\r\n/**\r\n * 解析后的Shell部分配置接口\r\n * 用于表示最终应用的布局部分配置\r\n */\r\nexport interface ResolvedShellPartConfig {\r\n /** 头部变体 */\r\n header: ShellHeaderVariant;\r\n /** 底部变体 */\r\n footer: ShellFooterVariant;\r\n /** 侧边栏变体 */\r\n sidebar: ShellSidebarVariant;\r\n}\r\n\r\n/**\r\n * Shell配置的注入令牌\r\n * 用于在应用中注入和访问Shell配置\r\n */\r\nexport const SHELL_CONFIG = new InjectionToken<ShellConfig>('SHELL_CONFIG');\r\n\r\n/**\r\n * 不同布局模式的默认部分配置\r\n * 为每种布局模式提供默认的头部、底部和侧边栏配置\r\n */\r\nconst DEFAULT_SHELL_PARTS_BY_MODE: Record<ShellLayoutMode, ResolvedShellPartConfig> = {\r\n 'sidebar-header': {\r\n header: 'standard',\r\n footer: 'standard',\r\n sidebar: 'standard',\r\n },\r\n 'top-nav': {\r\n header: 'top-nav',\r\n footer: 'empty',\r\n sidebar: 'none',\r\n },\r\n workbench: {\r\n header: 'minimal',\r\n footer: 'empty',\r\n sidebar: 'none',\r\n },\r\n};\r\n\r\n/**\r\n * 提供Shell配置的函数\r\n * @param config - Shell配置对象\r\n * @returns 包含提供者配置的对象\r\n */\r\nexport function provideShellConfig(config: ShellConfig): Provider {\r\n return {\r\n provide: SHELL_CONFIG,\r\n useValue: config,\r\n };\r\n}\r\n\r\n/**\r\n * 通过工厂函数提供Shell配置的函数\r\n * @param factory - 用于创建Shell配置的工厂函数\r\n * @returns 包含提供者配置的对象\r\n */\r\nexport function provideShellConfigFactory(factory: () => ShellConfig): Provider {\r\n return {\r\n provide: SHELL_CONFIG,\r\n useFactory: factory,\r\n };\r\n}\r\n\r\n/**\r\n * 注入Shell配置的函数\r\n * @returns Shell配置对象\r\n */\r\nexport function injectShellConfig(): ShellConfig {\r\n return inject(SHELL_CONFIG);\r\n}\r\n\r\n/**\r\n * 解析Shell部分配置的函数\r\n * 结合默认配置和用户配置,生成最终的部分配置\r\n * @param config - Shell配置对象\r\n * @returns 解析后的Shell部分配置\r\n */\r\nexport function resolveShellParts(config: ShellConfig): ResolvedShellPartConfig {\r\n return {\r\n ...DEFAULT_SHELL_PARTS_BY_MODE[config.layoutMode],\r\n ...config.parts,\r\n };\r\n}\r\n","import { ChangeDetectionStrategy, Component } from '@angular/core';\r\n\r\n@Component({\r\n selector: 's-shell',\r\n imports: [],\r\n templateUrl: './app-shell.html',\r\n styleUrl: './app-shell.scss',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class AppShell {}\r\n","<div class=\"app-shell\">\r\n <div class=\"app-shell__header\">\r\n <ng-content select=\"[sShellHeader]\"></ng-content>\r\n </div>\r\n\r\n <div class=\"app-shell__sidebar\">\r\n <ng-content select=\"[sShellSidebar]\"></ng-content>\r\n </div>\r\n\r\n <div class=\"app-shell__content\">\r\n <ng-content select=\"[sShellContent]\"></ng-content>\r\n </div>\r\n\r\n <div class=\"app-shell__footer\">\r\n <ng-content select=\"[sShellFooter]\"></ng-content>\r\n </div>\r\n</div>\r\n","import { ChangeDetectionStrategy, Component } from '@angular/core';\r\nimport { RouterOutlet } from '@angular/router';\r\n\r\n@Component({\r\n selector: 's-content',\r\n imports: [RouterOutlet],\r\n templateUrl: './content.html',\r\n styleUrl: './content.scss',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class Content {}\r\n","<div class=\"app-content__viewport\">\r\n <router-outlet></router-outlet>\r\n</div>\r\n","import { ChangeDetectionStrategy, Component } from '@angular/core';\r\n\r\n@Component({\r\n selector: 'p-footer',\r\n imports: [],\r\n templateUrl: './footer.html',\r\n styleUrl: './footer.scss',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class AppFooter {}\r\n","<footer class=\"app-footer\" role=\"contentinfo\">\r\n <ng-content></ng-content>\r\n</footer>\r\n","import { ChangeDetectionStrategy, Component, input, output } from '@angular/core';\r\n\r\nexport interface NotificationCenterItem {\r\n id?: string;\r\n title: string;\r\n description?: string;\r\n time?: string;\r\n unread?: boolean;\r\n}\r\n\r\n@Component({\r\n selector: 's-notification-center',\r\n imports: [],\r\n templateUrl: './s-notification-center.html',\r\n styleUrl: './s-notification-center.scss',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class NotificationCenter {\r\n readonly title = input('通知中心');\r\n readonly items = input<NotificationCenterItem[]>([]);\r\n readonly emptyText = input('暂无通知');\r\n readonly showActions = input(true);\r\n readonly showMarkAll = input(true);\r\n\r\n readonly itemSelected = output<NotificationCenterItem>();\r\n readonly clearAll = output<void>();\r\n readonly markAllAsRead = output<void>();\r\n\r\n protected onSelect(item: NotificationCenterItem): void {\r\n this.itemSelected.emit(item);\r\n }\r\n\r\n protected onMarkAll(): void {\r\n this.markAllAsRead.emit();\r\n }\r\n\r\n protected onClear(): void {\r\n this.clearAll.emit();\r\n }\r\n\r\n protected trackByItem = (_index: number, item: NotificationCenterItem): string =>\r\n item.id ?? item.title;\r\n}\r\n\r\n","<section class=\"notification-center\" aria-label=\"{{ title() }}\">\r\n <header class=\"notification-center__header\">\r\n <h3 class=\"notification-center__title\">{{ title() }}</h3>\r\n <div class=\"notification-center__actions\">\r\n @if (showActions()) {\r\n @if (showMarkAll()) {\r\n <button\r\n type=\"button\"\r\n class=\"notification-center__action-btn\"\r\n (click)=\"onMarkAll()\"\r\n >\r\n 全部已读\r\n </button>\r\n }\r\n <button\r\n type=\"button\"\r\n class=\"notification-center__action-btn\"\r\n (click)=\"onClear()\"\r\n >\r\n 清空\r\n </button>\r\n }\r\n </div>\r\n </header>\r\n\r\n @if (items().length === 0) {\r\n <div class=\"notification-center__empty\">{{ emptyText() }}</div>\r\n } @else {\r\n <div class=\"notification-center__list\">\r\n @for (item of items(); track trackByItem($index, item)) {\r\n <button\r\n type=\"button\"\r\n class=\"notification-center__item\"\r\n [class.notification-center__item--unread]=\"item.unread\"\r\n (click)=\"onSelect(item)\"\r\n >\r\n <div class=\"notification-center__item-head\">\r\n <span class=\"notification-center__item-title\">{{ item.title }}</span>\r\n @if (item.time) {\r\n <span class=\"notification-center__item-time\">{{ item.time }}</span>\r\n }\r\n </div>\r\n @if (item.description) {\r\n <p class=\"notification-center__item-desc\">{{ item.description }}</p>\r\n }\r\n </button>\r\n }\r\n </div>\r\n }\r\n</section>\r\n\r\n","import { Directive } from '@angular/core';\n\n@Directive({\n selector: '[sFlexColumnFill]',\n host: {\n '[style.flex]': \"'1 1 auto'\",\n '[style.min-width]': \"'0'\",\n '[style.min-height]': \"'0'\",\n '[style.height]': \"'100%'\",\n '[style.display]': \"'flex'\",\n '[style.flex-direction]': \"'column'\",\n },\n})\nexport class FlexColumnFillDirective {}\n","import { Directive, ElementRef, Input, OnChanges, Renderer2, SimpleChanges } from '@angular/core';\n\n@Directive({\n selector: '[sLoading]',\n})\nexport class BsLoadingDirective implements OnChanges {\n @Input('sLoading') loading = false;\n\n private overlayEl?: HTMLElement;\n private overlayContainer?: HTMLElement;\n private previousMinHeight?: string;\n\n constructor(\n private readonly el: ElementRef<HTMLElement>,\n private readonly renderer: Renderer2,\n ) {}\n\n ngOnChanges(changes: SimpleChanges): void {\n if (!('loading' in changes)) {\n return;\n }\n\n if (this.loading) {\n this.showOverlay();\n } else {\n this.hideOverlay();\n }\n }\n\n private showOverlay(): void {\n if (this.overlayEl) {\n return;\n }\n\n const container = this.getOverlayContainer();\n if (!container) {\n return;\n }\n\n const computedPosition =\n typeof window !== 'undefined' ? window.getComputedStyle(container).position : container.style.position;\n\n if (!computedPosition || computedPosition === 'static') {\n this.renderer.setStyle(container, 'position', 'relative');\n }\n\n if (container.getBoundingClientRect().height <= 0) {\n this.previousMinHeight = container.style.minHeight;\n this.renderer.setStyle(container, 'min-height', '120px');\n }\n\n this.overlayContainer = container;\n this.overlayEl = this.renderer.createElement('div');\n this.renderer.addClass(this.overlayEl, 'table-loading-overlay');\n this.renderer.setStyle(this.overlayEl, 'position', 'absolute');\n this.renderer.setStyle(this.overlayEl, 'inset', '0');\n this.renderer.setStyle(this.overlayEl, 'display', 'flex');\n this.renderer.setStyle(this.overlayEl, 'align-items', 'center');\n this.renderer.setStyle(this.overlayEl, 'justify-content', 'center');\n this.renderer.setStyle(this.overlayEl, 'padding', '24px');\n this.renderer.setStyle(this.overlayEl, 'background', 'rgba(255, 255, 255, 0.72)');\n this.renderer.setStyle(this.overlayEl, 'backdrop-filter', 'blur(1px)');\n this.renderer.setStyle(this.overlayEl, 'z-index', '20');\n\n const content = this.renderer.createElement('div');\n this.renderer.setStyle(content, 'display', 'grid');\n this.renderer.setStyle(content, 'justify-items', 'center');\n this.renderer.setStyle(content, 'gap', '10px');\n this.renderer.setStyle(content, 'padding', '14px 18px');\n this.renderer.setStyle(content, 'border', '1px solid var(--color-border)');\n this.renderer.setStyle(content, 'border-radius', 'var(--radius-common-m)');\n this.renderer.setStyle(content, 'background', 'var(--color-surface)');\n this.renderer.setStyle(content, 'box-shadow', 'var(--shadow-common-s)');\n\n const spinner = this.renderer.createElement('span');\n this.renderer.setStyle(spinner, 'width', '18px');\n this.renderer.setStyle(spinner, 'height', '18px');\n this.renderer.setStyle(spinner, 'border', '2px solid var(--color-primary-subtle)');\n this.renderer.setStyle(spinner, 'border-top-color', 'var(--color-primary)');\n this.renderer.setStyle(spinner, 'border-radius', '999px');\n this.renderer.setStyle(spinner, 'animation', 'bs-table-loading-spin 0.8s linear infinite');\n\n const text = this.renderer.createElement('div');\n this.renderer.addClass(text, 'loading-text');\n this.renderer.setStyle(text, 'color', 'var(--color-text-secondary)');\n this.renderer.setStyle(text, 'font-size', 'var(--font-size-sm)');\n this.renderer.setStyle(text, 'line-height', 'var(--line-height-sm)');\n this.renderer.appendChild(text, this.renderer.createText('加载中...'));\n\n this.ensureSpinKeyframes();\n this.renderer.appendChild(content, spinner);\n this.renderer.appendChild(content, text);\n this.renderer.appendChild(this.overlayEl, content);\n this.renderer.appendChild(container, this.overlayEl);\n }\n\n private hideOverlay(): void {\n if (!this.overlayContainer || !this.overlayEl) {\n return;\n }\n\n this.renderer.removeChild(this.overlayContainer, this.overlayEl);\n this.overlayEl = undefined;\n this.overlayContainer = undefined;\n\n if (this.previousMinHeight !== undefined) {\n if (this.previousMinHeight) {\n this.renderer.setStyle(this.el.nativeElement.tagName.toLowerCase() === 'table' ? this.el.nativeElement.parentElement : this.el.nativeElement, 'min-height', this.previousMinHeight);\n } else {\n this.renderer.removeStyle(this.el.nativeElement.tagName.toLowerCase() === 'table' ? this.el.nativeElement.parentElement : this.el.nativeElement, 'min-height');\n }\n this.previousMinHeight = undefined;\n }\n }\n\n private getOverlayContainer(): HTMLElement | null {\n const host = this.el.nativeElement;\n\n if (host.tagName.toLowerCase() === 'table') {\n return host.parentElement;\n }\n\n return host;\n }\n\n private ensureSpinKeyframes(): void {\n if (typeof document === 'undefined' || document.getElementById('bs-table-loading-style')) {\n return;\n }\n\n const styleEl = this.renderer.createElement('style');\n this.renderer.setAttribute(styleEl, 'id', 'bs-table-loading-style');\n this.renderer.appendChild(\n styleEl,\n this.renderer.createText(\n '@keyframes bs-table-loading-spin { from { transform: rotate(0deg); } to { transform: rotate(360deg); } }',\n ),\n );\n this.renderer.appendChild(document.head, styleEl);\n }\n}\n","import { Directive, input } from '@angular/core';\n\nexport type PlatformInputSize = 'sm' | 'md' | 'lg';\nexport type PlatformInputVariant = 'control' | 'bare' | 'soft';\n\n@Directive({\n selector: 'input[pInput], textarea[pInput]',\n host: {\n '[attr.data-platform-input]': 'variant()',\n '[attr.data-platform-input-size]': 'size()',\n },\n})\nexport class PlatformInputDirective {\n readonly size = input<PlatformInputSize>('md');\n readonly variant = input<PlatformInputVariant>('control');\n}\n","import { DOCUMENT } from '@angular/common';\r\nimport { ChangeDetectionStrategy, Component, computed, inject, signal } from '@angular/core';\r\nimport {\r\n BellIcon,\r\n CheckIcon,\r\n EllipsisIcon,\r\n GlobeIcon,\r\n LucideAngularModule,\r\n type LucideIconData,\r\n MaximizeIcon,\r\n MinimizeIcon,\r\n MonitorCogIcon,\r\n SearchIcon,\r\n XIcon,\r\n} from 'lucide-angular';\r\nimport {\r\n NotificationCenter,\r\n type NotificationCenterItem,\r\n} from '../../../../shared/components/s-notification-center/s-notification-center';\r\nimport { PlatformInputDirective } from '../../../../shared/directives';\r\nimport {\r\n injectShellConfig,\r\n type ShellHeaderLanguageOption,\r\n type ShellHeaderNotificationItem,\r\n type ShellHeaderUtilityItem,\r\n} from '../../shell-config';\r\n\r\nconst DEFAULT_LANGUAGE_OPTIONS: ShellHeaderLanguageOption[] = [\r\n { code: 'zh-CN', label: '简体中文' },\r\n { code: 'en-US', label: 'English' },\r\n];\r\n\r\ntype HeaderNotificationItem = ShellHeaderNotificationItem & NotificationCenterItem;\r\n\r\nconst DEFAULT_NOTIFICATION_ITEMS: HeaderNotificationItem[] = [\r\n {\r\n id: 'n-1',\r\n title: '平台升级提醒',\r\n description: '下周二 22:00 将进行基座版本升级,请提前安排发布窗口。',\r\n time: '2 分钟前',\r\n unread: true,\r\n },\r\n {\r\n id: 'n-2',\r\n title: '审批待处理',\r\n description: '你有 3 条权限变更审批待处理,请及时确认。',\r\n time: '10 分钟前',\r\n unread: true,\r\n },\r\n {\r\n id: 'n-3',\r\n title: '系统通知',\r\n description: '统一登录服务已恢复,相关业务可正常访问。',\r\n time: '1 小时前',\r\n unread: false,\r\n },\r\n];\r\n\r\n@Component({\r\n selector: 'p-header',\r\n imports: [LucideAngularModule, NotificationCenter, PlatformInputDirective],\r\n templateUrl: './header.html',\r\n styleUrl: './header.scss',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n host: {\r\n '(document:keydown.escape)': 'onEscape()',\r\n '(document:fullscreenchange)': 'onFullscreenChange()',\r\n },\r\n})\r\nexport class AppHeader {\r\n private readonly shellConfig = injectShellConfig();\r\n private readonly document = inject(DOCUMENT);\r\n\r\n protected readonly brand = this.shellConfig.brand;\r\n protected readonly headerConfig = this.shellConfig.header;\r\n protected readonly utilityItems = this.headerConfig.utilityItems ?? [];\r\n protected readonly languageOptions = this.headerConfig.languages ?? DEFAULT_LANGUAGE_OPTIONS;\r\n protected readonly notificationItems = signal<HeaderNotificationItem[]>(\r\n (this.headerConfig.notifications ?? DEFAULT_NOTIFICATION_ITEMS).map((item, index) => ({\r\n unread: (item as HeaderNotificationItem).unread ?? true,\r\n id: (item as HeaderNotificationItem).id ?? `notification-${index + 1}`,\r\n ...item,\r\n })),\r\n );\r\n protected readonly filteredNotifications = computed(() => this.notificationItems());\r\n protected readonly unreadNotificationCount = computed(() =>\r\n this.notificationItems().filter((item) => item.unread).length,\r\n );\r\n\r\n protected readonly isSearchOpen = signal(false);\r\n protected readonly searchKeyword = signal('');\r\n protected readonly activeCategory = signal(this.headerConfig.categories[0]?.id ?? 'all');\r\n protected readonly openUtilityPanel = signal<'language' | 'notifications' | null>(null);\r\n protected readonly isMobileUtilityMenuOpen = signal(false);\r\n protected readonly currentLanguage = signal(this.languageOptions[0]?.code ?? 'zh-CN');\r\n protected readonly isDarkTheme = signal(false);\r\n protected readonly isFullscreen = signal(false);\r\n protected readonly searchIcon = SearchIcon;\r\n protected readonly closeIcon = XIcon;\r\n protected readonly moreIcon = EllipsisIcon;\r\n protected readonly utilityIcons: Record<string, LucideIconData> = {\r\n language: GlobeIcon,\r\n theme: MonitorCogIcon,\r\n notifications: BellIcon,\r\n fullscreen: MaximizeIcon,\r\n fullscreenExit: MinimizeIcon,\r\n check: CheckIcon,\r\n };\r\n\r\n constructor() {\r\n this.isDarkTheme.set(this.document.documentElement.dataset['theme'] === 'dark');\r\n this.isFullscreen.set(Boolean(this.document.fullscreenElement));\r\n this.document.documentElement.lang = this.currentLanguage();\r\n }\r\n\r\n protected openSearchDialog(): void {\r\n this.openUtilityPanel.set(null);\r\n this.isSearchOpen.set(true);\r\n }\r\n\r\n protected closeSearchDialog(): void {\r\n this.isSearchOpen.set(false);\r\n }\r\n\r\n protected setCategory(categoryId: string): void {\r\n this.activeCategory.set(categoryId);\r\n }\r\n\r\n protected onSearchInput(event: Event): void {\r\n const target = event.target;\r\n if (!(target instanceof HTMLInputElement)) {\r\n return;\r\n }\r\n\r\n this.searchKeyword.set(target.value);\r\n }\r\n\r\n protected onEscape(): void {\r\n if (this.isSearchOpen()) {\r\n this.closeSearchDialog();\r\n return;\r\n }\r\n\r\n if (this.isMobileUtilityMenuOpen()) {\r\n this.isMobileUtilityMenuOpen.set(false);\r\n }\r\n\r\n this.openUtilityPanel.set(null);\r\n }\r\n\r\n protected onFullscreenChange(): void {\r\n this.isFullscreen.set(Boolean(this.document.fullscreenElement));\r\n }\r\n\r\n protected runHeaderAction(): void {\r\n this.headerConfig.actionButton?.onClick();\r\n }\r\n\r\n protected runUtilityAction(item: ShellHeaderUtilityItem): void {\r\n switch (item.kind) {\r\n case 'language':\r\n this.toggleUtilityPanel('language');\r\n return;\r\n case 'notifications':\r\n this.toggleUtilityPanel('notifications');\r\n return;\r\n case 'theme':\r\n this.toggleTheme();\r\n return;\r\n case 'fullscreen':\r\n void this.toggleFullscreen();\r\n return;\r\n default:\r\n item.onClick?.();\r\n }\r\n }\r\n\r\n protected toggleMobileUtilityMenu(): void {\r\n this.isMobileUtilityMenuOpen.update((open) => !open);\r\n if (this.isMobileUtilityMenuOpen()) {\r\n this.openUtilityPanel.set(null);\r\n }\r\n }\r\n\r\n protected runMobileUtilityAction(item: ShellHeaderUtilityItem): void {\r\n this.runUtilityAction(item);\r\n\r\n if (item.kind === 'theme' || item.kind === 'fullscreen' || item.kind === 'custom') {\r\n this.isMobileUtilityMenuOpen.set(false);\r\n }\r\n }\r\n\r\n protected headerStatusText(): string | null {\r\n return this.headerConfig.statusText?.() ?? null;\r\n }\r\n\r\n protected profileBadge(value: string): string {\r\n return value.trim().slice(0, 2).toUpperCase();\r\n }\r\n\r\n protected utilityButtonText(item: ShellHeaderUtilityItem): string {\r\n switch (item.kind) {\r\n case 'language':\r\n return this.currentLanguage() === 'zh-CN' ? '中' : 'EN';\r\n case 'theme':\r\n return this.isDarkTheme() ? 'WB' : 'BW';\r\n case 'notifications':\r\n return 'NT';\r\n case 'fullscreen':\r\n return this.isFullscreen() ? 'EX' : 'FS';\r\n default:\r\n return item.iconText;\r\n }\r\n }\r\n\r\n protected utilityButtonIcon(item: ShellHeaderUtilityItem): LucideIconData | null {\r\n if (item.iconName && this.utilityIcons[item.iconName]) {\r\n return this.utilityIcons[item.iconName];\r\n }\r\n\r\n switch (item.kind) {\r\n case 'language':\r\n return this.utilityIcons['language'];\r\n case 'theme':\r\n return this.utilityIcons['theme'];\r\n case 'notifications':\r\n return this.utilityIcons['notifications'];\r\n case 'fullscreen':\r\n return this.isFullscreen() ? this.utilityIcons['fullscreenExit'] : this.utilityIcons['fullscreen'];\r\n default:\r\n return null;\r\n }\r\n }\r\n\r\n protected utilityBadge(item: ShellHeaderUtilityItem): string | number | undefined {\r\n if (item.kind === 'notifications') {\r\n const unread = this.unreadNotificationCount();\r\n return unread > 0 ? unread : undefined;\r\n }\r\n\r\n return item.badge;\r\n }\r\n\r\n protected isUtilityPanelOpen(panel: 'language' | 'notifications'): boolean {\r\n return this.openUtilityPanel() === panel;\r\n }\r\n\r\n protected selectLanguage(code: string): void {\r\n this.currentLanguage.set(code);\r\n this.document.documentElement.lang = code;\r\n this.openUtilityPanel.set(null);\r\n }\r\n\r\n protected onNotificationSelect(item: NotificationCenterItem): void {\r\n this.notificationItems.update((items) =>\r\n items.map((entry) =>\r\n entry.id === item.id ? { ...entry, unread: false } : entry,\r\n ),\r\n );\r\n }\r\n\r\n protected onNotificationMarkAll(): void {\r\n this.notificationItems.update((items) =>\r\n items.map((entry) => ({\r\n ...entry,\r\n unread: false,\r\n })),\r\n );\r\n }\r\n\r\n protected onNotificationClear(): void {\r\n this.notificationItems.set([]);\r\n }\r\n\r\n private toggleUtilityPanel(panel: 'language' | 'notifications'): void {\r\n this.isMobileUtilityMenuOpen.set(false);\r\n this.openUtilityPanel.update((currentPanel) => (currentPanel === panel ? null : panel));\r\n }\r\n\r\n private toggleTheme(): void {\r\n this.isDarkTheme.update((value) => !value);\r\n this.document.documentElement.dataset['theme'] = this.isDarkTheme() ? 'dark' : 'light';\r\n }\r\n\r\n private async toggleFullscreen(): Promise<void> {\r\n if (this.document.fullscreenElement) {\r\n if (this.document.exitFullscreen) {\r\n await this.document.exitFullscreen();\r\n }\r\n this.isFullscreen.set(false);\r\n return;\r\n }\r\n\r\n if (this.document.documentElement.requestFullscreen) {\r\n await this.document.documentElement.requestFullscreen();\r\n }\r\n this.isFullscreen.set(Boolean(this.document.fullscreenElement));\r\n }\r\n}\r\n","<header class=\"app-header\" role=\"banner\">\r\n <button\r\n type=\"button\"\r\n class=\"header-search-trigger\"\r\n [attr.aria-label]=\"headerConfig.dialogLabel\"\r\n (click)=\"openSearchDialog()\"\r\n >\r\n <lucide-icon class=\"header-search-trigger__icon\" aria-hidden=\"true\" [img]=\"searchIcon\" [size]=\"14\" [strokeWidth]=\"1.85\" />\r\n <span class=\"header-search-trigger__text\">{{ headerConfig.inputPlaceholder }}</span>\r\n </button>\r\n\r\n <div class=\"app-header__utilities\">\r\n <div class=\"app-header__utility-list\">\r\n @for (item of utilityItems; track item.ariaLabel) {\r\n <div class=\"app-header__utility-item\">\r\n <button\r\n type=\"button\"\r\n class=\"app-header__utility-btn\"\r\n [class.is-active]=\"\r\n (item.kind === 'language' && isUtilityPanelOpen('language')) ||\r\n (item.kind === 'notifications' && isUtilityPanelOpen('notifications'))\r\n \"\r\n [attr.aria-label]=\"item.ariaLabel\"\r\n (click)=\"runUtilityAction(item)\"\r\n >\r\n @if (utilityButtonIcon(item); as icon) {\r\n <lucide-icon aria-hidden=\"true\" [img]=\"icon\" [size]=\"16\" [strokeWidth]=\"1.85\" />\r\n } @else {\r\n <span aria-hidden=\"true\">{{ utilityButtonText(item) }}</span>\r\n }\r\n @if (utilityBadge(item) !== undefined) {\r\n <span class=\"app-header__utility-badge\">{{ utilityBadge(item) }}</span>\r\n }\r\n </button>\r\n\r\n @if (item.kind === 'language' && isUtilityPanelOpen('language')) {\r\n <section class=\"app-header__utility-panel\" role=\"menu\" aria-label=\"语言切换\">\r\n <h4 class=\"app-header__panel-title\">语言</h4>\r\n <div class=\"app-header__panel-list\">\r\n @for (language of languageOptions; track language.code) {\r\n <button\r\n type=\"button\"\r\n class=\"app-header__panel-item\"\r\n [class.is-selected]=\"currentLanguage() === language.code\"\r\n (click)=\"selectLanguage(language.code)\"\r\n >\r\n <span>{{ language.label }}</span>\r\n @if (currentLanguage() === language.code) {\r\n <span class=\"app-header__panel-mark\">\r\n <lucide-icon aria-hidden=\"true\" [img]=\"utilityIcons['check']\" [size]=\"12\" [strokeWidth]=\"2\"></lucide-icon>\r\n </span>\r\n }\r\n </button>\r\n }\r\n </div>\r\n </section>\r\n }\r\n\r\n @if (item.kind === 'notifications' && isUtilityPanelOpen('notifications')) {\r\n <section\r\n class=\"app-header__utility-panel app-header__utility-panel--notifications\"\r\n role=\"menu\"\r\n [attr.aria-label]=\"'通知中心'\"\r\n >\r\n <s-notification-center\r\n [title]=\"'通知中心'\"\r\n [items]=\"filteredNotifications()\"\r\n [showActions]=\"true\"\r\n [showMarkAll]=\"true\"\r\n (itemSelected)=\"onNotificationSelect($event)\"\r\n (markAllAsRead)=\"onNotificationMarkAll()\"\r\n (clearAll)=\"onNotificationClear()\"\r\n />\r\n </section>\r\n }\r\n </div>\r\n }\r\n </div>\r\n\r\n @if (utilityItems.length) {\r\n <div class=\"app-header__utility-more\">\r\n <button\r\n type=\"button\"\r\n class=\"app-header__utility-btn app-header__utility-btn--more\"\r\n [class.is-active]=\"isMobileUtilityMenuOpen()\"\r\n aria-label=\"更多操作\"\r\n (click)=\"toggleMobileUtilityMenu()\"\r\n >\r\n <lucide-icon aria-hidden=\"true\" [img]=\"moreIcon\" [size]=\"16\" [strokeWidth]=\"1.9\" />\r\n </button>\r\n\r\n @if (isMobileUtilityMenuOpen()) {\r\n <section class=\"app-header__utility-panel app-header__utility-panel--mobile\" role=\"menu\" aria-label=\"更多操作\">\r\n <div class=\"app-header__utility-grid\">\r\n @for (item of utilityItems; track item.ariaLabel) {\r\n <button\r\n type=\"button\"\r\n class=\"app-header__utility-btn\"\r\n [attr.aria-label]=\"item.ariaLabel\"\r\n (click)=\"runMobileUtilityAction(item)\"\r\n >\r\n @if (utilityButtonIcon(item); as icon) {\r\n <lucide-icon aria-hidden=\"true\" [img]=\"icon\" [size]=\"16\" [strokeWidth]=\"1.85\" />\r\n } @else {\r\n <span aria-hidden=\"true\">{{ utilityButtonText(item) }}</span>\r\n }\r\n @if (utilityBadge(item) !== undefined) {\r\n <span class=\"app-header__utility-badge\">{{ utilityBadge(item) }}</span>\r\n }\r\n </button>\r\n }\r\n </div>\r\n </section>\r\n }\r\n </div>\r\n }\r\n\r\n @if (headerConfig.profileBadgeText; as profileBadgeTextFn) {\r\n <div class=\"app-header__profile\" [attr.aria-label]=\"brand.title\">\r\n <span>{{ profileBadge(profileBadgeTextFn()) }}</span>\r\n </div>\r\n }\r\n\r\n @if (headerStatusText(); as statusText) {\r\n <div class=\"app-header__status\">{{ statusText }}</div>\r\n }\r\n\r\n @if (headerConfig.actionButton; as actionButton) {\r\n <button\r\n type=\"button\"\r\n class=\"app-header__action\"\r\n [attr.aria-label]=\"actionButton.ariaLabel ?? actionButton.label\"\r\n (click)=\"runHeaderAction()\"\r\n >\r\n {{ actionButton.label }}\r\n </button>\r\n }\r\n </div>\r\n</header>\r\n\r\n@if (isSearchOpen()) {\r\n <div class=\"search-dialog-mask\" (click)=\"closeSearchDialog()\">\r\n <section\r\n class=\"search-dialog\"\r\n role=\"dialog\"\r\n aria-modal=\"true\"\r\n [attr.aria-label]=\"headerConfig.dialogLabel\"\r\n (click)=\"$event.stopPropagation()\"\r\n >\r\n <div class=\"search-dialog__top\">\r\n <label class=\"search-dialog__input-wrap\" for=\"headerGlobalSearch\">\r\n <lucide-icon class=\"search-dialog__icon\" aria-hidden=\"true\" [img]=\"searchIcon\" [size]=\"14\" [strokeWidth]=\"1.85\" />\n <input\n pInput\n variant=\"bare\"\n id=\"headerGlobalSearch\"\n type=\"text\"\r\n [value]=\"searchKeyword()\"\r\n [placeholder]=\"headerConfig.inputPlaceholder\"\r\n (input)=\"onSearchInput($event)\"\r\n />\r\n </label>\r\n <button\r\n type=\"button\"\r\n class=\"search-dialog__close\"\r\n [attr.aria-label]=\"headerConfig.closeLabel\"\r\n (click)=\"closeSearchDialog()\"\r\n >\r\n <lucide-icon aria-hidden=\"true\" [img]=\"closeIcon\" [size]=\"16\" [strokeWidth]=\"1.9\" />\r\n </button>\r\n </div>\r\n\r\n <nav class=\"search-tabs\" aria-label=\"搜索分类\">\r\n @for (item of headerConfig.categories; track item.id) {\r\n <button\r\n type=\"button\"\r\n class=\"search-tabs__item\"\r\n [class.is-active]=\"activeCategory() === item.id\"\r\n (click)=\"setCategory(item.id)\"\r\n >\r\n {{ item.label }}\r\n </button>\r\n }\r\n </nav>\r\n\r\n <div class=\"search-dialog__body\">\r\n <div class=\"search-result-panel\">\r\n <h4 class=\"search-panel-title\">搜索结果</h4>\r\n <div class=\"search-result-list\">\r\n @for (result of headerConfig.results; track result.title) {\r\n <button type=\"button\" class=\"search-result-item\">\r\n <span class=\"search-result-item__title\">{{ result.title }}</span>\r\n <span class=\"search-result-item__meta\">{{ result.meta }} / {{ result.owner }}</span>\r\n </button>\r\n }\r\n </div>\r\n </div>\r\n </div>\r\n </section>\r\n </div>\r\n}\r\n","/**\r\n * 侧边栏组件\r\n * 用于显示应用的侧边导航菜单,包含导航项和对应的图标\r\n */\r\nimport { ChangeDetectionStrategy, Component } from '@angular/core';\r\nimport { RouterLink, RouterLinkActive } from '@angular/router';\r\nimport {\r\n BlocksIcon,\r\n CalendarDaysIcon,\r\n GaugeIcon,\r\n KeyRoundIcon,\r\n LucideAngularModule,\r\n type LucideIconData,\r\n Settings2Icon,\r\n ShieldIcon,\r\n UsersIcon,\r\n} from 'lucide-angular';\r\nimport { injectShellConfig } from '../../shell-config';\r\n\r\n/**\r\n * 侧边栏组件\r\n * 实现了导航项的显示、图标管理和首字母获取功能\r\n */\r\n@Component({\r\n selector: 'p-aside',\r\n imports: [RouterLink, RouterLinkActive, LucideAngularModule],\r\n templateUrl: './sidebar.html',\r\n styleUrl: './sidebar.scss',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class Aside {\r\n /**\r\n * 侧边栏配置\r\n * 从shell配置中获取\r\n */\r\n protected readonly sidebarConfig = injectShellConfig().sidebar;\r\n\r\n /**\r\n * 设置图标\r\n */\r\n protected readonly settingsIcon = Settings2Icon;\r\n\r\n /**\r\n * 导航图标映射\r\n * 用于根据图标名称获取对应的Lucide图标组件\r\n */\r\n private readonly navIcons: Record<string, LucideIconData> = {\r\n calendar: CalendarDaysIcon,\r\n overview: GaugeIcon,\r\n users: UsersIcon,\r\n roles: ShieldIcon,\r\n permissions: KeyRoundIcon,\r\n tenants: BlocksIcon,\r\n settings: Settings2Icon,\r\n };\r\n\r\n /**\r\n * 获取导航项标签的首字母\r\n * @param label - 导航项标签\r\n * @returns 首字母,若标签为空则返回'?'\r\n */\r\n protected navInitial(label: string): string {\r\n return label.trim().charAt(0) || '?';\r\n }\r\n\r\n /**\r\n * 获取导航项的图标\r\n * @param iconName - 图标名称\r\n * @returns 对应的Lucide图标组件,若未找到则返回null\r\n */\r\n protected navIcon(iconName?: string): LucideIconData | null {\r\n if (!iconName) {\r\n return null;\r\n }\r\n\r\n return this.navIcons[iconName] ?? null;\r\n }\r\n}\r\n","@if (sidebarConfig.avatarSrc) {\r\n <div class=\"aside-profile\">\r\n <img\r\n [src]=\"sidebarConfig.avatarSrc\"\r\n [alt]=\"sidebarConfig.avatarAlt ?? '用户头像'\"\r\n class=\"aside-profile-avatar\"\r\n />\r\n </div>\r\n}\r\n\r\n<nav class=\"aside-nav\">\r\n <ul class=\"aside-list\">\r\n @for (item of sidebarConfig.items; track item.route) {\r\n <li class=\"aside-item\">\r\n <a\r\n [routerLink]=\"item.route\"\r\n routerLinkActive=\"aside-link--active\"\r\n class=\"aside-link\"\r\n >\r\n @if (navIcon(item.iconName); as icon) {\r\n <lucide-icon class=\"aside-link-svg\" [img]=\"icon\" [size]=\"18\" [strokeWidth]=\"1.9\" aria-hidden=\"true\"></lucide-icon>\r\n } @else if (item.iconClass) {\r\n <i class=\"aside-link-icon\" [class]=\"item.iconClass + ' aside-link-icon'\" aria-hidden=\"true\"></i>\r\n } @else {\r\n <span class=\"aside-link-fallback\" aria-hidden=\"true\">{{ navInitial(item.label) }}</span>\r\n }\r\n <span class=\"aside-link-text\">{{ item.label }}</span>\r\n </a>\r\n </li>\r\n }\r\n </ul>\r\n</nav>\r\n\r\n<div class=\"aside-footer\">\r\n <button\r\n type=\"button\"\r\n class=\"aside-footer-btn\"\r\n [attr.aria-label]=\"sidebarConfig.settingsAriaLabel ?? '设置'\"\r\n >\r\n <lucide-icon [img]=\"settingsIcon\" [size]=\"18\" [strokeWidth]=\"1.9\" aria-hidden=\"true\"></lucide-icon>\r\n </button>\r\n</div>\r\n","import { ChangeDetectionStrategy, Component } from '@angular/core';\r\n\r\n@Component({\r\n selector: 'p-empty-footer',\r\n imports: [],\r\n template: '',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class EmptyFooter {}\r\n","import { ChangeDetectionStrategy, Component, inject } from '@angular/core';\r\nimport { SHELL_CONFIG } from '../../shell-config';\r\n\r\n@Component({\r\n selector: 'p-minimal-header',\r\n imports: [],\r\n template: `\r\n <header class=\"app-header app-header--minimal\" role=\"banner\">\r\n <div class=\"app-header__brand\">{{ brand.title }}</div>\r\n </header>\r\n `,\r\n styleUrl: './header.scss',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class MinimalHeader {\r\n protected readonly brand = inject(SHELL_CONFIG).brand;\r\n}\r\n","/**\r\n * 顶部导航栏头部组件\r\n * 用于显示应用的顶部导航栏,包含品牌标识、搜索功能和导航菜单项\r\n */\r\nimport { ChangeDetectionStrategy, Component, inject } from '@angular/core';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { RouterLink, RouterLinkActive } from '@angular/router';\r\nimport { PlatformInputDirective } from '../../../../shared/directives';\r\nimport { SHELL_CONFIG } from '../../shell-config';\r\n\r\n/**\r\n * 顶部导航栏头部组件\r\n * 实现了搜索功能、分类选择和键盘事件处理\r\n */\r\n@Component({\r\n selector: 'p-top-nav-header',\r\n imports: [FormsModule, RouterLink, RouterLinkActive, PlatformInputDirective],\r\n templateUrl: './top-nav-header.html',\r\n styleUrl: './top-nav-header.scss',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n host: {\r\n // 监听文档的Escape键事件,用于关闭搜索对话框\r\n '(document:keydown.escape)': 'onEscape()',\r\n },\r\n})\r\nexport class TopNavHeader {\r\n /**\r\n * 注入shell配置\r\n */\r\n private readonly shellConfig = inject(SHELL_CONFIG);\r\n\r\n /**\r\n * 搜索对话框是否打开\r\n */\r\n protected isSearchOpen = false;\r\n\r\n /**\r\n * 搜索关键词\r\n */\r\n protected searchKeyword = '';\r\n\r\n /**\r\n * 当前激活的分类ID\r\n * 默认使用配置中的第一个分类,如果没有则使用'all'\r\n */\r\n protected activeCategory = this.shellConfig.header.categories[0]?.id ?? 'all';\r\n\r\n /**\r\n * 品牌配置\r\n */\r\n protected readonly brand = this.shellConfig.brand;\r\n\r\n /**\r\n * 头部配置\r\n */\r\n protected readonly headerConfig = this.shellConfig.header;\r\n\r\n /**\r\n * 导航菜单项\r\n */\r\n protected readonly navItems = this.shellConfig.sidebar.items;\r\n\r\n /**\r\n * 打开搜索对话框\r\n */\r\n protected openSearchDialog(): void {\r\n this.isSearchOpen = true;\r\n }\r\n\r\n /**\r\n * 关闭搜索对话框\r\n */\r\n protected closeSearchDialog(): void {\r\n this.isSearchOpen = false;\r\n }\r\n\r\n /**\r\n * 设置激活的分类\r\n * @param categoryId - 分类ID\r\n */\r\n protected setCategory(categoryId: string): void {\r\n this.activeCategory = categoryId;\r\n }\r\n\r\n /**\r\n * 处理Escape键事件\r\n * 如果搜索对话框打开,则关闭它\r\n */\r\n protected onEscape(): void {\r\n if (this.isSearchOpen) {\r\n this.closeSearchDialog();\r\n }\r\n }\r\n}\r\n","<header class=\"top-nav-header\" role=\"banner\">\r\n <div class=\"top-nav-header__brand\">{{ brand.title }}</div>\r\n\r\n <nav class=\"top-nav-header__nav\" aria-label=\"主导航\">\r\n @for (item of navItems; track item.route) {\r\n <a\r\n [routerLink]=\"item.route\"\r\n routerLinkActive=\"top-nav-header__link--active\"\r\n class=\"top-nav-header__link\"\r\n >\r\n <i class=\"iconfont\" [class]=\"item.iconClass + ' top-nav-header__icon'\" aria-hidden=\"true\"></i>\r\n <span>{{ item.label }}</span>\r\n </a>\r\n }\r\n </nav>\r\n\r\n <button\r\n type=\"button\"\r\n class=\"top-nav-header__search\"\r\n [attr.aria-label]=\"headerConfig.dialogLabel\"\r\n (click)=\"openSearchDialog()\"\r\n >\r\n <i class=\"iconfont icon-search\" aria-hidden=\"true\"></i>\r\n <span>{{ headerConfig.triggerLabel }}</span>\r\n </button>\r\n</header>\r\n\r\n@if (isSearchOpen) {\r\n <div class=\"search-dialog-mask\" (click)=\"closeSearchDialog()\">\r\n <section\r\n class=\"search-dialog\"\r\n role=\"dialog\"\r\n aria-modal=\"true\"\r\n [attr.aria-label]=\"headerConfig.dialogLabel\"\r\n (click)=\"$event.stopPropagation()\"\r\n >\r\n <div class=\"search-dialog__top\">\r\n <label class=\"search-dialog__input-wrap\" for=\"topNavGlobalSearch\">\r\n <i class=\"iconfont icon-search\" aria-hidden=\"true\"></i>\n <input\n pInput\n variant=\"bare\"\n id=\"topNavGlobalSearch\"\n type=\"text\"\r\n [(ngModel)]=\"searchKeyword\"\r\n [placeholder]=\"headerConfig.inputPlaceholder\"\r\n />\r\n </label>\r\n <button\r\n type=\"button\"\r\n class=\"search-dialog__close\"\r\n [attr.aria-label]=\"headerConfig.closeLabel\"\r\n (click)=\"closeSearchDialog()\"\r\n >\r\n ×\r\n </button>\r\n </div>\r\n\r\n <nav class=\"search-tabs\" aria-label=\"搜索分类\">\r\n @for (item of headerConfig.categories; track item.id) {\r\n <button\r\n type=\"button\"\r\n class=\"search-tabs__item\"\r\n [class.is-active]=\"activeCategory === item.id\"\r\n (click)=\"setCategory(item.id)\"\r\n >\r\n {{ item.label }}\r\n </button>\r\n }\r\n </nav>\r\n\r\n <div class=\"search-dialog__body\">\r\n <div class=\"search-result-panel\">\r\n <h4 class=\"search-panel-title\">搜索结果</h4>\r\n <div class=\"search-result-list\">\r\n @for (result of headerConfig.results; track result.title) {\r\n <button type=\"button\" class=\"search-result-item\">\r\n <span class=\"search-result-item__title\">{{ result.title }}</span>\r\n <span class=\"search-result-item__meta\">{{ result.meta }} · {{ result.owner }}</span>\r\n </button>\r\n }\r\n </div>\r\n </div>\r\n </div>\r\n </section>\r\n </div>\r\n}\r\n","import { ChangeDetectionStrategy, Component } from '@angular/core';\r\n\r\n@Component({\r\n selector: 'p-empty-sidebar',\r\n imports: [],\r\n template: '',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class EmptySidebar {}\r\n","import { ChangeDetectionStrategy, Component, computed, inject } from '@angular/core';\r\nimport {\r\n AppFooter,\r\n AppHeader,\r\n AppShell,\r\n Aside,\r\n Content,\r\n EmptyFooter,\r\n EmptySidebar,\r\n MinimalHeader,\r\n TopNavHeader,\r\n} from '../../layout-parts';\r\nimport { resolveShellParts, SHELL_CONFIG } from '../../shell-config';\r\n\r\n@Component({\r\n selector: 'p-sidebar-header-layout',\r\n imports: [AppShell, AppHeader, Aside, Content, AppFooter, EmptyFooter, MinimalHeader, TopNavHeader, EmptySidebar],\r\n templateUrl: './sidebar-header-layout.html',\r\n styleUrl: './sidebar-header-layout.scss',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class SidebarHeaderLayout {\r\n private readonly shellConfig = inject(SHELL_CONFIG);\r\n\r\n protected readonly parts = computed(() => resolveShellParts(this.shellConfig));\r\n}\r\n","<s-shell>\r\n @switch (parts().header) {\r\n @case ('minimal') {\r\n <p-minimal-header sShellHeader></p-minimal-header>\r\n }\r\n @case ('top-nav') {\r\n <p-top-nav-header sShellHeader></p-top-nav-header>\r\n }\r\n @default {\r\n <p-header sShellHeader></p-header>\r\n }\r\n }\r\n\r\n @switch (parts().sidebar) {\r\n @case ('none') {\r\n <p-empty-sidebar sShellSidebar></p-empty-sidebar>\r\n }\r\n @default {\r\n <p-aside sShellSidebar></p-aside>\r\n }\r\n }\r\n\r\n <s-content sShellContent></s-content>\r\n\r\n @switch (parts().footer) {\r\n @case ('empty') {\r\n <p-empty-footer sShellFooter></p-empty-footer>\r\n }\r\n @default {\r\n <p-footer sShellFooter>\r\n @if (parts().sidebar === 'standard') {\r\n <p-aside class=\"aside-mobile\"></p-aside>\r\n }\r\n </p-footer>\r\n }\r\n }\r\n</s-shell>\r\n","import { ChangeDetectionStrategy, Component, computed, inject } from '@angular/core';\r\nimport { AppFooter, AppHeader, Content, MinimalHeader, TopNavHeader } from '../../layout-parts';\r\nimport { resolveShellParts, SHELL_CONFIG } from '../../shell-config';\r\n\r\n@Component({\r\n selector: 'p-top-nav-layout',\r\n imports: [AppHeader, TopNavHeader, MinimalHeader, Content, AppFooter],\r\n templateUrl: './top-nav-layout.html',\r\n styleUrl: './top-nav-layout.scss',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class TopNavLayout {\r\n private readonly shellConfig = inject(SHELL_CONFIG);\r\n\r\n protected readonly parts = computed(() => resolveShellParts(this.shellConfig));\r\n}\r\n","<div class=\"top-nav-layout\">\r\n <div class=\"top-nav-layout__header\">\r\n @switch (parts().header) {\r\n @case ('minimal') {\r\n <p-minimal-header></p-minimal-header>\r\n }\r\n @case ('top-nav') {\r\n <p-top-nav-header></p-top-nav-header>\r\n }\r\n @default {\r\n <p-header></p-header>\r\n }\r\n }\r\n </div>\r\n\r\n <div class=\"top-nav-layout__content\">\r\n <s-content></s-content>\r\n </div>\r\n\r\n @if (parts().footer === 'standard') {\r\n <div class=\"top-nav-layout__footer\">\r\n <p-footer></p-footer>\r\n </div>\r\n }\r\n</div>\r\n","/**\r\n * Shell布局组件\r\n * 根据配置的布局模式动态渲染不同的布局组件\r\n */\r\nimport { ChangeDetectionStrategy, Component, computed, inject } from '@angular/core';\r\nimport { SHELL_CONFIG } from '../shell-config';\r\nimport { SidebarHeaderLayout } from './sidebar-header';\r\nimport { TopNavLayout } from './top-nav';\r\n\r\n/**\r\n * Shell布局组件\r\n * 用于根据配置的布局模式渲染对应的布局组件\r\n */\r\n@Component({\r\n selector: 's-shell-layout',\r\n imports: [SidebarHeaderLayout, TopNavLayout],\r\n template: `\r\n @switch (layoutMode()) {\r\n @case ('top-nav') {\r\n <p-top-nav-layout></p-top-nav-layout>\r\n }\r\n @case ('sidebar-header') {\r\n <p-sidebar-header-layout></p-sidebar-header-layout>\r\n }\r\n @default {\r\n <p-sidebar-header-layout></p-sidebar-header-layout>\r\n }\r\n }\r\n `,\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class ShellLayout {\r\n /**\r\n * 注入shell配置\r\n */\r\n private readonly shellConfig = inject(SHELL_CONFIG);\r\n\r\n /**\r\n * 计算属性:获取布局模式\r\n * 如果配置中未指定布局模式,则默认为'sidebar-header'\r\n */\r\n protected readonly layoutMode = computed(\r\n () => this.shellConfig.layoutMode ?? 'sidebar-header',\r\n );\r\n}\r\n","/**\n * Public entry point for the configurable shell layout system.\n */\nexport * from './config';\nexport * from './layout-modes';\nexport * from './layout-parts';\n","/**\r\n * 操作菜单组件\r\n * 用于显示一组操作选项,支持点击触发、键盘导航和自动关闭\r\n */\r\nimport {\r\n ChangeDetectionStrategy,\r\n Component,\r\n ElementRef,\r\n inject,\r\n input,\r\n output,\r\n signal,\r\n} from '@angular/core';\r\n\r\n/**\r\n * 操作菜单项接口\r\n * 定义菜单项的属性\r\n */\r\nexport interface ActionMenuItem {\r\n /** 菜单项ID */\r\n id: string;\r\n /** 菜单项标签文本 */\r\n label: string;\r\n /** 无障碍标签 */\r\n ariaLabel?: string;\r\n /** 菜单项色调,默认为'default',可选'danger'表示危险操作 */\r\n tone?: 'default' | 'danger';\r\n}\r\n\r\n/**\r\n * 操作菜单组件\r\n * 实现了菜单的显示/隐藏、点击操作、键盘事件处理等功能\r\n */\r\n@Component({\r\n selector: 's-action-menu',\r\n host: {\r\n '(document:keydown.escape)': 'onEscape()',\r\n '(document:click)': 'onDocumentClick($event)',\r\n },\r\n templateUrl: './s-action-menu.html',\r\n styleUrl: './s-action-menu.scss',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class ActionMenuComponent {\r\n /**\r\n * 注入宿主元素引用\r\n * 用于检测点击事件是否发生在组件外部\r\n */\r\n private readonly hostElement = inject(ElementRef<HTMLElement>);\r\n\r\n /**\r\n * 输入属性:菜单项列表\r\n * 默认为空数组\r\n */\r\n readonly items = input<readonly ActionMenuItem[]>([]);\r\n\r\n /**\r\n * 输入属性:触发按钮的无障碍标签\r\n * 默认为'打开操作菜单'\r\n */\r\n readonly triggerAriaLabel = input('打开操作菜单');\r\n\r\n /**\r\n * 输出事件:当选择菜单项时触发\r\n * 传递选中的菜单项ID\r\n */\r\n readonly actionSelected = output<string>();\r\n\r\n /**\r\n * 信号:菜单是否打开\r\n * 默认为false(关闭状态)\r\n */\r\n protected readonly isOpen = signal(false);\r\n\r\n /**\r\n * 监听文档的Escape键事件\r\n * 当按下Escape键时关闭菜单\r\n */\r\n protected onEscape(): void {\r\n this.isOpen.set(false);\r\n }\r\n\r\n /**\r\n * 监听文档的点击事件\r\n * 当点击发生在组件外部时关闭菜单\r\n * @param event - 点击事件对象\r\n */\r\n protected onDocumentClick(event: Event): void {\r\n const target = event.target;\r\n if (!(target instanceof Node)) {\r\n return;\r\n }\r\n\r\n if (!this.hostElement.nativeElement.contains(target)) {\r\n this.isOpen.set(false);\r\n }\r\n }\r\n\r\n /**\r\n * 切换菜单的打开/关闭状态\r\n */\r\n protected toggleMenu(): void {\r\n this.isOpen.update((open) => !open);\r\n }\r\n\r\n /**\r\n * 处理菜单项选择事件\r\n * 关闭菜单并触发actionSelected事件\r\n * @param actionId - 选中的菜单项ID\r\n */\r\n protected onActionSelected(actionId: string): void {\r\n this.isOpen.set(false);\r\n this.actionSelected.emit(actionId);\r\n }\r\n\r\n /**\r\n * 轨道函数,用于ngFor指令\r\n * 根据菜单项ID进行跟踪,提高渲染性能\r\n * @param _index - 索引(未使用)\r\n * @param item - 菜单项对象\r\n * @returns 菜单项ID\r\n */\r\n protected trackByActionId(_index: number, item: ActionMenuItem): string {\r\n return item.id;\r\n }\r\n}\r\n","<div class=\"action-menu\">\r\n <button\r\n type=\"button\"\r\n class=\"action-menu__trigger\"\r\n [class.is-active]=\"isOpen()\"\r\n [attr.aria-label]=\"triggerAriaLabel()\"\r\n (click)=\"toggleMenu()\"\r\n >\r\n +\r\n </button>\r\n\r\n @if (isOpen()) {\r\n <div class=\"action-menu__panel\" role=\"menu\" [attr.aria-label]=\"triggerAriaLabel()\">\r\n @for (item of items(); track trackByActionId($index, item)) {\r\n <button\r\n type=\"button\"\r\n class=\"action-menu__item\"\r\n [class.action-menu__item--danger]=\"item.tone === 'danger'\"\r\n [attr.aria-label]=\"item.ariaLabel ?? item.label\"\r\n (click)=\"onActionSelected(item.id)\"\r\n >\r\n {{ item.label }}\r\n </button>\r\n }\r\n </div>\r\n }\r\n</div>\r\n","/**\r\n * 头像组件\r\n * 用于显示用户头像,支持图片、文本和图标三种显示模式\r\n */\r\nimport { ChangeDetectionStrategy, Component, computed, input, output, signal } from '@angular/core';\r\nimport { LucideAngularModule, UserRoundIcon } from 'lucide-angular';\r\n\r\n/**\r\n * 头像形状类型\r\n * square: 方形\r\n * circle: 圆形\r\n */\r\nexport type AvatarShape = 'square' | 'circle';\r\n\r\n/**\r\n * 头像状态类型\r\n * default: 默认状态\r\n * disabled: 禁用状态\r\n */\r\nexport type AvatarStatus = 'default' | 'disabled';\r\n\r\n/**\r\n * 头像指示器类型\r\n * dot: 点状指示器\r\n * count: 数字计数指示器\r\n */\r\nexport type AvatarIndicatorType = 'dot' | 'count';\r\n\r\n/**\r\n * 头像组件\r\n * 支持显示图片、文本或默认图标,可配置形状、大小、状态和指示器\r\n */\r\n@Component({\r\n selector: 's-avatar',\r\n imports: [LucideAngularModule],\r\n templateUrl: './s-avatar.html',\r\n styleUrl: './s-avatar.scss',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class Avatar {\r\n /**\r\n * 输入属性:头像图片源\r\n * 默认为null,表示不使用图片\r\n */\r\n readonly src = input<string | null>(null);\r\n\r\n /**\r\n * 输入属性:图片替代文本\r\n * 默认为空字符串\r\n */\r\n readonly alt = input('');\r\n\r\n /**\r\n * 输入属性:头像文本\r\n * 当没有图片时显示,默认为空字符串\r\n */\r\n readonly text = input('');\r\n\r\n /**\r\n * 输入属性:头像形状\r\n * 默认为'square'(方形)\r\n */\r\n readonly shape = input<AvatarShape>('square');\r\n\r\n /**\r\n * 输入属性:头像状态\r\n * 默认为'default'(默认状态)\r\n */\r\n readonly status = input<AvatarStatus>('default');\r\n\r\n /**\r\n * 输入属性:头像大小\r\n * 默认为48px\r\n */\r\n readonly size = input(48);\r\n\r\n /**\r\n * 输入属性:指示器值\r\n * 可以是数字或null,null表示不显示指示器\r\n */\r\n readonly indicator = input<number | null>(null);\r\n\r\n /**\r\n * 输入属性:指示器类型\r\n * 默认为'count'(数字计数)\r\n */\r\n readonly indicatorType = input<AvatarIndicatorType>('count');\r\n\r\n readonly imageError = output<string>();\r\n\r\n /**\r\n * 用户图标组件\r\n * 当没有图片且没有文本时显示\r\n */\r\n protected readonly userIcon = UserRoundIcon;\r\n\r\n /**\r\n * 记录加载失败的图片地址,避免同一个失败地址反复触发请求\r\n */\r\n private readonly failedImageSrc = signal<string | null>(null);\r\n\r\n /**\r\n * 计算属性:显示文本\r\n * 取text的前两个字符,去除首尾空格\r\n */\r\n protected readonly displayText = computed(() => this.text().trim().slice(0, 2));\r\n\r\n /**\r\n * 计算属性:当前可显示的图片地址\r\n */\r\n protected readonly displayImageSrc = computed(() => {\r\n const src = this.src();\r\n return src && src !== this.failedImageSrc() ? src : null;\r\n });\r\n\r\n /**\r\n * 图片加载错误处理函数\r\n * 当图片加载失败时记录失败地址并通知外层组件\r\n */\r\n protected onImageError(): void {\r\n const src = this.src();\r\n if (!src) {\r\n return;\r\n }\r\n\r\n this.failedImageSrc.set(src);\r\n this.imageError.emit(src);\r\n }\r\n}\r\n","<div\r\n class=\"avatar\"\r\n [class.avatar--circle]=\"shape() === 'circle'\"\r\n [class.avatar--disabled]=\"status() === 'disabled'\"\r\n [style.--avatar-size.px]=\"size()\"\r\n>\r\n <div class=\"avatar__content\">\r\n @if (displayImageSrc(); as imageSrc) {\r\n <img class=\"avatar__image\" [src]=\"imageSrc\" [alt]=\"alt()\" (error)=\"onImageError()\" />\r\n } @else if (displayText()) {\r\n <span class=\"avatar__text\">{{ displayText() }}</span>\r\n } @else {\r\n <lucide-icon class=\"avatar__icon\" [img]=\"userIcon\" [size]=\"size() * 0.5\" [strokeWidth]=\"1.8\" aria-hidden=\"true\" />\r\n }\r\n </div>\r\n\r\n @if (indicator(); as value) {\r\n @if (indicatorType() === 'count') {\r\n <span class=\"avatar__badge\">{{ value }}</span>\r\n } @else {\r\n <span class=\"avatar__dot\"></span>\r\n }\r\n }\r\n</div>\r\n","/**\r\n * 头像组组件\r\n * 用于显示多个头像,支持限制显示数量和显示隐藏数量\r\n */\r\nimport { ChangeDetectionStrategy, Component, computed, input } from '@angular/core';\r\n\r\nimport type { AvatarIndicatorType, AvatarShape, AvatarStatus } from './s-avatar';\r\nimport { Avatar } from './s-avatar';\r\n\r\n/**\r\n * 头像组项接口\r\n * 定义头像组中每个头像的属性\r\n */\r\nexport interface AvatarGroupItem {\r\n /** 头像项ID */\r\n id: string;\r\n /** 头像图片源 */\r\n src?: string | null;\r\n /** 图片替代文本 */\r\n alt?: string;\r\n /** 头像文本 */\r\n text?: string;\r\n /** 头像形状 */\r\n shape?: AvatarShape;\r\n /** 头像状态 */\r\n status?: AvatarStatus;\r\n /** 指示器值 */\r\n indicator?: number | null;\r\n /** 指示器类型 */\r\n indicatorType?: AvatarIndicatorType;\r\n}\r\n\r\n/**\r\n * 头像组组件\r\n * 显示多个头像,支持限制最大显示数量,并显示隐藏的头像数量\r\n */\r\n@Component({\r\n selector: 's-avatar-group',\r\n imports: [Avatar],\r\n templateUrl: './s-avatar-group.html',\r\n styleUrl: './s-avatar-group.scss',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class AvatarGroup {\r\n /**\r\n * 输入属性:头像项列表\r\n * 默认为空数组\r\n */\r\n readonly items = input<readonly AvatarGroupItem[]>([]);\r\n\r\n /**\r\n * 输入属性:头像大小\r\n * 默认为48px\r\n */\r\n readonly size = input(48);\r\n\r\n /**\r\n * 输入属性:最大显示数量\r\n * 默认为4个\r\n */\r\n readonly max = input(4);\r\n\r\n /**\r\n * 计算属性:可见的头像项\r\n * 取items的前max个项\r\n */\r\n protected readonly visibleItems = computed(() => this.items().slice(0, this.max()));\r\n\r\n /**\r\n * 计算属性:隐藏的头像数量\r\n * 计算items长度与max的差值,确保结果不小于0\r\n */\r\n protected readonly hiddenCount = computed(() => Math.max(this.items().length - this.max(), 0));\r\n\r\n /**\r\n * 轨道函数,用于ngFor指令\r\n * 根据头像项ID进行跟踪,提高渲染性能\r\n * @param _index - 索引(未使用)\r\n * @param item - 头像项对象\r\n * @returns 头像项ID\r\n */\r\n protected trackById(_index: number, item: AvatarGroupItem): string {\r\n return item.id;\r\n }\r\n}\r\n","<div class=\"avatar-group\">\r\n @for (item of visibleItems(); track trackById($index, item); let index = $index) {\r\n <div class=\"avatar-group__item\" [style.z-index]=\"index + 1\">\r\n <s-avatar\r\n [src]=\"item.src ?? null\"\r\n [alt]=\"item.alt ?? ''\"\r\n [text]=\"item.text ?? ''\"\r\n [shape]=\"item.shape ?? 'circle'\"\r\n [status]=\"item.status ?? 'default'\"\r\n [indicator]=\"item.indicator ?? null\"\r\n [indicatorType]=\"item.indicatorType ?? 'count'\"\r\n [size]=\"size()\"\r\n />\r\n </div>\r\n }\r\n\r\n @if (hiddenCount()) {\r\n <div class=\"avatar-group__more\" [style.width.px]=\"size()\" [style.height.px]=\"size()\" [style.z-index]=\"visibleItems().length + 1\">\r\n +{{ hiddenCount() }}\r\n </div>\r\n }\r\n</div>\r\n","/**\r\n * 徽章组件\r\n * 用于显示通知计数、状态指示器等信息\r\n */\r\nimport { ChangeDetectionStrategy, Component, computed, input } from '@angular/core';\r\n\r\n/**\r\n * 徽章值类型\r\n * 支持数字、字符串或null\r\n */\r\nexport type BadgeValue = number | string | null;\r\n\r\n/**\r\n * 徽章组件\r\n * 支持显示数字、字符串、点状指示器,可配置位置偏移和溢出处理\r\n */\r\n@Component({\r\n selector: 's-badge',\r\n templateUrl: './s-badge.html',\r\n styleUrl: './s-badge.scss',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class Badge {\r\n /**\r\n * 输入属性:徽章显示的值\r\n * 支持数字、字符串或null\r\n * 默认为null\r\n */\r\n readonly count = input<BadgeValue>(null);\r\n\r\n /**\r\n * 输入属性:是否以点状显示\r\n * 默认为false\r\n */\r\n readonly dot = input(false);\r\n\r\n /**\r\n * 输入属性:是否独立显示\r\n * 默认为false\r\n */\r\n readonly standalone = input(false);\r\n\r\n /**\r\n * 输入属性:是否显示值为0的徽章\r\n * 默认为false\r\n */\r\n readonly showZero = input(false);\r\n\r\n /**\r\n * 输入属性:溢出计数阈值\r\n * 当值超过此阈值时显示为\"N+\"\r\n * 默认为99\r\n */\r\n readonly overflowCount = input(99);\r\n\r\n /**\r\n * 输入属性:X轴位置偏移\r\n * 默认为0\r\n */\r\n readonly offsetX = input(0);\r\n\r\n /**\r\n * 输入属性:Y轴位置偏移\r\n * 默认为0\r\n */\r\n readonly offsetY = input(0);\r\n\r\n /**\r\n * 计算属性:徽章是否隐藏\r\n * 逻辑:\r\n * 1. 点状模式始终显示\r\n * 2. 值为null或空字符串时隐藏\r\n * 3. 值为0且showZero为false时隐藏\r\n * 4. 其他情况显示\r\n */\r\n protected readonly isHidden = computed(() => {\r\n if (this.dot()) {\r\n return false;\r\n }\r\n\r\n const count = this.count();\r\n if (count === null || count === '') {\r\n return true;\r\n }\r\n\r\n if (count === 0 || count === '0') {\r\n return !this.showZero();\r\n }\r\n\r\n return false;\r\n });\r\n\r\n /**\r\n * 计算属性:徽章显示的值\r\n * 逻辑:\r\n * 1. 值为null时显示为空\r\n * 2. 数字值超过溢出阈值时显示为\"N+\"\r\n * 3. 其他情况直接显示值\r\n */\r\n protected readonly displayValue = computed(() => {\r\n const count = this.count();\r\n if (count === null) {\r\n return '';\r\n }\r\n\r\n if (typeof count === 'number') {\r\n return count > this.overflowCount() ? `${this.overflowCount()}+` : `${count}`;\r\n }\r\n\r\n return count;\r\n });\r\n}\r\n","<span\r\n class=\"badge\"\r\n [class.badge--standalone]=\"standalone()\"\r\n [class.badge--dot]=\"dot()\"\r\n>\r\n <span class=\"badge__content\">\r\n <ng-content />\r\n </span>\r\n\r\n @if (!isHidden()) {\r\n <sup\r\n class=\"badge__indicator\"\r\n [style.top.px]=\"offsetY()\"\r\n [style.right.px]=\"offsetX()\"\r\n >\r\n @if (!dot()) {\r\n {{ displayValue() }}\r\n }\r\n </sup>\r\n }\r\n</span>\r\n","import {\n ChangeDetectionStrategy,\n Component,\n input,\n output,\n} from '@angular/core';\nimport { LucideAngularModule, type LucideIconData } from 'lucide-angular';\n\nexport type MTabItemTone = 'default' | 'primary';\n\nexport interface MTabItem {\n id: string | number;\n label: string;\n icon?: LucideIconData;\n disabled?: boolean;\n route?: string | null;\n tone?: MTabItemTone;\n}\n\n@Component({\n selector: 'm-tabs',\n imports: [LucideAngularModule],\n templateUrl: './m-tabs.html',\n styleUrl: './m-tabs.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class MTabs {\n readonly ariaLabel = input('标签页');\n readonly items = input<readonly MTabItem[]>([]);\n readonly selectedItemId = input<string | number | null>(null);\n\n readonly itemSelected = output<MTabItem>();\n\n protected onSelect(item: MTabItem): void {\n if (item.disabled) {\n return;\n }\n\n this.itemSelected.emit(item);\n }\n\n protected trackByItemId(_index: number, item: MTabItem): string | number {\n return item.id;\n }\n}\n","@if (items().length > 0) {\n<nav class=\"m-tabs\" [attr.aria-label]=\"ariaLabel()\">\n @for (item of items(); track trackByItemId($index, item)) {\n <button\n type=\"button\"\n class=\"m-tabs__item\"\n [class.m-tabs__item--active]=\"selectedItemId() === item.id\"\n [class.m-tabs__item--primary]=\"item.tone === 'primary'\"\n [class.m-tabs__item--disabled]=\"item.disabled\"\n [attr.aria-current]=\"selectedItemId() === item.id ? 'page' : null\"\n [attr.aria-label]=\"item.label\"\n [attr.title]=\"item.label\"\n [disabled]=\"item.disabled\"\n (click)=\"onSelect(item)\"\n >\n @if (item.icon; as icon) {\n <lucide-icon\n class=\"m-tabs__icon\"\n [img]=\"icon\"\n [size]=\"24\"\n [strokeWidth]=\"1.9\"\n aria-hidden=\"true\"\n />\n }\n <span class=\"m-tabs__label\">{{ item.label }}</span>\n </button>\n }\n</nav>\n}\n","import {\r\n ChangeDetectionStrategy,\r\n Component,\r\n inject,\r\n input,\r\n output,\r\n} from '@angular/core';\r\nimport { Router } from '@angular/router';\r\n\r\nimport { MTabs, type MTabItem } from '../m-tabs/m-tabs';\r\n\r\nexport type BottomNavItem = MTabItem;\r\n\r\n@Component({\r\n selector: 'm-bottom-nav',\r\n imports: [MTabs],\r\n templateUrl: './m-bottom-nav.html',\r\n styleUrl: './m-bottom-nav.scss',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class BottomNav {\r\n private readonly router = inject(Router, { optional: true });\r\n\r\n readonly ariaLabel = input('页面导航');\r\n readonly items = input<readonly BottomNavItem[]>([]);\r\n readonly selectedItemId = input<string | number | null>(null);\r\n\r\n readonly itemSelected = output<BottomNavItem>();\r\n\r\n protected onSelect(item: BottomNavItem): void {\r\n this.itemSelected.emit(item);\r\n if (!item.disabled && item.route) {\r\n void this.router?.navigateByUrl(item.route);\r\n }\r\n }\r\n}\r\n","<div class=\"bottom-nav\">\r\n <m-tabs\r\n class=\"bottom-nav__tabs\"\r\n [ariaLabel]=\"ariaLabel()\"\r\n [items]=\"items()\"\r\n [selectedItemId]=\"selectedItemId()\"\r\n (itemSelected)=\"onSelect($event)\"\r\n />\r\n</div>\r\n","import { NgTemplateOutlet } from '@angular/common';\r\nimport {\r\n AfterViewInit,\r\n ChangeDetectionStrategy,\r\n Component,\r\n DestroyRef,\r\n ElementRef,\r\n TemplateRef,\r\n booleanAttribute,\r\n computed,\r\n contentChildren,\r\n inject,\r\n input,\r\n output,\r\n signal,\r\n viewChild,\r\n} from '@angular/core';\r\nimport { Router } from '@angular/router';\r\nimport { LucideAngularModule, type LucideIconData } from 'lucide-angular';\r\n\r\nexport interface BreadcrumbOption {\r\n id: string;\r\n label: string;\r\n}\r\n\r\nexport interface BreadcrumbItem {\r\n id: string;\r\n label: string;\r\n icon?: LucideIconData;\r\n active?: boolean;\r\n url?: string;\r\n disabled?: boolean;\r\n options?: readonly BreadcrumbOption[];\r\n}\r\n\r\nexport interface BreadcrumbSelectEvent {\r\n item: BreadcrumbItem;\r\n option?: BreadcrumbOption;\r\n}\r\n\r\nexport type BreadcrumbSeparator = 'chevron' | 'slash' | 'dot' | 'arrow';\r\n\r\ntype BreadcrumbRenderItem = BreadcrumbItem & {\r\n template?: TemplateRef<unknown>;\r\n};\r\n\r\ntype BreadcrumbRenderEntry =\r\n | { type: 'item'; item: BreadcrumbRenderItem; originalIndex: number }\r\n | { type: 'ellipsis'; id: string; items: readonly BreadcrumbRenderItem[] };\r\n\r\n@Component({\r\n selector: 's-breadcrumb-item',\r\n template: `<ng-template><ng-content /></ng-template>`,\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class BreadcrumbItemComponent {\r\n readonly id = input('');\r\n readonly label = input('');\r\n readonly icon = input<LucideIconData | undefined>(undefined);\r\n readonly active = input(false, { transform: booleanAttribute });\r\n readonly url = input<string | undefined>(undefined);\r\n readonly disabled = input(false, { transform: booleanAttribute });\r\n readonly options = input<readonly BreadcrumbOption[]>([]);\r\n readonly template = viewChild.required(TemplateRef<unknown>);\r\n}\r\n\r\n@Component({\r\n selector: 's-breadcrumb',\r\n imports: [LucideAngularModule, NgTemplateOutlet],\r\n templateUrl: './s-breadcrumb.html',\r\n styleUrl: './s-breadcrumb.scss',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n host: {\r\n '(document:click)': 'onDocumentClick($event)',\r\n '(document:keydown.escape)': 'closeMenu()',\r\n },\r\n})\r\nexport class Breadcrumb implements AfterViewInit {\r\n private readonly hostElement = inject(ElementRef<HTMLElement>);\r\n private readonly destroyRef = inject(DestroyRef);\r\n private readonly ngRouter = inject(Router, { optional: true });\r\n\r\n readonly items = input<readonly BreadcrumbItem[]>([]);\r\n readonly ariaLabel = input('面包屑');\r\n readonly separator = input<BreadcrumbSeparator>('chevron');\r\n readonly separatorTemplate = input<TemplateRef<unknown> | null>(null);\r\n readonly collapse = input(true, { transform: booleanAttribute });\r\n readonly maxItems = input<number | 'auto'>('auto');\r\n readonly router = input(false, { transform: booleanAttribute });\r\n readonly itemSelected = output<BreadcrumbSelectEvent>();\r\n\r\n protected readonly projectedItems = contentChildren(BreadcrumbItemComponent);\r\n protected readonly openMenuItemId = signal<string | null>(null);\r\n protected readonly containerWidth = signal(0);\r\n\r\n protected readonly resolvedItems = computed<readonly BreadcrumbRenderItem[]>(() => {\r\n if (this.router()) {\r\n return this.routerItems();\r\n }\r\n\r\n const inputItems = this.items();\r\n if (inputItems.length > 0) {\r\n return inputItems;\r\n }\r\n\r\n return this.projectedItems().map((item, index) => ({\r\n id: item.id() || `breadcrumb-item-${index}`,\r\n label: item.label(),\r\n icon: item.icon(),\r\n active: item.active(),\r\n url: item.url(),\r\n disabled: item.disabled(),\r\n options: item.options(),\r\n template: item.template(),\r\n }));\r\n });\r\n\r\n protected readonly visibleEntries = computed<readonly BreadcrumbRenderEntry[]>(() => {\r\n const items = this.resolvedItems();\r\n const maxItems = this.visibleItemLimit();\r\n\r\n if (!this.collapse() || items.length <= maxItems) {\r\n return items.map((item, index) => ({ type: 'item', item, originalIndex: index }));\r\n }\r\n\r\n const keepTail = maxItems <= 3 ? 1 : 2;\r\n const tailStart = Math.max(items.length - keepTail, 1);\r\n const hiddenItems = items.slice(1, tailStart);\r\n\r\n return [\r\n { type: 'item', item: items[0], originalIndex: 0 },\r\n { type: 'ellipsis', id: 'breadcrumb-overflow', items: hiddenItems },\r\n ...items.slice(tailStart).map((item, offset) => ({\r\n type: 'item' as const,\r\n item,\r\n originalIndex: tailStart + offset,\r\n })),\r\n ];\r\n });\r\n\r\n protected readonly hasItems = computed(() => this.resolvedItems().length > 0);\r\n\r\n ngAfterViewInit(): void {\r\n if (typeof ResizeObserver === 'undefined') {\r\n return;\r\n }\r\n\r\n const resizeObserver = new ResizeObserver(([entry]) => {\r\n this.containerWidth.set(entry?.contentRect.width ?? 0);\r\n });\r\n\r\n resizeObserver.observe(this.hostElement.nativeElement);\r\n this.destroyRef.onDestroy(() => resizeObserver.disconnect());\r\n }\r\n\r\n protected isLast(index: number): boolean {\r\n return index === this.resolvedItems().length - 1;\r\n }\r\n\r\n protected isCurrent(item: BreadcrumbItem, index: number): boolean {\r\n return item.active === true || this.isLast(index);\r\n }\r\n\r\n protected isMenuOpen(itemId: string): boolean {\r\n return this.openMenuItemId() === itemId;\r\n }\r\n\r\n protected hasOptions(item: BreadcrumbItem): boolean {\r\n return Boolean(item.options?.length);\r\n }\r\n\r\n protected onItemClick(item: BreadcrumbItem, index: number, event: Event): void {\r\n event.stopPropagation();\r\n\r\n if (item.disabled || this.isCurrent(item, index)) {\r\n this.closeMenu();\r\n return;\r\n }\r\n\r\n if (this.hasOptions(item)) {\r\n this.openMenuItemId.update((current) => (current === item.id ? null : item.id));\r\n return;\r\n }\r\n\r\n this.closeMenu();\r\n this.itemSelected.emit({ item });\r\n if (item.url) {\r\n void this.ngRouter?.navigateByUrl(item.url);\r\n }\r\n }\r\n\r\n protected onOverflowClick(event: Event): void {\r\n event.stopPropagation();\r\n this.openMenuItemId.update((current) => (current === 'breadcrumb-overflow' ? null : 'breadcrumb-overflow'));\r\n }\r\n\r\n protected onOverflowItemClick(item: BreadcrumbItem, event: Event): void {\r\n event.stopPropagation();\r\n this.closeMenu();\r\n this.itemSelected.emit({ item });\r\n if (item.url) {\r\n void this.ngRouter?.navigateByUrl(item.url);\r\n }\r\n }\r\n\r\n protected onOptionClick(item: BreadcrumbItem, option: BreadcrumbOption, event: Event): void {\r\n event.stopPropagation();\r\n this.closeMenu();\r\n this.itemSelected.emit({ item, option });\r\n }\r\n\r\n protected onDocumentClick(event: Event): void {\r\n const target = event.target;\r\n if (target instanceof Node && !this.hostElement.nativeElement.contains(target)) {\r\n this.closeMenu();\r\n }\r\n }\r\n\r\n protected closeMenu(): void {\r\n this.openMenuItemId.set(null);\r\n }\r\n\r\n protected trackByEntryId(index: number, entry: BreadcrumbRenderEntry): string {\r\n return entry.type === 'ellipsis' ? entry.id : entry.item.id || `${entry.item.label}-${index}`;\r\n }\r\n\r\n protected trackByOptionId(_index: number, option: BreadcrumbOption): string {\r\n return option.id;\r\n }\r\n\r\n private visibleItemLimit(): number {\r\n const configuredMaxItems = this.maxItems();\r\n if (configuredMaxItems !== 'auto') {\r\n return Math.max(3, configuredMaxItems);\r\n }\r\n\r\n const width = this.containerWidth();\r\n if (width > 0 && width < 360) {\r\n return 3;\r\n }\r\n if (width > 0 && width < 520) {\r\n return 4;\r\n }\r\n\r\n return 5;\r\n }\r\n\r\n private routerItems(): readonly BreadcrumbRenderItem[] {\r\n const router = this.ngRouter;\r\n if (!router) {\r\n return [];\r\n }\r\n\r\n const items: BreadcrumbRenderItem[] = [];\r\n let url = '';\r\n let route = router.routerState.snapshot.root;\r\n\r\n while (route) {\r\n const segment = route.url.map((part) => part.path).join('/');\r\n if (segment) {\r\n url += `/${segment}`;\r\n }\r\n\r\n const label = route.data?.['breadcrumb'] ?? route.title ?? route.routeConfig?.title ?? route.routeConfig?.path;\r\n if (label) {\r\n items.push({\r\n id: url || label.toString(),\r\n label: label.toString(),\r\n url: url || '/',\r\n });\r\n }\r\n\r\n route = route.firstChild!;\r\n }\r\n\r\n return items.map((item, index) => ({\r\n ...item,\r\n active: index === items.length - 1,\r\n }));\r\n }\r\n}\r\n","@if (hasItems()) {\r\n <nav class=\"breadcrumb\" [attr.aria-label]=\"ariaLabel()\">\r\n <ol class=\"breadcrumb__list\">\r\n @for (entry of visibleEntries(); track trackByEntryId($index, entry); let entryIndex = $index) {\r\n <li class=\"breadcrumb__item\">\r\n @if (entry.type === 'item') {\r\n <div class=\"breadcrumb__item-wrap\">\r\n <button\r\n type=\"button\"\r\n class=\"breadcrumb__link\"\r\n [class.breadcrumb__link--current]=\"isCurrent(entry.item, entry.originalIndex)\"\r\n [class.breadcrumb__link--interactive]=\"!entry.item.disabled && !isCurrent(entry.item, entry.originalIndex)\"\r\n [class.breadcrumb__link--open]=\"isMenuOpen(entry.item.id)\"\r\n [class.breadcrumb__link--with-icon]=\"entry.item.icon\"\r\n [disabled]=\"entry.item.disabled\"\r\n [attr.aria-current]=\"isCurrent(entry.item, entry.originalIndex) ? 'page' : null\"\r\n [attr.aria-expanded]=\"hasOptions(entry.item) ? isMenuOpen(entry.item.id) : null\"\r\n [attr.aria-haspopup]=\"hasOptions(entry.item) ? 'menu' : null\"\r\n (click)=\"onItemClick(entry.item, entry.originalIndex, $event)\"\r\n >\r\n @if (entry.item.icon; as icon) {\r\n <lucide-icon class=\"breadcrumb__icon\" [img]=\"icon\" [size]=\"14\" [strokeWidth]=\"1.85\" aria-hidden=\"true\" />\r\n }\r\n <span class=\"breadcrumb__label\">\r\n @if (entry.item.template; as template) {\r\n <ng-container [ngTemplateOutlet]=\"template\" />\r\n } @else {\r\n {{ entry.item.label }}\r\n }\r\n </span>\r\n @if (hasOptions(entry.item) && !isCurrent(entry.item, entry.originalIndex)) {\r\n <span class=\"breadcrumb__caret\" aria-hidden=\"true\"></span>\r\n }\r\n </button>\r\n\r\n @if (hasOptions(entry.item) && isMenuOpen(entry.item.id)) {\r\n <div class=\"breadcrumb__menu\" role=\"menu\" [attr.aria-label]=\"entry.item.label\">\r\n @for (option of entry.item.options ?? []; track trackByOptionId($index, option)) {\r\n <button\r\n type=\"button\"\r\n class=\"breadcrumb__menu-item\"\r\n role=\"menuitem\"\r\n (click)=\"onOptionClick(entry.item, option, $event)\"\r\n >\r\n {{ option.label }}\r\n </button>\r\n }\r\n </div>\r\n }\r\n </div>\r\n } @else {\r\n <div class=\"breadcrumb__item-wrap\">\r\n <button\r\n type=\"button\"\r\n class=\"breadcrumb__link breadcrumb__link--interactive breadcrumb__overflow\"\r\n [class.breadcrumb__link--open]=\"isMenuOpen(entry.id)\"\r\n aria-label=\"展开隐藏路径\"\r\n aria-haspopup=\"menu\"\r\n [attr.aria-expanded]=\"isMenuOpen(entry.id)\"\r\n (click)=\"onOverflowClick($event)\"\r\n >\r\n <span class=\"breadcrumb__overflow-dot\" aria-hidden=\"true\"></span>\r\n <span class=\"breadcrumb__overflow-dot\" aria-hidden=\"true\"></span>\r\n <span class=\"breadcrumb__overflow-dot\" aria-hidden=\"true\"></span>\r\n </button>\r\n\r\n @if (isMenuOpen(entry.id)) {\r\n <div class=\"breadcrumb__menu\" role=\"menu\" aria-label=\"隐藏路径\">\r\n @for (item of entry.items; track item.id) {\r\n <button\r\n type=\"button\"\r\n class=\"breadcrumb__menu-item\"\r\n role=\"menuitem\"\r\n (click)=\"onOverflowItemClick(item, $event)\"\r\n >\r\n {{ item.label }}\r\n </button>\r\n }\r\n </div>\r\n }\r\n </div>\r\n }\r\n\r\n @if (entryIndex < visibleEntries().length - 1) {\r\n <span\r\n class=\"breadcrumb__separator\"\r\n [class.breadcrumb__separator--chevron]=\"!separatorTemplate() && separator() === 'chevron'\"\r\n [class.breadcrumb__separator--slash]=\"!separatorTemplate() && separator() === 'slash'\"\r\n [class.breadcrumb__separator--dot]=\"!separatorTemplate() && separator() === 'dot'\"\r\n [class.breadcrumb__separator--arrow]=\"!separatorTemplate() && separator() === 'arrow'\"\r\n aria-hidden=\"true\"\r\n >\r\n @if (separatorTemplate(); as template) {\r\n <ng-container [ngTemplateOutlet]=\"template\" />\r\n }\r\n </span>\r\n }\r\n </li>\r\n }\r\n </ol>\r\n </nav>\r\n}\r\n","import { ChangeDetectionStrategy, Component } from '@angular/core';\r\n\r\n@Component({\r\n selector: 's-base-list',\r\n imports: [],\r\n templateUrl: './s-bs-base-list.html',\r\n styleUrl: './s-bs-base-list.scss',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class BsBaseList {}\r\n","<nav class=\"nav\">\r\n <ng-content select=\"[list-actions]\"></ng-content>\r\n</nav>\r\n\r\n<main class=\"content\">\r\n <ng-content select=\"[list-table]\"></ng-content>\r\n</main>\r\n\r\n<footer>\r\n <ng-content select=\"[list-pagination]\"></ng-content>\r\n</footer>\r\n","import { DOCUMENT } from '@angular/common';\r\nimport { ComponentRef, Injectable, InjectionToken, Injector, Type, ViewContainerRef, inject } from '@angular/core';\r\nimport { Overlay, OverlayConfig, OverlayRef } from '@angular/cdk/overlay';\r\nimport { ComponentPortal } from '@angular/cdk/portal';\r\n\r\nexport const PLATFORM_OVERLAY_VIEW_CONTAINER_REF = new InjectionToken<ViewContainerRef | null>(\r\n 'PLATFORM_OVERLAY_VIEW_CONTAINER_REF',\r\n {\r\n providedIn: 'root',\r\n factory: () => null,\r\n },\r\n);\r\n\r\nexport interface PlatformOverlayAttachOptions {\r\n injector?: Injector | null;\r\n viewContainerRef?: ViewContainerRef | null;\r\n config?: OverlayConfig;\r\n}\r\n\r\nexport interface PlatformOverlayComponentRef<T> {\r\n overlayRef: OverlayRef;\r\n componentRef: ComponentRef<T>;\r\n dispose: () => void;\r\n}\r\n\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\nexport class PlatformOverlayPortalHost {\r\n private readonly document = inject(DOCUMENT);\r\n private readonly overlay = inject(Overlay);\r\n private readonly defaultViewContainerRef = inject(PLATFORM_OVERLAY_VIEW_CONTAINER_REF);\r\n\r\n attachComponent<T>(\r\n component: Type<T>,\r\n options: PlatformOverlayAttachOptions = {},\r\n ): PlatformOverlayComponentRef<T> | null {\r\n if (!this.document.body) {\r\n return null;\r\n }\r\n\r\n const overlayRef = this.overlay.create({\r\n positionStrategy: this.overlay.position().global().top('0').left('0'),\r\n scrollStrategy: this.overlay.scrollStrategies.noop(),\r\n ...options.config,\r\n });\r\n const componentRef = overlayRef.attach(\r\n new ComponentPortal(\r\n component,\r\n options.viewContainerRef ?? this.defaultViewContainerRef,\r\n options.injector ?? null,\r\n ),\r\n );\r\n\r\n return {\r\n overlayRef,\r\n componentRef,\r\n dispose: () => overlayRef.dispose(),\r\n };\r\n }\r\n}\r\n","/**\r\n * 消息容器组件\r\n * 用于显示和管理消息列表,支持不同类型的消息和交互操作\r\n */\r\nimport { ChangeDetectionStrategy, Component, computed, input, output } from '@angular/core';\r\n\r\nimport type { BsMessageItem } from './s-bs-message.types';\r\n\r\n/**\r\n * 消息容器组件\r\n * 实现了消息的显示、类型识别、交互处理等功能\r\n */\r\n@Component({\r\n selector: 's-message-container',\r\n templateUrl: './s-bs-message-container.html',\r\n styleUrl: './s-bs-message.scss',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n host: {\r\n // 宿主元素类名\r\n class: 'bs-message-host',\r\n // 无障碍属性:礼貌地通知屏幕阅读器\r\n 'aria-live': 'polite',\r\n // 无障碍属性:关注添加和删除的内容\r\n 'aria-relevant': 'additions removals',\r\n },\r\n})\r\nexport class BsMessageContainer {\r\n /**\r\n * 输入属性:消息项列表\r\n * 默认为空数组\r\n */\r\n readonly items = input<BsMessageItem[]>([]);\r\n\r\n /**\r\n * 输出事件:关闭消息时触发\r\n * 传递消息ID\r\n */\r\n readonly close = output<string>();\r\n\r\n /**\r\n * 输出事件:查看消息详情时触发\r\n * 传递消息ID\r\n */\r\n readonly detail = output<string>();\r\n\r\n /**\r\n * 输出事件:执行消息操作时触发\r\n * 传递消息ID和操作ID\r\n */\r\n readonly action = output<{ itemId: string; actionId: string }>();\r\n\r\n /**\r\n * 计算属性:要显示的消息项\r\n * 直接返回输入的消息项列表\r\n */\r\n protected readonly viewItems = computed(() => this.items());\r\n\r\n /**\r\n * 根据消息类型返回对应的图标类名\r\n * @param type - 消息类型\r\n * @returns 对应的图标类名\r\n */\r\n protected iconClass(type: BsMessageItem['type']): string {\r\n switch (type) {\r\n case 'success':\r\n return 'is-success';\r\n case 'warning':\r\n return 'is-warning';\r\n case 'error':\r\n return 'is-error';\r\n case 'help':\r\n return 'is-help';\r\n case 'loading':\r\n return 'is-loading';\r\n case 'info':\r\n default:\r\n return 'is-info';\r\n }\r\n }\r\n\r\n /**\r\n * 处理查看消息详情事件\r\n * @param itemId - 消息ID\r\n */\r\n protected onDetail(itemId: string): void {\r\n this.detail.emit(itemId);\r\n }\r\n\r\n /**\r\n * 处理执行消息操作事件\r\n * @param itemId - 消息ID\r\n * @param actionId - 操作ID\r\n */\r\n protected onAction(itemId: string, actionId: string): void {\r\n this.action.emit({ itemId, actionId });\r\n }\r\n}\r\n","@for (item of viewItems(); track item.id) {\r\n <div\r\n class=\"bs-message\"\r\n role=\"status\"\r\n [class.bs-message--solid]=\"item.variant === 'solid'\"\r\n [class.bs-message--has-actions]=\"item.actions.length > 0\"\r\n [class.bs-message--info]=\"item.type === 'info' || item.type === 'help' || item.type === 'loading'\"\r\n [class.bs-message--success]=\"item.type === 'success'\"\r\n [class.bs-message--warning]=\"item.type === 'warning'\"\r\n [class.bs-message--error]=\"item.type === 'error'\"\r\n >\r\n @if (item.showIcon) {\r\n <span class=\"bs-message__icon\" [class]=\"'bs-message__icon ' + iconClass(item.type)\" aria-hidden=\"true\">\r\n @switch (item.type) {\r\n @case ('success') {\r\n <svg viewBox=\"0 0 16 16\" fill=\"none\">\r\n <circle cx=\"8\" cy=\"8\" r=\"8\" fill=\"currentColor\"></circle>\r\n <path stroke=\"#fff\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"1.6\" d=\"M4.4 8.2 6.7 10.5 11.8 5.5\"></path>\r\n </svg>\r\n }\r\n @case ('warning') {\r\n <svg viewBox=\"0 0 16 16\" fill=\"none\">\r\n <path fill=\"currentColor\" d=\"M7.13 2.05a1 1 0 0 1 1.74 0l6.05 10.5A1 1 0 0 1 14.05 14H1.95a1 1 0 0 1-.87-1.5l6.05-10.45Z\"></path>\r\n <path stroke=\"#fff\" stroke-linecap=\"round\" stroke-width=\"1.4\" d=\"M8 5.55v4\"></path>\r\n <circle cx=\"8\" cy=\"11.8\" r=\".75\" fill=\"#fff\"></circle>\r\n </svg>\r\n }\r\n @case ('error') {\r\n <svg viewBox=\"0 0 16 16\" fill=\"none\">\r\n <circle cx=\"8\" cy=\"8\" r=\"8\" fill=\"currentColor\"></circle>\r\n <path stroke=\"#fff\" stroke-linecap=\"round\" stroke-width=\"1.6\" d=\"m5.5 5.5 5 5M10.5 5.5l-5 5\"></path>\r\n </svg>\r\n }\r\n @case ('loading') {\r\n <span class=\"bs-message__icon-dot\"></span>\r\n }\r\n @default {\r\n <svg viewBox=\"0 0 16 16\" fill=\"none\">\r\n <circle cx=\"8\" cy=\"8\" r=\"8\" fill=\"currentColor\"></circle>\r\n <path stroke=\"#fff\" stroke-linecap=\"round\" stroke-width=\"1.4\" d=\"M8 7.1v4\"></path>\r\n <circle cx=\"8\" cy=\"4.8\" r=\".75\" fill=\"#fff\"></circle>\r\n </svg>\r\n }\r\n }\r\n </span>\r\n }\r\n\r\n <div class=\"bs-message__body\">\r\n <div class=\"bs-message__headline\">\r\n <div class=\"bs-message__title-wrap\">\r\n <div class=\"bs-message__title\">{{ item.title }}</div>\r\n\r\n @if (item.repeatCount > 1) {\r\n <span class=\"bs-message__repeat\" aria-label=\"Repeated {{ item.repeatCount }} times\">\r\n * {{ item.repeatCount }}\r\n </span>\r\n }\r\n </div>\r\n\r\n @if (item.detailText && !item.description) {\r\n <button\r\n type=\"button\"\r\n class=\"bs-message__detail\"\r\n (click)=\"onDetail(item.id)\"\r\n >\r\n {{ item.detailText }}\r\n </button>\r\n }\r\n </div>\r\n\r\n @if (item.description) {\r\n <div class=\"bs-message__description\">\r\n <span class=\"bs-message__description-text\">{{ item.description }}</span>\r\n\r\n @if (item.detailText) {\r\n <button\r\n type=\"button\"\r\n class=\"bs-message__detail\"\r\n (click)=\"onDetail(item.id)\"\r\n >\r\n {{ item.detailText }}\r\n </button>\r\n }\r\n </div>\r\n }\r\n\r\n </div>\r\n\r\n @if (item.actions.length) {\r\n <div class=\"bs-message__actions\">\r\n @for (action of item.actions; track action.id) {\r\n <button\r\n type=\"button\"\r\n class=\"bs-message__action\"\r\n [class.bs-message__action--primary]=\"action.tone === 'primary'\"\r\n (click)=\"onAction(item.id, action.id)\"\r\n >\r\n {{ action.label }}\r\n </button>\r\n }\r\n </div>\r\n }\r\n\r\n @if (item.closable) {\r\n <button\r\n type=\"button\"\r\n class=\"bs-message__close\"\r\n aria-label=\"Close\"\r\n (click)=\"close.emit(item.id)\"\r\n >\r\n <svg viewBox=\"0 0 16 16\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.8\" aria-hidden=\"true\">\r\n <path stroke-linecap=\"round\" d=\"m4 4 8 8M12 4 4 12\"></path>\r\n </svg>\r\n </button>\r\n }\r\n </div>\r\n}\r\n","import { EnvironmentInjector, Injectable, NgZone, ViewContainerRef, effect, inject } from '@angular/core';\r\nimport { DOCUMENT } from '@angular/common';\r\nimport { signal } from '@angular/core';\r\nimport type { ComponentRef } from '@angular/core';\r\n\r\nimport { PlatformOverlayComponentRef, PlatformOverlayPortalHost } from '../s-overlay/s-overlay-portal-host';\r\nimport { BsMessageContainer } from './s-bs-message-container';\r\n\r\nexport type BsMessageType = 'info' | 'success' | 'warning' | 'error' | 'help' | 'loading';\r\nexport type BsMessageVariant = 'soft' | 'solid';\r\nexport type BsMessageActionTone = 'default' | 'primary';\r\n\r\nexport interface BsMessageAction {\r\n id: string;\r\n label: string;\r\n tone?: BsMessageActionTone;\r\n handler?: () => void;\r\n}\r\n\r\nexport interface BsMessageOptions {\r\n duration?: number;\r\n closable?: boolean;\r\n title?: string;\r\n description?: string;\r\n detailText?: string;\r\n onDetail?: () => void;\r\n actions?: readonly BsMessageAction[];\r\n variant?: BsMessageVariant;\r\n showIcon?: boolean;\r\n viewContainerRef?: ViewContainerRef;\r\n}\r\n\r\nexport interface BsMessageItem {\r\n id: string;\r\n type: BsMessageType;\r\n title: string;\r\n description?: string;\r\n detailText?: string;\r\n closable: boolean;\r\n createdAt: number;\r\n duration: number;\r\n actions: readonly BsMessageAction[];\r\n variant: BsMessageVariant;\r\n showIcon: boolean;\r\n repeatCount: number;\r\n onDetail?: () => void;\r\n}\r\n\r\nfunction uid(): string {\r\n return `${Date.now()}_${Math.random().toString(16).slice(2)}`;\r\n}\r\n\r\n@Injectable({ providedIn: 'root' })\r\nexport class BsMessageService {\r\n private readonly injector = inject(EnvironmentInjector);\r\n private readonly zone = inject(NgZone);\r\n private readonly document = inject(DOCUMENT);\r\n private readonly overlayHost = inject(PlatformOverlayPortalHost);\r\n\r\n private attachedRef: PlatformOverlayComponentRef<BsMessageContainer> | null = null;\r\n private containerRef: ComponentRef<BsMessageContainer> | null = null;\r\n private readonly items = signal<BsMessageItem[]>([]);\r\n private readonly timers = new Map<string, number>();\r\n\r\n __unsafe_items(): BsMessageItem[] {\r\n return this.items();\r\n }\r\n\r\n constructor() {\r\n this.exposeGlobalApiOnce();\r\n effect(() => {\r\n const currentItems = this.items();\r\n this.syncContainer(currentItems);\r\n });\r\n }\r\n\r\n private exposeGlobalApiOnce(): void {\r\n const g = globalThis as Record<string, unknown> & {\r\n bsMessage?: {\r\n info: (content: string, options?: BsMessageOptions) => { id: string; close: () => void };\r\n success: (content: string, options?: BsMessageOptions) => { id: string; close: () => void };\r\n warning: (content: string, options?: BsMessageOptions) => { id: string; close: () => void };\r\n error: (content: string, options?: BsMessageOptions) => { id: string; close: () => void };\r\n help: (content: string, options?: BsMessageOptions) => { id: string; close: () => void };\r\n loading: (content: string, options?: BsMessageOptions) => { id: string; close: () => void };\r\n remove: (id: string) => void;\r\n clear: () => void;\r\n };\r\n };\r\n\r\n if (g.bsMessage) {\r\n return;\r\n }\r\n\r\n g.bsMessage = {\r\n info: (content: string, options?: BsMessageOptions) => this.info(content, options),\r\n success: (content: string, options?: BsMessageOptions) => this.success(content, options),\r\n warning: (content: string, options?: BsMessageOptions) => this.warning(content, options),\r\n error: (content: string, options?: BsMessageOptions) => this.error(content, options),\r\n help: (content: string, options?: BsMessageOptions) => this.help(content, options),\r\n loading: (content: string, options?: BsMessageOptions) => this.loading(content, options),\r\n remove: (id: string) => this.remove(id),\r\n clear: () => this.clear(),\r\n };\r\n }\r\n\r\n private ensureContainer(viewContainerRef?: ViewContainerRef): void {\r\n if (this.containerRef) {\r\n return;\r\n }\r\n\r\n if (this.document.querySelector('s-message')) {\r\n return;\r\n }\r\n\r\n const attachedRef = this.overlayHost.attachComponent(BsMessageContainer, {\r\n injector: this.injector,\r\n viewContainerRef,\r\n config: {\r\n disposeOnNavigation: true,\r\n },\r\n });\r\n\r\n if (!attachedRef) {\r\n return;\r\n }\r\n\r\n const ref = attachedRef.componentRef;\r\n ref.instance.close.subscribe((id) => this.remove(id));\r\n ref.instance.action.subscribe(({ itemId, actionId }) => this.handleAction(itemId, actionId));\r\n ref.instance.detail.subscribe((itemId) => this.handleDetail(itemId));\r\n\r\n this.attachedRef = attachedRef;\r\n this.containerRef = ref;\r\n this.syncContainer(this.items());\r\n }\r\n\r\n private syncContainer(items: BsMessageItem[]): void {\r\n if (!this.containerRef) {\r\n return;\r\n }\r\n\r\n this.containerRef.setInput('items', items);\r\n this.containerRef.changeDetectorRef.detectChanges();\r\n }\r\n\r\n private handleDetail(itemId: string): void {\r\n const item = this.items().find((candidate) => candidate.id === itemId);\r\n item?.onDetail?.();\r\n }\r\n\r\n private handleAction(itemId: string, actionId: string): void {\r\n const item = this.items().find((candidate) => candidate.id === itemId);\r\n const action = item?.actions.find((candidate) => candidate.id === actionId);\r\n action?.handler?.();\r\n }\r\n\r\n private isSameMessage(candidate: BsMessageItem, item: BsMessageItem): boolean {\r\n return (\r\n candidate.type === item.type &&\r\n candidate.title === item.title &&\r\n candidate.description === item.description &&\r\n candidate.detailText === item.detailText &&\r\n candidate.variant === item.variant\r\n );\r\n }\r\n\r\n private scheduleRemoval(id: string, duration: number): void {\r\n this.clearTimer(id);\r\n if (duration <= 0) {\r\n return;\r\n }\r\n\r\n const timerId = window.setTimeout(() => {\r\n this.zone.run(() => this.remove(id));\r\n }, duration);\r\n this.timers.set(id, timerId);\r\n }\r\n\r\n private clearTimer(id: string): void {\r\n const timerId = this.timers.get(id);\r\n if (timerId === undefined) {\r\n return;\r\n }\r\n\r\n window.clearTimeout(timerId);\r\n this.timers.delete(id);\r\n }\r\n\r\n show(type: BsMessageType, content: string, options: BsMessageOptions = {}) {\r\n const id = uid();\r\n const createdAt = Date.now();\r\n const defaultDuration = type === 'loading' ? 0 : 3000;\r\n const duration = options.duration ?? defaultDuration;\r\n const closable = options.closable ?? duration === 0;\r\n\r\n const item: BsMessageItem = {\r\n id,\r\n type,\r\n title: options.title ?? content,\r\n description: options.description,\r\n detailText: options.detailText,\r\n closable,\r\n createdAt,\r\n duration,\r\n actions: options.actions ?? [],\r\n variant: options.variant ?? 'soft',\r\n showIcon: options.showIcon ?? options.variant !== 'solid',\r\n repeatCount: 1,\r\n onDetail: options.onDetail,\r\n };\r\n\r\n let targetId = id;\r\n this.zone.run(() => {\r\n this.ensureContainer(options.viewContainerRef);\r\n this.items.update((prev) => {\r\n const matchedItem = prev.find((candidate) => this.isSameMessage(candidate, item));\r\n if (!matchedItem) {\r\n for (const prevItem of prev) {\r\n this.clearTimer(prevItem.id);\r\n }\r\n return [item];\r\n }\r\n\r\n targetId = matchedItem.id;\r\n for (const prevItem of prev) {\r\n if (prevItem.id !== matchedItem.id) {\r\n this.clearTimer(prevItem.id);\r\n }\r\n }\r\n return [\r\n {\r\n ...matchedItem,\r\n repeatCount: matchedItem.repeatCount + 1,\r\n createdAt,\r\n closable,\r\n duration,\r\n actions: item.actions,\r\n showIcon: item.showIcon,\r\n onDetail: item.onDetail,\r\n },\r\n ];\r\n });\r\n });\r\n\r\n this.scheduleRemoval(targetId, item.duration);\r\n\r\n return {\r\n id: targetId,\r\n close: () => this.remove(targetId),\r\n };\r\n }\r\n\r\n info(content: string, options?: BsMessageOptions) {\r\n return this.show('info', content, options);\r\n }\r\n\r\n success(content: string, options?: BsMessageOptions) {\r\n return this.show('success', content, options);\r\n }\r\n\r\n warning(content: string, options?: BsMessageOptions) {\r\n return this.show('warning', content, options);\r\n }\r\n\r\n error(content: string, options?: BsMessageOptions) {\r\n return this.show('error', content, options);\r\n }\r\n\r\n help(content: string, options?: BsMessageOptions) {\r\n return this.show('help', content, options);\r\n }\r\n\r\n loading(content: string, options?: BsMessageOptions) {\r\n return this.show('loading', content, options);\r\n }\r\n\r\n remove(id: string): void {\r\n this.clearTimer(id);\r\n this.zone.run(() => {\r\n this.items.update((prev) => prev.filter((item) => item.id !== id));\r\n });\r\n }\r\n\r\n clear(): void {\r\n for (const id of this.timers.keys()) {\r\n this.clearTimer(id);\r\n }\r\n this.zone.run(() => {\r\n this.items.set([]);\r\n });\r\n }\r\n}\r\n","/**\r\n * 消息组件\r\n * 用于显示消息列表,提供兼容模式支持\r\n */\r\nimport { ChangeDetectionStrategy, Component, computed, inject } from '@angular/core';\r\n\r\nimport type { BsMessageItem } from './s-bs-message.types';\r\nimport { BsMessageService } from './s-bs-message.types';\r\nimport { BsMessageContainer } from './s-bs-message-container';\r\n\r\n/**\r\n * 消息组件\r\n * 作为消息容器的包装器,提供兼容模式支持\r\n */\r\n@Component({\r\n selector: 's-message',\r\n template: `<s-message-container [items]=\"items()\" (close)=\"close($event)\" />`,\r\n imports: [BsMessageContainer],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class BsMessage {\r\n /**\r\n * 注入消息服务\r\n * 用于获取消息列表和处理消息操作\r\n */\r\n private readonly message = inject(BsMessageService);\r\n\r\n /**\r\n * 计算属性:消息项列表\r\n * 兼容模式:如果业务仍手动放了 <s-message>,这里也能显示\r\n * 通过消息服务的__unsafe_items()方法获取消息列表\r\n */\r\n readonly items = computed<BsMessageItem[]>(() => this.message.__unsafe_items());\r\n\r\n /**\r\n * 关闭消息\r\n * @param id - 消息ID\r\n */\r\n close(id: string) {\r\n this.message.remove(id);\r\n }\r\n}\r\n","import {\r\n afterRenderEffect,\r\n ChangeDetectionStrategy,\n Component,\n booleanAttribute,\n computed,\n forwardRef,\n input,\n signal,\n viewChild,\r\n viewChildren,\r\n} from '@angular/core';\r\nimport { OverlayModule } from '@angular/cdk/overlay';\r\nimport { Listbox, Option } from '@angular/aria/listbox';\r\nimport {\n Combobox,\n ComboboxInput,\n ComboboxPopupContainer,\n} from '@angular/aria/combobox';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { LucideAngularModule, PlusIcon, XIcon } from 'lucide-angular';\n\r\nexport interface BsSelectOption<T = unknown> {\r\n label: string;\r\n value: T;\r\n disabled?: boolean;\r\n placeholder?: boolean;\r\n}\r\n\r\n@Component({\r\n selector: 's-select',\r\n imports: [\r\n OverlayModule,\r\n Option,\r\n ComboboxPopupContainer,\n Combobox,\n ComboboxInput,\n Listbox,\n LucideAngularModule,\n ],\n templateUrl: './s-bs-select.html',\r\n styleUrl: './s-bs-select.scss',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n providers: [\r\n {\r\n provide: NG_VALUE_ACCESSOR,\r\n useExisting: forwardRef(() => BsSelect),\r\n multi: true,\r\n },\r\n ],\r\n})\r\nexport class BsSelect implements ControlValueAccessor {\n protected readonly listBox = viewChild<Listbox<unknown>>(Listbox);\n protected readonly optionRefs = viewChildren<Option<unknown>>(Option);\n protected readonly combobox = viewChild<Combobox<unknown>>(Combobox);\n protected readonly plusIcon = PlusIcon;\n protected readonly closeIcon = XIcon;\n\r\n readonly labels = input<string[]>([]);\r\n readonly options = input<BsSelectOption<unknown>[]>([]);\r\n readonly placeholder = input('Select a label');\n readonly ariaLabel = input('Select');\n readonly disabled = input(false);\n readonly multiple = input(false, { transform: booleanAttribute });\n readonly matchTriggerWidth = input(true);\n\n protected readonly displayValue = computed(() => {\n const [selectedValue] = this.selectedValues();\r\n if (this.isEmptyValue(selectedValue)) {\r\n return this.placeholder();\r\n }\r\n\r\n const selected = this.selectedOption();\r\n return selected?.label || this.placeholder();\r\n });\r\n protected readonly hasValue = computed(() => {\r\n const [selectedValue] = this.selectedValues();\r\n if (this.isEmptyValue(selectedValue)) {\r\n return false;\r\n }\r\n\r\n return !this.selectedOption()?.placeholder;\r\n });\r\n protected readonly normalizedOptions = computed<BsSelectOption<unknown>[]>(() => {\r\n const explicitOptions = this.options();\r\n if (explicitOptions.length) {\r\n return explicitOptions;\r\n }\r\n\r\n return this.labels().map((label) => ({ label, value: label }));\r\n });\r\n private readonly selectedOption = computed(() => {\r\n const [selectedValue] = this.selectedValues();\r\n if (this.isEmptyValue(selectedValue)) {\r\n return undefined;\r\n }\r\n\n return this.normalizedOptions().find((option) => Object.is(option.value, selectedValue));\n });\n protected readonly selectedOptions = computed(() => {\n const selectedValues = this.selectedValues();\n\n return this.normalizedOptions().filter((option) =>\n selectedValues.some((value) => Object.is(value, option.value)),\n );\n });\n protected readonly visibleSelectedOptions = computed(() => this.selectedOptions().slice(0, 2));\n protected readonly hiddenSelectedCount = computed(() => Math.max(this.selectedOptions().length - 2, 0));\n protected readonly isDisabled = computed(() => this.disabled() || this.disabledFromCva());\n\n protected readonly selectedValues = signal<unknown[]>([]);\n private readonly disabledFromCva = signal(false);\r\n private onChange: (value: unknown) => void = () => {};\r\n private onTouched: () => void = () => {};\r\n\r\n constructor() {\r\n afterRenderEffect(() => {\r\n const option = this.optionRefs().find((opt) => opt.active());\r\n setTimeout(() => option?.element.scrollIntoView({ block: 'nearest' }), 50);\r\n });\r\n\r\n afterRenderEffect(() => {\r\n if (!this.combobox()?.expanded()) {\r\n setTimeout(() => this.listBox()?.element.scrollTo(0, 0), 150);\r\n }\r\n });\r\n }\r\n\n protected onListboxValueChange(values: unknown[]): void {\n this.selectedValues.set(values);\n this.onChange(this.multiple() ? values : (values[0] ?? null));\n this.onTouched();\n if (!this.multiple()) {\n this.scheduleClose();\n }\n }\n\n protected onOptionClick(option: BsSelectOption<unknown>): void {\n if (option.disabled) {\n return;\n }\n\n this.onTouched();\n if (!this.multiple()) {\n this.scheduleClose();\n }\n }\n\n protected openCombobox(event: Event): void {\n event.preventDefault();\n event.stopPropagation();\n\n if (this.isDisabled()) {\n return;\n }\n\n this.combobox()?.open();\n }\n\n protected removeSelectedValue(value: unknown, event: Event): void {\n event.preventDefault();\n event.stopPropagation();\n\n if (this.isDisabled()) {\n return;\n }\n\n const nextValues = this.selectedValues().filter((selectedValue) => !Object.is(selectedValue, value));\n this.selectedValues.set(nextValues);\n this.onChange(nextValues);\n this.onTouched();\n }\n\n writeValue(value: unknown): void {\n if (this.multiple()) {\n this.selectedValues.set(Array.isArray(value) ? value : this.isEmptyValue(value) ? [] : [value]);\n return;\n }\n\n this.selectedValues.set(Array.isArray(value) ? value.slice(0, 1) : this.isEmptyValue(value) ? [] : [value]);\n }\n\r\n registerOnChange(fn: (value: unknown) => void): void {\r\n this.onChange = fn;\r\n }\r\n\r\n registerOnTouched(fn: () => void): void {\r\n this.onTouched = fn;\r\n }\r\n\r\n setDisabledState(isDisabled: boolean): void {\r\n this.disabledFromCva.set(isDisabled);\r\n }\r\n\r\n private scheduleClose(): void {\r\n setTimeout(() => this.combobox()?.close());\r\n }\r\n\r\n private isEmptyValue(value: unknown): boolean {\r\n return value == null || value === '';\r\n }\r\n}\r\n","<div\r\n class=\"bs-select\"\r\n ngCombobox\r\n readonly\r\n [class.bs-select--selected]=\"hasValue()\"\r\n [class.bs-select--disabled]=\"isDisabled()\"\r\n>\r\n <div #origin class=\"bs-select__trigger\">\r\n <span class=\"bs-select__label\">\n @if (multiple() && selectedOptions().length) {\n <span class=\"bs-select__tags\">\n <button type=\"button\" class=\"bs-select__add\" (click)=\"openCombobox($event)\">\n <lucide-icon aria-hidden=\"true\" [img]=\"plusIcon\" [size]=\"13\" [strokeWidth]=\"2\" />\n <span>{{ placeholder() }}</span>\n </button>\n @for (option of visibleSelectedOptions(); track option.value) {\n <span class=\"bs-select__tag\">\n <span class=\"bs-select__tag-text\">{{ option.label }}</span>\n <button\n type=\"button\"\n class=\"bs-select__tag-remove\"\n [attr.aria-label]=\"'Remove ' + option.label\"\n (click)=\"removeSelectedValue(option.value, $event)\"\n >\n <lucide-icon aria-hidden=\"true\" [img]=\"closeIcon\" [size]=\"12\" [strokeWidth]=\"2\" />\n </button>\n </span>\n }\n @if (hiddenSelectedCount()) {\n <span class=\"bs-select__tag bs-select__tag--ellipsis\" aria-hidden=\"true\">...</span>\n }\n </span>\n } @else {\n <span class=\"bs-select__label-text\">{{ displayValue() }}</span>\n }\n </span>\n <input\r\n [attr.aria-label]=\"ariaLabel()\"\r\n [placeholder]=\"placeholder()\"\r\n [disabled]=\"isDisabled()\"\r\n ngComboboxInput\r\n />\r\n <span class=\"bs-select__arrow\" aria-hidden=\"true\"></span>\r\n </div>\r\n <ng-template ngComboboxPopupContainer>\r\n <ng-template\r\n [cdkConnectedOverlay]=\"{ origin, usePopover: 'inline', matchWidth: matchTriggerWidth() }\"\r\n [cdkConnectedOverlayOpen]=\"combobox()?.expanded() ?? false\"\r\n cdkAttachPopoverAsChild\r\n >\r\n <div class=\"bs-select__popup\">\r\n <div\r\n ngListbox\n [values]=\"selectedValues()\"\n (valuesChange)=\"onListboxValueChange($event)\"\n [multi]=\"multiple()\"\n [disabled]=\"isDisabled()\"\n >\n @for (option of normalizedOptions(); track option.value) {\r\n <div\r\n ngOption\r\n [value]=\"option.value\"\r\n [label]=\"option.label\"\r\n [disabled]=\"option.disabled ?? false\"\r\n (click)=\"onOptionClick(option)\"\r\n >\r\n <span class=\"bs-select__option-text\">{{ option.label }}</span>\r\n <span class=\"bs-select__check\" aria-hidden=\"true\"></span>\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n </ng-template>\r\n </ng-template>\r\n</div>\r\n","import {\r\n ChangeDetectionStrategy,\r\n Component,\r\n ElementRef,\r\n computed,\r\n inject,\r\n input,\r\n output,\r\n signal,\r\n} from '@angular/core';\r\nimport { LucideAngularModule, EllipsisIcon, type LucideIconData } from 'lucide-angular';\r\n\r\nexport interface CardMenuItem {\r\n id: string;\r\n label: string;\r\n disabled?: boolean;\r\n}\r\n\r\nexport interface CardIconAction {\r\n id: string;\r\n icon: LucideIconData;\r\n ariaLabel: string;\r\n disabled?: boolean;\r\n}\r\n\r\nexport interface CardActionEvent {\r\n id: string;\r\n}\r\n\r\n@Component({\r\n selector: 's-card',\r\n imports: [LucideAngularModule],\r\n templateUrl: './s-card.html',\r\n styleUrl: './s-card.scss',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n host: {\r\n '(document:click)': 'onDocumentClick($event)',\r\n '(document:keydown.escape)': 'closeMenu()',\r\n },\r\n})\r\nexport class Card {\r\n private readonly hostElement = inject(ElementRef<HTMLElement>);\r\n\r\n readonly title = input('');\r\n readonly content = input('');\r\n readonly hoverable = input(false);\r\n readonly actionText = input('');\r\n readonly actionTextAriaLabel = input('');\r\n readonly menuItems = input<readonly CardMenuItem[]>([]);\r\n readonly iconActions = input<readonly CardIconAction[]>([]);\r\n\r\n readonly actionTriggered = output<CardActionEvent>();\r\n readonly menuItemSelected = output<CardActionEvent>();\r\n readonly iconActionSelected = output<CardActionEvent>();\r\n\r\n protected readonly moreIcon = EllipsisIcon;\r\n protected readonly hasMenu = computed(() => this.menuItems().length > 0);\r\n protected readonly hasIconActions = computed(() => this.iconActions().length > 0);\r\n protected readonly hasHeaderActions = computed(\r\n () => !!this.actionText() || this.hasMenu() || this.hasIconActions(),\r\n );\r\n protected readonly hasHeader = computed(() => !!this.title() || this.hasHeaderActions());\r\n protected readonly isMenuOpen = signal(false);\r\n\r\n protected onActionTextClick(): void {\r\n this.actionTriggered.emit({ id: 'action' });\r\n }\r\n\r\n protected onMenuTriggerClick(event: Event): void {\r\n event.stopPropagation();\r\n this.isMenuOpen.update((open) => !open);\r\n }\r\n\r\n protected onMenuItemClick(item: CardMenuItem): void {\r\n if (item.disabled) {\r\n return;\r\n }\r\n\r\n this.closeMenu();\r\n this.menuItemSelected.emit({ id: item.id });\r\n }\r\n\r\n protected onIconActionClick(action: CardIconAction): void {\r\n if (action.disabled) {\r\n return;\r\n }\r\n\r\n this.iconActionSelected.emit({ id: action.id });\r\n }\r\n\r\n protected closeMenu(): void {\r\n this.isMenuOpen.set(false);\r\n }\r\n\r\n protected onDocumentClick(event: Event): void {\r\n const target = event.target;\r\n if (!(target instanceof Node)) {\r\n return;\r\n }\r\n\r\n if (!this.hostElement.nativeElement.contains(target)) {\r\n this.closeMenu();\r\n }\r\n }\r\n\r\n protected trackByMenuId(_index: number, item: CardMenuItem): string {\r\n return item.id;\r\n }\r\n\r\n protected trackByActionId(_index: number, action: CardIconAction): string {\r\n return action.id;\r\n }\r\n}\r\n","<article class=\"card\" [class.card--hoverable]=\"hoverable()\">\r\n <div class=\"card__cover\">\r\n <ng-content select=\"[cardCover]\" />\r\n </div>\r\n\r\n @if (hasHeader()) {\r\n <header class=\"card__header\">\r\n <div class=\"card__header-main\">\r\n <ng-content select=\"[cardHeaderStart]\" />\r\n\r\n @if (title()) {\r\n <div class=\"card__title\">{{ title() }}</div>\r\n }\r\n </div>\r\n\r\n <div class=\"card__actions\">\r\n <ng-content select=\"[cardHeaderEnd]\" />\r\n\r\n @if (actionText()) {\r\n <button\r\n type=\"button\"\r\n class=\"card__action-text\"\r\n [attr.aria-label]=\"actionTextAriaLabel() || actionText()\"\r\n (click)=\"onActionTextClick()\"\r\n >\r\n {{ actionText() }}\r\n </button>\r\n }\r\n\r\n @if (hasMenu()) {\r\n <div class=\"card__menu\">\r\n <button\r\n type=\"button\"\r\n class=\"card__icon-button\"\r\n aria-label=\"打开更多操作\"\r\n (click)=\"onMenuTriggerClick($event)\"\r\n >\r\n <i-lucide [img]=\"moreIcon\" class=\"card__icon\"></i-lucide>\r\n </button>\r\n\r\n @if (isMenuOpen()) {\r\n <div class=\"card__menu-panel\" role=\"menu\" aria-label=\"更多操作\">\r\n @for (item of menuItems(); track trackByMenuId($index, item)) {\r\n <button\r\n type=\"button\"\r\n class=\"card__menu-item\"\r\n [disabled]=\"item.disabled\"\r\n (click)=\"onMenuItemClick(item)\"\r\n >\r\n {{ item.label }}\r\n </button>\r\n }\r\n </div>\r\n }\r\n </div>\r\n }\r\n\r\n @if (hasIconActions()) {\r\n <div class=\"card__icon-actions\">\r\n @for (action of iconActions(); track trackByActionId($index, action)) {\r\n <button\r\n type=\"button\"\r\n class=\"card__icon-button\"\r\n [attr.aria-label]=\"action.ariaLabel\"\r\n [disabled]=\"action.disabled\"\r\n (click)=\"onIconActionClick(action)\"\r\n >\r\n <i-lucide [img]=\"action.icon\" class=\"card__icon\"></i-lucide>\r\n </button>\r\n }\r\n </div>\r\n }\r\n </div>\r\n </header>\r\n }\r\n\r\n <div class=\"card__subheader\">\r\n <ng-content select=\"[cardSubheader]\" />\r\n </div>\r\n\r\n <div class=\"card__body\">\r\n <div class=\"card__body-main\">\r\n <ng-content select=\"[cardBody]\" />\r\n\r\n @if (content()) {\r\n <p class=\"card__text\">{{ content() }}</p>\r\n } @else {\r\n <ng-content />\r\n }\r\n </div>\r\n\r\n <aside class=\"card__aside\">\r\n <ng-content select=\"[cardAside]\" />\r\n </aside>\r\n </div>\r\n\r\n <footer class=\"card__footer\">\r\n <ng-content select=\"[cardFooter]\" />\r\n </footer>\r\n</article>\r\n","import {\r\n ChangeDetectionStrategy,\r\n Component,\r\n ElementRef,\r\n computed,\r\n inject,\r\n input,\r\n model,\r\n signal,\r\n} from '@angular/core';\r\nimport { CalendarDaysIcon, ChevronLeftIcon, ChevronRightIcon, LucideAngularModule, XIcon } from 'lucide-angular';\r\n\r\ninterface CalendarCell {\r\n date: Date;\r\n label: number;\r\n iso: string;\r\n inCurrentMonth: boolean;\r\n isToday: boolean;\r\n isDisabled: boolean;\r\n}\r\n\r\ninterface CalendarRow {\r\n id: string;\r\n cells: CalendarCell[];\r\n}\r\n\r\ninterface MonthCell {\r\n month: number;\r\n label: string;\r\n date: Date;\r\n}\r\n\r\ninterface QuarterCell {\r\n quarter: 1 | 2 | 3 | 4;\r\n label: string;\r\n date: Date;\r\n}\r\n\r\ninterface DatePickerPanelPosition {\r\n readonly top: number;\r\n readonly left: number;\r\n}\r\n\r\nexport interface DateRangeValue {\r\n start: Date | null;\r\n end: Date | null;\r\n}\r\n\r\nexport type DatePickerMode = 'date' | 'week' | 'month' | 'quarter' | 'range';\r\n\r\nfunction startOfDay(value: Date): Date {\r\n return new Date(value.getFullYear(), value.getMonth(), value.getDate());\r\n}\r\n\r\nfunction toIsoDate(value: Date): string {\r\n const year = value.getFullYear();\r\n const month = `${value.getMonth() + 1}`.padStart(2, '0');\r\n const day = `${value.getDate()}`.padStart(2, '0');\r\n return `${year}-${month}-${day}`;\r\n}\r\n\r\nfunction sameDay(a: Date | null, b: Date | null): boolean {\r\n if (!a || !b) {\r\n return false;\r\n }\r\n\r\n return toIsoDate(a) === toIsoDate(b);\r\n}\r\n\r\nfunction isBetween(target: Date, start: Date, end: Date): boolean {\r\n const time = startOfDay(target).getTime();\r\n return time >= startOfDay(start).getTime() && time <= startOfDay(end).getTime();\r\n}\r\n\r\nfunction getWeekRange(value: Date): { start: Date; end: Date } {\r\n const day = value.getDay();\r\n const start = new Date(value.getFullYear(), value.getMonth(), value.getDate() - day);\r\n const end = new Date(start.getFullYear(), start.getMonth(), start.getDate() + 6);\r\n\r\n return {\r\n start: startOfDay(start),\r\n end: startOfDay(end),\r\n };\r\n}\r\n\r\nfunction normalizeRangeValue(value: DateRangeValue | null): DateRangeValue {\r\n if (!value) {\r\n return { start: null, end: null };\r\n }\r\n\r\n const start = value.start ? startOfDay(value.start) : null;\r\n const end = value.end ? startOfDay(value.end) : null;\r\n if (start && end && start.getTime() > end.getTime()) {\r\n return { start: end, end: start };\r\n }\r\n\r\n return { start, end };\r\n}\r\n\r\n@Component({\r\n selector: 's-date-picker',\r\n imports: [LucideAngularModule],\r\n templateUrl: './s-date-picker.html',\r\n styleUrl: './s-date-picker.scss',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n host: {\r\n '(document:click)': 'onDocumentClick($event)',\r\n '(document:keydown)': 'onDocumentKeydown($event)',\r\n '(window:resize)': 'onWindowResize()',\r\n '[class.date-picker-host--range]': \"mode() === 'range'\",\r\n '[class.date-picker-host--open]': 'isOpen()',\r\n },\r\n})\r\nexport class DatePicker {\r\n private readonly hostElement = inject(ElementRef<HTMLElement>);\r\n\r\n readonly value = model<Date | null>(null);\r\n readonly rangeValue = model<DateRangeValue | null>(null);\r\n readonly mode = input<DatePickerMode>('date');\r\n readonly placeholder = input('请选择日期');\r\n readonly rangeSeparator = input('~');\r\n readonly locale = input('zh-CN');\r\n readonly disabled = input(false);\r\n readonly minDate = input<Date | null>(null);\r\n readonly maxDate = input<Date | null>(null);\r\n readonly confirmText = input('确定');\r\n readonly cancelText = input('取消');\r\n readonly todayText = input('今天');\r\n readonly thisYearText = input('今年');\r\n readonly startPlaceholder = input('开始日期');\r\n readonly endPlaceholder = input('结束日期');\r\n readonly iconSize = input(12);\r\n readonly weekDayLabels = input<readonly string[]>(['日', '一', '二', '三', '四', '五', '六']);\r\n\r\n protected readonly calendarIcon = CalendarDaysIcon;\r\n protected readonly prevIcon = ChevronLeftIcon;\r\n protected readonly nextIcon = ChevronRightIcon;\r\n protected readonly clearIcon = XIcon;\r\n\r\n protected readonly isOpen = signal(false);\r\n protected readonly panelPosition = signal<DatePickerPanelPosition>({ top: 0, left: 0 });\r\n protected readonly hasSelection = computed(() => {\r\n if (this.mode() === 'range') {\r\n const range = normalizeRangeValue(this.rangeValue());\r\n return !!range.start || !!range.end;\r\n }\r\n\r\n return this.value() != null;\r\n });\r\n protected readonly shouldShowClear = computed(() => !this.disabled() && this.hasSelection());\r\n\r\n private readonly today = startOfDay(new Date());\r\n private readonly pendingDate = signal<Date | null>(null);\r\n private readonly pendingRange = signal<DateRangeValue>({ start: null, end: null });\r\n private readonly rangeHoverDate = signal<Date | null>(null);\r\n private readonly rangeSelectingPart = signal<'start' | 'end'>('start');\r\n private readonly viewDate = signal<Date>(this.getInitialViewDate());\r\n\r\n protected readonly displayValue = computed(() => {\r\n if (this.mode() === 'range') {\r\n const range = normalizeRangeValue(this.rangeValue());\r\n const formatter = new Intl.DateTimeFormat(this.locale(), {\r\n year: 'numeric',\r\n month: '2-digit',\r\n day: '2-digit',\r\n });\r\n const start = range.start ? formatter.format(range.start) : this.startPlaceholder();\r\n const end = range.end ? formatter.format(range.end) : this.endPlaceholder();\r\n return `${start} ${this.rangeSeparator()} ${end}`;\r\n }\r\n\r\n const value = this.value();\r\n if (!value) {\r\n return '';\r\n }\r\n\r\n if (this.mode() === 'quarter') {\r\n return `${value.getFullYear()}年 Q${Math.floor(value.getMonth() / 3) + 1}`;\r\n }\r\n\r\n if (this.mode() === 'month') {\r\n return `${value.getFullYear()}年 ${value.getMonth() + 1}月`;\r\n }\r\n\r\n if (this.mode() === 'week') {\r\n const range = getWeekRange(value);\r\n const formatter = new Intl.DateTimeFormat(this.locale(), {\r\n month: '2-digit',\r\n day: '2-digit',\r\n });\r\n return `${formatter.format(range.start)} ${this.rangeSeparator()} ${formatter.format(range.end)}`;\r\n }\r\n\r\n return new Intl.DateTimeFormat(this.locale(), {\r\n year: 'numeric',\r\n month: '2-digit',\r\n day: '2-digit',\r\n }).format(value);\r\n });\r\n\r\n protected readonly title = computed(() => {\r\n const currentViewDate = this.viewDate();\r\n\r\n if (this.mode() === 'month' || this.mode() === 'quarter') {\r\n return `${currentViewDate.getFullYear()}年`;\r\n }\r\n\r\n return new Intl.DateTimeFormat(this.locale(), {\r\n year: 'numeric',\r\n month: 'long',\r\n }).format(currentViewDate);\r\n });\r\n\r\n protected readonly cells = computed(() => {\r\n const currentViewDate = this.viewDate();\r\n const firstDayOfMonth = new Date(currentViewDate.getFullYear(), currentViewDate.getMonth(), 1);\r\n const startWeekDay = firstDayOfMonth.getDay();\r\n const startDate = new Date(currentViewDate.getFullYear(), currentViewDate.getMonth(), 1 - startWeekDay);\r\n\r\n return Array.from({ length: 42 }, (_, index) => {\r\n const date = new Date(startDate.getFullYear(), startDate.getMonth(), startDate.getDate() + index);\r\n const normalized = startOfDay(date);\r\n\r\n return {\r\n date: normalized,\r\n label: normalized.getDate(),\r\n iso: toIsoDate(normalized),\r\n inCurrentMonth: normalized.getMonth() === currentViewDate.getMonth(),\r\n isToday: sameDay(normalized, this.today),\r\n isDisabled: this.isDateDisabled(normalized),\r\n } satisfies CalendarCell;\r\n });\r\n });\r\n\r\n protected readonly rows = computed<CalendarRow[]>(() => {\r\n const cells = this.cells();\r\n const rows = Array.from({ length: Math.ceil(cells.length / 7) }, (_, index) => ({\r\n id: cells[index * 7]?.iso ?? `${index}`,\r\n cells: cells.slice(index * 7, index * 7 + 7),\r\n }));\r\n\r\n const lastRow = rows[rows.length - 1];\r\n if (rows.length > 5 && lastRow?.cells.every((cell) => !cell.inCurrentMonth)) {\r\n rows.pop();\r\n }\r\n\r\n return rows;\r\n });\r\n\r\n protected readonly monthCells = computed<MonthCell[]>(() => {\r\n const year = this.viewDate().getFullYear();\r\n return Array.from({ length: 12 }, (_, month) => ({\r\n month,\r\n label: `${month + 1}月`,\r\n date: new Date(year, month, 1),\r\n }));\r\n });\r\n\r\n protected readonly quarterCells = computed<QuarterCell[]>(() => {\r\n const year = this.viewDate().getFullYear();\r\n return [\r\n { quarter: 1, label: 'Q1', date: new Date(year, 0, 1) },\r\n { quarter: 2, label: 'Q2', date: new Date(year, 3, 1) },\r\n { quarter: 3, label: 'Q3', date: new Date(year, 6, 1) },\r\n { quarter: 4, label: 'Q4', date: new Date(year, 9, 1) },\r\n ];\r\n });\r\n\r\n protected toggle(): void {\r\n if (this.disabled()) {\r\n return;\r\n }\r\n\r\n if (this.isOpen()) {\r\n this.closePanel();\r\n return;\r\n }\r\n\r\n this.syncPendingStateFromValue();\r\n this.updatePanelPosition();\r\n this.isOpen.set(true);\r\n requestAnimationFrame(() => this.updatePanelPosition());\r\n }\r\n\r\n protected clearSelection(event: Event): void {\r\n event.preventDefault();\r\n event.stopPropagation();\r\n\r\n if (this.disabled() || !this.hasSelection()) {\r\n return;\r\n }\r\n\r\n if (this.mode() === 'range') {\r\n this.rangeValue.set({ start: null, end: null });\r\n this.pendingRange.set({ start: null, end: null });\r\n this.rangeSelectingPart.set('start');\r\n this.rangeHoverDate.set(null);\r\n } else {\r\n this.value.set(null);\r\n this.pendingDate.set(null);\r\n }\r\n\r\n this.closePanel();\r\n }\r\n\r\n protected selectDate(date: Date): void {\r\n if (this.isDateDisabled(date)) {\r\n return;\r\n }\r\n\r\n if (this.mode() === 'range') {\r\n this.selectRangeDate(date);\r\n return;\r\n }\r\n\r\n this.pendingDate.set(date);\r\n }\r\n\r\n protected selectWeek(row: CalendarRow): void {\r\n const anchor =\r\n row.cells.find((cell) => cell.isToday && cell.inCurrentMonth) ??\r\n row.cells.find((cell) => cell.inCurrentMonth) ??\r\n row.cells[0];\r\n if (!anchor || this.isDateDisabled(anchor.date)) {\r\n return;\r\n }\r\n\r\n this.pendingDate.set(anchor.date);\r\n }\r\n\r\n protected selectMonth(cell: MonthCell): void {\r\n const selectedDate = new Date(cell.date.getFullYear(), cell.month, 1);\r\n this.pendingDate.set(selectedDate);\r\n }\r\n\r\n protected selectQuarter(cell: QuarterCell): void {\r\n this.pendingDate.set(cell.date);\r\n }\r\n\r\n protected selectToday(): void {\r\n if (this.isDateDisabled(this.today)) {\r\n this.viewDate.set(this.today);\r\n return;\r\n }\r\n\r\n if (this.mode() === 'range') {\r\n const today = this.today;\r\n this.pendingRange.set({ start: today, end: today });\r\n this.rangeSelectingPart.set('end');\r\n this.rangeHoverDate.set(null);\r\n this.viewDate.set(today);\r\n return;\r\n }\r\n\r\n this.pendingDate.set(this.today);\r\n this.viewDate.set(this.today);\r\n }\r\n\r\n protected selectThisYear(): void {\r\n const currentYear = new Date().getFullYear();\r\n\r\n if (this.mode() === 'range') {\r\n const currentRange = this.pendingRange();\r\n this.pendingRange.set({\r\n start: currentRange.start ? new Date(currentYear, currentRange.start.getMonth(), currentRange.start.getDate()) : null,\r\n end: currentRange.end ? new Date(currentYear, currentRange.end.getMonth(), currentRange.end.getDate()) : null,\r\n });\r\n this.viewDate.set(new Date(currentYear, this.viewDate().getMonth(), 1));\r\n return;\r\n }\r\n\r\n const currentPendingDate = this.pendingDate() ?? this.today;\r\n const selectedDate = new Date(currentYear, currentPendingDate.getMonth(), 1);\r\n this.pendingDate.set(selectedDate);\r\n this.viewDate.set(new Date(currentYear, this.viewDate().getMonth(), 1));\r\n }\r\n\r\n protected confirm(): void {\r\n if (this.mode() === 'range') {\r\n this.rangeValue.set(this.pendingRange());\r\n } else {\r\n this.value.set(this.pendingDate());\r\n }\r\n this.closePanel();\r\n }\r\n\r\n protected cancel(): void {\r\n this.syncPendingStateFromValue();\r\n this.closePanel();\r\n }\r\n\r\n protected prev(): void {\r\n const current = this.viewDate();\r\n if (this.mode() === 'month' || this.mode() === 'quarter') {\r\n this.viewDate.set(new Date(current.getFullYear() - 1, current.getMonth(), 1));\r\n return;\r\n }\r\n\r\n this.viewDate.set(new Date(current.getFullYear(), current.getMonth() - 1, 1));\r\n }\r\n\r\n protected next(): void {\r\n const current = this.viewDate();\r\n if (this.mode() === 'month' || this.mode() === 'quarter') {\r\n this.viewDate.set(new Date(current.getFullYear() + 1, current.getMonth(), 1));\r\n return;\r\n }\r\n\r\n this.viewDate.set(new Date(current.getFullYear(), current.getMonth() + 1, 1));\r\n }\r\n\r\n protected isSelected(cell: CalendarCell): boolean {\r\n return this.mode() === 'date' && sameDay(cell.date, this.pendingDate());\r\n }\r\n\r\n protected isWeekSelected(row: CalendarRow): boolean {\r\n if (this.mode() !== 'week') {\r\n return false;\r\n }\r\n\r\n const currentPendingDate = this.pendingDate();\r\n return !!currentPendingDate && row.cells.some((cell) => sameDay(cell.date, currentPendingDate));\r\n }\r\n\r\n protected isWeekAnchor(cell: CalendarCell): boolean {\r\n return this.mode() === 'week' && sameDay(cell.date, this.pendingDate());\r\n }\r\n\r\n protected isTodayCell(cell: CalendarCell): boolean {\r\n return cell.isToday;\r\n }\r\n\r\n protected isMonthSelected(cell: MonthCell): boolean {\r\n const currentPendingDate = this.pendingDate();\r\n return (\r\n !!currentPendingDate &&\r\n currentPendingDate.getFullYear() === cell.date.getFullYear() &&\r\n currentPendingDate.getMonth() === cell.month\r\n );\r\n }\r\n\r\n protected isQuarterSelected(cell: QuarterCell): boolean {\r\n const currentPendingDate = this.pendingDate();\r\n return (\r\n !!currentPendingDate &&\r\n currentPendingDate.getFullYear() === cell.date.getFullYear() &&\r\n Math.floor(currentPendingDate.getMonth() / 3) + 1 === cell.quarter\r\n );\r\n }\r\n\r\n protected isRangeStart(cell: CalendarCell): boolean {\r\n if (this.mode() !== 'range') {\r\n return false;\r\n }\r\n\r\n return sameDay(cell.date, this.getRangePreview().start);\r\n }\r\n\r\n protected isRangeEnd(cell: CalendarCell): boolean {\r\n if (this.mode() !== 'range') {\r\n return false;\r\n }\r\n\r\n return sameDay(cell.date, this.getRangePreview().end);\r\n }\r\n\r\n protected isRangeInBetween(cell: CalendarCell): boolean {\r\n if (this.mode() !== 'range') {\r\n return false;\r\n }\r\n\r\n const preview = this.getRangePreview();\r\n if (!preview.start || !preview.end) {\r\n return false;\r\n }\r\n\r\n return !sameDay(cell.date, preview.start) && !sameDay(cell.date, preview.end) && isBetween(cell.date, preview.start, preview.end);\r\n }\r\n\r\n protected hasRangePreviewEnd(): boolean {\r\n if (this.mode() !== 'range') {\r\n return false;\r\n }\r\n\r\n return !!this.getRangePreview().end;\r\n }\r\n\r\n protected trackByIso(_index: number, cell: CalendarCell): string {\r\n return cell.iso;\r\n }\r\n\r\n protected trackByRow(_index: number, row: CalendarRow): string {\r\n return row.id;\r\n }\r\n\r\n protected onCellHover(date: Date | null): void {\r\n if (this.mode() !== 'range') {\r\n return;\r\n }\r\n\r\n this.rangeHoverDate.set(date ? startOfDay(date) : null);\r\n }\r\n\r\n protected onDocumentClick(event: Event): void {\r\n const target = event.target;\r\n if (!(target instanceof Node)) {\r\n return;\r\n }\r\n\r\n if (!this.hostElement.nativeElement.contains(target)) {\r\n this.closePanel();\r\n }\r\n }\r\n\r\n protected onDocumentKeydown(event: KeyboardEvent): void {\r\n if (!this.isOpen()) {\r\n return;\r\n }\r\n\r\n if (event.key === 'Escape') {\r\n event.preventDefault();\r\n this.cancel();\r\n return;\r\n }\r\n\r\n if (event.key !== 'Enter') {\r\n return;\r\n }\r\n\r\n const target = event.target;\r\n if (target instanceof HTMLElement && target.closest('.date-picker__grid, .date-picker__footer')) {\r\n return;\r\n }\r\n\r\n event.preventDefault();\r\n this.confirm();\r\n }\r\n\r\n protected onWindowResize(): void {\r\n if (this.isOpen()) {\r\n this.updatePanelPosition();\r\n }\r\n }\r\n\r\n private selectRangeDate(date: Date): void {\r\n const normalizedDate = startOfDay(date);\r\n if (this.isDateDisabled(normalizedDate)) {\r\n return;\r\n }\r\n\r\n const currentRange = this.pendingRange();\r\n\r\n if (this.rangeSelectingPart() === 'start' || !currentRange.start || (currentRange.start && currentRange.end)) {\r\n this.pendingRange.set({ start: normalizedDate, end: null });\r\n this.rangeSelectingPart.set('end');\r\n this.rangeHoverDate.set(null);\r\n return;\r\n }\r\n\r\n if (currentRange.start.getTime() <= normalizedDate.getTime()) {\r\n this.pendingRange.set({ start: currentRange.start, end: normalizedDate });\r\n } else {\r\n this.pendingRange.set({ start: normalizedDate, end: currentRange.start });\r\n }\r\n\r\n this.rangeSelectingPart.set('start');\r\n this.rangeHoverDate.set(null);\r\n }\r\n\r\n private getRangePreview(): DateRangeValue {\r\n const currentRange = this.pendingRange();\r\n const hoverDate = this.rangeHoverDate();\r\n\r\n if (!currentRange.start || currentRange.end || !hoverDate || this.rangeSelectingPart() !== 'end') {\r\n return currentRange;\r\n }\r\n\r\n if (hoverDate.getTime() >= currentRange.start.getTime()) {\r\n return { start: currentRange.start, end: hoverDate };\r\n }\r\n\r\n return { start: hoverDate, end: currentRange.start };\r\n }\r\n\r\n private isDateDisabled(date: Date): boolean {\r\n const normalizedDate = startOfDay(date);\r\n const minDate = this.minDate();\r\n const maxDate = this.maxDate();\r\n\r\n if (minDate && normalizedDate.getTime() < startOfDay(minDate).getTime()) {\r\n return true;\r\n }\r\n\r\n return !!maxDate && normalizedDate.getTime() > startOfDay(maxDate).getTime();\r\n }\r\n\r\n private syncPendingStateFromValue(): void {\r\n if (this.mode() === 'range') {\r\n const range = normalizeRangeValue(this.rangeValue());\r\n this.pendingRange.set(range);\r\n this.rangeSelectingPart.set(range.start && !range.end ? 'end' : 'start');\r\n this.rangeHoverDate.set(null);\r\n this.viewDate.set(range.start ?? range.end ?? this.today);\r\n return;\r\n }\r\n\r\n const currentValue = this.value();\r\n this.pendingDate.set(currentValue ? startOfDay(currentValue) : null);\r\n this.viewDate.set(currentValue ? startOfDay(currentValue) : this.today);\r\n }\r\n\r\n private getInitialViewDate(): Date {\r\n const range = normalizeRangeValue(this.rangeValue());\r\n return range.start ?? range.end ?? (this.value() ? startOfDay(this.value() as Date) : this.today);\r\n }\r\n\r\n private closePanel(): void {\r\n this.isOpen.set(false);\r\n this.rangeHoverDate.set(null);\r\n }\r\n\r\n private updatePanelPosition(): void {\r\n const hostElement = this.hostElement.nativeElement as HTMLElement;\r\n const trigger = hostElement.querySelector('.date-picker__trigger') as HTMLElement | null;\r\n if (!trigger) return;\r\n\r\n const hostStyles = getComputedStyle(hostElement);\r\n const panelSize = this.toCssPixelValue(hostStyles.getPropertyValue('--date-panel-size'), 252);\r\n const gap = 6;\r\n const viewportPadding = 8;\r\n const triggerRect = trigger.getBoundingClientRect();\r\n const spaceBelow = window.innerHeight - triggerRect.bottom - viewportPadding;\r\n const hasRoomAbove = triggerRect.top - viewportPadding >= panelSize + gap;\r\n const top = spaceBelow >= panelSize + gap || !hasRoomAbove\r\n ? triggerRect.bottom + gap\r\n : triggerRect.top - panelSize - gap;\r\n const maxLeft = Math.max(viewportPadding, window.innerWidth - panelSize - viewportPadding);\r\n const left = Math.min(Math.max(triggerRect.left, viewportPadding), maxLeft);\r\n\r\n this.panelPosition.set({ top, left });\r\n }\r\n\r\n private toCssPixelValue(value: string, fallback: number): number {\r\n const parsedValue = Number.parseFloat(value);\r\n return Number.isFinite(parsedValue) ? parsedValue : fallback;\r\n }\r\n}\r\n","<div\r\n class=\"date-picker s-date-range-picker\"\r\n [class.date-picker--disabled]=\"disabled()\"\r\n [class.s-date-range-picker--range]=\"mode() === 'range'\"\r\n>\r\n <button\r\n type=\"button\"\r\n class=\"date-picker__trigger s-date-range-picker__trigger\"\r\n [disabled]=\"disabled()\"\r\n (click)=\"toggle()\"\r\n >\r\n <span\r\n class=\"date-picker__value\"\r\n [class.date-picker__value--placeholder]=\"mode() !== 'range' && !displayValue()\"\r\n [class.date-picker__value--range]=\"mode() === 'range'\"\r\n >\r\n @if (mode() === 'range') {\r\n <span class=\"date-picker__range-part\" [class.date-picker__range-part--placeholder]=\"!rangeValue()?.start\">\r\n {{ rangeValue()?.start ? displayValue().split(' ' + rangeSeparator() + ' ')[0] : startPlaceholder() }}\r\n </span>\r\n <span class=\"date-picker__range-separator\">{{ rangeSeparator() }}</span>\r\n <span class=\"date-picker__range-part\" [class.date-picker__range-part--placeholder]=\"!rangeValue()?.end\">\r\n {{ rangeValue()?.end ? displayValue().split(' ' + rangeSeparator() + ' ')[1] : endPlaceholder() }}\r\n </span>\r\n } @else {\r\n {{ displayValue() || placeholder() }}\r\n }\r\n </span>\r\n @if (shouldShowClear()) {\r\n <span\r\n class=\"date-picker__trigger-icon date-picker__trigger-icon--clear\"\r\n role=\"button\"\r\n tabindex=\"-1\"\r\n aria-label=\"清空日期\"\r\n (click)=\"clearSelection($event)\"\r\n >\r\n <i-lucide [img]=\"clearIcon\" [size]=\"iconSize()\"></i-lucide>\r\n </span>\r\n } @else {\r\n <span class=\"date-picker__trigger-icon\" aria-hidden=\"true\">\r\n <i-lucide [img]=\"calendarIcon\" [size]=\"iconSize()\"></i-lucide>\r\n </span>\r\n }\r\n </button>\r\n\r\n @if (isOpen()) {\r\n <div\r\n class=\"date-picker__panel s-date-range-picker__panel\"\r\n [style.top.px]=\"panelPosition().top\"\r\n [style.left.px]=\"panelPosition().left\"\r\n >\r\n <div class=\"date-picker__header s-date-range-picker__header\">\r\n <button type=\"button\" class=\"date-picker__nav-btn\" (click)=\"prev()\" aria-label=\"上一个月\">\r\n <i-lucide [img]=\"prevIcon\"></i-lucide>\r\n </button>\r\n <div class=\"date-picker__title\">{{ title() }}</div>\r\n <button type=\"button\" class=\"date-picker__nav-btn\" (click)=\"next()\" aria-label=\"下一个月\">\r\n <i-lucide [img]=\"nextIcon\"></i-lucide>\r\n </button>\r\n </div>\r\n\r\n @if (mode() === 'month') {\r\n <div class=\"date-picker__months\">\r\n @for (cell of monthCells(); track cell.month) {\r\n <button\r\n type=\"button\"\r\n class=\"date-picker__month-cell\"\r\n [class.date-picker__month-cell--selected]=\"isMonthSelected(cell)\"\r\n (click)=\"selectMonth(cell)\"\r\n >\r\n {{ cell.label }}\r\n </button>\r\n }\r\n </div>\r\n } @else if (mode() === 'quarter') {\r\n <div class=\"date-picker__quarters\">\r\n @for (cell of quarterCells(); track cell.quarter) {\r\n <button\r\n type=\"button\"\r\n class=\"date-picker__quarter-cell\"\r\n [class.date-picker__quarter-cell--selected]=\"isQuarterSelected(cell)\"\r\n (click)=\"selectQuarter(cell)\"\r\n >\r\n {{ cell.label }}\r\n </button>\r\n }\r\n </div>\r\n } @else {\r\n <div class=\"date-picker__weekdays s-date-range-picker__week\">\r\n @for (label of weekDayLabels(); track label) {\r\n <div class=\"date-picker__weekday\">{{ label }}</div>\r\n }\r\n </div>\r\n\r\n <div\r\n class=\"date-picker__grid s-date-range-picker__grid\"\r\n [class.date-picker__grid--range-preview]=\"hasRangePreviewEnd()\"\r\n >\r\n @for (row of rows(); track trackByRow($index, row)) {\r\n <div class=\"date-picker__row\" [class.date-picker__row--selected]=\"isWeekSelected(row)\">\r\n @for (cell of row.cells; track trackByIso($index, cell)) {\r\n <button\r\n type=\"button\"\r\n class=\"date-picker__cell s-date-range-picker__cell s-calendar-cell\"\r\n [class.date-picker__cell--muted]=\"!cell.inCurrentMonth\"\r\n [class.date-picker__cell--disabled]=\"cell.isDisabled\"\r\n [class.date-picker__cell--today]=\"isTodayCell(cell)\"\r\n [class.date-picker__cell--selected]=\"isSelected(cell)\"\r\n [class.date-picker__cell--week-anchor]=\"isWeekAnchor(cell)\"\r\n [class.date-picker__cell--range-start]=\"isRangeStart(cell)\"\r\n [class.date-picker__cell--range-end]=\"isRangeEnd(cell)\"\r\n [class.date-picker__cell--range-middle]=\"isRangeInBetween(cell)\"\r\n [class.s-calendar-cell--outside]=\"!cell.inCurrentMonth\"\r\n [class.s-calendar-cell--disabled]=\"cell.isDisabled\"\r\n [class.s-calendar-cell--today]=\"isTodayCell(cell)\"\r\n [class.s-calendar-cell--selected-start]=\"isRangeStart(cell)\"\r\n [class.s-calendar-cell--selected-end]=\"isRangeEnd(cell)\"\r\n [class.s-calendar-cell--in-range]=\"isRangeInBetween(cell)\"\r\n [disabled]=\"cell.isDisabled\"\r\n (click)=\"mode() === 'week' ? selectWeek(row) : selectDate(cell.date)\"\r\n (mouseenter)=\"onCellHover(cell.date)\"\r\n (mouseleave)=\"onCellHover(null)\"\r\n >\r\n <span class=\"date-picker__cell-label\">{{ cell.label }}</span>\r\n </button>\r\n }\r\n </div>\r\n }\r\n </div>\r\n }\r\n\r\n <div class=\"date-picker__footer s-date-range-picker__footer\">\r\n <button type=\"button\" class=\"date-picker__today-btn\" (click)=\"selectToday()\">\r\n {{ todayText() }}\r\n </button>\r\n <div class=\"date-picker__footer-actions\">\r\n <button type=\"button\" class=\"date-picker__footer-btn\" (click)=\"cancel()\">{{ cancelText() }}</button>\r\n <button type=\"button\" class=\"date-picker__footer-btn date-picker__footer-btn--primary\" (click)=\"confirm()\">\r\n {{ confirmText() }}\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n }\r\n</div>\r\n","import {\r\n ChangeDetectorRef,\r\n ChangeDetectionStrategy,\r\n Component,\r\n Directive,\r\n ViewEncapsulation,\r\n booleanAttribute,\r\n forwardRef,\r\n inject,\r\n input,\r\n} from '@angular/core';\r\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\r\n\r\nexport type PlatformDrawerSectionLayout = 'grid' | 'plain';\r\nexport type PlatformDrawerFieldVariant = 'default' | 'switch';\r\n\r\n@Component({\r\n selector: 'platform-drawer-form',\r\n template: '<ng-content />',\r\n styleUrl: './s-drawer-form.scss',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n // Needed for styling projected form controls; keep selectors scoped in drawer-form.scss.\r\n encapsulation: ViewEncapsulation.None,\r\n})\r\nexport class PlatformDrawerForm {}\r\n\r\n@Component({\r\n selector: 'platform-drawer-section',\r\n template: `\r\n @if (title()) {\r\n <div class=\"platform-drawer-section__title\" [class.platform-drawer-section__title--muted]=\"muted()\">\r\n <span>{{ title() }}</span>\r\n <ng-content select=\"[platformDrawerSectionAction]\" />\r\n </div>\r\n }\r\n\r\n <div class=\"platform-drawer-section__content\" [class.platform-drawer-section__content--plain]=\"layout() === 'plain'\">\r\n <ng-content />\r\n </div>\r\n `,\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class PlatformDrawerSection {\r\n readonly title = input('');\r\n readonly layout = input<PlatformDrawerSectionLayout>('grid');\r\n readonly muted = input(false, { transform: booleanAttribute });\r\n}\r\n\r\n@Component({\r\n selector: 'platform-drawer-field',\r\n template: `\r\n <div\r\n class=\"platform-drawer-field\"\r\n [class.platform-drawer-field--full]=\"full()\"\r\n [class.platform-drawer-field--invalid]=\"invalid()\"\r\n [class.platform-drawer-field--switch]=\"variant() === 'switch'\"\r\n >\r\n @if (variant() === 'switch') {\r\n <span class=\"platform-drawer-field__switch-copy\">\r\n <span>{{ label() }}</span>\r\n @if (description()) {\r\n <small>{{ description() }}</small>\r\n }\r\n </span>\r\n } @else if (label()) {\r\n <span class=\"platform-drawer-field__label\">\r\n @if (required()) {\r\n <em>*</em>\r\n }\r\n {{ label() }}\r\n </span>\r\n }\r\n\r\n <ng-content />\r\n </div>\r\n `,\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class PlatformDrawerField {\r\n readonly label = input('');\r\n readonly description = input('');\r\n readonly required = input(false, { transform: booleanAttribute });\r\n readonly full = input(false, { transform: booleanAttribute });\r\n readonly invalid = input(false, { transform: booleanAttribute });\r\n readonly variant = input<PlatformDrawerFieldVariant>('default');\r\n}\r\n\r\n@Component({\r\n selector: 'platform-drawer-footer',\r\n template: '<ng-content />',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class PlatformDrawerFooter {}\r\n\r\n@Component({\r\n selector: 'platform-drawer-error',\r\n template: '<small class=\"platform-drawer-error\"><ng-content /></small>',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class PlatformDrawerError {}\r\n\r\n@Component({\r\n selector: 'platform-prefixed-input',\r\n template: `\r\n <span class=\"platform-prefixed-input__prefix\">{{ prefix() }}</span>\r\n <ng-content />\r\n `,\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class PlatformPrefixedInput {\r\n readonly prefix = input('');\r\n}\r\n\r\n@Component({\r\n selector: 'platform-drawer-checkbox-group',\r\n template: '<ng-content />',\r\n host: {\r\n '[class.platform-drawer-checkbox-group--panel]': 'panel()',\r\n },\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class PlatformDrawerCheckboxGroup {\r\n readonly panel = input(false, { transform: booleanAttribute });\r\n}\r\n\r\n@Component({\r\n selector: 'platform-drawer-checkbox',\r\n template: '<label class=\"platform-drawer-checkbox\"><ng-content /></label>',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class PlatformDrawerCheckbox {}\r\n\r\n@Component({\r\n selector: 'platform-drawer-empty',\r\n template: '<ng-content />',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class PlatformDrawerEmpty {}\r\n\r\n@Component({\r\n selector: 'platform-drawer-table',\r\n template: '<ng-content />',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class PlatformDrawerTable {}\r\n\r\n@Component({\r\n selector: 'platform-drawer-input-action',\r\n template: '<ng-content />',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class PlatformDrawerInputAction {}\r\n\r\n@Directive({\r\n selector: 'button[platformDrawerInputActionButton]',\r\n host: {\r\n class: 'platform-drawer-input-action__button',\r\n },\r\n})\r\nexport class PlatformDrawerInputActionButton {}\r\n\r\n@Component({\r\n selector: 'platform-drawer-toolbar',\r\n template: '<ng-content />',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class PlatformDrawerToolbar {}\r\n\r\n@Component({\r\n selector: 'platform-drawer-tree',\r\n template: '<ng-content />',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class PlatformDrawerTree {}\r\n\r\n@Component({\r\n selector: 'platform-drawer-tree-item',\r\n template: '<label class=\"platform-drawer-tree-item\" [style.padding-left.rem]=\"level() * 1.25\"><ng-content /></label>',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class PlatformDrawerTreeItem {\r\n readonly level = input(0);\r\n}\r\n\r\n@Directive({\r\n selector: 'button[platformDrawerTreeToggle]',\r\n host: {\r\n class: 'platform-drawer-tree-toggle',\r\n '[class.platform-drawer-tree-toggle--hidden]': 'hidden()',\r\n },\r\n})\r\nexport class PlatformDrawerTreeToggle {\r\n readonly hidden = input(false, {\r\n alias: 'platformDrawerTreeToggleHidden',\r\n transform: booleanAttribute,\r\n });\r\n}\r\n\r\n@Component({\r\n selector: 'platform-drawer-component-bar',\r\n template: '<ng-content />',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class PlatformDrawerComponentBar {}\r\n\r\n@Component({\r\n selector: 'platform-drawer-component-list',\r\n template: '<ng-content />',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class PlatformDrawerComponentList {}\r\n\r\n@Component({\r\n selector: 'platform-drawer-component-item',\r\n template: '<ng-content />',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class PlatformDrawerComponentItem {}\r\n\r\n@Component({\r\n selector: 'platform-switch',\r\n template: `\r\n <input\r\n class=\"platform-switch__input\"\r\n type=\"checkbox\"\r\n [checked]=\"checked\"\r\n [disabled]=\"isDisabled\"\r\n [attr.aria-label]=\"ariaLabel()\"\r\n (change)=\"handleInputChange($event)\"\r\n (blur)=\"handleTouched()\"\r\n />\r\n <span class=\"platform-switch__track\" aria-hidden=\"true\">\r\n <span class=\"platform-switch__thumb\"></span>\r\n </span>\r\n `,\r\n providers: [\r\n {\r\n provide: NG_VALUE_ACCESSOR,\r\n useExisting: forwardRef(() => PlatformSwitch),\r\n multi: true,\r\n },\r\n ],\r\n host: {\r\n '[class.platform-switch--disabled]': 'isDisabled',\r\n },\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class PlatformSwitch implements ControlValueAccessor {\r\n private readonly changeDetectorRef = inject(ChangeDetectorRef);\r\n private onChange: (value: boolean) => void = () => undefined;\r\n private onTouched: () => void = () => undefined;\r\n\r\n readonly ariaLabel = input('开关');\r\n readonly disabledInput = input(false, {\r\n alias: 'disabled',\r\n transform: booleanAttribute,\r\n });\r\n\r\n protected checked = false;\r\n protected disabled = false;\r\n\r\n protected get isDisabled(): boolean {\r\n return this.disabled || this.disabledInput();\r\n }\r\n\r\n writeValue(value: unknown): void {\r\n this.checked = value === true;\r\n this.changeDetectorRef.markForCheck();\r\n }\r\n\r\n registerOnChange(fn: (value: boolean) => void): void {\r\n this.onChange = fn;\r\n }\r\n\r\n registerOnTouched(fn: () => void): void {\r\n this.onTouched = fn;\r\n }\r\n\r\n setDisabledState(isDisabled: boolean): void {\r\n this.disabled = isDisabled;\r\n this.changeDetectorRef.markForCheck();\r\n }\r\n\r\n protected handleChange(checked: boolean): void {\r\n this.checked = checked;\r\n this.onChange(checked);\r\n this.changeDetectorRef.markForCheck();\r\n }\r\n\r\n protected handleInputChange(event: Event): void {\r\n const target = event.target;\r\n if (target instanceof HTMLInputElement) {\r\n this.handleChange(target.checked);\r\n }\r\n }\r\n\r\n protected handleTouched(): void {\r\n this.onTouched();\r\n }\r\n}\r\n","import { NgModule } from '@angular/core';\r\nimport {\r\n PlatformDrawerCheckbox,\r\n PlatformDrawerCheckboxGroup,\r\n PlatformDrawerComponentBar,\r\n PlatformDrawerComponentItem,\r\n PlatformDrawerComponentList,\r\n PlatformDrawerEmpty,\r\n PlatformDrawerError,\r\n PlatformDrawerField,\r\n PlatformDrawerFooter,\r\n PlatformDrawerForm,\r\n PlatformDrawerInputAction,\r\n PlatformDrawerInputActionButton,\r\n PlatformDrawerSection,\r\n PlatformDrawerTable,\r\n PlatformDrawerToolbar,\r\n PlatformDrawerTree,\r\n PlatformDrawerTreeItem,\r\n PlatformDrawerTreeToggle,\r\n PlatformPrefixedInput,\r\n PlatformSwitch,\r\n} from './s-drawer-form';\r\n\r\nconst PLATFORM_DRAWER_FORM_DECLARATIONS = [\r\n PlatformDrawerForm,\r\n PlatformDrawerSection,\r\n PlatformDrawerField,\r\n PlatformDrawerFooter,\r\n PlatformDrawerError,\r\n PlatformPrefixedInput,\r\n PlatformDrawerCheckboxGroup,\r\n PlatformDrawerCheckbox,\r\n PlatformDrawerEmpty,\r\n PlatformDrawerTable,\r\n PlatformDrawerInputAction,\r\n PlatformDrawerInputActionButton,\r\n PlatformDrawerToolbar,\r\n PlatformDrawerTree,\r\n PlatformDrawerTreeItem,\r\n PlatformDrawerTreeToggle,\r\n PlatformDrawerComponentBar,\r\n PlatformDrawerComponentList,\r\n PlatformDrawerComponentItem,\r\n PlatformSwitch,\r\n];\r\n\r\n@NgModule({\r\n imports: PLATFORM_DRAWER_FORM_DECLARATIONS,\r\n exports: PLATFORM_DRAWER_FORM_DECLARATIONS,\r\n})\r\nexport class PlatformDrawerFormModule {}\r\n","import { ChangeDetectionStrategy, Component, computed, input, output, signal } from '@angular/core';\r\n\r\nexport interface EmojiPickerOption {\r\n readonly label: string;\r\n readonly value: string;\r\n readonly group?: string;\r\n}\r\n\r\nexport interface EmojiPickerTab {\r\n readonly label: string;\r\n readonly value: string;\r\n readonly icon: string;\r\n}\r\n\r\nexport const DEFAULT_EMOJI_PICKER_OPTIONS: readonly EmojiPickerOption[] = [\r\n { label: 'grinning face', value: '😀' },\r\n { label: 'smiling face', value: '😄' },\r\n { label: 'laughing face', value: '😆' },\r\n { label: 'wink', value: '😉' },\r\n { label: 'relieved face', value: '😊' },\r\n { label: 'heart eyes', value: '😍' },\r\n { label: 'thinking face', value: '🤔' },\r\n { label: 'salute', value: '🫡' },\r\n { label: 'joy', value: '😂' },\r\n { label: 'tongue out', value: '😛' },\r\n { label: 'kiss', value: '😘' },\r\n { label: 'hugging face', value: '🤗' },\r\n { label: 'sunglasses', value: '😎' },\r\n { label: 'sleepy face', value: '😴' },\r\n { label: 'crying face', value: '😭' },\r\n { label: 'angry face', value: '😡' },\r\n { label: 'thumbs up', value: '👍' },\r\n { label: 'clap', value: '👏' },\r\n { label: 'ok hand', value: '👌' },\r\n { label: 'folded hands', value: '🙏' },\r\n { label: 'muscle', value: '💪' },\r\n { label: 'eyes', value: '👀' },\r\n { label: 'fire', value: '🔥' },\r\n { label: 'sparkles', value: '✨' },\r\n { label: 'party popper', value: '🎉' },\r\n { label: 'rocket', value: '🚀' },\r\n { label: 'check mark', value: '✅' },\r\n { label: 'warning', value: '⚠️' },\r\n { label: 'red heart', value: '❤️' },\r\n { label: 'blue heart', value: '💙' },\r\n { label: 'coffee', value: '☕' },\r\n { label: 'memo', value: '📝' },\r\n { label: 'hundred points', value: '💯' },\r\n { label: 'bell', value: '🔔' },\r\n { label: 'clock', value: '⏰' },\r\n { label: 'star', value: '⭐' },\r\n { label: 'gift', value: '🎁' },\r\n { label: 'light bulb', value: '💡' },\r\n { label: 'phone', value: '📞' },\r\n { label: 'mail', value: '✉️' },\r\n];\r\n\r\nexport const DEFAULT_EMOJI_PICKER_TABS: readonly EmojiPickerTab[] = [\r\n { label: '默认表情', value: 'default', icon: '🙂' },\r\n { label: '收藏表情', value: 'favorite', icon: '❤️' },\r\n];\r\n\r\n@Component({\r\n selector: 's-emoji-picker',\r\n templateUrl: './s-emoji-picker.html',\r\n styleUrl: './s-emoji-picker.scss',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class EmojiPicker {\r\n readonly panelId = input('emoji-picker');\r\n readonly ariaLabel = input('选择表情');\r\n readonly headerLabel = input('默认表情');\r\n readonly gridLabel = input('默认表情');\r\n readonly tabsLabel = input('表情分类');\r\n readonly options = input<readonly EmojiPickerOption[]>(DEFAULT_EMOJI_PICKER_OPTIONS);\r\n readonly tabs = input<readonly EmojiPickerTab[]>(DEFAULT_EMOJI_PICKER_TABS);\r\n readonly emojiSelected = output<string>();\r\n readonly tabSelected = output<string>();\r\n\r\n protected readonly activeTab = signal(DEFAULT_EMOJI_PICKER_TABS[0]?.value ?? '');\r\n protected readonly activeOptions = computed(() => {\r\n const activeTab = this.activeTab();\r\n const options = this.options();\r\n\r\n if (!options.some((option) => option.group)) {\r\n return options;\r\n }\r\n\r\n return options.filter((option) => option.group === activeTab);\r\n });\r\n\r\n protected selectEmoji(value: string): void {\r\n this.emojiSelected.emit(value);\r\n }\r\n\r\n protected selectTab(value: string): void {\r\n this.activeTab.set(value);\r\n this.tabSelected.emit(value);\r\n }\r\n}\r\n","<section\r\n [id]=\"panelId()\"\r\n class=\"emoji-picker\"\r\n role=\"dialog\"\r\n [attr.aria-label]=\"ariaLabel()\"\r\n>\r\n <header class=\"emoji-picker__header\">{{ headerLabel() }}</header>\r\n <div class=\"emoji-picker__grid\" [attr.aria-label]=\"gridLabel()\">\r\n @for (emoji of activeOptions(); track emoji.value) {\r\n <button\r\n class=\"emoji-picker__item\"\r\n type=\"button\"\r\n [attr.aria-label]=\"emoji.label\"\r\n (click)=\"selectEmoji(emoji.value)\"\r\n >\r\n {{ emoji.value }}\r\n </button>\r\n }\r\n </div>\r\n <footer class=\"emoji-picker__tabs\" [attr.aria-label]=\"tabsLabel()\">\r\n @for (tab of tabs(); track tab.value) {\r\n <button\r\n class=\"emoji-picker__tab\"\r\n type=\"button\"\r\n [class.emoji-picker__tab--active]=\"tab.value === activeTab()\"\r\n [attr.aria-label]=\"tab.label\"\r\n (click)=\"selectTab(tab.value)\"\r\n >\r\n {{ tab.icon }}\r\n </button>\r\n }\r\n </footer>\r\n</section>\r\n","import { ChangeDetectionStrategy, Component, computed, input, model, output } from '@angular/core';\r\nimport { LucideAngularModule, XIcon } from 'lucide-angular';\r\n\r\nexport interface FilterSummaryChip {\r\n id: string | number;\r\n label: string;\r\n removable?: boolean;\r\n ariaLabel?: string;\r\n}\r\n\r\n@Component({\r\n selector: 's-filter-summary',\r\n imports: [LucideAngularModule],\r\n templateUrl: './s-filter-summary.html',\r\n styleUrl: './s-filter-summary.scss',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class FilterSummary {\r\n readonly summary = input('筛选出 0 人');\r\n readonly chips = model<readonly FilterSummaryChip[]>([]);\r\n readonly chipsAriaLabel = input('当前筛选条件');\r\n readonly resetLabel = input('重置');\r\n readonly showReset = input(true);\r\n\r\n readonly chipRemoved = output<FilterSummaryChip>();\r\n readonly resetClicked = output<void>();\r\n\r\n protected readonly closeIcon = XIcon;\r\n protected readonly hasChips = computed(() => this.chips().length > 0);\r\n protected readonly shouldShowReset = computed(() => this.showReset() && this.hasChips());\r\n\r\n protected removeChip(chip: FilterSummaryChip): void {\r\n if (chip.removable === false) {\r\n return;\r\n }\r\n\r\n this.chips.set(this.chips().filter((item) => item.id !== chip.id));\r\n this.chipRemoved.emit(chip);\r\n }\r\n\r\n protected emitReset(): void {\r\n this.chips.set([]);\r\n this.resetClicked.emit();\r\n }\r\n\r\n protected trackByChipId(_index: number, chip: FilterSummaryChip): string | number {\r\n return chip.id;\r\n }\r\n}\r\n","<section class=\"filter-summary\" [class.filter-summary--empty]=\"!hasChips()\">\r\n <p class=\"filter-summary__result\">{{ summary() }}</p>\r\n\r\n @if (hasChips()) {\r\n <ul class=\"filter-summary__chips\" [attr.aria-label]=\"chipsAriaLabel()\">\r\n @for (chip of chips(); track trackByChipId($index, chip)) {\r\n <li class=\"filter-summary__chip-item\">\r\n <div class=\"filter-summary__chip\" [class.filter-summary__chip--readonly]=\"chip.removable === false\">\r\n <span class=\"filter-summary__chip-label\">{{ chip.label }}</span>\r\n @if (chip.removable !== false) {\r\n <button\r\n type=\"button\"\r\n class=\"filter-summary__chip-remove\"\r\n [attr.aria-label]=\"chip.ariaLabel ?? ('移除筛选:' + chip.label)\"\r\n (click)=\"removeChip(chip)\"\r\n >\r\n <lucide-icon\r\n class=\"filter-summary__chip-icon\"\r\n [img]=\"closeIcon\"\r\n [size]=\"14\"\r\n [strokeWidth]=\"2\"\r\n aria-hidden=\"true\"\r\n />\r\n </button>\r\n }\r\n </div>\r\n </li>\r\n }\r\n </ul>\r\n }\r\n\r\n @if (shouldShowReset()) {\r\n <div class=\"filter-summary__reset-wrap\" aria-hidden=\"true\">\r\n <span class=\"filter-summary__reset-divider\"></span>\r\n <button type=\"button\" class=\"filter-summary__reset\" (click)=\"emitReset()\">\r\n {{ resetLabel() }}\r\n </button>\r\n </div>\r\n }\r\n</section>\r\n","import { ChangeDetectionStrategy, Component, ElementRef, input, output, viewChild } from '@angular/core';\r\n\r\nexport interface FileUploadButtonSelectedEvent {\r\n files: File[];\r\n}\r\n\r\n@Component({\r\n selector: 's-file-upload-button',\r\n templateUrl: './s-file-upload-button.html',\r\n styleUrl: './s-file-upload-button.scss',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n host: {\r\n '[class.file-upload-button-host--disabled]': 'disabled()',\r\n },\r\n})\r\nexport class FileUploadButtonComponent {\r\n readonly accept = input('');\r\n readonly multiple = input(false);\r\n readonly disabled = input(false);\r\n readonly buttonClass = input('default middle');\r\n readonly ariaBusy = input<boolean | string | null>(null);\r\n\r\n readonly filesSelected = output<FileUploadButtonSelectedEvent>();\r\n\r\n protected readonly fileInput = viewChild<ElementRef<HTMLInputElement>>('fileInput');\r\n\r\n protected openFileDialog(): void {\r\n if (this.disabled()) {\r\n return;\r\n }\r\n\r\n this.fileInput()?.nativeElement.click();\r\n }\r\n\r\n protected onFileChange(event: Event): void {\r\n const inputElement = event.target;\r\n if (!(inputElement instanceof HTMLInputElement)) {\r\n return;\r\n }\r\n\r\n const files = inputElement.files ? Array.from(inputElement.files) : [];\r\n inputElement.value = '';\r\n if (!files.length) {\r\n return;\r\n }\r\n\r\n this.filesSelected.emit({ files });\r\n }\r\n}\r\n","<button\r\n type=\"button\"\r\n [class]=\"buttonClass()\"\r\n [disabled]=\"disabled()\"\r\n [attr.aria-busy]=\"ariaBusy()\"\r\n (click)=\"openFileDialog()\"\r\n>\r\n <ng-content />\r\n</button>\r\n\r\n<input\r\n #fileInput\r\n class=\"file-upload-button__input\"\r\n type=\"file\"\r\n [accept]=\"accept()\"\r\n [multiple]=\"multiple()\"\r\n (change)=\"onFileChange($event)\"\r\n/>\r\n","import {\r\n ChangeDetectionStrategy,\r\n Component,\r\n ViewEncapsulation,\r\n computed,\r\n input,\r\n output,\r\n} from '@angular/core';\r\nimport {\r\n ChevronDownIcon,\r\n ChevronLeftIcon,\r\n BatteryFullIcon,\r\n LucideAngularModule,\r\n SignalHighIcon,\r\n type LucideIconData,\r\n WifiHighIcon,\r\n} from 'lucide-angular';\r\n\r\nexport type HeaderTitleAlign = 'left' | 'center';\r\nexport type HeaderSize = 'default' | 'large' | 'conversation';\r\nexport type HeaderSurface = 'transparent' | 'white';\r\nexport type HeaderInset = 'none' | 'page';\r\n\r\nexport interface HeaderAction {\r\n id: string;\r\n label?: string;\r\n ariaLabel?: string;\r\n icon?: LucideIconData;\r\n tone?: 'default' | 'primary';\r\n disabled?: boolean;\r\n}\r\n\r\nexport interface HeaderActionEvent {\r\n id: string;\r\n}\r\n\r\n@Component({\r\n selector: 'm-header',\r\n imports: [LucideAngularModule],\r\n templateUrl: './m-header.html',\r\n styleUrl: './m-header.scss',\r\n encapsulation: ViewEncapsulation.None,\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class Header {\r\n readonly ariaLabel = input('顶部导航');\r\n readonly title = input('');\r\n readonly description = input('');\r\n readonly titleAlign = input<HeaderTitleAlign>('left');\r\n readonly size = input<HeaderSize>('default');\r\n readonly surface = input<HeaderSurface>('transparent');\r\n readonly inset = input<HeaderInset>('none');\r\n readonly showBack = input(false);\r\n readonly showDropdown = input(false);\r\n readonly showDescriptionDropdown = input(false);\r\n readonly showStatusBar = input(false);\r\n readonly statusTime = input('10:00');\r\n readonly actions = input<readonly HeaderAction[]>([]);\r\n\r\n readonly backClicked = output<void>();\r\n readonly titleClicked = output<void>();\r\n readonly actionSelected = output<HeaderActionEvent>();\r\n\r\n protected readonly backIcon = ChevronLeftIcon;\r\n protected readonly downIcon = ChevronDownIcon;\r\n protected readonly signalIcon = SignalHighIcon;\r\n protected readonly wifiIcon = WifiHighIcon;\r\n protected readonly batteryIcon = BatteryFullIcon;\r\n protected readonly hasActions = computed(() => this.actions().length > 0);\r\n protected readonly hasStart = computed(() => this.showBack());\r\n protected readonly isTitleInteractive = computed(\r\n () => this.showDropdown() || this.showDescriptionDropdown(),\r\n );\r\n protected readonly titleButtonAriaLabel = computed(() =>\r\n this.showDropdown() || this.showDescriptionDropdown()\r\n ? `${this.title() || '标题'},展开`\r\n : this.title() || '标题',\r\n );\r\n\r\n protected onBackClick(): void {\r\n this.backClicked.emit();\r\n }\r\n\r\n protected onTitleClick(): void {\r\n if (!this.isTitleInteractive()) {\r\n return;\r\n }\r\n\r\n this.titleClicked.emit();\r\n }\r\n\r\n protected onTitleKeydown(event: Event): void {\r\n if (!this.isTitleInteractive()) {\r\n return;\r\n }\r\n\r\n event.preventDefault();\r\n this.titleClicked.emit();\r\n }\r\n\r\n protected onActionClick(action: HeaderAction): void {\r\n if (action.disabled) {\r\n return;\r\n }\r\n\r\n this.actionSelected.emit({ id: action.id });\r\n }\r\n\r\n protected trackByActionId(_index: number, action: HeaderAction): string {\r\n return action.id;\r\n }\r\n}\r\n","<header\r\n class=\"m-header__frame\"\r\n [class.m-header__frame--center]=\"titleAlign() === 'center'\"\r\n [class.m-header__frame--large]=\"size() === 'large'\"\r\n [class.m-header__frame--conversation]=\"size() === 'conversation'\"\r\n [class.m-header__frame--surface-white]=\"surface() === 'white'\"\r\n [class.m-header__frame--inset-page]=\"inset() === 'page'\"\r\n [class.m-header__frame--with-start]=\"hasStart()\"\r\n [class.m-header__frame--with-status]=\"showStatusBar()\"\r\n>\r\n @if (showStatusBar()) {\r\n <div class=\"m-header__status\" aria-hidden=\"true\">\r\n <span class=\"m-header__status-time\">{{ statusTime() }}</span>\r\n <span class=\"m-header__status-icons\">\r\n <i-lucide [img]=\"signalIcon\" class=\"m-header__status-icon\" aria-hidden=\"true\" />\r\n <i-lucide [img]=\"wifiIcon\" class=\"m-header__status-icon\" aria-hidden=\"true\" />\r\n <i-lucide [img]=\"batteryIcon\" class=\"m-header__status-icon\" aria-hidden=\"true\" />\r\n </span>\r\n </div>\r\n }\r\n\r\n <nav class=\"m-header__inner\" [attr.aria-label]=\"ariaLabel()\">\r\n <div class=\"m-header__start\">\r\n @if (showBack()) {\r\n <button type=\"button\" class=\"m-header__icon-button m-header__back-button\" aria-label=\"返回\" (click)=\"onBackClick()\">\r\n <i-lucide [img]=\"backIcon\" class=\"m-header__nav-icon\" aria-hidden=\"true\" />\r\n </button>\r\n }\r\n <ng-content select=\"[mHeaderStart]\" />\r\n <ng-content select=\"[header-left]\" />\r\n </div>\r\n\r\n <div\r\n class=\"m-header__content\"\r\n [class.m-header__content--interactive]=\"isTitleInteractive()\"\r\n [attr.role]=\"isTitleInteractive() ? 'button' : null\"\r\n [attr.tabindex]=\"isTitleInteractive() ? 0 : null\"\r\n [attr.aria-label]=\"isTitleInteractive() ? titleButtonAriaLabel() : null\"\r\n [attr.aria-expanded]=\"isTitleInteractive() ? 'false' : null\"\r\n (click)=\"onTitleClick()\"\r\n (keydown.enter)=\"onTitleKeydown($event)\"\r\n (keydown.space)=\"onTitleKeydown($event)\"\r\n >\r\n <span class=\"m-header__title-line\">\r\n @if (title()) {\r\n <span class=\"m-header__title\">{{ title() }}</span>\r\n } @else {\r\n <ng-content select=\"[mHeaderTitle]\" />\r\n <ng-content select=\"[header-title]\" />\r\n }\r\n @if (showDropdown()) {\r\n <i-lucide [img]=\"downIcon\" class=\"m-header__down-icon\" aria-hidden=\"true\" />\r\n }\r\n </span>\r\n\r\n @if (description()) {\r\n <span class=\"m-header__description-line\">\r\n <span class=\"m-header__description\">{{ description() }}</span>\r\n @if (showDescriptionDropdown()) {\r\n <i-lucide [img]=\"downIcon\" class=\"m-header__description-down-icon\" aria-hidden=\"true\" />\r\n }\r\n </span>\r\n } @else {\r\n <ng-content select=\"[mHeaderDescription]\" />\r\n }\r\n </div>\r\n\r\n <div class=\"m-header__side\">\r\n <ng-content select=\"[mHeaderMeta]\" />\r\n <ng-content select=\"[header-right]\" />\r\n\r\n <div class=\"m-header__actions\">\r\n <ng-content select=\"[mHeaderActions]\" />\r\n\r\n @if (hasActions()) {\r\n @for (action of actions(); track trackByActionId($index, action)) {\r\n <button\r\n type=\"button\"\r\n class=\"m-header__action\"\r\n [class.m-header__action--primary]=\"action.tone === 'primary'\"\r\n [class.m-header__action--text]=\"!action.icon\"\r\n [disabled]=\"action.disabled\"\r\n [attr.aria-label]=\"action.ariaLabel || action.label || action.id\"\r\n (click)=\"onActionClick(action)\"\r\n >\r\n @if (action.icon; as icon) {\r\n <i-lucide [img]=\"icon\" class=\"m-header__action-icon\" aria-hidden=\"true\" />\r\n }\r\n @if (action.label) {\r\n <span class=\"m-header__action-label\">{{ action.label }}</span>\r\n }\r\n </button>\r\n }\r\n }\r\n </div>\r\n </div>\r\n </nav>\r\n\r\n <div class=\"m-header__toolbar\">\r\n <div class=\"m-header__toolbar-start\">\r\n <ng-content select=\"[mHeaderToolbarStart]\" />\r\n <ng-content select=\"[toolbar-left]\" />\r\n </div>\r\n\r\n <div class=\"m-header__toolbar-center\">\r\n <ng-content select=\"m-toolbar\" />\r\n <ng-content select=\"[mHeaderToolbar]\" />\r\n <ng-content select=\"[mHeaderToolbarCenter]\" />\r\n <ng-content select=\"[toolbar-center]\" />\r\n </div>\r\n\r\n <div class=\"m-header__toolbar-right\">\r\n <ng-content select=\"[mHeaderToolbarActions]\" />\r\n <ng-content select=\"[toolbar-right]\" />\r\n </div>\r\n </div>\r\n</header>\r\n","import {\r\n booleanAttribute,\r\n ChangeDetectionStrategy,\r\n Component,\r\n Directive,\r\n input,\r\n} from '@angular/core';\r\n\r\n@Directive({\r\n selector: '[SListPageSidebar]',\r\n})\r\nexport class ListPageSidebarSlotDirective {}\r\n\r\n@Component({\r\n selector: 's-list-page-sidebar',\r\n template: '<ng-content />',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class ListPageSidebarComponent {}\r\n\r\n@Directive({\r\n selector: '[SListPageSidebarSearch]',\r\n})\r\nexport class ListPageSidebarSearchDirective {}\r\n\r\n@Directive({\r\n selector: '[SListPageSidebarTree]',\r\n})\r\nexport class ListPageSidebarTreeDirective {}\r\n\r\n@Directive({\r\n selector: '[SListPageHeader]',\r\n})\r\nexport class ListPageHeaderSlotDirective {}\r\n\r\n@Component({\r\n selector: 's-list-page-header',\r\n template: '<ng-content />',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class ListPageHeaderComponent {}\r\n\r\n@Component({\r\n selector: 's-list-page-header-row',\r\n template: '<ng-content />',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class ListPageHeaderRowComponent {}\r\n\r\n@Directive({\r\n selector: '[SListPageHeaderLayout]',\r\n})\r\nexport class ListPageHeaderLayoutDirective {}\r\n\r\n@Directive({\r\n selector: '[SListPageHeaderFilters]',\r\n})\r\nexport class ListPageHeaderFiltersDirective {}\r\n\r\n@Directive({\r\n selector: '[SListPageHeaderActions]',\r\n})\r\nexport class ListPageHeaderActionsDirective {}\r\n\r\n@Directive({\r\n selector: '[SListPageSummary]',\r\n})\r\nexport class ListPageSummarySlotDirective {}\r\n\r\n@Directive({\r\n selector: '[SListPageContentDesktop]',\r\n})\r\nexport class ListPageContentDesktopSlotDirective {}\r\n\r\n@Component({\r\n selector: 's-list-page-filter-panel',\r\n template: '<ng-content />',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class ListPageFilterPanelComponent {}\r\n\r\n@Component({\r\n selector: 's-list-page-content-desktop',\r\n template: '<ng-content />',\r\n host: {\r\n '[attr.data-with-tabs]': 'withTabs() ? \"\" : null',\r\n '[style.min-height]': 'minHeight()',\r\n },\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class ListPageContentDesktopComponent {\r\n readonly withTabs = input(false, { transform: booleanAttribute });\r\n readonly minHeight = input<string | null>(null);\r\n}\r\n\r\n@Directive({\r\n selector: '[SListPagePagination]',\r\n})\r\nexport class ListPagePaginationSlotDirective {}\r\n\r\n@Component({\r\n selector: 's-list-page-pagination',\r\n template: '<ng-content />',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class ListPagePaginationComponent {}\r\n","import { booleanAttribute, Directive, input } from '@angular/core';\r\n\r\n@Directive({\r\n selector: '[SListPageFilterGrid]',\r\n host: {\r\n style: 'display: flex; flex-wrap: wrap; align-items: center; gap: var(--space-3) var(--space-4); min-width: 0;',\r\n },\r\n})\r\nexport class ListPageFilterGridDirective {}\r\n\r\n@Directive({\r\n selector: '[SListPageFilterField]',\r\n})\r\nexport class ListPageFilterFieldDirective {\r\n readonly dateRange = input(false, {\r\n alias: 'SListPageFilterFieldDateRange',\r\n transform: booleanAttribute,\r\n });\r\n}\r\n\r\n@Directive({\r\n selector: '[SListPageFilterLabel]',\r\n})\r\nexport class ListPageFilterLabelDirective {}\r\n\r\n@Directive({\r\n selector: '[SListPageFilterControl]',\r\n})\r\nexport class ListPageFilterControlDirective {}\r\n\r\n@Directive({\r\n selector: '[SListPageFilterActions]',\r\n})\r\nexport class ListPageFilterActionsDirective {}\r\n\r\n","import { booleanAttribute, Directive, input } from '@angular/core';\r\n\r\n@Directive({\r\n selector: '[SListPageTableWrap]',\r\n host: {\r\n '[attr.data-with-tabs]': 'withTabs() ? \"\" : null',\r\n '[style.min-height]': 'minHeight()',\r\n },\r\n})\r\nexport class ListPageTableWrapDirective {\r\n readonly withTabs = input(false, { transform: booleanAttribute });\r\n readonly minHeight = input<string | null>(null);\r\n}\r\n\r\n@Directive({\r\n selector: 'table[SListPageTable]',\r\n})\r\nexport class ListPageTableDirective {}\r\n\r\n@Directive({\r\n selector: '[SListPageTableScroll]',\r\n})\r\nexport class ListPageTableScrollDirective {}\r\n\r\n@Directive({\r\n selector: '[SListPageCheckboxCol]',\r\n})\r\nexport class ListPageCheckboxColDirective {}\r\n\r\n@Directive({\r\n selector: '[SListPageActionCol]',\r\n})\r\nexport class ListPageActionColDirective {}\r\n\r\n@Directive({\r\n selector: '[SListPageColumn]',\r\n host: {\r\n '[style.width]': 'width()',\r\n '[style.min-width]': 'width()',\r\n '[style.text-align]': 'align()',\r\n },\r\n})\r\nexport class ListPageColumnDirective {\r\n readonly width = input<string | null>(null, { alias: 'SListPageColumn' });\r\n readonly align = input<'left' | 'center' | 'right' | null>(null, {\r\n alias: 'SListPageColumnAlign',\r\n });\r\n}\r\n\r\n@Directive({\r\n selector: '[SListPageCellText]',\r\n host: {\r\n style: 'display: block; width: 100%; max-width: 100%; overflow: hidden; text-overflow: ellipsis; white-space: nowrap;',\r\n },\r\n})\r\nexport class ListPageCellTextDirective {}\r\n\r\n","import { Directive } from '@angular/core';\r\n\r\n@Directive({\r\n selector: '[SListPageEmpty]',\r\n})\r\nexport class ListPageEmptyDirective {}\r\n\r\n@Directive({\r\n selector: '[SListPageTabs]',\r\n})\r\nexport class ListPageTabsDirective {}\r\n\r\n@Directive({\r\n selector: '[SListPageTab]',\r\n})\r\nexport class ListPageTabDirective {}\r\n\r\n@Directive({\r\n selector: '[SListPageRowActions]',\r\n})\r\nexport class ListPageRowActionsDirective {}\r\n\r\n@Directive({\r\n selector: '[SListPageRowActionTrigger]',\r\n})\r\nexport class ListPageRowActionTriggerDirective {}\r\n\r\n@Directive({\r\n selector: '[SListPageRowActionDanger]',\r\n})\r\nexport class ListPageRowActionDangerDirective {}\r\n\r\n@Directive({\r\n selector: '[SListPageIconButton]',\r\n})\r\nexport class ListPageIconButtonDirective {}\r\n\r\n@Directive({\r\n selector: '[SListPageFileAction]',\r\n})\r\nexport class ListPageFileActionDirective {}\r\n\r\n@Directive({\r\n selector: '[SListPageTreeToggle]',\r\n})\r\nexport class ListPageTreeToggleDirective {}\r\n\r\n@Directive({\r\n selector: '[SListPageTreeIndent]',\r\n})\r\nexport class ListPageTreeIndentDirective {}\r\n","import {\r\n ChangeDetectionStrategy,\r\n Component,\r\n contentChild,\r\n computed,\r\n TemplateRef,\r\n ViewEncapsulation,\r\n} from '@angular/core';\r\nimport { NgTemplateOutlet } from '@angular/common';\r\nimport {\r\n ListPageContentDesktopSlotDirective,\r\n ListPagePaginationComponent,\r\n ListPagePaginationSlotDirective,\r\n ListPageSidebarComponent,\r\n ListPageSidebarSlotDirective,\r\n} from './directives/s-list-page-layout-slot.directives';\r\n\r\nexport * from './directives/s-list-page-layout-slot.directives';\r\nexport * from './directives/s-list-page-layout-filter.directives';\r\nexport * from './directives/s-list-page-layout-table.directives';\r\nexport * from './directives/s-list-page-layout-misc.directives';\r\n\r\n@Component({\r\n selector: 's-list-page-layout',\r\n imports: [NgTemplateOutlet],\r\n templateUrl: './s-list-page-layout.html',\r\n styleUrl: './s-list-page-layout.scss',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n encapsulation: ViewEncapsulation.None,\r\n})\r\nexport class ListPageLayoutComponent {\r\n protected readonly sidebarSlot = contentChild(ListPageSidebarSlotDirective);\r\n protected readonly sidebarComponent = contentChild(ListPageSidebarComponent);\r\n protected readonly paginationTemplate = contentChild(ListPagePaginationSlotDirective, {\r\n read: TemplateRef,\r\n });\r\n protected readonly paginationComponent = contentChild(ListPagePaginationComponent);\r\n protected readonly desktopContentTemplate = contentChild(ListPageContentDesktopSlotDirective, {\r\n read: TemplateRef,\r\n });\r\n protected readonly hasSidebar = computed(() => !!this.sidebarSlot() || !!this.sidebarComponent());\r\n protected readonly hasPagination = computed(() => !!this.paginationTemplate() || !!this.paginationComponent());\r\n}\r\n","<header>\r\n <ng-content select=\"[SListPageHeader]\"/>\r\n <ng-content select=\"s-list-page-header\"/>\r\n <ng-content select=\"[SListPageSummary]\"/>\r\n <ng-content select=\"s-filter-summary\"/>\r\n</header>\r\n<main>\r\n @if (hasSidebar()) {\r\n <aside>\r\n <ng-content select=\"[SListPageSidebar]\"/>\r\n <ng-content select=\"s-list-page-sidebar\"/>\r\n </aside>\r\n }\r\n <section>\r\n @if (desktopContentTemplate(); as contentTemplate) {\r\n <ng-container [ngTemplateOutlet]=\"contentTemplate\"/>\r\n }\r\n <ng-content select=\"s-list-page-content-desktop\"/>\r\n </section>\r\n</main>\r\n@if (hasPagination()) {\r\n <footer>\r\n @if (paginationTemplate(); as footerTemplate) {\r\n <ng-container [ngTemplateOutlet]=\"footerTemplate\"/>\r\n }\r\n <ng-content select=\"s-list-page-pagination\"/>\r\n </footer>\r\n}\r\n\r\n","import { ChangeDetectionStrategy, Component, input, model, output, signal } from '@angular/core';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { LucideAngularModule, SearchIcon, XIcon } from 'lucide-angular';\r\nimport { PlatformInputDirective } from '../../directives';\r\n\r\n@Component({\r\n selector: 's-list-search-panel',\r\n imports: [FormsModule, LucideAngularModule, PlatformInputDirective],\r\n templateUrl: './s-list-search-panel.html',\r\n styleUrl: './s-list-search-panel.scss',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class ListSearchPanel {\r\n readonly placeholder = input('请输入关键字');\r\n readonly triggerText = input('搜索');\r\n readonly inputId = input('listSearchInput');\r\n readonly searchIconClass = input('');\r\n\r\n readonly keyword = model('');\r\n\r\n readonly search = output<void>();\r\n readonly reset = output<void>();\r\n\r\n protected readonly isMobileSearchOpen = signal(false);\r\n protected readonly searchIcon = SearchIcon;\r\n protected readonly closeIcon = XIcon;\r\n private readonly mobileMediaQuery = '(max-width: 768px)';\r\n\r\n protected openMobileSearchDialog(): void {\r\n this.isMobileSearchOpen.set(true);\r\n }\r\n\r\n protected openMobileSearchDialogOnSmallScreen(event: Event): void {\r\n if (!this.isMobileViewport()) {\r\n return;\r\n }\r\n\r\n event.preventDefault();\r\n this.openMobileSearchDialog();\r\n }\r\n\r\n protected closeMobileSearchDialog(): void {\r\n this.isMobileSearchOpen.set(false);\r\n }\r\n\r\n protected emitSearch(): void {\r\n this.search.emit();\r\n this.closeMobileSearchDialog();\r\n }\r\n\r\n protected emitReset(): void {\r\n this.keyword.set('');\r\n this.reset.emit();\r\n this.closeMobileSearchDialog();\r\n }\r\n\r\n private isMobileViewport(): boolean {\r\n return typeof window !== 'undefined' && window.matchMedia(this.mobileMediaQuery).matches;\r\n }\r\n}\r\n","<div class=\"list-search-panel\">\r\n <button\r\n type=\"button\"\r\n class=\"mobile-search-trigger\"\r\n aria-label=\"打开列表搜索\"\r\n (click)=\"openMobileSearchDialog()\"\r\n >\r\n @if (searchIconClass()) {\r\n <i [class]=\"searchIconClass()\" aria-hidden=\"true\"></i>\r\n } @else {\r\n <lucide-icon aria-hidden=\"true\" [img]=\"searchIcon\" [size]=\"15\" [strokeWidth]=\"1.9\"></lucide-icon>\r\n }\r\n <span>{{ triggerText() }}</span>\r\n </button>\r\n\r\n <div class=\"list-search\">\r\n <input\r\n pInput\r\n size=\"sm\"\r\n type=\"text\"\r\n [placeholder]=\"placeholder()\"\r\n class=\"search\"\r\n [(ngModel)]=\"keyword\"\r\n (keydown.enter)=\"emitSearch()\"\r\n (click)=\"openMobileSearchDialogOnSmallScreen($event)\"\r\n (focus)=\"openMobileSearchDialogOnSmallScreen($event)\"\r\n />\r\n <button class=\"search-box\" title=\"搜索\" type=\"button\" (click)=\"emitSearch()\">\r\n @if (searchIconClass()) {\r\n <i [class]=\"searchIconClass()\"></i>\r\n } @else {\r\n <lucide-icon aria-hidden=\"true\" [img]=\"searchIcon\" [size]=\"15\" [strokeWidth]=\"1.9\"></lucide-icon>\r\n }\r\n </button>\r\n </div>\r\n\r\n <button class=\"primary desktop-action\" type=\"button\" (click)=\"emitSearch()\">查询</button>\r\n <button class=\"default desktop-action\" type=\"button\" (click)=\"emitReset()\">重置</button>\r\n</div>\r\n\r\n@if (isMobileSearchOpen()) {\r\n <div class=\"list-search-dialog-mask\" (click)=\"closeMobileSearchDialog()\">\r\n <section\r\n class=\"list-search-dialog\"\r\n role=\"dialog\"\r\n aria-modal=\"true\"\r\n aria-label=\"列表搜索\"\r\n (click)=\"$event.stopPropagation()\"\r\n >\r\n <div class=\"list-search-dialog__top\">\r\n <label class=\"list-search-dialog__input-wrap\" [for]=\"inputId()\">\r\n @if (searchIconClass()) {\r\n <i [class]=\"searchIconClass()\" aria-hidden=\"true\"></i>\r\n } @else {\r\n <lucide-icon aria-hidden=\"true\" [img]=\"searchIcon\" [size]=\"15\" [strokeWidth]=\"1.9\"></lucide-icon>\r\n }\r\n <input\r\n pInput\r\n variant=\"bare\"\r\n [id]=\"inputId()\"\r\n type=\"text\"\r\n [(ngModel)]=\"keyword\"\r\n [placeholder]=\"placeholder()\"\r\n (keydown.enter)=\"emitSearch()\"\r\n />\r\n </label>\r\n <button\r\n type=\"button\"\r\n class=\"list-search-dialog__close\"\r\n aria-label=\"关闭搜索\"\r\n (click)=\"closeMobileSearchDialog()\"\r\n >\r\n <lucide-icon aria-hidden=\"true\" [img]=\"closeIcon\" [size]=\"15\" [strokeWidth]=\"1.9\"></lucide-icon>\r\n </button>\r\n </div>\r\n\r\n <div class=\"list-search-dialog__actions\">\r\n <button type=\"button\" class=\"primary\" (click)=\"emitSearch()\">查询</button>\r\n <button type=\"button\" class=\"default\" (click)=\"emitReset()\">重置</button>\r\n </div>\r\n </section>\r\n </div>\r\n}\r\n","import { ChangeDetectionStrategy, Component, OnInit, computed, input, output, signal } from '@angular/core';\r\nimport { FormsModule } from '@angular/forms';\r\nimport {\r\n ChevronDownIcon,\r\n EyeIcon,\r\n EyeOffIcon,\r\n KeyRoundIcon,\r\n LanguagesIcon,\r\n LucideAngularModule,\r\n UserRoundIcon,\r\n type LucideIconData,\r\n} from 'lucide-angular';\r\n\r\nexport interface PlatformLoginFeature {\r\n readonly label: string;\r\n readonly description?: string;\r\n readonly icon?: LucideIconData;\r\n readonly toneClass?: string;\r\n}\r\n\r\nexport interface PlatformLoginSocialProvider {\r\n readonly id: string;\r\n readonly label: string;\r\n readonly icon?: LucideIconData;\r\n readonly toneClass?: string;\r\n readonly disabled?: boolean;\r\n}\r\n\r\nexport interface PlatformLoginSubmitEvent {\r\n readonly username: string;\r\n readonly password: string;\r\n readonly rememberMe: boolean;\r\n}\r\n\r\n@Component({\r\n selector: 's-login-page',\r\n imports: [FormsModule, LucideAngularModule],\r\n templateUrl: './s-login-page.html',\r\n styleUrl: './s-login-page.scss',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class PlatformLoginPage implements OnInit {\r\n readonly brandMark = input('OA');\r\n readonly brandName = input('Workspace');\r\n readonly productName = input('智能办公平台');\r\n readonly heroAriaLabel = input('工作台登录页');\r\n readonly heroEyebrow = input('统一入口');\r\n readonly heroTitle = input('智能办公平台');\r\n readonly heroText = input('高效协同 · 智能管理 · 数据驱动');\r\n readonly features = input<readonly PlatformLoginFeature[]>([]);\r\n\r\n readonly showLanguageSwitcher = input(true);\r\n readonly languageLabel = input('简体中文');\r\n readonly panelEyebrow = input('');\r\n readonly panelTitle = input('欢迎回来');\r\n readonly panelSubtitle = input('登录您的账号继续使用');\r\n readonly usernameLabel = input('账号 / 邮箱');\r\n readonly passwordLabel = input('密码');\r\n readonly usernamePlaceholder = input('请输入账号或邮箱');\r\n readonly passwordPlaceholder = input('请输入密码');\r\n readonly rememberLabel = input('记住我');\r\n readonly forgotPasswordText = input('忘记密码?');\r\n readonly dividerText = input('或使用以下方式登录');\r\n readonly registerPrompt = input('还没有账号?');\r\n readonly registerText = input('立即注册');\r\n readonly metaText = input('');\r\n readonly submitText = input('登录');\r\n readonly submittingText = input('登录中...');\r\n readonly emptyMessage = input('请输入账号和密码。');\r\n readonly errorMessage = input('');\r\n readonly submitting = input(false);\r\n readonly defaultUsername = input('');\r\n readonly rememberDefault = input(true);\r\n readonly showForgotPassword = input(true);\r\n readonly showRegister = input(true);\r\n readonly socialProviders = input<readonly PlatformLoginSocialProvider[]>([]);\r\n\r\n readonly loginSubmit = output<PlatformLoginSubmitEvent>();\r\n readonly forgotPasswordClick = output<void>();\r\n readonly registerClick = output<void>();\r\n readonly languageClick = output<void>();\r\n readonly socialLogin = output<PlatformLoginSocialProvider>();\r\n\r\n protected readonly userIcon = UserRoundIcon;\r\n protected readonly keyIcon = KeyRoundIcon;\r\n protected readonly eyeIcon = EyeIcon;\r\n protected readonly eyeOffIcon = EyeOffIcon;\r\n protected readonly languagesIcon = LanguagesIcon;\r\n protected readonly chevronDownIcon = ChevronDownIcon;\r\n protected readonly username = signal('');\r\n protected readonly password = signal('');\r\n protected readonly rememberMe = signal(true);\r\n protected readonly showPassword = signal(false);\r\n protected readonly localErrorMessage = signal('');\r\n protected readonly visibleErrorMessage = computed(() => this.errorMessage() || this.localErrorMessage());\r\n\r\n ngOnInit(): void {\r\n this.username.set(this.defaultUsername());\r\n this.rememberMe.set(this.rememberDefault());\r\n }\r\n\r\n protected togglePassword(): void {\r\n this.showPassword.update((visible) => !visible);\r\n }\r\n\r\n protected submit(): void {\r\n const username = this.username().trim();\r\n const password = this.password().trim();\r\n\r\n if (!username || !password) {\r\n this.localErrorMessage.set(this.emptyMessage());\r\n return;\r\n }\r\n\r\n this.localErrorMessage.set('');\r\n this.loginSubmit.emit({\r\n username,\r\n password,\r\n rememberMe: this.rememberMe(),\r\n });\r\n }\r\n\r\n protected emitForgotPassword(): void {\r\n this.forgotPasswordClick.emit();\r\n }\r\n\r\n protected emitRegister(): void {\r\n this.registerClick.emit();\r\n }\r\n\r\n protected emitLanguageClick(): void {\r\n this.languageClick.emit();\r\n }\r\n\r\n protected emitSocialLogin(provider: PlatformLoginSocialProvider): void {\r\n if (provider.disabled) {\r\n return;\r\n }\r\n\r\n this.socialLogin.emit(provider);\r\n }\r\n\r\n protected featureClass(toneClass: string | undefined): string {\r\n return ['platform-login__feature', toneClass].filter(Boolean).join(' ');\r\n }\r\n\r\n protected socialProviderClass(toneClass: string | undefined): string {\r\n return ['platform-login__social-button', toneClass].filter(Boolean).join(' ');\r\n }\r\n\r\n protected socialProviderInitial(provider: PlatformLoginSocialProvider): string {\r\n return provider.label.trim().slice(0, 1).toUpperCase() || '?';\r\n }\r\n}\r\n","<main class=\"platform-login\">\r\n <section class=\"platform-login__stage\" [attr.aria-label]=\"heroAriaLabel()\">\r\n @if (showLanguageSwitcher()) {\r\n <button\r\n class=\"platform-login__language\"\r\n type=\"button\"\r\n aria-label=\"切换语言\"\r\n (click)=\"emitLanguageClick()\"\r\n >\r\n <lucide-icon [img]=\"languagesIcon\" size=\"16\" aria-hidden=\"true\" />\r\n <span>{{ languageLabel() }}</span>\r\n <lucide-icon [img]=\"chevronDownIcon\" size=\"14\" aria-hidden=\"true\" />\r\n </button>\r\n }\r\n\r\n <div class=\"platform-login__content\">\r\n <section class=\"platform-login__hero\">\r\n <div class=\"platform-login__brand\">\r\n <div class=\"platform-login__mark\" aria-hidden=\"true\">\r\n <span>{{ brandMark() }}</span>\r\n </div>\r\n <div>\r\n <p>{{ brandName() }}</p>\r\n <h1>{{ productName() }}</h1>\r\n </div>\r\n </div>\r\n\r\n <div class=\"platform-login__hero-copy\">\r\n @if (heroEyebrow()) {\r\n <p class=\"platform-login__eyebrow\">{{ heroEyebrow() }}</p>\r\n }\r\n <h2>{{ heroTitle() }}</h2>\r\n <p>{{ heroText() }}</p>\r\n </div>\r\n\r\n <div class=\"platform-login__visual\" aria-hidden=\"true\">\r\n <div class=\"platform-login__device\">\r\n <span class=\"platform-login__device-dot platform-login__device-dot--blue\"></span>\r\n <span class=\"platform-login__device-dot platform-login__device-dot--green\"></span>\r\n <div class=\"platform-login__device-row platform-login__device-row--short\"></div>\r\n <div class=\"platform-login__device-card platform-login__device-card--primary\">\r\n <span></span>\r\n <strong></strong>\r\n </div>\r\n <div class=\"platform-login__device-card platform-login__device-card--floating\">\r\n <span></span>\r\n <strong></strong>\r\n </div>\r\n <div class=\"platform-login__device-list\">\r\n <span></span>\r\n <span></span>\r\n <span></span>\r\n </div>\r\n </div>\r\n <div class=\"platform-login__chart\">\r\n <span></span>\r\n <span></span>\r\n <span></span>\r\n </div>\r\n <div class=\"platform-login__avatar\"></div>\r\n </div>\r\n\r\n @if (features().length > 0) {\r\n <div class=\"platform-login__features\" aria-label=\"登录页特性\">\r\n @for (feature of features(); track feature.label) {\r\n <div [class]=\"featureClass(feature.toneClass)\">\r\n @if (feature.icon) {\r\n <lucide-icon [img]=\"feature.icon\" size=\"20\" aria-hidden=\"true\" />\r\n }\r\n <span>{{ feature.label }}</span>\r\n @if (feature.description) {\r\n <small>{{ feature.description }}</small>\r\n }\r\n </div>\r\n }\r\n </div>\r\n }\r\n </section>\r\n\r\n <section class=\"platform-login__panel\" aria-labelledby=\"platform-login-title\">\r\n <div class=\"platform-login__header\">\r\n @if (panelEyebrow()) {\r\n <p>{{ panelEyebrow() }}</p>\r\n }\r\n <h2 id=\"platform-login-title\">{{ panelTitle() }}</h2>\r\n <span>{{ panelSubtitle() }}</span>\r\n </div>\r\n\r\n @if (visibleErrorMessage()) {\r\n <p class=\"platform-login__error\" role=\"alert\">{{ visibleErrorMessage() }}</p>\r\n }\r\n\r\n <form class=\"platform-login__form\" (ngSubmit)=\"submit()\">\r\n <label class=\"platform-login__field\">\r\n <span>{{ usernameLabel() }}</span>\r\n <div class=\"platform-login__control\">\r\n <lucide-icon [img]=\"userIcon\" size=\"17\" aria-hidden=\"true\" />\r\n <input\r\n type=\"text\"\r\n data-platform-input=\"bare\"\r\n autocomplete=\"username\"\r\n [placeholder]=\"usernamePlaceholder()\"\r\n [ngModel]=\"username()\"\r\n (ngModelChange)=\"username.set($event)\"\r\n name=\"username\"\r\n />\r\n </div>\r\n </label>\r\n\r\n <label class=\"platform-login__field\">\r\n <span>{{ passwordLabel() }}</span>\r\n <div class=\"platform-login__control\">\r\n <lucide-icon [img]=\"keyIcon\" size=\"17\" aria-hidden=\"true\" />\r\n <input\r\n [type]=\"showPassword() ? 'text' : 'password'\"\r\n data-platform-input=\"bare\"\r\n autocomplete=\"current-password\"\r\n [placeholder]=\"passwordPlaceholder()\"\r\n [ngModel]=\"password()\"\r\n (ngModelChange)=\"password.set($event)\"\r\n name=\"password\"\r\n />\r\n <button\r\n class=\"platform-login__icon-button\"\r\n type=\"button\"\r\n [attr.aria-label]=\"showPassword() ? '隐藏密码' : '显示密码'\"\r\n (click)=\"togglePassword()\"\r\n >\r\n <lucide-icon [img]=\"showPassword() ? eyeOffIcon : eyeIcon\" size=\"17\" aria-hidden=\"true\" />\r\n </button>\r\n </div>\r\n </label>\r\n\r\n <div class=\"platform-login__options\">\r\n <label class=\"platform-login__remember\">\r\n <input\r\n type=\"checkbox\"\r\n [ngModel]=\"rememberMe()\"\r\n (ngModelChange)=\"rememberMe.set($event)\"\r\n name=\"rememberMe\"\r\n />\r\n <span>{{ rememberLabel() }}</span>\r\n </label>\r\n @if (showForgotPassword()) {\r\n <button class=\"platform-login__link\" type=\"button\" (click)=\"emitForgotPassword()\">\r\n {{ forgotPasswordText() }}\r\n </button>\r\n } @else if (metaText()) {\r\n <span>{{ metaText() }}</span>\r\n }\r\n </div>\r\n\r\n @if (metaText() && showForgotPassword()) {\r\n <p class=\"platform-login__meta\">{{ metaText() }}</p>\r\n }\r\n\r\n <button class=\"platform-login__submit\" type=\"submit\" [disabled]=\"submitting()\">\r\n {{ submitting() ? submittingText() : submitText() }}\r\n </button>\r\n </form>\r\n\r\n @if (socialProviders().length > 0) {\r\n <div class=\"platform-login__social\">\r\n <div class=\"platform-login__divider\">\r\n <span>{{ dividerText() }}</span>\r\n </div>\r\n <div class=\"platform-login__social-list\">\r\n @for (provider of socialProviders(); track provider.id) {\r\n <button\r\n [class]=\"socialProviderClass(provider.toneClass)\"\r\n type=\"button\"\r\n [disabled]=\"provider.disabled\"\r\n [attr.aria-label]=\"provider.label\"\r\n (click)=\"emitSocialLogin(provider)\"\r\n >\r\n @if (provider.icon) {\r\n <lucide-icon [img]=\"provider.icon\" size=\"22\" aria-hidden=\"true\" />\r\n <span class=\"platform-login__social-label\">{{ provider.label }}</span>\r\n } @else {\r\n <span>{{ socialProviderInitial(provider) }}</span>\r\n }\r\n </button>\r\n }\r\n </div>\r\n </div>\r\n }\r\n\r\n @if (showRegister()) {\r\n <p class=\"platform-login__register\">\r\n <span>{{ registerPrompt() }}</span>\r\n <button class=\"platform-login__link\" type=\"button\" (click)=\"emitRegister()\">\r\n {{ registerText() }}\r\n </button>\r\n </p>\r\n }\r\n </section>\r\n </div>\r\n </section>\r\n</main>\r\n","import {\r\n CdkOverlayOrigin,\r\n ConnectedPosition,\r\n OverlayModule,\r\n} from '@angular/cdk/overlay';\r\nimport {\r\n ChangeDetectionStrategy,\r\n Component,\r\n ElementRef,\r\n computed,\r\n contentChildren,\r\n effect,\r\n input,\r\n output,\r\n viewChild,\r\n} from '@angular/core';\r\nimport { Menu, MenuContent, MenuItem, MenuTrigger } from '@angular/aria/menu';\r\nimport { LucideAngularModule, type LucideIconData } from 'lucide-angular';\r\n\r\nexport type AppMenuIcon = string | LucideIconData;\r\n\r\nconst DEFAULT_MENU_POSITIONS: ConnectedPosition[] = [\r\n { originX: 'start', originY: 'bottom', overlayX: 'start', overlayY: 'top', offsetY: 4 },\r\n];\r\n\r\n@Component({\r\n selector: 's-menu-item',\r\n imports: [MenuItem, LucideAngularModule],\r\n template: `\r\n <div\r\n ngMenuItem\r\n class=\"menu-item\"\r\n [class.menu-item--danger]=\"tone() === 'danger'\"\r\n [value]=\"value()\"\r\n [disabled]=\"disabled()\"\r\n (click)=\"handleSelect()\"\r\n >\r\n @if (icon(); as menuIcon) {\r\n @if (isTextIcon(menuIcon)) {\r\n <span class=\"icon\" translate=\"no\" aria-hidden=\"true\">{{ menuIcon }}</span>\r\n } @else {\r\n <lucide-icon\r\n class=\"icon\"\r\n [img]=\"menuIcon\"\r\n [size]=\"16\"\r\n [strokeWidth]=\"1.9\"\r\n aria-hidden=\"true\"\r\n />\r\n }\r\n }\r\n <span class=\"label\">\r\n <ng-content />\r\n </span>\r\n </div>\r\n `,\r\n styleUrl: './s-menu.scss',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class MenuItemComponent {\r\n private closeMenu: (() => void) | null = null;\r\n\r\n readonly disabled = input(false);\r\n readonly tone = input<'default' | 'danger'>('default');\r\n readonly value = input('');\r\n readonly icon = input<AppMenuIcon | null>(null);\r\n\r\n readonly select = output<void>();\r\n private readonly menuItem = viewChild(MenuItem);\r\n\r\n setCloseMenu(closeMenu: (() => void) | null): void {\r\n this.closeMenu = closeMenu;\r\n }\r\n\r\n protected isTextIcon(icon: AppMenuIcon): icon is string {\r\n return typeof icon === 'string';\r\n }\r\n\r\n protected handleSelect(): void {\r\n if (!this.disabled()) {\r\n this.select.emit();\r\n this.menuItem()?.close();\r\n this.closeMenu?.();\r\n }\r\n }\r\n}\r\n\r\n@Component({\r\n selector: 's-menu',\r\n imports: [OverlayModule, Menu, MenuContent],\r\n templateUrl: './s-menu.html',\r\n styleUrl: './s-menu.scss',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class MenuComponent {\r\n readonly origin = input.required<CdkOverlayOrigin | ElementRef<HTMLElement>>();\r\n readonly trigger = input.required<MenuTrigger<string>>();\r\n readonly positions = input<ConnectedPosition[]>(DEFAULT_MENU_POSITIONS);\r\n readonly panelWidth = input('15rem');\r\n\r\n readonly formatMenu = viewChild<Menu<string>>('formatMenu');\r\n readonly menuItems = contentChildren(MenuItemComponent, { descendants: true });\r\n readonly hasItems = computed(() => this.menuItems().length > 0);\r\n\r\n constructor() {\r\n effect(() => {\r\n const closeMenu = () => this.trigger().close();\r\n for (const item of this.menuItems()) {\r\n item.setCloseMenu(closeMenu);\r\n }\r\n });\r\n }\r\n}\r\n","<ng-template\r\n [cdkConnectedOverlayOpen]=\"trigger().expanded()\"\r\n [cdkConnectedOverlay]=\"{ origin: origin(), usePopover: 'inline' }\"\r\n [cdkConnectedOverlayPositions]=\"positions()\"\r\n cdkAttachPopoverAsChild\r\n>\r\n <div ngMenu class=\"menu\" #formatMenu=\"ngMenu\" [style.width]=\"panelWidth()\">\r\n <ng-template ngMenuContent>\r\n <ng-content />\r\n </ng-template>\r\n </div>\r\n</ng-template>\r\n","import { ChangeDetectionStrategy, Component, ViewEncapsulation, input, output } from '@angular/core';\r\nimport { NgOptimizedImage } from '@angular/common';\r\nimport { LucideAngularModule, EllipsisVerticalIcon, type LucideIconData } from 'lucide-angular';\r\n\r\nexport type MerchantCardChipTone = 'neutral' | 'success' | 'warning' | 'danger' | 'info';\r\n\r\nexport interface MerchantCardChip {\r\n label: string;\r\n tone?: MerchantCardChipTone;\r\n icon?: LucideIconData;\r\n}\r\n\r\n@Component({\r\n selector: 's-merchant-card',\r\n imports: [NgOptimizedImage, LucideAngularModule],\r\n templateUrl: './s-merchant-card.html',\r\n styleUrl: './s-merchant-card.scss',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n encapsulation: ViewEncapsulation.None,\r\n})\r\nexport class MerchantCard {\r\n readonly imageUrl = input('');\r\n readonly imageAlt = input('');\r\n readonly imageBadge = input('');\r\n readonly showMoreButton = input(true);\r\n\r\n readonly name = input('');\r\n readonly content = input('');\r\n readonly badge = input('');\r\n readonly badgeTone = input<MerchantCardChipTone>('neutral');\r\n readonly tags = input<readonly MerchantCardChip[]>([]);\r\n\r\n readonly moreAriaLabel = input('更多操作');\r\n readonly moreClick = output<Event>();\r\n\r\n protected readonly moreIcon = EllipsisVerticalIcon;\r\n\r\n protected trackByChipLabel(_index: number, chip: MerchantCardChip): string {\r\n return `${chip.tone ?? 'neutral'}-${chip.label}`;\r\n }\r\n\r\n protected onMoreClick(event: Event): void {\r\n this.moreClick.emit(event);\r\n }\r\n}\r\n","<article class=\"merchant-card\">\r\n <div class=\"merchant-card__media\">\r\n @if (imageUrl()) {\r\n <img\r\n class=\"merchant-card__image\"\r\n [ngSrc]=\"imageUrl()\"\r\n [alt]=\"imageAlt() || name()\"\r\n width=\"176\"\r\n height=\"176\"\r\n />\r\n } @else {\r\n <div class=\"merchant-card__image merchant-card__image--placeholder\" aria-hidden=\"true\"></div>\r\n }\r\n\r\n <ng-content select=\"[merchantCardMediaOverlay]\" />\r\n </div>\r\n\r\n <div class=\"merchant-card__row merchant-card__row--head\">\r\n <div class=\"merchant-card__name\">{{ name() }}</div>\r\n\r\n <div class=\"merchant-card__actions\">\r\n <ng-content select=\"[merchantCardActions]\" />\r\n\r\n @if (showMoreButton()) {\r\n <button\r\n type=\"button\"\r\n class=\"merchant-card__more\"\r\n [attr.aria-label]=\"moreAriaLabel()\"\r\n (click)=\"onMoreClick($event)\"\r\n >\r\n <i-lucide [img]=\"moreIcon\" class=\"merchant-card__more-icon\"></i-lucide>\r\n </button>\r\n }\r\n </div>\r\n </div>\r\n\r\n <div class=\"merchant-card__row merchant-card__row--body\">\r\n <div class=\"merchant-card__content\">{{ content() }}</div>\r\n\r\n @if (badge()) {\r\n <span class=\"merchant-card__badge\" [attr.data-tone]=\"badgeTone()\">\r\n {{ badge() }}\r\n </span>\r\n }\r\n </div>\r\n\r\n <div class=\"merchant-card__row merchant-card__row--tags\">\r\n @for (chip of tags(); track trackByChipLabel($index, chip)) {\r\n <span class=\"merchant-card__chip\" [attr.data-tone]=\"chip.tone ?? 'neutral'\">\r\n @if (chip.icon; as icon) {\r\n <i-lucide [img]=\"icon\" class=\"merchant-card__chip-icon\"></i-lucide>\r\n }\r\n <span>{{ chip.label }}</span>\r\n </span>\r\n }\r\n </div>\r\n</article>\r\n","import { ChangeDetectionStrategy, Component, input } from '@angular/core';\n\nexport const M_ALPHABET_DEFAULT_LETTERS = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ#'.split('');\n\nexport type MAlphabetPlacement = 'inline' | 'edge';\n\n@Component({\n selector: 'm-alphabet',\n host: {\n '[class.m-alphabet-host--edge]': \"placement() === 'edge'\",\n },\n templateUrl: './m-alphabet.html',\n styleUrl: './m-alphabet.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class MAlphabet {\n readonly ariaLabel = input('Alphabet index');\n readonly letters = input<readonly string[]>(M_ALPHABET_DEFAULT_LETTERS);\n readonly placement = input<MAlphabetPlacement>('inline');\n\n protected trackByLetter(_index: number, letter: string): string {\n return letter;\n }\n}\n","@if (letters().length > 0) {\n<nav class=\"m-alphabet\" [attr.aria-label]=\"ariaLabel()\">\n @for (letter of letters(); track trackByLetter($index, letter)) {\n <span class=\"m-alphabet__letter\">{{ letter }}</span>\n }\n</nav>\n}\n","import { Directive, computed, input } from '@angular/core';\n\nexport type MItemStandardTone =\n | 'amber'\n | 'blue'\n | 'cyan'\n | 'green'\n | 'mint'\n | 'orange'\n | 'purple'\n | 'rose'\n | 'sky'\n | 'slate'\n | 'warm';\nexport type MItemAvatarIconShape = 'circle' | 'rounded-square' | 'square';\n\nconst STANDARD_TONES: readonly MItemStandardTone[] = [\n 'amber',\n 'blue',\n 'cyan',\n 'green',\n 'mint',\n 'orange',\n 'purple',\n 'rose',\n 'sky',\n 'slate',\n 'warm',\n];\nconst PRESENCE_ONLINE_LABEL = '\\u5728\\u7ebf';\nconst PRESENCE_OFFLINE_LABEL = '\\u79bb\\u7ebf';\nconst UNREAD_LABEL = '\\u672a\\u8bfb';\n\nfunction coerceTone(\n value: MItemStandardTone | string | null | undefined,\n fallback: MItemStandardTone,\n): MItemStandardTone {\n const tone = `${value ?? ''}`.trim().toLowerCase() as MItemStandardTone;\n\n return STANDARD_TONES.includes(tone) ? tone : fallback;\n}\n\nfunction coerceProfileTone(\n value: MItemStandardTone | string | null | undefined,\n): MItemStandardTone {\n return coerceTone(value, 'slate');\n}\n\nfunction coerceAvatarTone(\n value: MItemStandardTone | string | null | undefined,\n): MItemStandardTone {\n return coerceTone(value, 'blue');\n}\n\nfunction coerceAvatarIconShape(\n value: MItemAvatarIconShape | string | null | undefined,\n): MItemAvatarIconShape {\n const shape = `${value ?? ''}`.trim().toLowerCase();\n\n if (shape === 'rounded' || shape === 'rounded-square' || shape === 'square') {\n return shape === 'rounded' ? 'rounded-square' : shape;\n }\n\n return 'circle';\n}\n\nfunction coerceOnline(value: boolean | string | null | undefined): boolean {\n if (typeof value === 'boolean') {\n return value;\n }\n\n return `${value ?? ''}`.trim().toLowerCase() === 'online' || value === 'true';\n}\n\nconst PROFILE_AVATAR_TONE_HOST_CLASSES = {\n '[class.m-item-profile-avatar--amber]': \"mItemProfileAvatar() === 'amber'\",\n '[class.m-item-profile-avatar--blue]': \"mItemProfileAvatar() === 'blue'\",\n '[class.m-item-profile-avatar--cyan]': \"mItemProfileAvatar() === 'cyan'\",\n '[class.m-item-profile-avatar--green]': \"mItemProfileAvatar() === 'green'\",\n '[class.m-item-profile-avatar--mint]': \"mItemProfileAvatar() === 'mint'\",\n '[class.m-item-profile-avatar--orange]': \"mItemProfileAvatar() === 'orange'\",\n '[class.m-item-profile-avatar--purple]': \"mItemProfileAvatar() === 'purple'\",\n '[class.m-item-profile-avatar--rose]': \"mItemProfileAvatar() === 'rose'\",\n '[class.m-item-profile-avatar--sky]': \"mItemProfileAvatar() === 'sky'\",\n '[class.m-item-profile-avatar--slate]': \"mItemProfileAvatar() === 'slate'\",\n '[class.m-item-profile-avatar--warm]': \"mItemProfileAvatar() === 'warm'\",\n};\n\nconst AVATAR_TONE_HOST_CLASSES = {\n '[class.m-item-avatar-tone--amber]': \"resolvedTone() === 'amber'\",\n '[class.m-item-avatar-tone--blue]': \"resolvedTone() === 'blue'\",\n '[class.m-item-avatar-tone--cyan]': \"resolvedTone() === 'cyan'\",\n '[class.m-item-avatar-tone--green]': \"resolvedTone() === 'green'\",\n '[class.m-item-avatar-tone--mint]': \"resolvedTone() === 'mint'\",\n '[class.m-item-avatar-tone--orange]': \"resolvedTone() === 'orange'\",\n '[class.m-item-avatar-tone--purple]': \"resolvedTone() === 'purple'\",\n '[class.m-item-avatar-tone--rose]': \"resolvedTone() === 'rose'\",\n '[class.m-item-avatar-tone--sky]': \"resolvedTone() === 'sky'\",\n '[class.m-item-avatar-tone--slate]': \"resolvedTone() === 'slate'\",\n '[class.m-item-avatar-tone--warm]': \"resolvedTone() === 'warm'\",\n};\n\nconst AVATAR_ICON_HOST_CLASSES = {\n '[class.m-item-avatar-icon--amber]': \"mItemAvatarIcon() === 'amber'\",\n '[class.m-item-avatar-icon--blue]': \"mItemAvatarIcon() === 'blue'\",\n '[class.m-item-avatar-icon--cyan]': \"mItemAvatarIcon() === 'cyan'\",\n '[class.m-item-avatar-icon--green]': \"mItemAvatarIcon() === 'green'\",\n '[class.m-item-avatar-icon--mint]': \"mItemAvatarIcon() === 'mint'\",\n '[class.m-item-avatar-icon--orange]': \"mItemAvatarIcon() === 'orange'\",\n '[class.m-item-avatar-icon--purple]': \"mItemAvatarIcon() === 'purple'\",\n '[class.m-item-avatar-icon--rose]': \"mItemAvatarIcon() === 'rose'\",\n '[class.m-item-avatar-icon--sky]': \"mItemAvatarIcon() === 'sky'\",\n '[class.m-item-avatar-icon--slate]': \"mItemAvatarIcon() === 'slate'\",\n '[class.m-item-avatar-icon--warm]': \"mItemAvatarIcon() === 'warm'\",\n '[class.m-item-avatar-icon--circle]': \"mItemAvatarIconShape() === 'circle'\",\n '[class.m-item-avatar-icon--rounded-square]': \"mItemAvatarIconShape() === 'rounded-square'\",\n '[class.m-item-avatar-icon--square]': \"mItemAvatarIconShape() === 'square'\",\n};\n\n@Directive({\n selector: '[mItemProfileAvatar]',\n host: {\n class: 'm-item-profile-avatar',\n ...PROFILE_AVATAR_TONE_HOST_CLASSES,\n },\n})\nexport class MItemProfileAvatarDirective {\n readonly mItemProfileAvatar = input<\n MItemStandardTone,\n MItemStandardTone | string | null | undefined\n >('slate', {\n transform: coerceProfileTone,\n });\n}\n\n@Directive({\n selector: '[mItemProfileTitle]',\n host: {\n class: 'm-item-profile-title',\n },\n})\nexport class MItemProfileTitleDirective {}\n\n@Directive({\n selector: '[mItemProfileName]',\n host: {\n class: 'm-item-profile-name',\n },\n})\nexport class MItemProfileNameDirective {}\n\n@Directive({\n selector: '[mItemPresence]',\n host: {\n class: 'm-item-presence',\n '[class.m-item-presence--online]': 'mItemPresence()',\n '[attr.aria-label]': 'resolvedAriaLabel()',\n },\n})\nexport class MItemPresenceDirective {\n readonly mItemPresence = input<\n boolean,\n boolean | string | null | undefined\n >(false, {\n transform: coerceOnline,\n });\n readonly ariaLabel = input('');\n\n protected readonly resolvedAriaLabel = computed(\n () =>\n this.ariaLabel() ||\n (this.mItemPresence()\n ? PRESENCE_ONLINE_LABEL\n : PRESENCE_OFFLINE_LABEL),\n );\n}\n\n@Directive({\n selector: '[mItemAvatarFrame]',\n host: {\n class: 'm-item-avatar-frame',\n },\n})\nexport class MItemAvatarFrameDirective {}\n\n@Directive({\n selector: '[mItemAvatarPortrait]',\n host: {\n class: 'm-item-avatar-portrait',\n ...AVATAR_TONE_HOST_CLASSES,\n },\n})\nexport class MItemAvatarPortraitDirective {\n readonly mItemAvatarPortrait = input<\n MItemStandardTone,\n MItemStandardTone | string | null | undefined\n >('blue', {\n transform: coerceAvatarTone,\n });\n\n protected readonly resolvedTone = computed(() => this.mItemAvatarPortrait());\n}\n\n@Directive({\n selector: '[mItemAvatarGroup]',\n host: {\n class: 'm-item-avatar-group',\n },\n})\nexport class MItemAvatarGroupDirective {}\n\n@Directive({\n selector: '[mItemAvatarFace]',\n host: {\n class: 'm-item-avatar-face',\n ...AVATAR_TONE_HOST_CLASSES,\n },\n})\nexport class MItemAvatarFaceDirective {\n readonly mItemAvatarFace = input<\n MItemStandardTone,\n MItemStandardTone | string | null | undefined\n >('blue', {\n transform: coerceAvatarTone,\n });\n\n protected readonly resolvedTone = computed(() => this.mItemAvatarFace());\n}\n\n@Directive({\n selector: '[mItemAvatarIcon]',\n host: {\n class: 'm-item-avatar-frame m-item-avatar-icon',\n ...AVATAR_ICON_HOST_CLASSES,\n },\n})\nexport class MItemAvatarIconDirective {\n readonly mItemAvatarIcon = input<\n MItemStandardTone,\n MItemStandardTone | string | null | undefined\n >('blue', {\n transform: coerceAvatarTone,\n });\n readonly mItemAvatarIconShape = input<\n MItemAvatarIconShape,\n MItemAvatarIconShape | string | null | undefined\n >('circle', {\n transform: coerceAvatarIconShape,\n });\n}\n\n@Directive({\n selector: '[mItemIndicator]',\n host: {\n class: 'm-item-indicator',\n },\n})\nexport class MItemIndicatorDirective {}\n\n@Directive({\n selector: '[mItemBadge]',\n host: {\n class: 'm-item-badge',\n },\n})\nexport class MItemBadgeDirective {}\n\n@Directive({\n selector: '[mItemUnreadDot]',\n host: {\n class: 'm-item-unread-dot',\n '[attr.aria-label]': 'unreadLabel',\n },\n})\nexport class MItemUnreadDotDirective {\n protected readonly unreadLabel = UNREAD_LABEL;\n}\n\n@Directive({\n selector: '[mItemMarker]',\n host: {\n class: 'm-item-marker',\n },\n})\nexport class MItemMarkerDirective {}\n\n@Directive({\n selector: '[mItemMenuIcon]',\n host: {\n class: 'm-item-menu-icon',\n },\n})\nexport class MItemMenuIconDirective {}\n\n@Directive({\n selector: '[mItemMenuChevron]',\n host: {\n class: 'm-item-menu-chevron',\n },\n})\nexport class MItemMenuChevronDirective {}\n\nexport const M_ITEM_APPEARANCE_DIRECTIVES = [\n MItemProfileAvatarDirective,\n MItemProfileTitleDirective,\n MItemProfileNameDirective,\n MItemPresenceDirective,\n MItemAvatarFrameDirective,\n MItemAvatarPortraitDirective,\n MItemAvatarGroupDirective,\n MItemAvatarFaceDirective,\n MItemAvatarIconDirective,\n MItemIndicatorDirective,\n MItemBadgeDirective,\n MItemUnreadDotDirective,\n MItemMarkerDirective,\n MItemMenuIconDirective,\n MItemMenuChevronDirective,\n] as const;\n","import { Directive, TemplateRef } from '@angular/core';\n\n@Directive({ selector: 'ng-template[MItemPrefix]' })\nexport class MItemPrefixSlot {\n constructor(readonly template: TemplateRef<unknown>) {}\n}\n\n@Directive({ selector: 'ng-template[MItemAvatar]' })\nexport class MItemAvatarSlot {\n constructor(readonly template: TemplateRef<unknown>) {}\n}\n\n@Directive({ selector: 'ng-template[MItemTitle]' })\nexport class MItemTitleSlot {\n constructor(readonly template: TemplateRef<unknown>) {}\n}\n\n@Directive({ selector: 'ng-template[MItemSummary]' })\nexport class MItemSummarySlot {\n constructor(readonly template: TemplateRef<unknown>) {}\n}\n\n@Directive({ selector: 'ng-template[MItemMeta]' })\nexport class MItemMetaSlot {\n constructor(readonly template: TemplateRef<unknown>) {}\n}\n\n@Directive({ selector: 'ng-template[MItemFooter]' })\nexport class MItemFooterSlot {\n constructor(readonly template: TemplateRef<unknown>) {}\n}\n\n@Directive({ selector: 'ng-template[MItemTrailing]' })\nexport class MItemTrailingSlot {\n constructor(readonly template: TemplateRef<unknown>) {}\n}\n\n@Directive({ selector: 'ng-template[MItemStatus]' })\nexport class MItemStatusSlot {\n constructor(readonly template: TemplateRef<unknown>) {}\n}\n\n@Directive({ selector: 'ng-template[MItemActions]' })\nexport class MItemActionsSlot {\n constructor(readonly template: TemplateRef<unknown>) {}\n}\n\nexport const M_ITEM_SLOT_DIRECTIVES = [\n MItemPrefixSlot,\n MItemAvatarSlot,\n MItemTitleSlot,\n MItemSummarySlot,\n MItemMetaSlot,\n MItemFooterSlot,\n MItemTrailingSlot,\n MItemStatusSlot,\n MItemActionsSlot,\n] as const;\n","import { ChangeDetectionStrategy, Component, ContentChild, input, output } from '@angular/core';\r\nimport { NgTemplateOutlet } from '@angular/common';\r\nimport { Avatar, type AvatarIndicatorType, type AvatarShape } from '../s-avatar/s-avatar';\r\nimport {\r\n MItemActionsSlot,\r\n MItemAvatarSlot,\r\n MItemFooterSlot,\r\n MItemMetaSlot,\r\n MItemPrefixSlot,\r\n MItemStatusSlot,\r\n MItemSummarySlot,\r\n MItemTitleSlot,\r\n MItemTrailingSlot,\r\n M_ITEM_SLOT_DIRECTIVES,\r\n} from './m-item-slots';\r\nimport type { MItemLayout, MItemStatus, MItemVariant } from './m-list.types';\r\n\r\nfunction coerceOptionalSize(value: number | string | null | undefined): number | null {\r\n if (value === null || value === undefined || value === '') {\r\n return null;\r\n }\r\n\r\n const size = Number(value);\r\n return Number.isFinite(size) && size > 0 ? size : null;\r\n}\r\n\r\n@Component({\r\n selector: 'm-item',\r\n imports: [Avatar, NgTemplateOutlet, M_ITEM_SLOT_DIRECTIVES],\r\n templateUrl: './m-item.html',\r\n styleUrl: './m-item.scss',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n host: {\r\n '(click)': 'onActivate($event)',\r\n '(keydown.enter)': 'onActivate($event)',\r\n '(keydown.space)': 'onActivate($event)',\r\n '[attr.tabindex]': 'clickable() ? 0 : null',\r\n '[attr.role]': '\"listitem\"',\r\n },\r\n})\r\nexport class MItem {\r\n readonly variant = input<MItemVariant>('message');\r\n readonly layout = input<MItemLayout>('two-line');\r\n readonly status = input<MItemStatus>('none');\r\n readonly statusLabel = input('');\r\n readonly title = input('');\r\n readonly time = input('');\r\n readonly content = input('');\r\n readonly extra = input('');\r\n readonly subtitle = input('');\r\n readonly avatarSrc = input<string | null>(null);\r\n readonly avatarText = input('');\r\n readonly avatarAlt = input('');\r\n readonly avatarSize = input<number | null, number | string | null | undefined>(null, {\r\n transform: coerceOptionalSize,\r\n });\r\n readonly avatarShape = input<AvatarShape>('circle');\r\n readonly avatarIndicator = input<number | null>(null);\r\n readonly avatarIndicatorType = input<AvatarIndicatorType>('count');\r\n readonly clickable = input(false);\r\n readonly bordered = input(true);\r\n readonly compact = input(false);\r\n readonly showFooter = input(true);\r\n readonly selectable = input(false);\r\n readonly selected = input(false);\r\n readonly active = input(false);\r\n readonly disabled = input(false);\r\n\r\n readonly itemClick = output<Event>();\r\n\r\n @ContentChild(MItemPrefixSlot) protected prefixSlot?: MItemPrefixSlot;\r\n @ContentChild(MItemAvatarSlot) protected avatarSlot?: MItemAvatarSlot;\r\n @ContentChild(MItemTitleSlot) protected titleSlot?: MItemTitleSlot;\r\n @ContentChild(MItemSummarySlot) protected summarySlot?: MItemSummarySlot;\r\n @ContentChild(MItemMetaSlot) protected metaSlot?: MItemMetaSlot;\r\n @ContentChild(MItemFooterSlot) protected footerSlot?: MItemFooterSlot;\r\n @ContentChild(MItemTrailingSlot) protected trailingSlot?: MItemTrailingSlot;\r\n @ContentChild(MItemStatusSlot) protected statusSlot?: MItemStatusSlot;\r\n @ContentChild(MItemActionsSlot) protected actionsSlot?: MItemActionsSlot;\r\n\r\n protected onActivate(event: Event): void {\r\n if (!this.clickable() || this.disabled()) {\r\n return;\r\n }\r\n\r\n if (event instanceof KeyboardEvent) {\r\n event.preventDefault();\r\n }\r\n\r\n this.itemClick.emit(event);\r\n }\r\n}\r\n","<article\n class=\"m-item\"\n [class.m-item--compact]=\"compact()\"\n [class.m-item--clickable]=\"clickable() && !disabled()\"\n [class.m-item--bordered]=\"bordered()\"\n [class.m-item--selectable]=\"selectable()\"\n [class.m-item--selected]=\"selected()\"\n [class.m-item--active]=\"active()\"\n [class.m-item--disabled]=\"disabled()\"\n [class.m-item--layout-one-line]=\"layout() === 'one-line'\"\n [class.m-item--layout-three-line]=\"layout() === 'three-line'\"\n [class.m-item--variant-workflow]=\"variant() === 'workflow'\"\n [class.m-item--variant-mail]=\"variant() === 'mail'\"\n [class.m-item--variant-activity]=\"variant() === 'activity'\"\n [class.m-item--variant-menu]=\"variant() === 'menu'\"\n [class.m-item--variant-request]=\"variant() === 'request'\"\n [class.m-item--variant-shortcut]=\"variant() === 'shortcut'\"\n [class.m-item--status-unread]=\"status() === 'unread'\"\n [class.m-item--status-todo]=\"status() === 'todo'\"\n [class.m-item--status-processing]=\"status() === 'processing'\"\n [class.m-item--status-warning]=\"status() === 'warning'\"\n [style.--m-item-avatar-size]=\"avatarSize() === null ? null : avatarSize() + 'px'\"\n>\n <div class=\"m-item__start\">\n <div class=\"m-item__prefix\">\n @if (prefixSlot) {\n <ng-container [ngTemplateOutlet]=\"prefixSlot.template\" />\n } @else {\n <ng-content select=\"[m-item-prefix]\" />\n <ng-content select=\"[mItemPrefix]\" />\n }\n </div>\n\n <div class=\"m-item__media\">\n @if (avatarSlot) {\n <ng-container [ngTemplateOutlet]=\"avatarSlot.template\" />\n } @else if (avatarSrc() || avatarText()) {\n <s-avatar\n class=\"m-item__default-avatar\"\n [shape]=\"avatarShape()\"\n [size]=\"avatarSize() ?? 48\"\n [src]=\"avatarSrc()\"\n [alt]=\"avatarAlt() || title()\"\n [text]=\"avatarText() || title()\"\n [indicator]=\"avatarIndicator()\"\n [indicatorType]=\"avatarIndicatorType()\"\n />\n } @else {\n <ng-content select=\"[m-item-start]\" />\n <ng-content select=\"[mItemStart]\" />\n <ng-content select=\"[m-item-avatar]\" />\n <ng-content select=\"[mItemAvatar]\" />\n }\n </div>\n </div>\n\n <div class=\"m-item__body\">\n <div class=\"m-item__row m-item__row--primary\">\n <div class=\"m-item__title-wrap\">\n <div class=\"m-item__title\">\n @if (titleSlot) {\n <ng-container [ngTemplateOutlet]=\"titleSlot.template\" />\n } @else if (title()) {\n {{ title() }}\n } @else {\n <ng-content select=\"[m-item-title]\" />\n <ng-content select=\"[mItemTitle]\" />\n <ng-content select=\"[m-item-title-text]\" />\n <ng-content select=\"[mItemTitleText]\" />\n }\n </div>\n\n @if (subtitle()) {\n <div class=\"m-item__subtitle\">{{ subtitle() }}</div>\n }\n </div>\n\n <div class=\"m-item__meta\">\n @if (trailingSlot) {\n <ng-container [ngTemplateOutlet]=\"trailingSlot.template\" />\n } @else if (time()) {\n {{ time() }}\n } @else {\n <ng-content select=\"[m-item-meta]\" />\n <ng-content select=\"[mItemMeta]\" />\n <ng-content select=\"[m-item-time]\" />\n <ng-content select=\"[mItemTime]\" />\n }\n </div>\n </div>\n\n <div class=\"m-item__row m-item__row--secondary\">\n <div class=\"m-item__description\">\n @if (summarySlot) {\n <ng-container [ngTemplateOutlet]=\"summarySlot.template\" />\n } @else if (content()) {\n {{ content() }}\n } @else {\n <ng-content select=\"[m-item-description]\" />\n <ng-content select=\"[mItemDescription]\" />\n <ng-content select=\"[m-item-content]\" />\n <ng-content select=\"[mItemContent]\" />\n <ng-content select=\"[m-item-content-text]\" />\n <ng-content select=\"[mItemContentText]\" />\n }\n </div>\n\n <div class=\"m-item__actions\">\n @if (statusSlot) {\n <ng-container [ngTemplateOutlet]=\"statusSlot.template\" />\n } @else if (status() === 'todo' || status() === 'processing' || status() === 'warning') {\n <span class=\"m-item__status-badge\">{{ statusLabel() || status() }}</span>\n } @else if (status() === 'unread' || status() === 'read') {\n <span class=\"m-item__status-dot\" [attr.aria-label]=\"statusLabel() || status()\"></span>\n }\n\n @if (actionsSlot) {\n <ng-container [ngTemplateOutlet]=\"actionsSlot.template\" />\n } @else if (extra()) {\n {{ extra() }}\n } @else {\n <ng-content select=\"[m-item-actions]\" />\n <ng-content select=\"[mItemActions]\" />\n <ng-content select=\"[m-item-end]\" />\n <ng-content select=\"[mItemEnd]\" />\n <ng-content select=\"[m-item-extra]\" />\n <ng-content select=\"[mItemExtra]\" />\n <ng-content select=\"[m-item-extra-text]\" />\n <ng-content select=\"[mItemExtraText]\" />\n <ng-content select=\"[m-item-append]\" />\n <ng-content select=\"[mItemAppend]\" />\n }\n </div>\n </div>\n\n @if (showFooter()) {\n <div class=\"m-item__footer\">\n @if (footerSlot) {\n <ng-container [ngTemplateOutlet]=\"footerSlot.template\" />\n } @else if (metaSlot) {\n <ng-container [ngTemplateOutlet]=\"metaSlot.template\" />\n } @else {\n <ng-content select=\"[m-item-footer]\" />\n <ng-content select=\"[mItemFooter]\" />\n }\n </div>\n }\n </div>\n</article>\n","import {\r\n ChangeDetectionStrategy,\r\n Component,\r\n computed,\r\n input,\r\n} from '@angular/core';\r\n\r\nimport type { MListDensity, MListDivider, MListVariant } from './m-list.types';\r\n\r\nlet nextMListId = 0;\r\n\r\n@Component({\r\n selector: 'm-list',\r\n imports: [],\r\n host: {\r\n '[class.m-list-host--profile]': 'isProfile()',\n },\r\n templateUrl: './m-list.html',\r\n styleUrl: './m-list.scss',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class MList {\r\n private readonly defaultSectionTitleId = `m-list-section-title-${nextMListId++}`;\r\n\r\n readonly variant = input<MListVariant>('plain');\r\n readonly density = input<MListDensity>('default');\r\n readonly divider = input<MListDivider>('inset');\r\n readonly card = input(true);\r\n readonly compact = input(false);\r\n readonly isolated = input(false);\r\n readonly selectable = input(false);\r\n readonly loading = input(false);\r\n readonly empty = input(false);\r\n readonly emptyText = input('暂无数据');\r\n readonly ariaLabel = input('');\r\n readonly sectionTitle = input('');\r\n readonly sectionTitleId = input('');\r\n\r\n protected readonly resolvedAriaLabel = computed(() =>\r\n this.sectionTitle() ? null : this.ariaLabel() || null,\r\n );\r\n protected readonly resolvedSectionTitleId = computed(\r\n () => this.sectionTitleId() || this.defaultSectionTitleId,\r\n );\r\n protected readonly isCard = computed(\r\n () => this.card() || this.variant() === 'card',\r\n );\r\n protected readonly isCompact = computed(\r\n () => this.compact() || this.density() === 'compact',\r\n );\r\n protected readonly isComfortable = computed(\r\n () => this.density() === 'comfortable',\r\n );\r\n protected readonly isIsolated = computed(\r\n () => this.isolated() || this.variant() === 'isolated',\r\n );\r\n protected readonly isFeed = computed(() => this.variant() === 'feed');\n protected readonly isMenu = computed(() => this.variant() === 'menu');\r\n protected readonly isRequest = computed(() => this.variant() === 'request');\r\n protected readonly isProfile = computed(() => this.variant() === 'profile');\n protected readonly isShortcut = computed(() => this.variant() === 'shortcut');\r\n}\r\n","@if (sectionTitle()) {\r\n <h2 class=\"m-list__section-title\" [id]=\"resolvedSectionTitleId()\">\r\n {{ sectionTitle() }}\r\n </h2>\r\n}\r\n\r\n<section\r\n class=\"m-list\"\r\n role=\"list\"\r\n [attr.aria-label]=\"resolvedAriaLabel()\"\r\n [attr.aria-labelledby]=\"sectionTitle() ? resolvedSectionTitleId() : null\"\r\n [class.m-list--card]=\"isCard()\"\r\n [class.m-list--compact]=\"isCompact()\"\r\n [class.m-list--comfortable]=\"isComfortable()\"\r\n [class.m-list--isolated]=\"isIsolated()\"\r\n [class.m-list--feed]=\"isFeed()\"\n [class.m-list--menu]=\"isMenu()\"\r\n [class.m-list--request]=\"isRequest()\"\r\n [class.m-list--profile]=\"isProfile()\"\n [class.m-list--shortcut]=\"isShortcut()\"\r\n [class.m-list--divider-none]=\"divider() === 'none'\"\r\n [class.m-list--divider-full]=\"divider() === 'full'\"\r\n [class.m-list--selectable]=\"selectable()\"\r\n [class.m-list--loading]=\"loading()\"\r\n>\r\n @if (loading()) {\r\n <div class=\"m-list__skeleton\" aria-hidden=\"true\">\r\n <span></span>\r\n <span></span>\r\n <span></span>\r\n </div>\r\n } @else if (empty()) {\r\n <div class=\"m-list__empty\">{{ emptyText() }}</div>\r\n } @else {\r\n <ng-content />\r\n }\r\n</section>\r\n","import {\r\n ChangeDetectionStrategy,\r\n Component,\r\n Directive,\r\n ViewEncapsulation,\r\n contentChild,\r\n} from '@angular/core';\r\n\r\n@Directive({\r\n selector: '[mPageHeader]',\r\n})\r\nexport class MobilePageHeaderSlotDirective {}\r\n\r\n@Directive({\r\n selector: '[mPageContent]',\r\n})\r\nexport class MobilePageContentSlotDirective {}\r\n\r\n@Directive({\r\n selector: '[mPageFooter]',\r\n})\r\nexport class MobilePageFooterSlotDirective {}\r\n\r\n@Component({\r\n selector: 'm-page-layout',\r\n templateUrl: './m-page-layout.html',\r\n styleUrl: './m-page-layout.scss',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n encapsulation: ViewEncapsulation.None,\r\n})\r\nexport class MobilePageLayoutComponent {\r\n protected readonly headerSlot = contentChild(MobilePageHeaderSlotDirective);\r\n protected readonly contentSlot = contentChild(MobilePageContentSlotDirective);\r\n protected readonly footerSlot = contentChild(MobilePageFooterSlotDirective);\r\n}\r\n","<section class=\"mobile-page-layout\">\r\n @if (headerSlot()) {\r\n <header class=\"mobile-page-layout__header\">\r\n <ng-content select=\"[mPageHeader]\" />\r\n </header>\r\n }\r\n\r\n @if (contentSlot()) {\r\n <main class=\"mobile-page-layout__content\">\r\n <ng-content select=\"[mPageContent]\" />\r\n </main>\r\n }\r\n\r\n @if (footerSlot()) {\r\n <footer class=\"mobile-page-layout__footer\">\r\n <ng-content select=\"[mPageFooter]\" />\r\n </footer>\r\n }\r\n</section>\r\n","import {\r\n booleanAttribute,\r\n ChangeDetectionStrategy,\r\n Component,\r\n input,\r\n ViewEncapsulation,\r\n} from '@angular/core';\r\n\r\nfunction coerceContentGap(value: number | string | null | undefined): number | null {\r\n if (value === null || value === undefined || value === '') {\r\n return null;\r\n }\r\n\r\n const gap = typeof value === 'number' ? value : Number(value);\r\n return Number.isFinite(gap) ? gap : null;\r\n}\r\n\r\n@Component({\r\n selector: 'm-toolbar',\r\n template: '<ng-content />',\r\n styleUrl: './m-toolbar.scss',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class MToolbar {}\r\n\r\n@Component({\r\n selector: 'm-content',\r\n template: '<ng-content />',\r\n styleUrl: './m-content.scss',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n host: {\r\n '[style.display]': 'contentDisplay()',\r\n '[style.flex-direction]': 'contentFlexDirection()',\r\n '[style.gap]': 'contentGap()',\r\n '[style.--m-content-padding]': 'padding()',\r\n },\r\n})\r\nexport class MContent {\r\n readonly stack = input(false, { transform: booleanAttribute });\r\n readonly gap = input<number | null, number | string | null | undefined>(null, {\r\n transform: coerceContentGap,\r\n });\r\n readonly padding = input<string | null>(null);\r\n\r\n protected contentDisplay(): string | null {\r\n return this.stack() ? 'flex' : null;\r\n }\r\n\r\n protected contentFlexDirection(): string | null {\r\n return this.stack() ? 'column' : null;\r\n }\r\n\r\n protected contentGap(): string | null {\r\n if (!this.stack()) {\r\n return null;\r\n }\r\n\r\n const gap = this.gap();\r\n return gap === null ? null : `${gap}px`;\r\n }\r\n}\r\n\r\n@Component({\r\n selector: 'm-footer',\r\n template: '<ng-content />',\r\n styleUrl: './m-footer.scss',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class MFooter {}\r\n\r\n@Component({\r\n selector: 'm-page',\r\n templateUrl: './m-page.html',\r\n styleUrl: './m-page.scss',\r\n host: {\r\n '[style.--m-page-padding]': 'padding()',\r\n },\r\n encapsulation: ViewEncapsulation.None,\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class MPage {\r\n readonly padding = input<string | null>(null);\r\n}\r\n\r\nexport {\r\n MobilePageContentSlotDirective as MPageContentSlotDirective,\r\n MobilePageFooterSlotDirective as MPageFooterSlotDirective,\r\n MobilePageHeaderSlotDirective as MPageHeaderSlotDirective,\r\n} from '../m-page-layout/m-page-layout';\r\n","<section class=\"m-page__frame\">\r\n <header class=\"m-page__header\">\r\n <ng-content select=\"m-header,[mPageHeader]\" />\r\n </header>\r\n\r\n <main class=\"m-page__content\">\r\n <ng-content select=\"m-content,[mPageContent]\" />\r\n </main>\r\n\r\n <footer class=\"m-page__footer\">\r\n <ng-content select=\"m-footer,[mPageFooter]\" />\r\n </footer>\r\n\r\n <ng-content />\r\n</section>\r\n","import {\r\n booleanAttribute,\r\n ChangeDetectionStrategy,\r\n Component,\r\n Directive,\r\n input,\r\n ViewEncapsulation,\r\n} from '@angular/core';\r\n\r\nfunction coerceContentGap(value: number | string | null | undefined): number | null {\r\n if (value === null || value === undefined || value === '') {\r\n return null;\r\n }\r\n\r\n const gap = typeof value === 'number' ? value : Number(value);\r\n return Number.isFinite(gap) ? gap : null;\r\n}\r\n\r\n@Directive({\r\n selector: '[pPageHeader]',\r\n})\r\nexport class PPageHeaderSlotDirective {}\r\n\r\n@Directive({\r\n selector: '[pPageSidebar]',\r\n})\r\nexport class PPageSidebarSlotDirective {}\r\n\r\n@Directive({\r\n selector: '[pPageContent]',\r\n})\r\nexport class PPageContentSlotDirective {}\r\n\r\n@Directive({\r\n selector: '[pPageFooter]',\r\n})\r\nexport class PPageFooterSlotDirective {}\r\n\r\n@Component({\r\n selector: 'p-toolbar',\r\n template: '<ng-content />',\r\n styleUrl: './p-toolbar.scss',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class PToolbar {}\r\n\r\n@Component({\r\n selector: 'p-sidebar',\r\n template: '<ng-content />',\r\n styleUrl: './p-sidebar.scss',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class PSidebar {}\r\n\r\n@Component({\r\n selector: 'p-content',\r\n template: '<ng-content />',\r\n styleUrl: './p-content.scss',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n host: {\r\n '[style.display]': 'contentDisplay()',\r\n '[style.flex-direction]': 'contentFlexDirection()',\r\n '[style.gap]': 'contentGap()',\r\n },\r\n})\r\nexport class PContent {\r\n readonly stack = input(false, { transform: booleanAttribute });\r\n readonly gap = input<number | null, number | string | null | undefined>(null, {\r\n transform: coerceContentGap,\r\n });\r\n\r\n protected contentDisplay(): string | null {\r\n return this.stack() ? 'flex' : null;\r\n }\r\n\r\n protected contentFlexDirection(): string | null {\r\n return this.stack() ? 'column' : null;\r\n }\r\n\r\n protected contentGap(): string | null {\r\n if (!this.stack()) {\r\n return null;\r\n }\r\n\r\n const gap = this.gap();\r\n return gap === null ? null : `${gap}px`;\r\n }\r\n}\r\n\r\n@Component({\r\n selector: 'p-footer',\r\n template: '<ng-content />',\r\n styleUrl: './p-footer.scss',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class PFooter {}\r\n\r\n@Component({\r\n selector: 'p-page',\r\n templateUrl: './p-page.html',\r\n styleUrl: './p-page.scss',\r\n encapsulation: ViewEncapsulation.None,\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class PPage {}\r\n","<section class=\"p-page__frame\">\r\n <header class=\"p-page__header\">\r\n <ng-content select=\"p-toolbar,[pPageHeader]\" />\r\n </header>\r\n\r\n <section class=\"p-page__body\">\r\n <aside class=\"p-page__sidebar\">\r\n <ng-content select=\"p-sidebar,[pPageSidebar]\" />\r\n </aside>\r\n\r\n <main class=\"p-page__content\">\r\n <ng-content select=\"p-content,[pPageContent]\" />\r\n </main>\r\n </section>\r\n\r\n <footer class=\"p-page__footer\">\r\n <ng-content select=\"p-footer,[pPageFooter]\" />\r\n </footer>\r\n\r\n <ng-content />\r\n</section>\r\n","import { ChangeDetectionStrategy, Component, input, output } from '@angular/core';\r\n\r\n@Component({\r\n selector: 'm-person-card-mobile-layer',\r\n templateUrl: './person-card-mobile-layer.html',\r\n styleUrl: './m-person-card-layer.scss',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n host: {\r\n class: 'm-person-card-layer--mobile',\r\n '[class.m-person-card-layer--active]': 'active()',\r\n },\r\n})\r\nexport class MPersonCardMobileLayer {\r\n readonly active = input(false);\r\n readonly ariaLabel = input<string | null>(null);\r\n}\r\n\r\n@Component({\r\n selector: 'm-person-card-desktop-layer',\r\n templateUrl: './person-card-desktop-layer.html',\r\n styleUrl: './m-person-card-layer.scss',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n host: {\r\n class: 'm-person-card-layer--desktop',\r\n '[class.m-person-card-layer--active]': 'active()',\r\n },\r\n})\r\nexport class MPersonCardDesktopLayer {\r\n readonly active = input(false);\r\n readonly ariaLabel = input<string | null>(null);\r\n readonly closeAriaLabel = input('关闭人物卡片');\r\n readonly closeRequested = output<void>();\r\n}\r\n","<article\r\n class=\"m-person-card-layer__panel\"\r\n role=\"dialog\"\r\n aria-modal=\"true\"\r\n [attr.aria-label]=\"ariaLabel()\"\r\n (click)=\"$event.stopPropagation()\"\r\n>\r\n <ng-content />\r\n</article>\r\n","<button\r\n class=\"m-person-card-layer__backdrop\"\r\n type=\"button\"\r\n [attr.aria-label]=\"closeAriaLabel()\"\r\n [attr.title]=\"closeAriaLabel()\"\r\n (click)=\"closeRequested.emit()\"\r\n></button>\r\n\r\n<article\r\n class=\"m-person-card-layer__panel\"\r\n role=\"dialog\"\r\n [attr.aria-label]=\"ariaLabel()\"\r\n (click)=\"$event.stopPropagation()\"\r\n>\r\n <ng-content />\r\n</article>\r\n","import {\r\n ChangeDetectionStrategy,\r\n Component,\r\n Directive,\r\n ViewEncapsulation,\r\n input,\r\n} from '@angular/core';\r\n\r\n@Directive({\r\n selector: '[mProductShellRail]',\r\n})\r\nexport class MProductShellRailSlot {}\r\n\r\n@Directive({\r\n selector: '[mProductShellMain]',\r\n})\r\nexport class MProductShellMainSlot {}\r\n\r\n@Directive({\r\n selector: '[mProductShellBottom]',\r\n})\r\nexport class MProductShellBottomSlot {}\r\n\r\n@Component({\r\n selector: 'm-product-shell',\r\n templateUrl: './m-product-shell.html',\r\n styleUrl: './m-product-shell.scss',\r\n encapsulation: ViewEncapsulation.None,\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class MProductShell {\r\n readonly hosted = input(false);\r\n readonly mobile = input(false);\r\n readonly mobileSubpage = input(false);\r\n}\r\n","<section\r\n class=\"m-product-shell\"\r\n [class.m-product-shell--hosted]=\"hosted()\"\r\n [class.m-product-shell--mobile]=\"mobile()\"\r\n [class.m-product-shell--mobile-subpage]=\"mobileSubpage()\"\r\n>\r\n <ng-content select=\"[mProductShellRail]\" />\r\n\r\n <main class=\"m-product-shell__main\">\r\n <ng-content select=\"[mProductShellMain]\" />\r\n </main>\r\n\r\n <footer class=\"m-product-shell__bottom-dock\">\r\n <ng-content select=\"[mProductShellBottom]\" />\r\n </footer>\r\n</section>\r\n","import {\r\n booleanAttribute,\r\n ChangeDetectionStrategy,\r\n Component,\r\n DestroyRef,\r\n computed,\r\n effect,\r\n inject,\r\n input,\r\n model,\r\n output,\r\n signal,\r\n} from '@angular/core';\r\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\r\nimport { FormControl, FormsModule, ReactiveFormsModule } from '@angular/forms';\r\nimport { ChevronLeftIcon, ChevronRightIcon, LucideAngularModule } from 'lucide-angular';\r\nimport { BsSelect, BsSelectOption } from '../s-bs-select/s-bs-select';\r\n\r\ntype PaginationVariant = 'default' | 'compact';\r\nconst DEFAULT_PAGE_SIZE_OPTIONS = [10, 20, 50, 100];\r\n\r\nfunction coerceTotalItems(value: number | string): number {\r\n return Number(value) || 0;\r\n}\r\n\r\nfunction coerceMaxVisiblePages(value: number | string): number {\r\n return Number(value) || 7;\r\n}\r\n\r\nfunction coercePaginationVariant(value: PaginationVariant | string): PaginationVariant {\r\n return value === 'compact' ? 'compact' : 'default';\r\n}\r\n\r\n@Component({\r\n selector: 's-pagination',\r\n imports: [FormsModule, ReactiveFormsModule, BsSelect, LucideAngularModule],\r\n templateUrl: './s-pagination.html',\r\n styleUrl: './s-pagination.scss',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class Pagination {\r\n private readonly destroyRef = inject(DestroyRef);\r\n\r\n currentPage = model(1);\r\n\r\n readonly pageSizeOptions = input<number[]>(DEFAULT_PAGE_SIZE_OPTIONS);\r\n readonly totalItems = input(0, { transform: coerceTotalItems });\r\n readonly maxVisiblePages = input(7, { transform: coerceMaxVisiblePages });\r\n readonly disabled = input(false, { transform: booleanAttribute });\r\n readonly variant = input<PaginationVariant, PaginationVariant | string>('default', {\r\n transform: coercePaginationVariant,\r\n });\r\n readonly showSizeChanger = input(true, { transform: booleanAttribute });\r\n readonly showQuickJumper = input(false, { transform: booleanAttribute });\r\n\r\n readonly pageSizeControl = new FormControl<number | null>(DEFAULT_PAGE_SIZE_OPTIONS[0]);\r\n readonly quickJumpControl = new FormControl<string>('', { nonNullable: true });\r\n private readonly selectedPageSize = signal(DEFAULT_PAGE_SIZE_OPTIONS[0]);\r\n\r\n readonly pageChange = output<number>();\r\n readonly pageSizeChange = output<number>();\r\n\r\n protected readonly prevIcon = ChevronLeftIcon;\r\n protected readonly nextIcon = ChevronRightIcon;\r\n\r\n readonly totalPages = computed(() => {\r\n const size = this.selectedPageSize();\r\n const total = Math.ceil(this.totalItems() / size);\r\n return total > 0 ? total : 0;\r\n });\r\n\r\n readonly pages = computed(() => {\r\n const total = this.totalPages();\r\n const current = this.currentPage();\r\n const maxPages = Math.max(this.maxVisiblePages(), 5);\r\n const result: Array<number | string> = [];\r\n\r\n if (total <= maxPages) {\r\n for (let page = 1; page <= total; page += 1) {\r\n result.push(page);\r\n }\r\n return result;\r\n }\r\n\r\n result.push(1);\r\n const middleCount = maxPages - 2;\r\n let start = current - Math.floor(middleCount / 2);\r\n let end = current + Math.floor(middleCount / 2);\r\n\r\n if (start < 2) {\r\n start = 2;\r\n end = start + middleCount - 1;\r\n }\r\n\r\n if (end > total - 1) {\r\n end = total - 1;\r\n start = end - middleCount + 1;\r\n }\r\n\r\n if (start > 2) {\r\n result.push('...');\r\n }\r\n\r\n for (let page = start; page <= end; page += 1) {\r\n result.push(page);\r\n }\r\n\r\n if (end < total - 1) {\r\n result.push('...');\r\n }\r\n\r\n result.push(total);\r\n return result;\r\n });\r\n\r\n readonly isCompact = computed(() => this.variant() === 'compact');\r\n readonly canGoPrev = computed(() => !this.disabled() && this.currentPage() > 1);\r\n readonly canGoNext = computed(\r\n () => !this.disabled() && this.currentPage() < this.totalPages(),\r\n );\r\n readonly pageSizeSelectOptions = computed<BsSelectOption<number>[]>(() =>\r\n this.pageSizeOptions().map((size) => ({\r\n label: `${size} 条/页`,\r\n value: size,\r\n })),\r\n );\r\n\r\n constructor() {\r\n this.pageSizeControl.valueChanges.pipe(takeUntilDestroyed(this.destroyRef)).subscribe((value) => {\r\n const nextSize = Number(value) || this.pageSizeOptions()[0] || DEFAULT_PAGE_SIZE_OPTIONS[0];\r\n this.selectedPageSize.set(nextSize);\r\n this.pageSizeChange.emit(nextSize);\r\n this.currentPage.set(1);\r\n this.pageChange.emit(1);\r\n this.quickJumpControl.setValue('');\r\n });\r\n\r\n effect(() => {\r\n this.syncControlDisabledState(this.disabled());\r\n });\r\n\r\n effect(() => {\r\n const totalPages = this.totalPages();\r\n const currentPage = this.currentPage();\r\n\r\n if (totalPages === 0 && currentPage !== 1) {\r\n this.currentPage.set(1);\r\n return;\r\n }\r\n\r\n if (totalPages > 0 && currentPage > totalPages) {\r\n this.currentPage.set(totalPages);\r\n }\r\n });\r\n }\r\n\r\n goToPage(page: number | string): void {\r\n if (this.disabled() || typeof page !== 'number' || page === this.currentPage()) {\r\n return;\r\n }\r\n\r\n this.currentPage.set(page);\r\n this.pageChange.emit(page);\r\n this.quickJumpControl.setValue('');\r\n }\r\n\r\n prevPage(): void {\r\n if (!this.canGoPrev()) {\r\n return;\r\n }\r\n\r\n this.currentPage.update((value) => value - 1);\r\n this.pageChange.emit(this.currentPage());\r\n this.quickJumpControl.setValue('');\r\n }\r\n\r\n nextPage(): void {\r\n if (!this.canGoNext()) {\r\n return;\r\n }\r\n\r\n this.currentPage.update((value) => value + 1);\r\n this.pageChange.emit(this.currentPage());\r\n this.quickJumpControl.setValue('');\r\n }\r\n\r\n quickJump(): void {\r\n if (this.disabled()) {\r\n return;\r\n }\r\n\r\n const value = Number.parseInt(this.quickJumpControl.value, 10);\r\n\r\n if (Number.isNaN(value)) {\r\n this.quickJumpControl.setValue('');\r\n return;\r\n }\r\n\r\n const totalPages = this.totalPages();\r\n const nextPage = Math.min(Math.max(value, 1), totalPages || 1);\r\n this.goToPage(nextPage);\r\n }\r\n\r\n trackPage(index: number, page: number | string): number | string {\r\n return typeof page === 'number' ? page : `${page}-${index}`;\r\n }\r\n\r\n private syncControlDisabledState(disabled: boolean): void {\r\n if (disabled) {\r\n this.pageSizeControl.disable({ emitEvent: false });\r\n this.quickJumpControl.disable({ emitEvent: false });\r\n return;\r\n }\r\n\r\n this.pageSizeControl.enable({ emitEvent: false });\r\n this.quickJumpControl.enable({ emitEvent: false });\r\n }\r\n}\r\n","<div class=\"pagination-bar\" [class.pagination-bar--compact]=\"isCompact()\">\r\n <div class=\"pagination-controls\">\r\n <div class=\"pagination-total\">共 {{ totalItems() }} 条</div>\r\n <button\r\n type=\"button\"\r\n class=\"pagination-nav-btn pagination-nav-btn--prev\"\r\n [class.pagination-nav-btn--compact]=\"isCompact()\"\r\n [disabled]=\"!canGoPrev()\"\r\n (click)=\"prevPage()\"\r\n aria-label=\"上一页\"\r\n >\r\n <lucide-icon [img]=\"prevIcon\" [size]=\"16\" [strokeWidth]=\"2\" aria-hidden=\"true\"></lucide-icon>\r\n </button>\r\n @for (page of pages(); track trackPage($index, page)) {\r\n @if (page === '...') {\r\n <span class=\"pagination-ellipsis\" [class.pagination-ellipsis--compact]=\"isCompact()\">...</span>\r\n } @else {\r\n <button\r\n type=\"button\"\r\n class=\"pagination-page-btn\"\r\n [class.pagination-page-btn--compact]=\"isCompact()\"\r\n [class.pagination-page-btn--active]=\"page === currentPage()\"\r\n [disabled]=\"disabled()\"\r\n (click)=\"goToPage(page)\"\r\n >\r\n {{ page }}\r\n </button>\r\n }\r\n }\r\n <button\r\n type=\"button\"\r\n class=\"pagination-nav-btn\"\r\n [class.pagination-nav-btn--compact]=\"isCompact()\"\r\n [disabled]=\"!canGoNext()\"\r\n (click)=\"nextPage()\"\r\n aria-label=\"下一页\"\r\n >\r\n <lucide-icon [img]=\"nextIcon\" [size]=\"16\" [strokeWidth]=\"2\" aria-hidden=\"true\"></lucide-icon>\r\n </button>\r\n @if (showSizeChanger()) {\r\n <div class=\"pagination-size\" [class.pagination-size--compact]=\"isCompact()\">\r\n <s-select\r\n class=\"pagination-size-select\"\r\n [options]=\"pageSizeSelectOptions()\"\r\n [formControl]=\"pageSizeControl\"\r\n placeholder=\"条数/页\"\r\n ariaLabel=\"每页条数\"\r\n [matchTriggerWidth]=\"false\"\r\n />\r\n </div>\r\n }\r\n @if (showQuickJumper()) {\r\n <label class=\"pagination-jumper\" [class.pagination-jumper--compact]=\"isCompact()\">\r\n <span class=\"pagination-jumper__label\">跳至</span>\r\n <input\r\n type=\"number\"\r\n min=\"1\"\r\n class=\"pagination-jumper__input\"\r\n [formControl]=\"quickJumpControl\"\r\n (blur)=\"quickJump()\"\r\n (keydown.enter)=\"quickJump()\"\r\n />\r\n <span class=\"pagination-jumper__suffix\">页</span>\r\n </label>\r\n }\r\n </div>\r\n</div>\r\n","import { ChangeDetectionStrategy, Component, inject, input, output } from '@angular/core';\r\nimport { Router } from '@angular/router';\r\nimport { LucideAngularModule, type LucideIconData } from 'lucide-angular';\r\n\r\nimport type { MTabItem } from '../m-tabs/m-tabs';\r\n\r\nexport interface MRailNavItem extends MTabItem {\r\n readonly badge?: number | string | null;\r\n readonly route?: string | null;\r\n}\r\n\r\n@Component({\r\n selector: 'm-rail-nav',\r\n imports: [LucideAngularModule],\r\n templateUrl: './m-rail-nav.html',\r\n styleUrl: './m-rail-nav.scss',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class MRailNav {\r\n private readonly router = inject(Router, { optional: true });\r\n\r\n readonly ariaLabel = input('应用导航');\r\n readonly actionAriaLabel = input('更多菜单');\r\n readonly actionIcon = input<LucideIconData | null>(null);\r\n readonly items = input<readonly MRailNavItem[]>([]);\r\n readonly selectedItemId = input<string | number | null>(null);\r\n\r\n readonly actionSelected = output<void>();\r\n readonly itemSelected = output<MRailNavItem>();\r\n\r\n protected onSelect(item: MRailNavItem): void {\r\n if (item.disabled) {\r\n return;\r\n }\r\n\r\n this.itemSelected.emit(item);\r\n if (item.route) {\r\n void this.router?.navigateByUrl(item.route);\r\n }\r\n }\r\n\r\n protected trackByItemId(_index: number, item: MRailNavItem): string | number {\r\n return item.id;\r\n }\r\n}\r\n","<nav class=\"m-rail-nav\" [attr.aria-label]=\"ariaLabel()\">\r\n <div class=\"m-rail-nav__list\">\r\n @for (item of items(); track trackByItemId($index, item)) {\r\n <button\r\n type=\"button\"\r\n class=\"m-rail-nav__item\"\r\n [class.m-rail-nav__item--active]=\"selectedItemId() === item.id\"\r\n [attr.aria-current]=\"selectedItemId() === item.id ? 'page' : null\"\r\n [attr.aria-label]=\"item.label\"\r\n [attr.title]=\"item.label\"\r\n [disabled]=\"item.disabled\"\r\n (click)=\"onSelect(item)\"\r\n >\r\n <span class=\"m-rail-nav__icon\">\r\n @if (item.icon; as icon) {\r\n <lucide-icon [img]=\"icon\" [size]=\"22\" aria-hidden=\"true\" />\r\n }\r\n @if (item.badge) {\r\n <span class=\"m-rail-nav__badge\">{{ item.badge }}</span>\r\n }\r\n </span>\r\n <span>{{ item.label }}</span>\r\n </button>\r\n }\r\n </div>\r\n\r\n @if (actionIcon(); as icon) {\r\n <button\r\n type=\"button\"\r\n class=\"m-rail-nav__action\"\r\n [attr.title]=\"actionAriaLabel()\"\r\n [attr.aria-label]=\"actionAriaLabel()\"\r\n (click)=\"actionSelected.emit()\"\r\n >\r\n <lucide-icon [img]=\"icon\" [size]=\"22\" aria-hidden=\"true\" />\r\n </button>\r\n }\r\n</nav>\r\n","import { ChangeDetectionStrategy, Component, input } from '@angular/core';\r\n\r\n@Component({\r\n selector: 's-route-placeholder-page',\r\n template: `\r\n <section class=\"route-placeholder\">\r\n <div class=\"route-placeholder__card\">\r\n <strong>{{ title() }}</strong>\r\n <p>当前页面路由已接入,内容页待实现。</p>\r\n </div>\r\n </section>\r\n `,\r\n styles: `\r\n :host {\r\n display: block;\r\n height: 100%;\r\n min-height: 100%;\r\n }\r\n\r\n .route-placeholder {\r\n display: grid;\r\n height: 100%;\r\n min-height: 100%;\r\n place-items: center;\r\n }\r\n\r\n .route-placeholder__card {\r\n width: min(100%, 420px);\r\n padding: 28px 24px;\r\n border-radius: 24px;\r\n background: rgba(255, 255, 255, 0.94);\r\n box-shadow: 0 10px 30px rgba(15, 23, 42, 0.08);\r\n text-align: center;\r\n }\r\n\r\n .route-placeholder__card strong {\r\n display: block;\r\n margin-bottom: 8px;\r\n color: #1f2b46;\r\n font-size: 22px;\r\n font-weight: 800;\r\n }\r\n\r\n .route-placeholder__card p {\r\n margin: 0;\r\n color: #667085;\r\n font-size: 14px;\r\n line-height: 1.6;\r\n }\r\n `,\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class RoutePlaceholderPageComponent {\r\n readonly title = input.required<string>();\r\n}\r\n","import { ChangeDetectionStrategy, Component, computed, input, model, output, signal } from '@angular/core';\r\nimport { LucideAngularModule, ChevronDownIcon } from 'lucide-angular';\r\nimport type { LucideIconData } from 'lucide-angular';\r\n\r\nexport interface SectionNavItem {\r\n id: string | number;\r\n label: string;\r\n disabled?: boolean;\r\n meta?: Record<string, unknown>;\r\n}\r\n\r\nexport interface SectionNavGroup {\r\n id: string | number;\r\n label: string;\r\n icon?: LucideIconData;\r\n items: readonly SectionNavItem[];\r\n collapsible?: boolean;\r\n}\r\n\r\nexport interface SectionNavSelectChange {\r\n group: SectionNavGroup;\r\n item: SectionNavItem;\r\n}\r\n\r\nexport interface SectionNavToggleChange {\r\n group: SectionNavGroup;\r\n expanded: boolean;\r\n}\r\n\r\n@Component({\r\n selector: 's-section-nav',\r\n imports: [LucideAngularModule],\r\n templateUrl: './s-section-nav.html',\r\n styleUrl: './s-section-nav.scss',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class SectionNav {\r\n private readonly expandedStateTouched = signal(false);\r\n\r\n readonly groups = input<readonly SectionNavGroup[]>([]);\r\n readonly ariaLabel = input('分组导航');\r\n readonly selectedItemId = model<string | number | null>(null);\r\n readonly expandedGroupIds = model<readonly (string | number)[]>([]);\r\n readonly expandAllByDefault = input(true);\r\n\r\n readonly itemSelected = output<SectionNavSelectChange>();\r\n readonly groupToggled = output<SectionNavToggleChange>();\r\n\r\n protected readonly chevronIcon = ChevronDownIcon;\r\n protected readonly resolvedExpandedGroupIds = computed(() => {\r\n const expandedGroupIds = this.expandedGroupIds();\r\n if (this.expandedStateTouched() || expandedGroupIds.length || !this.expandAllByDefault()) {\r\n return expandedGroupIds;\r\n }\r\n\r\n return this.groups()\r\n .filter((group) => group.collapsible !== false)\r\n .map((group) => group.id);\r\n });\r\n\r\n protected isExpanded(group: SectionNavGroup): boolean {\r\n return group.collapsible === false || this.resolvedExpandedGroupIds().includes(group.id);\r\n }\r\n\r\n protected isSelected(item: SectionNavItem): boolean {\r\n return this.selectedItemId() === item.id;\r\n }\r\n\r\n protected toggleGroup(group: SectionNavGroup): void {\r\n if (group.collapsible === false) {\r\n return;\r\n }\r\n\r\n const expanded = !this.isExpanded(group);\r\n const currentIds = this.resolvedExpandedGroupIds();\r\n const nextIds = expanded\r\n ? [...currentIds, group.id]\r\n : currentIds.filter((groupId) => groupId !== group.id);\r\n\r\n this.expandedStateTouched.set(true);\r\n this.expandedGroupIds.set(nextIds);\r\n this.groupToggled.emit({ group, expanded });\r\n }\r\n\r\n protected selectItem(group: SectionNavGroup, item: SectionNavItem): void {\r\n if (item.disabled) {\r\n return;\r\n }\r\n\r\n this.selectedItemId.set(item.id);\r\n this.itemSelected.emit({ group, item });\r\n }\r\n\r\n protected trackByGroupId(_index: number, group: SectionNavGroup): string | number {\r\n return group.id;\r\n }\r\n\r\n protected trackByItemId(_index: number, item: SectionNavItem): string | number {\r\n return item.id;\r\n }\r\n}\r\n","<nav class=\"section-nav\" [attr.aria-label]=\"ariaLabel()\">\r\n <ul class=\"section-nav__groups\">\r\n @for (group of groups(); track trackByGroupId($index, group)) {\r\n <li class=\"section-nav__group\">\r\n @if (group.collapsible !== false) {\r\n <button\r\n type=\"button\"\r\n class=\"section-nav__group-trigger\"\r\n [attr.aria-expanded]=\"isExpanded(group)\"\r\n (click)=\"toggleGroup(group)\"\r\n >\r\n <span class=\"section-nav__group-title-wrap\">\r\n @if (group.icon; as icon) {\r\n <lucide-icon\r\n class=\"section-nav__group-icon\"\r\n [img]=\"icon\"\r\n [size]=\"18\"\r\n [strokeWidth]=\"1.85\"\r\n aria-hidden=\"true\"\r\n />\r\n }\r\n <span class=\"section-nav__group-title\">{{ group.label }}</span>\r\n </span>\r\n\r\n <lucide-icon\r\n class=\"section-nav__chevron\"\r\n [class.section-nav__chevron--expanded]=\"isExpanded(group)\"\r\n [img]=\"chevronIcon\"\r\n [size]=\"16\"\r\n [strokeWidth]=\"2\"\r\n aria-hidden=\"true\"\r\n />\r\n </button>\r\n } @else {\r\n <div class=\"section-nav__group-trigger section-nav__group-trigger--static\">\r\n <span class=\"section-nav__group-title-wrap\">\r\n @if (group.icon; as icon) {\r\n <lucide-icon\r\n class=\"section-nav__group-icon\"\r\n [img]=\"icon\"\r\n [size]=\"18\"\r\n [strokeWidth]=\"1.85\"\r\n aria-hidden=\"true\"\r\n />\r\n }\r\n <span class=\"section-nav__group-title\">{{ group.label }}</span>\r\n </span>\r\n </div>\r\n }\r\n\r\n <div\r\n class=\"section-nav__items-wrap\"\r\n [class.section-nav__items-wrap--expanded]=\"isExpanded(group)\"\r\n [attr.aria-hidden]=\"!isExpanded(group)\"\r\n >\r\n <ul class=\"section-nav__items\">\r\n @for (item of group.items; track trackByItemId($index, item)) {\r\n <li class=\"section-nav__item\">\r\n <button\r\n type=\"button\"\r\n class=\"section-nav__item-button\"\r\n [class.section-nav__item-button--selected]=\"isSelected(item)\"\r\n [disabled]=\"item.disabled\"\r\n [attr.tabindex]=\"isExpanded(group) ? null : -1\"\r\n [attr.aria-current]=\"isSelected(item) ? 'page' : null\"\r\n (click)=\"selectItem(group, item)\"\r\n >\r\n {{ item.label }}\r\n </button>\r\n </li>\r\n }\r\n </ul>\r\n </div>\r\n </li>\r\n }\r\n </ul>\r\n</nav>\r\n","import { ChangeDetectionStrategy, Component, computed, effect, input, model, output } from '@angular/core';\r\n\r\nexport interface SegmentedOption {\r\n id: string;\r\n label: string;\r\n disabled?: boolean;\r\n}\r\n\r\nexport interface SegmentedSelectEvent {\r\n option: SegmentedOption;\r\n}\r\n\r\n@Component({\r\n selector: 's-segmented',\r\n templateUrl: './s-segmented.html',\r\n styleUrl: './s-segmented.scss',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class Segmented {\r\n readonly options = input<readonly SegmentedOption[]>([]);\r\n readonly ariaLabel = input('分段器');\r\n readonly disabled = input(false);\r\n readonly selectedId = model<string | null>(null);\r\n readonly optionSelected = output<SegmentedSelectEvent>();\r\n\r\n protected readonly hasOptions = computed(() => this.options().length > 0);\r\n\r\n constructor() {\r\n effect(() => {\r\n const options = this.options();\r\n const current = this.selectedId();\r\n const firstEnabled = options.find((option) => !option.disabled)?.id ?? null;\r\n\r\n if (!options.length) {\r\n if (current !== null) {\r\n this.selectedId.set(null);\r\n }\r\n return;\r\n }\r\n\r\n if (current === null) {\r\n this.selectedId.set(firstEnabled);\r\n return;\r\n }\r\n\r\n const selectedOption = options.find((option) => option.id === current);\r\n if (!selectedOption || selectedOption.disabled) {\r\n this.selectedId.set(firstEnabled);\r\n }\r\n });\r\n }\r\n\r\n protected isSelected(optionId: string): boolean {\r\n return this.selectedId() === optionId;\r\n }\r\n\r\n protected onSelect(option: SegmentedOption): void {\r\n if (this.disabled() || option.disabled || this.selectedId() === option.id) {\r\n return;\r\n }\r\n\r\n this.selectedId.set(option.id);\r\n this.optionSelected.emit({ option });\r\n }\r\n\r\n protected trackByOptionId(_index: number, option: SegmentedOption): string {\r\n return option.id;\r\n }\r\n}\r\n","@if (hasOptions()) {\r\n <div class=\"segmented\" role=\"tablist\" [attr.aria-label]=\"ariaLabel()\">\r\n @for (option of options(); track trackByOptionId($index, option)) {\r\n <button\r\n type=\"button\"\r\n role=\"tab\"\r\n class=\"segmented__item\"\r\n [class.segmented__item--selected]=\"isSelected(option.id)\"\r\n [disabled]=\"disabled() || option.disabled\"\r\n [attr.aria-selected]=\"isSelected(option.id)\"\r\n (click)=\"onSelect(option)\"\r\n >\r\n {{ option.label }}\r\n </button>\r\n }\r\n </div>\r\n}\r\n","import { ChangeDetectionStrategy, Component, input, model } from '@angular/core';\r\nimport { LucideAngularModule, SearchIcon } from 'lucide-angular';\r\nimport { PlatformInputDirective } from '../../directives';\r\n\r\nexport type PlatformSearchAppearance = 'default' | 'soft' | 'topbar';\n\r\n@Component({\r\n selector: 's-search',\r\n imports: [LucideAngularModule, PlatformInputDirective],\r\n templateUrl: './s-search.html',\r\n styleUrl: './s-search.scss',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class PlatformSearchComponent {\r\n readonly keyword = model('');\r\n readonly placeholder = input('搜索');\r\n readonly ariaLabel = input('搜索');\r\n readonly appearance = input<PlatformSearchAppearance>('default');\r\n\r\n protected readonly searchIcon = SearchIcon;\r\n\r\n protected updateKeyword(event: Event): void {\r\n const target = event.target;\r\n if (target instanceof HTMLInputElement) {\r\n this.keyword.set(target.value);\r\n }\r\n }\r\n}\r\n","<label\n class=\"search\"\n [class.search--soft]=\"appearance() === 'soft'\"\n [class.search--topbar]=\"appearance() === 'topbar'\"\n [attr.aria-label]=\"ariaLabel()\"\n>\n <lucide-icon class=\"search__icon\" aria-hidden=\"true\" [img]=\"searchIcon\" [size]=\"16\" [strokeWidth]=\"1.9\" />\r\n <input\r\n pInput\r\n size=\"md\"\r\n variant=\"bare\"\r\n type=\"search\"\r\n [value]=\"keyword()\"\r\n (input)=\"updateKeyword($event)\"\r\n [placeholder]=\"placeholder()\"\r\n />\r\n</label>\r\n","import { ChangeDetectionStrategy, Component, computed, input, model, output } from '@angular/core';\r\nimport {\r\n ChevronLeftIcon,\r\n CircleXIcon,\r\n LucideAngularModule,\r\n SearchIcon,\r\n} from 'lucide-angular';\r\n\r\nexport interface SearchBarSubmitEvent {\r\n value: string;\r\n}\r\n\r\n@Component({\r\n selector: 'm-search-bar',\r\n imports: [LucideAngularModule],\r\n templateUrl: './m-search-bar.html',\r\n styleUrl: './m-search-bar.scss',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class SearchBar {\r\n readonly value = model('');\r\n readonly placeholder = input('搜索');\r\n readonly ariaLabel = input('搜索');\r\n readonly cancelText = input('取消');\r\n readonly showCancel = input(false);\r\n readonly showBack = input(false);\r\n readonly autofocus = input(false);\r\n readonly disabled = input(false);\r\n\r\n readonly backClicked = output<void>();\r\n readonly cancelClicked = output<void>();\r\n readonly cleared = output<void>();\r\n readonly submitted = output<SearchBarSubmitEvent>();\r\n\r\n protected readonly searchIcon = SearchIcon;\r\n protected readonly backIcon = ChevronLeftIcon;\r\n protected readonly clearIcon = CircleXIcon;\r\n protected readonly hasValue = computed(() => this.value().length > 0);\r\n\r\n protected updateValue(event: Event): void {\r\n const target = event.target;\r\n if (target instanceof HTMLInputElement) {\r\n this.value.set(target.value);\r\n }\r\n }\r\n\r\n protected clearValue(): void {\r\n if (this.disabled()) {\r\n return;\r\n }\r\n\r\n this.value.set('');\r\n this.cleared.emit();\r\n }\r\n\r\n protected onBackClick(): void {\r\n this.backClicked.emit();\r\n }\r\n\r\n protected onCancelClick(): void {\r\n this.cancelClicked.emit();\r\n }\r\n\r\n protected onSubmit(): void {\r\n this.submitted.emit({ value: this.value() });\r\n }\r\n}\r\n","<form class=\"search-bar\" [class.search-bar--with-back]=\"showBack()\" (submit)=\"onSubmit(); $event.preventDefault()\">\r\n @if (showBack()) {\r\n <button type=\"button\" class=\"search-bar__back\" aria-label=\"返回\" (click)=\"onBackClick()\">\r\n <i-lucide [img]=\"backIcon\" class=\"search-bar__back-icon\" aria-hidden=\"true\" />\r\n </button>\r\n }\r\n\r\n <label class=\"search-bar__field\" [attr.aria-label]=\"ariaLabel()\">\r\n <i-lucide [img]=\"searchIcon\" class=\"search-bar__search-icon\" aria-hidden=\"true\" />\r\n <input\r\n type=\"search\"\r\n class=\"search-bar__input\"\r\n [value]=\"value()\"\r\n [placeholder]=\"placeholder()\"\r\n [disabled]=\"disabled()\"\r\n [autofocus]=\"autofocus()\"\r\n enterkeyhint=\"search\"\r\n (input)=\"updateValue($event)\"\r\n />\r\n @if (hasValue()) {\r\n <button type=\"button\" class=\"search-bar__clear\" aria-label=\"清空搜索内容\" (click)=\"clearValue()\">\r\n <i-lucide [img]=\"clearIcon\" class=\"search-bar__clear-icon\" aria-hidden=\"true\" />\r\n </button>\r\n }\r\n </label>\r\n\r\n @if (showCancel()) {\r\n <button type=\"button\" class=\"search-bar__cancel\" (click)=\"onCancelClick()\">\r\n {{ cancelText() }}\r\n </button>\r\n }\r\n</form>\r\n","import { ChangeDetectionStrategy, Component, computed, input } from '@angular/core';\r\n\r\nexport type StatusDotStatus = 'success' | 'error' | 'default' | 'processing' | 'warning';\r\nexport type StatusDotSize = 'sm' | 'md';\r\n\r\n@Component({\r\n selector: 's-status-dot',\r\n templateUrl: './s-status-dot.html',\r\n styleUrl: './s-status-dot.scss',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class StatusDot {\r\n readonly status = input<StatusDotStatus>('default');\r\n readonly label = input('');\r\n readonly size = input<StatusDotSize>('md');\r\n readonly ariaLabel = input('');\r\n\r\n protected readonly resolvedAriaLabel = computed(() => this.ariaLabel() || this.label() || this.status());\r\n}\r\n","<span\r\n class=\"status-dot\"\r\n [class.status-dot--sm]=\"size() === 'sm'\"\r\n [class.status-dot--success]=\"status() === 'success'\"\r\n [class.status-dot--error]=\"status() === 'error'\"\r\n [class.status-dot--default]=\"status() === 'default'\"\r\n [class.status-dot--processing]=\"status() === 'processing'\"\r\n [class.status-dot--warning]=\"status() === 'warning'\"\r\n [attr.aria-label]=\"resolvedAriaLabel()\"\r\n>\r\n <span class=\"status-dot__dot\" aria-hidden=\"true\"></span>\r\n\r\n @if (label()) {\r\n <span class=\"status-dot__label\">{{ label() }}</span>\r\n }\r\n</span>\r\n","import { ChangeDetectionStrategy, Component, computed, input } from '@angular/core';\r\nimport { LucideAngularModule, type LucideIconData } from 'lucide-angular';\r\n\r\nexport type StepStatus = 'wait' | 'process' | 'finish' | 'error';\r\nexport type StepsVariant = 'default' | 'dot' | 'navigation';\r\nexport type StepsOrientation = 'horizontal' | 'vertical';\r\nexport type StepsSize = 'default' | 'small';\r\n\r\nexport interface StepItem {\r\n id: string;\r\n title: string;\r\n description?: string;\r\n status?: StepStatus;\r\n icon?: LucideIconData;\r\n}\r\n\r\n@Component({\r\n selector: 's-steps',\r\n imports: [LucideAngularModule],\r\n templateUrl: './s-steps.html',\r\n styleUrl: './s-steps.scss',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class Steps {\r\n readonly items = input<readonly StepItem[]>([]);\r\n readonly current = input(0);\r\n readonly variant = input<StepsVariant>('default');\r\n readonly orientation = input<StepsOrientation>('horizontal');\r\n readonly size = input<StepsSize>('default');\r\n readonly ariaLabel = input('步骤条');\r\n\r\n protected readonly normalizedItems = computed(() =>\r\n this.items().map((item, index, items) => ({\r\n ...item,\r\n index,\r\n status: this.resolveStatus(item, index),\r\n isLast: index === items.length - 1,\r\n })),\r\n );\r\n\r\n protected isDefault(): boolean {\r\n return this.variant() === 'default';\r\n }\r\n\r\n protected isDot(): boolean {\r\n return this.variant() === 'dot';\r\n }\r\n\r\n protected isNavigation(): boolean {\r\n return this.variant() === 'navigation';\r\n }\r\n\r\n protected isVertical(): boolean {\r\n return this.orientation() === 'vertical';\r\n }\r\n\r\n protected isSmall(): boolean {\r\n return this.size() === 'small';\r\n }\r\n\r\n protected trackById(_index: number, item: StepItem): string {\r\n return item.id;\r\n }\r\n\r\n private resolveStatus(item: StepItem, index: number): StepStatus {\r\n if (item.status) {\r\n return item.status;\r\n }\r\n\r\n const current = this.current();\r\n if (index < current) {\r\n return 'finish';\r\n }\r\n if (index === current) {\r\n return 'process';\r\n }\r\n return 'wait';\r\n }\r\n}\r\n","@if (normalizedItems().length) {\r\n <ol\r\n class=\"steps\"\r\n [class.steps--vertical]=\"isVertical()\"\r\n [class.steps--dot]=\"isDot()\"\r\n [class.steps--navigation]=\"isNavigation()\"\r\n [class.steps--small]=\"isSmall()\"\r\n [attr.aria-label]=\"ariaLabel()\"\r\n >\r\n @for (item of normalizedItems(); track trackById($index, item)) {\r\n <li\r\n class=\"steps__item\"\r\n [class.steps__item--finish]=\"item.status === 'finish'\"\r\n [class.steps__item--process]=\"item.status === 'process'\"\r\n [class.steps__item--wait]=\"item.status === 'wait'\"\r\n [class.steps__item--error]=\"item.status === 'error'\"\r\n [class.steps__item--icon]=\"item.icon\"\r\n [class.steps__item--last]=\"item.isLast\"\r\n >\r\n @if (!isNavigation()) {\r\n <div class=\"steps__head\">\r\n @if (isDot()) {\r\n <span class=\"steps__dot\"></span>\r\n } @else if (item.icon; as icon) {\r\n <span class=\"steps__icon-wrap\">\r\n <lucide-icon [img]=\"icon\" [size]=\"16\" [strokeWidth]=\"1.85\" aria-hidden=\"true\" />\r\n </span>\r\n } @else if (item.status === 'finish') {\r\n <span class=\"steps__circle\">\r\n <span class=\"steps__check\" aria-hidden=\"true\"></span>\r\n </span>\r\n } @else if (item.status === 'error') {\r\n <span class=\"steps__circle\">\r\n <span class=\"steps__cross\" aria-hidden=\"true\"></span>\r\n </span>\r\n } @else {\r\n <span class=\"steps__circle\">{{ item.index + 1 }}</span>\r\n }\r\n </div>\r\n }\r\n\r\n <div class=\"steps__content\">\r\n <div class=\"steps__title-row\">\r\n <span class=\"steps__title\">{{ item.title }}</span>\r\n @if (!isNavigation() && !isVertical() && !item.isLast) {\r\n <div class=\"steps__tail\" aria-hidden=\"true\"></div>\r\n }\r\n @if (isNavigation() && !item.isLast) {\r\n <span class=\"steps__nav-separator\" aria-hidden=\"true\"></span>\r\n }\r\n </div>\r\n @if (item.description) {\r\n <div class=\"steps__description\">{{ item.description }}</div>\r\n }\r\n </div>\r\n\r\n @if (!isNavigation() && isVertical() && !item.isLast) {\r\n <div class=\"steps__tail\" aria-hidden=\"true\"></div>\r\n }\r\n </li>\r\n }\r\n </ol>\r\n}\r\n","import {\r\n AfterViewInit,\r\n ChangeDetectionStrategy,\r\n Component,\r\n DestroyRef,\r\n ElementRef,\r\n computed,\r\n effect,\r\n inject,\r\n input,\r\n model,\r\n output,\r\n signal,\r\n viewChild,\r\n} from '@angular/core';\r\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\r\nimport { LucideAngularModule, EllipsisIcon, ChevronLeftIcon, ChevronRightIcon } from 'lucide-angular';\r\nimport { fromEvent } from 'rxjs';\r\n\r\nexport type TabsVariant = 'contained' | 'line';\r\n\r\nexport interface TabItem {\r\n id: string;\r\n label: string;\r\n disabled?: boolean;\r\n}\r\n\r\nexport interface TabChangeEvent {\r\n item: TabItem;\r\n}\r\n\r\n@Component({\r\n selector: 's-tabs',\r\n imports: [LucideAngularModule],\r\n templateUrl: './s-tabs.html',\r\n styleUrl: './s-tabs.scss',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n host: {\r\n '(document:click)': 'onDocumentClick($event)',\r\n },\r\n})\r\nexport class Tabs implements AfterViewInit {\r\n private readonly destroyRef = inject(DestroyRef);\r\n private readonly hostElement = inject(ElementRef<HTMLElement>);\r\n\r\n readonly tabs = input<readonly TabItem[]>([]);\r\n readonly variant = input<TabsVariant>('contained');\r\n readonly showOverflowActions = input(true);\r\n readonly ariaLabel = input('标签页');\r\n readonly activeId = model<string | null>(null);\r\n readonly tabChanged = output<TabChangeEvent>();\r\n\r\n protected readonly scrollContainer =\r\n viewChild<ElementRef<HTMLElement>>('scrollContainer');\r\n\r\n protected readonly canScrollPrev = signal(false);\r\n protected readonly canScrollNext = signal(false);\r\n protected readonly overflowTabIds = signal<string[]>([]);\r\n protected readonly overflowMenuOpen = signal(false);\r\n\r\n protected readonly leftIcon = ChevronLeftIcon;\r\n protected readonly rightIcon = ChevronRightIcon;\r\n protected readonly moreIcon = EllipsisIcon;\r\n\r\n protected readonly isContained = computed(() => this.variant() === 'contained');\r\n protected readonly visibleTabs = computed(() => {\r\n const overflowIds = new Set(this.overflowTabIds());\r\n return this.tabs().filter((tab) => !overflowIds.has(tab.id));\r\n });\r\n protected readonly overflowTabs = computed(() => {\r\n const overflowIds = new Set(this.overflowTabIds());\r\n return this.tabs().filter((tab) => overflowIds.has(tab.id));\r\n });\r\n\r\n constructor() {\r\n effect(() => {\r\n const tabs = this.tabs();\r\n const activeId = this.activeId();\r\n const firstEnabled = tabs.find((tab) => !tab.disabled)?.id ?? null;\r\n\r\n if (!tabs.length) {\r\n if (activeId !== null) {\r\n this.activeId.set(null);\r\n }\r\n return;\r\n }\r\n\r\n if (activeId === null) {\r\n this.activeId.set(firstEnabled);\r\n return;\r\n }\r\n\r\n const activeTab = tabs.find((tab) => tab.id === activeId);\r\n if (!activeTab || activeTab.disabled) {\r\n this.activeId.set(firstEnabled);\r\n }\r\n });\r\n }\r\n\r\n ngAfterViewInit(): void {\r\n queueMicrotask(() => this.updateOverflowState());\r\n\r\n const container = this.scrollContainer()?.nativeElement;\r\n if (!container) {\r\n return;\r\n }\r\n\r\n fromEvent(container, 'scroll')\r\n .pipe(takeUntilDestroyed(this.destroyRef))\r\n .subscribe(() => this.updateOverflowState());\r\n\r\n fromEvent(window, 'resize')\r\n .pipe(takeUntilDestroyed(this.destroyRef))\r\n .subscribe(() => this.updateOverflowState());\r\n }\r\n\r\n protected isActive(tabId: string): boolean {\r\n return this.activeId() === tabId;\r\n }\r\n\r\n protected selectTab(tab: TabItem): void {\r\n if (tab.disabled || this.activeId() === tab.id) {\r\n return;\r\n }\r\n\r\n this.activeId.set(tab.id);\r\n this.overflowMenuOpen.set(false);\r\n this.tabChanged.emit({ item: tab });\r\n }\r\n\r\n protected toggleOverflowMenu(event: Event): void {\r\n event.stopPropagation();\r\n this.overflowMenuOpen.update((open) => !open);\r\n }\r\n\r\n protected scrollPrev(): void {\r\n this.scrollTabsBy(-160);\r\n }\r\n\r\n protected scrollNext(): void {\r\n this.scrollTabsBy(160);\r\n }\r\n\r\n protected trackById(_index: number, tab: TabItem): string {\r\n return tab.id;\r\n }\r\n\r\n protected onDocumentClick(event: Event): void {\r\n const target = event.target;\r\n if (!(target instanceof Node)) {\r\n return;\r\n }\r\n\r\n if (!this.hostElement.nativeElement.contains(target)) {\r\n this.overflowMenuOpen.set(false);\r\n }\r\n }\r\n\r\n private scrollTabsBy(delta: number): void {\r\n const container = this.scrollContainer()?.nativeElement;\r\n if (!container) {\r\n return;\r\n }\r\n\r\n container.scrollBy({ left: delta, behavior: 'smooth' });\r\n }\r\n\r\n private updateOverflowState(): void {\r\n const container = this.scrollContainer()?.nativeElement;\r\n if (!container) {\r\n return;\r\n }\r\n\r\n const { scrollLeft, scrollWidth, clientWidth } = container;\r\n this.canScrollPrev.set(scrollLeft > 4);\r\n this.canScrollNext.set(scrollLeft + clientWidth < scrollWidth - 4);\r\n\r\n if (!this.showOverflowActions()) {\r\n this.overflowTabIds.set([]);\r\n return;\r\n }\r\n\r\n const items = Array.from(container.querySelectorAll<HTMLElement>('[data-tab-id]'));\r\n const overflowIds = items\r\n .filter((item) => item.offsetLeft + item.offsetWidth > clientWidth)\r\n .map((item) => item.dataset['tabId'] ?? '')\r\n .filter(Boolean);\r\n\r\n this.overflowTabIds.set(overflowIds);\r\n }\r\n}\r\n","@if (tabs().length) {\r\n <div class=\"tabs\" [class.tabs--contained]=\"isContained()\" [class.tabs--line]=\"!isContained()\">\r\n <div class=\"tabs__viewport\" #scrollContainer [attr.aria-label]=\"ariaLabel()\" role=\"tablist\">\r\n @for (tab of visibleTabs(); track trackById($index, tab)) {\r\n <button\r\n type=\"button\"\r\n role=\"tab\"\r\n class=\"tabs__item\"\r\n [class.tabs__item--active]=\"isActive(tab.id)\"\r\n [class.tabs__item--disabled]=\"tab.disabled\"\r\n [attr.data-tab-id]=\"tab.id\"\r\n [attr.aria-selected]=\"isActive(tab.id)\"\r\n [disabled]=\"tab.disabled\"\r\n (click)=\"selectTab(tab)\"\r\n >\r\n <span class=\"tabs__label\">{{ tab.label }}</span>\r\n </button>\r\n }\r\n </div>\r\n\r\n @if (showOverflowActions()) {\r\n <div class=\"tabs__actions\">\r\n <button\r\n type=\"button\"\r\n class=\"tabs__action\"\r\n [disabled]=\"!canScrollPrev()\"\r\n aria-label=\"向左滚动\"\r\n (click)=\"scrollPrev()\"\r\n >\r\n <lucide-icon [img]=\"leftIcon\" [size]=\"16\" [strokeWidth]=\"2\" aria-hidden=\"true\" />\r\n </button>\r\n <button\r\n type=\"button\"\r\n class=\"tabs__action\"\r\n [disabled]=\"!canScrollNext()\"\r\n aria-label=\"向右滚动\"\r\n (click)=\"scrollNext()\"\r\n >\r\n <lucide-icon [img]=\"rightIcon\" [size]=\"16\" [strokeWidth]=\"2\" aria-hidden=\"true\" />\r\n </button>\r\n @if (overflowTabs().length) {\r\n <div class=\"tabs__menu-wrap\">\r\n <button\r\n type=\"button\"\r\n class=\"tabs__action\"\r\n [class.tabs__action--open]=\"overflowMenuOpen()\"\r\n aria-label=\"更多标签\"\r\n (click)=\"toggleOverflowMenu($event)\"\r\n >\r\n <lucide-icon [img]=\"moreIcon\" [size]=\"16\" [strokeWidth]=\"2\" aria-hidden=\"true\" />\r\n </button>\r\n\r\n @if (overflowMenuOpen()) {\r\n <div class=\"tabs__menu\">\r\n @for (tab of overflowTabs(); track trackById($index, tab)) {\r\n <button\r\n type=\"button\"\r\n class=\"tabs__menu-item\"\r\n [disabled]=\"tab.disabled\"\r\n (click)=\"selectTab(tab)\"\r\n >\r\n {{ tab.label }}\r\n </button>\r\n }\r\n </div>\r\n }\r\n </div>\r\n }\r\n </div>\r\n }\r\n </div>\r\n}\r\n","import { ChangeDetectionStrategy, Component, computed, input, output } from '@angular/core';\r\nimport { LucideAngularModule, SquareArrowOutUpRightIcon, XIcon } from 'lucide-angular';\r\n\r\nexport type STagVariant = 'soft' | 'solid' | 'outline' | 'ghost' | 'text';\r\nexport type STagColor = 'neutral' | 'primary' | 'success' | 'warning' | 'danger' | 'info';\r\nexport type STagSize = 'xs' | 'sm' | 'md' | 'lg';\r\nexport type STagShape = 'default' | 'round';\r\n\r\nexport type TagTone = STagColor;\r\nexport type TagVariant = STagVariant | 'outlined';\r\n\r\n@Component({\r\n selector: 's-tag',\r\n imports: [LucideAngularModule],\r\n templateUrl: './s-tag.html',\r\n styleUrl: './s-tag.scss',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class Tag {\r\n readonly label = input('');\r\n readonly color = input<STagColor | null>(null);\r\n readonly tone = input<TagTone>('neutral');\r\n readonly variant = input<TagVariant>('soft');\r\n readonly size = input<STagSize>('sm');\r\n readonly shape = input<STagShape>('default');\r\n readonly closable = input(false);\r\n readonly disabled = input(false);\r\n readonly href = input<string | null>(null);\r\n readonly target = input<string | null>(null);\r\n readonly rel = input<string | null>(null);\r\n readonly ariaLabel = input('');\r\n\r\n readonly tagClicked = output<void>();\r\n readonly closeClicked = output<void>();\r\n\r\n protected readonly closeIcon = XIcon;\r\n protected readonly externalLinkIcon = SquareArrowOutUpRightIcon;\r\n protected readonly isLink = computed(() => !!this.href() && !this.disabled());\r\n protected readonly displayLabel = computed(() => this.label().trim());\r\n protected readonly resolvedAriaLabel = computed(() => this.ariaLabel() || this.displayLabel() || null);\r\n protected readonly resolvedColor = computed(() => this.color() ?? this.tone());\r\n protected readonly resolvedVariant = computed<STagVariant>(() => {\r\n const variant = this.variant();\r\n return variant === 'outlined' ? 'outline' : variant;\r\n });\r\n protected readonly hostClass = computed(() =>\r\n [\r\n 'tag',\r\n `tag--${this.resolvedVariant()}`,\r\n `tag--${this.resolvedColor()}`,\r\n `tag--${this.size()}`,\r\n `tag--${this.shape()}`,\r\n this.disabled() ? 'tag--disabled' : '',\r\n ]\r\n .filter(Boolean)\r\n .join(' '),\r\n );\r\n\r\n protected emitTagClicked(): void {\r\n if (this.disabled()) {\r\n return;\r\n }\r\n\r\n this.tagClicked.emit();\r\n }\r\n\r\n protected emitCloseClicked(event: Event): void {\r\n event.stopPropagation();\r\n if (this.disabled()) {\r\n return;\r\n }\r\n\r\n this.closeClicked.emit();\r\n }\r\n}\r\n","@if (isLink()) {\r\n <a\r\n class=\"{{ hostClass() }}\"\r\n [href]=\"href()!\"\r\n [target]=\"target()\"\r\n [rel]=\"rel()\"\r\n [attr.aria-label]=\"resolvedAriaLabel()\"\r\n (click)=\"emitTagClicked()\"\r\n >\r\n <span class=\"tag__label\">\r\n @if (displayLabel()) {\r\n {{ displayLabel() }}\r\n } @else {\r\n <ng-content />\r\n }\r\n </span>\r\n <lucide-icon class=\"tag__link-icon\" [img]=\"externalLinkIcon\" [size]=\"12\" [strokeWidth]=\"2\" aria-hidden=\"true\" />\r\n </a>\r\n} @else {\r\n <span class=\"{{ hostClass() }}\" [attr.aria-label]=\"resolvedAriaLabel()\">\r\n <span class=\"tag__label\">\r\n @if (displayLabel()) {\r\n {{ displayLabel() }}\r\n } @else {\r\n <ng-content />\r\n }\r\n </span>\r\n\r\n @if (closable()) {\r\n <button\r\n type=\"button\"\r\n class=\"tag__close\"\r\n [disabled]=\"disabled()\"\r\n [attr.aria-label]=\"'Remove tag: ' + (displayLabel() || 'tag')\"\r\n (click)=\"emitCloseClicked($event)\"\r\n >\r\n <lucide-icon class=\"tag__close-icon\" [img]=\"closeIcon\" [size]=\"12\" [strokeWidth]=\"2\" aria-hidden=\"true\" />\r\n </button>\r\n }\r\n </span>\r\n}\r\n","import { ChangeDetectionStrategy, Component, computed, input } from '@angular/core';\r\nimport { LucideAngularModule, type LucideIconData } from 'lucide-angular';\r\n\r\nexport type TimelineStatus = 'wait' | 'process' | 'finish' | 'error';\r\nexport type TimelineVariant = 'dot' | 'default';\r\n\r\nexport interface TimelineItem {\r\n id: string;\r\n title: string;\r\n description?: string;\r\n status?: TimelineStatus;\r\n icon?: LucideIconData;\r\n}\r\n\r\n@Component({\r\n selector: 's-timeline',\r\n imports: [LucideAngularModule],\r\n templateUrl: './s-timeline.html',\r\n styleUrl: './s-timeline.scss',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class Timeline {\r\n readonly items = input<readonly TimelineItem[]>([]);\r\n readonly current = input(0);\r\n readonly variant = input<TimelineVariant>('dot');\r\n readonly ariaLabel = input('时间线');\r\n\r\n protected readonly normalizedItems = computed(() =>\r\n this.items().map((item, index, items) => ({\r\n ...item,\r\n index,\r\n status: this.resolveStatus(item, index),\r\n isLast: index === items.length - 1,\r\n })),\r\n );\r\n\r\n protected isDot(): boolean {\r\n return this.variant() === 'dot';\r\n }\r\n\r\n protected trackById(_index: number, item: TimelineItem): string {\r\n return item.id;\r\n }\r\n\r\n private resolveStatus(item: TimelineItem, index: number): TimelineStatus {\r\n if (item.status) {\r\n return item.status;\r\n }\r\n\r\n const current = this.current();\r\n if (index < current) {\r\n return 'finish';\r\n }\r\n if (index === current) {\r\n return 'process';\r\n }\r\n return 'wait';\r\n }\r\n}\r\n","@if (normalizedItems().length) {\r\n <ol class=\"timeline\" [class.timeline--dot]=\"isDot()\" [attr.aria-label]=\"ariaLabel()\">\r\n @for (item of normalizedItems(); track trackById($index, item)) {\r\n <li\r\n class=\"timeline__item\"\r\n [class.timeline__item--finish]=\"item.status === 'finish'\"\r\n [class.timeline__item--process]=\"item.status === 'process'\"\r\n [class.timeline__item--wait]=\"item.status === 'wait'\"\r\n [class.timeline__item--error]=\"item.status === 'error'\"\r\n [class.timeline__item--icon]=\"item.icon\"\r\n [class.timeline__item--last]=\"item.isLast\"\r\n >\r\n <div class=\"timeline__head\">\r\n @if (isDot()) {\r\n <span class=\"timeline__dot\"></span>\r\n } @else if (item.icon; as icon) {\r\n <span class=\"timeline__icon-wrap\">\r\n <lucide-icon [img]=\"icon\" [size]=\"16\" [strokeWidth]=\"1.85\" aria-hidden=\"true\" />\r\n </span>\r\n } @else if (item.status === 'finish') {\r\n <span class=\"timeline__circle\">\r\n <span class=\"timeline__check\" aria-hidden=\"true\"></span>\r\n </span>\r\n } @else if (item.status === 'error') {\r\n <span class=\"timeline__circle\">\r\n <span class=\"timeline__cross\" aria-hidden=\"true\"></span>\r\n </span>\r\n } @else {\r\n <span class=\"timeline__circle\">{{ item.index + 1 }}</span>\r\n }\r\n </div>\r\n\r\n <div class=\"timeline__content\">\r\n <div class=\"timeline__title\">{{ item.title }}</div>\r\n @if (item.description) {\r\n <div class=\"timeline__description\">{{ item.description }}</div>\r\n }\r\n </div>\r\n\r\n @if (!item.isLast) {\r\n <div class=\"timeline__tail\" aria-hidden=\"true\"></div>\r\n }\r\n </li>\r\n }\r\n </ol>\r\n}\r\n","import { ChangeDetectionStrategy, Component, forwardRef, input, output } from '@angular/core';\r\nimport { ChevronDownIcon, ChevronRightIcon, LucideAngularModule } from 'lucide-angular';\r\n\r\nexport interface TreeNode {\r\n id: string | number;\r\n label: string;\r\n count?: number;\r\n trailingText?: string;\r\n avatarText?: string;\r\n children?: readonly TreeNode[];\r\n selectable?: boolean;\r\n meta?: Record<string, unknown>;\r\n}\r\n\r\nexport interface TreeToggleChange {\r\n node: TreeNode;\r\n expanded: boolean;\r\n}\r\n\r\n@Component({\r\n selector: 's-tree',\r\n imports: [forwardRef(() => Tree), LucideAngularModule],\r\n templateUrl: './s-tree.html',\r\n styleUrl: './s-tree.scss',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class Tree {\r\n readonly nodes = input<readonly TreeNode[]>([]);\r\n readonly selectedId = input<string | number | null>(null);\r\n readonly expandedIds = input<readonly (string | number)[]>([]);\r\n readonly level = input(0);\r\n\r\n readonly selectionChange = output<TreeNode>();\r\n readonly toggleChange = output<TreeToggleChange>();\r\n protected readonly expandIcon = ChevronRightIcon;\r\n protected readonly collapseIcon = ChevronDownIcon;\r\n\r\n protected hasChildren(node: TreeNode): boolean {\r\n return Boolean(node.children?.length);\r\n }\r\n\r\n protected isExpanded(node: TreeNode): boolean {\r\n return this.expandedIds().includes(node.id);\r\n }\r\n\r\n protected isSelected(node: TreeNode): boolean {\r\n return this.selectedId() === node.id;\r\n }\r\n\r\n protected onRowClick(node: TreeNode, event?: Event): void {\r\n event?.stopPropagation();\r\n\r\n if (node.selectable === false && this.hasChildren(node)) {\r\n this.toggle(node);\r\n return;\r\n }\r\n\r\n this.selectionChange.emit(node);\r\n }\r\n\r\n protected onToggleClick(node: TreeNode, event: Event): void {\r\n event.stopPropagation();\r\n this.toggle(node);\r\n }\r\n\r\n protected onChildSelection(node: TreeNode): void {\r\n this.selectionChange.emit(node);\r\n }\r\n\r\n protected onChildToggle(change: TreeToggleChange): void {\r\n this.toggleChange.emit(change);\r\n }\r\n\r\n protected onKeydown(node: TreeNode, event: KeyboardEvent): void {\r\n if (event.key === 'Enter' || event.key === ' ') {\r\n event.preventDefault();\r\n this.onRowClick(node, event);\r\n return;\r\n }\r\n\r\n if (event.key === 'ArrowRight' && this.hasChildren(node) && !this.isExpanded(node)) {\r\n event.preventDefault();\r\n this.toggle(node);\r\n return;\r\n }\r\n\r\n if (event.key === 'ArrowLeft' && this.hasChildren(node) && this.isExpanded(node)) {\r\n event.preventDefault();\r\n this.toggle(node);\r\n }\r\n }\r\n\r\n protected trackByNodeId(_index: number, node: TreeNode): string | number {\r\n return node.id;\r\n }\r\n\r\n private toggle(node: TreeNode): void {\r\n this.toggleChange.emit({\r\n node,\r\n expanded: !this.isExpanded(node),\r\n });\r\n }\r\n}\r\n","<ul class=\"tree\" role=\"tree\" [class.tree--nested]=\"level() > 0\">\r\n @for (node of nodes(); track trackByNodeId($index, node)) {\r\n <li class=\"tree__item\" role=\"none\">\r\n <div\r\n class=\"tree__row\"\r\n [class.is-selected]=\"isSelected(node)\"\r\n [class.is-branch]=\"hasChildren(node)\"\r\n [style.--tree-level]=\"level()\"\r\n tabindex=\"0\"\r\n role=\"treeitem\"\r\n [attr.aria-expanded]=\"hasChildren(node) ? isExpanded(node) : null\"\r\n (click)=\"onRowClick(node, $event)\"\r\n (keydown)=\"onKeydown(node, $event)\"\r\n >\r\n @if (hasChildren(node)) {\r\n <button\r\n type=\"button\"\r\n class=\"tree__toggle\"\r\n [attr.aria-label]=\"isExpanded(node) ? '收起节点' : '展开节点'\"\r\n (click)=\"onToggleClick(node, $event)\"\r\n >\r\n <lucide-icon\r\n aria-hidden=\"true\"\r\n [img]=\"isExpanded(node) ? collapseIcon : expandIcon\"\r\n [size]=\"12\"\r\n [strokeWidth]=\"2.1\"\r\n ></lucide-icon>\r\n </button>\r\n } @else {\r\n <span class=\"tree__toggle tree__toggle--placeholder\" aria-hidden=\"true\"></span>\r\n }\r\n\r\n @if (node.avatarText) {\r\n <span class=\"tree__avatar\" aria-hidden=\"true\">{{ node.avatarText }}</span>\r\n }\r\n\r\n <span class=\"tree__label\">\r\n <span class=\"tree__label-text\">{{ node.label }}</span>\r\n @if (node.count !== undefined) {\r\n <span class=\"tree__count\">({{ node.count }})</span>\r\n }\r\n </span>\r\n\r\n @if (node.trailingText) {\r\n <span class=\"tree__trailing\">{{ node.trailingText }}</span>\r\n }\r\n </div>\r\n\r\n @if (hasChildren(node) && isExpanded(node)) {\r\n <s-tree\r\n [nodes]=\"node.children ?? []\"\r\n [selectedId]=\"selectedId()\"\r\n [expandedIds]=\"expandedIds()\"\r\n [level]=\"level() + 1\"\r\n (selectionChange)=\"onChildSelection($event)\"\r\n (toggleChange)=\"onChildToggle($event)\"\r\n />\r\n }\r\n </li>\r\n }\r\n</ul>\r\n","import {\r\n ChangeDetectionStrategy,\r\n Component,\r\n ElementRef,\r\n computed,\r\n effect,\r\n forwardRef,\r\n input,\r\n output,\r\n signal,\r\n viewChild,\r\n} from '@angular/core';\r\nimport { OverlayModule } from '@angular/cdk/overlay';\r\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\r\nimport { Tree, TreeNode, TreeToggleChange } from '../s-tree/s-tree';\r\n\r\n@Component({\r\n selector: 's-tree-select',\r\n imports: [OverlayModule, Tree],\r\n templateUrl: './s-tree-select.html',\r\n styleUrl: './s-tree-select.scss',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n providers: [\r\n {\r\n provide: NG_VALUE_ACCESSOR,\r\n useExisting: forwardRef(() => TreeSelect),\r\n multi: true,\r\n },\r\n ],\r\n})\r\nexport class TreeSelect implements ControlValueAccessor {\r\n private readonly trigger = viewChild<ElementRef<HTMLElement>>('trigger');\r\n\r\n readonly nodes = input<readonly TreeNode[]>([]);\r\n readonly placeholder = input('请选择');\r\n readonly ariaLabel = input('选择树节点');\r\n readonly disabled = input(false);\r\n readonly matchTriggerWidth = input(true);\r\n readonly expandedIds = input<readonly (string | number)[]>([]);\r\n\r\n readonly selectionChange = output<TreeNode>();\r\n readonly expandedIdsChange = output<readonly (string | number)[]>();\r\n\r\n protected readonly opened = signal(false);\r\n protected readonly selectedId = signal<string | number | null>(null);\r\n protected readonly currentExpandedIds = signal<readonly (string | number)[]>([]);\r\n protected readonly triggerWidth = signal<number | null>(null);\r\n private readonly disabledFromCva = signal(false);\r\n\r\n protected readonly isDisabled = computed(() => this.disabled() || this.disabledFromCva());\r\n protected readonly selectedNode = computed(() => this.findNodeById(this.nodes(), this.selectedId()));\r\n protected readonly displayValue = computed(() => this.selectedNode()?.label ?? this.placeholder());\r\n protected readonly hasValue = computed(() => this.selectedNode() != null);\r\n protected readonly overlayWidth = computed<string | number>(() => {\r\n if (!this.matchTriggerWidth()) {\r\n return 'auto';\r\n }\r\n\r\n const width = this.triggerWidth();\r\n return width == null ? 'auto' : Math.max(width, 288);\r\n });\r\n\r\n private onChange: (value: string | number | null) => void = () => {};\r\n private onTouched: () => void = () => {};\r\n\r\n constructor() {\r\n effect(() => {\r\n this.currentExpandedIds.set(this.expandedIds());\r\n });\r\n }\r\n\r\n protected togglePopup(): void {\r\n if (this.isDisabled()) {\r\n return;\r\n }\r\n\r\n this.opened() ? this.closePopup() : this.openPopup();\r\n }\r\n\r\n protected openPopup(): void {\r\n if (this.isDisabled()) {\r\n return;\r\n }\r\n\r\n this.syncTriggerWidth();\r\n this.opened.set(true);\r\n }\r\n\r\n protected closePopup(): void {\r\n if (!this.opened()) {\r\n return;\r\n }\r\n\r\n this.opened.set(false);\r\n this.onTouched();\r\n }\r\n\r\n protected onNodeSelected(node: TreeNode): void {\r\n if (node.selectable === false) {\r\n return;\r\n }\r\n\r\n this.selectedId.set(node.id);\r\n this.onChange(node.id);\r\n this.onTouched();\r\n this.selectionChange.emit(node);\r\n this.opened.set(false);\r\n }\r\n\r\n protected onTreeToggle(change: TreeToggleChange): void {\r\n const current = this.currentExpandedIds();\r\n const next = change.expanded\r\n ? this.addExpandedId(current, change.node.id)\r\n : current.filter((id) => id !== change.node.id);\r\n\r\n this.currentExpandedIds.set(next);\r\n this.expandedIdsChange.emit(next);\r\n }\r\n\r\n protected onTriggerKeydown(event: KeyboardEvent): void {\r\n if (event.key === 'Enter' || event.key === ' ') {\r\n event.preventDefault();\r\n this.togglePopup();\r\n return;\r\n }\r\n\r\n if (event.key === 'ArrowDown') {\r\n event.preventDefault();\r\n this.openPopup();\r\n return;\r\n }\r\n\r\n if (event.key === 'Escape') {\r\n event.preventDefault();\r\n this.closePopup();\r\n }\r\n }\r\n\r\n writeValue(value: string | number | null | undefined): void {\r\n this.selectedId.set(value ?? null);\r\n }\r\n\r\n registerOnChange(fn: (value: string | number | null) => void): void {\r\n this.onChange = fn;\r\n }\r\n\r\n registerOnTouched(fn: () => void): void {\r\n this.onTouched = fn;\r\n }\r\n\r\n setDisabledState(isDisabled: boolean): void {\r\n this.disabledFromCva.set(isDisabled);\r\n if (isDisabled) {\r\n this.opened.set(false);\r\n }\r\n }\r\n\r\n private syncTriggerWidth(): void {\r\n this.triggerWidth.set(this.trigger()?.nativeElement.offsetWidth ?? null);\r\n }\r\n\r\n private addExpandedId(\r\n current: readonly (string | number)[],\r\n id: string | number,\r\n ): readonly (string | number)[] {\r\n return current.includes(id) ? current : [...current, id];\r\n }\r\n\r\n private findNodeById(\r\n nodes: readonly TreeNode[],\r\n id: string | number | null,\r\n ): TreeNode | null {\r\n if (id == null) {\r\n return null;\r\n }\r\n\r\n for (const node of nodes) {\r\n if (node.id === id) {\r\n return node;\r\n }\r\n\r\n const matched = this.findNodeById(node.children ?? [], id);\r\n if (matched) {\r\n return matched;\r\n }\r\n }\r\n\r\n return null;\r\n }\r\n}\r\n","<div\r\n class=\"tree-select\"\r\n [class.tree-select--selected]=\"hasValue()\"\r\n [class.tree-select--disabled]=\"isDisabled()\"\r\n>\r\n <button\r\n #trigger\r\n cdkOverlayOrigin\r\n #origin=\"cdkOverlayOrigin\"\r\n type=\"button\"\r\n class=\"tree-select__trigger\"\r\n [attr.aria-label]=\"ariaLabel()\"\r\n [attr.aria-expanded]=\"opened()\"\r\n [disabled]=\"isDisabled()\"\r\n (click)=\"togglePopup()\"\r\n (keydown)=\"onTriggerKeydown($event)\"\r\n >\r\n <span class=\"tree-select__label\">{{ displayValue() }}</span>\r\n <span class=\"tree-select__arrow\" aria-hidden=\"true\"></span>\r\n </button>\r\n\r\n <ng-template\r\n cdkConnectedOverlay\r\n cdkConnectedOverlayHasBackdrop\r\n cdkConnectedOverlayBackdropClass=\"cdk-overlay-transparent-backdrop\"\r\n [cdkConnectedOverlayOrigin]=\"origin\"\r\n [cdkConnectedOverlayOpen]=\"opened()\"\r\n [cdkConnectedOverlayWidth]=\"overlayWidth()\"\r\n (backdropClick)=\"closePopup()\"\r\n (detach)=\"closePopup()\"\r\n >\r\n <div class=\"tree-select__popup\">\r\n <s-tree\r\n [nodes]=\"nodes()\"\r\n [selectedId]=\"selectedId()\"\r\n [expandedIds]=\"currentExpandedIds()\"\r\n (selectionChange)=\"onNodeSelected($event)\"\r\n (toggleChange)=\"onTreeToggle($event)\"\r\n />\r\n </div>\r\n </ng-template>\r\n</div>\r\n","import { NgTemplateOutlet } from '@angular/common';\r\nimport {\r\n ChangeDetectionStrategy,\r\n Component,\r\n ElementRef,\r\n computed,\r\n input,\r\n output,\r\n signal,\r\n viewChild,\r\n} from '@angular/core';\r\nimport {\r\n CheckIcon,\r\n EyeIcon,\r\n FileIcon,\r\n ImageIcon,\r\n PencilIcon,\r\n PlusIcon,\r\n RotateCcwIcon,\r\n Trash2Icon,\r\n UploadCloudIcon,\r\n XIcon,\r\n} from 'lucide-angular';\r\nimport { LucideAngularModule } from 'lucide-angular';\r\n\r\nexport type UploadItemStatus = 'done' | 'success' | 'uploading' | 'error';\r\nexport type UploadVariant =\r\n | 'picture-card'\r\n | 'file-list'\r\n | 'dropzone'\r\n | 'button';\r\nexport type UploadButtonVariant = 'outline' | 'primary' | 'icon' | 'soft-icon';\nexport type UploadItemKind =\r\n | 'image'\r\n | 'word'\r\n | 'pdf'\r\n | 'ppt'\r\n | 'sheet'\r\n | 'archive'\r\n | 'audio'\r\n | 'video'\r\n | 'file';\r\nexport type UploadSelectionSource = 'picker' | 'drop' | 'replace';\r\n\r\nexport interface UploadItem {\r\n id: string;\r\n name?: string;\r\n size?: number;\r\n sizeText?: string;\r\n meta?: string;\r\n fileType?: UploadItemKind | string;\r\n thumbnailSrc?: string | null;\r\n alt?: string;\r\n status?: UploadItemStatus;\r\n progress?: number;\r\n errorText?: string;\r\n disabled?: boolean;\r\n active?: boolean;\r\n}\r\n\r\nexport interface UploadActionEvent {\r\n item: UploadItem;\r\n}\r\n\r\nexport interface UploadFilesSelectedEvent {\r\n files: File[];\r\n source?: UploadSelectionSource;\r\n item?: UploadItem;\r\n}\r\n\r\n@Component({\r\n selector: 's-upload',\r\n imports: [LucideAngularModule, NgTemplateOutlet],\r\n templateUrl: './s-upload.html',\r\n styleUrl: './s-upload.scss',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class Upload {\r\n readonly items = input<readonly UploadItem[]>([]);\r\n readonly variant = input<UploadVariant>('picture-card');\r\n readonly buttonVariant = input<UploadButtonVariant>('outline');\r\n readonly accept = input('image/*');\r\n readonly multiple = input(true);\r\n readonly disabled = input(false);\r\n readonly maxCount = input<number | null>(null);\r\n readonly cardSize = input(120);\r\n readonly cardWidth = input<number | null>(null);\r\n readonly cardHeight = input<number | null>(null);\r\n readonly addLabel = input('点击上传');\r\n readonly buttonLabel = input('点击上传');\r\n readonly uploadingLabel = input('正在上传');\r\n readonly errorFallbackText = input('上传失败');\r\n readonly emptyFileName = input('未命名文件');\r\n readonly dropTitle = input('将文件拖拽到此处,或点击上传');\r\n readonly dropDescription = input(\r\n '支持 JPG、PNG、PDF 等格式,单个不超过 50MB',\r\n );\r\n readonly hint = input('');\r\n readonly showHint = input(true);\r\n readonly showList = input(true);\r\n readonly showPreview = input(true);\r\n readonly showRemove = input(true);\r\n readonly showReplace = input(true);\r\n readonly showSuccessMark = input(true);\r\n\r\n readonly filesSelected = output<UploadFilesSelectedEvent>();\r\n readonly itemPreview = output<UploadActionEvent>();\r\n readonly itemRemove = output<UploadActionEvent>();\r\n readonly itemRetry = output<UploadActionEvent>();\r\n readonly itemReplace = output<UploadActionEvent>();\r\n\r\n protected readonly fileInput =\r\n viewChild<ElementRef<HTMLInputElement>>('fileInput');\r\n protected readonly dragOver = signal(false);\r\n\r\n protected readonly addIcon = PlusIcon;\r\n protected readonly checkIcon = CheckIcon;\r\n protected readonly closeIcon = XIcon;\r\n protected readonly fileIcon = FileIcon;\r\n protected readonly imageIcon = ImageIcon;\r\n protected readonly previewIcon = EyeIcon;\r\n protected readonly removeIcon = Trash2Icon;\r\n protected readonly replaceIcon = PencilIcon;\r\n protected readonly retryIcon = RotateCcwIcon;\r\n protected readonly uploadIcon = UploadCloudIcon;\r\n\r\n protected readonly canAddMore = computed(() => {\r\n const maxCount = this.maxCount();\r\n if (this.disabled()) {\r\n return false;\r\n }\r\n\r\n if (maxCount === null) {\r\n return true;\r\n }\r\n\r\n return this.items().length < maxCount;\r\n });\r\n\r\n private selectionSource: UploadSelectionSource = 'picker';\r\n private replacementItem: UploadItem | null = null;\r\n\r\n protected trackById(_index: number, item: UploadItem): string {\r\n return item.id;\r\n }\r\n\r\n protected itemStatus(item: UploadItem): UploadItemStatus {\r\n return item.status ?? 'done';\r\n }\r\n\r\n protected isDoneStatus(item: UploadItem): boolean {\r\n const status = this.itemStatus(item);\r\n return status === 'done' || status === 'success';\r\n }\r\n\r\n protected showPictureSuccessMark(item: UploadItem): boolean {\r\n return this.showSuccessMark() && this.itemStatus(item) === 'success';\r\n }\r\n\r\n protected itemProgress(item: UploadItem): number {\r\n const progress = item.progress ?? 0;\r\n return Math.max(0, Math.min(100, progress));\r\n }\r\n\r\n protected itemErrorText(item: UploadItem): string {\r\n return item.errorText || this.errorFallbackText();\r\n }\r\n\r\n protected itemName(item: UploadItem): string {\r\n return item.name || item.alt || this.emptyFileName();\r\n }\r\n\r\n protected itemMeta(item: UploadItem): string {\r\n if (item.meta) {\r\n return item.meta;\r\n }\r\n\r\n if (item.sizeText) {\r\n return item.sizeText;\r\n }\r\n\r\n if (typeof item.size === 'number') {\r\n return this.formatSize(item.size);\r\n }\r\n\r\n return '';\r\n }\r\n\r\n protected itemKind(item: UploadItem): UploadItemKind {\r\n const explicitKind = this.normalizeKind(item.fileType);\r\n if (explicitKind) {\r\n return explicitKind;\r\n }\r\n\r\n if (item.thumbnailSrc) {\r\n return 'image';\r\n }\r\n\r\n const extension = this.itemName(item).split('.').pop()?.toLowerCase();\r\n switch (extension) {\r\n case 'jpg':\r\n case 'jpeg':\r\n case 'png':\r\n case 'gif':\r\n case 'webp':\r\n case 'svg':\r\n return 'image';\r\n case 'doc':\r\n case 'docx':\r\n return 'word';\r\n case 'pdf':\r\n return 'pdf';\r\n case 'ppt':\r\n case 'pptx':\r\n return 'ppt';\r\n case 'xls':\r\n case 'xlsx':\r\n case 'csv':\r\n return 'sheet';\r\n case 'zip':\r\n case 'rar':\r\n case '7z':\r\n return 'archive';\r\n case 'mp3':\r\n case 'wav':\r\n case 'aac':\r\n return 'audio';\r\n case 'mp4':\r\n case 'mov':\r\n case 'avi':\r\n return 'video';\r\n default:\r\n return 'file';\r\n }\r\n }\r\n\r\n protected itemKindLabel(item: UploadItem): string {\r\n switch (this.itemKind(item)) {\r\n case 'image':\r\n return 'IMG';\r\n case 'word':\r\n return 'W';\r\n case 'pdf':\r\n return 'PDF';\r\n case 'ppt':\r\n return 'PPT';\r\n case 'sheet':\r\n return 'XLS';\r\n case 'archive':\r\n return 'ZIP';\r\n case 'audio':\r\n return 'AUD';\r\n case 'video':\r\n return 'VID';\r\n default:\r\n return 'FILE';\r\n }\r\n }\r\n\r\n protected openFileDialog(): void {\r\n this.openPicker('picker');\r\n }\r\n\r\n protected openReplaceDialog(item: UploadItem, event?: Event): void {\r\n event?.stopPropagation();\r\n if (this.disabled() || item.disabled) {\r\n return;\r\n }\r\n\r\n this.itemReplace.emit({ item });\r\n this.replacementItem = item;\r\n this.openPicker('replace');\r\n }\r\n\r\n protected onTriggerKeydown(event: KeyboardEvent): void {\r\n if (event.key !== 'Enter' && event.key !== ' ') {\r\n return;\r\n }\r\n\r\n event.preventDefault();\r\n this.openFileDialog();\r\n }\r\n\r\n protected onFileChange(event: Event): void {\r\n const inputElement = event.target;\r\n if (!(inputElement instanceof HTMLInputElement)) {\r\n return;\r\n }\r\n\r\n const files = inputElement.files ? Array.from(inputElement.files) : [];\r\n inputElement.value = '';\r\n this.emitFiles(\r\n files,\r\n this.selectionSource,\r\n this.replacementItem ?? undefined,\r\n );\r\n this.selectionSource = 'picker';\r\n this.replacementItem = null;\r\n }\r\n\r\n protected onDragEnter(event: DragEvent): void {\r\n if (!this.canAddMore()) {\r\n return;\r\n }\r\n\r\n event.preventDefault();\r\n this.dragOver.set(true);\r\n }\r\n\r\n protected onDragOver(event: DragEvent): void {\r\n if (!this.canAddMore()) {\r\n return;\r\n }\r\n\r\n event.preventDefault();\r\n this.dragOver.set(true);\r\n }\r\n\r\n protected onDragLeave(event: DragEvent): void {\r\n if (event.currentTarget === event.target) {\r\n this.dragOver.set(false);\r\n }\r\n }\r\n\r\n protected onDrop(event: DragEvent): void {\r\n if (!this.canAddMore()) {\r\n return;\r\n }\r\n\r\n event.preventDefault();\r\n this.dragOver.set(false);\r\n const files = event.dataTransfer?.files\r\n ? Array.from(event.dataTransfer.files)\r\n : [];\r\n this.emitFiles(files, 'drop');\r\n }\r\n\r\n protected previewItem(item: UploadItem, event?: Event): void {\r\n event?.stopPropagation();\r\n if (this.disabled() || item.disabled || !this.showPreview()) {\r\n return;\r\n }\r\n\r\n this.itemPreview.emit({ item });\r\n }\r\n\r\n protected removeItem(item: UploadItem, event?: Event): void {\r\n event?.stopPropagation();\r\n if (this.disabled() || item.disabled || !this.showRemove()) {\r\n return;\r\n }\r\n\r\n this.itemRemove.emit({ item });\r\n }\r\n\r\n protected retryItem(item: UploadItem, event?: Event): void {\r\n event?.stopPropagation();\r\n if (this.disabled() || item.disabled) {\r\n return;\r\n }\r\n\r\n this.itemRetry.emit({ item });\r\n }\r\n\r\n private openPicker(source: UploadSelectionSource): void {\r\n if (source !== 'replace' && !this.canAddMore()) {\r\n return;\r\n }\r\n\r\n this.selectionSource = source;\r\n this.fileInput()?.nativeElement.click();\r\n }\r\n\r\n private emitFiles(\r\n files: File[],\r\n source: UploadSelectionSource,\r\n item?: UploadItem,\r\n ): void {\r\n const limitedFiles = this.limitFiles(files, source);\r\n if (!limitedFiles.length) {\r\n return;\r\n }\r\n\r\n this.filesSelected.emit({ files: limitedFiles, source, item });\r\n }\r\n\r\n private limitFiles(files: File[], source: UploadSelectionSource): File[] {\r\n if (source === 'replace') {\r\n return files.slice(0, 1);\r\n }\r\n\r\n const maxCount = this.maxCount();\r\n if (maxCount === null) {\r\n return files;\r\n }\r\n\r\n const remainingCount = Math.max(0, maxCount - this.items().length);\r\n return files.slice(0, remainingCount);\r\n }\r\n\r\n private normalizeKind(kind: string | undefined): UploadItemKind | null {\r\n switch (kind) {\r\n case 'image':\r\n case 'word':\r\n case 'pdf':\r\n case 'ppt':\r\n case 'sheet':\r\n case 'archive':\r\n case 'audio':\r\n case 'video':\r\n case 'file':\r\n return kind;\r\n default:\r\n return null;\r\n }\r\n }\r\n\r\n private formatSize(size: number): string {\r\n if (size < 1024) {\r\n return `${size} B`;\r\n }\r\n\r\n if (size < 1024 * 1024) {\r\n return `${(size / 1024).toFixed(1)} KB`;\r\n }\r\n\r\n return `${(size / 1024 / 1024).toFixed(1)} MB`;\r\n }\r\n}\r\n","<div\r\n class=\"upload\"\r\n [class.upload--disabled]=\"disabled()\"\r\n [class.upload--picture-card]=\"variant() === 'picture-card'\"\r\n [class.upload--file-list]=\"variant() === 'file-list'\"\r\n [class.upload--dropzone]=\"variant() === 'dropzone'\"\r\n [class.upload--button]=\"variant() === 'button'\"\r\n [style.--upload-card-size.px]=\"cardSize()\"\r\n [style.--upload-card-width.px]=\"cardWidth() ?? cardSize()\"\r\n [style.--upload-card-height.px]=\"cardHeight() ?? cardSize()\"\r\n>\r\n @if (variant() === 'dropzone') {\r\n <button\r\n type=\"button\"\r\n class=\"upload-dropzone\"\r\n [class.upload-dropzone--drag-over]=\"dragOver()\"\r\n [disabled]=\"!canAddMore()\"\r\n (click)=\"openFileDialog()\"\r\n (dragenter)=\"onDragEnter($event)\"\r\n (dragover)=\"onDragOver($event)\"\r\n (dragleave)=\"onDragLeave($event)\"\r\n (drop)=\"onDrop($event)\"\r\n >\r\n <i-lucide [img]=\"uploadIcon\" class=\"upload-dropzone__icon\"></i-lucide>\r\n <span class=\"upload-dropzone__title\">{{ dropTitle() }}</span>\r\n <span class=\"upload-dropzone__description\">{{ dropDescription() }}</span>\r\n </button>\r\n\r\n @if (hint() && showHint()) {\r\n <div class=\"upload__hint\">{{ hint() }}</div>\r\n } @if (showList() && items().length) {\r\n <ng-container [ngTemplateOutlet]=\"fileList\"></ng-container>\r\n } } @else if (variant() === 'file-list') {\r\n <div class=\"upload__toolbar\">\r\n @if (canAddMore()) {\r\n <ng-container [ngTemplateOutlet]=\"buttonTrigger\"></ng-container>\r\n } @if (hint() && showHint()) {\r\n <div class=\"upload__hint\">{{ hint() }}</div>\r\n }\r\n </div>\r\n\r\n <ng-container [ngTemplateOutlet]=\"fileList\"></ng-container>\r\n } @else if (variant() === 'button') {\r\n <ng-container [ngTemplateOutlet]=\"buttonTrigger\"></ng-container>\r\n\r\n @if (hint() && showHint()) {\r\n <div class=\"upload__hint\">{{ hint() }}</div>\r\n } @if (showList() && items().length) {\r\n <ng-container [ngTemplateOutlet]=\"fileList\"></ng-container>\r\n } } @else {\r\n <div class=\"upload-picture-grid\">\r\n @for (item of items(); track trackById($index, item)) { @let status =\r\n itemStatus(item);\r\n\r\n <div\r\n class=\"upload-picture\"\r\n [class.upload-picture--uploading]=\"status === 'uploading'\"\r\n [class.upload-picture--error]=\"status === 'error'\"\r\n [class.upload-picture--active]=\"item.active\"\r\n [class.upload-picture--interactive]=\"status !== 'uploading' && !item.disabled && !disabled()\"\r\n (click)=\"status === 'error' ? retryItem(item) : previewItem(item)\"\r\n >\r\n @if (item.thumbnailSrc) {\r\n <img\r\n class=\"upload-picture__image\"\r\n [src]=\"item.thumbnailSrc\"\r\n [alt]=\"item.alt || itemName(item)\"\r\n />\r\n } @else {\r\n <div class=\"upload-picture__placeholder\">\r\n <i-lucide\r\n [img]=\"imageIcon\"\r\n class=\"upload-picture__placeholder-icon\"\r\n ></i-lucide>\r\n </div>\r\n } @if (showRemove() && isDoneStatus(item) && !showPictureSuccessMark(item)\r\n && !item.active) {\r\n <button\r\n type=\"button\"\r\n class=\"upload-picture__remove\"\r\n (click)=\"removeItem(item, $event)\"\r\n aria-label=\"Remove\"\r\n >\r\n <i-lucide [img]=\"closeIcon\"></i-lucide>\r\n </button>\r\n } @if (status === 'uploading') {\r\n <div class=\"upload-picture__mask upload-picture__mask--uploading\">\r\n <div\r\n class=\"upload-picture__circle\"\r\n [style.--upload-progress]=\"itemProgress(item) + '%'\"\r\n >\r\n <span>{{ itemProgress(item) }}%</span>\r\n </div>\r\n <div class=\"upload-picture__status-text\">{{ uploadingLabel() }}</div>\r\n </div>\r\n } @if (status === 'error') {\r\n <div class=\"upload-picture__mask upload-picture__mask--error\">\r\n <div class=\"upload-picture__error-main\">\r\n <i-lucide\r\n [img]=\"imageIcon\"\r\n class=\"upload-picture__error-icon\"\r\n ></i-lucide>\r\n <div class=\"upload-picture__error-text\">\r\n {{ itemErrorText(item) }}\r\n </div>\r\n </div>\r\n\r\n <div class=\"upload-picture__actions\">\r\n <button\r\n type=\"button\"\r\n class=\"upload-picture__action\"\r\n (click)=\"retryItem(item, $event)\"\r\n aria-label=\"Retry\"\r\n >\r\n <i-lucide [img]=\"retryIcon\"></i-lucide>\r\n </button>\r\n @if (showRemove()) {\r\n <button\r\n type=\"button\"\r\n class=\"upload-picture__action\"\r\n (click)=\"removeItem(item, $event)\"\r\n aria-label=\"Remove\"\r\n >\r\n <i-lucide [img]=\"removeIcon\"></i-lucide>\r\n </button>\r\n }\r\n </div>\r\n </div>\r\n } @if (isDoneStatus(item)) { @if (showPictureSuccessMark(item)) {\r\n <span class=\"upload-picture__success\" aria-hidden=\"true\">\r\n <i-lucide [img]=\"checkIcon\"></i-lucide>\r\n </span>\r\n } @if (showPreview() || showReplace() || (showRemove() &&\r\n showPictureSuccessMark(item))) {\r\n <div class=\"upload-picture__mask upload-picture__mask--hover\">\r\n <div class=\"upload-picture__actions\">\r\n @if (showPreview()) {\r\n <button\r\n type=\"button\"\r\n class=\"upload-picture__action\"\r\n (click)=\"previewItem(item, $event)\"\r\n aria-label=\"Preview\"\r\n >\r\n <i-lucide [img]=\"previewIcon\"></i-lucide>\r\n <span>预览</span>\r\n </button>\r\n } @if (showReplace()) {\r\n <button\r\n type=\"button\"\r\n class=\"upload-picture__action\"\r\n (click)=\"openReplaceDialog(item, $event)\"\r\n aria-label=\"Replace\"\r\n >\r\n <i-lucide [img]=\"replaceIcon\"></i-lucide>\r\n <span>替换</span>\r\n </button>\r\n } @if (showRemove() && showPictureSuccessMark(item)) {\r\n <button\r\n type=\"button\"\r\n class=\"upload-picture__action upload-picture__action--icon\"\r\n (click)=\"removeItem(item, $event)\"\r\n aria-label=\"Remove\"\r\n >\r\n <i-lucide [img]=\"removeIcon\"></i-lucide>\r\n </button>\r\n }\r\n </div>\r\n </div>\r\n } }\r\n </div>\r\n } @if (canAddMore()) {\r\n <button\r\n type=\"button\"\r\n class=\"upload-picture__add\"\r\n (click)=\"openFileDialog()\"\r\n >\r\n <i-lucide [img]=\"addIcon\" class=\"upload-picture__add-icon\"></i-lucide>\r\n <span class=\"upload-picture__add-label\">{{ addLabel() }}</span>\r\n </button>\r\n }\r\n </div>\r\n\r\n @if (hint() && showHint()) {\r\n <div class=\"upload__hint\">{{ hint() }}</div>\r\n } }\r\n\r\n <input\r\n #fileInput\r\n class=\"upload__input\"\r\n type=\"file\"\r\n [accept]=\"accept()\"\r\n [multiple]=\"multiple()\"\r\n (change)=\"onFileChange($event)\"\r\n />\r\n</div>\r\n\r\n<ng-template #buttonTrigger>\r\n <button\r\n type=\"button\"\r\n class=\"upload-trigger\"\n [class.upload-trigger--primary]=\"buttonVariant() === 'primary'\"\n [class.upload-trigger--icon]=\"buttonVariant() === 'icon'\"\n [class.upload-trigger--soft-icon]=\"buttonVariant() === 'soft-icon'\"\n [disabled]=\"!canAddMore()\"\n [attr.aria-label]=\"buttonVariant() === 'icon' || buttonVariant() === 'soft-icon' ? buttonLabel() : null\"\n (click)=\"openFileDialog()\"\n >\n <i-lucide\r\n [img]=\"buttonVariant() === 'icon' ? uploadIcon : addIcon\"\r\n class=\"upload-trigger__icon\"\r\n ></i-lucide>\r\n @if (buttonVariant() !== 'icon' && buttonVariant() !== 'soft-icon') {\n <span>{{ buttonLabel() }}</span>\n }\n </button>\n</ng-template>\r\n\r\n<ng-template #fileList>\r\n <div class=\"upload-file-list\" role=\"list\">\r\n @for (item of items(); track trackById($index, item)) { @let status =\r\n itemStatus(item); @let kind = itemKind(item);\r\n\r\n <div\r\n class=\"upload-file\"\r\n role=\"listitem\"\r\n [class.upload-file--uploading]=\"status === 'uploading'\"\r\n [class.upload-file--error]=\"status === 'error'\"\r\n [class.upload-file--done]=\"isDoneStatus(item)\"\r\n [class.upload-file--interactive]=\"status !== 'uploading' && !item.disabled && !disabled()\"\r\n (click)=\"status === 'error' ? retryItem(item) : previewItem(item)\"\r\n >\r\n <div\r\n class=\"upload-file__icon\"\r\n [class]=\"'upload-file__icon upload-file__icon--' + kind\"\r\n >\r\n @if (kind === 'image' && item.thumbnailSrc) {\r\n <img [src]=\"item.thumbnailSrc\" [alt]=\"item.alt || itemName(item)\" />\r\n } @else {\r\n <span>{{ itemKindLabel(item) }}</span>\r\n }\r\n </div>\r\n\r\n <div class=\"upload-file__body\">\r\n <div class=\"upload-file__name\">{{ itemName(item) }}</div>\r\n <div class=\"upload-file__meta\">\r\n @if (status === 'error') {\r\n <span class=\"upload-file__error-text\">{{ itemErrorText(item) }}</span>\r\n } @else {\r\n <span>{{ itemMeta(item) }}</span>\r\n }\r\n </div>\r\n\r\n @if (status === 'uploading') {\r\n <div class=\"upload-file__progress\" aria-hidden=\"true\">\r\n <div\r\n class=\"upload-file__progress-bar\"\r\n [style.width.%]=\"itemProgress(item)\"\r\n ></div>\r\n </div>\r\n }\r\n </div>\r\n\r\n <div class=\"upload-file__actions\">\r\n @if (status === 'uploading') {\r\n <span class=\"upload-file__percent\">{{ itemProgress(item) }}%</span>\r\n @if (showRemove()) {\r\n <button\r\n type=\"button\"\r\n class=\"upload-file__action\"\r\n (click)=\"removeItem(item, $event)\"\r\n aria-label=\"Cancel\"\r\n >\r\n <i-lucide [img]=\"closeIcon\"></i-lucide>\r\n </button>\r\n } } @else if (status === 'error') {\r\n <button\r\n type=\"button\"\r\n class=\"upload-file__action upload-file__action--retry\"\r\n (click)=\"retryItem(item, $event)\"\r\n aria-label=\"Retry\"\r\n >\r\n <i-lucide [img]=\"retryIcon\"></i-lucide>\r\n </button>\r\n @if (showRemove()) {\r\n <button\r\n type=\"button\"\r\n class=\"upload-file__action\"\r\n (click)=\"removeItem(item, $event)\"\r\n aria-label=\"Remove\"\r\n >\r\n <i-lucide [img]=\"removeIcon\"></i-lucide>\r\n </button>\r\n } } @else { @if (showSuccessMark()) {\r\n <i-lucide [img]=\"checkIcon\" class=\"upload-file__success\"></i-lucide>\r\n } @if (showRemove()) {\r\n <button\r\n type=\"button\"\r\n class=\"upload-file__action\"\r\n (click)=\"removeItem(item, $event)\"\r\n aria-label=\"Remove\"\r\n >\r\n <i-lucide [img]=\"removeIcon\"></i-lucide>\r\n </button>\r\n } }\r\n </div>\r\n </div>\r\n }\r\n </div>\r\n</ng-template>\r\n","import { Subject } from 'rxjs';\r\n\r\nexport class DialogContainerRef<T = unknown> {\r\n private readonly subject = new Subject<T | null>();\r\n readonly afterClosed$ = this.subject.asObservable();\r\n\r\n close(result?: T): void {\r\n this.subject.next(result ?? null);\r\n this.subject.complete();\r\n }\r\n}\r\n","import { InjectionToken } from '@angular/core';\r\n\r\nexport const DIALOG_DATA = new InjectionToken<unknown>('DIALOG_DATA');\r\n","import { ChangeDetectionStrategy, Component, inject } from '@angular/core';\r\nimport {\r\n CircleCheckIcon,\r\n CircleHelpIcon,\r\n InfoIcon,\r\n LucideAngularModule,\r\n Trash2Icon,\r\n TriangleAlertIcon,\r\n XIcon,\r\n type LucideIconData,\r\n} from 'lucide-angular';\r\nimport { DialogContainerRef } from './s-dialog-container.ref';\r\nimport { DIALOG_DATA } from './s-dialog-container.token';\r\n\r\nexport type ConfirmDialogVariant = 'danger' | 'warning' | 'confirm' | 'info' | 'success';\r\n\r\nexport interface ConfirmDialogDetail {\r\n readonly label: string;\r\n readonly value: string | number | null | undefined;\r\n}\r\n\r\nexport interface DeleteConfirmDialogData {\r\n readonly variant?: ConfirmDialogVariant | null;\r\n readonly type?: ConfirmDialogVariant | null;\r\n readonly title?: string | null;\r\n readonly name?: string | null;\r\n readonly username?: string | null;\r\n readonly message?: string | null;\r\n readonly details?: readonly ConfirmDialogDetail[] | null;\r\n readonly cancelText?: string | null;\r\n readonly confirmText?: string | null;\r\n readonly showCancel?: boolean | null;\r\n readonly showClose?: boolean | null;\r\n}\r\n\r\nexport type ConfirmDialogData = DeleteConfirmDialogData;\r\n\r\ninterface ConfirmDialogVariantMeta {\r\n readonly icon: LucideIconData;\r\n readonly title: string;\r\n readonly message: string;\r\n readonly confirmText: string;\r\n readonly showCancel: boolean;\r\n}\r\n\r\nconst CONFIRM_DIALOG_META: Record<ConfirmDialogVariant, ConfirmDialogVariantMeta> = {\r\n danger: {\r\n icon: Trash2Icon,\r\n title: '删除数据',\r\n message: '删除后将无法恢复。',\r\n confirmText: '删除',\r\n showCancel: true,\r\n },\r\n warning: {\r\n icon: TriangleAlertIcon,\r\n title: '警告提示',\r\n message: '当前操作存在风险,请确认是否继续。',\r\n confirmText: '确定',\r\n showCancel: true,\r\n },\r\n confirm: {\r\n icon: CircleHelpIcon,\r\n title: '确认提示',\r\n message: '请确认是否继续当前操作。',\r\n confirmText: '确定',\r\n showCancel: true,\r\n },\r\n info: {\r\n icon: InfoIcon,\r\n title: '提示',\r\n message: '操作已完成。',\r\n confirmText: '知道了',\r\n showCancel: false,\r\n },\r\n success: {\r\n icon: CircleCheckIcon,\r\n title: '操作成功',\r\n message: '操作已成功完成。',\r\n confirmText: '关闭',\r\n showCancel: false,\r\n },\r\n};\r\n\r\n@Component({\r\n selector: 's-delete-confirm-dialog',\r\n imports: [LucideAngularModule],\r\n templateUrl: './delete-confirm-dialog.component.html',\r\n styleUrl: './delete-confirm-dialog.component.scss',\r\n host: {\r\n class: 'confirm-dialog',\r\n '[class.confirm-dialog--danger]': \"variant === 'danger'\",\r\n '[class.confirm-dialog--warning]': \"variant === 'warning'\",\r\n '[class.confirm-dialog--confirm]': \"variant === 'confirm'\",\r\n '[class.confirm-dialog--info]': \"variant === 'info'\",\r\n '[class.confirm-dialog--success]': \"variant === 'success'\",\r\n },\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class DeleteConfirmDialogComponent {\r\n static readonly dialogChrome = 'content';\r\n static readonly dialogSize = 'small';\r\n\r\n private readonly dialogRef = inject(DialogContainerRef<boolean>);\r\n private readonly data = (inject(DIALOG_DATA, { optional: true }) as DeleteConfirmDialogData | null) ?? {};\r\n\r\n protected readonly name = this.data.name ?? this.data.username ?? '';\r\n protected readonly variant = this.resolveVariant(this.data.variant ?? this.data.type);\r\n protected readonly closeIcon = XIcon;\r\n protected readonly icon = CONFIRM_DIALOG_META[this.variant].icon;\r\n protected readonly title = this.data.title ?? this.defaultTitle();\r\n protected readonly message = this.data.message ?? this.defaultMessage();\r\n protected readonly details = this.normalizeDetails(this.data.details);\r\n protected readonly cancelText = this.data.cancelText ?? '取消';\r\n protected readonly confirmText = this.data.confirmText ?? CONFIRM_DIALOG_META[this.variant].confirmText;\r\n protected readonly showCancel = this.data.showCancel ?? CONFIRM_DIALOG_META[this.variant].showCancel;\r\n protected readonly showClose = this.data.showClose ?? true;\r\n protected readonly primaryButtonVariant =\r\n this.variant === 'warning' || this.variant === 'danger' || this.variant === 'success' ? this.variant : 'confirm';\r\n\r\n protected cancel(): void {\r\n this.dialogRef.close(false);\r\n }\r\n\r\n protected confirm(): void {\r\n this.dialogRef.close(true);\r\n }\r\n\r\n private resolveVariant(variant: ConfirmDialogVariant | null | undefined): ConfirmDialogVariant {\r\n return variant ?? 'danger';\r\n }\r\n\r\n private defaultTitle(): string {\r\n if (this.variant === 'danger' && this.name) {\r\n return `删除${this.name}`;\r\n }\r\n\r\n return CONFIRM_DIALOG_META[this.variant].title;\r\n }\r\n\r\n private defaultMessage(): string {\r\n if (this.variant === 'danger') {\r\n return this.name ? `删除后将无法恢复。\\n请确认是否删除“${this.name}”。` : '删除后将无法恢复,请确认是否删除该数据。';\r\n }\r\n\r\n return CONFIRM_DIALOG_META[this.variant].message;\r\n }\r\n\r\n private normalizeDetails(details: readonly ConfirmDialogDetail[] | null | undefined): readonly ConfirmDialogDetail[] {\r\n return (details ?? [])\r\n .filter((detail) => detail.label.trim().length > 0)\r\n .map((detail) => ({\r\n label: detail.label,\r\n value: detail.value ?? '-',\r\n }));\r\n }\r\n}\r\n\r\nexport { DeleteConfirmDialogComponent as ConfirmDialogComponent };\r\n","<div class=\"confirm-dialog__panel\">\r\n @if (showClose) {\r\n <button type=\"button\" class=\"confirm-dialog__close\" aria-label=\"关闭弹窗\" (click)=\"cancel()\">\r\n <lucide-icon [img]=\"closeIcon\" [size]=\"18\" [strokeWidth]=\"1.8\" aria-hidden=\"true\" />\r\n </button>\r\n }\r\n\r\n <div class=\"confirm-dialog__main\">\r\n <div class=\"confirm-dialog__icon\" aria-hidden=\"true\">\r\n <lucide-icon [img]=\"icon\" [size]=\"28\" [strokeWidth]=\"1.9\" />\r\n </div>\r\n\r\n <div class=\"confirm-dialog__content\">\r\n <h2 class=\"confirm-dialog__title\">{{ title }}</h2>\r\n <p class=\"confirm-dialog__message\">{{ message }}</p>\r\n\r\n @if (details.length > 0) {\r\n <dl class=\"confirm-dialog__details\" aria-label=\"详情信息\">\r\n @for (detail of details; track detail.label) {\r\n <div class=\"confirm-dialog__detail-row\">\r\n <dt>{{ detail.label }}</dt>\r\n <dd>{{ detail.value }}</dd>\r\n </div>\r\n }\r\n </dl>\r\n }\r\n </div>\r\n </div>\r\n\r\n <footer class=\"confirm-dialog__footer\">\r\n @if (showCancel) {\r\n <button type=\"button\" class=\"confirm-dialog__button confirm-dialog__button--secondary\" (click)=\"cancel()\">\r\n {{ cancelText }}\r\n </button>\r\n }\r\n <button\r\n type=\"button\"\r\n class=\"confirm-dialog__button confirm-dialog__button--primary\"\r\n [class.confirm-dialog__button--danger]=\"primaryButtonVariant === 'danger'\"\r\n [class.confirm-dialog__button--warning]=\"primaryButtonVariant === 'warning'\"\r\n [class.confirm-dialog__button--success]=\"primaryButtonVariant === 'success'\"\r\n (click)=\"confirm()\"\r\n >\r\n {{ confirmText }}\r\n </button>\r\n </footer>\r\n</div>\r\n","import {\r\n AfterViewInit,\r\n ChangeDetectionStrategy,\r\n Component,\r\n ElementRef,\r\n EventEmitter,\r\n Input,\r\n Injector,\r\n Output,\r\n Type,\r\n ViewChild,\r\n} from '@angular/core';\r\nimport { NgComponentOutlet } from '@angular/common';\r\nimport { FormsModule } from '@angular/forms';\r\n\r\nexport type DialogContainerSize = 'small' | 'standard' | 'large';\r\n\r\n@Component({\r\n selector: 's-dialog-container',\r\n imports: [NgComponentOutlet, FormsModule],\r\n templateUrl: './s-dialog-container.component.html',\r\n styleUrl: './s-dialog-container.component.scss',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class DialogContainerComponent implements AfterViewInit {\r\n @Input() title = '';\r\n @Input() showHeader = true;\r\n @Input() size: DialogContainerSize = 'small';\r\n @Input() component!: Type<unknown>;\r\n @Input() injector!: Injector;\r\n @Output() readonly close = new EventEmitter<void>();\r\n\r\n @ViewChild('dialog', { static: true }) dialogRef!: ElementRef<HTMLDialogElement>;\r\n\r\n ngAfterViewInit(): void {\r\n this.dialogRef.nativeElement.showModal();\r\n }\r\n}\r\n","<dialog\r\n #dialog\r\n class=\"rounded-lg shadow-lg p-6 z-50\"\r\n [class.dialog--chrome-content]=\"!showHeader\"\r\n [class.dialog--size-small]=\"size === 'small'\"\r\n [class.dialog--size-standard]=\"size === 'standard'\"\r\n [class.dialog--size-large]=\"size === 'large'\"\r\n [attr.aria-label]=\"title || '弹窗'\"\r\n (close)=\"close.emit()\"\r\n>\r\n @if (showHeader) {\r\n <div class=\"flex justify-between items-center mb-6 px-4 py-3.5 dialog-header-bg\">\r\n <div class=\"dialog-title text-xl font-bold translate-y-[3px]\">{{ title }}</div>\r\n <button\r\n id=\"closeDialog\"\r\n class=\"dialog-close text-xl cursor-pointer test-sm\"\r\n type=\"button\"\r\n aria-label=\"关闭弹窗\"\r\n (click)=\"dialog.close()\"\r\n >\r\n <i class=\"iconfont icon-window-close test-sm\"></i>\r\n </button>\r\n </div>\r\n }\r\n <ng-container *ngComponentOutlet=\"component; injector: injector\"></ng-container>\r\n</dialog>\r\n","import {\r\n ComponentRef,\r\n Injectable,\r\n Injector,\r\n Type,\r\n ViewContainerRef,\r\n inject,\r\n} from '@angular/core';\r\nimport { PlatformOverlayPortalHost } from '../s-overlay/s-overlay-portal-host';\r\nimport { DialogContainerComponent, type DialogContainerSize } from './s-dialog-container.component';\r\nimport { DialogContainerRef } from './s-dialog-container.ref';\r\nimport { DIALOG_DATA } from './s-dialog-container.token';\r\n\r\nexport type DialogContainerChrome = 'default' | 'content';\r\n\r\nexport interface DialogContainerConfig {\r\n title?: string;\r\n data?: unknown;\r\n viewContainerRef?: ViewContainerRef;\r\n showHeader?: boolean;\r\n size?: DialogContainerSize;\r\n}\r\n\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\nexport class DialogContainerService {\r\n private readonly injector = inject(Injector);\r\n private readonly overlayHost = inject(PlatformOverlayPortalHost);\r\n\r\n open<T>(component: Type<T>, config?: DialogContainerConfig): DialogContainerRef<unknown> {\r\n const contentComponent = component as Type<T> & {\r\n readonly dialogChrome?: DialogContainerChrome;\r\n readonly dialogSize?: DialogContainerSize;\r\n };\r\n const dialogRef = new DialogContainerRef<unknown>();\r\n\r\n const attachedRef = this.overlayHost.attachComponent(DialogContainerComponent, {\r\n injector: this.injector,\r\n viewContainerRef: config?.viewContainerRef,\r\n config: {\r\n disposeOnNavigation: true,\r\n },\r\n });\r\n\r\n if (!attachedRef) {\r\n return dialogRef;\r\n }\r\n\r\n const containerRef: ComponentRef<DialogContainerComponent> = attachedRef.componentRef;\r\n\r\n containerRef.instance.title = config?.title ?? '';\r\n containerRef.instance.showHeader = config?.showHeader ?? contentComponent.dialogChrome !== 'content';\r\n containerRef.instance.size = config?.size ?? contentComponent.dialogSize ?? 'small';\r\n containerRef.instance.component = component;\r\n containerRef.instance.injector = Injector.create({\r\n providers: [\r\n { provide: DIALOG_DATA, useValue: config?.data },\r\n { provide: 'DIALOG_DATA', useValue: config?.data },\r\n { provide: DialogContainerRef, useValue: dialogRef },\r\n ],\r\n parent: this.injector,\r\n });\r\n\r\n dialogRef.afterClosed$.subscribe(() => {\r\n attachedRef.dispose();\r\n });\r\n\r\n containerRef.instance.close.subscribe(() => dialogRef.close());\r\n return dialogRef;\r\n }\r\n}\r\n","import { Subject } from 'rxjs';\r\n\r\nexport class SideDrawerRef<T = unknown> {\r\n private readonly subject = new Subject<T | null>();\r\n readonly afterClosed$ = this.subject.asObservable();\r\n\r\n close(result?: T): void {\r\n this.subject.next(result ?? null);\r\n this.subject.complete();\r\n }\r\n}\r\n","import {\r\n AfterViewInit,\r\n ChangeDetectionStrategy,\r\n Component,\r\n ElementRef,\r\n Injector,\r\n OnDestroy,\r\n Type,\r\n inject,\r\n input,\r\n} from '@angular/core';\r\nimport { NgComponentOutlet } from '@angular/common';\r\n\r\n@Component({\r\n selector: 's-side-drawer-container',\r\n imports: [NgComponentOutlet],\r\n templateUrl: './s-side-drawer-container.component.html',\r\n styleUrl: './s-side-drawer-container.component.scss',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class SideDrawerContainerComponent implements AfterViewInit, OnDestroy {\r\n private static readonly footerSelector = 'platform-drawer-footer';\r\n\r\n private readonly elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\r\n private footerObserver?: MutationObserver;\r\n\r\n readonly title = input('');\r\n readonly closeLabel = input('关闭');\r\n readonly drawerWidth = input('');\r\n readonly component = input.required<Type<unknown>>();\r\n readonly injector = input.required<Injector>();\r\n readonly closeOnMask = input(false);\r\n readonly onClose = input<() => void>(() => undefined);\r\n\r\n ngAfterViewInit(): void {\r\n queueMicrotask(() => {\r\n this.moveActionFooter();\r\n this.observeBodyChanges();\r\n });\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.footerObserver?.disconnect();\r\n }\r\n\r\n protected handleMaskClick(): void {\r\n if (!this.closeOnMask()) {\r\n return;\r\n }\r\n\r\n this.onClose()();\r\n }\r\n\r\n protected handleCloseClick(): void {\r\n this.onClose()();\r\n }\r\n\r\n private observeBodyChanges(): void {\r\n const body =\r\n this.elementRef.nativeElement.querySelector('.side-drawer__body');\r\n if (!body) return;\r\n\r\n this.footerObserver = new MutationObserver(() => this.moveActionFooter());\r\n this.footerObserver.observe(body, { childList: true, subtree: true });\r\n }\r\n\r\n private moveActionFooter(): void {\r\n const root = this.elementRef.nativeElement;\r\n const body = root.querySelector<HTMLElement>('.side-drawer__body');\r\n const footerHost = root.querySelector<HTMLElement>(\r\n '.side-drawer__footer-host',\r\n );\r\n const footer = body?.querySelector<HTMLElement>(\r\n SideDrawerContainerComponent.footerSelector,\r\n );\r\n\r\n if (!footer || !footerHost || footer.parentElement === footerHost) {\r\n return;\r\n }\r\n\r\n footerHost.replaceChildren(footer);\r\n }\r\n}\r\n","<div class=\"side-drawer-mask\">\r\n <aside\r\n class=\"side-drawer\"\r\n role=\"dialog\"\r\n aria-modal=\"true\"\r\n [attr.aria-label]=\"title()\"\r\n [style.width]=\"drawerWidth() || null\"\r\n (click)=\"$event.stopPropagation()\"\r\n >\r\n <header class=\"side-drawer__header\">\r\n <h2>{{ title() }}</h2>\r\n <button\r\n type=\"button\"\r\n class=\"side-drawer__close\"\r\n [attr.aria-label]=\"closeLabel()\"\r\n (click)=\"handleCloseClick()\"\r\n >\r\n ×\r\n </button>\r\n </header>\r\n\r\n <div class=\"side-drawer__body\">\r\n <ng-container\r\n *ngComponentOutlet=\"component(); injector: injector()\"\r\n ></ng-container>\r\n </div>\r\n <div class=\"side-drawer__footer-host\"></div>\r\n </aside>\r\n</div>\r\n","import { InjectionToken } from '@angular/core';\r\n\r\nexport const SIDE_DRAWER_DATA = new InjectionToken<unknown>('SIDE_DRAWER_DATA');\r\n","import {\r\n ComponentRef,\r\n Injectable,\r\n Injector,\r\n Type,\r\n ViewContainerRef,\r\n inject,\r\n} from '@angular/core';\r\nimport { PlatformOverlayPortalHost } from '../s-overlay/s-overlay-portal-host';\r\nimport { SideDrawerContainerComponent } from './s-side-drawer-container.component';\r\nimport { SideDrawerRef } from './s-side-drawer.ref';\r\nimport { SIDE_DRAWER_DATA } from './s-side-drawer.token';\r\n\r\nexport interface SideDrawerConfig {\r\n title?: string;\r\n closeLabel?: string;\r\n closeOnMask?: boolean;\r\n drawerWidth?: string;\r\n data?: unknown;\r\n viewContainerRef?: ViewContainerRef;\r\n}\r\n\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\nexport class SideDrawerService {\r\n private readonly injector = inject(Injector);\r\n private readonly overlayHost = inject(PlatformOverlayPortalHost);\r\n\r\n open<TComponent, TResult = unknown>(component: Type<TComponent>, config?: SideDrawerConfig): SideDrawerRef<TResult> {\r\n const drawerRef = new SideDrawerRef<TResult>();\r\n const attachedRef = this.overlayHost.attachComponent(SideDrawerContainerComponent, {\r\n injector: this.injector,\r\n viewContainerRef: config?.viewContainerRef,\r\n config: {\r\n disposeOnNavigation: true,\r\n },\r\n });\r\n\r\n if (!attachedRef) {\r\n return drawerRef;\r\n }\r\n\r\n const containerRef: ComponentRef<SideDrawerContainerComponent> = attachedRef.componentRef;\r\n\r\n containerRef.setInput('title', config?.title ?? '');\r\n containerRef.setInput('closeLabel', config?.closeLabel ?? '关闭');\r\n containerRef.setInput('drawerWidth', config?.drawerWidth ?? '');\r\n containerRef.setInput('component', component);\r\n containerRef.setInput('closeOnMask', config?.closeOnMask ?? false);\r\n containerRef.setInput('onClose', () => drawerRef.close());\r\n containerRef.setInput(\r\n 'injector',\r\n Injector.create({\r\n providers: [\r\n { provide: SIDE_DRAWER_DATA, useValue: config?.data },\r\n { provide: SideDrawerRef, useValue: drawerRef },\r\n ],\r\n parent: this.injector,\r\n }),\r\n );\r\n\r\n drawerRef.afterClosed$.subscribe(() => {\r\n attachedRef.dispose();\r\n });\r\n\r\n return drawerRef;\r\n }\r\n}\r\n","import { Pipe, PipeTransform } from '@angular/core';\r\n\r\n@Pipe({\r\n name: 'enumPice',\r\n})\r\nexport class EnumPicePipe implements PipeTransform {\r\n transform(key: string, values: Record<string, string>): string {\r\n return values[key];\r\n }\r\n}\r\n","/**\n * Primary compatibility entry point.\n *\n * Public exports are grouped by ownership here so the root API stays a\n * compatibility facade instead of a flat list of implementation files.\n * These groups are the future migration boundary for secondary entry points:\n * core, layouts, components, and overlay.\n */\nexport * from './core';\nexport * from './layouts';\nexport * from './shared';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1","i2","coerceContentGap"],"mappings":"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"}
|