@m1z23r/ngx-ui 1.1.41 → 1.1.43
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.
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"m1z23r-ngx-ui.mjs","sources":["../../../projects/ngx-ui/src/lib/validators/validators.ts","../../../projects/ngx-ui/src/lib/services/sidebar.service.ts","../../../projects/ngx-ui/src/lib/loading/loading.service.ts","../../../projects/ngx-ui/src/lib/dialog/dialog-ref.ts","../../../projects/ngx-ui/src/lib/dialog/dialog.config.ts","../../../projects/ngx-ui/src/lib/dialog/dialog.service.ts","../../../projects/ngx-ui/src/lib/toast/toast.component.ts","../../../projects/ngx-ui/src/lib/toast/toast.component.html","../../../projects/ngx-ui/src/lib/toast/toast-container.component.ts","../../../projects/ngx-ui/src/lib/toast/toast-container.component.html","../../../projects/ngx-ui/src/lib/toast/toast-ref.ts","../../../projects/ngx-ui/src/lib/toast/toast.config.ts","../../../projects/ngx-ui/src/lib/toast/toast.service.ts","../../../projects/ngx-ui/src/lib/components/tabs/tab-ref.ts","../../../projects/ngx-ui/src/lib/components/tabs/tab.config.ts","../../../projects/ngx-ui/src/lib/components/tabs/tabs.service.ts","../../../projects/ngx-ui/src/lib/components/modal/modal.component.ts","../../../projects/ngx-ui/src/lib/components/modal/modal.component.html","../../../projects/ngx-ui/src/lib/loading/loadable.ts","../../../projects/ngx-ui/src/lib/loading/loading.directive.ts","../../../projects/ngx-ui/src/lib/components/button/button.component.ts","../../../projects/ngx-ui/src/lib/components/button/button.component.html","../../../projects/ngx-ui/src/lib/components/input/input.component.ts","../../../projects/ngx-ui/src/lib/components/input/input.component.html","../../../projects/ngx-ui/src/lib/components/table/cell-value.pipe.ts","../../../projects/ngx-ui/src/lib/components/table/table.component.ts","../../../projects/ngx-ui/src/lib/components/table/table.component.html","../../../projects/ngx-ui/src/lib/components/select/option.component.ts","../../../projects/ngx-ui/src/lib/components/select/option.component.html","../../../projects/ngx-ui/src/lib/components/select/option-template.directive.ts","../../../projects/ngx-ui/src/lib/components/select/select.component.ts","../../../projects/ngx-ui/src/lib/components/select/select.component.html","../../../projects/ngx-ui/src/lib/components/dropdown/dropdown-trigger.directive.ts","../../../projects/ngx-ui/src/lib/components/dropdown/dropdown-item.component.ts","../../../projects/ngx-ui/src/lib/components/dropdown/dropdown-item.component.html","../../../projects/ngx-ui/src/lib/components/dropdown/dropdown.component.ts","../../../projects/ngx-ui/src/lib/components/dropdown/dropdown.component.html","../../../projects/ngx-ui/src/lib/components/dropdown/dropdown-divider.component.ts","../../../projects/ngx-ui/src/lib/components/dropdown/dropdown-divider.component.html","../../../projects/ngx-ui/src/lib/components/dropdown/context-menu.directive.ts","../../../projects/ngx-ui/src/lib/components/checkbox/checkbox.component.ts","../../../projects/ngx-ui/src/lib/components/checkbox/checkbox.component.html","../../../projects/ngx-ui/src/lib/components/switch/switch.component.ts","../../../projects/ngx-ui/src/lib/components/switch/switch.component.html","../../../projects/ngx-ui/src/lib/components/badge/badge.component.ts","../../../projects/ngx-ui/src/lib/components/badge/badge.component.html","../../../projects/ngx-ui/src/lib/components/textarea/textarea.component.ts","../../../projects/ngx-ui/src/lib/components/textarea/textarea.component.html","../../../projects/ngx-ui/src/lib/components/progress/progress.component.ts","../../../projects/ngx-ui/src/lib/components/progress/progress.component.html","../../../projects/ngx-ui/src/lib/components/progress/circular-progress.component.ts","../../../projects/ngx-ui/src/lib/components/progress/circular-progress.component.html","../../../projects/ngx-ui/src/lib/components/spinner/spinner.component.ts","../../../projects/ngx-ui/src/lib/components/spinner/spinner.component.html","../../../projects/ngx-ui/src/lib/components/alert/alert.component.ts","../../../projects/ngx-ui/src/lib/components/alert/alert.component.html","../../../projects/ngx-ui/src/lib/components/card/card.component.ts","../../../projects/ngx-ui/src/lib/components/card/card.component.html","../../../projects/ngx-ui/src/lib/components/tooltip/tooltip.directive.ts","../../../projects/ngx-ui/src/lib/components/radio/radio.component.ts","../../../projects/ngx-ui/src/lib/components/radio/radio.component.html","../../../projects/ngx-ui/src/lib/components/radio/radio-group.component.ts","../../../projects/ngx-ui/src/lib/components/radio/radio-group.component.html","../../../projects/ngx-ui/src/lib/components/tabs/tab-icon.directive.ts","../../../projects/ngx-ui/src/lib/components/tabs/tab.component.ts","../../../projects/ngx-ui/src/lib/components/tabs/tab.component.html","../../../projects/ngx-ui/src/lib/components/tabs/tab-active.pipe.ts","../../../projects/ngx-ui/src/lib/components/tabs/tabs.component.ts","../../../projects/ngx-ui/src/lib/components/tabs/tabs.component.html","../../../projects/ngx-ui/src/lib/components/tabs/dynamic-tabs.component.ts","../../../projects/ngx-ui/src/lib/components/accordion/accordion-header.directive.ts","../../../projects/ngx-ui/src/lib/components/accordion/accordion-item.component.ts","../../../projects/ngx-ui/src/lib/components/accordion/accordion-item.component.html","../../../projects/ngx-ui/src/lib/components/accordion/accordion.component.ts","../../../projects/ngx-ui/src/lib/components/accordion/accordion.component.html","../../../projects/ngx-ui/src/lib/components/pagination/pagination.component.ts","../../../projects/ngx-ui/src/lib/components/pagination/pagination.component.html","../../../projects/ngx-ui/src/lib/components/file-chooser/file-size.pipe.ts","../../../projects/ngx-ui/src/lib/components/file-chooser/file-preview.pipe.ts","../../../projects/ngx-ui/src/lib/components/file-chooser/file-chooser.component.ts","../../../projects/ngx-ui/src/lib/components/file-chooser/file-chooser.component.html","../../../projects/ngx-ui/src/lib/components/slider/slider.component.ts","../../../projects/ngx-ui/src/lib/components/slider/slider.component.html","../../../projects/ngx-ui/src/lib/components/chip-input/chip-input.component.ts","../../../projects/ngx-ui/src/lib/components/chip-input/chip-input.component.html","../../../projects/ngx-ui/src/lib/components/datepicker/datepicker.component.ts","../../../projects/ngx-ui/src/lib/components/datepicker/datepicker.component.html","../../../projects/ngx-ui/src/lib/components/timepicker/timepicker.component.ts","../../../projects/ngx-ui/src/lib/components/timepicker/timepicker.component.html","../../../projects/ngx-ui/src/lib/components/datetimepicker/datetimepicker.component.ts","../../../projects/ngx-ui/src/lib/components/datetimepicker/datetimepicker.component.html","../../../projects/ngx-ui/src/lib/components/layout/shell/shell.component.ts","../../../projects/ngx-ui/src/lib/components/layout/shell/shell.component.html","../../../projects/ngx-ui/src/lib/components/layout/navbar/navbar.component.ts","../../../projects/ngx-ui/src/lib/components/layout/navbar/navbar.component.html","../../../projects/ngx-ui/src/lib/components/layout/sidebar/sidebar.component.ts","../../../projects/ngx-ui/src/lib/components/layout/sidebar/sidebar.component.html","../../../projects/ngx-ui/src/lib/components/layout/content/content.component.ts","../../../projects/ngx-ui/src/lib/components/layout/content/content.component.html","../../../projects/ngx-ui/src/lib/components/layout/footer/footer.component.ts","../../../projects/ngx-ui/src/lib/components/layout/footer/footer.component.html","../../../projects/ngx-ui/src/lib/components/layout/sidebar-toggle/sidebar-toggle.component.ts","../../../projects/ngx-ui/src/lib/components/layout/sidebar-toggle/sidebar-toggle.component.html","../../../projects/ngx-ui/src/lib/components/split-pane/split-pane.component.ts","../../../projects/ngx-ui/src/lib/components/split-pane/split-pane.component.html","../../../projects/ngx-ui/src/lib/components/split-pane/split.component.ts","../../../projects/ngx-ui/src/lib/components/split-pane/split.component.html","../../../projects/ngx-ui/src/lib/components/tree/tree-node.component.ts","../../../projects/ngx-ui/src/lib/components/tree/tree-node.component.html","../../../projects/ngx-ui/src/lib/components/tree/tree.component.ts","../../../projects/ngx-ui/src/lib/components/tree/tree.component.html","../../../projects/ngx-ui/src/lib/components/template-input/template-input.component.ts","../../../projects/ngx-ui/src/lib/components/template-input/template-input.component.html","../../../projects/ngx-ui/src/public-api.ts","../../../projects/ngx-ui/src/m1z23r-ngx-ui.ts"],"sourcesContent":["/**\n * Validation error returned by validators\n */\nexport interface ValidationError {\n /** Unique key identifying the error type (e.g., 'required', 'email', 'minLength') */\n key: string;\n /** Human-readable error message */\n message: string;\n}\n\n/**\n * Validator function type\n * Returns a ValidationError if validation fails, null if valid\n */\nexport type ValidatorFn = (value: unknown) => ValidationError | null;\n\n/**\n * Collection of built-in validators for form inputs\n *\n * @example\n * // Using predefined validators\n * <ui-input [validators]=\"[Validators.required, Validators.email]\" />\n *\n * @example\n * // Using validators with parameters\n * <ui-input [validators]=\"[Validators.required, Validators.minLength(3), Validators.maxLength(50)]\" />\n *\n * @example\n * // Custom validator function\n * const noSpaces: ValidatorFn = (value) =>\n * typeof value === 'string' && value.includes(' ')\n * ? { key: 'noSpaces', message: 'Spaces are not allowed' }\n * : null;\n * <ui-input [validatorFn]=\"noSpaces\" />\n */\nexport class Validators {\n /**\n * Validates that the value is not empty\n */\n static required: ValidatorFn = (value: unknown): ValidationError | null => {\n const isEmpty =\n value === null ||\n value === undefined ||\n value === '' ||\n (Array.isArray(value) && value.length === 0);\n\n return isEmpty ? { key: 'required', message: 'This field is required' } : null;\n };\n\n /**\n * Validates email format\n */\n static email: ValidatorFn = (value: unknown): ValidationError | null => {\n if (!value || typeof value !== 'string') return null;\n const emailRegex = /^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,}$/;\n return emailRegex.test(value) ? null : { key: 'email', message: 'Please enter a valid email address' };\n };\n\n /**\n * Validates minimum string length\n */\n static minLength(min: number): ValidatorFn {\n return (value: unknown): ValidationError | null => {\n if (!value || typeof value !== 'string') return null;\n return value.length >= min\n ? null\n : { key: 'minLength', message: `Minimum ${min} characters required` };\n };\n }\n\n /**\n * Validates maximum string length\n */\n static maxLength(max: number): ValidatorFn {\n return (value: unknown): ValidationError | null => {\n if (!value || typeof value !== 'string') return null;\n return value.length <= max\n ? null\n : { key: 'maxLength', message: `Maximum ${max} characters allowed` };\n };\n }\n\n /**\n * Validates minimum numeric value\n */\n static min(min: number): ValidatorFn {\n return (value: unknown): ValidationError | null => {\n if (value === '' || value === null || value === undefined) return null;\n const numValue = typeof value === 'string' ? parseFloat(value) : typeof value === 'number' ? value : NaN;\n if (isNaN(numValue)) return null;\n return numValue >= min\n ? null\n : { key: 'min', message: `Value must be at least ${min}` };\n };\n }\n\n /**\n * Validates maximum numeric value\n */\n static max(max: number): ValidatorFn {\n return (value: unknown): ValidationError | null => {\n if (value === '' || value === null || value === undefined) return null;\n const numValue = typeof value === 'string' ? parseFloat(value) : typeof value === 'number' ? value : NaN;\n if (isNaN(numValue)) return null;\n return numValue <= max\n ? null\n : { key: 'max', message: `Value must be at most ${max}` };\n };\n }\n\n /**\n * Validates against a regex pattern\n */\n static pattern(pattern: RegExp, message?: string): ValidatorFn {\n return (value: unknown): ValidationError | null => {\n if (!value || typeof value !== 'string') return null;\n return pattern.test(value)\n ? null\n : { key: 'pattern', message: message ?? 'Invalid format' };\n };\n }\n\n /**\n * Validates URL format\n */\n static url: ValidatorFn = (value: unknown): ValidationError | null => {\n if (!value || typeof value !== 'string') return null;\n // Stricter URL regex: requires protocol, valid domain with TLD, no spaces\n const urlRegex = /^https?:\\/\\/[a-zA-Z0-9]([a-zA-Z0-9-]*[a-zA-Z0-9])?(\\.[a-zA-Z0-9]([a-zA-Z0-9-]*[a-zA-Z0-9])?)+([/?#].*)?$/;\n return urlRegex.test(value) ? null : { key: 'url', message: 'Please enter a valid URL' };\n };\n\n /**\n * Validates that value contains only numeric characters\n */\n static numeric: ValidatorFn = (value: unknown): ValidationError | null => {\n if (!value || typeof value !== 'string') return null;\n return /^\\d+$/.test(value) ? null : { key: 'numeric', message: 'Only numbers are allowed' };\n };\n\n /**\n * Validates that value contains only alphanumeric characters\n */\n static alphanumeric: ValidatorFn = (value: unknown): ValidationError | null => {\n if (!value || typeof value !== 'string') return null;\n return /^[a-zA-Z0-9]+$/.test(value)\n ? null\n : { key: 'alphanumeric', message: 'Only letters and numbers are allowed' };\n };\n}\n","import { Injectable, signal, computed, effect, PLATFORM_ID, inject } from '@angular/core';\nimport { isPlatformBrowser } from '@angular/common';\n\n@Injectable({ providedIn: 'root' })\nexport class SidebarService {\n private readonly platformId = inject(PLATFORM_ID);\n private readonly MOBILE_BREAKPOINT = 768;\n\n readonly collapsed = signal(false);\n readonly mobileOpen = signal(false);\n readonly isMobile = signal(false);\n\n constructor() {\n if (isPlatformBrowser(this.platformId)) {\n this.checkMobile();\n window.addEventListener('resize', () => this.checkMobile());\n }\n }\n\n private checkMobile(): void {\n const wasMobile = this.isMobile();\n const nowMobile = window.innerWidth < this.MOBILE_BREAKPOINT;\n this.isMobile.set(nowMobile);\n\n // Close mobile sidebar when switching to desktop\n if (wasMobile && !nowMobile) {\n this.mobileOpen.set(false);\n }\n }\n\n toggle(): void {\n if (this.isMobile()) {\n this.mobileOpen.update(v => !v);\n } else {\n this.collapsed.update(v => !v);\n }\n }\n\n expand(): void {\n this.collapsed.set(false);\n }\n\n collapse(): void {\n this.collapsed.set(true);\n }\n\n openMobile(): void {\n this.mobileOpen.set(true);\n }\n\n closeMobile(): void {\n this.mobileOpen.set(false);\n }\n}\n","import { Injectable, signal, computed, Signal } from '@angular/core';\n\n/**\n * Service for managing loading states by identifier.\n *\n * @example\n * ```typescript\n * // In a component or service\n * private loadingService = inject(LoadingService);\n *\n * async login() {\n * this.loadingService.start('login');\n * try {\n * await this.authService.login();\n * } finally {\n * this.loadingService.stop('login');\n * }\n * }\n * ```\n *\n * @example\n * ```html\n * <!-- In template -->\n * <ui-button uiLoading=\"login\">Login</ui-button>\n * ```\n */\n@Injectable({ providedIn: 'root' })\nexport class LoadingService {\n private readonly loadingStates = signal<Map<string, boolean>>(new Map());\n\n /**\n * Starts loading for the given identifier.\n * @param id - Unique identifier for the loading state\n */\n start(id: string): void {\n this.loadingStates.update((states) => {\n const newStates = new Map(states);\n newStates.set(id, true);\n return newStates;\n });\n }\n\n /**\n * Stops loading for the given identifier.\n * @param id - Unique identifier for the loading state\n */\n stop(id: string): void {\n this.loadingStates.update((states) => {\n const newStates = new Map(states);\n newStates.set(id, false);\n return newStates;\n });\n }\n\n /**\n * Sets the loading state for the given identifier.\n * @param id - Unique identifier for the loading state\n * @param loading - Whether loading is active\n */\n set(id: string, loading: boolean): void {\n if (loading) {\n this.start(id);\n } else {\n this.stop(id);\n }\n }\n\n /**\n * Toggles the loading state for the given identifier.\n * @param id - Unique identifier for the loading state\n */\n toggle(id: string): void {\n const current = this.isLoading(id)();\n this.set(id, !current);\n }\n\n /**\n * Returns a signal that indicates whether the given identifier is loading.\n * @param id - Unique identifier for the loading state\n * @returns Signal<boolean> that updates when the loading state changes\n */\n isLoading(id: string): Signal<boolean> {\n return computed(() => this.loadingStates().get(id) ?? false);\n }\n\n /**\n * Returns whether any loading state is active.\n * @returns Signal<boolean> that is true if any identifier is loading\n */\n isAnyLoading(): Signal<boolean> {\n return computed(() => {\n const states = this.loadingStates();\n for (const value of states.values()) {\n if (value) return true;\n }\n return false;\n });\n }\n\n /**\n * Clears the loading state for the given identifier.\n * @param id - Unique identifier to clear\n */\n clear(id: string): void {\n this.loadingStates.update((states) => {\n const newStates = new Map(states);\n newStates.delete(id);\n return newStates;\n });\n }\n\n /**\n * Clears all loading states.\n */\n clearAll(): void {\n this.loadingStates.set(new Map());\n }\n}\n","/**\n * Reference to an opened dialog.\n * Provides methods to close the dialog and access its result.\n */\nexport class DialogRef<TResult = unknown> {\n private resolvePromise!: (value: TResult | undefined) => void;\n private readonly resultPromise: Promise<TResult | undefined>;\n\n constructor(private readonly closeFn: () => void) {\n this.resultPromise = new Promise<TResult | undefined>((resolve) => {\n this.resolvePromise = resolve;\n });\n }\n\n /**\n * Closes the dialog with an optional result value.\n */\n close(result?: TResult): void {\n this.resolvePromise(result);\n this.closeFn();\n }\n\n /**\n * Returns a promise that resolves when the dialog is closed.\n * The promise resolves with the result passed to close(), or undefined if closed without a result.\n */\n afterClosed(): Promise<TResult | undefined> {\n return this.resultPromise;\n }\n}\n","import { InjectionToken } from '@angular/core';\nimport { DialogRef } from './dialog-ref';\n\n/**\n * Injection token for dialog data passed to the component.\n */\nexport const DIALOG_DATA = new InjectionToken<unknown>('DIALOG_DATA');\n\n/**\n * Injection token for the dialog reference.\n */\nexport const DIALOG_REF = new InjectionToken<DialogRef>('DIALOG_REF');\n\n/**\n * Size options for the modal.\n */\nexport type ModalSize = 'sm' | 'md' | 'lg' | 'xl' | 'full';\n\n/**\n * Configuration options for opening a dialog.\n */\nexport interface DialogConfig<TData = unknown> {\n /** Data to pass to the dialog component via DIALOG_DATA injection token */\n data?: TData;\n /** Width of the modal (CSS value, e.g., '500px', '80%') */\n width?: string;\n /** Maximum width of the modal (CSS value) */\n maxWidth?: string;\n /** Predefined size preset */\n size?: ModalSize;\n /** Whether clicking the backdrop closes the dialog */\n closeOnBackdropClick?: boolean;\n /** Whether pressing Escape closes the dialog */\n closeOnEscape?: boolean;\n /** Custom CSS class to add to the modal container */\n panelClass?: string;\n}\n\n/**\n * Default dialog configuration.\n */\nexport const DEFAULT_DIALOG_CONFIG: Required<Omit<DialogConfig, 'data' | 'width' | 'maxWidth' | 'panelClass'>> = {\n size: 'md',\n closeOnBackdropClick: true,\n closeOnEscape: true,\n};\n","import {\n ApplicationRef,\n ComponentRef,\n createComponent,\n EnvironmentInjector,\n inject,\n Injectable,\n Injector,\n PLATFORM_ID,\n StaticProvider,\n Type,\n} from '@angular/core';\nimport { DOCUMENT, isPlatformBrowser } from '@angular/common';\nimport { DialogRef } from './dialog-ref';\nimport { DIALOG_DATA, DIALOG_REF, DialogConfig, DEFAULT_DIALOG_CONFIG } from './dialog.config';\n\n/**\n * Service for opening modal dialogs.\n *\n * @example\n * ```typescript\n * @Component({ ... })\n * export class MyDialog {\n * private dialogRef = inject(DIALOG_REF) as DialogRef<string>;\n * private data = inject(DIALOG_DATA) as { message: string };\n *\n * confirm() {\n * this.dialogRef.close('confirmed');\n * }\n * }\n *\n * // Usage:\n * const dialogRef = this.dialogService.open(MyDialog, {\n * data: { message: 'Hello' },\n * size: 'md'\n * });\n *\n * const result = await dialogRef.afterClosed();\n * ```\n */\n@Injectable({ providedIn: 'root' })\nexport class DialogService {\n private readonly appRef = inject(ApplicationRef);\n private readonly injector = inject(EnvironmentInjector);\n private readonly document = inject(DOCUMENT);\n private readonly platformId = inject(PLATFORM_ID);\n\n /**\n * Opens a dialog with the specified component.\n *\n * @param component - The component to render inside the dialog\n * @param config - Configuration options for the dialog\n * @returns A DialogRef that can be used to close the dialog and get results\n */\n open<TComponent, TData = unknown, TResult = unknown>(\n component: Type<TComponent>,\n config: DialogConfig<TData> = {}\n ): DialogRef<TResult> {\n const mergedConfig = { ...DEFAULT_DIALOG_CONFIG, ...config };\n const dialogRef = new DialogRef<TResult>(() => this.destroy(componentRef));\n\n const injector = this.createInjector(config.data, dialogRef);\n const componentRef = createComponent(component, {\n environmentInjector: this.injector,\n elementInjector: injector,\n });\n\n // Store config on the host element for the component to access\n const hostElement = componentRef.location.nativeElement as HTMLElement;\n hostElement.dataset['dialogConfig'] = JSON.stringify(mergedConfig);\n\n this.appRef.attachView(componentRef.hostView);\n if (isPlatformBrowser(this.platformId)) {\n this.document.body.appendChild(hostElement);\n }\n\n return dialogRef;\n }\n\n private destroy(componentRef: ComponentRef<unknown>): void {\n this.appRef.detachView(componentRef.hostView);\n componentRef.destroy();\n }\n\n private createInjector<TData, TResult>(data: TData | undefined, dialogRef: DialogRef<TResult>): Injector {\n const providers: StaticProvider[] = [\n { provide: DIALOG_DATA, useValue: data },\n { provide: DIALOG_REF, useValue: dialogRef },\n ];\n\n return Injector.create({\n providers,\n parent: this.injector,\n });\n }\n}\n","import {\n Component,\n input,\n output,\n signal,\n computed,\n OnInit,\n OnDestroy,\n ChangeDetectionStrategy,\n} from '@angular/core';\nimport type { ToastData } from './toast.config';\n\n@Component({\n selector: 'ui-toast',\n standalone: true,\n templateUrl: './toast.component.html',\n styleUrl: './toast.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ToastComponent implements OnInit, OnDestroy {\n readonly data = input.required<ToastData>();\n\n readonly dismissed = output<string>();\n\n protected readonly isExiting = signal(false);\n\n private timeoutId: ReturnType<typeof setTimeout> | null = null;\n\n protected readonly toastClasses = computed(() => {\n return `ui-toast--${this.data().variant}`;\n });\n\n ngOnInit(): void {\n const duration = this.data().duration;\n if (duration > 0) {\n this.timeoutId = setTimeout(() => this.dismiss(), duration);\n }\n }\n\n ngOnDestroy(): void {\n if (this.timeoutId) {\n clearTimeout(this.timeoutId);\n }\n }\n\n dismiss(): void {\n if (this.isExiting()) return;\n this.isExiting.set(true);\n // Wait for exit animation (300ms)\n setTimeout(() => {\n this.dismissed.emit(this.data().id);\n }, 300);\n }\n}\n","<div\n class=\"ui-toast\"\n [class]=\"toastClasses()\"\n [class.ui-toast--exiting]=\"isExiting()\"\n role=\"alert\"\n aria-live=\"polite\"\n>\n <div class=\"ui-toast__icon\">\n @switch (data().variant) {\n @case ('success') {\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\">\n <path d=\"M22 11.08V12a10 10 0 1 1-5.93-9.14\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n <polyline points=\"22 4 12 14.01 9 11.01\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n }\n @case ('error') {\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\">\n <circle cx=\"12\" cy=\"12\" r=\"10\"/>\n <line x1=\"15\" y1=\"9\" x2=\"9\" y2=\"15\" stroke-linecap=\"round\"/>\n <line x1=\"9\" y1=\"9\" x2=\"15\" y2=\"15\" stroke-linecap=\"round\"/>\n </svg>\n }\n @case ('warning') {\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\">\n <path d=\"M10.29 3.86L1.82 18a2 2 0 0 0 1.71 3h16.94a2 2 0 0 0 1.71-3L13.71 3.86a2 2 0 0 0-3.42 0z\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n <line x1=\"12\" y1=\"9\" x2=\"12\" y2=\"13\" stroke-linecap=\"round\"/>\n <line x1=\"12\" y1=\"17\" x2=\"12.01\" y2=\"17\" stroke-linecap=\"round\"/>\n </svg>\n }\n @case ('info') {\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\">\n <circle cx=\"12\" cy=\"12\" r=\"10\"/>\n <line x1=\"12\" y1=\"16\" x2=\"12\" y2=\"12\" stroke-linecap=\"round\"/>\n <line x1=\"12\" y1=\"8\" x2=\"12.01\" y2=\"8\" stroke-linecap=\"round\"/>\n </svg>\n }\n }\n </div>\n <div class=\"ui-toast__content\">\n @if (data().title) {\n <div class=\"ui-toast__title\">{{ data().title }}</div>\n }\n <div class=\"ui-toast__message\">{{ data().message }}</div>\n </div>\n @if (data().dismissible) {\n <button\n type=\"button\"\n class=\"ui-toast__close\"\n aria-label=\"Dismiss\"\n (click)=\"dismiss()\"\n >\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\">\n <line x1=\"18\" y1=\"6\" x2=\"6\" y2=\"18\" stroke-linecap=\"round\"/>\n <line x1=\"6\" y1=\"6\" x2=\"18\" y2=\"18\" stroke-linecap=\"round\"/>\n </svg>\n </button>\n }\n @if (data().showProgress && data().duration > 0) {\n <div class=\"ui-toast__progress\">\n <div\n class=\"ui-toast__progress-bar\"\n [style.animation-duration.ms]=\"data().duration\"\n ></div>\n </div>\n }\n</div>\n","import {\n Component,\n input,\n ChangeDetectionStrategy,\n} from '@angular/core';\nimport { ToastComponent } from './toast.component';\nimport type { ToastData, ToastPosition } from './toast.config';\n\n@Component({\n selector: 'ui-toast-container',\n standalone: true,\n imports: [ToastComponent],\n templateUrl: './toast-container.component.html',\n styleUrl: './toast-container.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ToastContainerComponent {\n readonly toasts = input<ToastData[]>([]);\n readonly position = input<ToastPosition>('top-right');\n readonly onDismissCallback = input<(id: string) => void>(() => {});\n\n protected containerClass(): string {\n return `ui-toast-container--${this.position()}`;\n }\n\n protected onDismiss(id: string): void {\n this.onDismissCallback()(id);\n }\n}\n","<div class=\"ui-toast-container\" [class]=\"containerClass()\">\n @for (toast of toasts(); track toast.id) {\n <ui-toast\n [data]=\"toast\"\n (dismissed)=\"onDismiss($event)\"\n />\n }\n</div>\n","/**\n * Reference to an active toast notification.\n * Used to programmatically dismiss a toast.\n */\nexport class ToastRef {\n private _dismissed = false;\n private _dismissFn: (() => void) | null = null;\n\n constructor(\n public readonly id: string,\n private readonly onDismiss: (id: string) => void\n ) {}\n\n /** Whether the toast has been dismissed */\n get dismissed(): boolean {\n return this._dismissed;\n }\n\n /** Dismiss this toast */\n dismiss(): void {\n if (this._dismissed) return;\n this._dismissed = true;\n this.onDismiss(this.id);\n this._dismissFn?.();\n }\n\n /** @internal */\n _setDismissFn(fn: () => void): void {\n this._dismissFn = fn;\n }\n}\n","import { InjectionToken } from '@angular/core';\n\nexport type ToastVariant = 'success' | 'error' | 'warning' | 'info';\nexport type ToastPosition =\n | 'top-right'\n | 'top-left'\n | 'top-center'\n | 'bottom-right'\n | 'bottom-left'\n | 'bottom-center';\n\nexport interface ToastConfig {\n /** Toast message */\n message: string;\n /** Optional title */\n title?: string;\n /** Toast variant/type */\n variant?: ToastVariant;\n /** Duration in ms (0 = no auto-dismiss) */\n duration?: number;\n /** Position on screen */\n position?: ToastPosition;\n /** Show close button */\n dismissible?: boolean;\n /** Show progress bar for auto-dismiss */\n showProgress?: boolean;\n /** Max visible toasts (0 = unlimited, oldest dismissed when exceeded) */\n maxVisible?: number;\n}\n\nexport interface ToastData extends Required<Omit<ToastConfig, 'title' | 'maxVisible'>> {\n id: string;\n title?: string;\n}\n\nexport const DEFAULT_TOAST_CONFIG: Omit<Required<ToastConfig>, 'message' | 'title'> = {\n variant: 'info',\n duration: 5000,\n position: 'top-right',\n dismissible: true,\n showProgress: true,\n maxVisible: 3,\n};\n\nexport const TOAST_DATA = new InjectionToken<ToastData>('TOAST_DATA');\n","import {\n ApplicationRef,\n ComponentRef,\n createComponent,\n EnvironmentInjector,\n inject,\n Injectable,\n PLATFORM_ID,\n signal,\n} from '@angular/core';\nimport { DOCUMENT, isPlatformBrowser } from '@angular/common';\nimport { ToastContainerComponent } from './toast-container.component';\nimport { ToastRef } from './toast-ref';\nimport {\n ToastConfig,\n ToastData,\n ToastPosition,\n ToastVariant,\n DEFAULT_TOAST_CONFIG,\n} from './toast.config';\n\n/**\n * Service for showing toast notifications.\n *\n * @example\n * ```typescript\n * // Simple usage\n * this.toastService.success('File saved successfully');\n * this.toastService.error('Failed to save file', 'Error');\n *\n * // With custom duration (3 seconds)\n * this.toastService.warning('Session expiring soon', 'Warning', 3000);\n *\n * // Persistent toast (no auto-dismiss)\n * this.toastService.info('Processing...', undefined, 0);\n *\n * // With full config\n * const toastRef = this.toastService.show({\n * message: 'Custom toast',\n * variant: 'info',\n * duration: 3000,\n * position: 'bottom-right'\n * });\n *\n * // Dismiss programmatically\n * toastRef.dismiss();\n *\n * // Dismiss all\n * this.toastService.dismissAll();\n * ```\n */\n@Injectable({ providedIn: 'root' })\nexport class ToastService {\n private readonly appRef = inject(ApplicationRef);\n private readonly injector = inject(EnvironmentInjector);\n private readonly document = inject(DOCUMENT);\n private readonly platformId = inject(PLATFORM_ID);\n\n private containerRef: ComponentRef<ToastContainerComponent> | null = null;\n private readonly toasts = signal<ToastData[]>([]);\n private readonly toastRefs = new Map<string, ToastRef>();\n private idCounter = 0;\n private currentPosition: ToastPosition = DEFAULT_TOAST_CONFIG.position;\n\n /**\n * Show a toast with custom configuration.\n */\n show(config: ToastConfig): ToastRef {\n const id = `toast-${++this.idCounter}`;\n const position = config.position ?? DEFAULT_TOAST_CONFIG.position;\n const maxVisible = config.maxVisible ?? DEFAULT_TOAST_CONFIG.maxVisible;\n\n // If position changed, dismiss all existing toasts\n if (this.toasts().length > 0 && position !== this.currentPosition) {\n this.dismissAll();\n }\n this.currentPosition = position;\n\n // Enforce max visible limit - dismiss oldest toasts to make room\n if (maxVisible > 0) {\n const currentToasts = this.toasts();\n const toRemoveCount = currentToasts.length - maxVisible + 1;\n if (toRemoveCount > 0) {\n const toastsToRemove = currentToasts.slice(0, toRemoveCount);\n for (const toast of toastsToRemove) {\n this.dismiss(toast.id);\n }\n }\n }\n\n const toastData: ToastData = {\n id,\n message: config.message,\n title: config.title,\n variant: config.variant ?? DEFAULT_TOAST_CONFIG.variant,\n duration: config.duration ?? DEFAULT_TOAST_CONFIG.duration,\n position,\n dismissible: config.dismissible ?? DEFAULT_TOAST_CONFIG.dismissible,\n showProgress: config.showProgress ?? DEFAULT_TOAST_CONFIG.showProgress,\n };\n\n const toastRef = new ToastRef(id, (toastId) => this.dismiss(toastId));\n this.toastRefs.set(id, toastRef);\n\n this.toasts.update(list => [...list, toastData]);\n this.ensureContainer();\n\n return toastRef;\n }\n\n /**\n * Show a success toast.\n * @param message Toast message\n * @param title Optional title\n * @param duration Optional duration in ms (0 = no auto-dismiss)\n */\n success(message: string, title?: string, duration?: number): ToastRef {\n return this.show({ message, title, variant: 'success', duration });\n }\n\n /**\n * Show an error toast.\n * @param message Toast message\n * @param title Optional title\n * @param duration Optional duration in ms (0 = no auto-dismiss)\n */\n error(message: string, title?: string, duration?: number): ToastRef {\n return this.show({ message, title, variant: 'error', duration });\n }\n\n /**\n * Show a warning toast.\n * @param message Toast message\n * @param title Optional title\n * @param duration Optional duration in ms (0 = no auto-dismiss)\n */\n warning(message: string, title?: string, duration?: number): ToastRef {\n return this.show({ message, title, variant: 'warning', duration });\n }\n\n /**\n * Show an info toast.\n * @param message Toast message\n * @param title Optional title\n * @param duration Optional duration in ms (0 = no auto-dismiss)\n */\n info(message: string, title?: string, duration?: number): ToastRef {\n return this.show({ message, title, variant: 'info', duration });\n }\n\n /**\n * Dismiss a specific toast by ID.\n */\n dismiss(id: string): void {\n this.toasts.update(list => list.filter(t => t.id !== id));\n this.toastRefs.delete(id);\n\n if (this.toasts().length === 0) {\n this.destroyContainer();\n }\n }\n\n /**\n * Dismiss all toasts.\n */\n dismissAll(): void {\n this.toasts.set([]);\n this.toastRefs.clear();\n this.destroyContainer();\n }\n\n private ensureContainer(): void {\n if (this.containerRef) {\n this.updateContainer();\n return;\n }\n\n this.containerRef = createComponent(ToastContainerComponent, {\n environmentInjector: this.injector,\n });\n\n this.updateContainer();\n this.appRef.attachView(this.containerRef.hostView);\n if (isPlatformBrowser(this.platformId)) {\n this.document.body.appendChild(this.containerRef.location.nativeElement);\n }\n }\n\n private updateContainer(): void {\n if (!this.containerRef) return;\n\n this.containerRef.setInput('toasts', this.toasts());\n this.containerRef.setInput('position', this.currentPosition);\n this.containerRef.setInput('onDismissCallback', (id: string) => this.dismiss(id));\n this.containerRef.changeDetectorRef.detectChanges();\n }\n\n private destroyContainer(): void {\n if (!this.containerRef) return;\n\n this.appRef.detachView(this.containerRef.hostView);\n this.containerRef.destroy();\n this.containerRef = null;\n }\n}\n","import { signal, Signal } from '@angular/core';\n\n/**\n * Reference to a dynamically created tab.\n * Provides methods to close the tab and access its result.\n */\nexport class TabRef<TResult = unknown> {\n private resolvePromise!: (value: TResult | undefined) => void;\n private readonly resultPromise: Promise<TResult | undefined>;\n private readonly _isActive = signal(false);\n\n /** Unique identifier for this tab */\n readonly id: string;\n\n /** Whether this tab is currently active */\n readonly isActive: Signal<boolean> = this._isActive.asReadonly();\n\n constructor(\n id: string,\n private readonly closeFn: (tabRef: TabRef<TResult>) => void,\n private readonly activateFn: (tabRef: TabRef<TResult>) => void\n ) {\n this.id = id;\n this.resultPromise = new Promise<TResult | undefined>((resolve) => {\n this.resolvePromise = resolve;\n });\n }\n\n /**\n * Closes the tab with an optional result value.\n */\n close(result?: TResult): void {\n this.resolvePromise(result);\n this.closeFn(this);\n }\n\n /**\n * Activates this tab.\n */\n activate(): void {\n this.activateFn(this);\n }\n\n /**\n * Returns a promise that resolves when the tab is closed.\n * The promise resolves with the result passed to close(), or undefined if closed without a result.\n */\n afterClosed(): Promise<TResult | undefined> {\n return this.resultPromise;\n }\n\n /** @internal */\n _setActive(active: boolean): void {\n this._isActive.set(active);\n }\n}\n","import { InjectionToken, TemplateRef, Type } from '@angular/core';\nimport { TabRef } from './tab-ref';\n\n/**\n * Injection token for tab data passed to the component.\n */\nexport const TAB_DATA = new InjectionToken<unknown>('TAB_DATA');\n\n/**\n * Injection token for the tab reference.\n */\nexport const TAB_REF = new InjectionToken<TabRef>('TAB_REF');\n\n/**\n * Configuration for a dynamic tab.\n */\nexport interface DynamicTabConfig<TData = unknown> {\n /** Label displayed in the tab header */\n label: string;\n /** Optional icon template */\n icon?: TemplateRef<unknown>;\n /** Data to pass to the tab component via TAB_DATA injection token */\n data?: TData;\n /** Whether the tab can be closed (default: true) */\n closable?: boolean;\n /** Whether to activate the tab immediately after creation (default: true) */\n activate?: boolean;\n /** Optional unique ID for the tab */\n id?: string;\n}\n\n/**\n * Internal representation of a dynamic tab.\n * @internal\n */\nexport interface DynamicTab<TData = unknown, TResult = unknown> {\n id: string;\n label: string;\n icon?: TemplateRef<unknown>;\n component: Type<unknown>;\n data?: TData;\n closable: boolean;\n tabRef: TabRef<TResult>;\n}\n\n/**\n * Controls how inactive tab panels are handled.\n * - `'conditional'` (default): Inactive panels are removed from the DOM (destroyed/recreated on switch).\n * - `'persistent'`: All panels stay in the DOM, inactive ones are hidden via CSS `display: none`.\n * Use this to preserve component state across tab switches.\n */\nexport type TabRenderMode = 'conditional' | 'persistent';\n\n/**\n * Default configuration for dynamic tabs.\n */\nexport const DEFAULT_TAB_CONFIG: Required<Omit<DynamicTabConfig, 'label' | 'data' | 'icon' | 'id'>> = {\n closable: true,\n activate: true,\n};\n","import { Injectable, Injector, signal, Type, computed } from '@angular/core';\nimport { TabRef } from './tab-ref';\nimport {\n TAB_DATA,\n TAB_REF,\n DynamicTabConfig,\n DynamicTab,\n DEFAULT_TAB_CONFIG,\n} from './tab.config';\n\n/**\n * Service for managing dynamic tabs.\n *\n * @example\n * ```typescript\n * @Component({ ... })\n * export class MyTabContent {\n * private tabRef = inject(TAB_REF) as TabRef<string>;\n * private data = inject(TAB_DATA) as { message: string };\n *\n * save() {\n * this.tabRef.close('saved');\n * }\n * }\n *\n * // In parent component:\n * const tabRef = this.tabsService.open(MyTabContent, {\n * label: 'New Tab',\n * data: { message: 'Hello' },\n * closable: true\n * });\n *\n * const result = await tabRef.afterClosed();\n * ```\n */\n@Injectable({ providedIn: 'root' })\nexport class TabsService {\n private readonly _tabs = signal<DynamicTab[]>([]);\n private readonly _activeTabId = signal<string | null>(null);\n private idCounter = 0;\n\n /** All currently open tabs */\n readonly tabs = this._tabs.asReadonly();\n\n /** ID of the currently active tab */\n readonly activeTabId = this._activeTabId.asReadonly();\n\n /** The currently active tab */\n readonly activeTab = computed(() => {\n const activeId = this._activeTabId();\n return this._tabs().find((t) => t.id === activeId) ?? null;\n });\n\n /**\n * Opens a new tab with the specified component.\n *\n * @param component - The component to render inside the tab\n * @param config - Configuration options for the tab\n * @returns A TabRef that can be used to close the tab and get results\n */\n open<TComponent, TData = unknown, TResult = unknown>(\n component: Type<TComponent>,\n config: DynamicTabConfig<TData>\n ): TabRef<TResult> {\n const mergedConfig = { ...DEFAULT_TAB_CONFIG, ...config };\n const id = config.id ?? `tab-${++this.idCounter}`;\n\n const tabRef = new TabRef<TResult>(\n id,\n (ref) => this.close(ref),\n (ref) => this.activate(ref)\n );\n\n const tab: DynamicTab = {\n id,\n label: config.label,\n icon: config.icon,\n component,\n data: config.data,\n closable: mergedConfig.closable,\n tabRef: tabRef as TabRef<unknown>,\n };\n\n this._tabs.update((tabs) => [...tabs, tab]);\n\n if (mergedConfig.activate) {\n this.activateById(id);\n }\n\n return tabRef;\n }\n\n /**\n * Closes a tab by its TabRef.\n */\n close<TResult>(tabRef: TabRef<TResult>): void {\n this.closeById(tabRef.id);\n }\n\n /**\n * Closes a tab by its ID.\n */\n closeById(id: string): void {\n const tabs = this._tabs();\n const index = tabs.findIndex((t) => t.id === id);\n\n if (index === -1) return;\n\n // If closing the active tab, activate another one\n if (this._activeTabId() === id) {\n const newActiveTab = tabs[index + 1] ?? tabs[index - 1];\n this._activeTabId.set(newActiveTab?.id ?? null);\n if (newActiveTab) {\n newActiveTab.tabRef._setActive(true);\n }\n }\n\n // Update the closed tab's active state\n tabs[index].tabRef._setActive(false);\n\n this._tabs.update((t) => t.filter((tab) => tab.id !== id));\n }\n\n /**\n * Closes all tabs.\n */\n closeAll(): void {\n this._tabs().forEach((tab) => {\n tab.tabRef._setActive(false);\n });\n this._tabs.set([]);\n this._activeTabId.set(null);\n }\n\n /**\n * Activates a tab by its TabRef.\n */\n activate<TResult>(tabRef: TabRef<TResult>): void {\n this.activateById(tabRef.id);\n }\n\n /**\n * Activates a tab by its ID.\n */\n activateById(id: string): void {\n const tabs = this._tabs();\n const tab = tabs.find((t) => t.id === id);\n\n if (!tab) return;\n\n // Deactivate current tab\n const currentActive = tabs.find((t) => t.id === this._activeTabId());\n if (currentActive) {\n currentActive.tabRef._setActive(false);\n }\n\n // Activate new tab\n tab.tabRef._setActive(true);\n this._activeTabId.set(id);\n }\n\n /**\n * Creates an injector with TAB_DATA and TAB_REF for a tab component.\n * @internal\n */\n _createInjector<TData, TResult>(\n parentInjector: Injector,\n data: TData | undefined,\n tabRef: TabRef<TResult>\n ): Injector {\n return Injector.create({\n providers: [\n { provide: TAB_DATA, useValue: data },\n { provide: TAB_REF, useValue: tabRef },\n ],\n parent: parentInjector,\n });\n }\n\n /**\n * Gets a tab by its ID.\n */\n getTab(id: string): DynamicTab | undefined {\n return this._tabs().find((t) => t.id === id);\n }\n\n /**\n * Updates a tab's label.\n */\n updateLabel(id: string, label: string): void {\n this._tabs.update((tabs) =>\n tabs.map((tab) => (tab.id === id ? { ...tab, label } : tab))\n );\n }\n}\n","import {\n Component,\n ChangeDetectionStrategy,\n inject,\n input,\n signal,\n HostListener,\n ElementRef,\n OnInit,\n} from '@angular/core';\nimport { DIALOG_REF } from '../../dialog/dialog.config';\nimport { DialogRef } from '../../dialog/dialog-ref';\n\n/**\n * Modal wrapper component with backdrop, header, body, and footer slots.\n * Uses content projection for flexible content.\n *\n * @example\n * ```html\n * <ui-modal [title]=\"'Confirm Action'\" [size]=\"'md'\" [closeOnBackdropClick]=\"true\">\n * <p>Are you sure you want to proceed?</p>\n *\n * <ng-container footer>\n * <ui-button variant=\"outline\" (clicked)=\"dialogRef.close()\">Cancel</ui-button>\n * <ui-button variant=\"primary\" (clicked)=\"confirm()\">Confirm</ui-button>\n * </ng-container>\n * </ui-modal>\n * ```\n */\n@Component({\n selector: 'ui-modal',\n standalone: true,\n templateUrl: './modal.component.html',\n styleUrl: './modal.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ModalComponent implements OnInit {\n private readonly dialogRef = inject(DIALOG_REF, { optional: true }) as DialogRef | null;\n private readonly elementRef = inject(ElementRef);\n\n /** Tracks if mousedown started on the backdrop (to prevent close on drag-out) */\n private readonly mouseDownOnBackdrop = signal(false);\n\n /** Title displayed in the modal header */\n readonly title = input<string>();\n\n /** Modal size preset */\n readonly size = input<'sm' | 'md' | 'lg' | 'xl' | 'full'>('md');\n\n /** Custom width (overrides size preset) */\n readonly width = input<string>();\n\n /** Custom max-width (overrides size preset) */\n readonly maxWidth = input<string>();\n\n /** Whether clicking the backdrop closes the modal */\n readonly closeOnBackdropClick = input(true);\n\n /** Whether pressing Escape closes the modal */\n readonly closeOnEscape = input(true);\n\n /** Whether to show the close button in the header */\n readonly showCloseButton = input(true);\n\n /** Custom CSS class for the container */\n readonly panelClass = input<string>();\n\n ngOnInit(): void {\n // Read config from host element if opened via DialogService\n const hostElement = this.elementRef.nativeElement as HTMLElement;\n const configJson = hostElement.parentElement?.dataset?.['dialogConfig'];\n if (configJson) {\n // Config was passed via DialogService, values are already set via inputs\n }\n }\n\n @HostListener('document:keydown.escape')\n onEscapePress(): void {\n if (this.closeOnEscape()) {\n this.close();\n }\n }\n\n onBackdropMouseDown(event: MouseEvent): void {\n this.mouseDownOnBackdrop.set(event.target === event.currentTarget);\n }\n\n onBackdropClick(event: MouseEvent): void {\n // Only close if both mousedown AND mouseup happened on the backdrop\n if (\n this.mouseDownOnBackdrop() &&\n event.target === event.currentTarget &&\n this.closeOnBackdropClick()\n ) {\n this.close();\n }\n this.mouseDownOnBackdrop.set(false);\n }\n\n close(): void {\n this.dialogRef?.close();\n }\n\n protected containerClasses(): string {\n const classes = [`ui-modal--${this.size()}`];\n if (this.panelClass()) {\n classes.push(this.panelClass()!);\n }\n return classes.join(' ');\n }\n}\n","<div class=\"ui-modal__backdrop\" (mousedown)=\"onBackdropMouseDown($event)\" (click)=\"onBackdropClick($event)\">\n <div\n class=\"ui-modal__container\"\n [class]=\"containerClasses()\"\n [style.width]=\"width()\"\n [style.max-width]=\"maxWidth()\"\n role=\"dialog\"\n aria-modal=\"true\"\n >\n @if (title()) {\n <div class=\"ui-modal__header\">\n <h2 class=\"ui-modal__title\">{{ title() }}</h2>\n @if (showCloseButton()) {\n <button\n type=\"button\"\n class=\"ui-modal__close\"\n aria-label=\"Close\"\n (click)=\"close()\"\n >\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\">\n <path d=\"M18 6L6 18M6 6l12 12\"/>\n </svg>\n </button>\n }\n </div>\n }\n\n <div class=\"ui-modal__body\">\n <ng-content />\n </div>\n\n <div class=\"ui-modal__footer\">\n <ng-content select=\"[footer]\" />\n </div>\n </div>\n</div>\n","import { InjectionToken } from '@angular/core';\n\n/**\n * Interface for components that support loading state.\n * Components implementing this can be controlled by LoadingDirective.\n */\nexport interface Loadable {\n /**\n * Sets the loading state of the component.\n * @param loading - Whether the component should be in loading state\n */\n setLoading(loading: boolean): void;\n}\n\n/**\n * Injection token for components that implement Loadable.\n * Components should provide themselves using this token to work with LoadingDirective.\n *\n * @example\n * ```typescript\n * @Component({\n * providers: [{ provide: LOADABLE, useExisting: MyComponent }]\n * })\n * export class MyComponent implements Loadable {\n * setLoading(loading: boolean): void { ... }\n * }\n * ```\n */\nexport const LOADABLE = new InjectionToken<Loadable>('LOADABLE');\n","import { Directive, effect, inject, input } from '@angular/core';\nimport { LOADABLE } from './loadable';\nimport { LoadingService } from './loading.service';\n\n/**\n * Directive that connects a component's loading state to the LoadingService.\n *\n * The host component must:\n * 1. Implement the Loadable interface\n * 2. Provide itself using the LOADABLE token\n *\n * @example\n * ```html\n * <ui-button uiLoading=\"login\">Login</ui-button>\n * <ui-button uiLoading=\"submit\">Submit</ui-button>\n * ```\n *\n * @example\n * ```typescript\n * // In your component/service\n * loadingService.start('login'); // Button with uiLoading=\"login\" shows loading\n * loadingService.stop('login'); // Loading stops\n * ```\n */\n@Directive({\n selector: '[uiLoading]',\n standalone: true,\n})\nexport class LoadingDirective {\n private readonly loadingService = inject(LoadingService);\n private readonly loadable = inject(LOADABLE, { optional: true });\n\n /**\n * The loading identifier to watch.\n * When this identifier's loading state changes in LoadingService,\n * the host component's loading state will be updated.\n */\n readonly uiLoading = input.required<string>();\n\n constructor() {\n effect(() => {\n const id = this.uiLoading();\n const isLoading = this.loadingService.isLoading(id)();\n\n if (this.loadable) {\n this.loadable.setLoading(isLoading);\n } else if (typeof ngDevMode === 'undefined' || ngDevMode) {\n console.warn(\n `[LoadingDirective] No LOADABLE provider found. ` +\n `Make sure the host component implements Loadable and provides itself with the LOADABLE token.`\n );\n }\n });\n }\n}\n","import { Component, input, output, signal, computed, ChangeDetectionStrategy } from '@angular/core';\nimport { Loadable, LOADABLE } from '../../loading/loadable';\n\nexport type ButtonVariant = 'default' | 'outline' | 'ghost' | 'elevated';\nexport type ButtonColor = 'primary' | 'secondary' | 'danger' | 'success' | 'warning';\nexport type ButtonSize = 'sm' | 'md' | 'lg';\n\n@Component({\n selector: 'ui-button',\n standalone: true,\n providers: [{ provide: LOADABLE, useExisting: ButtonComponent }],\n templateUrl: './button.component.html',\n styleUrl: './button.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ButtonComponent implements Loadable {\n readonly variant = input<ButtonVariant>('default');\n readonly color = input<ButtonColor>('primary');\n readonly size = input<ButtonSize>('md');\n readonly type = input<'button' | 'submit' | 'reset'>('button');\n readonly disabled = input(false);\n readonly loading = input(false);\n\n readonly clicked = output<MouseEvent>();\n\n /** Internal loading state set by LoadingDirective */\n private readonly directiveLoading = signal(false);\n\n /** Combined loading state - true if either input or directive loading is true */\n protected readonly isLoading = computed(() => this.loading() || this.directiveLoading());\n\n protected readonly buttonClasses = computed(() => {\n return `ui-button--${this.variant()} ui-button--${this.color()} ui-button--${this.size()}`;\n });\n\n protected handleClick(event: MouseEvent): void {\n if (!this.disabled() && !this.isLoading()) {\n this.clicked.emit(event);\n }\n }\n\n /** Loadable implementation - called by LoadingDirective */\n setLoading(loading: boolean): void {\n this.directiveLoading.set(loading);\n }\n}\n","<button\n [type]=\"type()\"\n [disabled]=\"disabled() || isLoading()\"\n [class]=\"buttonClasses()\"\n (click)=\"handleClick($event)\"\n>\n @if (isLoading()) {\n <span class=\"ui-button__spinner\"></span>\n }\n <span class=\"ui-button__content\" [class.ui-button__content--hidden]=\"isLoading()\">\n <ng-content />\n </span>\n</button>\n","import { Component, input, model, computed, signal, ChangeDetectionStrategy, effect } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { ValidationError, ValidatorFn } from '../../validators/validators';\n\nexport type InputType = 'text' | 'password' | 'email' | 'number' | 'tel' | 'url';\n\n/**\n * Validation state exposed by the input component\n */\nexport interface ValidationState {\n /** Whether the input has been focused and then blurred */\n touched: boolean;\n /** Whether the input value has been changed */\n dirty: boolean;\n /** Whether all validators pass */\n valid: boolean;\n /** Whether any validator fails */\n invalid: boolean;\n /** List of current validation errors */\n errors: ValidationError[];\n /** First error message, if any */\n errorMessage: string | null;\n /** CSS classes for validation state */\n classes: {\n touched: boolean;\n untouched: boolean;\n dirty: boolean;\n pristine: boolean;\n valid: boolean;\n invalid: boolean;\n };\n}\n\n@Component({\n selector: 'ui-input',\n standalone: true,\n imports: [FormsModule],\n templateUrl: './input.component.html',\n styleUrl: './input.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n '[class.ui-input--touched]': 'touched()',\n '[class.ui-input--untouched]': '!touched()',\n '[class.ui-input--dirty]': 'dirty()',\n '[class.ui-input--pristine]': '!dirty()',\n '[class.ui-input--valid]': 'isValid()',\n '[class.ui-input--invalid]': 'isInvalid()',\n },\n})\nexport class InputComponent {\n readonly type = input<InputType>('text');\n readonly label = input<string>('');\n readonly placeholder = input<string>('');\n readonly hint = input<string>('');\n readonly error = input<string>('');\n readonly disabled = input(false);\n readonly readonly = input(false);\n readonly required = input(false);\n readonly id = input<string>('');\n\n /** Array of validator functions to run against the value */\n readonly validators = input<ValidatorFn[]>([]);\n\n /** Single custom validator function */\n readonly validatorFn = input<ValidatorFn | null>(null);\n\n /** When to show validation errors: 'touched' (default), 'dirty', or 'always' */\n readonly showErrorsOn = input<'touched' | 'dirty' | 'always'>('touched');\n\n readonly value = model<string | number>('');\n\n private static nextId = 0;\n private readonly generatedId = `ui-input-${++InputComponent.nextId}`;\n\n protected readonly inputId = computed(() => this.id() || this.generatedId);\n\n /** Whether the input has been blurred at least once */\n readonly touched = signal(false);\n\n /** Whether the input value has been modified */\n readonly dirty = signal(false);\n\n private readonly initialValue = signal<string | number>('');\n private initialized = false;\n\n constructor() {\n effect(() => {\n const val = this.value();\n if (!this.initialized) {\n this.initialValue.set(val);\n this.initialized = true;\n }\n });\n }\n\n /** All validation errors from validators and validatorFn */\n readonly errors = computed<ValidationError[]>(() => {\n const value = this.value();\n const errors: ValidationError[] = [];\n\n // Run array validators\n for (const validator of this.validators()) {\n const error = validator(value);\n if (error) errors.push(error);\n }\n\n // Run single validatorFn\n const customValidator = this.validatorFn();\n if (customValidator) {\n const error = customValidator(value);\n if (error) errors.push(error);\n }\n\n return errors;\n });\n\n /** Whether the input passes all validations */\n readonly isValid = computed(() => this.errors().length === 0);\n\n /** Whether the input has validation errors */\n readonly isInvalid = computed(() => this.errors().length > 0);\n\n /** First error message from validators */\n readonly errorMessage = computed(() => this.errors()[0]?.message ?? null);\n\n /** Whether to display the error based on showErrorsOn setting */\n readonly shouldShowError = computed(() => {\n if (!this.isInvalid()) return false;\n\n switch (this.showErrorsOn()) {\n case 'always':\n return true;\n case 'dirty':\n return this.dirty();\n case 'touched':\n default:\n return this.touched();\n }\n });\n\n /** Combined error - either from error input or from validation */\n protected readonly displayError = computed(() => {\n const manualError = this.error();\n if (manualError) return manualError;\n return this.shouldShowError() ? this.errorMessage() : null;\n });\n\n /** Full validation state object for external consumption */\n readonly validationState = computed<ValidationState>(() => ({\n touched: this.touched(),\n dirty: this.dirty(),\n valid: this.isValid(),\n invalid: this.isInvalid(),\n errors: this.errors(),\n errorMessage: this.errorMessage(),\n classes: {\n touched: this.touched(),\n untouched: !this.touched(),\n dirty: this.dirty(),\n pristine: !this.dirty(),\n valid: this.isValid(),\n invalid: this.isInvalid(),\n },\n }));\n\n /** Marks the input as touched (called on blur) */\n protected onBlur(): void {\n this.touched.set(true);\n }\n\n /** Marks the input as dirty when value changes */\n protected onInput(): void {\n if (!this.dirty()) {\n this.dirty.set(true);\n }\n }\n\n /** Reset validation state */\n reset(): void {\n this.touched.set(false);\n this.dirty.set(false);\n this.value.set(this.initialValue());\n }\n\n /** Mark as touched programmatically */\n markAsTouched(): void {\n this.touched.set(true);\n }\n\n /** Mark as dirty programmatically */\n markAsDirty(): void {\n this.dirty.set(true);\n }\n\n /** Check if a specific error exists by key */\n hasError(key: string): boolean {\n return this.errors().some((e) => e.key === key);\n }\n\n /** Get error by key */\n getError(key: string): ValidationError | undefined {\n return this.errors().find((e) => e.key === key);\n }\n}\n","<div\n class=\"ui-input-wrapper\"\n [class.ui-input-wrapper--error]=\"displayError()\"\n [class.ui-input-wrapper--disabled]=\"disabled()\"\n>\n @if (label()) {\n <label class=\"ui-input__label\" [attr.for]=\"inputId()\">\n {{ label() }}\n @if (required()) {\n <span class=\"ui-input__required\">*</span>\n }\n </label>\n }\n <div class=\"ui-input__container\">\n <input\n class=\"ui-input\"\n [id]=\"inputId()\"\n [type]=\"type()\"\n [placeholder]=\"placeholder()\"\n [disabled]=\"disabled()\"\n [readonly]=\"readonly()\"\n [required]=\"required()\"\n [(ngModel)]=\"value\"\n (blur)=\"onBlur()\"\n (input)=\"onInput()\"\n />\n </div>\n @if (displayError()) {\n <span class=\"ui-input__error\">{{ displayError() }}</span>\n }\n @if (hint() && !displayError()) {\n <span class=\"ui-input__hint\">{{ hint() }}</span>\n }\n</div>\n","import { Pipe, PipeTransform } from '@angular/core';\n\n@Pipe({\n name: 'cellValue',\n standalone: true,\n pure: true,\n})\nexport class CellValuePipe implements PipeTransform {\n transform(row: object, key: string): unknown {\n const keys = key.split('.');\n let value: unknown = row;\n for (const k of keys) {\n if (value == null) return undefined;\n value = (value as Record<string, unknown>)[k];\n }\n return value;\n }\n}\n","import {\n Component,\n input,\n signal,\n computed,\n contentChildren,\n TemplateRef,\n ChangeDetectionStrategy,\n Directive,\n} from '@angular/core';\nimport { NgTemplateOutlet } from '@angular/common';\nimport { CellValuePipe } from './cell-value.pipe';\n\nexport interface TableColumn<T = unknown> {\n key: keyof T | string;\n header: string;\n sortable?: boolean;\n width?: string;\n}\n\nexport type SortDirection = 'asc' | 'desc' | null;\n\nexport interface SortState {\n column: string | null;\n direction: SortDirection;\n}\n\n@Directive({\n selector: '[uiCellTemplate]',\n standalone: true,\n})\nexport class CellTemplateDirective {\n readonly column = input.required<string>({ alias: 'uiCellTemplate' });\n\n constructor(public templateRef: TemplateRef<unknown>) {}\n}\n\n@Component({\n selector: 'ui-table',\n standalone: true,\n imports: [NgTemplateOutlet, CellValuePipe],\n templateUrl: './table.component.html',\n styleUrl: './table.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class TableComponent<T extends object> {\n readonly data = input<T[]>([]);\n readonly columns = input<TableColumn<T>[]>([]);\n readonly trackByFn = input<(item: T) => unknown>((item: T) => item);\n\n readonly cellTemplates = contentChildren(CellTemplateDirective);\n\n readonly sortState = signal<SortState>({ column: null, direction: null });\n\n protected readonly cellTemplateMap = computed(() => {\n const map = new Map<string, TemplateRef<unknown>>();\n for (const directive of this.cellTemplates()) {\n map.set(directive.column(), directive.templateRef);\n }\n return map;\n });\n\n readonly sortedData = computed(() => {\n const items = this.data();\n const { column, direction } = this.sortState();\n\n if (!column || !direction) {\n return items;\n }\n\n return [...items].sort((a, b) => {\n const aVal = this.getValueInternal(a, column);\n const bVal = this.getValueInternal(b, column);\n\n if (aVal == null && bVal == null) return 0;\n if (aVal == null) return direction === 'asc' ? -1 : 1;\n if (bVal == null) return direction === 'asc' ? 1 : -1;\n\n if (typeof aVal === 'string' && typeof bVal === 'string') {\n return direction === 'asc'\n ? aVal.localeCompare(bVal)\n : bVal.localeCompare(aVal);\n }\n\n if (aVal < bVal) return direction === 'asc' ? -1 : 1;\n if (aVal > bVal) return direction === 'asc' ? 1 : -1;\n return 0;\n });\n });\n\n protected handleHeaderClick(col: TableColumn<T>): void {\n if (col.sortable) {\n this.toggleSort(String(col.key));\n }\n }\n\n toggleSort(column: string): void {\n this.sortState.update(state => {\n if (state.column !== column) {\n return { column, direction: 'asc' };\n }\n if (state.direction === 'asc') {\n return { column, direction: 'desc' };\n }\n return { column: null, direction: null };\n });\n }\n\n private getValueInternal(row: T, key: string): unknown {\n const keys = key.split('.');\n let value: unknown = row;\n for (const k of keys) {\n if (value == null) return undefined;\n value = (value as Record<string, unknown>)[k];\n }\n return value;\n }\n\n}\n","<div class=\"ui-table-container\">\n <table class=\"ui-table\">\n <thead>\n <tr>\n @for (col of columns(); track col.key) {\n <th\n [style.width]=\"col.width\"\n [class.ui-table__th--sortable]=\"col.sortable\"\n (click)=\"handleHeaderClick(col)\"\n >\n <span class=\"ui-table__th-content\">\n {{ col.header }}\n @if (col.sortable) {\n <span class=\"ui-table__sort-icon\">\n @if (sortState().column === col.key) {\n @if (sortState().direction === 'asc') {\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 24 24\" fill=\"currentColor\">\n <path d=\"M7 14l5-5 5 5H7z\"/>\n </svg>\n } @else if (sortState().direction === 'desc') {\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 24 24\" fill=\"currentColor\">\n <path d=\"M7 10l5 5 5-5H7z\"/>\n </svg>\n }\n } @else {\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 24 24\" fill=\"currentColor\" opacity=\"0.3\">\n <path d=\"M7 10l5-5 5 5H7zm0 4l5 5 5-5H7z\"/>\n </svg>\n }\n </span>\n }\n </span>\n </th>\n }\n </tr>\n </thead>\n <tbody>\n @for (row of sortedData(); track trackByFn()(row); let i = $index) {\n <tr>\n @for (col of columns(); track col.key) {\n @let colKey = $any(col.key);\n <td>\n @if (cellTemplateMap().get(colKey); as template) {\n <ng-container *ngTemplateOutlet=\"template; context: { $implicit: row, row: row, index: i, value: row | cellValue:colKey }\" />\n } @else {\n {{ row | cellValue:colKey }}\n }\n </td>\n }\n </tr>\n } @empty {\n <tr>\n <td [attr.colspan]=\"columns().length\" class=\"ui-table__empty\">\n <ng-content select=\"[slot=empty]\">No data available</ng-content>\n </td>\n </tr>\n }\n </tbody>\n </table>\n</div>\n","import {\n Component,\n input,\n signal,\n output,\n ChangeDetectionStrategy,\n ElementRef,\n inject,\n} from '@angular/core';\n\n@Component({\n selector: 'ui-option',\n standalone: true,\n templateUrl: './option.component.html',\n styleUrl: './option.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class OptionComponent<T = unknown> {\n readonly value = input<T | null>(null);\n readonly disabled = input(false);\n\n /** Internal state managed by SelectComponent */\n readonly selected = signal(false);\n readonly focused = signal(false);\n readonly multiple = signal(false);\n readonly deletable = signal(false);\n\n /** Emitted when delete button is clicked */\n readonly deleteClicked = output<T>();\n\n readonly elementRef = inject(ElementRef);\n\n /** Get the text content for display and search */\n getLabel(): string {\n return this.elementRef.nativeElement.textContent?.trim() || '';\n }\n\n onDelete(event: MouseEvent): void {\n event.stopPropagation();\n const val = this.value();\n if (val !== null) {\n this.deleteClicked.emit(val as T);\n }\n }\n}\n","<div\n class=\"ui-option\"\n [class.ui-option--selected]=\"selected()\"\n [class.ui-option--disabled]=\"disabled()\"\n [class.ui-option--focused]=\"focused()\"\n [class.ui-option--deletable]=\"deletable()\"\n [attr.role]=\"'option'\"\n [attr.aria-selected]=\"selected()\"\n [attr.aria-disabled]=\"disabled()\"\n>\n @if (multiple() && selected()) {\n <svg class=\"ui-option__check\" width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\">\n <polyline points=\"20 6 9 17 4 12\"></polyline>\n </svg>\n }\n <span class=\"ui-option__content\">\n <ng-content />\n </span>\n @if (deletable()) {\n <button\n type=\"button\"\n class=\"ui-option__delete\"\n (click)=\"onDelete($event)\"\n aria-label=\"Delete option\"\n >\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\">\n <line x1=\"18\" y1=\"6\" x2=\"6\" y2=\"18\"></line>\n <line x1=\"6\" y1=\"6\" x2=\"18\" y2=\"18\"></line>\n </svg>\n </button>\n }\n</div>\n","import { Directive, TemplateRef, inject } from '@angular/core';\n\nexport interface OptionTemplateContext<T> {\n $implicit: T;\n option: T;\n selected: boolean;\n disabled: boolean;\n}\n\n@Directive({\n selector: '[uiOptionTemplate]',\n standalone: true,\n})\nexport class OptionTemplateDirective<T = unknown> {\n readonly templateRef = inject(TemplateRef<OptionTemplateContext<T>>);\n}\n","import {\n Component,\n input,\n model,\n output,\n signal,\n computed,\n contentChildren,\n contentChild,\n ChangeDetectionStrategy,\n ElementRef,\n inject,\n effect,\n HostListener,\n AfterContentInit,\n OnDestroy,\n ViewChild,\n} from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { DOCUMENT, NgTemplateOutlet } from '@angular/common';\nimport { OptionComponent } from './option.component';\nimport { OptionTemplateDirective } from './option-template.directive';\n\nexport type SelectVariant = 'default' | 'outlined' | 'filled';\nexport type SelectSize = 'sm' | 'md' | 'lg';\n\nexport interface AsyncSelectOption<T = unknown> {\n value: T;\n label: string;\n disabled?: boolean;\n}\n\nexport type AsyncSearchFn<T> = (query: string) => Promise<AsyncSelectOption<T>[]>;\n\n@Component({\n selector: 'ui-select',\n standalone: true,\n imports: [FormsModule, NgTemplateOutlet],\n templateUrl: './select.component.html',\n styleUrl: './select.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class SelectComponent<T = unknown> implements AfterContentInit, OnDestroy {\n // Inputs\n readonly variant = input<SelectVariant>('default');\n readonly size = input<SelectSize>('md');\n readonly placeholder = input('Select an option');\n readonly label = input('');\n readonly hint = input('');\n readonly error = input('');\n readonly disabled = input(false);\n readonly multiple = input(false);\n readonly searchable = input(false);\n readonly clearable = input(false);\n readonly creatable = input(false);\n readonly deletable = input(false);\n readonly selectable = input(true);\n\n // Async search inputs\n readonly asyncSearch = input<AsyncSearchFn<T> | null>(null);\n readonly debounceTime = input(300);\n readonly minSearchLength = input(0);\n readonly initialLoad = input(false);\n readonly initialOptions = input<AsyncSelectOption<T>[]>([]);\n\n // Two-way binding\n readonly value = model<T | T[] | null>(null);\n\n // Outputs\n readonly opened = output<void>();\n readonly closed = output<void>();\n readonly created = output<string>();\n readonly deleted = output<T>();\n\n // Content children\n readonly options = contentChildren(OptionComponent);\n readonly optionTemplate = contentChild(OptionTemplateDirective);\n\n // View children for dropdown portal\n @ViewChild('triggerRef', { static: true }) triggerRef!: ElementRef<HTMLElement>;\n @ViewChild('dropdownRef', { static: true }) dropdownRef!: ElementRef<HTMLElement>;\n @ViewChild('searchInput') searchInputRef?: ElementRef<HTMLInputElement>;\n\n // Internal state\n readonly isOpen = signal(false);\n readonly searchQuery = signal('');\n readonly focusedIndex = signal(-1);\n\n // Async state\n readonly asyncLoading = signal(false);\n readonly asyncOptions = signal<AsyncSelectOption<T>[]>([]);\n readonly asyncError = signal<string | null>(null);\n private asyncSearchAbortController: AbortController | null = null;\n private debounceTimer: ReturnType<typeof setTimeout> | null = null;\n\n private readonly elementRef = inject(ElementRef);\n private readonly document = inject(DOCUMENT);\n private positionCleanup: (() => void) | null = null;\n private readonly initializedOptions = new WeakSet<OptionComponent<T>>();\n\n constructor() {\n // Sync selected state to options\n effect(() => {\n const currentValue = this.value();\n const opts = this.options();\n const isMultiple = this.multiple();\n const isDeletable = this.deletable();\n\n opts.forEach((opt) => {\n opt.multiple.set(isMultiple);\n opt.deletable.set(isDeletable);\n if (isMultiple && Array.isArray(currentValue)) {\n opt.selected.set(currentValue.includes(opt.value()));\n } else {\n opt.selected.set(opt.value() === currentValue);\n }\n });\n });\n\n // Sync focused state and visibility for search filtering\n effect(() => {\n const query = this.searchQuery().toLowerCase().trim();\n const index = this.focusedIndex();\n const opts = this.options();\n\n let visibleIndex = 0;\n opts.forEach((opt) => {\n const label = opt.getLabel().toLowerCase();\n const isVisible = !query || label.includes(query);\n opt.elementRef.nativeElement.style.display = isVisible ? '' : 'none';\n\n if (isVisible) {\n opt.focused.set(visibleIndex === index);\n visibleIndex++;\n } else {\n opt.focused.set(false);\n }\n });\n });\n\n // Set up handlers when options change (for dynamically added options)\n effect(() => {\n this.options(); // track changes\n this.setupOptionHandlers();\n });\n\n // Initial options for async search\n effect(() => {\n const opts = this.initialOptions();\n if (opts.length > 0) {\n this.asyncOptions.set(opts);\n }\n });\n\n // Initial load for async search\n effect(() => {\n if (this.initialLoad() && this.asyncSearch()) {\n this.executeAsyncSearch('');\n }\n });\n }\n\n ngAfterContentInit(): void {\n // Initial setup handled by effect\n }\n\n private setupOptionHandlers(): void {\n // Set up click handlers on new options\n this.options().forEach((opt) => {\n if (this.initializedOptions.has(opt)) return;\n this.initializedOptions.add(opt);\n\n opt.elementRef.nativeElement.addEventListener('click', (event: MouseEvent) => {\n this.selectOption(opt, event);\n });\n opt.deleteClicked.subscribe((value: T) => {\n this.deleteOption(value);\n });\n });\n }\n\n ngOnDestroy(): void {\n const dropdown = this.dropdownRef?.nativeElement;\n if (dropdown?.parentElement === this.document.body) {\n this.document.body.removeChild(dropdown);\n }\n this.removePositionListeners();\n this.cancelAsyncSearch();\n }\n\n protected readonly triggerClasses = computed(() => {\n return `ui-select__trigger--${this.variant()} ui-select__trigger--${this.size()}`;\n });\n\n protected readonly hasValue = computed(() => {\n const val = this.value();\n if (this.multiple()) {\n return Array.isArray(val) && val.length > 0;\n }\n return val !== null && val !== undefined;\n });\n\n protected readonly displayValue = computed(() => {\n const val = this.value();\n const opts = this.options();\n const asyncOpts = this.asyncOptions();\n const isAsync = this.isAsyncMode();\n\n if (this.multiple() && Array.isArray(val)) {\n if (val.length === 0) return '';\n const labels = val.map((v) => {\n if (isAsync) {\n const asyncOpt = asyncOpts.find((o) => o.value === v);\n if (asyncOpt) return asyncOpt.label;\n }\n const opt = opts.find((o) => o.value() === v);\n return opt?.getLabel() || String(v);\n });\n return labels.join(', ');\n }\n\n if (val === null || val === undefined) return '';\n\n if (isAsync) {\n const asyncOpt = asyncOpts.find((o) => o.value === val);\n if (asyncOpt) return asyncOpt.label;\n }\n const opt = opts.find((o) => o.value() === val);\n return opt?.getLabel() || String(val);\n });\n\n protected readonly inputPlaceholder = computed(() => {\n if (!this.selectable()) {\n const opts = this.options();\n const labels = opts.map((o) => o.getLabel());\n if (labels.length > 0) {\n return `${labels.join(', ')}, (${this.placeholder()})`;\n }\n }\n return this.displayValue() || this.placeholder();\n });\n\n protected readonly isAsyncMode = computed(() => this.asyncSearch() !== null);\n\n protected readonly visibleOptions = computed(() => {\n // In async mode, don't filter content children - they're not used\n if (this.isAsyncMode()) return [];\n\n const query = this.searchQuery().toLowerCase().trim();\n const opts = this.options();\n\n if (!query) return [...opts];\n\n return opts.filter((opt) => {\n const label = opt.getLabel().toLowerCase();\n return label.includes(query);\n });\n });\n\n protected readonly visibleAsyncOptions = computed(() => {\n if (!this.isAsyncMode()) return [];\n return this.asyncOptions();\n });\n\n protected readonly exactMatchExists = computed(() => {\n const query = this.searchQuery().toLowerCase().trim();\n if (!query) return true;\n\n if (this.isAsyncMode()) {\n return this.asyncOptions().some((opt) => opt.label.toLowerCase() === query);\n }\n return this.options().some((opt) => opt.getLabel().toLowerCase() === query);\n });\n\n protected readonly totalVisibleCount = computed(() => {\n if (this.isAsyncMode()) {\n return this.visibleAsyncOptions().length;\n }\n return this.visibleOptions().length;\n });\n\n @HostListener('document:click', ['$event'])\n onDocumentClick(event: MouseEvent): void {\n const target = event.target as Node;\n if (\n !this.elementRef.nativeElement.contains(target) &&\n !this.dropdownRef?.nativeElement?.contains(target)\n ) {\n this.close();\n }\n }\n\n toggle(): void {\n if (this.disabled()) return;\n if (this.searchable()) {\n // In combobox mode, clicking trigger always opens\n if (!this.isOpen()) {\n this.open();\n }\n } else {\n if (this.isOpen()) {\n this.close();\n } else {\n this.open();\n }\n }\n }\n\n open(): void {\n if (this.disabled() || this.isOpen()) return;\n this.isOpen.set(true);\n this.searchQuery.set('');\n this.focusedIndex.set(-1);\n this.opened.emit();\n this.portalDropdown();\n\n if (this.searchable()) {\n setTimeout(() => {\n const input = this.searchInputRef?.nativeElement;\n if (input) {\n input.focus();\n // Only select if there's text to select, avoids racing with user input\n if (input.value) {\n input.select();\n }\n }\n });\n }\n }\n\n close(): void {\n if (!this.isOpen()) return;\n this.unportalDropdown();\n this.isOpen.set(false);\n this.searchQuery.set('');\n this.focusedIndex.set(-1);\n this.closed.emit();\n\n // Clean up async state\n this.cancelAsyncSearch();\n this.asyncLoading.set(false);\n this.asyncError.set(null);\n // Keep asyncOptions so displayValue still works after selection\n }\n\n private cancelAsyncSearch(): void {\n if (this.debounceTimer) {\n clearTimeout(this.debounceTimer);\n this.debounceTimer = null;\n }\n if (this.asyncSearchAbortController) {\n this.asyncSearchAbortController.abort();\n this.asyncSearchAbortController = null;\n }\n }\n\n selectOption(option: OptionComponent<T>, event?: MouseEvent): void {\n event?.stopPropagation();\n\n if (option.disabled()) return;\n if (!this.selectable()) return;\n\n const optionValue = option.value();\n if (optionValue === null) return;\n\n if (this.multiple()) {\n const currentValue = (this.value() as T[]) || [];\n const index = currentValue.indexOf(optionValue);\n\n let newValue: T[];\n if (index === -1) {\n newValue = [...currentValue, optionValue];\n } else {\n newValue = currentValue.filter((_, i) => i !== index);\n }\n\n this.value.set(newValue);\n // In multiple+searchable mode, clear search and refocus input\n if (this.searchable()) {\n this.searchQuery.set('');\n this.focusedIndex.set(-1);\n setTimeout(() => this.searchInputRef?.nativeElement?.focus());\n }\n } else {\n this.value.set(optionValue);\n this.close();\n }\n }\n\n clear(event: MouseEvent): void {\n event.stopPropagation();\n if (this.multiple()) {\n this.value.set([]);\n } else {\n this.value.set(null);\n }\n }\n\n selectAsyncOption(option: AsyncSelectOption<T>, event?: MouseEvent): void {\n event?.stopPropagation();\n\n if (option.disabled) return;\n if (!this.selectable()) return;\n\n const optionValue = option.value;\n\n if (this.multiple()) {\n const currentValue = (this.value() as T[]) || [];\n const index = currentValue.indexOf(optionValue);\n\n let newValue: T[];\n if (index === -1) {\n newValue = [...currentValue, optionValue];\n } else {\n newValue = currentValue.filter((_, i) => i !== index);\n }\n\n this.value.set(newValue);\n // In multiple+searchable mode, clear search and refocus input\n if (this.searchable()) {\n this.searchQuery.set('');\n this.focusedIndex.set(-1);\n this.asyncOptions.set([]);\n setTimeout(() => this.searchInputRef?.nativeElement?.focus());\n }\n } else {\n this.value.set(optionValue);\n this.close();\n }\n }\n\n isAsyncOptionSelected(option: AsyncSelectOption<T>): boolean {\n const val = this.value();\n if (this.multiple() && Array.isArray(val)) {\n return val.includes(option.value);\n }\n return val === option.value;\n }\n\n deleteOption(optionValue: T): void {\n // Remove from selection if selected\n if (this.multiple()) {\n const currentValue = (this.value() as T[]) || [];\n if (currentValue.includes(optionValue)) {\n this.value.set(currentValue.filter((v) => v !== optionValue));\n }\n } else if (this.value() === optionValue) {\n this.value.set(null);\n }\n this.deleted.emit(optionValue);\n }\n\n protected handleTriggerKeydown(event: KeyboardEvent): void {\n switch (event.key) {\n case 'Enter':\n case ' ':\n event.preventDefault();\n if (this.isOpen()) {\n this.selectFocusedOption();\n } else {\n this.open();\n }\n break;\n case 'ArrowDown':\n event.preventDefault();\n if (!this.isOpen()) {\n this.open();\n } else {\n this.focusNext();\n }\n break;\n case 'ArrowUp':\n event.preventDefault();\n if (this.isOpen()) {\n this.focusPrevious();\n }\n break;\n case 'Escape':\n event.preventDefault();\n this.close();\n break;\n case 'Tab':\n this.close();\n break;\n }\n }\n\n protected handleSearchInputKeydown(event: KeyboardEvent): void {\n // Stop propagation so the trigger's keydown handler doesn't\n // interfere (e.g. space would otherwise preventDefault).\n event.stopPropagation();\n switch (event.key) {\n case 'ArrowDown':\n event.preventDefault();\n if (!this.isOpen()) {\n this.open();\n } else {\n this.focusNext();\n }\n break;\n case 'ArrowUp':\n event.preventDefault();\n if (this.isOpen()) {\n this.focusPrevious();\n }\n break;\n case 'Enter':\n event.preventDefault();\n if (this.isOpen()) {\n const focusedIdx = this.focusedIndex();\n\n if (focusedIdx >= 0) {\n this.selectFocusedOption();\n } else if (this.totalVisibleCount() === 1) {\n // Auto-select single visible option\n if (this.isAsyncMode()) {\n const asyncOpts = this.visibleAsyncOptions();\n if (asyncOpts.length === 1) {\n this.selectAsyncOption(asyncOpts[0]);\n }\n } else {\n const visible = this.visibleOptions();\n if (visible.length === 1) {\n this.selectOption(visible[0]);\n }\n }\n } else if (this.creatable() && this.searchQuery().trim() && !this.exactMatchExists()) {\n this.handleCreate();\n }\n } else {\n this.open();\n }\n break;\n case 'Escape':\n event.preventDefault();\n this.close();\n break;\n case 'Tab':\n this.close();\n break;\n }\n }\n\n private selectFocusedOption(): void {\n const focusedIdx = this.focusedIndex();\n if (focusedIdx < 0) return;\n\n if (this.isAsyncMode()) {\n const asyncOpts = this.visibleAsyncOptions();\n const focused = asyncOpts[focusedIdx];\n if (focused) {\n this.selectAsyncOption(focused);\n }\n } else {\n const focused = this.visibleOptions()[focusedIdx];\n if (focused) {\n this.selectOption(focused);\n }\n }\n }\n\n protected onSearchInput(value: string): void {\n this.searchQuery.set(value);\n\n if (!this.isOpen()) {\n this.isOpen.set(true);\n this.focusedIndex.set(-1);\n this.opened.emit();\n this.portalDropdown();\n }\n\n if (this.isAsyncMode()) {\n this.triggerAsyncSearch(value);\n } else {\n // Auto-highlight when exactly one option is visible\n const visible = this.visibleOptions();\n this.focusedIndex.set(visible.length === 1 ? 0 : -1);\n }\n }\n\n private triggerAsyncSearch(query: string): void {\n // Clear previous debounce timer\n if (this.debounceTimer) {\n clearTimeout(this.debounceTimer);\n this.debounceTimer = null;\n }\n\n // Cancel previous request\n if (this.asyncSearchAbortController) {\n this.asyncSearchAbortController.abort();\n this.asyncSearchAbortController = null;\n }\n\n const trimmedQuery = query.trim();\n\n // Check minimum search length\n if (trimmedQuery.length < this.minSearchLength()) {\n this.asyncOptions.set([]);\n this.asyncLoading.set(false);\n this.asyncError.set(null);\n this.focusedIndex.set(-1);\n return;\n }\n\n // Set loading state immediately for visual feedback\n this.asyncLoading.set(true);\n this.asyncError.set(null);\n\n // Debounce the actual search\n this.debounceTimer = setTimeout(() => {\n this.executeAsyncSearch(trimmedQuery);\n }, this.debounceTime());\n }\n\n private async executeAsyncSearch(query: string): Promise<void> {\n const searchFn = this.asyncSearch();\n if (!searchFn) return;\n\n this.asyncSearchAbortController = new AbortController();\n const signal = this.asyncSearchAbortController.signal;\n\n try {\n const results = await searchFn(query);\n\n // Check if request was aborted\n if (signal.aborted) return;\n\n this.asyncOptions.set(results);\n this.asyncLoading.set(false);\n this.asyncError.set(null);\n\n // Auto-highlight first option if results exist\n this.focusedIndex.set(results.length > 0 ? 0 : -1);\n } catch (error) {\n // Ignore abort errors\n if (signal.aborted) return;\n\n this.asyncOptions.set([]);\n this.asyncLoading.set(false);\n this.asyncError.set(error instanceof Error ? error.message : 'Search failed');\n this.focusedIndex.set(-1);\n }\n }\n\n protected handleCreate(): void {\n const query = this.searchQuery().trim();\n if (!query) return;\n this.created.emit(query);\n this.searchQuery.set('');\n this.close();\n }\n\n private focusNext(): void {\n const current = this.focusedIndex();\n\n if (this.isAsyncMode()) {\n const opts = this.visibleAsyncOptions();\n let next = current + 1;\n\n while (next < opts.length && opts[next].disabled) {\n next++;\n }\n\n if (next < opts.length) {\n this.focusedIndex.set(next);\n this.scrollToFocusedAsync(next);\n }\n } else {\n const opts = this.visibleOptions();\n let next = current + 1;\n\n while (next < opts.length && opts[next].disabled()) {\n next++;\n }\n\n if (next < opts.length) {\n this.focusedIndex.set(next);\n this.scrollToFocused();\n }\n }\n }\n\n private focusPrevious(): void {\n const current = this.focusedIndex();\n\n if (this.isAsyncMode()) {\n const opts = this.visibleAsyncOptions();\n let prev = current - 1;\n\n while (prev >= 0 && opts[prev].disabled) {\n prev--;\n }\n\n if (prev >= 0) {\n this.focusedIndex.set(prev);\n this.scrollToFocusedAsync(prev);\n }\n } else {\n const opts = this.visibleOptions();\n let prev = current - 1;\n\n while (prev >= 0 && opts[prev].disabled()) {\n prev--;\n }\n\n if (prev >= 0) {\n this.focusedIndex.set(prev);\n this.scrollToFocused();\n }\n }\n }\n\n private scrollToFocused(): void {\n const focused = this.visibleOptions()[this.focusedIndex()];\n if (focused) {\n focused.elementRef.nativeElement.scrollIntoView({ block: 'nearest' });\n }\n }\n\n private scrollToFocusedAsync(index: number): void {\n const dropdown = this.dropdownRef?.nativeElement;\n if (!dropdown) return;\n\n const optionElements = dropdown.querySelectorAll('.ui-async-option');\n const focusedElement = optionElements[index] as HTMLElement | undefined;\n if (focusedElement) {\n focusedElement.scrollIntoView({ block: 'nearest' });\n }\n }\n\n private portalDropdown(): void {\n const dropdown = this.dropdownRef?.nativeElement;\n if (!dropdown) return;\n\n dropdown.style.display = 'block';\n this.document.body.appendChild(dropdown);\n this.updateDropdownPosition();\n this.addPositionListeners();\n }\n\n private unportalDropdown(): void {\n const dropdown = this.dropdownRef?.nativeElement;\n if (!dropdown) return;\n\n if (dropdown.parentElement === this.document.body) {\n const wrapper = this.elementRef.nativeElement.querySelector('.ui-select-wrapper');\n if (wrapper) {\n wrapper.appendChild(dropdown);\n }\n }\n\n dropdown.style.display = '';\n dropdown.style.position = '';\n dropdown.style.top = '';\n dropdown.style.left = '';\n dropdown.style.bottom = '';\n dropdown.style.width = '';\n dropdown.style.zIndex = '';\n dropdown.style.margin = '';\n\n this.removePositionListeners();\n }\n\n private updateDropdownPosition(): void {\n const trigger = this.triggerRef?.nativeElement;\n const dropdown = this.dropdownRef?.nativeElement;\n if (!trigger || !dropdown) return;\n\n const triggerRect = trigger.getBoundingClientRect();\n const dropdownHeight = dropdown.scrollHeight;\n const gap = 4;\n const spaceBelow = window.innerHeight - triggerRect.bottom;\n const spaceAbove = triggerRect.top;\n const openAbove = spaceBelow < dropdownHeight + gap && spaceAbove > spaceBelow;\n\n dropdown.style.position = 'fixed';\n dropdown.style.width = `${triggerRect.width}px`;\n dropdown.style.left = `${triggerRect.left}px`;\n dropdown.style.zIndex = '99999';\n dropdown.style.margin = '0';\n\n if (openAbove) {\n dropdown.style.top = 'auto';\n dropdown.style.bottom = `${window.innerHeight - triggerRect.top + gap}px`;\n } else {\n dropdown.style.top = `${triggerRect.bottom + gap}px`;\n dropdown.style.bottom = 'auto';\n }\n }\n\n private addPositionListeners(): void {\n const update = () => {\n if (this.isOpen()) {\n this.updateDropdownPosition();\n }\n };\n window.addEventListener('scroll', update, true);\n window.addEventListener('resize', update);\n this.positionCleanup = () => {\n window.removeEventListener('scroll', update, true);\n window.removeEventListener('resize', update);\n };\n }\n\n private removePositionListeners(): void {\n this.positionCleanup?.();\n this.positionCleanup = null;\n }\n}\n","<div\n class=\"ui-select-wrapper\"\n [class.ui-select-wrapper--error]=\"error()\"\n [class.ui-select-wrapper--disabled]=\"disabled()\"\n [class.ui-select-wrapper--open]=\"isOpen()\"\n>\n @if (label()) {\n <label class=\"ui-select__label\">\n {{ label() }}\n </label>\n }\n\n <div\n #triggerRef\n class=\"ui-select__trigger\"\n [class]=\"triggerClasses()\"\n [attr.role]=\"'combobox'\"\n [attr.aria-expanded]=\"isOpen()\"\n [attr.aria-haspopup]=\"'listbox'\"\n [attr.aria-disabled]=\"disabled()\"\n [attr.tabindex]=\"searchable() ? -1 : (disabled() ? -1 : 0)\"\n (click)=\"toggle()\"\n (keydown)=\"handleTriggerKeydown($event)\"\n >\n @if (searchable()) {\n <input\n #searchInput\n type=\"text\"\n class=\"ui-select__input\"\n [placeholder]=\"inputPlaceholder()\"\n [value]=\"isOpen() ? searchQuery() : (selectable() ? displayValue() : '')\"\n [disabled]=\"disabled()\"\n (input)=\"onSearchInput($any($event.target).value)\"\n (keydown)=\"handleSearchInputKeydown($event)\"\n (focus)=\"toggle()\"\n autocomplete=\"off\"\n />\n } @else {\n <span class=\"ui-select__value\">\n @if (displayValue()) {\n {{ displayValue() }}\n } @else {\n <span class=\"ui-select__placeholder\">{{ placeholder() }}</span>\n }\n </span>\n }\n\n <div class=\"ui-select__icons\">\n @if (clearable() && hasValue() && !disabled()) {\n <button\n type=\"button\"\n class=\"ui-select__clear\"\n (click)=\"clear($event)\"\n aria-label=\"Clear selection\"\n >\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\">\n <line x1=\"18\" y1=\"6\" x2=\"6\" y2=\"18\"></line>\n <line x1=\"6\" y1=\"6\" x2=\"18\" y2=\"18\"></line>\n </svg>\n </button>\n }\n <svg\n class=\"ui-select__arrow\"\n [class.ui-select__arrow--open]=\"isOpen()\"\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n >\n <polyline points=\"6 9 12 15 18 9\"></polyline>\n </svg>\n </div>\n </div>\n\n <div\n #dropdownRef\n class=\"ui-select__dropdown\"\n [class.ui-select__dropdown--open]=\"isOpen()\"\n [attr.role]=\"'listbox'\"\n [attr.aria-multiselectable]=\"multiple()\"\n >\n <div class=\"ui-select__options\">\n @if (isAsyncMode()) {\n <!-- Async mode: render options from asyncSearch results -->\n @if (asyncLoading()) {\n <div class=\"ui-select__loading\">\n <svg class=\"ui-select__spinner\" width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\">\n <circle cx=\"12\" cy=\"12\" r=\"10\" stroke-opacity=\"0.25\"></circle>\n <path d=\"M12 2a10 10 0 0 1 10 10\" stroke-linecap=\"round\"></path>\n </svg>\n <span>Searching...</span>\n </div>\n } @else if (asyncError()) {\n <div class=\"ui-select__error-message\">\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\">\n <circle cx=\"12\" cy=\"12\" r=\"10\"></circle>\n <line x1=\"12\" y1=\"8\" x2=\"12\" y2=\"12\"></line>\n <line x1=\"12\" y1=\"16\" x2=\"12.01\" y2=\"16\"></line>\n </svg>\n <span>{{ asyncError() }}</span>\n </div>\n } @else {\n @for (option of visibleAsyncOptions(); track option.value; let i = $index) {\n <div\n class=\"ui-async-option\"\n [class.ui-async-option--selected]=\"isAsyncOptionSelected(option)\"\n [class.ui-async-option--disabled]=\"option.disabled\"\n [class.ui-async-option--focused]=\"focusedIndex() === i\"\n [attr.role]=\"'option'\"\n [attr.aria-selected]=\"isAsyncOptionSelected(option)\"\n [attr.aria-disabled]=\"option.disabled\"\n (click)=\"selectAsyncOption(option, $event)\"\n >\n @if (multiple() && isAsyncOptionSelected(option)) {\n <svg class=\"ui-async-option__check\" width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\">\n <polyline points=\"20 6 9 17 4 12\"></polyline>\n </svg>\n }\n <span class=\"ui-async-option__content\">\n @if (optionTemplate(); as tpl) {\n <ng-container *ngTemplateOutlet=\"tpl.templateRef; context: { $implicit: option.value, option: option.value, selected: isAsyncOptionSelected(option), disabled: !!option.disabled }\"></ng-container>\n } @else {\n {{ option.label }}\n }\n </span>\n </div>\n }\n @if (visibleAsyncOptions().length === 0 && searchQuery().trim().length >= minSearchLength()) {\n <div class=\"ui-select__empty\">No results found</div>\n }\n @if (searchQuery().trim().length < minSearchLength() && minSearchLength() > 0) {\n <div class=\"ui-select__empty\">Type at least {{ minSearchLength() }} characters to search</div>\n }\n }\n } @else {\n <!-- Static mode: render content children -->\n <ng-content />\n @if (visibleOptions().length === 0 && !(creatable() && searchQuery().trim())) {\n <div class=\"ui-select__empty\">No options found</div>\n }\n }\n </div>\n @if (creatable() && searchQuery().trim() && !exactMatchExists()) {\n <div\n class=\"ui-select__create\"\n (click)=\"handleCreate()\"\n >\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\">\n <line x1=\"12\" y1=\"5\" x2=\"12\" y2=\"19\"></line>\n <line x1=\"5\" y1=\"12\" x2=\"19\" y2=\"12\"></line>\n </svg>\n Create \"{{ searchQuery().trim() }}\"\n </div>\n }\n </div>\n\n @if (error()) {\n <span class=\"ui-select__error\">{{ error() }}</span>\n }\n @if (hint() && !error()) {\n <span class=\"ui-select__hint\">{{ hint() }}</span>\n }\n</div>\n","import { Directive, ElementRef, inject, output } from '@angular/core';\n\n@Directive({\n selector: '[uiDropdownTrigger]',\n standalone: true,\n host: {\n '(click)': 'toggleDropdown.emit()',\n '(keydown.enter)': 'toggleDropdown.emit()',\n '(keydown.space)': 'toggleDropdown.emit(); $event.preventDefault()',\n '(keydown.arrowDown)': 'openDropdown.emit(); $event.preventDefault()',\n '[attr.aria-haspopup]': '\"menu\"',\n },\n})\nexport class DropdownTriggerDirective {\n readonly elementRef = inject(ElementRef);\n\n readonly toggleDropdown = output<void>();\n readonly openDropdown = output<void>();\n}\n","import {\n Component,\n input,\n output,\n signal,\n ChangeDetectionStrategy,\n ElementRef,\n inject,\n} from '@angular/core';\n\n@Component({\n selector: 'ui-dropdown-item',\n standalone: true,\n templateUrl: './dropdown-item.component.html',\n styleUrl: './dropdown-item.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class DropdownItemComponent {\n readonly disabled = input(false);\n readonly icon = input<string>('');\n\n readonly clicked = output<void>();\n\n /** Internal state managed by DropdownComponent */\n readonly focused = signal(false);\n\n readonly elementRef = inject(ElementRef);\n\n protected handleClick(event: MouseEvent): void {\n if (this.disabled()) {\n event.preventDefault();\n event.stopPropagation();\n return;\n }\n this.clicked.emit();\n }\n\n protected handleKeydown(event: KeyboardEvent): void {\n if (event.key === 'Enter' || event.key === ' ') {\n event.preventDefault();\n if (!this.disabled()) {\n this.clicked.emit();\n }\n }\n }\n}\n","<div\n class=\"ui-dropdown-item\"\n [class.ui-dropdown-item--disabled]=\"disabled()\"\n [class.ui-dropdown-item--focused]=\"focused()\"\n [attr.role]=\"'menuitem'\"\n [attr.aria-disabled]=\"disabled()\"\n [attr.tabindex]=\"disabled() ? -1 : 0\"\n (click)=\"handleClick($event)\"\n (keydown)=\"handleKeydown($event)\"\n>\n @if (icon()) {\n <span class=\"ui-dropdown-item__icon\">\n <ng-content select=\"[slot=icon]\" />\n </span>\n }\n <span class=\"ui-dropdown-item__content\">\n <ng-content />\n </span>\n</div>\n","import {\n Component,\n input,\n signal,\n contentChild,\n contentChildren,\n ChangeDetectionStrategy,\n ElementRef,\n inject,\n effect,\n HostListener,\n OnDestroy,\n ViewChild,\n} from '@angular/core';\nimport { DOCUMENT } from '@angular/common';\nimport { DropdownTriggerDirective } from './dropdown-trigger.directive';\nimport { DropdownItemComponent } from './dropdown-item.component';\n\nexport type DropdownPosition = 'bottom-start' | 'bottom-end' | 'top-start' | 'top-end';\nexport type DropdownAlign = 'start' | 'end';\n\n@Component({\n selector: 'ui-dropdown',\n standalone: true,\n templateUrl: './dropdown.component.html',\n styleUrl: './dropdown.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class DropdownComponent implements OnDestroy {\n readonly position = input<DropdownPosition>('bottom-start');\n readonly closeOnSelect = input(true);\n readonly matchTriggerWidth = input(false);\n\n readonly isOpen = signal(false);\n readonly focusedIndex = signal(-1);\n\n @ViewChild('triggerRef', { static: true }) triggerRef!: ElementRef<HTMLElement>;\n @ViewChild('menuRef', { static: true }) menuRef!: ElementRef<HTMLElement>;\n\n private readonly elementRef = inject(ElementRef);\n private readonly document = inject(DOCUMENT);\n private positionCleanup: (() => void) | null = null;\n private contextMenuPosition: { x: number; y: number } | null = null;\n\n readonly trigger = contentChild(DropdownTriggerDirective);\n readonly items = contentChildren(DropdownItemComponent);\n\n constructor() {\n // Connect trigger events\n effect(() => {\n const triggerRef = this.trigger();\n if (triggerRef) {\n triggerRef.toggleDropdown.subscribe(() => this.toggle());\n triggerRef.openDropdown.subscribe(() => this.open());\n }\n });\n\n // Handle item clicks\n effect(() => {\n const menuItems = this.items();\n menuItems.forEach((item) => {\n item.clicked.subscribe(() => {\n if (this.closeOnSelect()) {\n this.close();\n }\n });\n });\n });\n\n // Sync focused state\n effect(() => {\n const index = this.focusedIndex();\n const menuItems = this.items();\n menuItems.forEach((item, i) => {\n item.focused.set(i === index);\n });\n });\n }\n\n ngOnDestroy(): void {\n const menu = this.menuRef?.nativeElement;\n if (menu?.parentElement === this.document.body) {\n this.document.body.removeChild(menu);\n }\n this.removePositionListeners();\n }\n\n @HostListener('document:click', ['$event'])\n onDocumentClick(event: MouseEvent): void {\n const target = event.target as Node;\n if (\n !this.elementRef.nativeElement.contains(target) &&\n !this.menuRef?.nativeElement?.contains(target)\n ) {\n this.close();\n }\n }\n\n @HostListener('keydown', ['$event'])\n onKeydown(event: KeyboardEvent): void {\n if (!this.isOpen()) return;\n\n switch (event.key) {\n case 'ArrowDown':\n event.preventDefault();\n this.focusNext();\n break;\n case 'ArrowUp':\n event.preventDefault();\n this.focusPrevious();\n break;\n case 'Enter':\n case ' ':\n event.preventDefault();\n const focused = this.items()[this.focusedIndex()];\n if (focused && !focused.disabled()) {\n focused.clicked.emit();\n }\n break;\n case 'Escape':\n event.preventDefault();\n this.close();\n break;\n case 'Tab':\n this.close();\n break;\n }\n }\n\n toggle(): void {\n if (this.isOpen()) {\n this.close();\n } else {\n this.open();\n }\n }\n\n open(): void {\n if (this.isOpen()) return;\n this.contextMenuPosition = null;\n this.isOpen.set(true);\n this.focusedIndex.set(-1);\n this.portalMenu();\n }\n\n /** Opens the dropdown at specific coordinates (for context menus) */\n openAt(x: number, y: number): void {\n if (this.isOpen()) {\n this.close();\n }\n this.contextMenuPosition = { x, y };\n this.isOpen.set(true);\n this.focusedIndex.set(-1);\n this.portalMenu();\n }\n\n close(): void {\n if (!this.isOpen()) return;\n this.unportalMenu();\n this.isOpen.set(false);\n this.focusedIndex.set(-1);\n this.contextMenuPosition = null;\n }\n\n private focusNext(): void {\n const menuItems = this.items();\n const current = this.focusedIndex();\n let next = current + 1;\n\n while (next < menuItems.length && menuItems[next].disabled()) {\n next++;\n }\n\n if (next < menuItems.length) {\n this.focusedIndex.set(next);\n }\n }\n\n private focusPrevious(): void {\n const menuItems = this.items();\n const current = this.focusedIndex();\n let prev = current <= 0 ? menuItems.length - 1 : current - 1;\n\n while (prev >= 0 && menuItems[prev].disabled()) {\n prev--;\n }\n\n if (prev >= 0) {\n this.focusedIndex.set(prev);\n }\n }\n\n private portalMenu(): void {\n const menu = this.menuRef?.nativeElement;\n if (!menu) return;\n\n menu.style.display = 'block';\n this.document.body.appendChild(menu);\n this.updateMenuPosition();\n this.addPositionListeners();\n }\n\n private unportalMenu(): void {\n const menu = this.menuRef?.nativeElement;\n if (!menu) return;\n\n if (menu.parentElement === this.document.body) {\n const wrapper = this.elementRef.nativeElement.querySelector('.ui-dropdown');\n if (wrapper) {\n wrapper.appendChild(menu);\n }\n }\n\n menu.style.display = '';\n menu.style.position = '';\n menu.style.top = '';\n menu.style.left = '';\n menu.style.right = '';\n menu.style.bottom = '';\n menu.style.width = '';\n menu.style.zIndex = '';\n menu.style.margin = '';\n\n this.removePositionListeners();\n }\n\n private updateMenuPosition(): void {\n const menu = this.menuRef?.nativeElement;\n if (!menu) return;\n\n menu.style.position = 'fixed';\n menu.style.zIndex = '99999';\n menu.style.margin = '0';\n\n // Context menu mode: position at cursor\n if (this.contextMenuPosition) {\n const { x, y } = this.contextMenuPosition;\n const menuWidth = menu.scrollWidth;\n const menuHeight = menu.scrollHeight;\n\n // Adjust if menu would go off-screen\n const adjustedX = x + menuWidth > window.innerWidth ? window.innerWidth - menuWidth - 4 : x;\n const adjustedY = y + menuHeight > window.innerHeight ? window.innerHeight - menuHeight - 4 : y;\n\n menu.style.left = `${Math.max(4, adjustedX)}px`;\n menu.style.top = `${Math.max(4, adjustedY)}px`;\n menu.style.right = 'auto';\n menu.style.bottom = 'auto';\n return;\n }\n\n // Standard dropdown mode: position relative to trigger\n const trigger = this.triggerRef?.nativeElement;\n if (!trigger) return;\n\n const triggerRect = trigger.getBoundingClientRect();\n const menuHeight = menu.scrollHeight;\n const gap = 4;\n const spaceBelow = window.innerHeight - triggerRect.bottom;\n const spaceAbove = triggerRect.top;\n const preferTop = this.position().startsWith('top');\n const openAbove = preferTop\n ? spaceAbove >= menuHeight + gap || spaceAbove > spaceBelow\n : spaceBelow < menuHeight + gap && spaceAbove > spaceBelow;\n const alignEnd = this.position().endsWith('end');\n\n if (openAbove) {\n menu.style.top = 'auto';\n menu.style.bottom = `${window.innerHeight - triggerRect.top + gap}px`;\n } else {\n menu.style.top = `${triggerRect.bottom + gap}px`;\n menu.style.bottom = 'auto';\n }\n\n if (alignEnd) {\n menu.style.left = 'auto';\n menu.style.right = `${window.innerWidth - triggerRect.right}px`;\n } else {\n menu.style.left = `${triggerRect.left}px`;\n menu.style.right = 'auto';\n }\n\n if (this.matchTriggerWidth()) {\n menu.style.width = `${triggerRect.width}px`;\n }\n }\n\n private addPositionListeners(): void {\n const update = () => {\n if (this.isOpen()) {\n this.updateMenuPosition();\n }\n };\n window.addEventListener('scroll', update, true);\n window.addEventListener('resize', update);\n this.positionCleanup = () => {\n window.removeEventListener('scroll', update, true);\n window.removeEventListener('resize', update);\n };\n }\n\n private removePositionListeners(): void {\n this.positionCleanup?.();\n this.positionCleanup = null;\n }\n}\n","<div class=\"ui-dropdown\">\n <div #triggerRef class=\"ui-dropdown__trigger\">\n <ng-content select=\"[uiDropdownTrigger]\" />\n </div>\n\n <div\n #menuRef\n class=\"ui-dropdown__menu\"\n [class.ui-dropdown__menu--open]=\"isOpen()\"\n [attr.role]=\"'menu'\"\n >\n <ng-content />\n </div>\n</div>\n","import { Component, ChangeDetectionStrategy } from '@angular/core';\n\n@Component({\n selector: 'ui-dropdown-divider',\n standalone: true,\n templateUrl: './dropdown-divider.component.html',\n styleUrl: './dropdown-divider.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class DropdownDividerComponent {}\n","<div class=\"ui-dropdown-divider\" role=\"separator\"></div>\n","import { Directive, HostListener, input } from '@angular/core';\nimport { DropdownComponent } from './dropdown.component';\n\n@Directive({\n selector: '[uiContextMenu]',\n standalone: true,\n})\nexport class ContextMenuDirective {\n readonly uiContextMenu = input.required<DropdownComponent>();\n\n @HostListener('contextmenu', ['$event'])\n onContextMenu(event: MouseEvent): void {\n event.preventDefault();\n event.stopPropagation();\n this.uiContextMenu().openAt(event.clientX, event.clientY);\n }\n}\n","import { Component, input, model, output, computed, ChangeDetectionStrategy } from '@angular/core';\n\nexport type CheckboxSize = 'sm' | 'md' | 'lg';\n\n@Component({\n selector: 'ui-checkbox',\n standalone: true,\n templateUrl: './checkbox.component.html',\n styleUrl: './checkbox.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class CheckboxComponent {\n readonly size = input<CheckboxSize>('md');\n readonly disabled = input(false);\n readonly indeterminate = input(false);\n\n readonly checked = model(false);\n\n // Check if there's label content\n protected readonly hasLabel = input(true);\n\n protected readonly checkboxClasses = computed(() => {\n return `ui-checkbox--${this.size()}`;\n });\n\n protected handleChange(event: Event): void {\n const target = event.target as HTMLInputElement;\n this.checked.set(target.checked);\n }\n}\n","<label\n class=\"ui-checkbox\"\n [class]=\"checkboxClasses()\"\n [class.ui-checkbox--disabled]=\"disabled()\"\n [class.ui-checkbox--checked]=\"checked()\"\n [class.ui-checkbox--indeterminate]=\"indeterminate()\"\n>\n <input\n type=\"checkbox\"\n class=\"ui-checkbox__input\"\n [checked]=\"checked()\"\n [disabled]=\"disabled()\"\n [indeterminate]=\"indeterminate()\"\n (change)=\"handleChange($event)\"\n />\n <span class=\"ui-checkbox__box\">\n <svg class=\"ui-checkbox__icon ui-checkbox__icon--check\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"3\">\n <polyline points=\"20 6 9 17 4 12\"></polyline>\n </svg>\n <svg class=\"ui-checkbox__icon ui-checkbox__icon--indeterminate\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"3\">\n <line x1=\"5\" y1=\"12\" x2=\"19\" y2=\"12\"></line>\n </svg>\n </span>\n @if (hasLabel()) {\n <span class=\"ui-checkbox__label\">\n <ng-content />\n </span>\n }\n</label>\n","import { Component, input, model, computed, ChangeDetectionStrategy } from '@angular/core';\n\nexport type SwitchSize = 'sm' | 'md' | 'lg';\n\n@Component({\n selector: 'ui-switch',\n standalone: true,\n templateUrl: './switch.component.html',\n styleUrl: './switch.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class SwitchComponent {\n readonly size = input<SwitchSize>('md');\n readonly disabled = input(false);\n\n readonly checked = model(false);\n\n // Check if there's label content\n protected readonly hasLabel = input(true);\n\n protected readonly switchClasses = computed(() => {\n return `ui-switch--${this.size()}`;\n });\n\n protected handleChange(event: Event): void {\n const target = event.target as HTMLInputElement;\n this.checked.set(target.checked);\n }\n}\n","<label\n class=\"ui-switch\"\n [class]=\"switchClasses()\"\n [class.ui-switch--disabled]=\"disabled()\"\n [class.ui-switch--checked]=\"checked()\"\n>\n <input\n type=\"checkbox\"\n class=\"ui-switch__input\"\n [checked]=\"checked()\"\n [disabled]=\"disabled()\"\n (change)=\"handleChange($event)\"\n role=\"switch\"\n [attr.aria-checked]=\"checked()\"\n />\n <span class=\"ui-switch__track\">\n <span class=\"ui-switch__thumb\"></span>\n </span>\n @if (hasLabel()) {\n <span class=\"ui-switch__label\">\n <ng-content />\n </span>\n }\n</label>\n","import { ChangeDetectionStrategy, Component, computed, input, output } from '@angular/core';\n\nexport type BadgeVariant = 'default' | 'primary' | 'success' | 'warning' | 'danger' | 'info';\nexport type BadgeSize = 'sm' | 'md' | 'lg';\n\n@Component({\n selector: 'ui-badge',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n templateUrl: './badge.component.html',\n styleUrl: './badge.component.scss',\n})\nexport class BadgeComponent {\n readonly variant = input<BadgeVariant>('default');\n readonly size = input<BadgeSize>('md');\n readonly rounded = input<boolean>(false);\n readonly removable = input<boolean>(false);\n\n readonly removed = output<void>();\n\n protected readonly badgeClass = computed(() => {\n const classes = ['ui-badge', `ui-badge--${this.variant()}`, `ui-badge--${this.size()}`];\n if (this.rounded()) classes.push('ui-badge--rounded');\n return classes.join(' ');\n });\n\n protected onRemove(event: Event): void {\n event.stopPropagation();\n this.removed.emit();\n }\n}\n","<span [class]=\"badgeClass()\">\n <ng-content />\n @if (removable()) {\n <button type=\"button\" class=\"ui-badge__remove\" (click)=\"onRemove($event)\" aria-label=\"Remove\">\n <svg viewBox=\"0 0 16 16\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\">\n <path d=\"M4 4l8 8M12 4l-8 8\"/>\n </svg>\n </button>\n }\n</span>\n","import { Component, input, model, computed, ChangeDetectionStrategy } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\n\nexport type TextareaResize = 'none' | 'vertical' | 'horizontal' | 'both';\n\n@Component({\n selector: 'ui-textarea',\n standalone: true,\n imports: [FormsModule],\n templateUrl: './textarea.component.html',\n styleUrl: './textarea.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class TextareaComponent {\n readonly label = input<string>('');\n readonly placeholder = input<string>('');\n readonly hint = input<string>('');\n readonly error = input<string>('');\n readonly disabled = input(false);\n readonly readonly = input(false);\n readonly required = input(false);\n readonly rows = input(3);\n readonly maxlength = input<number | null>(null);\n readonly resize = input<TextareaResize>('vertical');\n readonly id = input<string>('');\n\n readonly value = model<string>('');\n\n private static nextId = 0;\n private readonly generatedId = `ui-textarea-${++TextareaComponent.nextId}`;\n\n protected readonly textareaId = computed(() => this.id() || this.generatedId);\n\n protected readonly textareaClass = computed(() => {\n return `ui-textarea ui-textarea--resize-${this.resize()}`;\n });\n\n protected readonly isAtLimit = computed(() => {\n const max = this.maxlength();\n return max !== null && this.value().length >= max;\n });\n}\n","<div class=\"ui-textarea-wrapper\" [class.ui-textarea-wrapper--error]=\"error()\" [class.ui-textarea-wrapper--disabled]=\"disabled()\">\n @if (label()) {\n <label class=\"ui-textarea__label\" [attr.for]=\"textareaId()\">\n {{ label() }}\n @if (required()) {\n <span class=\"ui-textarea__required\">*</span>\n }\n </label>\n }\n <div class=\"ui-textarea__container\">\n <textarea\n [class]=\"textareaClass()\"\n [id]=\"textareaId()\"\n [placeholder]=\"placeholder()\"\n [disabled]=\"disabled()\"\n [readonly]=\"readonly()\"\n [required]=\"required()\"\n [rows]=\"rows()\"\n [attr.maxlength]=\"maxlength()\"\n [(ngModel)]=\"value\"\n ></textarea>\n </div>\n <div class=\"ui-textarea__footer\">\n @if (error()) {\n <span class=\"ui-textarea__error\">{{ error() }}</span>\n } @else if (hint()) {\n <span class=\"ui-textarea__hint\">{{ hint() }}</span>\n } @else {\n <span></span>\n }\n @if (maxlength()) {\n <span class=\"ui-textarea__counter\" [class.ui-textarea__counter--limit]=\"isAtLimit()\">\n {{ value().toString().length }} / {{ maxlength() }}\n </span>\n }\n </div>\n</div>\n","import { Component, input, computed, ChangeDetectionStrategy } from '@angular/core';\n\nexport type ProgressVariant = 'primary' | 'success' | 'warning' | 'danger';\nexport type ProgressSize = 'sm' | 'md' | 'lg';\n\n@Component({\n selector: 'ui-progress',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n templateUrl: './progress.component.html',\n styleUrl: './progress.component.scss',\n})\nexport class ProgressComponent {\n readonly value = input(0);\n readonly variant = input<ProgressVariant>('primary');\n readonly size = input<ProgressSize>('md');\n readonly showLabel = input(false);\n readonly indeterminate = input(false);\n readonly striped = input(false);\n readonly animated = input(false);\n\n protected readonly clampedValue = computed(() => Math.min(100, Math.max(0, this.value())));\n\n protected readonly barWidth = computed(() => {\n if (this.indeterminate()) return '30%';\n return `${this.clampedValue()}%`;\n });\n\n protected readonly trackClass = computed(() => {\n return `ui-progress ui-progress--${this.size()}`;\n });\n\n protected readonly barClass = computed(() => {\n const classes = ['ui-progress__bar', `ui-progress__bar--${this.variant()}`];\n if (this.striped() || this.animated()) classes.push('ui-progress__bar--striped');\n if (this.animated()) classes.push('ui-progress__bar--animated');\n if (this.indeterminate()) classes.push('ui-progress__bar--indeterminate');\n return classes.join(' ');\n });\n}\n","<div [class]=\"trackClass()\" role=\"progressbar\"\n [attr.aria-valuenow]=\"indeterminate() ? null : clampedValue()\"\n [attr.aria-valuemin]=\"indeterminate() ? null : 0\"\n [attr.aria-valuemax]=\"indeterminate() ? null : 100\">\n <div [class]=\"barClass()\" [style.width]=\"barWidth()\">\n @if (showLabel() && !indeterminate()) {\n <span class=\"ui-progress__label\">{{ clampedValue() }}%</span>\n }\n </div>\n</div>\n","import { Component, input, computed, ChangeDetectionStrategy } from '@angular/core';\n\nexport type CircularProgressVariant = 'primary' | 'success' | 'warning' | 'danger';\nexport type CircularProgressSize = 'xs' | 'sm' | 'md' | 'lg' | 'xl';\n\n@Component({\n selector: 'ui-circular-progress',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n templateUrl: './circular-progress.component.html',\n styleUrl: './circular-progress.component.scss',\n})\nexport class CircularProgressComponent {\n readonly value = input(0);\n readonly variant = input<CircularProgressVariant>('primary');\n readonly size = input<CircularProgressSize>('md');\n readonly strokeWidth = input(4);\n readonly showLabel = input(false);\n readonly indeterminate = input(false);\n\n protected readonly clampedValue = computed(() => Math.min(100, Math.max(0, this.value())));\n\n protected readonly sizeValue = computed(() => {\n const sizes: Record<CircularProgressSize, number> = { xs: 16, sm: 32, md: 48, lg: 64, xl: 96 };\n return sizes[this.size()];\n });\n\n protected readonly center = computed(() => this.sizeValue() / 2);\n protected readonly radius = computed(() => (this.sizeValue() - this.strokeWidth()) / 2);\n protected readonly circumference = computed(() => 2 * Math.PI * this.radius());\n protected readonly viewBox = computed(() => `0 0 ${this.sizeValue()} ${this.sizeValue()}`);\n\n protected readonly dashOffset = computed(() => {\n if (this.indeterminate()) return this.circumference() * 0.75;\n return this.circumference() * (1 - this.clampedValue() / 100);\n });\n\n protected readonly containerClass = computed(() => {\n const classes = ['ui-circular-progress', `ui-circular-progress--${this.size()}`];\n if (this.indeterminate()) classes.push('ui-circular-progress--indeterminate');\n return classes.join(' ');\n });\n\n protected readonly circleClass = computed(() => {\n const classes = ['ui-circular-progress__circle', `ui-circular-progress__circle--${this.variant()}`];\n if (this.indeterminate()) classes.push('ui-circular-progress__circle--indeterminate');\n return classes.join(' ');\n });\n}\n","<div [class]=\"containerClass()\" role=\"progressbar\"\n [attr.aria-valuenow]=\"indeterminate() ? null : clampedValue()\"\n [attr.aria-valuemin]=\"indeterminate() ? null : 0\"\n [attr.aria-valuemax]=\"indeterminate() ? null : 100\"\n [style.width.px]=\"sizeValue()\"\n [style.height.px]=\"sizeValue()\">\n <svg [attr.viewBox]=\"viewBox()\">\n <circle\n class=\"ui-circular-progress__track\"\n [attr.cx]=\"center()\"\n [attr.cy]=\"center()\"\n [attr.r]=\"radius()\"\n [attr.stroke-width]=\"strokeWidth()\"\n fill=\"none\"\n />\n <circle\n [class]=\"circleClass()\"\n [attr.cx]=\"center()\"\n [attr.cy]=\"center()\"\n [attr.r]=\"radius()\"\n [attr.stroke-width]=\"strokeWidth()\"\n [attr.stroke-dasharray]=\"circumference()\"\n [attr.stroke-dashoffset]=\"dashOffset()\"\n fill=\"none\"\n stroke-linecap=\"round\"\n />\n </svg>\n @if (showLabel() && !indeterminate()) {\n <span class=\"ui-circular-progress__label\">{{ clampedValue() }}%</span>\n }\n <span class=\"ui-circular-progress__content\">\n <ng-content />\n </span>\n</div>\n","import { Component, input, computed, ChangeDetectionStrategy } from '@angular/core';\n\nexport type SpinnerSize = 'sm' | 'md' | 'lg' | 'xl';\nexport type SpinnerVariant = 'primary' | 'secondary' | 'white';\n\n@Component({\n selector: 'ui-spinner',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n templateUrl: './spinner.component.html',\n styleUrl: './spinner.component.scss',\n})\nexport class SpinnerComponent {\n readonly size = input<SpinnerSize>('md');\n readonly variant = input<SpinnerVariant>('primary');\n\n protected readonly spinnerClass = computed(() => {\n return `ui-spinner ui-spinner--${this.size()} ui-spinner--${this.variant()}`;\n });\n}\n","<span [class]=\"spinnerClass()\" role=\"status\" aria-label=\"Loading\">\n <svg viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <circle cx=\"12\" cy=\"12\" r=\"10\" stroke=\"currentColor\" stroke-opacity=\"0.25\" stroke-width=\"3\"/>\n <path d=\"M12 2a10 10 0 0 1 10 10\" stroke=\"currentColor\" stroke-width=\"3\" stroke-linecap=\"round\"/>\n </svg>\n</span>\n","import { Component, input, output, signal, computed, ChangeDetectionStrategy } from '@angular/core';\n\nexport type AlertVariant = 'info' | 'success' | 'warning' | 'danger';\n\n@Component({\n selector: 'ui-alert',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n templateUrl: './alert.component.html',\n styleUrl: './alert.component.scss',\n})\nexport class AlertComponent {\n readonly variant = input<AlertVariant>('info');\n readonly title = input<string>('');\n readonly dismissible = input(false);\n readonly showIcon = input(true);\n\n readonly dismissed = output<void>();\n\n protected readonly visible = signal(true);\n\n protected readonly alertClass = computed(() => {\n return `ui-alert ui-alert--${this.variant()}`;\n });\n\n protected dismiss(): void {\n this.visible.set(false);\n this.dismissed.emit();\n }\n}\n","@if (visible()) {\n <div [class]=\"alertClass()\" role=\"alert\">\n @if (showIcon()) {\n <span class=\"ui-alert__icon\">\n @switch (variant()) {\n @case ('success') {\n <svg viewBox=\"0 0 20 20\" fill=\"currentColor\">\n <path fill-rule=\"evenodd\" d=\"M10 18a8 8 0 100-16 8 8 0 000 16zm3.707-9.293a1 1 0 00-1.414-1.414L9 10.586 7.707 9.293a1 1 0 00-1.414 1.414l2 2a1 1 0 001.414 0l4-4z\" clip-rule=\"evenodd\"/>\n </svg>\n }\n @case ('warning') {\n <svg viewBox=\"0 0 20 20\" fill=\"currentColor\">\n <path fill-rule=\"evenodd\" d=\"M8.257 3.099c.765-1.36 2.722-1.36 3.486 0l5.58 9.92c.75 1.334-.213 2.98-1.742 2.98H4.42c-1.53 0-2.493-1.646-1.743-2.98l5.58-9.92zM11 13a1 1 0 11-2 0 1 1 0 012 0zm-1-8a1 1 0 00-1 1v3a1 1 0 002 0V6a1 1 0 00-1-1z\" clip-rule=\"evenodd\"/>\n </svg>\n }\n @case ('danger') {\n <svg viewBox=\"0 0 20 20\" fill=\"currentColor\">\n <path fill-rule=\"evenodd\" d=\"M10 18a8 8 0 100-16 8 8 0 000 16zM8.707 7.293a1 1 0 00-1.414 1.414L8.586 10l-1.293 1.293a1 1 0 101.414 1.414L10 11.414l1.293 1.293a1 1 0 001.414-1.414L11.414 10l1.293-1.293a1 1 0 00-1.414-1.414L10 8.586 8.707 7.293z\" clip-rule=\"evenodd\"/>\n </svg>\n }\n @default {\n <svg viewBox=\"0 0 20 20\" fill=\"currentColor\">\n <path fill-rule=\"evenodd\" d=\"M18 10a8 8 0 11-16 0 8 8 0 0116 0zm-7-4a1 1 0 11-2 0 1 1 0 012 0zM9 9a1 1 0 000 2v3a1 1 0 001 1h1a1 1 0 100-2v-3a1 1 0 00-1-1H9z\" clip-rule=\"evenodd\"/>\n </svg>\n }\n }\n </span>\n }\n <div class=\"ui-alert__content\">\n @if (title()) {\n <h4 class=\"ui-alert__title\">{{ title() }}</h4>\n }\n <div class=\"ui-alert__message\">\n <ng-content />\n </div>\n </div>\n @if (dismissible()) {\n <button type=\"button\" class=\"ui-alert__close\" (click)=\"dismiss()\" aria-label=\"Dismiss\">\n <svg viewBox=\"0 0 20 20\" fill=\"currentColor\">\n <path fill-rule=\"evenodd\" d=\"M4.293 4.293a1 1 0 011.414 0L10 8.586l4.293-4.293a1 1 0 111.414 1.414L11.414 10l4.293 4.293a1 1 0 01-1.414 1.414L10 11.414l-4.293 4.293a1 1 0 01-1.414-1.414L8.586 10 4.293 5.707a1 1 0 010-1.414z\" clip-rule=\"evenodd\"/>\n </svg>\n </button>\n }\n </div>\n}\n","import { Component, input, output, computed, ChangeDetectionStrategy } from '@angular/core';\n\nexport type CardVariant = 'default' | 'outlined' | 'elevated';\nexport type CardPadding = 'none' | 'sm' | 'md' | 'lg';\n\n@Component({\n selector: 'ui-card',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n templateUrl: './card.component.html',\n styleUrl: './card.component.scss',\n})\nexport class CardComponent {\n readonly variant = input<CardVariant>('default');\n readonly padding = input<CardPadding>('md');\n readonly clickable = input(false);\n\n readonly clicked = output<void>();\n\n protected readonly cardClass = computed(() => {\n const classes = ['ui-card', `ui-card--${this.variant()}`, `ui-card--padding-${this.padding()}`];\n if (this.clickable()) classes.push('ui-card--clickable');\n return classes.join(' ');\n });\n\n protected onClick(): void {\n if (this.clickable()) {\n this.clicked.emit();\n }\n }\n}\n","<div [class]=\"cardClass()\" [attr.role]=\"clickable() ? 'button' : null\" [attr.tabindex]=\"clickable() ? 0 : null\" (click)=\"onClick()\" (keydown.enter)=\"onClick()\" (keydown.space)=\"onClick()\">\n <div class=\"ui-card__header\">\n <ng-content select=\"[card-header]\" />\n </div>\n <div class=\"ui-card__body\">\n <ng-content />\n </div>\n <div class=\"ui-card__footer\">\n <ng-content select=\"[card-footer]\" />\n </div>\n</div>\n","import { Directive, ElementRef, inject, input, OnDestroy, PLATFORM_ID, Renderer2, signal, effect, HostListener } from '@angular/core';\nimport { DOCUMENT, isPlatformBrowser } from '@angular/common';\n\nexport type TooltipPosition = 'top' | 'bottom' | 'left' | 'right';\n\n@Directive({\n selector: '[uiTooltip]',\n standalone: true,\n})\nexport class TooltipDirective implements OnDestroy {\n readonly uiTooltip = input.required<string>();\n readonly tooltipPosition = input<TooltipPosition>('top');\n readonly tooltipDelay = input(200);\n readonly tooltipDisabled = input(false);\n\n private readonly document = inject(DOCUMENT);\n private readonly platformId = inject(PLATFORM_ID);\n\n private tooltipElement: HTMLElement | null = null;\n private showTimeout: ReturnType<typeof setTimeout> | null = null;\n private readonly isVisible = signal(false);\n\n constructor(\n private readonly el: ElementRef<HTMLElement>,\n private readonly renderer: Renderer2\n ) {\n effect(() => {\n if (this.tooltipElement && this.isVisible()) {\n this.renderer.setProperty(this.tooltipElement.querySelector('.ui-tooltip__content'), 'textContent', this.uiTooltip());\n }\n });\n }\n\n @HostListener('mouseenter')\n onMouseEnter(): void {\n if (this.tooltipDisabled()) return;\n this.showTimeout = setTimeout(() => this.show(), this.tooltipDelay());\n }\n\n @HostListener('mouseleave')\n onMouseLeave(): void {\n this.hide();\n }\n\n @HostListener('focus')\n onFocus(): void {\n if (this.tooltipDisabled()) return;\n this.show();\n }\n\n @HostListener('blur')\n onBlur(): void {\n this.hide();\n }\n\n private show(): void {\n if (this.tooltipDisabled() || this.isVisible()) return;\n\n this.createTooltip();\n this.positionTooltip();\n this.isVisible.set(true);\n\n requestAnimationFrame(() => {\n if (this.tooltipElement) {\n this.renderer.addClass(this.tooltipElement, 'ui-tooltip--visible');\n }\n });\n }\n\n private hide(): void {\n if (this.showTimeout) {\n clearTimeout(this.showTimeout);\n this.showTimeout = null;\n }\n\n if (this.tooltipElement) {\n this.renderer.removeClass(this.tooltipElement, 'ui-tooltip--visible');\n setTimeout(() => this.destroyTooltip(), 150);\n }\n\n this.isVisible.set(false);\n }\n\n private createTooltip(): void {\n if (this.tooltipElement) return;\n\n this.tooltipElement = this.renderer.createElement('div');\n this.renderer.addClass(this.tooltipElement, 'ui-tooltip');\n this.renderer.addClass(this.tooltipElement, `ui-tooltip--${this.tooltipPosition()}`);\n\n const content = this.renderer.createElement('span');\n this.renderer.addClass(content, 'ui-tooltip__content');\n this.renderer.setProperty(content, 'textContent', this.uiTooltip());\n this.renderer.appendChild(this.tooltipElement, content);\n\n const arrow = this.renderer.createElement('span');\n this.renderer.addClass(arrow, 'ui-tooltip__arrow');\n this.renderer.appendChild(this.tooltipElement, arrow);\n\n this.renderer.appendChild(this.document.body, this.tooltipElement);\n this.injectStyles();\n }\n\n private positionTooltip(): void {\n if (!this.tooltipElement) return;\n\n const hostRect = this.el.nativeElement.getBoundingClientRect();\n const tooltipRect = this.tooltipElement.getBoundingClientRect();\n const scrollY = window.scrollY;\n const scrollX = window.scrollX;\n\n let top = 0;\n let left = 0;\n\n switch (this.tooltipPosition()) {\n case 'top':\n top = hostRect.top + scrollY - tooltipRect.height - 8;\n left = hostRect.left + scrollX + (hostRect.width - tooltipRect.width) / 2;\n break;\n case 'bottom':\n top = hostRect.bottom + scrollY + 8;\n left = hostRect.left + scrollX + (hostRect.width - tooltipRect.width) / 2;\n break;\n case 'left':\n top = hostRect.top + scrollY + (hostRect.height - tooltipRect.height) / 2;\n left = hostRect.left + scrollX - tooltipRect.width - 8;\n break;\n case 'right':\n top = hostRect.top + scrollY + (hostRect.height - tooltipRect.height) / 2;\n left = hostRect.right + scrollX + 8;\n break;\n }\n\n // Viewport boundary checks\n const padding = 8;\n left = Math.max(padding, Math.min(left, window.innerWidth - tooltipRect.width - padding));\n top = Math.max(padding, top);\n\n this.renderer.setStyle(this.tooltipElement, 'top', `${top}px`);\n this.renderer.setStyle(this.tooltipElement, 'left', `${left}px`);\n }\n\n private destroyTooltip(): void {\n if (this.tooltipElement) {\n this.renderer.removeChild(this.document.body, this.tooltipElement);\n this.tooltipElement = null;\n }\n }\n\n private injectStyles(): void {\n const styleId = 'ui-tooltip-styles';\n if (!isPlatformBrowser(this.platformId) || this.document.getElementById(styleId)) return;\n\n const style = this.renderer.createElement('style');\n this.renderer.setProperty(style, 'id', styleId);\n this.renderer.setProperty(style, 'textContent', `\n .ui-tooltip {\n position: absolute;\n z-index: 10000;\n pointer-events: none;\n opacity: 0;\n transform: scale(0.95);\n transition: opacity 150ms, transform 150ms;\n }\n\n .ui-tooltip--visible {\n opacity: 1;\n transform: scale(1);\n }\n\n .ui-tooltip__content {\n display: block;\n padding: 0.375rem 0.625rem;\n font-size: 0.75rem;\n font-weight: 500;\n color: white;\n background: #1f2937;\n border-radius: 0.375rem;\n white-space: nowrap;\n box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -1px rgba(0, 0, 0, 0.06);\n }\n\n .ui-tooltip__arrow {\n position: absolute;\n width: 8px;\n height: 8px;\n background: #1f2937;\n transform: rotate(45deg);\n }\n\n .ui-tooltip--top .ui-tooltip__arrow {\n bottom: -4px;\n left: 50%;\n margin-left: -4px;\n }\n\n .ui-tooltip--bottom .ui-tooltip__arrow {\n top: -4px;\n left: 50%;\n margin-left: -4px;\n }\n\n .ui-tooltip--left .ui-tooltip__arrow {\n right: -4px;\n top: 50%;\n margin-top: -4px;\n }\n\n .ui-tooltip--right .ui-tooltip__arrow {\n left: -4px;\n top: 50%;\n margin-top: -4px;\n }\n `);\n this.renderer.appendChild(this.document.head, style);\n }\n\n ngOnDestroy(): void {\n this.hide();\n this.destroyTooltip();\n }\n}\n","import {\n Component,\n input,\n signal,\n computed,\n ElementRef,\n viewChild,\n ChangeDetectionStrategy,\n model,\n} from '@angular/core';\nimport type { RadioGroupComponent, RadioGroupVariant } from './radio-group.component';\n\n@Component({\n selector: 'ui-radio',\n standalone: true,\n templateUrl: './radio.component.html',\n styleUrl: './radio.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class RadioComponent<T = unknown> {\n readonly value = model.required<T>();\n readonly disabled = input(false);\n\n private readonly inputEl = viewChild.required<ElementRef<HTMLInputElement>>('inputEl');\n\n /** @internal */\n readonly _checked = signal(false);\n /** @internal */\n readonly _index = signal(0);\n /** @internal */\n readonly _variant = signal<RadioGroupVariant>('default');\n\n private _group: RadioGroupComponent<T> | null = null;\n\n protected readonly _groupName = computed(() => {\n return this._group?.name() ?? '';\n });\n\n protected readonly isDisabled = computed(() => {\n return this.disabled() || (this._group?.disabled() ?? false);\n });\n\n protected readonly radioClasses = computed(() => {\n const size = this._group?.size() ?? 'md';\n const variant = this._variant();\n return `ui-radio--${variant} ui-radio--${size}`;\n });\n\n /** @internal */\n _setGroup(group: RadioGroupComponent<T>): void {\n this._group = group;\n this._variant.set(group.variant());\n }\n\n /** @internal */\n _setIndex(index: number): void {\n this._index.set(index);\n }\n\n /** @internal */\n _setChecked(checked: boolean): void {\n this._checked.set(checked);\n }\n\n /** @internal */\n _focus(): void {\n this.inputEl().nativeElement.focus();\n }\n\n protected handleChange(): void {\n if (this.isDisabled()) return;\n this._group?._selectRadio(this.value());\n }\n\n protected handleKeyDown(event: KeyboardEvent): void {\n this._group?._handleKeyDown(event, this._index());\n }\n}\n","<label\n class=\"ui-radio\"\n [class]=\"radioClasses()\"\n [class.ui-radio--disabled]=\"isDisabled()\"\n [class.ui-radio--checked]=\"_checked()\"\n>\n <input\n #inputEl\n type=\"radio\"\n class=\"ui-radio__input\"\n [attr.name]=\"_groupName()\"\n [value]=\"value()\"\n [checked]=\"_checked()\"\n [disabled]=\"isDisabled()\"\n (change)=\"handleChange()\"\n (keydown)=\"handleKeyDown($event)\"\n />\n @if (_variant() === 'default') {\n <span class=\"ui-radio__circle\">\n <span class=\"ui-radio__dot\"></span>\n </span>\n }\n <span class=\"ui-radio__label\">\n <ng-content />\n </span>\n</label>\n","import {\n Component,\n input,\n model,\n output,\n computed,\n contentChildren,\n AfterContentInit,\n effect,\n ChangeDetectionStrategy,\n} from '@angular/core';\nimport { RadioComponent } from './radio.component';\n\nexport type RadioGroupOrientation = 'horizontal' | 'vertical';\nexport type RadioGroupSize = 'sm' | 'md' | 'lg';\nexport type RadioGroupVariant = 'default' | 'segmented';\n\n@Component({\n selector: 'ui-radio-group',\n standalone: true,\n templateUrl: './radio-group.component.html',\n styleUrl: './radio-group.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class RadioGroupComponent<T = unknown> implements AfterContentInit {\n readonly name = input<string>(`radio-group-${Math.random().toString(36).slice(2, 9)}`);\n readonly disabled = input(false);\n readonly orientation = input<RadioGroupOrientation>('vertical');\n readonly size = input<RadioGroupSize>('md');\n readonly variant = input<RadioGroupVariant>('default');\n readonly ariaLabel = input<string>('');\n\n readonly value = model<T | null>(null);\n\n readonly changed = output<T | null>();\n\n readonly radios = contentChildren(RadioComponent);\n\n protected readonly groupClasses = computed(() => {\n const classes: string[] = [];\n const v = this.variant();\n\n if (v === 'segmented') {\n classes.push('ui-radio-group--segmented');\n classes.push(`ui-radio-group--${this.size()}`);\n } else {\n classes.push(`ui-radio-group--${this.orientation()}`);\n }\n\n if (this.disabled()) {\n classes.push('ui-radio-group--disabled');\n }\n return classes.join(' ');\n });\n\n constructor() {\n // Sync value changes to child radios\n effect(() => {\n const currentValue = this.value();\n const radioList = this.radios();\n radioList.forEach(radio => {\n radio._setChecked(radio.value() === currentValue);\n });\n });\n }\n\n ngAfterContentInit(): void {\n this._setupRadios();\n }\n\n private _setupRadios(): void {\n const radioList = this.radios();\n radioList.forEach((radio, index) => {\n radio._setGroup(this);\n radio._setIndex(index);\n });\n }\n\n /** @internal */\n _selectRadio(value: T): void {\n if (this.disabled()) return;\n this.value.set(value);\n this.changed.emit(value);\n }\n\n /** @internal */\n _handleKeyDown(event: KeyboardEvent, currentIndex: number): void {\n const radioList = this.radios();\n const enabledRadios = radioList.filter(r => !r.disabled());\n if (enabledRadios.length === 0) return;\n\n const currentEnabledIndex = enabledRadios.findIndex(\n r => r._index() === currentIndex\n );\n\n let nextIndex = -1;\n\n switch (event.key) {\n case 'ArrowDown':\n case 'ArrowRight':\n event.preventDefault();\n nextIndex = (currentEnabledIndex + 1) % enabledRadios.length;\n break;\n case 'ArrowUp':\n case 'ArrowLeft':\n event.preventDefault();\n nextIndex = (currentEnabledIndex - 1 + enabledRadios.length) % enabledRadios.length;\n break;\n case ' ':\n case 'Enter':\n event.preventDefault();\n const currentRadio = radioList[currentIndex];\n if (currentRadio && !currentRadio.disabled()) {\n this._selectRadio(currentRadio.value() as T);\n }\n return;\n default:\n return;\n }\n\n if (nextIndex >= 0) {\n const nextRadio = enabledRadios[nextIndex];\n nextRadio._focus();\n this._selectRadio(nextRadio.value() as T);\n }\n }\n}\n","<div\n class=\"ui-radio-group\"\n [class]=\"groupClasses()\"\n role=\"radiogroup\"\n [attr.aria-label]=\"ariaLabel()\"\n>\n <ng-content />\n</div>\n","import { Directive, TemplateRef, inject } from '@angular/core';\n\n@Directive({\n selector: '[uiTabIcon]',\n standalone: true,\n})\nexport class TabIconDirective {\n readonly templateRef = inject(TemplateRef);\n}\n","import {\n Component,\n input,\n signal,\n computed,\n TemplateRef,\n contentChild,\n ChangeDetectionStrategy,\n} from '@angular/core';\nimport { TabIconDirective } from './tab-icon.directive';\nimport type { TabRenderMode } from './tab.config';\nimport type { TabsComponent } from './tabs.component';\n\n@Component({\n selector: 'ui-tab, [ui-tab]',\n standalone: true,\n templateUrl: './tab.component.html',\n styleUrl: './tab.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class TabComponent {\n readonly id = input<string | number>('');\n readonly label = input.required<string>();\n readonly disabled = input(false);\n\n private readonly iconDirective = contentChild(TabIconDirective);\n\n /** @internal */\n readonly _index = signal(0);\n /** @internal */\n readonly _renderMode = signal<TabRenderMode>('conditional');\n\n private _parent: TabsComponent | null = null;\n\n readonly iconTemplate = computed<TemplateRef<unknown> | null>(() => {\n return this.iconDirective()?.templateRef ?? null;\n });\n\n protected readonly isActive = computed(() => {\n if (!this._parent) return false;\n return this._parent._isTabActive(this, this._index());\n });\n\n /** @internal */\n _setTabsParent(parent: TabsComponent, index: number): void {\n this._parent = parent;\n this._index.set(index);\n }\n}\n","@if (_renderMode() === 'persistent' || isActive()) {\n <div\n class=\"ui-tab-panel\"\n [class.ui-tab-panel--hidden]=\"_renderMode() === 'persistent' && !isActive()\"\n role=\"tabpanel\"\n [attr.id]=\"'panel-' + (id() || _index())\"\n [attr.aria-labelledby]=\"'tab-' + (id() || _index())\"\n >\n <ng-content />\n </div>\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { TabComponent } from './tab.component';\n\n@Pipe({\n name: 'tabActive',\n standalone: true,\n pure: true,\n})\nexport class TabActivePipe implements PipeTransform {\n transform(tab: TabComponent, index: number, activeTab: string | number): boolean {\n const tabId = tab.id();\n if (tabId !== '' && tabId !== undefined) {\n return activeTab === tabId;\n }\n return activeTab === index;\n }\n}\n","import {\n Component,\n input,\n model,\n computed,\n contentChildren,\n signal,\n effect,\n afterRenderEffect,\n ElementRef,\n viewChild,\n ChangeDetectionStrategy,\n} from '@angular/core';\nimport { NgTemplateOutlet } from '@angular/common';\nimport { TabComponent } from './tab.component';\nimport { TabActivePipe } from './tab-active.pipe';\nimport type { TabRenderMode } from './tab.config';\n\nexport type TabsVariant = 'default' | 'pills' | 'underline';\nexport type TabsSize = 'sm' | 'md' | 'lg';\n\n@Component({\n selector: 'ui-tabs',\n standalone: true,\n imports: [NgTemplateOutlet, TabActivePipe],\n templateUrl: './tabs.component.html',\n styleUrl: './tabs.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class TabsComponent {\n readonly variant = input<TabsVariant>('default');\n readonly size = input<TabsSize>('md');\n readonly ariaLabel = input<string>('');\n readonly renderMode = input<TabRenderMode>('conditional');\n\n readonly activeTab = model<string | number>(0);\n\n readonly tabs = contentChildren(TabComponent);\n\n private readonly tabList = viewChild<ElementRef<HTMLElement>>('tabList');\n\n protected readonly indicatorLeft = signal(0);\n protected readonly indicatorWidth = signal(0);\n\n protected readonly tabsClasses = computed(() => {\n return `ui-tabs--${this.variant()} ui-tabs--${this.size()}`;\n });\n\n constructor() {\n effect(() => {\n const tabList = this.tabs();\n const renderMode = this.renderMode();\n tabList.forEach((tab, index) => {\n tab._setTabsParent(this, index);\n tab._renderMode.set(renderMode);\n });\n });\n\n afterRenderEffect(() => {\n this.tabs();\n this.activeTab();\n this.updateIndicator();\n });\n }\n\n protected selectTab(tab: TabComponent, index: number): void {\n if (tab.disabled()) return;\n const tabId = tab.id();\n const value = tabId !== '' && tabId !== undefined ? tabId : index;\n this.activeTab.set(value);\n }\n\n protected handleKeyDown(event: KeyboardEvent, currentIndex: number): void {\n const tabList = this.tabs();\n const enabledTabs = tabList\n .map((t, i) => ({ tab: t, index: i }))\n .filter(({ tab }) => !tab.disabled());\n\n if (enabledTabs.length === 0) return;\n\n const currentEnabledIndex = enabledTabs.findIndex(({ index }) => index === currentIndex);\n let nextEnabledIndex = -1;\n\n switch (event.key) {\n case 'ArrowLeft':\n event.preventDefault();\n nextEnabledIndex = (currentEnabledIndex - 1 + enabledTabs.length) % enabledTabs.length;\n break;\n case 'ArrowRight':\n event.preventDefault();\n nextEnabledIndex = (currentEnabledIndex + 1) % enabledTabs.length;\n break;\n case 'Home':\n event.preventDefault();\n nextEnabledIndex = 0;\n break;\n case 'End':\n event.preventDefault();\n nextEnabledIndex = enabledTabs.length - 1;\n break;\n default:\n return;\n }\n\n if (nextEnabledIndex >= 0) {\n const { tab, index } = enabledTabs[nextEnabledIndex];\n this.selectTab(tab, index);\n this.focusTab(index);\n }\n }\n\n private focusTab(index: number): void {\n const tabListEl = this.tabList()?.nativeElement;\n if (!tabListEl) return;\n const buttons = tabListEl.querySelectorAll<HTMLButtonElement>('.ui-tabs__tab');\n buttons[index]?.focus();\n }\n\n private updateIndicator(): void {\n if (this.variant() !== 'underline') return;\n\n const tabListEl = this.tabList()?.nativeElement;\n if (!tabListEl) return;\n\n const buttons = tabListEl.querySelectorAll<HTMLButtonElement>('.ui-tabs__tab');\n const activeIndex = this.getActiveIndex();\n\n if (activeIndex >= 0 && activeIndex < buttons.length) {\n const activeButton = buttons[activeIndex];\n this.indicatorLeft.set(activeButton.offsetLeft);\n this.indicatorWidth.set(activeButton.offsetWidth);\n }\n }\n\n private getActiveIndex(): number {\n const active = this.activeTab();\n const tabList = this.tabs();\n\n for (let i = 0; i < tabList.length; i++) {\n const tab = tabList[i];\n const tabId = tab.id();\n if (tabId !== '' && tabId !== undefined) {\n if (active === tabId) return i;\n } else if (active === i) {\n return i;\n }\n }\n return 0;\n }\n\n /** @internal */\n _isTabActive(tab: TabComponent, index: number): boolean {\n const active = this.activeTab();\n const tabId = tab.id();\n if (tabId !== '' && tabId !== undefined) {\n return active === tabId;\n }\n return active === index;\n }\n}\n","<div class=\"ui-tabs\" [class]=\"tabsClasses()\">\n <div\n #tabList\n class=\"ui-tabs__list\"\n role=\"tablist\"\n [attr.aria-label]=\"ariaLabel()\"\n >\n @for (tab of tabs(); track tab.id() || $index; let i = $index) {\n @let active = tab | tabActive:i:activeTab();\n <button\n #tabButton\n type=\"button\"\n class=\"ui-tabs__tab\"\n role=\"tab\"\n [class.ui-tabs__tab--active]=\"active\"\n [class.ui-tabs__tab--disabled]=\"tab.disabled()\"\n [attr.aria-selected]=\"active\"\n [attr.aria-controls]=\"'panel-' + (tab.id() || i)\"\n [attr.tabindex]=\"active ? 0 : -1\"\n [disabled]=\"tab.disabled()\"\n (click)=\"selectTab(tab, i)\"\n (keydown)=\"handleKeyDown($event, i)\"\n >\n @if (tab.iconTemplate()) {\n <span class=\"ui-tabs__tab-icon\">\n <ng-container *ngTemplateOutlet=\"tab.iconTemplate()!\" />\n </span>\n }\n {{ tab.label() }}\n </button>\n }\n @if (variant() === 'underline') {\n <span\n class=\"ui-tabs__indicator\"\n [style.left.px]=\"indicatorLeft()\"\n [style.width.px]=\"indicatorWidth()\"\n ></span>\n }\n </div>\n <div class=\"ui-tabs__panels\">\n <ng-content />\n </div>\n</div>\n","import {\n Component,\n ChangeDetectionStrategy,\n inject,\n input,\n computed,\n Injector,\n effect,\n viewChild,\n ElementRef,\n signal,\n} from '@angular/core';\nimport { NgComponentOutlet, NgTemplateOutlet } from '@angular/common';\nimport { TabsService } from './tabs.service';\nimport { DynamicTab, TabRenderMode } from './tab.config';\n\nexport type DynamicTabsVariant = 'default' | 'pills' | 'underline';\nexport type DynamicTabsSize = 'sm' | 'md' | 'lg';\n\n@Component({\n selector: 'ui-dynamic-tabs',\n standalone: true,\n imports: [NgComponentOutlet, NgTemplateOutlet],\n template: `\n <div class=\"ui-tabs\" [class]=\"tabsClasses()\">\n <div\n #tabList\n class=\"ui-tabs__list\"\n role=\"tablist\"\n [attr.aria-label]=\"ariaLabel()\"\n >\n @for (tab of tabs(); track tab.id) {\n @let active = tab.id === activeTabId();\n <button\n type=\"button\"\n class=\"ui-tabs__tab\"\n role=\"tab\"\n [class.ui-tabs__tab--active]=\"active\"\n [class.ui-tabs__tab--closable]=\"tab.closable\"\n [attr.aria-selected]=\"active\"\n [attr.aria-controls]=\"'panel-' + tab.id\"\n [attr.tabindex]=\"active ? 0 : -1\"\n (click)=\"selectTab(tab)\"\n (keydown)=\"handleKeyDown($event, tab)\"\n >\n @if (tab.icon) {\n <span class=\"ui-tabs__tab-icon\">\n <ng-container *ngTemplateOutlet=\"tab.icon\" />\n </span>\n }\n <span class=\"ui-tabs__tab-label\">{{ tab.label }}</span>\n @if (tab.closable) {\n <button\n type=\"button\"\n class=\"ui-tabs__tab-close\"\n aria-label=\"Close tab\"\n (click)=\"closeTab($event, tab)\"\n >\n <svg\n width=\"14\"\n height=\"14\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n >\n <line x1=\"18\" y1=\"6\" x2=\"6\" y2=\"18\"></line>\n <line x1=\"6\" y1=\"6\" x2=\"18\" y2=\"18\"></line>\n </svg>\n </button>\n }\n </button>\n }\n @if (variant() === 'underline') {\n <span\n class=\"ui-tabs__indicator\"\n [style.left.px]=\"indicatorLeft()\"\n [style.width.px]=\"indicatorWidth()\"\n ></span>\n }\n </div>\n <div class=\"ui-tabs__panels\">\n @for (tab of tabs(); track tab.id) {\n @if (renderMode() === 'persistent' || tab.id === activeTabId()) {\n <div\n class=\"ui-tab-panel\"\n [class.ui-tab-panel--hidden]=\"renderMode() === 'persistent' && tab.id !== activeTabId()\"\n role=\"tabpanel\"\n [attr.id]=\"'panel-' + tab.id\"\n >\n <ng-container\n *ngComponentOutlet=\"tab.component; injector: getInjector(tab)\"\n />\n </div>\n }\n }\n </div>\n </div>\n `,\n styleUrls: ['./tabs.component.scss', './dynamic-tabs.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class DynamicTabsComponent {\n private readonly tabsService = inject(TabsService);\n private readonly injector = inject(Injector);\n\n readonly variant = input<DynamicTabsVariant>('default');\n readonly size = input<DynamicTabsSize>('md');\n readonly ariaLabel = input<string>('');\n readonly renderMode = input<TabRenderMode>('conditional');\n\n private readonly tabList = viewChild<ElementRef<HTMLElement>>('tabList');\n\n protected readonly indicatorLeft = signal(0);\n protected readonly indicatorWidth = signal(0);\n\n readonly tabs = this.tabsService.tabs;\n readonly activeTabId = this.tabsService.activeTabId;\n\n private readonly injectorCache = new Map<string, Injector>();\n\n protected readonly tabsClasses = computed(() => {\n return `ui-tabs--${this.variant()} ui-tabs--${this.size()}`;\n });\n\n constructor() {\n effect(() => {\n const _ = this.activeTabId();\n this.updateIndicator();\n });\n\n // Clean up injector cache when tabs are removed\n effect(() => {\n const currentTabs = this.tabs();\n const currentIds = new Set(currentTabs.map((t) => t.id));\n for (const id of this.injectorCache.keys()) {\n if (!currentIds.has(id)) {\n this.injectorCache.delete(id);\n }\n }\n });\n }\n\n protected getInjector(tab: DynamicTab): Injector {\n let injector = this.injectorCache.get(tab.id);\n if (!injector) {\n injector = this.tabsService._createInjector(\n this.injector,\n tab.data,\n tab.tabRef\n );\n this.injectorCache.set(tab.id, injector);\n }\n return injector;\n }\n\n protected selectTab(tab: DynamicTab): void {\n this.tabsService.activateById(tab.id);\n }\n\n protected closeTab(event: Event, tab: DynamicTab): void {\n event.stopPropagation();\n tab.tabRef.close();\n }\n\n protected handleKeyDown(event: KeyboardEvent, currentTab: DynamicTab): void {\n const tabList = this.tabs();\n if (tabList.length === 0) return;\n\n const currentIndex = tabList.findIndex((t) => t.id === currentTab.id);\n let nextIndex = -1;\n\n switch (event.key) {\n case 'ArrowLeft':\n event.preventDefault();\n nextIndex = (currentIndex - 1 + tabList.length) % tabList.length;\n break;\n case 'ArrowRight':\n event.preventDefault();\n nextIndex = (currentIndex + 1) % tabList.length;\n break;\n case 'Home':\n event.preventDefault();\n nextIndex = 0;\n break;\n case 'End':\n event.preventDefault();\n nextIndex = tabList.length - 1;\n break;\n case 'Delete':\n if (currentTab.closable) {\n event.preventDefault();\n currentTab.tabRef.close();\n }\n return;\n default:\n return;\n }\n\n if (nextIndex >= 0) {\n const nextTab = tabList[nextIndex];\n this.tabsService.activateById(nextTab.id);\n this.focusTab(nextIndex);\n }\n }\n\n private focusTab(index: number): void {\n const tabListEl = this.tabList()?.nativeElement;\n if (!tabListEl) return;\n const buttons = tabListEl.querySelectorAll<HTMLButtonElement>(\n '.ui-tabs__tab'\n );\n buttons[index]?.focus();\n }\n\n private updateIndicator(): void {\n if (this.variant() !== 'underline') return;\n\n const tabListEl = this.tabList()?.nativeElement;\n if (!tabListEl) return;\n\n const buttons = tabListEl.querySelectorAll<HTMLButtonElement>(\n '.ui-tabs__tab'\n );\n const activeId = this.activeTabId();\n const tabs = this.tabs();\n const activeIndex = tabs.findIndex((t) => t.id === activeId);\n\n if (activeIndex >= 0 && activeIndex < buttons.length) {\n const activeButton = buttons[activeIndex];\n this.indicatorLeft.set(activeButton.offsetLeft);\n this.indicatorWidth.set(activeButton.offsetWidth);\n }\n }\n}\n","import { Directive, TemplateRef, inject } from '@angular/core';\n\n@Directive({\n selector: '[uiAccordionHeader]',\n standalone: true,\n})\nexport class AccordionHeaderDirective {\n readonly templateRef = inject(TemplateRef);\n}\n","import {\n Component,\n input,\n signal,\n computed,\n TemplateRef,\n contentChild,\n ChangeDetectionStrategy,\n} from '@angular/core';\nimport { NgTemplateOutlet } from '@angular/common';\nimport { AccordionHeaderDirective } from './accordion-header.directive';\nimport type { AccordionComponent } from './accordion.component';\n\n@Component({\n selector: 'ui-accordion-item',\n standalone: true,\n imports: [NgTemplateOutlet],\n templateUrl: './accordion-item.component.html',\n styleUrl: './accordion-item.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class AccordionItemComponent {\n readonly header = input('');\n readonly disabled = input(false);\n readonly expanded = input(false);\n\n private readonly headerDirective = contentChild(AccordionHeaderDirective);\n\n /** @internal */\n readonly _index = signal(0);\n\n private _parent: AccordionComponent | null = null;\n\n readonly isExpanded = signal(false);\n\n readonly headerTemplate = computed<TemplateRef<unknown> | null>(() => {\n return this.headerDirective()?.templateRef ?? null;\n });\n\n /** @internal */\n _setParent(parent: AccordionComponent, index: number): void {\n this._parent = parent;\n this._index.set(index);\n if (this.expanded()) {\n this.isExpanded.set(true);\n }\n }\n\n toggle(): void {\n if (this.disabled()) return;\n if (this.isExpanded()) {\n this.collapse();\n } else {\n this.expand();\n }\n }\n\n expand(): void {\n if (this.disabled()) return;\n this.isExpanded.set(true);\n this._parent?._onItemToggled(this);\n }\n\n collapse(): void {\n this.isExpanded.set(false);\n }\n}\n","<div\n class=\"ui-accordion-item\"\n [class.ui-accordion-item--expanded]=\"isExpanded()\"\n [class.ui-accordion-item--disabled]=\"disabled()\"\n>\n <button\n type=\"button\"\n class=\"ui-accordion-item__header\"\n [disabled]=\"disabled()\"\n (click)=\"toggle()\"\n [attr.aria-expanded]=\"isExpanded()\"\n [attr.aria-controls]=\"'accordion-panel-' + _index()\"\n >\n @if (headerTemplate()) {\n <span class=\"ui-accordion-item__title\">\n <ng-container *ngTemplateOutlet=\"headerTemplate()!\" />\n </span>\n } @else {\n <span class=\"ui-accordion-item__title\">{{ header() }}</span>\n }\n <span\n class=\"ui-accordion-item__icon\"\n [class.ui-accordion-item__icon--rotated]=\"isExpanded()\"\n >\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M4 6L8 10L12 6\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n </span>\n </button>\n <div\n class=\"ui-accordion-item__panel\"\n [attr.id]=\"'accordion-panel-' + _index()\"\n role=\"region\"\n >\n <div class=\"ui-accordion-item__content\">\n <ng-content />\n </div>\n </div>\n</div>\n","import {\n Component,\n input,\n computed,\n contentChildren,\n AfterContentInit,\n ChangeDetectionStrategy,\n} from '@angular/core';\nimport { AccordionItemComponent } from './accordion-item.component';\n\nexport type AccordionVariant = 'default' | 'bordered' | 'separated';\n\n@Component({\n selector: 'ui-accordion',\n standalone: true,\n templateUrl: './accordion.component.html',\n styleUrl: './accordion.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class AccordionComponent implements AfterContentInit {\n readonly multi = input(false);\n readonly variant = input<AccordionVariant>('default');\n\n readonly items = contentChildren(AccordionItemComponent);\n\n protected readonly accordionClasses = computed(() => {\n return `ui-accordion--${this.variant()}`;\n });\n\n ngAfterContentInit(): void {\n this._setupItems();\n }\n\n private _setupItems(): void {\n const itemList = this.items();\n itemList.forEach((item, index) => {\n item._setParent(this, index);\n });\n }\n\n /** @internal */\n _onItemToggled(expandedItem: AccordionItemComponent): void {\n if (this.multi()) return;\n const itemList = this.items();\n for (const item of itemList) {\n if (item !== expandedItem && item.isExpanded()) {\n item.collapse();\n }\n }\n }\n}\n","<div class=\"ui-accordion\" [class]=\"accordionClasses()\">\n <ng-content />\n</div>\n","import { Component, input, model, computed, ChangeDetectionStrategy } from '@angular/core';\n\nexport type PaginationSize = 'sm' | 'md' | 'lg';\n\n@Component({\n selector: 'ui-pagination',\n standalone: true,\n templateUrl: './pagination.component.html',\n styleUrl: './pagination.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class PaginationComponent {\n readonly total = input.required<number>();\n readonly pageSize = input(10);\n readonly maxPages = input(5);\n readonly showFirstLast = input(true);\n readonly size = input<PaginationSize>('md');\n\n readonly page = model(1);\n\n protected readonly totalPages = computed(() => {\n return Math.max(1, Math.ceil(this.total() / this.pageSize()));\n });\n\n protected readonly paginationClasses = computed(() => {\n return `ui-pagination--${this.size()}`;\n });\n\n protected readonly visiblePages = computed(() => {\n const total = this.totalPages();\n const current = this.page();\n const max = this.maxPages();\n\n const pages: { type: 'page' | 'ellipsis'; value: number }[] = [];\n\n if (total <= max) {\n // Show all pages\n for (let i = 1; i <= total; i++) {\n pages.push({ type: 'page', value: i });\n }\n } else {\n // Calculate range around current page\n const sidePages = Math.floor((max - 3) / 2); // Reserve slots for first, last, and one ellipsis\n let startPage = Math.max(2, current - sidePages);\n let endPage = Math.min(total - 1, current + sidePages);\n\n // Adjust if we're near the start\n if (current <= sidePages + 2) {\n startPage = 2;\n endPage = max - 2;\n }\n\n // Adjust if we're near the end\n if (current >= total - sidePages - 1) {\n startPage = total - max + 3;\n endPage = total - 1;\n }\n\n // Always show first page\n pages.push({ type: 'page', value: 1 });\n\n // Show ellipsis if there's a gap after first page\n if (startPage > 2) {\n pages.push({ type: 'ellipsis', value: -1 });\n }\n\n // Show middle pages\n for (let i = startPage; i <= endPage; i++) {\n pages.push({ type: 'page', value: i });\n }\n\n // Show ellipsis if there's a gap before last page\n if (endPage < total - 1) {\n pages.push({ type: 'ellipsis', value: -2 });\n }\n\n // Always show last page\n pages.push({ type: 'page', value: total });\n }\n\n return pages;\n });\n\n protected goToPage(pageNum: number): void {\n const total = this.totalPages();\n const newPage = Math.max(1, Math.min(total, pageNum));\n\n if (newPage !== this.page()) {\n this.page.set(newPage);\n }\n }\n}\n","<nav class=\"ui-pagination\" [class]=\"paginationClasses()\" aria-label=\"Pagination\">\n @if (showFirstLast()) {\n <button\n type=\"button\"\n class=\"ui-pagination__btn ui-pagination__btn--nav\"\n [disabled]=\"page() === 1\"\n (click)=\"goToPage(1)\"\n aria-label=\"First page\"\n >\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\">\n <polyline points=\"11 17 6 12 11 7\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n <polyline points=\"18 17 13 12 18 7\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n </button>\n }\n\n <button\n type=\"button\"\n class=\"ui-pagination__btn ui-pagination__btn--nav\"\n [disabled]=\"page() === 1\"\n (click)=\"goToPage(page() - 1)\"\n aria-label=\"Previous page\"\n >\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\">\n <polyline points=\"15 18 9 12 15 6\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n </button>\n\n @for (item of visiblePages(); track item.value) {\n @if (item.type === 'ellipsis') {\n <span class=\"ui-pagination__ellipsis\">...</span>\n } @else {\n <button\n type=\"button\"\n class=\"ui-pagination__btn ui-pagination__btn--page\"\n [class.ui-pagination__btn--active]=\"item.value === page()\"\n [attr.aria-current]=\"item.value === page() ? 'page' : null\"\n (click)=\"goToPage(item.value)\"\n >\n {{ item.value }}\n </button>\n }\n }\n\n <button\n type=\"button\"\n class=\"ui-pagination__btn ui-pagination__btn--nav\"\n [disabled]=\"page() === totalPages()\"\n (click)=\"goToPage(page() + 1)\"\n aria-label=\"Next page\"\n >\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\">\n <polyline points=\"9 18 15 12 9 6\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n </button>\n\n @if (showFirstLast()) {\n <button\n type=\"button\"\n class=\"ui-pagination__btn ui-pagination__btn--nav\"\n [disabled]=\"page() === totalPages()\"\n (click)=\"goToPage(totalPages())\"\n aria-label=\"Last page\"\n >\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\">\n <polyline points=\"13 17 18 12 13 7\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n <polyline points=\"6 17 11 12 6 7\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n </button>\n }\n</nav>\n","import { Pipe, PipeTransform } from '@angular/core';\n\n@Pipe({\n name: 'fileSize',\n standalone: true,\n pure: true,\n})\nexport class FileSizePipe implements PipeTransform {\n transform(bytes: number): string {\n if (bytes === 0) return '0 B';\n const k = 1024;\n const sizes = ['B', 'KB', 'MB', 'GB'];\n const i = Math.floor(Math.log(bytes) / Math.log(k));\n return parseFloat((bytes / Math.pow(k, i)).toFixed(1)) + ' ' + sizes[i];\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\n\n@Pipe({\n name: 'filePreview',\n standalone: true,\n pure: true,\n})\nexport class FilePreviewPipe implements PipeTransform {\n private url: string | null = null;\n\n transform(file: File): string | null {\n if (!file.type.startsWith('image/')) {\n this.cleanup();\n return null;\n }\n\n this.cleanup();\n this.url = URL.createObjectURL(file);\n return this.url;\n }\n\n ngOnDestroy(): void {\n this.cleanup();\n }\n\n private cleanup(): void {\n if (this.url) {\n URL.revokeObjectURL(this.url);\n this.url = null;\n }\n }\n}\n","import {\n Component,\n input,\n output,\n model,\n computed,\n ChangeDetectionStrategy,\n ElementRef,\n viewChild,\n} from '@angular/core';\nimport { FileSizePipe } from './file-size.pipe';\nimport { FilePreviewPipe } from './file-preview.pipe';\n\nexport type FileChooserVariant = 'default' | 'compact' | 'minimal';\nexport type FileChooserSize = 'sm' | 'md' | 'lg';\n\n@Component({\n selector: 'ui-file-chooser',\n standalone: true,\n imports: [FileSizePipe, FilePreviewPipe],\n templateUrl: './file-chooser.component.html',\n styleUrl: './file-chooser.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class FileChooserComponent {\n readonly variant = input<FileChooserVariant>('default');\n readonly size = input<FileChooserSize>('md');\n readonly accept = input<string>('');\n readonly multiple = input(false);\n readonly disabled = input(false);\n readonly maxFileSize = input<number | null>(null);\n readonly maxFiles = input<number | null>(null);\n readonly showFileList = input(true);\n readonly showPreviews = input(true);\n\n readonly dropzoneText = input('Drag and drop files here');\n readonly browseText = input('or click to browse');\n readonly acceptHint = input<string>('');\n\n readonly error = input<string>('');\n\n readonly value = model<File[]>([]);\n\n readonly fileAdded = output<File>();\n readonly fileRemoved = output<File>();\n readonly filesRejected = output<{ file: File; reason: string }[]>();\n\n protected dragOver = false;\n private readonly fileInput = viewChild.required<ElementRef<HTMLInputElement>>('fileInput');\n\n protected readonly containerClasses = computed(() => {\n return `ui-file-chooser--${this.variant()} ui-file-chooser--${this.size()}`;\n });\n\n protected readonly ariaLabel = computed(() => {\n const base = this.multiple() ? 'Choose files' : 'Choose file';\n return this.accept() ? `${base} (${this.accept()})` : base;\n });\n\n protected fileKey(file: File): string {\n return `${file.name}-${file.size}-${file.lastModified}`;\n }\n\n protected onDragOver(event: DragEvent): void {\n event.preventDefault();\n event.stopPropagation();\n if (!this.disabled()) {\n this.dragOver = true;\n }\n }\n\n protected onDragLeave(event: DragEvent): void {\n event.preventDefault();\n event.stopPropagation();\n this.dragOver = false;\n }\n\n protected onDrop(event: DragEvent): void {\n event.preventDefault();\n event.stopPropagation();\n this.dragOver = false;\n\n if (this.disabled()) return;\n\n const files = event.dataTransfer?.files;\n if (files && files.length > 0) {\n this.processFiles(Array.from(files));\n }\n }\n\n protected openFilePicker(): void {\n if (!this.disabled()) {\n this.fileInput().nativeElement.click();\n }\n }\n\n protected onFileSelected(event: Event): void {\n const input = event.target as HTMLInputElement;\n if (input.files && input.files.length > 0) {\n this.processFiles(Array.from(input.files));\n input.value = '';\n }\n }\n\n protected removeFile(file: File): void {\n this.value.update(files => files.filter(f => f !== file));\n this.fileRemoved.emit(file);\n }\n\n private formatFileSize(bytes: number): string {\n if (bytes === 0) return '0 B';\n const k = 1024;\n const sizes = ['B', 'KB', 'MB', 'GB'];\n const i = Math.floor(Math.log(bytes) / Math.log(k));\n return parseFloat((bytes / Math.pow(k, i)).toFixed(1)) + ' ' + sizes[i];\n }\n\n private processFiles(newFiles: File[]): void {\n const accepted: File[] = [];\n const rejected: { file: File; reason: string }[] = [];\n const currentCount = this.value().length;\n const maxFiles = this.maxFiles();\n const maxFileSize = this.maxFileSize();\n const acceptPattern = this.accept();\n\n for (const file of newFiles) {\n if (maxFiles !== null && currentCount + accepted.length >= maxFiles) {\n rejected.push({ file, reason: `Maximum ${maxFiles} file(s) allowed` });\n continue;\n }\n\n if (acceptPattern && !this.isFileTypeAccepted(file, acceptPattern)) {\n rejected.push({ file, reason: 'File type not accepted' });\n continue;\n }\n\n if (maxFileSize !== null && file.size > maxFileSize) {\n rejected.push({ file, reason: `File exceeds maximum size of ${this.formatFileSize(maxFileSize)}` });\n continue;\n }\n\n accepted.push(file);\n this.fileAdded.emit(file);\n }\n\n if (accepted.length > 0) {\n if (this.multiple()) {\n this.value.update(files => [...files, ...accepted]);\n } else {\n this.value.set([accepted[0]]);\n }\n }\n\n if (rejected.length > 0) {\n this.filesRejected.emit(rejected);\n }\n }\n\n private isFileTypeAccepted(file: File, accept: string): boolean {\n const acceptedTypes = accept.split(',').map(t => t.trim().toLowerCase());\n\n for (const type of acceptedTypes) {\n if (type === file.type.toLowerCase()) return true;\n\n if (type.endsWith('/*')) {\n const category = type.slice(0, -2);\n if (file.type.toLowerCase().startsWith(category + '/')) return true;\n }\n\n if (type.startsWith('.')) {\n const ext = file.name.toLowerCase().slice(file.name.lastIndexOf('.'));\n if (ext === type) return true;\n }\n }\n\n return false;\n }\n}\n","<div\n class=\"ui-file-chooser\"\n [class]=\"containerClasses()\"\n [class.ui-file-chooser--dragover]=\"dragOver\"\n [class.ui-file-chooser--disabled]=\"disabled()\"\n [class.ui-file-chooser--error]=\"error()\"\n (dragover)=\"onDragOver($event)\"\n (dragleave)=\"onDragLeave($event)\"\n (drop)=\"onDrop($event)\"\n (click)=\"openFilePicker()\"\n (keydown.enter)=\"openFilePicker()\"\n (keydown.space)=\"openFilePicker(); $event.preventDefault()\"\n [attr.tabindex]=\"disabled() ? -1 : 0\"\n role=\"button\"\n [attr.aria-label]=\"ariaLabel()\"\n [attr.aria-disabled]=\"disabled()\"\n>\n <input\n #fileInput\n type=\"file\"\n class=\"ui-file-chooser__input\"\n [accept]=\"accept()\"\n [multiple]=\"multiple()\"\n [disabled]=\"disabled()\"\n (change)=\"onFileSelected($event)\"\n (click)=\"$event.stopPropagation()\"\n />\n\n @if (variant() !== 'minimal') {\n <div class=\"ui-file-chooser__icon\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n <path d=\"M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4\" />\n <polyline points=\"17 8 12 3 7 8\" />\n <line x1=\"12\" y1=\"3\" x2=\"12\" y2=\"15\" />\n </svg>\n </div>\n }\n\n <div class=\"ui-file-chooser__content\">\n @if (variant() === 'default') {\n <span class=\"ui-file-chooser__title\">{{ dropzoneText() }}</span>\n <span class=\"ui-file-chooser__subtitle\">{{ browseText() }}</span>\n @if (acceptHint()) {\n <span class=\"ui-file-chooser__hint\">{{ acceptHint() }}</span>\n }\n } @else if (variant() === 'compact') {\n <span class=\"ui-file-chooser__title\">{{ dropzoneText() }} <span class=\"ui-file-chooser__link\">{{ browseText() }}</span></span>\n } @else {\n <span class=\"ui-file-chooser__link\">{{ browseText() }}</span>\n }\n </div>\n</div>\n\n@if (error()) {\n <span class=\"ui-file-chooser__error\">{{ error() }}</span>\n}\n\n@if (showFileList() && value().length > 0) {\n <ul class=\"ui-file-chooser__list\" role=\"list\">\n @for (file of value(); track fileKey(file)) {\n <li class=\"ui-file-chooser__file\">\n @if (showPreviews() && (file | filePreview); as preview) {\n <img [src]=\"preview\" alt=\"\" class=\"ui-file-chooser__preview\" />\n } @else {\n <div class=\"ui-file-chooser__file-icon\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n <path d=\"M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z\" />\n <polyline points=\"14 2 14 8 20 8\" />\n </svg>\n </div>\n }\n <div class=\"ui-file-chooser__file-info\">\n <span class=\"ui-file-chooser__file-name\">{{ file.name }}</span>\n <span class=\"ui-file-chooser__file-size\">{{ file.size | fileSize }}</span>\n </div>\n <button\n type=\"button\"\n class=\"ui-file-chooser__remove\"\n (click)=\"removeFile(file); $event.stopPropagation()\"\n [attr.aria-label]=\"'Remove ' + file.name\"\n [disabled]=\"disabled()\"\n >\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n <line x1=\"18\" y1=\"6\" x2=\"6\" y2=\"18\" />\n <line x1=\"6\" y1=\"6\" x2=\"18\" y2=\"18\" />\n </svg>\n </button>\n </li>\n }\n </ul>\n}\n","import { Component, input, model, output, computed, ChangeDetectionStrategy } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\n\nexport type SliderSize = 'sm' | 'md' | 'lg';\n\n@Component({\n selector: 'ui-slider',\n standalone: true,\n imports: [FormsModule],\n templateUrl: './slider.component.html',\n styleUrl: './slider.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class SliderComponent {\n readonly min = input(0);\n readonly max = input(100);\n readonly step = input(1);\n readonly size = input<SliderSize>('md');\n readonly disabled = input(false);\n readonly showValue = input(false);\n readonly label = input<string>('');\n\n readonly value = model(0);\n readonly valueCommit = output<number>();\n\n private static nextId = 0;\n private readonly generatedId = `ui-slider-${++SliderComponent.nextId}`;\n\n protected readonly inputId = computed(() => this.generatedId);\n\n protected readonly sliderClasses = computed(() => `ui-slider--${this.size()}`);\n\n protected readonly fillPercent = computed(() => {\n const min = this.min();\n const max = this.max();\n const range = max - min;\n if (range <= 0) return '0%';\n const percent = ((this.value() - min) / range) * 100;\n return `${Math.max(0, Math.min(100, percent))}%`;\n });\n}\n","<div class=\"ui-slider-wrapper\" [class]=\"sliderClasses()\" [class.ui-slider-wrapper--disabled]=\"disabled()\">\n @if (label()) {\n <label class=\"ui-slider__label\" [attr.for]=\"inputId()\">\n {{ label() }}\n </label>\n }\n <div class=\"ui-slider__container\" [style.--fill]=\"fillPercent()\">\n <input\n class=\"ui-slider\"\n type=\"range\"\n [id]=\"inputId()\"\n [min]=\"min()\"\n [max]=\"max()\"\n [step]=\"step()\"\n [disabled]=\"disabled()\"\n [(ngModel)]=\"value\"\n (change)=\"valueCommit.emit(value())\"\n />\n </div>\n @if (showValue()) {\n <span class=\"ui-slider__value\">{{ value() }}</span>\n }\n</div>\n","import {\n Component,\n Directive,\n input,\n model,\n output,\n signal,\n computed,\n contentChild,\n ChangeDetectionStrategy,\n ElementRef,\n ViewChild,\n TemplateRef,\n} from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { NgTemplateOutlet } from '@angular/common';\n\nexport type ChipInputVariant = 'default' | 'outlined' | 'filled';\nexport type ChipInputSize = 'sm' | 'md' | 'lg';\n\n/** Context provided to custom chip templates */\nexport interface ChipTemplateContext<T = string> {\n /** The chip value */\n $implicit: T;\n /** Function to remove this chip */\n remove: () => void;\n}\n\n/** Directive to mark a custom chip template */\n@Directive({\n selector: 'ng-template[uiChipTemplate]',\n standalone: true,\n})\nexport class ChipTemplateDirective {}\n\n@Component({\n selector: 'ui-chip-input',\n standalone: true,\n imports: [FormsModule, NgTemplateOutlet],\n templateUrl: './chip-input.component.html',\n styleUrl: './chip-input.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ChipInputComponent<T = string> {\n readonly variant = input<ChipInputVariant>('default');\n readonly size = input<ChipInputSize>('md');\n readonly placeholder = input('Add item...');\n readonly label = input('');\n readonly hint = input('');\n readonly error = input('');\n readonly disabled = input(false);\n readonly allowDuplicates = input(false);\n /** When false, only emits the `added` event without adding to the array (useful for custom object chips) */\n readonly autoAdd = input(true);\n\n /** The array of chip values */\n readonly value = model<T[]>([]);\n\n /** Emitted when a chip is added */\n readonly added = output<string>();\n\n /** Emitted when a chip is removed */\n readonly removed = output<T>();\n\n /** Custom chip template */\n readonly chipTemplate = contentChild(ChipTemplateDirective, { read: TemplateRef });\n\n @ViewChild('inputRef') inputRef?: ElementRef<HTMLInputElement>;\n\n protected readonly inputValue = signal('');\n protected readonly isFocused = signal(false);\n\n protected readonly containerClasses = computed(() => {\n const classes = [\n `ui-chip-input--${this.variant()}`,\n `ui-chip-input--${this.size()}`,\n ];\n if (this.isFocused()) classes.push('ui-chip-input--focused');\n if (this.disabled()) classes.push('ui-chip-input--disabled');\n if (this.error()) classes.push('ui-chip-input--error');\n return classes.join(' ');\n });\n\n protected onContainerClick(): void {\n if (!this.disabled()) {\n this.inputRef?.nativeElement?.focus();\n }\n }\n\n protected onInputKeydown(event: KeyboardEvent): void {\n const value = this.inputValue().trim();\n\n switch (event.key) {\n case 'Enter':\n event.preventDefault();\n if (value) {\n this.addChip(value);\n }\n break;\n case 'Backspace':\n if (!value && this.value().length > 0) {\n this.removeChip(this.value()[this.value().length - 1]);\n }\n break;\n }\n }\n\n protected addChip(chipValue: string): void {\n const current = this.value();\n // For string chips, check duplicates\n if (!this.allowDuplicates() && current.includes(chipValue as T)) {\n return;\n }\n if (this.autoAdd()) {\n this.value.set([...current, chipValue as T]);\n }\n this.inputValue.set('');\n this.added.emit(chipValue);\n }\n\n removeChip(chipValue: T): void {\n this.value.set(this.value().filter((v) => v !== chipValue));\n this.removed.emit(chipValue);\n // Refocus input after removal\n setTimeout(() => this.inputRef?.nativeElement?.focus());\n }\n\n /** Get template context for a chip */\n protected getChipContext(chip: T): ChipTemplateContext<T> {\n return {\n $implicit: chip,\n remove: () => this.removeChip(chip),\n };\n }\n\n /** Get display text for a chip (for default template) */\n protected getChipDisplay(chip: T): string {\n return String(chip);\n }\n\n protected onFocus(): void {\n this.isFocused.set(true);\n }\n\n protected onBlur(): void {\n this.isFocused.set(false);\n }\n}\n","<div class=\"ui-chip-input-wrapper\">\n @if (label()) {\n <label class=\"ui-chip-input__label\">{{ label() }}</label>\n }\n\n <div\n class=\"ui-chip-input\"\n [class]=\"containerClasses()\"\n (click)=\"onContainerClick()\"\n >\n @for (chip of value(); track chip) {\n @if (chipTemplate()) {\n <ng-container\n [ngTemplateOutlet]=\"chipTemplate()!\"\n [ngTemplateOutletContext]=\"getChipContext(chip)\"\n />\n } @else {\n <span class=\"ui-chip-input__chip\">\n <span class=\"ui-chip-input__chip-text\">{{ getChipDisplay(chip) }}</span>\n @if (!disabled()) {\n <button\n type=\"button\"\n class=\"ui-chip-input__chip-remove\"\n (click)=\"removeChip(chip); $event.stopPropagation()\"\n aria-label=\"Remove\"\n >\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\">\n <line x1=\"18\" y1=\"6\" x2=\"6\" y2=\"18\"></line>\n <line x1=\"6\" y1=\"6\" x2=\"18\" y2=\"18\"></line>\n </svg>\n </button>\n }\n </span>\n }\n }\n <input\n #inputRef\n type=\"text\"\n class=\"ui-chip-input__input\"\n [placeholder]=\"value().length === 0 ? placeholder() : ''\"\n [disabled]=\"disabled()\"\n [(ngModel)]=\"inputValue\"\n (keydown)=\"onInputKeydown($event)\"\n (focus)=\"onFocus()\"\n (blur)=\"onBlur()\"\n />\n </div>\n\n @if (error()) {\n <span class=\"ui-chip-input__error\">{{ error() }}</span>\n }\n @if (hint() && !error()) {\n <span class=\"ui-chip-input__hint\">{{ hint() }}</span>\n }\n</div>\n","import {\n Component,\n input,\n model,\n output,\n signal,\n computed,\n ChangeDetectionStrategy,\n ElementRef,\n inject,\n HostListener,\n OnDestroy,\n ViewChild,\n} from '@angular/core';\nimport { DOCUMENT } from '@angular/common';\n\nexport type DatepickerView = 'day' | 'month' | 'year';\nexport type DatepickerSize = 'sm' | 'md' | 'lg';\nexport type DatepickerVariant = 'default' | 'outlined' | 'filled';\nexport interface DateRange {\n start: Date | null;\n end: Date | null;\n}\n\nexport interface CalendarDay {\n date: Date;\n day: number;\n isCurrentMonth: boolean;\n isToday: boolean;\n isSelected: boolean;\n isInRange: boolean;\n isRangeStart: boolean;\n isRangeEnd: boolean;\n isDisabled: boolean;\n isFocused: boolean;\n}\n\nexport interface CalendarMonth {\n month: number;\n label: string;\n isSelected: boolean;\n isDisabled: boolean;\n isCurrent: boolean;\n}\n\nexport interface CalendarYear {\n year: number;\n isSelected: boolean;\n isDisabled: boolean;\n isCurrent: boolean;\n isInRange: boolean;\n}\n\n@Component({\n selector: 'ui-datepicker',\n standalone: true,\n templateUrl: './datepicker.component.html',\n styleUrl: './datepicker.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class DatepickerComponent implements OnDestroy {\n // Inputs\n readonly variant = input<DatepickerVariant>('default');\n readonly size = input<DatepickerSize>('md');\n readonly placeholder = input('Select date');\n readonly label = input('');\n readonly hint = input('');\n readonly error = input('');\n readonly disabled = input(false);\n readonly readonly = input(false);\n readonly clearable = input(false);\n readonly range = input(false);\n readonly required = input(false);\n readonly minDate = input<Date | null>(null);\n readonly maxDate = input<Date | null>(null);\n readonly disabledDates = input<Date[] | ((date: Date) => boolean)>([]);\n readonly format = input('yyyy-MM-dd');\n readonly firstDayOfWeek = input<0 | 1>(1);\n readonly id = input('');\n\n // Two-way binding\n readonly value = model<Date | DateRange | null>(null);\n\n // Outputs\n readonly opened = output<void>();\n readonly closed = output<void>();\n\n // View children for dropdown portal\n @ViewChild('triggerRef', { static: true }) triggerRef!: ElementRef<HTMLElement>;\n @ViewChild('dropdownRef', { static: true }) dropdownRef!: ElementRef<HTMLElement>;\n\n // Internal state\n readonly isOpen = signal(false);\n readonly currentView = signal<DatepickerView>('day');\n readonly viewDate = signal(new Date());\n readonly focusedDate = signal<Date | null>(null);\n readonly hoveredDate = signal<Date | null>(null);\n\n private readonly elementRef = inject(ElementRef);\n private readonly document = inject(DOCUMENT);\n private positionCleanup: (() => void) | null = null;\n\n private static nextId = 0;\n private readonly generatedId = `ui-datepicker-${++DatepickerComponent.nextId}`;\n\n protected readonly inputId = computed(() => this.id() || this.generatedId);\n\n // Computed: display value\n protected readonly displayValue = computed(() => {\n const val = this.value();\n const fmt = this.format();\n\n if (!val) return '';\n\n if (this.range()) {\n const r = val as DateRange;\n if (!r.start && !r.end) return '';\n const startStr = r.start ? this.formatDate(r.start, fmt) : '';\n const endStr = r.end ? this.formatDate(r.end, fmt) : '';\n if (startStr && endStr) return `${startStr} — ${endStr}`;\n return startStr || endStr;\n }\n\n return this.formatDate(val as Date, fmt);\n });\n\n // Computed: trigger CSS classes\n protected readonly triggerClasses = computed(() => {\n return `ui-datepicker__trigger--${this.variant()} ui-datepicker__trigger--${this.size()}`;\n });\n\n // Computed: has value\n protected readonly hasValue = computed(() => {\n const val = this.value();\n if (!val) return false;\n if (this.range()) {\n const r = val as DateRange;\n return r.start !== null || r.end !== null;\n }\n return true;\n });\n\n // Computed: weekday headers\n protected readonly weekdayHeaders = computed(() => {\n const first = this.firstDayOfWeek();\n const formatter = new Intl.DateTimeFormat(undefined, { weekday: 'short' });\n const headers: string[] = [];\n // Use a known Sunday: Jan 4, 1970\n const base = new Date(1970, 0, 4 + first);\n for (let i = 0; i < 7; i++) {\n const d = new Date(base);\n d.setDate(base.getDate() + i);\n headers.push(formatter.format(d));\n }\n return headers;\n });\n\n // Computed: month/year label for header\n protected readonly monthYearLabel = computed(() => {\n const vd = this.viewDate();\n const formatter = new Intl.DateTimeFormat(undefined, { month: 'long', year: 'numeric' });\n return formatter.format(vd);\n });\n\n // Computed: decade label for year view\n protected readonly decadeLabel = computed(() => {\n const year = this.viewDate().getFullYear();\n const startYear = year - (year % 10);\n return `${startYear} — ${startYear + 9}`;\n });\n\n // Computed: calendar grid (6 weeks x 7 days)\n protected readonly calendarGrid = computed(() => {\n const vd = this.viewDate();\n const year = vd.getFullYear();\n const month = vd.getMonth();\n const first = this.firstDayOfWeek();\n const today = new Date();\n const val = this.value();\n const isRange = this.range();\n const focused = this.focusedDate();\n const hovered = this.hoveredDate();\n\n // Find the start of the calendar grid\n const firstOfMonth = new Date(year, month, 1);\n let dayOfWeek = firstOfMonth.getDay() - first;\n if (dayOfWeek < 0) dayOfWeek += 7;\n const gridStart = new Date(year, month, 1 - dayOfWeek);\n\n // Determine selected date(s) and range\n let selectedDate: Date | null = null;\n let rangeStart: Date | null = null;\n let rangeEnd: Date | null = null;\n\n if (isRange && val) {\n const r = val as DateRange;\n rangeStart = r.start;\n rangeEnd = r.end;\n // If only start is set and we're hovering, use hovered as temporary end\n if (rangeStart && !rangeEnd && hovered) {\n if (hovered < rangeStart) {\n rangeEnd = rangeStart;\n rangeStart = hovered;\n } else {\n rangeEnd = hovered;\n }\n }\n } else if (val && !isRange) {\n selectedDate = val as Date;\n }\n\n const grid: CalendarDay[][] = [];\n const cursor = new Date(gridStart);\n\n for (let week = 0; week < 6; week++) {\n const row: CalendarDay[] = [];\n for (let day = 0; day < 7; day++) {\n const date = new Date(cursor);\n const isCurrentMonth = date.getMonth() === month;\n const isToday = this.isSameDay(date, today);\n const isSelected = isRange\n ? (rangeStart ? this.isSameDay(date, rangeStart) : false) ||\n (rangeEnd ? this.isSameDay(date, rangeEnd) : false)\n : selectedDate ? this.isSameDay(date, selectedDate) : false;\n const isInRange = isRange && rangeStart && rangeEnd\n ? date > rangeStart && date < rangeEnd\n : false;\n const isRangeStart = isRange && rangeStart ? this.isSameDay(date, rangeStart) : false;\n const isRangeEnd = isRange && rangeEnd ? this.isSameDay(date, rangeEnd) : false;\n const isDisabled = this.isDateDisabled(date);\n const isFocused = focused ? this.isSameDay(date, focused) : false;\n\n row.push({\n date,\n day: date.getDate(),\n isCurrentMonth,\n isToday,\n isSelected,\n isInRange,\n isRangeStart,\n isRangeEnd,\n isDisabled,\n isFocused,\n });\n\n cursor.setDate(cursor.getDate() + 1);\n }\n grid.push(row);\n }\n\n return grid;\n });\n\n // Computed: month grid (4 rows x 3 columns)\n protected readonly monthGrid = computed(() => {\n const vd = this.viewDate();\n const year = vd.getFullYear();\n const today = new Date();\n const val = this.value();\n const isRange = this.range();\n const formatter = new Intl.DateTimeFormat(undefined, { month: 'short' });\n\n const grid: CalendarMonth[][] = [];\n let monthIdx = 0;\n\n for (let row = 0; row < 4; row++) {\n const rowArr: CalendarMonth[] = [];\n for (let col = 0; col < 3; col++) {\n const date = new Date(year, monthIdx, 1);\n let isSelected = false;\n\n if (isRange && val) {\n const r = val as DateRange;\n if (r.start && r.start.getFullYear() === year && r.start.getMonth() === monthIdx) isSelected = true;\n if (r.end && r.end.getFullYear() === year && r.end.getMonth() === monthIdx) isSelected = true;\n } else if (val && !isRange) {\n const d = val as Date;\n isSelected = d.getFullYear() === year && d.getMonth() === monthIdx;\n }\n\n const isDisabled = this.isMonthDisabled(year, monthIdx);\n const isCurrent = today.getFullYear() === year && today.getMonth() === monthIdx;\n\n rowArr.push({\n month: monthIdx,\n label: formatter.format(date),\n isSelected,\n isDisabled,\n isCurrent,\n });\n monthIdx++;\n }\n grid.push(rowArr);\n }\n\n return grid;\n });\n\n // Computed: year grid (4 rows x 3 columns)\n protected readonly yearGrid = computed(() => {\n const vd = this.viewDate();\n const year = vd.getFullYear();\n const startYear = year - (year % 10) - 1;\n const today = new Date();\n const val = this.value();\n const isRange = this.range();\n\n const grid: CalendarYear[][] = [];\n let yearIdx = startYear;\n\n for (let row = 0; row < 4; row++) {\n const rowArr: CalendarYear[] = [];\n for (let col = 0; col < 3; col++) {\n let isSelected = false;\n\n if (isRange && val) {\n const r = val as DateRange;\n if (r.start && r.start.getFullYear() === yearIdx) isSelected = true;\n if (r.end && r.end.getFullYear() === yearIdx) isSelected = true;\n } else if (val && !isRange) {\n isSelected = (val as Date).getFullYear() === yearIdx;\n }\n\n const isDisabled = this.isYearDisabled(yearIdx);\n const isCurrent = today.getFullYear() === yearIdx;\n const isInRange = yearIdx >= startYear + 1 && yearIdx <= startYear + 10;\n\n rowArr.push({\n year: yearIdx,\n isSelected,\n isDisabled,\n isCurrent,\n isInRange,\n });\n yearIdx++;\n }\n grid.push(rowArr);\n }\n\n return grid;\n });\n\n // Computed: can navigate prev/next\n protected readonly canNavigatePrev = computed(() => {\n const min = this.minDate();\n if (!min) return true;\n const vd = this.viewDate();\n const view = this.currentView();\n\n if (view === 'day') {\n return vd.getFullYear() > min.getFullYear() ||\n (vd.getFullYear() === min.getFullYear() && vd.getMonth() > min.getMonth());\n }\n if (view === 'month') {\n return vd.getFullYear() > min.getFullYear();\n }\n // year view\n const startYear = vd.getFullYear() - (vd.getFullYear() % 10);\n return startYear > min.getFullYear();\n });\n\n protected readonly canNavigateNext = computed(() => {\n const max = this.maxDate();\n if (!max) return true;\n const vd = this.viewDate();\n const view = this.currentView();\n\n if (view === 'day') {\n return vd.getFullYear() < max.getFullYear() ||\n (vd.getFullYear() === max.getFullYear() && vd.getMonth() < max.getMonth());\n }\n if (view === 'month') {\n return vd.getFullYear() < max.getFullYear();\n }\n // year view\n const startYear = vd.getFullYear() - (vd.getFullYear() % 10);\n return startYear + 9 < max.getFullYear();\n });\n\n ngOnDestroy(): void {\n const dropdown = this.dropdownRef?.nativeElement;\n if (dropdown?.parentElement === this.document.body) {\n this.document.body.removeChild(dropdown);\n }\n this.removePositionListeners();\n }\n\n @HostListener('document:click', ['$event'])\n onDocumentClick(event: MouseEvent): void {\n const target = event.target as Node;\n if (\n !this.elementRef.nativeElement.contains(target) &&\n !this.dropdownRef?.nativeElement?.contains(target)\n ) {\n this.close();\n }\n }\n\n toggle(): void {\n if (this.disabled() || this.readonly()) return;\n if (this.isOpen()) {\n this.close();\n } else {\n this.open();\n }\n }\n\n open(): void {\n if (this.disabled() || this.readonly() || this.isOpen()) return;\n this.isOpen.set(true);\n this.currentView.set('day');\n this.focusedDate.set(null);\n this.hoveredDate.set(null);\n\n // Set viewDate to current value or today\n const val = this.value();\n if (val) {\n if (this.range()) {\n const r = val as DateRange;\n if (r.start) {\n this.viewDate.set(new Date(r.start.getFullYear(), r.start.getMonth(), 1));\n }\n } else {\n const d = val as Date;\n this.viewDate.set(new Date(d.getFullYear(), d.getMonth(), 1));\n }\n } else {\n const today = new Date();\n this.viewDate.set(new Date(today.getFullYear(), today.getMonth(), 1));\n }\n\n this.opened.emit();\n this.portalDropdown();\n }\n\n close(): void {\n if (!this.isOpen()) return;\n this.unportalDropdown();\n this.isOpen.set(false);\n this.focusedDate.set(null);\n this.hoveredDate.set(null);\n this.closed.emit();\n }\n\n selectDay(day: CalendarDay): void {\n if (day.isDisabled) return;\n\n if (this.range()) {\n const current = this.value() as DateRange | null;\n if (!current || !current.start || current.end) {\n // Start new range\n this.value.set({ start: day.date, end: null });\n } else {\n // Complete the range\n let start = current.start;\n let end = day.date;\n if (end < start) {\n [start, end] = [end, start];\n }\n this.value.set({ start, end });\n this.close();\n }\n } else {\n this.value.set(day.date);\n this.close();\n }\n }\n\n selectMonth(month: CalendarMonth): void {\n if (month.isDisabled) return;\n const vd = this.viewDate();\n this.viewDate.set(new Date(vd.getFullYear(), month.month, 1));\n this.currentView.set('day');\n }\n\n selectYear(year: CalendarYear): void {\n if (year.isDisabled) return;\n const vd = this.viewDate();\n this.viewDate.set(new Date(year.year, vd.getMonth(), 1));\n this.currentView.set('month');\n }\n\n navigatePrev(): void {\n if (!this.canNavigatePrev()) return;\n const vd = this.viewDate();\n const view = this.currentView();\n\n if (view === 'day') {\n this.viewDate.set(new Date(vd.getFullYear(), vd.getMonth() - 1, 1));\n } else if (view === 'month') {\n this.viewDate.set(new Date(vd.getFullYear() - 1, vd.getMonth(), 1));\n } else {\n this.viewDate.set(new Date(vd.getFullYear() - 10, vd.getMonth(), 1));\n }\n }\n\n navigateNext(): void {\n if (!this.canNavigateNext()) return;\n const vd = this.viewDate();\n const view = this.currentView();\n\n if (view === 'day') {\n this.viewDate.set(new Date(vd.getFullYear(), vd.getMonth() + 1, 1));\n } else if (view === 'month') {\n this.viewDate.set(new Date(vd.getFullYear() + 1, vd.getMonth(), 1));\n } else {\n this.viewDate.set(new Date(vd.getFullYear() + 10, vd.getMonth(), 1));\n }\n }\n\n switchToMonthView(): void {\n this.currentView.set('month');\n }\n\n switchToYearView(): void {\n this.currentView.set('year');\n }\n\n goToToday(): void {\n const today = new Date();\n this.viewDate.set(new Date(today.getFullYear(), today.getMonth(), 1));\n this.currentView.set('day');\n }\n\n clear(event: MouseEvent): void {\n event.stopPropagation();\n if (this.range()) {\n this.value.set({ start: null, end: null });\n } else {\n this.value.set(null);\n }\n }\n\n onDayHover(day: CalendarDay): void {\n if (this.range()) {\n const current = this.value() as DateRange | null;\n if (current && current.start && !current.end) {\n this.hoveredDate.set(day.date);\n }\n }\n }\n\n onDayHoverLeave(): void {\n this.hoveredDate.set(null);\n }\n\n protected handleTriggerKeydown(event: KeyboardEvent): void {\n switch (event.key) {\n case 'Enter':\n case ' ':\n event.preventDefault();\n if (this.isOpen()) {\n const focused = this.focusedDate();\n if (focused && this.currentView() === 'day') {\n const day = this.findDayInGrid(focused);\n if (day && !day.isDisabled) {\n this.selectDay(day);\n }\n }\n } else {\n this.open();\n }\n break;\n case 'ArrowDown':\n event.preventDefault();\n if (!this.isOpen()) {\n this.open();\n } else if (this.currentView() === 'day') {\n this.moveFocus(7);\n }\n break;\n case 'ArrowUp':\n event.preventDefault();\n if (this.currentView() === 'day') {\n this.moveFocus(-7);\n }\n break;\n case 'ArrowLeft':\n event.preventDefault();\n if (this.currentView() === 'day') {\n this.moveFocus(-1);\n }\n break;\n case 'ArrowRight':\n event.preventDefault();\n if (this.currentView() === 'day') {\n this.moveFocus(1);\n }\n break;\n case 'Escape':\n event.preventDefault();\n this.close();\n break;\n case 'Tab':\n this.close();\n break;\n }\n }\n\n // Date formatting\n private formatDate(date: Date, format: string): string {\n const yyyy = date.getFullYear().toString();\n const yy = yyyy.slice(-2);\n const MM = (date.getMonth() + 1).toString().padStart(2, '0');\n const M = (date.getMonth() + 1).toString();\n const dd = date.getDate().toString().padStart(2, '0');\n const d = date.getDate().toString();\n\n return format\n .replace('yyyy', yyyy)\n .replace('yy', yy)\n .replace('MM', MM)\n .replace('M', M)\n .replace('dd', dd)\n .replace('d', d);\n }\n\n private isSameDay(a: Date, b: Date): boolean {\n return (\n a.getFullYear() === b.getFullYear() &&\n a.getMonth() === b.getMonth() &&\n a.getDate() === b.getDate()\n );\n }\n\n private isDateDisabled(date: Date): boolean {\n const min = this.minDate();\n const max = this.maxDate();\n\n if (min && date < new Date(min.getFullYear(), min.getMonth(), min.getDate())) return true;\n if (max && date > new Date(max.getFullYear(), max.getMonth(), max.getDate())) return true;\n\n const disabled = this.disabledDates();\n if (typeof disabled === 'function') {\n return disabled(date);\n }\n if (Array.isArray(disabled)) {\n return disabled.some((d) => this.isSameDay(d, date));\n }\n return false;\n }\n\n private isMonthDisabled(year: number, month: number): boolean {\n const min = this.minDate();\n const max = this.maxDate();\n\n if (min) {\n if (year < min.getFullYear()) return true;\n if (year === min.getFullYear() && month < min.getMonth()) return true;\n }\n if (max) {\n if (year > max.getFullYear()) return true;\n if (year === max.getFullYear() && month > max.getMonth()) return true;\n }\n return false;\n }\n\n private isYearDisabled(year: number): boolean {\n const min = this.minDate();\n const max = this.maxDate();\n\n if (min && year < min.getFullYear()) return true;\n if (max && year > max.getFullYear()) return true;\n return false;\n }\n\n private moveFocus(days: number): void {\n let current = this.focusedDate();\n if (!current) {\n // Start from current value or today\n const val = this.value();\n if (val && !this.range()) {\n current = val as Date;\n } else if (val && this.range()) {\n const r = val as DateRange;\n current = r.start || new Date();\n } else {\n current = new Date();\n }\n }\n\n const next = new Date(current);\n next.setDate(next.getDate() + days);\n\n // If moving outside the current month, navigate\n const vd = this.viewDate();\n if (next.getMonth() !== vd.getMonth() || next.getFullYear() !== vd.getFullYear()) {\n this.viewDate.set(new Date(next.getFullYear(), next.getMonth(), 1));\n }\n\n this.focusedDate.set(next);\n }\n\n private findDayInGrid(date: Date): CalendarDay | null {\n for (const week of this.calendarGrid()) {\n for (const day of week) {\n if (this.isSameDay(day.date, date)) {\n return day;\n }\n }\n }\n return null;\n }\n\n // Portal pattern (matches SelectComponent)\n private portalDropdown(): void {\n const dropdown = this.dropdownRef?.nativeElement;\n if (!dropdown) return;\n\n dropdown.style.display = 'block';\n this.document.body.appendChild(dropdown);\n this.updateDropdownPosition();\n this.addPositionListeners();\n }\n\n private unportalDropdown(): void {\n const dropdown = this.dropdownRef?.nativeElement;\n if (!dropdown) return;\n\n if (dropdown.parentElement === this.document.body) {\n const wrapper = this.elementRef.nativeElement.querySelector('.ui-datepicker-wrapper');\n if (wrapper) {\n wrapper.appendChild(dropdown);\n }\n }\n\n dropdown.style.display = '';\n dropdown.style.position = '';\n dropdown.style.top = '';\n dropdown.style.left = '';\n dropdown.style.bottom = '';\n dropdown.style.minWidth = '';\n dropdown.style.zIndex = '';\n dropdown.style.margin = '';\n\n this.removePositionListeners();\n }\n\n private updateDropdownPosition(): void {\n const trigger = this.triggerRef?.nativeElement;\n const dropdown = this.dropdownRef?.nativeElement;\n if (!trigger || !dropdown) return;\n\n const triggerRect = trigger.getBoundingClientRect();\n const dropdownHeight = dropdown.scrollHeight;\n const gap = 4;\n const spaceBelow = window.innerHeight - triggerRect.bottom;\n const spaceAbove = triggerRect.top;\n const openAbove = spaceBelow < dropdownHeight + gap && spaceAbove > spaceBelow;\n\n dropdown.style.position = 'fixed';\n dropdown.style.minWidth = `${triggerRect.width}px`;\n dropdown.style.left = `${triggerRect.left}px`;\n dropdown.style.zIndex = '99999';\n dropdown.style.margin = '0';\n\n if (openAbove) {\n dropdown.style.top = 'auto';\n dropdown.style.bottom = `${window.innerHeight - triggerRect.top + gap}px`;\n } else {\n dropdown.style.top = `${triggerRect.bottom + gap}px`;\n dropdown.style.bottom = 'auto';\n }\n }\n\n private addPositionListeners(): void {\n const update = () => {\n if (this.isOpen()) {\n this.updateDropdownPosition();\n }\n };\n window.addEventListener('scroll', update, true);\n window.addEventListener('resize', update);\n this.positionCleanup = () => {\n window.removeEventListener('scroll', update, true);\n window.removeEventListener('resize', update);\n };\n }\n\n private removePositionListeners(): void {\n this.positionCleanup?.();\n this.positionCleanup = null;\n }\n}\n","<div\n class=\"ui-datepicker-wrapper\"\n [class.ui-datepicker-wrapper--error]=\"error()\"\n [class.ui-datepicker-wrapper--disabled]=\"disabled()\"\n [class.ui-datepicker-wrapper--open]=\"isOpen()\"\n>\n @if (label()) {\n <label class=\"ui-datepicker__label\" [attr.for]=\"inputId()\">\n {{ label() }}\n @if (required()) {\n <span class=\"ui-datepicker__required\">*</span>\n }\n </label>\n }\n\n <div\n #triggerRef\n class=\"ui-datepicker__trigger\"\n [class]=\"triggerClasses()\"\n [attr.role]=\"'combobox'\"\n [attr.aria-expanded]=\"isOpen()\"\n [attr.aria-haspopup]=\"'dialog'\"\n [attr.aria-disabled]=\"disabled()\"\n [attr.tabindex]=\"disabled() ? -1 : 0\"\n (click)=\"toggle()\"\n (keydown)=\"handleTriggerKeydown($event)\"\n >\n <span class=\"ui-datepicker__value\">\n @if (displayValue()) {\n {{ displayValue() }}\n } @else {\n <span class=\"ui-datepicker__placeholder\">{{ placeholder() }}</span>\n }\n </span>\n\n <div class=\"ui-datepicker__icons\">\n @if (clearable() && hasValue() && !disabled() && !readonly()) {\n <button\n type=\"button\"\n class=\"ui-datepicker__clear\"\n (click)=\"clear($event)\"\n aria-label=\"Clear date\"\n >\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\">\n <line x1=\"18\" y1=\"6\" x2=\"6\" y2=\"18\"></line>\n <line x1=\"6\" y1=\"6\" x2=\"18\" y2=\"18\"></line>\n </svg>\n </button>\n }\n <svg\n class=\"ui-datepicker__calendar-icon\"\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n >\n <rect x=\"3\" y=\"4\" width=\"18\" height=\"18\" rx=\"2\" ry=\"2\"></rect>\n <line x1=\"16\" y1=\"2\" x2=\"16\" y2=\"6\"></line>\n <line x1=\"8\" y1=\"2\" x2=\"8\" y2=\"6\"></line>\n <line x1=\"3\" y1=\"10\" x2=\"21\" y2=\"10\"></line>\n </svg>\n </div>\n </div>\n\n <div\n #dropdownRef\n class=\"ui-datepicker__dropdown\"\n [class.ui-datepicker__dropdown--open]=\"isOpen()\"\n [attr.role]=\"'dialog'\"\n [attr.aria-label]=\"'Date picker'\"\n >\n <div class=\"ui-datepicker__header\">\n <button\n type=\"button\"\n class=\"ui-datepicker__nav-btn\"\n [disabled]=\"!canNavigatePrev()\"\n (click)=\"navigatePrev()\"\n aria-label=\"Previous\"\n >\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\">\n <polyline points=\"15 18 9 12 15 6\"></polyline>\n </svg>\n </button>\n\n @if (currentView() === 'day') {\n <button\n type=\"button\"\n class=\"ui-datepicker__header-label\"\n (click)=\"switchToMonthView()\"\n >\n {{ monthYearLabel() }}\n </button>\n } @else if (currentView() === 'month') {\n <button\n type=\"button\"\n class=\"ui-datepicker__header-label\"\n (click)=\"switchToYearView()\"\n >\n {{ viewDate().getFullYear() }}\n </button>\n } @else {\n <span class=\"ui-datepicker__header-label ui-datepicker__header-label--static\">\n {{ decadeLabel() }}\n </span>\n }\n\n <button\n type=\"button\"\n class=\"ui-datepicker__nav-btn\"\n [disabled]=\"!canNavigateNext()\"\n (click)=\"navigateNext()\"\n aria-label=\"Next\"\n >\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\">\n <polyline points=\"9 18 15 12 9 6\"></polyline>\n </svg>\n </button>\n </div>\n\n @if (currentView() === 'day') {\n <div class=\"ui-datepicker__calendar\" role=\"grid\">\n <div class=\"ui-datepicker__weekdays\">\n @for (header of weekdayHeaders(); track header) {\n <div class=\"ui-datepicker__weekday\">{{ header }}</div>\n }\n </div>\n @for (week of calendarGrid(); track $index) {\n <div class=\"ui-datepicker__week\" role=\"row\">\n @for (day of week; track day.date.getTime()) {\n <button\n type=\"button\"\n class=\"ui-datepicker__day\"\n [class.ui-datepicker__day--outside]=\"!day.isCurrentMonth\"\n [class.ui-datepicker__day--today]=\"day.isToday\"\n [class.ui-datepicker__day--selected]=\"day.isSelected\"\n [class.ui-datepicker__day--in-range]=\"day.isInRange\"\n [class.ui-datepicker__day--range-start]=\"day.isRangeStart\"\n [class.ui-datepicker__day--range-end]=\"day.isRangeEnd\"\n [class.ui-datepicker__day--disabled]=\"day.isDisabled\"\n [class.ui-datepicker__day--focused]=\"day.isFocused\"\n [disabled]=\"day.isDisabled\"\n (click)=\"selectDay(day)\"\n (mouseenter)=\"onDayHover(day)\"\n (mouseleave)=\"onDayHoverLeave()\"\n role=\"gridcell\"\n [attr.aria-selected]=\"day.isSelected\"\n >\n {{ day.day }}\n </button>\n }\n </div>\n }\n </div>\n } @else if (currentView() === 'month') {\n <div class=\"ui-datepicker__months\">\n @for (row of monthGrid(); track $index) {\n <div class=\"ui-datepicker__month-row\">\n @for (month of row; track month.month) {\n <button\n type=\"button\"\n class=\"ui-datepicker__month\"\n [class.ui-datepicker__month--selected]=\"month.isSelected\"\n [class.ui-datepicker__month--current]=\"month.isCurrent\"\n [class.ui-datepicker__month--disabled]=\"month.isDisabled\"\n [disabled]=\"month.isDisabled\"\n (click)=\"selectMonth(month)\"\n >\n {{ month.label }}\n </button>\n }\n </div>\n }\n </div>\n } @else {\n <div class=\"ui-datepicker__years\">\n @for (row of yearGrid(); track $index) {\n <div class=\"ui-datepicker__year-row\">\n @for (year of row; track year.year) {\n <button\n type=\"button\"\n class=\"ui-datepicker__year\"\n [class.ui-datepicker__year--selected]=\"year.isSelected\"\n [class.ui-datepicker__year--current]=\"year.isCurrent\"\n [class.ui-datepicker__year--disabled]=\"year.isDisabled\"\n [class.ui-datepicker__year--outside]=\"!year.isInRange\"\n [disabled]=\"year.isDisabled\"\n (click)=\"selectYear(year)\"\n >\n {{ year.year }}\n </button>\n }\n </div>\n }\n </div>\n }\n\n <div class=\"ui-datepicker__footer\">\n <button\n type=\"button\"\n class=\"ui-datepicker__today-btn\"\n (click)=\"goToToday()\"\n >\n Today\n </button>\n </div>\n </div>\n\n @if (error()) {\n <span class=\"ui-datepicker__error\">{{ error() }}</span>\n }\n @if (hint() && !error()) {\n <span class=\"ui-datepicker__hint\">{{ hint() }}</span>\n }\n</div>\n","import {\n Component,\n input,\n model,\n output,\n signal,\n computed,\n ChangeDetectionStrategy,\n ElementRef,\n inject,\n HostListener,\n OnDestroy,\n ViewChild,\n} from '@angular/core';\nimport { DOCUMENT } from '@angular/common';\n\nexport type TimepickerSize = 'sm' | 'md' | 'lg';\nexport type TimepickerVariant = 'default' | 'outlined' | 'filled';\nexport type TimeFormat = '12h' | '24h';\n\nexport interface TimeValue {\n hours: number;\n minutes: number;\n seconds?: number;\n}\n\n@Component({\n selector: 'ui-timepicker',\n standalone: true,\n templateUrl: './timepicker.component.html',\n styleUrl: './timepicker.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class TimepickerComponent implements OnDestroy {\n // Inputs\n readonly variant = input<TimepickerVariant>('default');\n readonly size = input<TimepickerSize>('md');\n readonly placeholder = input('Select time');\n readonly label = input('');\n readonly hint = input('');\n readonly error = input('');\n readonly disabled = input(false);\n readonly readonly = input(false);\n readonly clearable = input(false);\n readonly required = input(false);\n readonly showSeconds = input(false);\n readonly format = input<TimeFormat>('24h');\n readonly minuteStep = input(1);\n readonly secondStep = input(1);\n readonly minTime = input<TimeValue | null>(null);\n readonly maxTime = input<TimeValue | null>(null);\n readonly id = input('');\n\n // Two-way binding\n readonly value = model<TimeValue | null>(null);\n\n // Outputs\n readonly opened = output<void>();\n readonly closed = output<void>();\n\n // View children for dropdown portal\n @ViewChild('triggerRef', { static: true }) triggerRef!: ElementRef<HTMLElement>;\n @ViewChild('dropdownRef', { static: true }) dropdownRef!: ElementRef<HTMLElement>;\n\n // Internal state\n readonly isOpen = signal(false);\n readonly selectedHour = signal(0);\n readonly selectedMinute = signal(0);\n readonly selectedSecond = signal(0);\n readonly selectedPeriod = signal<'AM' | 'PM'>('AM');\n\n private readonly elementRef = inject(ElementRef);\n private readonly document = inject(DOCUMENT);\n private positionCleanup: (() => void) | null = null;\n\n private static nextId = 0;\n private readonly generatedId = `ui-timepicker-${++TimepickerComponent.nextId}`;\n\n protected readonly inputId = computed(() => this.id() || this.generatedId);\n\n // Computed: hours list\n protected readonly hoursList = computed(() => {\n const is12h = this.format() === '12h';\n const hours: number[] = [];\n const max = is12h ? 12 : 24;\n const start = is12h ? 1 : 0;\n\n for (let i = start; i <= (is12h ? 12 : 23); i++) {\n hours.push(i);\n }\n return hours;\n });\n\n // Computed: minutes list\n protected readonly minutesList = computed(() => {\n const step = this.minuteStep();\n const minutes: number[] = [];\n for (let i = 0; i < 60; i += step) {\n minutes.push(i);\n }\n return minutes;\n });\n\n // Computed: seconds list\n protected readonly secondsList = computed(() => {\n const step = this.secondStep();\n const seconds: number[] = [];\n for (let i = 0; i < 60; i += step) {\n seconds.push(i);\n }\n return seconds;\n });\n\n // Computed: display value\n protected readonly displayValue = computed(() => {\n const val = this.value();\n if (!val) return '';\n\n const is12h = this.format() === '12h';\n let hours = val.hours;\n let period = '';\n\n if (is12h) {\n period = hours >= 12 ? ' PM' : ' AM';\n hours = hours % 12;\n if (hours === 0) hours = 12;\n }\n\n const hStr = hours.toString().padStart(2, '0');\n const mStr = val.minutes.toString().padStart(2, '0');\n\n if (this.showSeconds() && val.seconds !== undefined) {\n const sStr = val.seconds.toString().padStart(2, '0');\n return `${hStr}:${mStr}:${sStr}${period}`;\n }\n\n return `${hStr}:${mStr}${period}`;\n });\n\n // Computed: trigger CSS classes\n protected readonly triggerClasses = computed(() => {\n return `ui-timepicker__trigger--${this.variant()} ui-timepicker__trigger--${this.size()}`;\n });\n\n // Computed: has value\n protected readonly hasValue = computed(() => {\n return this.value() !== null;\n });\n\n ngOnDestroy(): void {\n const dropdown = this.dropdownRef?.nativeElement;\n if (dropdown?.parentElement === this.document.body) {\n this.document.body.removeChild(dropdown);\n }\n this.removePositionListeners();\n }\n\n @HostListener('document:click', ['$event'])\n onDocumentClick(event: MouseEvent): void {\n const target = event.target as Node;\n if (\n !this.elementRef.nativeElement.contains(target) &&\n !this.dropdownRef?.nativeElement?.contains(target)\n ) {\n this.close();\n }\n }\n\n toggle(): void {\n if (this.disabled() || this.readonly()) return;\n if (this.isOpen()) {\n this.close();\n } else {\n this.open();\n }\n }\n\n open(): void {\n if (this.disabled() || this.readonly() || this.isOpen()) return;\n this.isOpen.set(true);\n\n // Initialize selection from current value\n const val = this.value();\n if (val) {\n const is12h = this.format() === '12h';\n if (is12h) {\n const period = val.hours >= 12 ? 'PM' : 'AM';\n let hours = val.hours % 12;\n if (hours === 0) hours = 12;\n this.selectedHour.set(hours);\n this.selectedPeriod.set(period);\n } else {\n this.selectedHour.set(val.hours);\n }\n this.selectedMinute.set(val.minutes);\n this.selectedSecond.set(val.seconds ?? 0);\n } else {\n const now = new Date();\n const is12h = this.format() === '12h';\n if (is12h) {\n const hours = now.getHours();\n this.selectedPeriod.set(hours >= 12 ? 'PM' : 'AM');\n let h = hours % 12;\n if (h === 0) h = 12;\n this.selectedHour.set(h);\n } else {\n this.selectedHour.set(now.getHours());\n }\n this.selectedMinute.set(now.getMinutes());\n this.selectedSecond.set(now.getSeconds());\n }\n\n this.opened.emit();\n this.portalDropdown();\n }\n\n close(): void {\n if (!this.isOpen()) return;\n this.unportalDropdown();\n this.isOpen.set(false);\n this.closed.emit();\n }\n\n selectHour(hour: number): void {\n this.selectedHour.set(hour);\n this.updateValue();\n }\n\n selectMinute(minute: number): void {\n this.selectedMinute.set(minute);\n this.updateValue();\n }\n\n selectSecond(second: number): void {\n this.selectedSecond.set(second);\n this.updateValue();\n }\n\n selectPeriod(period: 'AM' | 'PM'): void {\n this.selectedPeriod.set(period);\n this.updateValue();\n }\n\n setNow(): void {\n const now = new Date();\n const is12h = this.format() === '12h';\n const hours = now.getHours();\n\n if (is12h) {\n this.selectedPeriod.set(hours >= 12 ? 'PM' : 'AM');\n let h = hours % 12;\n if (h === 0) h = 12;\n this.selectedHour.set(h);\n } else {\n this.selectedHour.set(hours);\n }\n this.selectedMinute.set(now.getMinutes());\n this.selectedSecond.set(now.getSeconds());\n this.updateValue();\n }\n\n clear(event: MouseEvent): void {\n event.stopPropagation();\n this.value.set(null);\n }\n\n protected isHourDisabled(hour: number): boolean {\n return false; // Can be extended for min/max time validation\n }\n\n protected isMinuteDisabled(minute: number): boolean {\n return false; // Can be extended for min/max time validation\n }\n\n protected isSecondDisabled(second: number): boolean {\n return false; // Can be extended for min/max time validation\n }\n\n protected handleTriggerKeydown(event: KeyboardEvent): void {\n switch (event.key) {\n case 'Enter':\n case ' ':\n event.preventDefault();\n this.toggle();\n break;\n case 'Escape':\n event.preventDefault();\n this.close();\n break;\n case 'Tab':\n this.close();\n break;\n }\n }\n\n protected formatNumber(n: number): string {\n return n.toString().padStart(2, '0');\n }\n\n private updateValue(): void {\n const is12h = this.format() === '12h';\n let hours = this.selectedHour();\n\n if (is12h) {\n if (this.selectedPeriod() === 'PM' && hours !== 12) {\n hours += 12;\n } else if (this.selectedPeriod() === 'AM' && hours === 12) {\n hours = 0;\n }\n }\n\n const newValue: TimeValue = {\n hours,\n minutes: this.selectedMinute(),\n };\n\n if (this.showSeconds()) {\n newValue.seconds = this.selectedSecond();\n }\n\n this.value.set(newValue);\n }\n\n // Portal pattern\n private portalDropdown(): void {\n const dropdown = this.dropdownRef?.nativeElement;\n if (!dropdown) return;\n\n dropdown.style.display = 'block';\n this.document.body.appendChild(dropdown);\n this.updateDropdownPosition();\n this.addPositionListeners();\n }\n\n private unportalDropdown(): void {\n const dropdown = this.dropdownRef?.nativeElement;\n if (!dropdown) return;\n\n if (dropdown.parentElement === this.document.body) {\n const wrapper = this.elementRef.nativeElement.querySelector('.ui-timepicker-wrapper');\n if (wrapper) {\n wrapper.appendChild(dropdown);\n }\n }\n\n dropdown.style.display = '';\n dropdown.style.position = '';\n dropdown.style.top = '';\n dropdown.style.left = '';\n dropdown.style.bottom = '';\n dropdown.style.minWidth = '';\n dropdown.style.zIndex = '';\n dropdown.style.margin = '';\n\n this.removePositionListeners();\n }\n\n private updateDropdownPosition(): void {\n const trigger = this.triggerRef?.nativeElement;\n const dropdown = this.dropdownRef?.nativeElement;\n if (!trigger || !dropdown) return;\n\n const triggerRect = trigger.getBoundingClientRect();\n const dropdownHeight = dropdown.scrollHeight;\n const gap = 4;\n const spaceBelow = window.innerHeight - triggerRect.bottom;\n const spaceAbove = triggerRect.top;\n const openAbove = spaceBelow < dropdownHeight + gap && spaceAbove > spaceBelow;\n\n dropdown.style.position = 'fixed';\n dropdown.style.minWidth = `${triggerRect.width}px`;\n dropdown.style.left = `${triggerRect.left}px`;\n dropdown.style.zIndex = '99999';\n dropdown.style.margin = '0';\n\n if (openAbove) {\n dropdown.style.top = 'auto';\n dropdown.style.bottom = `${window.innerHeight - triggerRect.top + gap}px`;\n } else {\n dropdown.style.top = `${triggerRect.bottom + gap}px`;\n dropdown.style.bottom = 'auto';\n }\n }\n\n private addPositionListeners(): void {\n const update = () => {\n if (this.isOpen()) {\n this.updateDropdownPosition();\n }\n };\n window.addEventListener('scroll', update, true);\n window.addEventListener('resize', update);\n this.positionCleanup = () => {\n window.removeEventListener('scroll', update, true);\n window.removeEventListener('resize', update);\n };\n }\n\n private removePositionListeners(): void {\n this.positionCleanup?.();\n this.positionCleanup = null;\n }\n}\n","<div\n class=\"ui-timepicker-wrapper\"\n [class.ui-timepicker-wrapper--error]=\"error()\"\n [class.ui-timepicker-wrapper--disabled]=\"disabled()\"\n [class.ui-timepicker-wrapper--open]=\"isOpen()\"\n>\n @if (label()) {\n <label class=\"ui-timepicker__label\" [attr.for]=\"inputId()\">\n {{ label() }}\n @if (required()) {\n <span class=\"ui-timepicker__required\">*</span>\n }\n </label>\n }\n\n <div\n #triggerRef\n class=\"ui-timepicker__trigger\"\n [class]=\"triggerClasses()\"\n [attr.role]=\"'combobox'\"\n [attr.aria-expanded]=\"isOpen()\"\n [attr.aria-haspopup]=\"'dialog'\"\n [attr.aria-disabled]=\"disabled()\"\n [attr.tabindex]=\"disabled() ? -1 : 0\"\n (click)=\"toggle()\"\n (keydown)=\"handleTriggerKeydown($event)\"\n >\n <span class=\"ui-timepicker__value\">\n @if (displayValue()) {\n {{ displayValue() }}\n } @else {\n <span class=\"ui-timepicker__placeholder\">{{ placeholder() }}</span>\n }\n </span>\n\n <div class=\"ui-timepicker__icons\">\n @if (clearable() && hasValue() && !disabled() && !readonly()) {\n <button\n type=\"button\"\n class=\"ui-timepicker__clear\"\n (click)=\"clear($event)\"\n aria-label=\"Clear time\"\n >\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\">\n <line x1=\"18\" y1=\"6\" x2=\"6\" y2=\"18\"></line>\n <line x1=\"6\" y1=\"6\" x2=\"18\" y2=\"18\"></line>\n </svg>\n </button>\n }\n <svg\n class=\"ui-timepicker__clock-icon\"\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n >\n <circle cx=\"12\" cy=\"12\" r=\"10\"></circle>\n <polyline points=\"12 6 12 12 16 14\"></polyline>\n </svg>\n </div>\n </div>\n\n <div\n #dropdownRef\n class=\"ui-timepicker__dropdown\"\n [class.ui-timepicker__dropdown--open]=\"isOpen()\"\n [attr.role]=\"'dialog'\"\n [attr.aria-label]=\"'Time picker'\"\n >\n <div class=\"ui-timepicker__columns\">\n <!-- Hours -->\n <div class=\"ui-timepicker__column\">\n <div class=\"ui-timepicker__column-header\">Hr</div>\n <div class=\"ui-timepicker__column-list\">\n @for (hour of hoursList(); track hour) {\n <button\n type=\"button\"\n class=\"ui-timepicker__option\"\n [class.ui-timepicker__option--selected]=\"hour === selectedHour()\"\n [disabled]=\"isHourDisabled(hour)\"\n (click)=\"selectHour(hour)\"\n >\n {{ formatNumber(hour) }}\n </button>\n }\n </div>\n </div>\n\n <!-- Minutes -->\n <div class=\"ui-timepicker__column\">\n <div class=\"ui-timepicker__column-header\">Min</div>\n <div class=\"ui-timepicker__column-list\">\n @for (minute of minutesList(); track minute) {\n <button\n type=\"button\"\n class=\"ui-timepicker__option\"\n [class.ui-timepicker__option--selected]=\"minute === selectedMinute()\"\n [disabled]=\"isMinuteDisabled(minute)\"\n (click)=\"selectMinute(minute)\"\n >\n {{ formatNumber(minute) }}\n </button>\n }\n </div>\n </div>\n\n <!-- Seconds (optional) -->\n @if (showSeconds()) {\n <div class=\"ui-timepicker__column\">\n <div class=\"ui-timepicker__column-header\">Sec</div>\n <div class=\"ui-timepicker__column-list\">\n @for (second of secondsList(); track second) {\n <button\n type=\"button\"\n class=\"ui-timepicker__option\"\n [class.ui-timepicker__option--selected]=\"second === selectedSecond()\"\n [disabled]=\"isSecondDisabled(second)\"\n (click)=\"selectSecond(second)\"\n >\n {{ formatNumber(second) }}\n </button>\n }\n </div>\n </div>\n }\n\n <!-- AM/PM (12h format) -->\n @if (format() === '12h') {\n <div class=\"ui-timepicker__column ui-timepicker__column--period\">\n <div class=\"ui-timepicker__column-header\"> </div>\n <div class=\"ui-timepicker__column-list\">\n <button\n type=\"button\"\n class=\"ui-timepicker__option\"\n [class.ui-timepicker__option--selected]=\"selectedPeriod() === 'AM'\"\n (click)=\"selectPeriod('AM')\"\n >\n AM\n </button>\n <button\n type=\"button\"\n class=\"ui-timepicker__option\"\n [class.ui-timepicker__option--selected]=\"selectedPeriod() === 'PM'\"\n (click)=\"selectPeriod('PM')\"\n >\n PM\n </button>\n </div>\n </div>\n }\n </div>\n\n <div class=\"ui-timepicker__footer\">\n <button\n type=\"button\"\n class=\"ui-timepicker__now-btn\"\n (click)=\"setNow()\"\n >\n Now\n </button>\n </div>\n </div>\n\n @if (error()) {\n <span class=\"ui-timepicker__error\">{{ error() }}</span>\n }\n @if (hint() && !error()) {\n <span class=\"ui-timepicker__hint\">{{ hint() }}</span>\n }\n</div>\n","import {\n Component,\n input,\n model,\n output,\n signal,\n computed,\n ChangeDetectionStrategy,\n ElementRef,\n inject,\n HostListener,\n OnDestroy,\n ViewChild,\n} from '@angular/core';\nimport { DOCUMENT } from '@angular/common';\nimport { TimeValue, TimeFormat } from '../timepicker/timepicker.component';\n\nexport type DatetimepickerSize = 'sm' | 'md' | 'lg';\nexport type DatetimepickerVariant = 'default' | 'outlined' | 'filled';\nexport type DatetimepickerView = 'day' | 'month' | 'year';\n\nexport interface CalendarDay {\n date: Date;\n day: number;\n isCurrentMonth: boolean;\n isToday: boolean;\n isSelected: boolean;\n isDisabled: boolean;\n isFocused: boolean;\n}\n\nexport interface CalendarMonth {\n month: number;\n label: string;\n isSelected: boolean;\n isDisabled: boolean;\n isCurrent: boolean;\n}\n\nexport interface CalendarYear {\n year: number;\n isSelected: boolean;\n isDisabled: boolean;\n isCurrent: boolean;\n isInRange: boolean;\n}\n\n@Component({\n selector: 'ui-datetimepicker',\n standalone: true,\n templateUrl: './datetimepicker.component.html',\n styleUrl: './datetimepicker.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class DatetimepickerComponent implements OnDestroy {\n // Inputs\n readonly variant = input<DatetimepickerVariant>('default');\n readonly size = input<DatetimepickerSize>('md');\n readonly placeholder = input('Select date and time');\n readonly label = input('');\n readonly hint = input('');\n readonly error = input('');\n readonly disabled = input(false);\n readonly readonly = input(false);\n readonly clearable = input(false);\n readonly required = input(false);\n readonly showSeconds = input(false);\n readonly timeFormat = input<TimeFormat>('24h');\n readonly dateFormat = input('yyyy-MM-dd');\n readonly minuteStep = input(1);\n readonly secondStep = input(1);\n readonly minDate = input<Date | null>(null);\n readonly maxDate = input<Date | null>(null);\n readonly disabledDates = input<Date[] | ((date: Date) => boolean)>([]);\n readonly firstDayOfWeek = input<0 | 1>(1);\n readonly id = input('');\n\n // Two-way binding\n readonly value = model<Date | null>(null);\n\n // Outputs\n readonly opened = output<void>();\n readonly closed = output<void>();\n\n // View children for dropdown portal\n @ViewChild('triggerRef', { static: true }) triggerRef!: ElementRef<HTMLElement>;\n @ViewChild('dropdownRef', { static: true }) dropdownRef!: ElementRef<HTMLElement>;\n\n // Internal state\n readonly isOpen = signal(false);\n readonly currentView = signal<DatetimepickerView>('day');\n readonly viewDate = signal(new Date());\n readonly focusedDate = signal<Date | null>(null);\n\n // Time state\n readonly selectedHour = signal(0);\n readonly selectedMinute = signal(0);\n readonly selectedSecond = signal(0);\n readonly selectedPeriod = signal<'AM' | 'PM'>('AM');\n\n private readonly elementRef = inject(ElementRef);\n private readonly document = inject(DOCUMENT);\n private positionCleanup: (() => void) | null = null;\n\n private static nextId = 0;\n private readonly generatedId = `ui-datetimepicker-${++DatetimepickerComponent.nextId}`;\n\n protected readonly inputId = computed(() => this.id() || this.generatedId);\n\n // Computed: hours list\n protected readonly hoursList = computed(() => {\n const is12h = this.timeFormat() === '12h';\n const hours: number[] = [];\n const start = is12h ? 1 : 0;\n const max = is12h ? 12 : 23;\n\n for (let i = start; i <= max; i++) {\n hours.push(i);\n }\n return hours;\n });\n\n // Computed: minutes list\n protected readonly minutesList = computed(() => {\n const step = this.minuteStep();\n const minutes: number[] = [];\n for (let i = 0; i < 60; i += step) {\n minutes.push(i);\n }\n return minutes;\n });\n\n // Computed: seconds list\n protected readonly secondsList = computed(() => {\n const step = this.secondStep();\n const seconds: number[] = [];\n for (let i = 0; i < 60; i += step) {\n seconds.push(i);\n }\n return seconds;\n });\n\n // Computed: display value\n protected readonly displayValue = computed(() => {\n const val = this.value();\n if (!val) return '';\n\n const datePart = this.formatDate(val, this.dateFormat());\n const timePart = this.formatTime(val);\n\n return `${datePart} ${timePart}`;\n });\n\n // Computed: trigger CSS classes\n protected readonly triggerClasses = computed(() => {\n return `ui-datetimepicker__trigger--${this.variant()} ui-datetimepicker__trigger--${this.size()}`;\n });\n\n // Computed: has value\n protected readonly hasValue = computed(() => {\n return this.value() !== null;\n });\n\n // Computed: weekday headers\n protected readonly weekdayHeaders = computed(() => {\n const first = this.firstDayOfWeek();\n const formatter = new Intl.DateTimeFormat(undefined, { weekday: 'short' });\n const headers: string[] = [];\n const base = new Date(1970, 0, 4 + first);\n for (let i = 0; i < 7; i++) {\n const d = new Date(base);\n d.setDate(base.getDate() + i);\n headers.push(formatter.format(d));\n }\n return headers;\n });\n\n // Computed: month/year label for header\n protected readonly monthYearLabel = computed(() => {\n const vd = this.viewDate();\n const formatter = new Intl.DateTimeFormat(undefined, { month: 'long', year: 'numeric' });\n return formatter.format(vd);\n });\n\n // Computed: decade label for year view\n protected readonly decadeLabel = computed(() => {\n const year = this.viewDate().getFullYear();\n const startYear = year - (year % 10);\n return `${startYear} — ${startYear + 9}`;\n });\n\n // Computed: calendar grid (6 weeks x 7 days)\n protected readonly calendarGrid = computed(() => {\n const vd = this.viewDate();\n const year = vd.getFullYear();\n const month = vd.getMonth();\n const first = this.firstDayOfWeek();\n const today = new Date();\n const val = this.value();\n const focused = this.focusedDate();\n\n const firstOfMonth = new Date(year, month, 1);\n let dayOfWeek = firstOfMonth.getDay() - first;\n if (dayOfWeek < 0) dayOfWeek += 7;\n const gridStart = new Date(year, month, 1 - dayOfWeek);\n\n const grid: CalendarDay[][] = [];\n const cursor = new Date(gridStart);\n\n for (let week = 0; week < 6; week++) {\n const row: CalendarDay[] = [];\n for (let day = 0; day < 7; day++) {\n const date = new Date(cursor);\n const isCurrentMonth = date.getMonth() === month;\n const isToday = this.isSameDay(date, today);\n const isSelected = val ? this.isSameDay(date, val) : false;\n const isDisabled = this.isDateDisabled(date);\n const isFocused = focused ? this.isSameDay(date, focused) : false;\n\n row.push({\n date,\n day: date.getDate(),\n isCurrentMonth,\n isToday,\n isSelected,\n isDisabled,\n isFocused,\n });\n\n cursor.setDate(cursor.getDate() + 1);\n }\n grid.push(row);\n }\n\n return grid;\n });\n\n // Computed: month grid (4 rows x 3 columns)\n protected readonly monthGrid = computed(() => {\n const vd = this.viewDate();\n const year = vd.getFullYear();\n const today = new Date();\n const val = this.value();\n const formatter = new Intl.DateTimeFormat(undefined, { month: 'short' });\n\n const grid: CalendarMonth[][] = [];\n let monthIdx = 0;\n\n for (let row = 0; row < 4; row++) {\n const rowArr: CalendarMonth[] = [];\n for (let col = 0; col < 3; col++) {\n const date = new Date(year, monthIdx, 1);\n const isSelected = val ? val.getFullYear() === year && val.getMonth() === monthIdx : false;\n const isDisabled = this.isMonthDisabled(year, monthIdx);\n const isCurrent = today.getFullYear() === year && today.getMonth() === monthIdx;\n\n rowArr.push({\n month: monthIdx,\n label: formatter.format(date),\n isSelected,\n isDisabled,\n isCurrent,\n });\n monthIdx++;\n }\n grid.push(rowArr);\n }\n\n return grid;\n });\n\n // Computed: year grid (4 rows x 3 columns)\n protected readonly yearGrid = computed(() => {\n const vd = this.viewDate();\n const year = vd.getFullYear();\n const startYear = year - (year % 10) - 1;\n const today = new Date();\n const val = this.value();\n\n const grid: CalendarYear[][] = [];\n let yearIdx = startYear;\n\n for (let row = 0; row < 4; row++) {\n const rowArr: CalendarYear[] = [];\n for (let col = 0; col < 3; col++) {\n const isSelected = val ? val.getFullYear() === yearIdx : false;\n const isDisabled = this.isYearDisabled(yearIdx);\n const isCurrent = today.getFullYear() === yearIdx;\n const isInRange = yearIdx >= startYear + 1 && yearIdx <= startYear + 10;\n\n rowArr.push({\n year: yearIdx,\n isSelected,\n isDisabled,\n isCurrent,\n isInRange,\n });\n yearIdx++;\n }\n grid.push(rowArr);\n }\n\n return grid;\n });\n\n // Computed: can navigate prev/next\n protected readonly canNavigatePrev = computed(() => {\n const min = this.minDate();\n if (!min) return true;\n const vd = this.viewDate();\n const view = this.currentView();\n\n if (view === 'day') {\n return vd.getFullYear() > min.getFullYear() ||\n (vd.getFullYear() === min.getFullYear() && vd.getMonth() > min.getMonth());\n }\n if (view === 'month') {\n return vd.getFullYear() > min.getFullYear();\n }\n const startYear = vd.getFullYear() - (vd.getFullYear() % 10);\n return startYear > min.getFullYear();\n });\n\n protected readonly canNavigateNext = computed(() => {\n const max = this.maxDate();\n if (!max) return true;\n const vd = this.viewDate();\n const view = this.currentView();\n\n if (view === 'day') {\n return vd.getFullYear() < max.getFullYear() ||\n (vd.getFullYear() === max.getFullYear() && vd.getMonth() < max.getMonth());\n }\n if (view === 'month') {\n return vd.getFullYear() < max.getFullYear();\n }\n const startYear = vd.getFullYear() - (vd.getFullYear() % 10);\n return startYear + 9 < max.getFullYear();\n });\n\n ngOnDestroy(): void {\n const dropdown = this.dropdownRef?.nativeElement;\n if (dropdown?.parentElement === this.document.body) {\n this.document.body.removeChild(dropdown);\n }\n this.removePositionListeners();\n }\n\n @HostListener('document:click', ['$event'])\n onDocumentClick(event: MouseEvent): void {\n const target = event.target as Node;\n if (\n !this.elementRef.nativeElement.contains(target) &&\n !this.dropdownRef?.nativeElement?.contains(target)\n ) {\n this.close();\n }\n }\n\n toggle(): void {\n if (this.disabled() || this.readonly()) return;\n if (this.isOpen()) {\n this.close();\n } else {\n this.open();\n }\n }\n\n open(): void {\n if (this.disabled() || this.readonly() || this.isOpen()) return;\n this.isOpen.set(true);\n this.currentView.set('day');\n this.focusedDate.set(null);\n\n const val = this.value();\n if (val) {\n this.viewDate.set(new Date(val.getFullYear(), val.getMonth(), 1));\n this.initTimeFromValue(val);\n } else {\n const today = new Date();\n this.viewDate.set(new Date(today.getFullYear(), today.getMonth(), 1));\n this.initTimeFromValue(today);\n }\n\n this.opened.emit();\n this.portalDropdown();\n }\n\n close(): void {\n if (!this.isOpen()) return;\n this.unportalDropdown();\n this.isOpen.set(false);\n this.focusedDate.set(null);\n this.closed.emit();\n }\n\n selectDay(day: CalendarDay): void {\n if (day.isDisabled) return;\n\n const date = new Date(day.date);\n this.applyTimeToDate(date);\n this.value.set(date);\n }\n\n selectMonth(month: CalendarMonth): void {\n if (month.isDisabled) return;\n const vd = this.viewDate();\n this.viewDate.set(new Date(vd.getFullYear(), month.month, 1));\n this.currentView.set('day');\n }\n\n selectYear(year: CalendarYear): void {\n if (year.isDisabled) return;\n const vd = this.viewDate();\n this.viewDate.set(new Date(year.year, vd.getMonth(), 1));\n this.currentView.set('month');\n }\n\n navigatePrev(): void {\n if (!this.canNavigatePrev()) return;\n const vd = this.viewDate();\n const view = this.currentView();\n\n if (view === 'day') {\n this.viewDate.set(new Date(vd.getFullYear(), vd.getMonth() - 1, 1));\n } else if (view === 'month') {\n this.viewDate.set(new Date(vd.getFullYear() - 1, vd.getMonth(), 1));\n } else {\n this.viewDate.set(new Date(vd.getFullYear() - 10, vd.getMonth(), 1));\n }\n }\n\n navigateNext(): void {\n if (!this.canNavigateNext()) return;\n const vd = this.viewDate();\n const view = this.currentView();\n\n if (view === 'day') {\n this.viewDate.set(new Date(vd.getFullYear(), vd.getMonth() + 1, 1));\n } else if (view === 'month') {\n this.viewDate.set(new Date(vd.getFullYear() + 1, vd.getMonth(), 1));\n } else {\n this.viewDate.set(new Date(vd.getFullYear() + 10, vd.getMonth(), 1));\n }\n }\n\n switchToMonthView(): void {\n this.currentView.set('month');\n }\n\n switchToYearView(): void {\n this.currentView.set('year');\n }\n\n goToNow(): void {\n const now = new Date();\n this.viewDate.set(new Date(now.getFullYear(), now.getMonth(), 1));\n this.currentView.set('day');\n this.initTimeFromValue(now);\n this.value.set(now);\n }\n\n selectHour(hour: number): void {\n this.selectedHour.set(hour);\n this.updateValueWithTime();\n }\n\n selectMinute(minute: number): void {\n this.selectedMinute.set(minute);\n this.updateValueWithTime();\n }\n\n selectSecond(second: number): void {\n this.selectedSecond.set(second);\n this.updateValueWithTime();\n }\n\n selectPeriod(period: 'AM' | 'PM'): void {\n this.selectedPeriod.set(period);\n this.updateValueWithTime();\n }\n\n clear(event: MouseEvent): void {\n event.stopPropagation();\n this.value.set(null);\n }\n\n protected handleTriggerKeydown(event: KeyboardEvent): void {\n switch (event.key) {\n case 'Enter':\n case ' ':\n event.preventDefault();\n if (this.isOpen()) {\n const focused = this.focusedDate();\n if (focused && this.currentView() === 'day') {\n const day = this.findDayInGrid(focused);\n if (day && !day.isDisabled) {\n this.selectDay(day);\n }\n }\n } else {\n this.open();\n }\n break;\n case 'ArrowDown':\n event.preventDefault();\n if (!this.isOpen()) {\n this.open();\n } else if (this.currentView() === 'day') {\n this.moveFocus(7);\n }\n break;\n case 'ArrowUp':\n event.preventDefault();\n if (this.currentView() === 'day') {\n this.moveFocus(-7);\n }\n break;\n case 'ArrowLeft':\n event.preventDefault();\n if (this.currentView() === 'day') {\n this.moveFocus(-1);\n }\n break;\n case 'ArrowRight':\n event.preventDefault();\n if (this.currentView() === 'day') {\n this.moveFocus(1);\n }\n break;\n case 'Escape':\n event.preventDefault();\n this.close();\n break;\n case 'Tab':\n this.close();\n break;\n }\n }\n\n protected formatNumber(n: number): string {\n return n.toString().padStart(2, '0');\n }\n\n protected isHourDisabled(hour: number): boolean {\n return false;\n }\n\n protected isMinuteDisabled(minute: number): boolean {\n return false;\n }\n\n protected isSecondDisabled(second: number): boolean {\n return false;\n }\n\n // Private methods\n private formatDate(date: Date, format: string): string {\n const yyyy = date.getFullYear().toString();\n const yy = yyyy.slice(-2);\n const MM = (date.getMonth() + 1).toString().padStart(2, '0');\n const M = (date.getMonth() + 1).toString();\n const dd = date.getDate().toString().padStart(2, '0');\n const d = date.getDate().toString();\n\n return format\n .replace('yyyy', yyyy)\n .replace('yy', yy)\n .replace('MM', MM)\n .replace('M', M)\n .replace('dd', dd)\n .replace('d', d);\n }\n\n private formatTime(date: Date): string {\n const is12h = this.timeFormat() === '12h';\n let hours = date.getHours();\n let period = '';\n\n if (is12h) {\n period = hours >= 12 ? ' PM' : ' AM';\n hours = hours % 12;\n if (hours === 0) hours = 12;\n }\n\n const hStr = hours.toString().padStart(2, '0');\n const mStr = date.getMinutes().toString().padStart(2, '0');\n\n if (this.showSeconds()) {\n const sStr = date.getSeconds().toString().padStart(2, '0');\n return `${hStr}:${mStr}:${sStr}${period}`;\n }\n\n return `${hStr}:${mStr}${period}`;\n }\n\n private initTimeFromValue(date: Date): void {\n const is12h = this.timeFormat() === '12h';\n const hours = date.getHours();\n\n if (is12h) {\n this.selectedPeriod.set(hours >= 12 ? 'PM' : 'AM');\n let h = hours % 12;\n if (h === 0) h = 12;\n this.selectedHour.set(h);\n } else {\n this.selectedHour.set(hours);\n }\n this.selectedMinute.set(date.getMinutes());\n this.selectedSecond.set(date.getSeconds());\n }\n\n private applyTimeToDate(date: Date): void {\n const is12h = this.timeFormat() === '12h';\n let hours = this.selectedHour();\n\n if (is12h) {\n if (this.selectedPeriod() === 'PM' && hours !== 12) {\n hours += 12;\n } else if (this.selectedPeriod() === 'AM' && hours === 12) {\n hours = 0;\n }\n }\n\n date.setHours(hours, this.selectedMinute(), this.showSeconds() ? this.selectedSecond() : 0, 0);\n }\n\n private updateValueWithTime(): void {\n const val = this.value();\n if (!val) return;\n\n const newDate = new Date(val);\n this.applyTimeToDate(newDate);\n this.value.set(newDate);\n }\n\n private isSameDay(a: Date, b: Date): boolean {\n return (\n a.getFullYear() === b.getFullYear() &&\n a.getMonth() === b.getMonth() &&\n a.getDate() === b.getDate()\n );\n }\n\n private isDateDisabled(date: Date): boolean {\n const min = this.minDate();\n const max = this.maxDate();\n\n if (min && date < new Date(min.getFullYear(), min.getMonth(), min.getDate())) return true;\n if (max && date > new Date(max.getFullYear(), max.getMonth(), max.getDate())) return true;\n\n const disabled = this.disabledDates();\n if (typeof disabled === 'function') {\n return disabled(date);\n }\n if (Array.isArray(disabled)) {\n return disabled.some((d) => this.isSameDay(d, date));\n }\n return false;\n }\n\n private isMonthDisabled(year: number, month: number): boolean {\n const min = this.minDate();\n const max = this.maxDate();\n\n if (min) {\n if (year < min.getFullYear()) return true;\n if (year === min.getFullYear() && month < min.getMonth()) return true;\n }\n if (max) {\n if (year > max.getFullYear()) return true;\n if (year === max.getFullYear() && month > max.getMonth()) return true;\n }\n return false;\n }\n\n private isYearDisabled(year: number): boolean {\n const min = this.minDate();\n const max = this.maxDate();\n\n if (min && year < min.getFullYear()) return true;\n if (max && year > max.getFullYear()) return true;\n return false;\n }\n\n private moveFocus(days: number): void {\n let current = this.focusedDate();\n if (!current) {\n const val = this.value();\n current = val || new Date();\n }\n\n const next = new Date(current);\n next.setDate(next.getDate() + days);\n\n const vd = this.viewDate();\n if (next.getMonth() !== vd.getMonth() || next.getFullYear() !== vd.getFullYear()) {\n this.viewDate.set(new Date(next.getFullYear(), next.getMonth(), 1));\n }\n\n this.focusedDate.set(next);\n }\n\n private findDayInGrid(date: Date): CalendarDay | null {\n for (const week of this.calendarGrid()) {\n for (const day of week) {\n if (this.isSameDay(day.date, date)) {\n return day;\n }\n }\n }\n return null;\n }\n\n // Portal pattern\n private portalDropdown(): void {\n const dropdown = this.dropdownRef?.nativeElement;\n if (!dropdown) return;\n\n dropdown.style.display = 'block';\n this.document.body.appendChild(dropdown);\n this.updateDropdownPosition();\n this.addPositionListeners();\n }\n\n private unportalDropdown(): void {\n const dropdown = this.dropdownRef?.nativeElement;\n if (!dropdown) return;\n\n if (dropdown.parentElement === this.document.body) {\n const wrapper = this.elementRef.nativeElement.querySelector('.ui-datetimepicker-wrapper');\n if (wrapper) {\n wrapper.appendChild(dropdown);\n }\n }\n\n dropdown.style.display = '';\n dropdown.style.position = '';\n dropdown.style.top = '';\n dropdown.style.left = '';\n dropdown.style.bottom = '';\n dropdown.style.minWidth = '';\n dropdown.style.zIndex = '';\n dropdown.style.margin = '';\n\n this.removePositionListeners();\n }\n\n private updateDropdownPosition(): void {\n const trigger = this.triggerRef?.nativeElement;\n const dropdown = this.dropdownRef?.nativeElement;\n if (!trigger || !dropdown) return;\n\n const triggerRect = trigger.getBoundingClientRect();\n const dropdownHeight = dropdown.scrollHeight;\n const gap = 4;\n const spaceBelow = window.innerHeight - triggerRect.bottom;\n const spaceAbove = triggerRect.top;\n const openAbove = spaceBelow < dropdownHeight + gap && spaceAbove > spaceBelow;\n\n dropdown.style.position = 'fixed';\n dropdown.style.minWidth = `${triggerRect.width}px`;\n dropdown.style.left = `${triggerRect.left}px`;\n dropdown.style.zIndex = '99999';\n dropdown.style.margin = '0';\n\n if (openAbove) {\n dropdown.style.top = 'auto';\n dropdown.style.bottom = `${window.innerHeight - triggerRect.top + gap}px`;\n } else {\n dropdown.style.top = `${triggerRect.bottom + gap}px`;\n dropdown.style.bottom = 'auto';\n }\n }\n\n private addPositionListeners(): void {\n const update = () => {\n if (this.isOpen()) {\n this.updateDropdownPosition();\n }\n };\n window.addEventListener('scroll', update, true);\n window.addEventListener('resize', update);\n this.positionCleanup = () => {\n window.removeEventListener('scroll', update, true);\n window.removeEventListener('resize', update);\n };\n }\n\n private removePositionListeners(): void {\n this.positionCleanup?.();\n this.positionCleanup = null;\n }\n}\n","<div\n class=\"ui-datetimepicker-wrapper\"\n [class.ui-datetimepicker-wrapper--error]=\"error()\"\n [class.ui-datetimepicker-wrapper--disabled]=\"disabled()\"\n [class.ui-datetimepicker-wrapper--open]=\"isOpen()\"\n>\n @if (label()) {\n <label class=\"ui-datetimepicker__label\" [attr.for]=\"inputId()\">\n {{ label() }}\n @if (required()) {\n <span class=\"ui-datetimepicker__required\">*</span>\n }\n </label>\n }\n\n <div\n #triggerRef\n class=\"ui-datetimepicker__trigger\"\n [class]=\"triggerClasses()\"\n [attr.role]=\"'combobox'\"\n [attr.aria-expanded]=\"isOpen()\"\n [attr.aria-haspopup]=\"'dialog'\"\n [attr.aria-disabled]=\"disabled()\"\n [attr.tabindex]=\"disabled() ? -1 : 0\"\n (click)=\"toggle()\"\n (keydown)=\"handleTriggerKeydown($event)\"\n >\n <span class=\"ui-datetimepicker__value\">\n @if (displayValue()) {\n {{ displayValue() }}\n } @else {\n <span class=\"ui-datetimepicker__placeholder\">{{ placeholder() }}</span>\n }\n </span>\n\n <div class=\"ui-datetimepicker__icons\">\n @if (clearable() && hasValue() && !disabled() && !readonly()) {\n <button\n type=\"button\"\n class=\"ui-datetimepicker__clear\"\n (click)=\"clear($event)\"\n aria-label=\"Clear datetime\"\n >\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\">\n <line x1=\"18\" y1=\"6\" x2=\"6\" y2=\"18\"></line>\n <line x1=\"6\" y1=\"6\" x2=\"18\" y2=\"18\"></line>\n </svg>\n </button>\n }\n <svg\n class=\"ui-datetimepicker__calendar-icon\"\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n >\n <rect x=\"3\" y=\"4\" width=\"18\" height=\"18\" rx=\"2\" ry=\"2\"></rect>\n <line x1=\"16\" y1=\"2\" x2=\"16\" y2=\"6\"></line>\n <line x1=\"8\" y1=\"2\" x2=\"8\" y2=\"6\"></line>\n <line x1=\"3\" y1=\"10\" x2=\"21\" y2=\"10\"></line>\n </svg>\n </div>\n </div>\n\n <div\n #dropdownRef\n class=\"ui-datetimepicker__dropdown\"\n [class.ui-datetimepicker__dropdown--open]=\"isOpen()\"\n [attr.role]=\"'dialog'\"\n [attr.aria-label]=\"'Date and time picker'\"\n >\n <div class=\"ui-datetimepicker__content\">\n <!-- Calendar section -->\n <div class=\"ui-datetimepicker__calendar-section\">\n <div class=\"ui-datetimepicker__header\">\n <button\n type=\"button\"\n class=\"ui-datetimepicker__nav-btn\"\n [disabled]=\"!canNavigatePrev()\"\n (click)=\"navigatePrev()\"\n aria-label=\"Previous\"\n >\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\">\n <polyline points=\"15 18 9 12 15 6\"></polyline>\n </svg>\n </button>\n\n @if (currentView() === 'day') {\n <button\n type=\"button\"\n class=\"ui-datetimepicker__header-label\"\n (click)=\"switchToMonthView()\"\n >\n {{ monthYearLabel() }}\n </button>\n } @else if (currentView() === 'month') {\n <button\n type=\"button\"\n class=\"ui-datetimepicker__header-label\"\n (click)=\"switchToYearView()\"\n >\n {{ viewDate().getFullYear() }}\n </button>\n } @else {\n <span class=\"ui-datetimepicker__header-label ui-datetimepicker__header-label--static\">\n {{ decadeLabel() }}\n </span>\n }\n\n <button\n type=\"button\"\n class=\"ui-datetimepicker__nav-btn\"\n [disabled]=\"!canNavigateNext()\"\n (click)=\"navigateNext()\"\n aria-label=\"Next\"\n >\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\">\n <polyline points=\"9 18 15 12 9 6\"></polyline>\n </svg>\n </button>\n </div>\n\n @if (currentView() === 'day') {\n <div class=\"ui-datetimepicker__calendar\" role=\"grid\">\n <div class=\"ui-datetimepicker__weekdays\">\n @for (header of weekdayHeaders(); track header) {\n <div class=\"ui-datetimepicker__weekday\">{{ header }}</div>\n }\n </div>\n @for (week of calendarGrid(); track $index) {\n <div class=\"ui-datetimepicker__week\" role=\"row\">\n @for (day of week; track day.date.getTime()) {\n <button\n type=\"button\"\n class=\"ui-datetimepicker__day\"\n [class.ui-datetimepicker__day--outside]=\"!day.isCurrentMonth\"\n [class.ui-datetimepicker__day--today]=\"day.isToday\"\n [class.ui-datetimepicker__day--selected]=\"day.isSelected\"\n [class.ui-datetimepicker__day--disabled]=\"day.isDisabled\"\n [class.ui-datetimepicker__day--focused]=\"day.isFocused\"\n [disabled]=\"day.isDisabled\"\n (click)=\"selectDay(day)\"\n role=\"gridcell\"\n [attr.aria-selected]=\"day.isSelected\"\n >\n {{ day.day }}\n </button>\n }\n </div>\n }\n </div>\n } @else if (currentView() === 'month') {\n <div class=\"ui-datetimepicker__months\">\n @for (row of monthGrid(); track $index) {\n <div class=\"ui-datetimepicker__month-row\">\n @for (month of row; track month.month) {\n <button\n type=\"button\"\n class=\"ui-datetimepicker__month\"\n [class.ui-datetimepicker__month--selected]=\"month.isSelected\"\n [class.ui-datetimepicker__month--current]=\"month.isCurrent\"\n [class.ui-datetimepicker__month--disabled]=\"month.isDisabled\"\n [disabled]=\"month.isDisabled\"\n (click)=\"selectMonth(month)\"\n >\n {{ month.label }}\n </button>\n }\n </div>\n }\n </div>\n } @else {\n <div class=\"ui-datetimepicker__years\">\n @for (row of yearGrid(); track $index) {\n <div class=\"ui-datetimepicker__year-row\">\n @for (year of row; track year.year) {\n <button\n type=\"button\"\n class=\"ui-datetimepicker__year\"\n [class.ui-datetimepicker__year--selected]=\"year.isSelected\"\n [class.ui-datetimepicker__year--current]=\"year.isCurrent\"\n [class.ui-datetimepicker__year--disabled]=\"year.isDisabled\"\n [class.ui-datetimepicker__year--outside]=\"!year.isInRange\"\n [disabled]=\"year.isDisabled\"\n (click)=\"selectYear(year)\"\n >\n {{ year.year }}\n </button>\n }\n </div>\n }\n </div>\n }\n </div>\n\n <!-- Time section -->\n <div class=\"ui-datetimepicker__time-section\">\n <div class=\"ui-datetimepicker__time-header\">\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\">\n <circle cx=\"12\" cy=\"12\" r=\"10\"></circle>\n <polyline points=\"12 6 12 12 16 14\"></polyline>\n </svg>\n <span>Time</span>\n </div>\n\n <div class=\"ui-datetimepicker__time-columns\">\n <!-- Hours -->\n <div class=\"ui-datetimepicker__time-column\">\n <div class=\"ui-datetimepicker__time-column-header\">Hr</div>\n <div class=\"ui-datetimepicker__time-column-list\">\n @for (hour of hoursList(); track hour) {\n <button\n type=\"button\"\n class=\"ui-datetimepicker__time-option\"\n [class.ui-datetimepicker__time-option--selected]=\"hour === selectedHour()\"\n [disabled]=\"isHourDisabled(hour)\"\n (click)=\"selectHour(hour)\"\n >\n {{ formatNumber(hour) }}\n </button>\n }\n </div>\n </div>\n\n <!-- Minutes -->\n <div class=\"ui-datetimepicker__time-column\">\n <div class=\"ui-datetimepicker__time-column-header\">Min</div>\n <div class=\"ui-datetimepicker__time-column-list\">\n @for (minute of minutesList(); track minute) {\n <button\n type=\"button\"\n class=\"ui-datetimepicker__time-option\"\n [class.ui-datetimepicker__time-option--selected]=\"minute === selectedMinute()\"\n [disabled]=\"isMinuteDisabled(minute)\"\n (click)=\"selectMinute(minute)\"\n >\n {{ formatNumber(minute) }}\n </button>\n }\n </div>\n </div>\n\n <!-- Seconds (optional) -->\n @if (showSeconds()) {\n <div class=\"ui-datetimepicker__time-column\">\n <div class=\"ui-datetimepicker__time-column-header\">Sec</div>\n <div class=\"ui-datetimepicker__time-column-list\">\n @for (second of secondsList(); track second) {\n <button\n type=\"button\"\n class=\"ui-datetimepicker__time-option\"\n [class.ui-datetimepicker__time-option--selected]=\"second === selectedSecond()\"\n [disabled]=\"isSecondDisabled(second)\"\n (click)=\"selectSecond(second)\"\n >\n {{ formatNumber(second) }}\n </button>\n }\n </div>\n </div>\n }\n\n <!-- AM/PM (12h format) -->\n @if (timeFormat() === '12h') {\n <div class=\"ui-datetimepicker__time-column ui-datetimepicker__time-column--period\">\n <div class=\"ui-datetimepicker__time-column-header\"> </div>\n <div class=\"ui-datetimepicker__time-column-list\">\n <button\n type=\"button\"\n class=\"ui-datetimepicker__time-option\"\n [class.ui-datetimepicker__time-option--selected]=\"selectedPeriod() === 'AM'\"\n (click)=\"selectPeriod('AM')\"\n >\n AM\n </button>\n <button\n type=\"button\"\n class=\"ui-datetimepicker__time-option\"\n [class.ui-datetimepicker__time-option--selected]=\"selectedPeriod() === 'PM'\"\n (click)=\"selectPeriod('PM')\"\n >\n PM\n </button>\n </div>\n </div>\n }\n </div>\n </div>\n </div>\n\n <div class=\"ui-datetimepicker__footer\">\n <button\n type=\"button\"\n class=\"ui-datetimepicker__now-btn\"\n (click)=\"goToNow()\"\n >\n Now\n </button>\n </div>\n </div>\n\n @if (error()) {\n <span class=\"ui-datetimepicker__error\">{{ error() }}</span>\n }\n @if (hint() && !error()) {\n <span class=\"ui-datetimepicker__hint\">{{ hint() }}</span>\n }\n</div>\n","import { Component, inject, input, ChangeDetectionStrategy } from '@angular/core';\nimport { SidebarService } from '../../../services/sidebar.service';\n\nexport type ShellVariant = 'default' | 'header';\n\n@Component({\n selector: 'ui-shell',\n standalone: true,\n templateUrl: './shell.component.html',\n styleUrl: './shell.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ShellComponent {\n readonly variant = input<ShellVariant>('default');\n protected readonly sidebarService = inject(SidebarService);\n}\n","<div class=\"ui-shell\"\n [class.ui-shell--header]=\"variant() === 'header'\"\n [class.ui-shell--sidebar-collapsed]=\"sidebarService.collapsed()\"\n [class.ui-shell--mobile]=\"sidebarService.isMobile()\"\n [class.ui-shell--mobile-open]=\"sidebarService.mobileOpen()\">\n <ng-content />\n @if (sidebarService.isMobile() && sidebarService.mobileOpen()) {\n <div class=\"ui-shell__backdrop\" (click)=\"sidebarService.closeMobile()\"></div>\n }\n</div>\n","import { Component, ChangeDetectionStrategy } from '@angular/core';\n\n@Component({\n selector: 'ui-navbar',\n standalone: true,\n templateUrl: './navbar.component.html',\n styleUrl: './navbar.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class NavbarComponent {}\n","<header class=\"ui-navbar\">\n <div class=\"ui-navbar__start\">\n <ng-content select=\"[slot=start]\" />\n </div>\n <div class=\"ui-navbar__center\">\n <ng-content select=\"[slot=center]\" />\n </div>\n <div class=\"ui-navbar__end\">\n <ng-content select=\"[slot=end]\" />\n </div>\n <ng-content />\n</header>\n","import { Component, inject, ChangeDetectionStrategy } from '@angular/core';\nimport { SidebarService } from '../../../services/sidebar.service';\n\n@Component({\n selector: 'ui-sidebar',\n standalone: true,\n templateUrl: './sidebar.component.html',\n styleUrl: './sidebar.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class SidebarComponent {\n protected readonly sidebarService = inject(SidebarService);\n}\n","<aside class=\"ui-sidebar\"\n [class.ui-sidebar--collapsed]=\"sidebarService.collapsed()\"\n [class.ui-sidebar--mobile]=\"sidebarService.isMobile()\"\n [class.ui-sidebar--mobile-open]=\"sidebarService.mobileOpen()\">\n <div class=\"ui-sidebar__header\">\n <ng-content select=\"[slot=header]\" />\n </div>\n <nav class=\"ui-sidebar__nav\">\n <ng-content />\n </nav>\n <div class=\"ui-sidebar__footer\">\n <ng-content select=\"[slot=footer]\" />\n </div>\n</aside>\n","import { Component, ChangeDetectionStrategy } from '@angular/core';\n\n@Component({\n selector: 'ui-content',\n standalone: true,\n templateUrl: './content.component.html',\n styleUrl: './content.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ContentComponent {}\n","<main class=\"ui-content\">\n <ng-content />\n</main>\n","import { Component, ChangeDetectionStrategy } from '@angular/core';\n\n@Component({\n selector: 'ui-footer',\n standalone: true,\n templateUrl: './footer.component.html',\n styleUrl: './footer.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class FooterComponent {}\n","<footer class=\"ui-footer\">\n <ng-content />\n</footer>\n","import { Component, inject, ChangeDetectionStrategy, input } from '@angular/core';\nimport { SidebarService } from '../../../services/sidebar.service';\n\n@Component({\n selector: 'ui-sidebar-toggle',\n standalone: true,\n templateUrl: './sidebar-toggle.component.html',\n styleUrl: './sidebar-toggle.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class SidebarToggleComponent {\n protected readonly sidebarService = inject(SidebarService);\n readonly mobileOnly = input(true);\n}\n","<button class=\"ui-sidebar-toggle\"\n type=\"button\"\n [class.ui-sidebar-toggle--mobile-only]=\"mobileOnly()\"\n [attr.aria-expanded]=\"sidebarService.isMobile() ? sidebarService.mobileOpen() : !sidebarService.collapsed()\"\n aria-label=\"Toggle sidebar\"\n (click)=\"sidebarService.toggle()\">\n <svg class=\"ui-sidebar-toggle__icon\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\">\n <line x1=\"3\" y1=\"6\" x2=\"21\" y2=\"6\" />\n <line x1=\"3\" y1=\"12\" x2=\"21\" y2=\"12\" />\n <line x1=\"3\" y1=\"18\" x2=\"21\" y2=\"18\" />\n </svg>\n</button>\n","import {\n Component,\n input,\n signal,\n computed,\n ChangeDetectionStrategy,\n ElementRef,\n inject,\n} from '@angular/core';\nimport type { SplitComponent } from './split.component';\n\n@Component({\n selector: 'ui-split-pane',\n standalone: true,\n templateUrl: './split-pane.component.html',\n styleUrl: './split-pane.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: 'ui-split-pane',\n '[style.flex]': 'flexStyle()',\n '[style.order]': 'orderStyle()',\n },\n})\nexport class SplitPaneComponent {\n readonly size = input<number | undefined>(undefined);\n readonly minSize = input(0);\n readonly maxSize = input(100);\n\n /** @internal */\n readonly _index = signal(0);\n /** @internal */\n readonly _computedSize = signal<number>(0);\n\n private _parent: SplitComponent | null = null;\n\n readonly elementRef = inject(ElementRef);\n\n protected readonly flexStyle = computed(() => {\n const size = this._computedSize();\n return `0 0 ${size}%`;\n });\n\n protected readonly orderStyle = computed(() => {\n return this._index() * 2;\n });\n\n /** @internal */\n _setParent(parent: SplitComponent, index: number): void {\n this._parent = parent;\n this._index.set(index);\n }\n\n /** @internal */\n _setComputedSize(size: number): void {\n this._computedSize.set(size);\n }\n\n /** @internal */\n _getParent(): SplitComponent | null {\n return this._parent;\n }\n}\n","<ng-content />\n","import {\n Component,\n input,\n output,\n computed,\n contentChildren,\n signal,\n effect,\n ElementRef,\n inject,\n ChangeDetectionStrategy,\n PLATFORM_ID,\n DestroyRef,\n} from '@angular/core';\nimport { isPlatformBrowser, DOCUMENT, DecimalPipe } from '@angular/common';\nimport { SplitPaneComponent } from './split-pane.component';\n\nexport type SplitOrientation = 'horizontal' | 'vertical';\nexport type SplitGutterSize = 'sm' | 'md' | 'lg';\n\nexport interface SplitSizeChange {\n gutterIndex: number;\n sizes: number[];\n}\n\n@Component({\n selector: 'ui-split',\n standalone: true,\n imports: [DecimalPipe],\n templateUrl: './split.component.html',\n styleUrl: './split.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: 'ui-split',\n '[class.ui-split--horizontal]': 'orientation() === \"horizontal\"',\n '[class.ui-split--vertical]': 'orientation() === \"vertical\"',\n '[class.ui-split--disabled]': 'disabled()',\n '[class.ui-split--dragging]': 'isDragging()',\n },\n})\nexport class SplitComponent {\n readonly orientation = input<SplitOrientation>('horizontal');\n readonly gutterSize = input<SplitGutterSize>('md');\n readonly disabled = input(false);\n\n readonly sizeChange = output<SplitSizeChange>();\n readonly dragStart = output<number>();\n readonly dragEnd = output<number>();\n\n readonly panes = contentChildren(SplitPaneComponent);\n\n protected readonly isDragging = signal(false);\n protected readonly paneSizes = signal<number[]>([]);\n protected readonly gutterIndices = computed(() => {\n const count = this.panes().length;\n return count > 1 ? Array.from({ length: count - 1 }, (_, i) => i) : [];\n });\n\n private readonly elementRef = inject(ElementRef);\n private readonly platformId = inject(PLATFORM_ID);\n private readonly document = inject(DOCUMENT);\n private readonly destroyRef = inject(DestroyRef);\n\n private dragGutterIndex = -1;\n private dragStartPos = 0;\n private dragStartSizes: number[] = [];\n\n private mouseMoveHandler = (e: MouseEvent) => this.onMouseMove(e);\n private mouseUpHandler = () => this.onMouseUp();\n\n constructor() {\n // Single effect to handle pane setup and size distribution\n effect(() => {\n const paneList = this.panes();\n if (paneList.length === 0) return;\n\n // Set parent reference and index on each pane\n paneList.forEach((pane, index) => {\n pane._setParent(this, index);\n });\n\n // Calculate sizes based on inputs\n const sizes = this.calculateSizes(paneList);\n\n // Apply sizes to each pane\n sizes.forEach((size, index) => {\n paneList[index]._setComputedSize(size);\n });\n\n // Store sizes for drag operations\n this.paneSizes.set(sizes);\n });\n\n this.destroyRef.onDestroy(() => {\n this.cleanupListeners();\n });\n }\n\n protected readonly gutterSizeClass = computed(() => {\n return `ui-split__gutter--${this.gutterSize()}`;\n });\n\n protected onGutterMouseDown(event: MouseEvent, gutterIndex: number): void {\n if (this.disabled()) return;\n event.preventDefault();\n\n this.dragGutterIndex = gutterIndex;\n this.dragStartPos = this.orientation() === 'horizontal' ? event.clientX : event.clientY;\n this.dragStartSizes = [...this.paneSizes()];\n this.isDragging.set(true);\n\n this.dragStart.emit(gutterIndex);\n\n if (isPlatformBrowser(this.platformId)) {\n this.document.addEventListener('mousemove', this.mouseMoveHandler);\n this.document.addEventListener('mouseup', this.mouseUpHandler);\n }\n }\n\n protected onGutterKeyDown(event: KeyboardEvent, gutterIndex: number): void {\n if (this.disabled()) return;\n\n const step = 1;\n const sizes = [...this.paneSizes()];\n const paneList = this.panes();\n\n const leftPane = paneList[gutterIndex];\n const rightPane = paneList[gutterIndex + 1];\n\n let delta = 0;\n\n switch (event.key) {\n case 'ArrowLeft':\n case 'ArrowUp':\n event.preventDefault();\n delta = -step;\n break;\n case 'ArrowRight':\n case 'ArrowDown':\n event.preventDefault();\n delta = step;\n break;\n case 'Home':\n event.preventDefault();\n delta = -(sizes[gutterIndex] - leftPane.minSize());\n break;\n case 'End':\n event.preventDefault();\n delta = sizes[gutterIndex + 1] - rightPane.minSize();\n break;\n default:\n return;\n }\n\n const originalTotal = sizes[gutterIndex] + sizes[gutterIndex + 1];\n let newLeftSize = Math.max(leftPane.minSize(), Math.min(leftPane.maxSize(), sizes[gutterIndex] + delta));\n let newRightSize = Math.max(rightPane.minSize(), Math.min(rightPane.maxSize(), originalTotal - newLeftSize));\n // Recalculate left after right is clamped to preserve total\n newLeftSize = Math.max(leftPane.minSize(), Math.min(leftPane.maxSize(), originalTotal - newRightSize));\n\n sizes[gutterIndex] = newLeftSize;\n sizes[gutterIndex + 1] = newRightSize;\n\n this.paneSizes.set(sizes);\n leftPane._setComputedSize(newLeftSize);\n rightPane._setComputedSize(newRightSize);\n this.sizeChange.emit({ gutterIndex, sizes: [...sizes] });\n }\n\n private onMouseMove(event: MouseEvent): void {\n if (!this.isDragging()) return;\n\n const container = this.elementRef.nativeElement as HTMLElement;\n const containerRect = container.getBoundingClientRect();\n const containerSize = this.orientation() === 'horizontal' ? containerRect.width : containerRect.height;\n\n const currentPos = this.orientation() === 'horizontal' ? event.clientX : event.clientY;\n const deltaPixels = currentPos - this.dragStartPos;\n const deltaPercent = (deltaPixels / containerSize) * 100;\n\n const paneList = this.panes();\n const leftPane = paneList[this.dragGutterIndex];\n const rightPane = paneList[this.dragGutterIndex + 1];\n\n const originalTotal = this.dragStartSizes[this.dragGutterIndex] + this.dragStartSizes[this.dragGutterIndex + 1];\n\n // Apply delta and clamp left pane\n let newLeftSize = this.dragStartSizes[this.dragGutterIndex] + deltaPercent;\n newLeftSize = Math.max(leftPane.minSize(), Math.min(leftPane.maxSize(), newLeftSize));\n\n // Calculate right pane from remainder, then clamp\n let newRightSize = originalTotal - newLeftSize;\n newRightSize = Math.max(rightPane.minSize(), Math.min(rightPane.maxSize(), newRightSize));\n\n // Recalculate left from clamped right to preserve total\n newLeftSize = originalTotal - newRightSize;\n newLeftSize = Math.max(leftPane.minSize(), Math.min(leftPane.maxSize(), newLeftSize));\n\n const sizes = [...this.paneSizes()];\n sizes[this.dragGutterIndex] = newLeftSize;\n sizes[this.dragGutterIndex + 1] = newRightSize;\n\n this.paneSizes.set(sizes);\n leftPane._setComputedSize(newLeftSize);\n rightPane._setComputedSize(newRightSize);\n this.sizeChange.emit({ gutterIndex: this.dragGutterIndex, sizes: [...sizes] });\n }\n\n private onMouseUp(): void {\n if (!this.isDragging()) return;\n\n this.cleanupListeners();\n this.isDragging.set(false);\n this.dragEnd.emit(this.dragGutterIndex);\n this.dragGutterIndex = -1;\n }\n\n private cleanupListeners(): void {\n if (isPlatformBrowser(this.platformId)) {\n this.document.removeEventListener('mousemove', this.mouseMoveHandler);\n this.document.removeEventListener('mouseup', this.mouseUpHandler);\n }\n }\n\n private calculateSizes(paneList: readonly SplitPaneComponent[]): number[] {\n if (paneList.length === 0) {\n return [];\n }\n\n const sizes: number[] = [];\n let totalExplicit = 0;\n let implicitCount = 0;\n\n paneList.forEach((pane) => {\n const size = pane.size();\n if (size !== undefined) {\n totalExplicit += size;\n sizes.push(size);\n } else {\n implicitCount++;\n sizes.push(-1); // placeholder\n }\n });\n\n // Calculate remaining space for implicit panes\n const remaining = Math.max(0, 100 - totalExplicit);\n const implicitSize = implicitCount > 0 ? remaining / implicitCount : 0;\n\n // Replace placeholders\n for (let i = 0; i < sizes.length; i++) {\n if (sizes[i] === -1) {\n sizes[i] = implicitSize;\n }\n }\n\n // Normalize if total exceeds 100\n const total = sizes.reduce((a, b) => a + b, 0);\n if (total > 0 && Math.abs(total - 100) > 0.01) {\n const scale = 100 / total;\n for (let i = 0; i < sizes.length; i++) {\n sizes[i] *= scale;\n }\n }\n\n return sizes;\n }\n\n /** @internal - Get current sizes for external access */\n _getSizes(): number[] {\n return [...this.paneSizes()];\n }\n}\n","<ng-content />\n@for (gutterIndex of gutterIndices(); track gutterIndex) {\n <div\n class=\"ui-split__gutter\"\n [class]=\"gutterSizeClass()\"\n [style.order]=\"gutterIndex * 2 + 1\"\n role=\"separator\"\n tabindex=\"0\"\n [attr.aria-orientation]=\"orientation() === 'horizontal' ? 'vertical' : 'horizontal'\"\n [attr.aria-valuenow]=\"paneSizes()[gutterIndex] | number:'1.0-1'\"\n [attr.aria-valuemin]=\"panes()[gutterIndex]?.minSize()\"\n [attr.aria-valuemax]=\"panes()[gutterIndex]?.maxSize()\"\n (mousedown)=\"onGutterMouseDown($event, gutterIndex)\"\n (keydown)=\"onGutterKeyDown($event, gutterIndex)\"\n >\n <div class=\"ui-split__gutter-handle\"></div>\n </div>\n}\n","import { Component, input, output, signal, computed, inject, ChangeDetectionStrategy } from '@angular/core';\nimport type { TreeNode, TreeDropPosition } from './tree.component';\nimport { TREE_HOST } from './tree.component';\n\nfunction isDescendantOf(target: TreeNode, potentialAncestor: TreeNode): boolean {\n if (!potentialAncestor.children) return false;\n for (const child of potentialAncestor.children) {\n if (child === target || isDescendantOf(target, child)) return true;\n }\n return false;\n}\n\n@Component({\n selector: 'ui-tree-node',\n standalone: true,\n templateUrl: './tree-node.component.html',\n styleUrl: './tree-node.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class TreeNodeComponent {\n readonly node = input.required<TreeNode>();\n readonly level = input(0);\n readonly indent = input(16);\n\n readonly nodeClick = output<TreeNode>();\n readonly nodeExpand = output<TreeNode>();\n readonly nodeCollapse = output<TreeNode>();\n\n private readonly treeHost = inject(TREE_HOST);\n\n private readonly _expanded = signal<boolean | null>(null);\n\n readonly isExpanded = computed(() => {\n const manualState = this._expanded();\n if (manualState !== null) {\n return manualState;\n }\n return this.node().expanded ?? false;\n });\n\n readonly hasChildren = computed(() => {\n const children = this.node().children;\n return children && children.length > 0;\n });\n\n readonly indentGuides = computed(() => {\n const lvl = this.level();\n return lvl > 0 ? Array.from({ length: lvl }, (_, i) => i) : [];\n });\n\n readonly isDraggable = computed(() => this.treeHost.draggable());\n\n readonly isDragging = computed(() => this.treeHost._dragNode() === this.node());\n\n readonly dropPosition = computed<TreeDropPosition | null>(() => {\n if (this.treeHost._dragOverNode() === this.node()) {\n return this.treeHost._dropPosition();\n }\n return null;\n });\n\n toggle(event: MouseEvent): void {\n event.stopPropagation();\n if (!this.hasChildren()) return;\n\n const newState = !this.isExpanded();\n this._expanded.set(newState);\n\n if (newState) {\n this.nodeExpand.emit(this.node());\n } else {\n this.nodeCollapse.emit(this.node());\n }\n }\n\n onClick(event: MouseEvent): void {\n event.stopPropagation();\n this.nodeClick.emit(this.node());\n }\n\n onDoubleClick(event: MouseEvent): void {\n event.stopPropagation();\n if (this.hasChildren()) {\n this.toggle(event);\n }\n }\n\n onDragStart(event: DragEvent): void {\n if (!this.isDraggable()) return;\n this.treeHost._dragNode.set(this.node());\n event.dataTransfer!.effectAllowed = 'move';\n event.dataTransfer!.setData('text/plain', this.node().label);\n }\n\n onDragEnd(): void {\n this.treeHost._dragNode.set(null);\n this.treeHost._dragOverNode.set(null);\n this.treeHost._dropPosition.set(null);\n }\n\n onDragOver(event: DragEvent): void {\n if (!this.isDraggable()) return;\n\n const dragNode = this.treeHost._dragNode();\n if (!dragNode) return;\n\n // Prevent dropping on self or own descendants\n if (dragNode === this.node() || isDescendantOf(this.node(), dragNode)) {\n return;\n }\n\n event.preventDefault();\n event.dataTransfer!.dropEffect = 'move';\n\n const target = (event.currentTarget as HTMLElement).querySelector('.ui-tree-node__content') as HTMLElement;\n if (!target) return;\n\n const rect = target.getBoundingClientRect();\n const y = event.clientY - rect.top;\n const ratio = y / rect.height;\n\n let position: TreeDropPosition;\n if (ratio < 0.25) {\n position = 'before';\n } else if (ratio > 0.75) {\n position = 'after';\n } else {\n position = 'inside';\n }\n\n this.treeHost._dragOverNode.set(this.node());\n this.treeHost._dropPosition.set(position);\n }\n\n onDragLeave(event: DragEvent): void {\n const related = event.relatedTarget as Node | null;\n const current = event.currentTarget as HTMLElement;\n if (related && current.contains(related)) return;\n\n if (this.treeHost._dragOverNode() === this.node()) {\n this.treeHost._dragOverNode.set(null);\n this.treeHost._dropPosition.set(null);\n }\n }\n\n onDrop(event: DragEvent): void {\n event.preventDefault();\n\n const dragNode = this.treeHost._dragNode();\n const position = this.treeHost._dropPosition();\n if (!dragNode || !position) return;\n\n if (dragNode === this.node() || isDescendantOf(this.node(), dragNode)) {\n return;\n }\n\n this.treeHost._emitDrop({\n node: dragNode,\n target: this.node(),\n position,\n });\n\n this.treeHost._dragNode.set(null);\n this.treeHost._dragOverNode.set(null);\n this.treeHost._dropPosition.set(null);\n }\n\n /** @internal - forward events from child nodes */\n _onChildNodeClick(node: TreeNode): void {\n this.nodeClick.emit(node);\n }\n\n /** @internal */\n _onChildNodeExpand(node: TreeNode): void {\n this.nodeExpand.emit(node);\n }\n\n /** @internal */\n _onChildNodeCollapse(node: TreeNode): void {\n this.nodeCollapse.emit(node);\n }\n}\n","<div\n class=\"ui-tree-node\"\n [class.ui-tree-node--dragging]=\"isDragging()\"\n [attr.draggable]=\"isDraggable()\"\n (dragstart)=\"onDragStart($event)\"\n (dragend)=\"onDragEnd()\"\n (dragover)=\"onDragOver($event)\"\n (dragleave)=\"onDragLeave($event)\"\n (drop)=\"onDrop($event)\"\n>\n <div class=\"ui-tree-node__guides\">\n @for (guide of indentGuides(); track guide) {\n <span class=\"ui-tree-node__guide\" [style.width.px]=\"indent()\"></span>\n }\n </div>\n <div\n class=\"ui-tree-node__content\"\n [class.ui-tree-node__content--selected]=\"false\"\n [class.ui-tree-node__content--drop-before]=\"dropPosition() === 'before'\"\n [class.ui-tree-node__content--drop-after]=\"dropPosition() === 'after'\"\n [class.ui-tree-node__content--drop-inside]=\"dropPosition() === 'inside'\"\n [style.padding-left.px]=\"level() * indent() + 8\"\n (click)=\"onClick($event)\"\n (dblclick)=\"onDoubleClick($event)\"\n >\n @if (hasChildren()) {\n <button\n type=\"button\"\n class=\"ui-tree-node__toggle\"\n [class.ui-tree-node__toggle--expanded]=\"isExpanded()\"\n (click)=\"toggle($event)\"\n [attr.aria-expanded]=\"isExpanded()\"\n [attr.aria-label]=\"isExpanded() ? 'Collapse' : 'Expand'\"\n >\n <svg\n class=\"ui-tree-node__chevron\"\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 16 16\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M6 4L10 8L6 12\"\n stroke=\"currentColor\"\n stroke-width=\"1.5\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n </svg>\n </button>\n }\n @if (node().icon) {\n <span class=\"ui-tree-node__icon\">{{ node().icon }}</span>\n }\n <span class=\"ui-tree-node__label\">{{ node().label }}</span>\n </div>\n</div>\n@if (isExpanded() && hasChildren()) {\n @for (child of node().children; track child) {\n <ui-tree-node\n [node]=\"child\"\n [level]=\"level() + 1\"\n [indent]=\"indent()\"\n (nodeClick)=\"_onChildNodeClick($event)\"\n (nodeExpand)=\"_onChildNodeExpand($event)\"\n (nodeCollapse)=\"_onChildNodeCollapse($event)\"\n />\n }\n}\n","import { Component, input, output, signal, InjectionToken, ChangeDetectionStrategy } from '@angular/core';\nimport { TreeNodeComponent } from './tree-node.component';\n\nexport interface TreeNode {\n label: string;\n icon?: string;\n expanded?: boolean;\n children?: TreeNode[];\n data?: unknown;\n}\n\nexport type TreeDropPosition = 'before' | 'after' | 'inside';\n\nexport interface TreeNodeDropEvent {\n node: TreeNode;\n target: TreeNode;\n position: TreeDropPosition;\n}\n\nexport const TREE_HOST = new InjectionToken<TreeComponent>('TREE_HOST');\n\n@Component({\n selector: 'ui-tree',\n standalone: true,\n imports: [TreeNodeComponent],\n templateUrl: './tree.component.html',\n styleUrl: './tree.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [{ provide: TREE_HOST, useExisting: TreeComponent }],\n})\nexport class TreeComponent {\n readonly nodes = input<TreeNode[]>([]);\n readonly indent = input(16);\n readonly draggable = input(false);\n\n readonly nodeClick = output<TreeNode>();\n readonly nodeExpand = output<TreeNode>();\n readonly nodeCollapse = output<TreeNode>();\n readonly nodeDrop = output<TreeNodeDropEvent>();\n\n /** @internal */\n readonly _dragNode = signal<TreeNode | null>(null);\n /** @internal */\n readonly _dragOverNode = signal<TreeNode | null>(null);\n /** @internal */\n readonly _dropPosition = signal<TreeDropPosition | null>(null);\n\n /** @internal */\n _onNodeClick(node: TreeNode): void {\n this.nodeClick.emit(node);\n }\n\n /** @internal */\n _onNodeExpand(node: TreeNode): void {\n this.nodeExpand.emit(node);\n }\n\n /** @internal */\n _onNodeCollapse(node: TreeNode): void {\n this.nodeCollapse.emit(node);\n }\n\n /** @internal */\n _emitDrop(event: TreeNodeDropEvent): void {\n this.nodeDrop.emit(event);\n }\n}\n","<div class=\"ui-tree\">\n @for (node of nodes(); track node) {\n <ui-tree-node\n [node]=\"node\"\n [level]=\"0\"\n [indent]=\"indent()\"\n (nodeClick)=\"_onNodeClick($event)\"\n (nodeExpand)=\"_onNodeExpand($event)\"\n (nodeCollapse)=\"_onNodeCollapse($event)\"\n />\n }\n</div>\n","import {\n Component,\n Directive,\n ChangeDetectionStrategy,\n computed,\n contentChild,\n contentChildren,\n inject,\n input,\n model,\n output,\n PLATFORM_ID,\n signal,\n viewChild,\n ElementRef,\n Renderer2,\n OnDestroy,\n AfterViewInit,\n TemplateRef,\n ViewChild,\n} from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { DOCUMENT, isPlatformBrowser, NgTemplateOutlet } from '@angular/common';\n\nexport interface TemplateVariable {\n key: string;\n value: string;\n}\n\nexport type VariableState = 'resolved' | 'unset' | 'unknown';\n\n/** Context provided to variable popover templates */\nexport interface VariablePopoverContext {\n /** The variable key (same as `key`) */\n $implicit: string;\n /** The variable key */\n key: string;\n /** Current value from the variables array, or empty string if unknown */\n value: string;\n /** State of the variable: 'resolved', 'unset', or 'unknown' */\n state: VariableState;\n /** Close the popover */\n close: () => void;\n}\n\n/** Directive to mark a custom variable popover template */\n@Directive({\n selector: 'ng-template[uiVariablePopover]',\n standalone: true,\n})\nexport class VariablePopoverDirective {}\n\n/** Directive to mark suffix content (buttons, icons, etc.) */\n@Directive({\n selector: '[uiTemplateInputSuffix]',\n standalone: true,\n})\nexport class TemplateInputSuffixDirective {}\n\n@Component({\n selector: 'ui-template-input',\n standalone: true,\n imports: [FormsModule, NgTemplateOutlet],\n templateUrl: './template-input.component.html',\n styleUrl: './template-input.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class TemplateInputComponent implements OnDestroy, AfterViewInit {\n readonly label = input<string>('');\n readonly placeholder = input<string>('');\n readonly hint = input<string>('');\n readonly error = input<string>('');\n readonly disabled = input(false);\n readonly readonly = input(false);\n readonly required = input(false);\n readonly id = input<string>('');\n\n /** The template string value. Two-way bindable. */\n readonly value = model.required<string>();\n\n /**\n * Known variables with their values. Two-way bindable.\n *\n * The component detects `{{key}}` patterns in the value and resolves state:\n * - Key found with a truthy value → 'resolved' (green)\n * - Key found with empty/falsy value → 'unset' (amber)\n * - Key NOT found in array → 'unknown' (red)\n */\n readonly variables = model.required<TemplateVariable[]>();\n\n /** Emits the variable key on hover, or null when hover ends. */\n readonly variableHover = output<string | null>();\n\n /** Custom popover template for variables. Receives VariablePopoverContext. */\n readonly popoverTemplate = contentChild(VariablePopoverDirective, { read: TemplateRef });\n\n /** Detect if suffix content is projected */\n readonly hasSuffix = contentChildren(TemplateInputSuffixDirective);\n\n protected readonly suffixRef = viewChild<ElementRef<HTMLDivElement>>('suffixEl');\n\n /** Computed padding-right based on suffix width */\n protected readonly suffixPadding = signal(0);\n\n private resizeObserver: ResizeObserver | null = null;\n private mutationObserver: MutationObserver | null = null;\n\n private static nextId = 0;\n private readonly generatedId = `ui-template-input-${++TemplateInputComponent.nextId}`;\n\n protected readonly inputId = computed(() => this.id() || this.generatedId);\n\n protected readonly mirrorRef = viewChild<ElementRef<HTMLDivElement>>('mirror');\n protected readonly inputRef = viewChild<ElementRef<HTMLInputElement>>('inputEl');\n @ViewChild('popoverRef', { static: true }) popoverRef!: ElementRef<HTMLElement>;\n\n private readonly hostRef = inject(ElementRef);\n private readonly document = inject(DOCUMENT);\n private readonly platformId = inject(PLATFORM_ID);\n private positionCleanup: (() => void) | null = null;\n private currentSpanRect: DOMRect | null = null;\n private isPortaled = false;\n\n // Popover state\n protected readonly popoverVisible = signal(false);\n protected readonly openAbove = signal(true);\n protected readonly popoverText = signal('');\n protected readonly popoverVarKey = signal('');\n\n protected readonly popoverContext = computed<VariablePopoverContext>(() => {\n const key = this.popoverVarKey();\n const vars = this.variables();\n const entry = vars.find(v => v.key === key);\n return {\n $implicit: key,\n key,\n value: entry?.value ?? '',\n state: this.resolveVarState(key, vars),\n close: () => this.closePopover(),\n };\n });\n\n private hoveredVar: string | null = null;\n private hideTimer: ReturnType<typeof setTimeout> | null = null;\n\n constructor(private readonly renderer: Renderer2) {\n this.injectStyles();\n }\n\n ngAfterViewInit(): void {\n this.setupSuffixObservers();\n }\n\n private setupSuffixObservers(): void {\n const suffixEl = this.suffixRef()?.nativeElement;\n if (!suffixEl) return;\n\n // Initial measurement - wait for layout to complete\n requestAnimationFrame(() => {\n this.updateSuffixPadding(suffixEl);\n });\n\n // Watch for size changes\n this.resizeObserver = new ResizeObserver(() => {\n this.updateSuffixPadding(suffixEl);\n });\n this.resizeObserver.observe(suffixEl);\n\n // Watch for content projection changes (children being added/removed)\n this.mutationObserver = new MutationObserver(() => {\n // Need RAF here too since DOM change doesn't mean layout is done\n requestAnimationFrame(() => {\n this.updateSuffixPadding(suffixEl);\n });\n });\n this.mutationObserver.observe(suffixEl, { childList: true, subtree: true });\n }\n\n private updateSuffixPadding(el: HTMLElement): void {\n // Only count width if there are actual children (not just whitespace/comments)\n const hasContent = el.children.length > 0;\n if (hasContent) {\n const width = el.offsetWidth;\n // Add small gap between content and suffix\n this.suffixPadding.set(width + 8);\n } else {\n this.suffixPadding.set(0);\n }\n }\n\n protected readonly highlightedHtml = computed(() => {\n const text = this.value();\n if (!text) return '\\u200b';\n\n const vars = this.variables();\n const escaped = this.escapeHtml(text);\n\n // Use CSS classes instead of data-* attributes since Angular's\n // innerHTML sanitizer strips data attributes.\n return (\n escaped.replace(/\\{\\{([^}]+)\\}\\}/g, (_match, varKey: string) => {\n const state = this.resolveVarState(varKey, vars);\n return `<span class=\"ui-tmpl__var ui-tmpl__var--${state}\">{{${this.escapeHtml(varKey)}}}</span>`;\n }) + '\\u200b'\n );\n });\n\n protected syncScroll(): void {\n const inputEl = this.inputRef()?.nativeElement;\n const mirrorEl = this.mirrorRef()?.nativeElement;\n if (inputEl && mirrorEl) {\n mirrorEl.scrollLeft = inputEl.scrollLeft;\n }\n }\n\n protected onInput(): void {\n this.syncScroll();\n }\n\n protected onKeyDown(): void {\n requestAnimationFrame(() => this.syncScroll());\n }\n\n protected onMouseMove(event: MouseEvent): void {\n const mirrorEl = this.mirrorRef()?.nativeElement;\n if (!mirrorEl) {\n this.scheduleHide();\n return;\n }\n\n const spans = mirrorEl.querySelectorAll('.ui-tmpl__var') as NodeListOf<HTMLElement>;\n const { clientX, clientY } = event;\n\n for (const span of spans) {\n const rect = span.getBoundingClientRect();\n if (\n clientX >= rect.left &&\n clientX <= rect.right &&\n clientY >= rect.top &&\n clientY <= rect.bottom\n ) {\n // Extract variable key from text content: \"{{varKey}}\" → \"varKey\"\n const varKey = (span.textContent || '').replace(/^\\{\\{|\\}\\}$/g, '');\n this.cancelHide();\n this.showPopover(varKey, rect);\n return;\n }\n }\n\n this.scheduleHide();\n }\n\n protected onContainerMouseLeave(): void {\n this.scheduleHide();\n }\n\n protected onPopoverMouseEnter(): void {\n this.cancelHide();\n }\n\n protected onPopoverMouseLeave(): void {\n this.scheduleHide();\n }\n\n private resolveVarState(varKey: string, vars: TemplateVariable[]): VariableState {\n const entry = vars.find(v => v.key === varKey);\n if (!entry) return 'unknown';\n return entry.value ? 'resolved' : 'unset';\n }\n\n private showPopover(varKey: string, spanRect: DOMRect): void {\n if (this.hoveredVar !== varKey) {\n this.hoveredVar = varKey;\n this.variableHover.emit(varKey);\n }\n\n const vars = this.variables();\n const entry = vars.find(v => v.key === varKey);\n this.popoverVarKey.set(varKey);\n this.popoverText.set(entry ? (entry.value || varKey) : varKey);\n this.currentSpanRect = spanRect;\n this.popoverVisible.set(true);\n\n if (!this.isPortaled) {\n this.portalPopover();\n } else {\n this.updatePopoverPosition();\n }\n }\n\n private closePopover(): void {\n this.cancelHide();\n this.popoverVisible.set(false);\n this.unportalPopover();\n if (this.hoveredVar !== null) {\n this.hoveredVar = null;\n this.variableHover.emit(null);\n }\n }\n\n private scheduleHide(): void {\n if (this.hideTimer) return;\n this.hideTimer = setTimeout(() => {\n this.hideTimer = null;\n this.closePopover();\n }, 200);\n }\n\n private cancelHide(): void {\n if (this.hideTimer) {\n clearTimeout(this.hideTimer);\n this.hideTimer = null;\n }\n }\n\n private escapeHtml(text: string): string {\n return text\n .replace(/&/g, '&')\n .replace(/</g, '<')\n .replace(/>/g, '>')\n .replace(/\"/g, '"');\n }\n\n private static readonly STYLE_CONTENT = `\n .ui-tmpl__var {\n border-radius: 0.125rem;\n }\n .ui-tmpl__var--resolved {\n color: var(--ui-tmpl-resolved-color, var(--ui-success));\n background: var(--ui-tmpl-resolved-bg, color-mix(in srgb, var(--ui-success) 12%, transparent));\n }\n .ui-tmpl__var--unset {\n color: var(--ui-tmpl-unset-color, var(--ui-warning));\n background: var(--ui-tmpl-unset-bg, color-mix(in srgb, var(--ui-warning) 12%, transparent));\n }\n .ui-tmpl__var--unknown {\n color: var(--ui-tmpl-unknown-color, var(--ui-danger));\n background: var(--ui-tmpl-unknown-bg, color-mix(in srgb, var(--ui-danger) 12%, transparent));\n }\n `;\n\n private injectStyles(): void {\n const styleId = 'ui-tmpl-styles';\n if (!isPlatformBrowser(this.platformId)) return;\n\n let existing = this.document.getElementById(styleId);\n\n // Always replace to handle HMR / version upgrades\n if (existing) {\n existing.textContent = TemplateInputComponent.STYLE_CONTENT;\n return;\n }\n\n const style = this.renderer.createElement('style');\n this.renderer.setProperty(style, 'id', styleId);\n this.renderer.setProperty(style, 'textContent', TemplateInputComponent.STYLE_CONTENT);\n this.renderer.appendChild(this.document.head, style);\n }\n\n private portalPopover(): void {\n const el = this.popoverRef.nativeElement;\n this.document.body.appendChild(el);\n el.style.display = 'block';\n this.isPortaled = true;\n requestAnimationFrame(() => this.updatePopoverPosition());\n this.addPositionListeners();\n }\n\n private unportalPopover(): void {\n if (!this.isPortaled) return;\n const el = this.popoverRef.nativeElement;\n el.style.display = '';\n el.style.position = '';\n el.style.top = '';\n el.style.bottom = '';\n el.style.left = '';\n el.style.zIndex = '';\n this.hostRef.nativeElement.appendChild(el);\n this.isPortaled = false;\n this.currentSpanRect = null;\n this.removePositionListeners();\n }\n\n private updatePopoverPosition(): void {\n const el = this.popoverRef.nativeElement;\n const spanRect = this.getCurrentSpanRect() ?? this.currentSpanRect;\n if (!spanRect) return;\n\n this.currentSpanRect = spanRect;\n\n const gap = 6;\n const edgePadding = 8;\n const spaceAbove = spanRect.top;\n const spaceBelow = window.innerHeight - spanRect.bottom;\n const popoverHeight = el.offsetHeight;\n\n const above = spaceAbove >= popoverHeight + gap || spaceAbove >= spaceBelow;\n this.openAbove.set(above);\n\n el.style.position = 'fixed';\n el.style.zIndex = '10000';\n\n if (above) {\n el.style.top = '';\n el.style.bottom = `${window.innerHeight - spanRect.top + gap}px`;\n } else {\n el.style.top = `${spanRect.bottom + gap}px`;\n el.style.bottom = '';\n }\n\n // Horizontal: center on span, clamp to viewport\n const centerX = spanRect.left + spanRect.width / 2;\n const popoverWidth = el.offsetWidth;\n let left = centerX - popoverWidth / 2;\n left = Math.max(edgePadding, Math.min(left, window.innerWidth - popoverWidth - edgePadding));\n el.style.left = `${left}px`;\n }\n\n private getCurrentSpanRect(): DOMRect | null {\n const mirrorEl = this.mirrorRef()?.nativeElement;\n if (!mirrorEl) return null;\n\n const varKey = this.popoverVarKey();\n if (!varKey) return null;\n\n const spans = mirrorEl.querySelectorAll('.ui-tmpl__var') as NodeListOf<HTMLElement>;\n for (const span of spans) {\n const text = (span.textContent || '').replace(/^\\{\\{|\\}\\}$/g, '');\n if (text === varKey) {\n return span.getBoundingClientRect();\n }\n }\n return null;\n }\n\n private readonly onPositionUpdate = (): void => {\n if (this.isPortaled && this.popoverVisible()) {\n this.updatePopoverPosition();\n }\n };\n\n private addPositionListeners(): void {\n window.addEventListener('scroll', this.onPositionUpdate, true);\n window.addEventListener('resize', this.onPositionUpdate);\n this.positionCleanup = () => {\n window.removeEventListener('scroll', this.onPositionUpdate, true);\n window.removeEventListener('resize', this.onPositionUpdate);\n };\n }\n\n private removePositionListeners(): void {\n if (this.positionCleanup) {\n this.positionCleanup();\n this.positionCleanup = null;\n }\n }\n\n ngOnDestroy(): void {\n this.cancelHide();\n // Remove from body if still portaled\n if (this.isPortaled) {\n const el = this.popoverRef.nativeElement;\n el.remove();\n this.removePositionListeners();\n this.isPortaled = false;\n }\n // Clean up observers\n if (this.resizeObserver) {\n this.resizeObserver.disconnect();\n this.resizeObserver = null;\n }\n if (this.mutationObserver) {\n this.mutationObserver.disconnect();\n this.mutationObserver = null;\n }\n }\n}\n","<div\n class=\"ui-template-input-wrapper\"\n [class.ui-template-input-wrapper--error]=\"error()\"\n [class.ui-template-input-wrapper--disabled]=\"disabled()\"\n>\n @if (label()) {\n <label class=\"ui-template-input__label\" [attr.for]=\"inputId()\">\n {{ label() }}\n @if (required()) {\n <span class=\"ui-template-input__required\">*</span>\n }\n </label>\n }\n <div\n class=\"ui-template-input__container\"\n [style.--ui-tmpl-suffix-width]=\"suffixPadding() + 'px'\"\n (mousemove)=\"onMouseMove($event)\"\n (mouseleave)=\"onContainerMouseLeave()\"\n >\n <div\n class=\"ui-template-input__mirror\"\n #mirror\n [innerHTML]=\"highlightedHtml()\"\n ></div>\n <input\n class=\"ui-template-input__input\"\n #inputEl\n [id]=\"inputId()\"\n type=\"text\"\n [placeholder]=\"placeholder()\"\n [disabled]=\"disabled()\"\n [readonly]=\"readonly()\"\n [required]=\"required()\"\n [(ngModel)]=\"value\"\n (input)=\"onInput()\"\n (scroll)=\"syncScroll()\"\n (click)=\"syncScroll()\"\n (keydown)=\"onKeyDown()\"\n />\n <div class=\"ui-template-input__suffix\" #suffixEl>\n <ng-content select=\"[uiTemplateInputSuffix]\" />\n </div>\n </div>\n @if (error()) {\n <span class=\"ui-template-input__error\">{{ error() }}</span>\n }\n @if (hint() && !error()) {\n <span class=\"ui-template-input__hint\">{{ hint() }}</span>\n }\n</div>\n\n<div\n #popoverRef\n class=\"ui-tmpl-popover\"\n [class.ui-tmpl-popover--open]=\"popoverVisible()\"\n [class.ui-tmpl-popover--above]=\"openAbove()\"\n [class.ui-tmpl-popover--below]=\"!openAbove()\"\n (mouseenter)=\"onPopoverMouseEnter()\"\n (mouseleave)=\"onPopoverMouseLeave()\"\n>\n @if (popoverVisible()) {\n @if (popoverTemplate()) {\n <ng-container\n [ngTemplateOutlet]=\"popoverTemplate()!\"\n [ngTemplateOutletContext]=\"popoverContext()\"\n />\n } @else {\n <span class=\"ui-tmpl-popover__text\">{{ popoverText() }}</span>\n }\n }\n</div>\n","/*\n * Public API Surface of @m1z23r/ngx-ui\n */\n\n// Validators\nexport { Validators } from './lib/validators/validators';\nexport type { ValidationError, ValidatorFn } from './lib/validators/validators';\n\n// Services\nexport { SidebarService } from './lib/services/sidebar.service';\nexport { LoadingService } from './lib/loading/loading.service';\nexport { DialogService } from './lib/dialog/dialog.service';\nexport { ToastService } from './lib/toast/toast.service';\nexport { TabsService } from './lib/components/tabs/tabs.service';\n\n// Toast\nexport { ToastRef } from './lib/toast/toast-ref';\nexport type { ToastConfig, ToastVariant, ToastPosition } from './lib/toast/toast.config';\n\n// Dialog\nexport { DialogRef } from './lib/dialog/dialog-ref';\nexport { ModalComponent } from './lib/components/modal/modal.component';\nexport { DIALOG_DATA, DIALOG_REF } from './lib/dialog/dialog.config';\nexport type { DialogConfig, ModalSize } from './lib/dialog/dialog.config';\n\n// Loading\nexport { LoadingDirective } from './lib/loading/loading.directive';\nexport type { Loadable } from './lib/loading/loadable';\nexport { LOADABLE } from './lib/loading/loadable';\n\n// Components\nexport { ButtonComponent } from './lib/components/button/button.component';\nexport type { ButtonVariant, ButtonColor, ButtonSize } from './lib/components/button/button.component';\n\nexport { InputComponent } from './lib/components/input/input.component';\nexport type { InputType, ValidationState } from './lib/components/input/input.component';\n\nexport { TableComponent, CellTemplateDirective } from './lib/components/table/table.component';\nexport type { TableColumn, SortDirection, SortState } from './lib/components/table/table.component';\nexport { CellValuePipe } from './lib/components/table/cell-value.pipe';\n\nexport { SelectComponent } from './lib/components/select/select.component';\nexport type { SelectVariant, SelectSize, AsyncSelectOption, AsyncSearchFn } from './lib/components/select/select.component';\nexport { OptionComponent } from './lib/components/select/option.component';\nexport { OptionTemplateDirective } from './lib/components/select/option-template.directive';\nexport type { OptionTemplateContext } from './lib/components/select/option-template.directive';\n\nexport { DropdownComponent } from './lib/components/dropdown/dropdown.component';\nexport type { DropdownPosition, DropdownAlign } from './lib/components/dropdown/dropdown.component';\nexport { DropdownItemComponent } from './lib/components/dropdown/dropdown-item.component';\nexport { DropdownDividerComponent } from './lib/components/dropdown/dropdown-divider.component';\nexport { DropdownTriggerDirective } from './lib/components/dropdown/dropdown-trigger.directive';\nexport { ContextMenuDirective } from './lib/components/dropdown/context-menu.directive';\n\nexport { CheckboxComponent } from './lib/components/checkbox/checkbox.component';\nexport type { CheckboxSize } from './lib/components/checkbox/checkbox.component';\n\nexport { SwitchComponent } from './lib/components/switch/switch.component';\nexport type { SwitchSize } from './lib/components/switch/switch.component';\n\nexport { BadgeComponent } from './lib/components/badge/badge.component';\nexport type { BadgeVariant, BadgeSize } from './lib/components/badge/badge.component';\n\nexport { TextareaComponent } from './lib/components/textarea/textarea.component';\nexport type { TextareaResize } from './lib/components/textarea/textarea.component';\n\nexport { ProgressComponent } from './lib/components/progress/progress.component';\nexport type { ProgressVariant, ProgressSize } from './lib/components/progress/progress.component';\n\nexport { CircularProgressComponent } from './lib/components/progress/circular-progress.component';\nexport type { CircularProgressVariant, CircularProgressSize } from './lib/components/progress/circular-progress.component';\n\nexport { SpinnerComponent } from './lib/components/spinner/spinner.component';\nexport type { SpinnerSize, SpinnerVariant } from './lib/components/spinner/spinner.component';\n\nexport { AlertComponent } from './lib/components/alert/alert.component';\nexport type { AlertVariant } from './lib/components/alert/alert.component';\n\nexport { CardComponent } from './lib/components/card/card.component';\nexport type { CardVariant, CardPadding } from './lib/components/card/card.component';\n\nexport { TooltipDirective } from './lib/components/tooltip/tooltip.directive';\nexport type { TooltipPosition } from './lib/components/tooltip/tooltip.directive';\n\nexport { RadioGroupComponent } from './lib/components/radio/radio-group.component';\nexport type { RadioGroupOrientation, RadioGroupSize, RadioGroupVariant } from './lib/components/radio/radio-group.component';\nexport { RadioComponent } from './lib/components/radio/radio.component';\n\nexport { TabsComponent } from './lib/components/tabs/tabs.component';\nexport type { TabsVariant, TabsSize } from './lib/components/tabs/tabs.component';\nexport { TabComponent } from './lib/components/tabs/tab.component';\nexport { TabIconDirective } from './lib/components/tabs/tab-icon.directive';\nexport { TabActivePipe } from './lib/components/tabs/tab-active.pipe';\nexport { DynamicTabsComponent } from './lib/components/tabs/dynamic-tabs.component';\nexport type { DynamicTabsVariant, DynamicTabsSize } from './lib/components/tabs/dynamic-tabs.component';\nexport { TabRef } from './lib/components/tabs/tab-ref';\nexport { TAB_DATA, TAB_REF } from './lib/components/tabs/tab.config';\nexport type { DynamicTabConfig, TabRenderMode } from './lib/components/tabs/tab.config';\n\nexport { AccordionComponent } from './lib/components/accordion/accordion.component';\nexport type { AccordionVariant } from './lib/components/accordion/accordion.component';\nexport { AccordionItemComponent } from './lib/components/accordion/accordion-item.component';\nexport { AccordionHeaderDirective } from './lib/components/accordion/accordion-header.directive';\n\nexport { PaginationComponent } from './lib/components/pagination/pagination.component';\nexport type { PaginationSize } from './lib/components/pagination/pagination.component';\n\nexport { FileChooserComponent } from './lib/components/file-chooser/file-chooser.component';\nexport type { FileChooserVariant, FileChooserSize } from './lib/components/file-chooser/file-chooser.component';\nexport { FileSizePipe } from './lib/components/file-chooser/file-size.pipe';\nexport { FilePreviewPipe } from './lib/components/file-chooser/file-preview.pipe';\n\nexport { SliderComponent } from './lib/components/slider/slider.component';\nexport type { SliderSize } from './lib/components/slider/slider.component';\n\nexport { ChipInputComponent, ChipTemplateDirective } from './lib/components/chip-input/chip-input.component';\nexport type { ChipInputVariant, ChipInputSize, ChipTemplateContext } from './lib/components/chip-input/chip-input.component';\n\nexport { DatepickerComponent } from './lib/components/datepicker/datepicker.component';\nexport type { DatepickerView, DatepickerSize, DatepickerVariant, DateRange } from './lib/components/datepicker/datepicker.component';\n\nexport { TimepickerComponent } from './lib/components/timepicker/timepicker.component';\nexport type { TimepickerSize, TimepickerVariant, TimeFormat, TimeValue } from './lib/components/timepicker/timepicker.component';\n\nexport { DatetimepickerComponent } from './lib/components/datetimepicker/datetimepicker.component';\nexport type { DatetimepickerSize, DatetimepickerVariant, DatetimepickerView } from './lib/components/datetimepicker/datetimepicker.component';\n\n// Layout Components\nexport { ShellComponent } from './lib/components/layout/shell/shell.component';\nexport type { ShellVariant } from './lib/components/layout/shell/shell.component';\nexport { NavbarComponent } from './lib/components/layout/navbar/navbar.component';\nexport { SidebarComponent } from './lib/components/layout/sidebar/sidebar.component';\nexport { ContentComponent } from './lib/components/layout/content/content.component';\nexport { FooterComponent } from './lib/components/layout/footer/footer.component';\nexport { SidebarToggleComponent } from './lib/components/layout/sidebar-toggle/sidebar-toggle.component';\n\n// Split Pane\nexport { SplitComponent } from './lib/components/split-pane/split.component';\nexport type { SplitOrientation, SplitGutterSize, SplitSizeChange } from './lib/components/split-pane/split.component';\nexport { SplitPaneComponent } from './lib/components/split-pane/split-pane.component';\n\n// Tree\nexport { TreeComponent, TREE_HOST } from './lib/components/tree/tree.component';\nexport type { TreeNode, TreeDropPosition, TreeNodeDropEvent } from './lib/components/tree/tree.component';\nexport { TreeNodeComponent } from './lib/components/tree/tree-node.component';\n\n// Template Input\nexport { TemplateInputComponent, VariablePopoverDirective, TemplateInputSuffixDirective } from './lib/components/template-input/template-input.component';\nexport type { TemplateVariable, VariablePopoverContext, VariableState } from './lib/components/template-input/template-input.component';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"m1z23r-ngx-ui.mjs","sources":["../../../projects/ngx-ui/src/lib/validators/validators.ts","../../../projects/ngx-ui/src/lib/services/sidebar.service.ts","../../../projects/ngx-ui/src/lib/loading/loading.service.ts","../../../projects/ngx-ui/src/lib/dialog/dialog-ref.ts","../../../projects/ngx-ui/src/lib/dialog/dialog.config.ts","../../../projects/ngx-ui/src/lib/dialog/dialog.service.ts","../../../projects/ngx-ui/src/lib/toast/toast.component.ts","../../../projects/ngx-ui/src/lib/toast/toast.component.html","../../../projects/ngx-ui/src/lib/toast/toast-container.component.ts","../../../projects/ngx-ui/src/lib/toast/toast-container.component.html","../../../projects/ngx-ui/src/lib/toast/toast-ref.ts","../../../projects/ngx-ui/src/lib/toast/toast.config.ts","../../../projects/ngx-ui/src/lib/toast/toast.service.ts","../../../projects/ngx-ui/src/lib/components/tabs/tab-ref.ts","../../../projects/ngx-ui/src/lib/components/tabs/tab.config.ts","../../../projects/ngx-ui/src/lib/components/tabs/tabs.service.ts","../../../projects/ngx-ui/src/lib/components/modal/modal.component.ts","../../../projects/ngx-ui/src/lib/components/modal/modal.component.html","../../../projects/ngx-ui/src/lib/loading/loadable.ts","../../../projects/ngx-ui/src/lib/loading/loading.directive.ts","../../../projects/ngx-ui/src/lib/components/button/button.component.ts","../../../projects/ngx-ui/src/lib/components/button/button.component.html","../../../projects/ngx-ui/src/lib/components/input/input.component.ts","../../../projects/ngx-ui/src/lib/components/input/input.component.html","../../../projects/ngx-ui/src/lib/components/table/cell-value.pipe.ts","../../../projects/ngx-ui/src/lib/components/table/table.component.ts","../../../projects/ngx-ui/src/lib/components/table/table.component.html","../../../projects/ngx-ui/src/lib/components/select/option.component.ts","../../../projects/ngx-ui/src/lib/components/select/option.component.html","../../../projects/ngx-ui/src/lib/components/select/option-template.directive.ts","../../../projects/ngx-ui/src/lib/components/select/select.component.ts","../../../projects/ngx-ui/src/lib/components/select/select.component.html","../../../projects/ngx-ui/src/lib/components/dropdown/dropdown-trigger.directive.ts","../../../projects/ngx-ui/src/lib/components/dropdown/dropdown-item.component.ts","../../../projects/ngx-ui/src/lib/components/dropdown/dropdown-item.component.html","../../../projects/ngx-ui/src/lib/components/dropdown/dropdown.component.ts","../../../projects/ngx-ui/src/lib/components/dropdown/dropdown.component.html","../../../projects/ngx-ui/src/lib/components/dropdown/dropdown-divider.component.ts","../../../projects/ngx-ui/src/lib/components/dropdown/dropdown-divider.component.html","../../../projects/ngx-ui/src/lib/components/dropdown/context-menu.directive.ts","../../../projects/ngx-ui/src/lib/components/checkbox/checkbox.component.ts","../../../projects/ngx-ui/src/lib/components/checkbox/checkbox.component.html","../../../projects/ngx-ui/src/lib/components/switch/switch.component.ts","../../../projects/ngx-ui/src/lib/components/switch/switch.component.html","../../../projects/ngx-ui/src/lib/components/badge/badge.component.ts","../../../projects/ngx-ui/src/lib/components/badge/badge.component.html","../../../projects/ngx-ui/src/lib/components/textarea/textarea.component.ts","../../../projects/ngx-ui/src/lib/components/textarea/textarea.component.html","../../../projects/ngx-ui/src/lib/components/progress/progress.component.ts","../../../projects/ngx-ui/src/lib/components/progress/progress.component.html","../../../projects/ngx-ui/src/lib/components/progress/circular-progress.component.ts","../../../projects/ngx-ui/src/lib/components/progress/circular-progress.component.html","../../../projects/ngx-ui/src/lib/components/spinner/spinner.component.ts","../../../projects/ngx-ui/src/lib/components/spinner/spinner.component.html","../../../projects/ngx-ui/src/lib/components/alert/alert.component.ts","../../../projects/ngx-ui/src/lib/components/alert/alert.component.html","../../../projects/ngx-ui/src/lib/components/card/card.component.ts","../../../projects/ngx-ui/src/lib/components/card/card.component.html","../../../projects/ngx-ui/src/lib/components/tooltip/tooltip.directive.ts","../../../projects/ngx-ui/src/lib/components/radio/radio.component.ts","../../../projects/ngx-ui/src/lib/components/radio/radio.component.html","../../../projects/ngx-ui/src/lib/components/radio/radio-group.component.ts","../../../projects/ngx-ui/src/lib/components/radio/radio-group.component.html","../../../projects/ngx-ui/src/lib/components/tabs/tab-icon.directive.ts","../../../projects/ngx-ui/src/lib/components/tabs/tab.component.ts","../../../projects/ngx-ui/src/lib/components/tabs/tab.component.html","../../../projects/ngx-ui/src/lib/components/tabs/tab-active.pipe.ts","../../../projects/ngx-ui/src/lib/components/tabs/tabs.component.ts","../../../projects/ngx-ui/src/lib/components/tabs/tabs.component.html","../../../projects/ngx-ui/src/lib/components/tabs/dynamic-tabs.component.ts","../../../projects/ngx-ui/src/lib/components/accordion/accordion-header.directive.ts","../../../projects/ngx-ui/src/lib/components/accordion/accordion-item.component.ts","../../../projects/ngx-ui/src/lib/components/accordion/accordion-item.component.html","../../../projects/ngx-ui/src/lib/components/accordion/accordion.component.ts","../../../projects/ngx-ui/src/lib/components/accordion/accordion.component.html","../../../projects/ngx-ui/src/lib/components/pagination/pagination.component.ts","../../../projects/ngx-ui/src/lib/components/pagination/pagination.component.html","../../../projects/ngx-ui/src/lib/components/file-chooser/file-size.pipe.ts","../../../projects/ngx-ui/src/lib/components/file-chooser/file-preview.pipe.ts","../../../projects/ngx-ui/src/lib/components/file-chooser/file-chooser.component.ts","../../../projects/ngx-ui/src/lib/components/file-chooser/file-chooser.component.html","../../../projects/ngx-ui/src/lib/components/slider/slider.component.ts","../../../projects/ngx-ui/src/lib/components/slider/slider.component.html","../../../projects/ngx-ui/src/lib/components/chip-input/chip-input.component.ts","../../../projects/ngx-ui/src/lib/components/chip-input/chip-input.component.html","../../../projects/ngx-ui/src/lib/components/datepicker/datepicker.component.ts","../../../projects/ngx-ui/src/lib/components/datepicker/datepicker.component.html","../../../projects/ngx-ui/src/lib/components/timepicker/timepicker.component.ts","../../../projects/ngx-ui/src/lib/components/timepicker/timepicker.component.html","../../../projects/ngx-ui/src/lib/components/datetimepicker/datetimepicker.component.ts","../../../projects/ngx-ui/src/lib/components/datetimepicker/datetimepicker.component.html","../../../projects/ngx-ui/src/lib/components/layout/shell/shell.component.ts","../../../projects/ngx-ui/src/lib/components/layout/shell/shell.component.html","../../../projects/ngx-ui/src/lib/components/layout/navbar/navbar.component.ts","../../../projects/ngx-ui/src/lib/components/layout/navbar/navbar.component.html","../../../projects/ngx-ui/src/lib/components/layout/sidebar/sidebar.component.ts","../../../projects/ngx-ui/src/lib/components/layout/sidebar/sidebar.component.html","../../../projects/ngx-ui/src/lib/components/layout/content/content.component.ts","../../../projects/ngx-ui/src/lib/components/layout/content/content.component.html","../../../projects/ngx-ui/src/lib/components/layout/footer/footer.component.ts","../../../projects/ngx-ui/src/lib/components/layout/footer/footer.component.html","../../../projects/ngx-ui/src/lib/components/layout/sidebar-toggle/sidebar-toggle.component.ts","../../../projects/ngx-ui/src/lib/components/layout/sidebar-toggle/sidebar-toggle.component.html","../../../projects/ngx-ui/src/lib/components/split-pane/split-pane.component.ts","../../../projects/ngx-ui/src/lib/components/split-pane/split-pane.component.html","../../../projects/ngx-ui/src/lib/components/split-pane/split.component.ts","../../../projects/ngx-ui/src/lib/components/split-pane/split.component.html","../../../projects/ngx-ui/src/lib/components/tree/tree-node.component.ts","../../../projects/ngx-ui/src/lib/components/tree/tree-node.component.html","../../../projects/ngx-ui/src/lib/components/tree/tree.component.ts","../../../projects/ngx-ui/src/lib/components/tree/tree.component.html","../../../projects/ngx-ui/src/lib/components/template-input/template-input.component.ts","../../../projects/ngx-ui/src/lib/components/template-input/template-input.component.html","../../../projects/ngx-ui/src/public-api.ts","../../../projects/ngx-ui/src/m1z23r-ngx-ui.ts"],"sourcesContent":["/**\n * Validation error returned by validators\n */\nexport interface ValidationError {\n /** Unique key identifying the error type (e.g., 'required', 'email', 'minLength') */\n key: string;\n /** Human-readable error message */\n message: string;\n}\n\n/**\n * Validator function type\n * Returns a ValidationError if validation fails, null if valid\n */\nexport type ValidatorFn = (value: unknown) => ValidationError | null;\n\n/**\n * Collection of built-in validators for form inputs\n *\n * @example\n * // Using predefined validators\n * <ui-input [validators]=\"[Validators.required, Validators.email]\" />\n *\n * @example\n * // Using validators with parameters\n * <ui-input [validators]=\"[Validators.required, Validators.minLength(3), Validators.maxLength(50)]\" />\n *\n * @example\n * // Custom validator function\n * const noSpaces: ValidatorFn = (value) =>\n * typeof value === 'string' && value.includes(' ')\n * ? { key: 'noSpaces', message: 'Spaces are not allowed' }\n * : null;\n * <ui-input [validatorFn]=\"noSpaces\" />\n */\nexport class Validators {\n /**\n * Validates that the value is not empty\n */\n static required: ValidatorFn = (value: unknown): ValidationError | null => {\n const isEmpty =\n value === null ||\n value === undefined ||\n value === '' ||\n (Array.isArray(value) && value.length === 0);\n\n return isEmpty ? { key: 'required', message: 'This field is required' } : null;\n };\n\n /**\n * Validates email format\n */\n static email: ValidatorFn = (value: unknown): ValidationError | null => {\n if (!value || typeof value !== 'string') return null;\n const emailRegex = /^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,}$/;\n return emailRegex.test(value) ? null : { key: 'email', message: 'Please enter a valid email address' };\n };\n\n /**\n * Validates minimum string length\n */\n static minLength(min: number): ValidatorFn {\n return (value: unknown): ValidationError | null => {\n if (!value || typeof value !== 'string') return null;\n return value.length >= min\n ? null\n : { key: 'minLength', message: `Minimum ${min} characters required` };\n };\n }\n\n /**\n * Validates maximum string length\n */\n static maxLength(max: number): ValidatorFn {\n return (value: unknown): ValidationError | null => {\n if (!value || typeof value !== 'string') return null;\n return value.length <= max\n ? null\n : { key: 'maxLength', message: `Maximum ${max} characters allowed` };\n };\n }\n\n /**\n * Validates minimum numeric value\n */\n static min(min: number): ValidatorFn {\n return (value: unknown): ValidationError | null => {\n if (value === '' || value === null || value === undefined) return null;\n const numValue = typeof value === 'string' ? parseFloat(value) : typeof value === 'number' ? value : NaN;\n if (isNaN(numValue)) return null;\n return numValue >= min\n ? null\n : { key: 'min', message: `Value must be at least ${min}` };\n };\n }\n\n /**\n * Validates maximum numeric value\n */\n static max(max: number): ValidatorFn {\n return (value: unknown): ValidationError | null => {\n if (value === '' || value === null || value === undefined) return null;\n const numValue = typeof value === 'string' ? parseFloat(value) : typeof value === 'number' ? value : NaN;\n if (isNaN(numValue)) return null;\n return numValue <= max\n ? null\n : { key: 'max', message: `Value must be at most ${max}` };\n };\n }\n\n /**\n * Validates against a regex pattern\n */\n static pattern(pattern: RegExp, message?: string): ValidatorFn {\n return (value: unknown): ValidationError | null => {\n if (!value || typeof value !== 'string') return null;\n return pattern.test(value)\n ? null\n : { key: 'pattern', message: message ?? 'Invalid format' };\n };\n }\n\n /**\n * Validates URL format\n */\n static url: ValidatorFn = (value: unknown): ValidationError | null => {\n if (!value || typeof value !== 'string') return null;\n // Stricter URL regex: requires protocol, valid domain with TLD, no spaces\n const urlRegex = /^https?:\\/\\/[a-zA-Z0-9]([a-zA-Z0-9-]*[a-zA-Z0-9])?(\\.[a-zA-Z0-9]([a-zA-Z0-9-]*[a-zA-Z0-9])?)+([/?#].*)?$/;\n return urlRegex.test(value) ? null : { key: 'url', message: 'Please enter a valid URL' };\n };\n\n /**\n * Validates that value contains only numeric characters\n */\n static numeric: ValidatorFn = (value: unknown): ValidationError | null => {\n if (!value || typeof value !== 'string') return null;\n return /^\\d+$/.test(value) ? null : { key: 'numeric', message: 'Only numbers are allowed' };\n };\n\n /**\n * Validates that value contains only alphanumeric characters\n */\n static alphanumeric: ValidatorFn = (value: unknown): ValidationError | null => {\n if (!value || typeof value !== 'string') return null;\n return /^[a-zA-Z0-9]+$/.test(value)\n ? null\n : { key: 'alphanumeric', message: 'Only letters and numbers are allowed' };\n };\n}\n","import { Injectable, signal, computed, effect, PLATFORM_ID, inject } from '@angular/core';\nimport { isPlatformBrowser } from '@angular/common';\n\n@Injectable({ providedIn: 'root' })\nexport class SidebarService {\n private readonly platformId = inject(PLATFORM_ID);\n private readonly MOBILE_BREAKPOINT = 768;\n\n readonly collapsed = signal(false);\n readonly mobileOpen = signal(false);\n readonly isMobile = signal(false);\n\n constructor() {\n if (isPlatformBrowser(this.platformId)) {\n this.checkMobile();\n window.addEventListener('resize', () => this.checkMobile());\n }\n }\n\n private checkMobile(): void {\n const wasMobile = this.isMobile();\n const nowMobile = window.innerWidth < this.MOBILE_BREAKPOINT;\n this.isMobile.set(nowMobile);\n\n // Close mobile sidebar when switching to desktop\n if (wasMobile && !nowMobile) {\n this.mobileOpen.set(false);\n }\n }\n\n toggle(): void {\n if (this.isMobile()) {\n this.mobileOpen.update(v => !v);\n } else {\n this.collapsed.update(v => !v);\n }\n }\n\n expand(): void {\n this.collapsed.set(false);\n }\n\n collapse(): void {\n this.collapsed.set(true);\n }\n\n openMobile(): void {\n this.mobileOpen.set(true);\n }\n\n closeMobile(): void {\n this.mobileOpen.set(false);\n }\n}\n","import { Injectable, signal, computed, Signal } from '@angular/core';\n\n/**\n * Service for managing loading states by identifier.\n *\n * @example\n * ```typescript\n * // In a component or service\n * private loadingService = inject(LoadingService);\n *\n * async login() {\n * this.loadingService.start('login');\n * try {\n * await this.authService.login();\n * } finally {\n * this.loadingService.stop('login');\n * }\n * }\n * ```\n *\n * @example\n * ```html\n * <!-- In template -->\n * <ui-button uiLoading=\"login\">Login</ui-button>\n * ```\n */\n@Injectable({ providedIn: 'root' })\nexport class LoadingService {\n private readonly loadingStates = signal<Map<string, boolean>>(new Map());\n\n /**\n * Starts loading for the given identifier.\n * @param id - Unique identifier for the loading state\n */\n start(id: string): void {\n this.loadingStates.update((states) => {\n const newStates = new Map(states);\n newStates.set(id, true);\n return newStates;\n });\n }\n\n /**\n * Stops loading for the given identifier.\n * @param id - Unique identifier for the loading state\n */\n stop(id: string): void {\n this.loadingStates.update((states) => {\n const newStates = new Map(states);\n newStates.set(id, false);\n return newStates;\n });\n }\n\n /**\n * Sets the loading state for the given identifier.\n * @param id - Unique identifier for the loading state\n * @param loading - Whether loading is active\n */\n set(id: string, loading: boolean): void {\n if (loading) {\n this.start(id);\n } else {\n this.stop(id);\n }\n }\n\n /**\n * Toggles the loading state for the given identifier.\n * @param id - Unique identifier for the loading state\n */\n toggle(id: string): void {\n const current = this.isLoading(id)();\n this.set(id, !current);\n }\n\n /**\n * Returns a signal that indicates whether the given identifier is loading.\n * @param id - Unique identifier for the loading state\n * @returns Signal<boolean> that updates when the loading state changes\n */\n isLoading(id: string): Signal<boolean> {\n return computed(() => this.loadingStates().get(id) ?? false);\n }\n\n /**\n * Returns whether any loading state is active.\n * @returns Signal<boolean> that is true if any identifier is loading\n */\n isAnyLoading(): Signal<boolean> {\n return computed(() => {\n const states = this.loadingStates();\n for (const value of states.values()) {\n if (value) return true;\n }\n return false;\n });\n }\n\n /**\n * Clears the loading state for the given identifier.\n * @param id - Unique identifier to clear\n */\n clear(id: string): void {\n this.loadingStates.update((states) => {\n const newStates = new Map(states);\n newStates.delete(id);\n return newStates;\n });\n }\n\n /**\n * Clears all loading states.\n */\n clearAll(): void {\n this.loadingStates.set(new Map());\n }\n}\n","/**\n * Reference to an opened dialog.\n * Provides methods to close the dialog and access its result.\n */\nexport class DialogRef<TResult = unknown> {\n private resolvePromise!: (value: TResult | undefined) => void;\n private readonly resultPromise: Promise<TResult | undefined>;\n\n constructor(private readonly closeFn: () => void) {\n this.resultPromise = new Promise<TResult | undefined>((resolve) => {\n this.resolvePromise = resolve;\n });\n }\n\n /**\n * Closes the dialog with an optional result value.\n */\n close(result?: TResult): void {\n this.resolvePromise(result);\n this.closeFn();\n }\n\n /**\n * Returns a promise that resolves when the dialog is closed.\n * The promise resolves with the result passed to close(), or undefined if closed without a result.\n */\n afterClosed(): Promise<TResult | undefined> {\n return this.resultPromise;\n }\n}\n","import { InjectionToken } from '@angular/core';\nimport { DialogRef } from './dialog-ref';\n\n/**\n * Injection token for dialog data passed to the component.\n */\nexport const DIALOG_DATA = new InjectionToken<unknown>('DIALOG_DATA');\n\n/**\n * Injection token for the dialog reference.\n */\nexport const DIALOG_REF = new InjectionToken<DialogRef>('DIALOG_REF');\n\n/**\n * Size options for the modal.\n */\nexport type ModalSize = 'sm' | 'md' | 'lg' | 'xl' | 'full';\n\n/**\n * Configuration options for opening a dialog.\n */\nexport interface DialogConfig<TData = unknown> {\n /** Data to pass to the dialog component via DIALOG_DATA injection token */\n data?: TData;\n /** Width of the modal (CSS value, e.g., '500px', '80%') */\n width?: string;\n /** Maximum width of the modal (CSS value) */\n maxWidth?: string;\n /** Predefined size preset */\n size?: ModalSize;\n /** Whether clicking the backdrop closes the dialog */\n closeOnBackdropClick?: boolean;\n /** Whether pressing Escape closes the dialog */\n closeOnEscape?: boolean;\n /** Custom CSS class to add to the modal container */\n panelClass?: string;\n}\n\n/**\n * Default dialog configuration.\n */\nexport const DEFAULT_DIALOG_CONFIG: Required<Omit<DialogConfig, 'data' | 'width' | 'maxWidth' | 'panelClass'>> = {\n size: 'md',\n closeOnBackdropClick: true,\n closeOnEscape: true,\n};\n","import {\n ApplicationRef,\n ComponentRef,\n createComponent,\n EnvironmentInjector,\n inject,\n Injectable,\n Injector,\n PLATFORM_ID,\n StaticProvider,\n Type,\n} from '@angular/core';\nimport { DOCUMENT, isPlatformBrowser } from '@angular/common';\nimport { DialogRef } from './dialog-ref';\nimport { DIALOG_DATA, DIALOG_REF, DialogConfig, DEFAULT_DIALOG_CONFIG } from './dialog.config';\n\n/**\n * Service for opening modal dialogs.\n *\n * @example\n * ```typescript\n * @Component({ ... })\n * export class MyDialog {\n * private dialogRef = inject(DIALOG_REF) as DialogRef<string>;\n * private data = inject(DIALOG_DATA) as { message: string };\n *\n * confirm() {\n * this.dialogRef.close('confirmed');\n * }\n * }\n *\n * // Usage:\n * const dialogRef = this.dialogService.open(MyDialog, {\n * data: { message: 'Hello' },\n * size: 'md'\n * });\n *\n * const result = await dialogRef.afterClosed();\n * ```\n */\n@Injectable({ providedIn: 'root' })\nexport class DialogService {\n private readonly appRef = inject(ApplicationRef);\n private readonly injector = inject(EnvironmentInjector);\n private readonly document = inject(DOCUMENT);\n private readonly platformId = inject(PLATFORM_ID);\n\n /**\n * Opens a dialog with the specified component.\n *\n * @param component - The component to render inside the dialog\n * @param config - Configuration options for the dialog\n * @returns A DialogRef that can be used to close the dialog and get results\n */\n open<TComponent, TData = unknown, TResult = unknown>(\n component: Type<TComponent>,\n config: DialogConfig<TData> = {}\n ): DialogRef<TResult> {\n const mergedConfig = { ...DEFAULT_DIALOG_CONFIG, ...config };\n const dialogRef = new DialogRef<TResult>(() => this.destroy(componentRef));\n\n const injector = this.createInjector(config.data, dialogRef);\n const componentRef = createComponent(component, {\n environmentInjector: this.injector,\n elementInjector: injector,\n });\n\n // Store config on the host element for the component to access\n const hostElement = componentRef.location.nativeElement as HTMLElement;\n hostElement.dataset['dialogConfig'] = JSON.stringify(mergedConfig);\n\n this.appRef.attachView(componentRef.hostView);\n if (isPlatformBrowser(this.platformId)) {\n this.document.body.appendChild(hostElement);\n }\n\n return dialogRef;\n }\n\n private destroy(componentRef: ComponentRef<unknown>): void {\n this.appRef.detachView(componentRef.hostView);\n componentRef.destroy();\n }\n\n private createInjector<TData, TResult>(data: TData | undefined, dialogRef: DialogRef<TResult>): Injector {\n const providers: StaticProvider[] = [\n { provide: DIALOG_DATA, useValue: data },\n { provide: DIALOG_REF, useValue: dialogRef },\n ];\n\n return Injector.create({\n providers,\n parent: this.injector,\n });\n }\n}\n","import {\n Component,\n input,\n output,\n signal,\n computed,\n OnInit,\n OnDestroy,\n ChangeDetectionStrategy,\n} from '@angular/core';\nimport type { ToastData } from './toast.config';\n\n@Component({\n selector: 'ui-toast',\n standalone: true,\n templateUrl: './toast.component.html',\n styleUrl: './toast.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ToastComponent implements OnInit, OnDestroy {\n readonly data = input.required<ToastData>();\n\n readonly dismissed = output<string>();\n\n protected readonly isExiting = signal(false);\n\n private timeoutId: ReturnType<typeof setTimeout> | null = null;\n\n protected readonly toastClasses = computed(() => {\n return `ui-toast--${this.data().variant}`;\n });\n\n ngOnInit(): void {\n const duration = this.data().duration;\n if (duration > 0) {\n this.timeoutId = setTimeout(() => this.dismiss(), duration);\n }\n }\n\n ngOnDestroy(): void {\n if (this.timeoutId) {\n clearTimeout(this.timeoutId);\n }\n }\n\n dismiss(): void {\n if (this.isExiting()) return;\n this.isExiting.set(true);\n // Wait for exit animation (300ms)\n setTimeout(() => {\n this.dismissed.emit(this.data().id);\n }, 300);\n }\n}\n","<div\n class=\"ui-toast\"\n [class]=\"toastClasses()\"\n [class.ui-toast--exiting]=\"isExiting()\"\n role=\"alert\"\n aria-live=\"polite\"\n>\n <div class=\"ui-toast__icon\">\n @switch (data().variant) {\n @case ('success') {\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\">\n <path d=\"M22 11.08V12a10 10 0 1 1-5.93-9.14\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n <polyline points=\"22 4 12 14.01 9 11.01\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n }\n @case ('error') {\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\">\n <circle cx=\"12\" cy=\"12\" r=\"10\"/>\n <line x1=\"15\" y1=\"9\" x2=\"9\" y2=\"15\" stroke-linecap=\"round\"/>\n <line x1=\"9\" y1=\"9\" x2=\"15\" y2=\"15\" stroke-linecap=\"round\"/>\n </svg>\n }\n @case ('warning') {\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\">\n <path d=\"M10.29 3.86L1.82 18a2 2 0 0 0 1.71 3h16.94a2 2 0 0 0 1.71-3L13.71 3.86a2 2 0 0 0-3.42 0z\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n <line x1=\"12\" y1=\"9\" x2=\"12\" y2=\"13\" stroke-linecap=\"round\"/>\n <line x1=\"12\" y1=\"17\" x2=\"12.01\" y2=\"17\" stroke-linecap=\"round\"/>\n </svg>\n }\n @case ('info') {\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\">\n <circle cx=\"12\" cy=\"12\" r=\"10\"/>\n <line x1=\"12\" y1=\"16\" x2=\"12\" y2=\"12\" stroke-linecap=\"round\"/>\n <line x1=\"12\" y1=\"8\" x2=\"12.01\" y2=\"8\" stroke-linecap=\"round\"/>\n </svg>\n }\n }\n </div>\n <div class=\"ui-toast__content\">\n @if (data().title) {\n <div class=\"ui-toast__title\">{{ data().title }}</div>\n }\n <div class=\"ui-toast__message\">{{ data().message }}</div>\n </div>\n @if (data().dismissible) {\n <button\n type=\"button\"\n class=\"ui-toast__close\"\n aria-label=\"Dismiss\"\n (click)=\"dismiss()\"\n >\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\">\n <line x1=\"18\" y1=\"6\" x2=\"6\" y2=\"18\" stroke-linecap=\"round\"/>\n <line x1=\"6\" y1=\"6\" x2=\"18\" y2=\"18\" stroke-linecap=\"round\"/>\n </svg>\n </button>\n }\n @if (data().showProgress && data().duration > 0) {\n <div class=\"ui-toast__progress\">\n <div\n class=\"ui-toast__progress-bar\"\n [style.animation-duration.ms]=\"data().duration\"\n ></div>\n </div>\n }\n</div>\n","import {\n Component,\n input,\n ChangeDetectionStrategy,\n} from '@angular/core';\nimport { ToastComponent } from './toast.component';\nimport type { ToastData, ToastPosition } from './toast.config';\n\n@Component({\n selector: 'ui-toast-container',\n standalone: true,\n imports: [ToastComponent],\n templateUrl: './toast-container.component.html',\n styleUrl: './toast-container.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ToastContainerComponent {\n readonly toasts = input<ToastData[]>([]);\n readonly position = input<ToastPosition>('top-right');\n readonly onDismissCallback = input<(id: string) => void>(() => {});\n\n protected containerClass(): string {\n return `ui-toast-container--${this.position()}`;\n }\n\n protected onDismiss(id: string): void {\n this.onDismissCallback()(id);\n }\n}\n","<div class=\"ui-toast-container\" [class]=\"containerClass()\">\n @for (toast of toasts(); track toast.id) {\n <ui-toast\n [data]=\"toast\"\n (dismissed)=\"onDismiss($event)\"\n />\n }\n</div>\n","/**\n * Reference to an active toast notification.\n * Used to programmatically dismiss a toast.\n */\nexport class ToastRef {\n private _dismissed = false;\n private _dismissFn: (() => void) | null = null;\n\n constructor(\n public readonly id: string,\n private readonly onDismiss: (id: string) => void\n ) {}\n\n /** Whether the toast has been dismissed */\n get dismissed(): boolean {\n return this._dismissed;\n }\n\n /** Dismiss this toast */\n dismiss(): void {\n if (this._dismissed) return;\n this._dismissed = true;\n this.onDismiss(this.id);\n this._dismissFn?.();\n }\n\n /** @internal */\n _setDismissFn(fn: () => void): void {\n this._dismissFn = fn;\n }\n}\n","import { InjectionToken } from '@angular/core';\n\nexport type ToastVariant = 'success' | 'error' | 'warning' | 'info';\nexport type ToastPosition =\n | 'top-right'\n | 'top-left'\n | 'top-center'\n | 'bottom-right'\n | 'bottom-left'\n | 'bottom-center';\n\nexport interface ToastConfig {\n /** Toast message */\n message: string;\n /** Optional title */\n title?: string;\n /** Toast variant/type */\n variant?: ToastVariant;\n /** Duration in ms (0 = no auto-dismiss) */\n duration?: number;\n /** Position on screen */\n position?: ToastPosition;\n /** Show close button */\n dismissible?: boolean;\n /** Show progress bar for auto-dismiss */\n showProgress?: boolean;\n /** Max visible toasts (0 = unlimited, oldest dismissed when exceeded) */\n maxVisible?: number;\n}\n\nexport interface ToastData extends Required<Omit<ToastConfig, 'title' | 'maxVisible'>> {\n id: string;\n title?: string;\n}\n\nexport const DEFAULT_TOAST_CONFIG: Omit<Required<ToastConfig>, 'message' | 'title'> = {\n variant: 'info',\n duration: 5000,\n position: 'top-right',\n dismissible: true,\n showProgress: true,\n maxVisible: 3,\n};\n\nexport const TOAST_DATA = new InjectionToken<ToastData>('TOAST_DATA');\n","import {\n ApplicationRef,\n ComponentRef,\n createComponent,\n EnvironmentInjector,\n inject,\n Injectable,\n PLATFORM_ID,\n signal,\n} from '@angular/core';\nimport { DOCUMENT, isPlatformBrowser } from '@angular/common';\nimport { ToastContainerComponent } from './toast-container.component';\nimport { ToastRef } from './toast-ref';\nimport {\n ToastConfig,\n ToastData,\n ToastPosition,\n ToastVariant,\n DEFAULT_TOAST_CONFIG,\n} from './toast.config';\n\n/**\n * Service for showing toast notifications.\n *\n * @example\n * ```typescript\n * // Simple usage\n * this.toastService.success('File saved successfully');\n * this.toastService.error('Failed to save file', 'Error');\n *\n * // With custom duration (3 seconds)\n * this.toastService.warning('Session expiring soon', 'Warning', 3000);\n *\n * // Persistent toast (no auto-dismiss)\n * this.toastService.info('Processing...', undefined, 0);\n *\n * // With full config\n * const toastRef = this.toastService.show({\n * message: 'Custom toast',\n * variant: 'info',\n * duration: 3000,\n * position: 'bottom-right'\n * });\n *\n * // Dismiss programmatically\n * toastRef.dismiss();\n *\n * // Dismiss all\n * this.toastService.dismissAll();\n * ```\n */\n@Injectable({ providedIn: 'root' })\nexport class ToastService {\n private readonly appRef = inject(ApplicationRef);\n private readonly injector = inject(EnvironmentInjector);\n private readonly document = inject(DOCUMENT);\n private readonly platformId = inject(PLATFORM_ID);\n\n private containerRef: ComponentRef<ToastContainerComponent> | null = null;\n private readonly toasts = signal<ToastData[]>([]);\n private readonly toastRefs = new Map<string, ToastRef>();\n private idCounter = 0;\n private currentPosition: ToastPosition = DEFAULT_TOAST_CONFIG.position;\n\n /**\n * Show a toast with custom configuration.\n */\n show(config: ToastConfig): ToastRef {\n const id = `toast-${++this.idCounter}`;\n const position = config.position ?? DEFAULT_TOAST_CONFIG.position;\n const maxVisible = config.maxVisible ?? DEFAULT_TOAST_CONFIG.maxVisible;\n\n // If position changed, dismiss all existing toasts\n if (this.toasts().length > 0 && position !== this.currentPosition) {\n this.dismissAll();\n }\n this.currentPosition = position;\n\n // Enforce max visible limit - dismiss oldest toasts to make room\n if (maxVisible > 0) {\n const currentToasts = this.toasts();\n const toRemoveCount = currentToasts.length - maxVisible + 1;\n if (toRemoveCount > 0) {\n const toastsToRemove = currentToasts.slice(0, toRemoveCount);\n for (const toast of toastsToRemove) {\n this.dismiss(toast.id);\n }\n }\n }\n\n const toastData: ToastData = {\n id,\n message: config.message,\n title: config.title,\n variant: config.variant ?? DEFAULT_TOAST_CONFIG.variant,\n duration: config.duration ?? DEFAULT_TOAST_CONFIG.duration,\n position,\n dismissible: config.dismissible ?? DEFAULT_TOAST_CONFIG.dismissible,\n showProgress: config.showProgress ?? DEFAULT_TOAST_CONFIG.showProgress,\n };\n\n const toastRef = new ToastRef(id, (toastId) => this.dismiss(toastId));\n this.toastRefs.set(id, toastRef);\n\n this.toasts.update(list => [...list, toastData]);\n this.ensureContainer();\n\n return toastRef;\n }\n\n /**\n * Show a success toast.\n * @param message Toast message\n * @param title Optional title\n * @param duration Optional duration in ms (0 = no auto-dismiss)\n */\n success(message: string, title?: string, duration?: number): ToastRef {\n return this.show({ message, title, variant: 'success', duration });\n }\n\n /**\n * Show an error toast.\n * @param message Toast message\n * @param title Optional title\n * @param duration Optional duration in ms (0 = no auto-dismiss)\n */\n error(message: string, title?: string, duration?: number): ToastRef {\n return this.show({ message, title, variant: 'error', duration });\n }\n\n /**\n * Show a warning toast.\n * @param message Toast message\n * @param title Optional title\n * @param duration Optional duration in ms (0 = no auto-dismiss)\n */\n warning(message: string, title?: string, duration?: number): ToastRef {\n return this.show({ message, title, variant: 'warning', duration });\n }\n\n /**\n * Show an info toast.\n * @param message Toast message\n * @param title Optional title\n * @param duration Optional duration in ms (0 = no auto-dismiss)\n */\n info(message: string, title?: string, duration?: number): ToastRef {\n return this.show({ message, title, variant: 'info', duration });\n }\n\n /**\n * Dismiss a specific toast by ID.\n */\n dismiss(id: string): void {\n this.toasts.update(list => list.filter(t => t.id !== id));\n this.toastRefs.delete(id);\n\n if (this.toasts().length === 0) {\n this.destroyContainer();\n }\n }\n\n /**\n * Dismiss all toasts.\n */\n dismissAll(): void {\n this.toasts.set([]);\n this.toastRefs.clear();\n this.destroyContainer();\n }\n\n private ensureContainer(): void {\n if (this.containerRef) {\n this.updateContainer();\n return;\n }\n\n this.containerRef = createComponent(ToastContainerComponent, {\n environmentInjector: this.injector,\n });\n\n this.updateContainer();\n this.appRef.attachView(this.containerRef.hostView);\n if (isPlatformBrowser(this.platformId)) {\n this.document.body.appendChild(this.containerRef.location.nativeElement);\n }\n }\n\n private updateContainer(): void {\n if (!this.containerRef) return;\n\n this.containerRef.setInput('toasts', this.toasts());\n this.containerRef.setInput('position', this.currentPosition);\n this.containerRef.setInput('onDismissCallback', (id: string) => this.dismiss(id));\n this.containerRef.changeDetectorRef.detectChanges();\n }\n\n private destroyContainer(): void {\n if (!this.containerRef) return;\n\n this.appRef.detachView(this.containerRef.hostView);\n this.containerRef.destroy();\n this.containerRef = null;\n }\n}\n","import { signal, Signal } from '@angular/core';\n\n/**\n * Reference to a dynamically created tab.\n * Provides methods to close the tab and access its result.\n */\nexport class TabRef<TResult = unknown> {\n private resolvePromise!: (value: TResult | undefined) => void;\n private readonly resultPromise: Promise<TResult | undefined>;\n private readonly _isActive = signal(false);\n\n /** Unique identifier for this tab */\n readonly id: string;\n\n /** Whether this tab is currently active */\n readonly isActive: Signal<boolean> = this._isActive.asReadonly();\n\n constructor(\n id: string,\n private readonly closeFn: (tabRef: TabRef<TResult>) => void,\n private readonly activateFn: (tabRef: TabRef<TResult>) => void\n ) {\n this.id = id;\n this.resultPromise = new Promise<TResult | undefined>((resolve) => {\n this.resolvePromise = resolve;\n });\n }\n\n /**\n * Closes the tab with an optional result value.\n */\n close(result?: TResult): void {\n this.resolvePromise(result);\n this.closeFn(this);\n }\n\n /**\n * Activates this tab.\n */\n activate(): void {\n this.activateFn(this);\n }\n\n /**\n * Returns a promise that resolves when the tab is closed.\n * The promise resolves with the result passed to close(), or undefined if closed without a result.\n */\n afterClosed(): Promise<TResult | undefined> {\n return this.resultPromise;\n }\n\n /** @internal */\n _setActive(active: boolean): void {\n this._isActive.set(active);\n }\n}\n","import { InjectionToken, TemplateRef, Type } from '@angular/core';\nimport { TabRef } from './tab-ref';\n\n/**\n * Injection token for tab data passed to the component.\n */\nexport const TAB_DATA = new InjectionToken<unknown>('TAB_DATA');\n\n/**\n * Injection token for the tab reference.\n */\nexport const TAB_REF = new InjectionToken<TabRef>('TAB_REF');\n\n/**\n * Configuration for a dynamic tab.\n */\nexport interface DynamicTabConfig<TData = unknown> {\n /** Label displayed in the tab header */\n label: string;\n /** Optional icon template */\n icon?: TemplateRef<unknown>;\n /** Data to pass to the tab component via TAB_DATA injection token */\n data?: TData;\n /** Whether the tab can be closed (default: true) */\n closable?: boolean;\n /** Whether to activate the tab immediately after creation (default: true) */\n activate?: boolean;\n /** Optional unique ID for the tab */\n id?: string;\n}\n\n/**\n * Internal representation of a dynamic tab.\n * @internal\n */\nexport interface DynamicTab<TData = unknown, TResult = unknown> {\n id: string;\n label: string;\n icon?: TemplateRef<unknown>;\n component: Type<unknown>;\n data?: TData;\n closable: boolean;\n tabRef: TabRef<TResult>;\n}\n\n/**\n * Controls how inactive tab panels are handled.\n * - `'conditional'` (default): Inactive panels are removed from the DOM (destroyed/recreated on switch).\n * - `'persistent'`: All panels stay in the DOM, inactive ones are hidden via CSS `display: none`.\n * Use this to preserve component state across tab switches.\n */\nexport type TabRenderMode = 'conditional' | 'persistent';\n\n/**\n * Default configuration for dynamic tabs.\n */\nexport const DEFAULT_TAB_CONFIG: Required<Omit<DynamicTabConfig, 'label' | 'data' | 'icon' | 'id'>> = {\n closable: true,\n activate: true,\n};\n","import { Injectable, Injector, signal, Type, computed } from '@angular/core';\nimport { TabRef } from './tab-ref';\nimport {\n TAB_DATA,\n TAB_REF,\n DynamicTabConfig,\n DynamicTab,\n DEFAULT_TAB_CONFIG,\n} from './tab.config';\n\n/**\n * Service for managing dynamic tabs.\n *\n * @example\n * ```typescript\n * @Component({ ... })\n * export class MyTabContent {\n * private tabRef = inject(TAB_REF) as TabRef<string>;\n * private data = inject(TAB_DATA) as { message: string };\n *\n * save() {\n * this.tabRef.close('saved');\n * }\n * }\n *\n * // In parent component:\n * const tabRef = this.tabsService.open(MyTabContent, {\n * label: 'New Tab',\n * data: { message: 'Hello' },\n * closable: true\n * });\n *\n * const result = await tabRef.afterClosed();\n * ```\n */\n@Injectable({ providedIn: 'root' })\nexport class TabsService {\n private readonly _tabs = signal<DynamicTab[]>([]);\n private readonly _activeTabId = signal<string | null>(null);\n private idCounter = 0;\n\n /** All currently open tabs */\n readonly tabs = this._tabs.asReadonly();\n\n /** ID of the currently active tab */\n readonly activeTabId = this._activeTabId.asReadonly();\n\n /** The currently active tab */\n readonly activeTab = computed(() => {\n const activeId = this._activeTabId();\n return this._tabs().find((t) => t.id === activeId) ?? null;\n });\n\n /**\n * Opens a new tab with the specified component.\n *\n * @param component - The component to render inside the tab\n * @param config - Configuration options for the tab\n * @returns A TabRef that can be used to close the tab and get results\n */\n open<TComponent, TData = unknown, TResult = unknown>(\n component: Type<TComponent>,\n config: DynamicTabConfig<TData>\n ): TabRef<TResult> {\n const mergedConfig = { ...DEFAULT_TAB_CONFIG, ...config };\n const id = config.id ?? `tab-${++this.idCounter}`;\n\n const tabRef = new TabRef<TResult>(\n id,\n (ref) => this.close(ref),\n (ref) => this.activate(ref)\n );\n\n const tab: DynamicTab = {\n id,\n label: config.label,\n icon: config.icon,\n component,\n data: config.data,\n closable: mergedConfig.closable,\n tabRef: tabRef as TabRef<unknown>,\n };\n\n this._tabs.update((tabs) => [...tabs, tab]);\n\n if (mergedConfig.activate) {\n this.activateById(id);\n }\n\n return tabRef;\n }\n\n /**\n * Closes a tab by its TabRef.\n */\n close<TResult>(tabRef: TabRef<TResult>): void {\n this.closeById(tabRef.id);\n }\n\n /**\n * Closes a tab by its ID.\n */\n closeById(id: string): void {\n const tabs = this._tabs();\n const index = tabs.findIndex((t) => t.id === id);\n\n if (index === -1) return;\n\n // If closing the active tab, activate another one\n if (this._activeTabId() === id) {\n const newActiveTab = tabs[index + 1] ?? tabs[index - 1];\n this._activeTabId.set(newActiveTab?.id ?? null);\n if (newActiveTab) {\n newActiveTab.tabRef._setActive(true);\n }\n }\n\n // Update the closed tab's active state\n tabs[index].tabRef._setActive(false);\n\n this._tabs.update((t) => t.filter((tab) => tab.id !== id));\n }\n\n /**\n * Closes all tabs.\n */\n closeAll(): void {\n this._tabs().forEach((tab) => {\n tab.tabRef._setActive(false);\n });\n this._tabs.set([]);\n this._activeTabId.set(null);\n }\n\n /**\n * Activates a tab by its TabRef.\n */\n activate<TResult>(tabRef: TabRef<TResult>): void {\n this.activateById(tabRef.id);\n }\n\n /**\n * Activates a tab by its ID.\n */\n activateById(id: string): void {\n const tabs = this._tabs();\n const tab = tabs.find((t) => t.id === id);\n\n if (!tab) return;\n\n // Deactivate current tab\n const currentActive = tabs.find((t) => t.id === this._activeTabId());\n if (currentActive) {\n currentActive.tabRef._setActive(false);\n }\n\n // Activate new tab\n tab.tabRef._setActive(true);\n this._activeTabId.set(id);\n }\n\n /**\n * Creates an injector with TAB_DATA and TAB_REF for a tab component.\n * @internal\n */\n _createInjector<TData, TResult>(\n parentInjector: Injector,\n data: TData | undefined,\n tabRef: TabRef<TResult>\n ): Injector {\n return Injector.create({\n providers: [\n { provide: TAB_DATA, useValue: data },\n { provide: TAB_REF, useValue: tabRef },\n ],\n parent: parentInjector,\n });\n }\n\n /**\n * Gets a tab by its ID.\n */\n getTab(id: string): DynamicTab | undefined {\n return this._tabs().find((t) => t.id === id);\n }\n\n /**\n * Updates a tab's label.\n */\n updateLabel(id: string, label: string): void {\n this._tabs.update((tabs) =>\n tabs.map((tab) => (tab.id === id ? { ...tab, label } : tab))\n );\n }\n}\n","import {\n Component,\n ChangeDetectionStrategy,\n inject,\n input,\n signal,\n HostListener,\n ElementRef,\n OnInit,\n} from '@angular/core';\nimport { DIALOG_REF } from '../../dialog/dialog.config';\nimport { DialogRef } from '../../dialog/dialog-ref';\n\n/**\n * Modal wrapper component with backdrop, header, body, and footer slots.\n * Uses content projection for flexible content.\n *\n * @example\n * ```html\n * <ui-modal [title]=\"'Confirm Action'\" [size]=\"'md'\" [closeOnBackdropClick]=\"true\">\n * <p>Are you sure you want to proceed?</p>\n *\n * <ng-container footer>\n * <ui-button variant=\"outline\" (clicked)=\"dialogRef.close()\">Cancel</ui-button>\n * <ui-button variant=\"primary\" (clicked)=\"confirm()\">Confirm</ui-button>\n * </ng-container>\n * </ui-modal>\n * ```\n */\n@Component({\n selector: 'ui-modal',\n standalone: true,\n templateUrl: './modal.component.html',\n styleUrl: './modal.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ModalComponent implements OnInit {\n private readonly dialogRef = inject(DIALOG_REF, { optional: true }) as DialogRef | null;\n private readonly elementRef = inject(ElementRef);\n\n /** Tracks if mousedown started on the backdrop (to prevent close on drag-out) */\n private readonly mouseDownOnBackdrop = signal(false);\n\n /** Title displayed in the modal header */\n readonly title = input<string>();\n\n /** Modal size preset */\n readonly size = input<'sm' | 'md' | 'lg' | 'xl' | 'full'>('md');\n\n /** Custom width (overrides size preset) */\n readonly width = input<string>();\n\n /** Custom max-width (overrides size preset) */\n readonly maxWidth = input<string>();\n\n /** Whether clicking the backdrop closes the modal */\n readonly closeOnBackdropClick = input(true);\n\n /** Whether pressing Escape closes the modal */\n readonly closeOnEscape = input(true);\n\n /** Whether to show the close button in the header */\n readonly showCloseButton = input(true);\n\n /** Custom CSS class for the container */\n readonly panelClass = input<string>();\n\n ngOnInit(): void {\n // Read config from host element if opened via DialogService\n const hostElement = this.elementRef.nativeElement as HTMLElement;\n const configJson = hostElement.parentElement?.dataset?.['dialogConfig'];\n if (configJson) {\n // Config was passed via DialogService, values are already set via inputs\n }\n }\n\n @HostListener('document:keydown.escape')\n onEscapePress(): void {\n if (this.closeOnEscape()) {\n this.close();\n }\n }\n\n onBackdropMouseDown(event: MouseEvent): void {\n this.mouseDownOnBackdrop.set(event.target === event.currentTarget);\n }\n\n onBackdropClick(event: MouseEvent): void {\n // Only close if both mousedown AND mouseup happened on the backdrop\n if (\n this.mouseDownOnBackdrop() &&\n event.target === event.currentTarget &&\n this.closeOnBackdropClick()\n ) {\n this.close();\n }\n this.mouseDownOnBackdrop.set(false);\n }\n\n close(): void {\n this.dialogRef?.close();\n }\n\n protected containerClasses(): string {\n const classes = [`ui-modal--${this.size()}`];\n if (this.panelClass()) {\n classes.push(this.panelClass()!);\n }\n return classes.join(' ');\n }\n}\n","<div class=\"ui-modal__backdrop\" (mousedown)=\"onBackdropMouseDown($event)\" (click)=\"onBackdropClick($event)\">\n <div\n class=\"ui-modal__container\"\n [class]=\"containerClasses()\"\n [style.width]=\"width()\"\n [style.max-width]=\"maxWidth()\"\n role=\"dialog\"\n aria-modal=\"true\"\n >\n @if (title()) {\n <div class=\"ui-modal__header\">\n <h2 class=\"ui-modal__title\">{{ title() }}</h2>\n @if (showCloseButton()) {\n <button\n type=\"button\"\n class=\"ui-modal__close\"\n aria-label=\"Close\"\n (click)=\"close()\"\n >\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\">\n <path d=\"M18 6L6 18M6 6l12 12\"/>\n </svg>\n </button>\n }\n </div>\n }\n\n <div class=\"ui-modal__body\">\n <ng-content />\n </div>\n\n <div class=\"ui-modal__footer\">\n <ng-content select=\"[footer]\" />\n </div>\n </div>\n</div>\n","import { InjectionToken } from '@angular/core';\n\n/**\n * Interface for components that support loading state.\n * Components implementing this can be controlled by LoadingDirective.\n */\nexport interface Loadable {\n /**\n * Sets the loading state of the component.\n * @param loading - Whether the component should be in loading state\n */\n setLoading(loading: boolean): void;\n}\n\n/**\n * Injection token for components that implement Loadable.\n * Components should provide themselves using this token to work with LoadingDirective.\n *\n * @example\n * ```typescript\n * @Component({\n * providers: [{ provide: LOADABLE, useExisting: MyComponent }]\n * })\n * export class MyComponent implements Loadable {\n * setLoading(loading: boolean): void { ... }\n * }\n * ```\n */\nexport const LOADABLE = new InjectionToken<Loadable>('LOADABLE');\n","import { Directive, effect, inject, input } from '@angular/core';\nimport { LOADABLE } from './loadable';\nimport { LoadingService } from './loading.service';\n\n/**\n * Directive that connects a component's loading state to the LoadingService.\n *\n * The host component must:\n * 1. Implement the Loadable interface\n * 2. Provide itself using the LOADABLE token\n *\n * @example\n * ```html\n * <ui-button uiLoading=\"login\">Login</ui-button>\n * <ui-button uiLoading=\"submit\">Submit</ui-button>\n * ```\n *\n * @example\n * ```typescript\n * // In your component/service\n * loadingService.start('login'); // Button with uiLoading=\"login\" shows loading\n * loadingService.stop('login'); // Loading stops\n * ```\n */\n@Directive({\n selector: '[uiLoading]',\n standalone: true,\n})\nexport class LoadingDirective {\n private readonly loadingService = inject(LoadingService);\n private readonly loadable = inject(LOADABLE, { optional: true });\n\n /**\n * The loading identifier to watch.\n * When this identifier's loading state changes in LoadingService,\n * the host component's loading state will be updated.\n */\n readonly uiLoading = input.required<string>();\n\n constructor() {\n effect(() => {\n const id = this.uiLoading();\n const isLoading = this.loadingService.isLoading(id)();\n\n if (this.loadable) {\n this.loadable.setLoading(isLoading);\n } else if (typeof ngDevMode === 'undefined' || ngDevMode) {\n console.warn(\n `[LoadingDirective] No LOADABLE provider found. ` +\n `Make sure the host component implements Loadable and provides itself with the LOADABLE token.`\n );\n }\n });\n }\n}\n","import { Component, input, output, signal, computed, ChangeDetectionStrategy } from '@angular/core';\nimport { Loadable, LOADABLE } from '../../loading/loadable';\n\nexport type ButtonVariant = 'default' | 'outline' | 'ghost' | 'elevated';\nexport type ButtonColor = 'primary' | 'secondary' | 'danger' | 'success' | 'warning';\nexport type ButtonSize = 'sm' | 'md' | 'lg';\n\n@Component({\n selector: 'ui-button',\n standalone: true,\n providers: [{ provide: LOADABLE, useExisting: ButtonComponent }],\n templateUrl: './button.component.html',\n styleUrl: './button.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ButtonComponent implements Loadable {\n readonly variant = input<ButtonVariant>('default');\n readonly color = input<ButtonColor>('primary');\n readonly size = input<ButtonSize>('md');\n readonly type = input<'button' | 'submit' | 'reset'>('button');\n readonly disabled = input(false);\n readonly loading = input(false);\n\n readonly clicked = output<MouseEvent>();\n\n /** Internal loading state set by LoadingDirective */\n private readonly directiveLoading = signal(false);\n\n /** Combined loading state - true if either input or directive loading is true */\n protected readonly isLoading = computed(() => this.loading() || this.directiveLoading());\n\n protected readonly buttonClasses = computed(() => {\n return `ui-button--${this.variant()} ui-button--${this.color()} ui-button--${this.size()}`;\n });\n\n protected handleClick(event: MouseEvent): void {\n if (!this.disabled() && !this.isLoading()) {\n this.clicked.emit(event);\n }\n }\n\n /** Loadable implementation - called by LoadingDirective */\n setLoading(loading: boolean): void {\n this.directiveLoading.set(loading);\n }\n}\n","<button\n [type]=\"type()\"\n [disabled]=\"disabled() || isLoading()\"\n [class]=\"buttonClasses()\"\n (click)=\"handleClick($event)\"\n>\n @if (isLoading()) {\n <span class=\"ui-button__spinner\"></span>\n }\n <span class=\"ui-button__content\" [class.ui-button__content--hidden]=\"isLoading()\">\n <ng-content />\n </span>\n</button>\n","import { Component, input, model, computed, signal, ChangeDetectionStrategy, effect } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { ValidationError, ValidatorFn } from '../../validators/validators';\n\nexport type InputType = 'text' | 'password' | 'email' | 'number' | 'tel' | 'url';\n\n/**\n * Validation state exposed by the input component\n */\nexport interface ValidationState {\n /** Whether the input has been focused and then blurred */\n touched: boolean;\n /** Whether the input value has been changed */\n dirty: boolean;\n /** Whether all validators pass */\n valid: boolean;\n /** Whether any validator fails */\n invalid: boolean;\n /** List of current validation errors */\n errors: ValidationError[];\n /** First error message, if any */\n errorMessage: string | null;\n /** CSS classes for validation state */\n classes: {\n touched: boolean;\n untouched: boolean;\n dirty: boolean;\n pristine: boolean;\n valid: boolean;\n invalid: boolean;\n };\n}\n\n@Component({\n selector: 'ui-input',\n standalone: true,\n imports: [FormsModule],\n templateUrl: './input.component.html',\n styleUrl: './input.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n '[class.ui-input--touched]': 'touched()',\n '[class.ui-input--untouched]': '!touched()',\n '[class.ui-input--dirty]': 'dirty()',\n '[class.ui-input--pristine]': '!dirty()',\n '[class.ui-input--valid]': 'isValid()',\n '[class.ui-input--invalid]': 'isInvalid()',\n },\n})\nexport class InputComponent {\n readonly type = input<InputType>('text');\n readonly label = input<string>('');\n readonly placeholder = input<string>('');\n readonly hint = input<string>('');\n readonly error = input<string>('');\n readonly disabled = input(false);\n readonly readonly = input(false);\n readonly required = input(false);\n readonly id = input<string>('');\n\n /** Array of validator functions to run against the value */\n readonly validators = input<ValidatorFn[]>([]);\n\n /** Single custom validator function */\n readonly validatorFn = input<ValidatorFn | null>(null);\n\n /** When to show validation errors: 'touched' (default), 'dirty', or 'always' */\n readonly showErrorsOn = input<'touched' | 'dirty' | 'always'>('touched');\n\n readonly value = model<string | number>('');\n\n private static nextId = 0;\n private readonly generatedId = `ui-input-${++InputComponent.nextId}`;\n\n protected readonly inputId = computed(() => this.id() || this.generatedId);\n\n /** Whether the input has been blurred at least once */\n readonly touched = signal(false);\n\n /** Whether the input value has been modified */\n readonly dirty = signal(false);\n\n private readonly initialValue = signal<string | number>('');\n private initialized = false;\n\n constructor() {\n effect(() => {\n const val = this.value();\n if (!this.initialized) {\n this.initialValue.set(val);\n this.initialized = true;\n }\n });\n }\n\n /** All validation errors from validators and validatorFn */\n readonly errors = computed<ValidationError[]>(() => {\n const value = this.value();\n const errors: ValidationError[] = [];\n\n // Run array validators\n for (const validator of this.validators()) {\n const error = validator(value);\n if (error) errors.push(error);\n }\n\n // Run single validatorFn\n const customValidator = this.validatorFn();\n if (customValidator) {\n const error = customValidator(value);\n if (error) errors.push(error);\n }\n\n return errors;\n });\n\n /** Whether the input passes all validations */\n readonly isValid = computed(() => this.errors().length === 0);\n\n /** Whether the input has validation errors */\n readonly isInvalid = computed(() => this.errors().length > 0);\n\n /** First error message from validators */\n readonly errorMessage = computed(() => this.errors()[0]?.message ?? null);\n\n /** Whether to display the error based on showErrorsOn setting */\n readonly shouldShowError = computed(() => {\n if (!this.isInvalid()) return false;\n\n switch (this.showErrorsOn()) {\n case 'always':\n return true;\n case 'dirty':\n return this.dirty();\n case 'touched':\n default:\n return this.touched();\n }\n });\n\n /** Combined error - either from error input or from validation */\n protected readonly displayError = computed(() => {\n const manualError = this.error();\n if (manualError) return manualError;\n return this.shouldShowError() ? this.errorMessage() : null;\n });\n\n /** Full validation state object for external consumption */\n readonly validationState = computed<ValidationState>(() => ({\n touched: this.touched(),\n dirty: this.dirty(),\n valid: this.isValid(),\n invalid: this.isInvalid(),\n errors: this.errors(),\n errorMessage: this.errorMessage(),\n classes: {\n touched: this.touched(),\n untouched: !this.touched(),\n dirty: this.dirty(),\n pristine: !this.dirty(),\n valid: this.isValid(),\n invalid: this.isInvalid(),\n },\n }));\n\n /** Marks the input as touched (called on blur) */\n protected onBlur(): void {\n this.touched.set(true);\n }\n\n /** Marks the input as dirty when value changes */\n protected onInput(): void {\n if (!this.dirty()) {\n this.dirty.set(true);\n }\n }\n\n /** Reset validation state */\n reset(): void {\n this.touched.set(false);\n this.dirty.set(false);\n this.value.set(this.initialValue());\n }\n\n /** Mark as touched programmatically */\n markAsTouched(): void {\n this.touched.set(true);\n }\n\n /** Mark as dirty programmatically */\n markAsDirty(): void {\n this.dirty.set(true);\n }\n\n /** Check if a specific error exists by key */\n hasError(key: string): boolean {\n return this.errors().some((e) => e.key === key);\n }\n\n /** Get error by key */\n getError(key: string): ValidationError | undefined {\n return this.errors().find((e) => e.key === key);\n }\n}\n","<div\n class=\"ui-input-wrapper\"\n [class.ui-input-wrapper--error]=\"displayError()\"\n [class.ui-input-wrapper--disabled]=\"disabled()\"\n>\n @if (label()) {\n <label class=\"ui-input__label\" [attr.for]=\"inputId()\">\n {{ label() }}\n @if (required()) {\n <span class=\"ui-input__required\">*</span>\n }\n </label>\n }\n <div class=\"ui-input__container\">\n <input\n class=\"ui-input\"\n [id]=\"inputId()\"\n [type]=\"type()\"\n [placeholder]=\"placeholder()\"\n [disabled]=\"disabled()\"\n [readonly]=\"readonly()\"\n [required]=\"required()\"\n [(ngModel)]=\"value\"\n (blur)=\"onBlur()\"\n (input)=\"onInput()\"\n />\n </div>\n @if (displayError()) {\n <span class=\"ui-input__error\">{{ displayError() }}</span>\n }\n @if (hint() && !displayError()) {\n <span class=\"ui-input__hint\">{{ hint() }}</span>\n }\n</div>\n","import { Pipe, PipeTransform } from '@angular/core';\n\n@Pipe({\n name: 'cellValue',\n standalone: true,\n pure: true,\n})\nexport class CellValuePipe implements PipeTransform {\n transform(row: object, key: string): unknown {\n const keys = key.split('.');\n let value: unknown = row;\n for (const k of keys) {\n if (value == null) return undefined;\n value = (value as Record<string, unknown>)[k];\n }\n return value;\n }\n}\n","import {\n Component,\n input,\n signal,\n computed,\n contentChildren,\n TemplateRef,\n ChangeDetectionStrategy,\n Directive,\n} from '@angular/core';\nimport { NgTemplateOutlet } from '@angular/common';\nimport { CellValuePipe } from './cell-value.pipe';\n\nexport interface TableColumn<T = unknown> {\n key: keyof T | string;\n header: string;\n sortable?: boolean;\n width?: string;\n}\n\nexport type SortDirection = 'asc' | 'desc' | null;\n\nexport interface SortState {\n column: string | null;\n direction: SortDirection;\n}\n\n@Directive({\n selector: '[uiCellTemplate]',\n standalone: true,\n})\nexport class CellTemplateDirective {\n readonly column = input.required<string>({ alias: 'uiCellTemplate' });\n\n constructor(public templateRef: TemplateRef<unknown>) {}\n}\n\n@Component({\n selector: 'ui-table',\n standalone: true,\n imports: [NgTemplateOutlet, CellValuePipe],\n templateUrl: './table.component.html',\n styleUrl: './table.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class TableComponent<T extends object> {\n readonly data = input<T[]>([]);\n readonly columns = input<TableColumn<T>[]>([]);\n readonly trackByFn = input<(item: T) => unknown>((item: T) => item);\n\n readonly cellTemplates = contentChildren(CellTemplateDirective);\n\n readonly sortState = signal<SortState>({ column: null, direction: null });\n\n protected readonly cellTemplateMap = computed(() => {\n const map = new Map<string, TemplateRef<unknown>>();\n for (const directive of this.cellTemplates()) {\n map.set(directive.column(), directive.templateRef);\n }\n return map;\n });\n\n readonly sortedData = computed(() => {\n const items = this.data();\n const { column, direction } = this.sortState();\n\n if (!column || !direction) {\n return items;\n }\n\n return [...items].sort((a, b) => {\n const aVal = this.getValueInternal(a, column);\n const bVal = this.getValueInternal(b, column);\n\n if (aVal == null && bVal == null) return 0;\n if (aVal == null) return direction === 'asc' ? -1 : 1;\n if (bVal == null) return direction === 'asc' ? 1 : -1;\n\n if (typeof aVal === 'string' && typeof bVal === 'string') {\n return direction === 'asc'\n ? aVal.localeCompare(bVal)\n : bVal.localeCompare(aVal);\n }\n\n if (aVal < bVal) return direction === 'asc' ? -1 : 1;\n if (aVal > bVal) return direction === 'asc' ? 1 : -1;\n return 0;\n });\n });\n\n protected handleHeaderClick(col: TableColumn<T>): void {\n if (col.sortable) {\n this.toggleSort(String(col.key));\n }\n }\n\n toggleSort(column: string): void {\n this.sortState.update(state => {\n if (state.column !== column) {\n return { column, direction: 'asc' };\n }\n if (state.direction === 'asc') {\n return { column, direction: 'desc' };\n }\n return { column: null, direction: null };\n });\n }\n\n private getValueInternal(row: T, key: string): unknown {\n const keys = key.split('.');\n let value: unknown = row;\n for (const k of keys) {\n if (value == null) return undefined;\n value = (value as Record<string, unknown>)[k];\n }\n return value;\n }\n\n}\n","<div class=\"ui-table-container\">\n <table class=\"ui-table\">\n <thead>\n <tr>\n @for (col of columns(); track col.key) {\n <th\n [style.width]=\"col.width\"\n [class.ui-table__th--sortable]=\"col.sortable\"\n (click)=\"handleHeaderClick(col)\"\n >\n <span class=\"ui-table__th-content\">\n {{ col.header }}\n @if (col.sortable) {\n <span class=\"ui-table__sort-icon\">\n @if (sortState().column === col.key) {\n @if (sortState().direction === 'asc') {\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 24 24\" fill=\"currentColor\">\n <path d=\"M7 14l5-5 5 5H7z\"/>\n </svg>\n } @else if (sortState().direction === 'desc') {\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 24 24\" fill=\"currentColor\">\n <path d=\"M7 10l5 5 5-5H7z\"/>\n </svg>\n }\n } @else {\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 24 24\" fill=\"currentColor\" opacity=\"0.3\">\n <path d=\"M7 10l5-5 5 5H7zm0 4l5 5 5-5H7z\"/>\n </svg>\n }\n </span>\n }\n </span>\n </th>\n }\n </tr>\n </thead>\n <tbody>\n @for (row of sortedData(); track trackByFn()(row); let i = $index) {\n <tr>\n @for (col of columns(); track col.key) {\n @let colKey = $any(col.key);\n <td>\n @if (cellTemplateMap().get(colKey); as template) {\n <ng-container *ngTemplateOutlet=\"template; context: { $implicit: row, row: row, index: i, value: row | cellValue:colKey }\" />\n } @else {\n {{ row | cellValue:colKey }}\n }\n </td>\n }\n </tr>\n } @empty {\n <tr>\n <td [attr.colspan]=\"columns().length\" class=\"ui-table__empty\">\n <ng-content select=\"[slot=empty]\">No data available</ng-content>\n </td>\n </tr>\n }\n </tbody>\n </table>\n</div>\n","import {\n Component,\n input,\n signal,\n output,\n ChangeDetectionStrategy,\n ElementRef,\n inject,\n} from '@angular/core';\n\n@Component({\n selector: 'ui-option',\n standalone: true,\n templateUrl: './option.component.html',\n styleUrl: './option.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class OptionComponent<T = unknown> {\n readonly value = input<T | null>(null);\n readonly disabled = input(false);\n\n /** Internal state managed by SelectComponent */\n readonly selected = signal(false);\n readonly focused = signal(false);\n readonly multiple = signal(false);\n readonly deletable = signal(false);\n\n /** Emitted when delete button is clicked */\n readonly deleteClicked = output<T>();\n\n readonly elementRef = inject(ElementRef);\n\n /** Get the text content for display and search */\n getLabel(): string {\n return this.elementRef.nativeElement.textContent?.trim() || '';\n }\n\n onDelete(event: MouseEvent): void {\n event.stopPropagation();\n const val = this.value();\n if (val !== null) {\n this.deleteClicked.emit(val as T);\n }\n }\n}\n","<div\n class=\"ui-option\"\n [class.ui-option--selected]=\"selected()\"\n [class.ui-option--disabled]=\"disabled()\"\n [class.ui-option--focused]=\"focused()\"\n [class.ui-option--deletable]=\"deletable()\"\n [attr.role]=\"'option'\"\n [attr.aria-selected]=\"selected()\"\n [attr.aria-disabled]=\"disabled()\"\n>\n @if (multiple() && selected()) {\n <svg class=\"ui-option__check\" width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\">\n <polyline points=\"20 6 9 17 4 12\"></polyline>\n </svg>\n }\n <span class=\"ui-option__content\">\n <ng-content />\n </span>\n @if (deletable()) {\n <button\n type=\"button\"\n class=\"ui-option__delete\"\n (click)=\"onDelete($event)\"\n aria-label=\"Delete option\"\n >\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\">\n <line x1=\"18\" y1=\"6\" x2=\"6\" y2=\"18\"></line>\n <line x1=\"6\" y1=\"6\" x2=\"18\" y2=\"18\"></line>\n </svg>\n </button>\n }\n</div>\n","import { Directive, TemplateRef, inject } from '@angular/core';\n\nexport interface OptionTemplateContext<T> {\n $implicit: T;\n option: T;\n selected: boolean;\n disabled: boolean;\n}\n\n@Directive({\n selector: '[uiOptionTemplate]',\n standalone: true,\n})\nexport class OptionTemplateDirective<T = unknown> {\n readonly templateRef = inject(TemplateRef<OptionTemplateContext<T>>);\n}\n","import {\n Component,\n input,\n model,\n output,\n signal,\n computed,\n contentChildren,\n contentChild,\n ChangeDetectionStrategy,\n ElementRef,\n inject,\n effect,\n HostListener,\n AfterContentInit,\n OnDestroy,\n ViewChild,\n} from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { DOCUMENT, NgTemplateOutlet } from '@angular/common';\nimport { OptionComponent } from './option.component';\nimport { OptionTemplateDirective } from './option-template.directive';\n\nexport type SelectVariant = 'default' | 'outlined' | 'filled';\nexport type SelectSize = 'sm' | 'md' | 'lg';\n\nexport interface AsyncSelectOption<T = unknown> {\n value: T;\n label: string;\n disabled?: boolean;\n}\n\nexport type AsyncSearchFn<T> = (query: string) => Promise<AsyncSelectOption<T>[]>;\n\n@Component({\n selector: 'ui-select',\n standalone: true,\n imports: [FormsModule, NgTemplateOutlet],\n templateUrl: './select.component.html',\n styleUrl: './select.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class SelectComponent<T = unknown> implements AfterContentInit, OnDestroy {\n // Inputs\n readonly variant = input<SelectVariant>('default');\n readonly size = input<SelectSize>('md');\n readonly placeholder = input('Select an option');\n readonly label = input('');\n readonly hint = input('');\n readonly error = input('');\n readonly disabled = input(false);\n readonly multiple = input(false);\n readonly searchable = input(false);\n readonly clearable = input(false);\n readonly creatable = input(false);\n readonly deletable = input(false);\n readonly selectable = input(true);\n\n // Async search inputs\n readonly asyncSearch = input<AsyncSearchFn<T> | null>(null);\n readonly debounceTime = input(300);\n readonly minSearchLength = input(0);\n readonly initialLoad = input(false);\n readonly initialOptions = input<AsyncSelectOption<T>[]>([]);\n readonly defaultOptions = input<AsyncSelectOption<T>[]>([]);\n readonly cacheAsyncResults = input(false);\n\n // Two-way binding\n readonly value = model<T | T[] | null>(null);\n\n // Outputs\n readonly opened = output<void>();\n readonly closed = output<void>();\n readonly created = output<string>();\n readonly deleted = output<T>();\n\n // Content children\n readonly options = contentChildren(OptionComponent);\n readonly optionTemplate = contentChild(OptionTemplateDirective);\n\n // View children for dropdown portal\n @ViewChild('triggerRef', { static: true }) triggerRef!: ElementRef<HTMLElement>;\n @ViewChild('dropdownRef', { static: true }) dropdownRef!: ElementRef<HTMLElement>;\n @ViewChild('searchInput') searchInputRef?: ElementRef<HTMLInputElement>;\n\n // Internal state\n readonly isOpen = signal(false);\n readonly searchQuery = signal('');\n readonly focusedIndex = signal(-1);\n\n // Async state\n readonly asyncLoading = signal(false);\n readonly asyncOptions = signal<AsyncSelectOption<T>[]>([]);\n readonly asyncError = signal<string | null>(null);\n private asyncSearchAbortController: AbortController | null = null;\n private debounceTimer: ReturnType<typeof setTimeout> | null = null;\n private asyncCache = new Map<string, AsyncSelectOption<T>[]>();\n\n private readonly elementRef = inject(ElementRef);\n private readonly document = inject(DOCUMENT);\n private positionCleanup: (() => void) | null = null;\n private readonly initializedOptions = new WeakSet<OptionComponent<T>>();\n\n constructor() {\n // Sync selected state to options\n effect(() => {\n const currentValue = this.value();\n const opts = this.options();\n const isMultiple = this.multiple();\n const isDeletable = this.deletable();\n\n opts.forEach((opt) => {\n opt.multiple.set(isMultiple);\n opt.deletable.set(isDeletable);\n if (isMultiple && Array.isArray(currentValue)) {\n opt.selected.set(currentValue.includes(opt.value()));\n } else {\n opt.selected.set(opt.value() === currentValue);\n }\n });\n });\n\n // Sync focused state and visibility for search filtering\n effect(() => {\n const query = this.searchQuery().toLowerCase().trim();\n const index = this.focusedIndex();\n const opts = this.options();\n\n let visibleIndex = 0;\n opts.forEach((opt) => {\n const label = opt.getLabel().toLowerCase();\n const isVisible = !query || label.includes(query);\n opt.elementRef.nativeElement.style.display = isVisible ? '' : 'none';\n\n if (isVisible) {\n opt.focused.set(visibleIndex === index);\n visibleIndex++;\n } else {\n opt.focused.set(false);\n }\n });\n });\n\n // Set up handlers when options change (for dynamically added options)\n effect(() => {\n this.options(); // track changes\n this.setupOptionHandlers();\n });\n\n // Initial options for async search\n effect(() => {\n const opts = this.initialOptions();\n if (opts.length > 0) {\n this.asyncOptions.set(opts);\n }\n });\n\n // Initial load for async search\n effect(() => {\n if (this.initialLoad() && this.asyncSearch()) {\n this.executeAsyncSearch('');\n }\n });\n }\n\n ngAfterContentInit(): void {\n // Initial setup handled by effect\n }\n\n private setupOptionHandlers(): void {\n // Set up click handlers on new options\n this.options().forEach((opt) => {\n if (this.initializedOptions.has(opt)) return;\n this.initializedOptions.add(opt);\n\n opt.elementRef.nativeElement.addEventListener('click', (event: MouseEvent) => {\n this.selectOption(opt, event);\n });\n opt.deleteClicked.subscribe((value: T) => {\n this.deleteOption(value);\n });\n });\n }\n\n ngOnDestroy(): void {\n const dropdown = this.dropdownRef?.nativeElement;\n if (dropdown?.parentElement === this.document.body) {\n this.document.body.removeChild(dropdown);\n }\n this.removePositionListeners();\n this.cancelAsyncSearch();\n }\n\n protected readonly triggerClasses = computed(() => {\n return `ui-select__trigger--${this.variant()} ui-select__trigger--${this.size()}`;\n });\n\n protected readonly hasValue = computed(() => {\n const val = this.value();\n if (this.multiple()) {\n return Array.isArray(val) && val.length > 0;\n }\n return val !== null && val !== undefined;\n });\n\n protected readonly displayValue = computed(() => {\n const val = this.value();\n const opts = this.options();\n const asyncOpts = this.asyncOptions();\n const isAsync = this.isAsyncMode();\n\n if (this.multiple() && Array.isArray(val)) {\n if (val.length === 0) return '';\n const labels = val.map((v) => {\n if (isAsync) {\n const asyncOpt = asyncOpts.find((o) => o.value === v);\n if (asyncOpt) return asyncOpt.label;\n }\n const opt = opts.find((o) => o.value() === v);\n return opt?.getLabel() || String(v);\n });\n return labels.join(', ');\n }\n\n if (val === null || val === undefined) return '';\n\n if (isAsync) {\n const asyncOpt = asyncOpts.find((o) => o.value === val);\n if (asyncOpt) return asyncOpt.label;\n }\n const opt = opts.find((o) => o.value() === val);\n return opt?.getLabel() || String(val);\n });\n\n protected readonly inputPlaceholder = computed(() => {\n if (!this.selectable()) {\n const opts = this.options();\n const labels = opts.map((o) => o.getLabel());\n if (labels.length > 0) {\n return `${labels.join(', ')}, (${this.placeholder()})`;\n }\n }\n return this.displayValue() || this.placeholder();\n });\n\n protected readonly isAsyncMode = computed(() => this.asyncSearch() !== null);\n\n protected readonly visibleOptions = computed(() => {\n // In async mode, don't filter content children - they're not used\n if (this.isAsyncMode()) return [];\n\n const query = this.searchQuery().toLowerCase().trim();\n const opts = this.options();\n\n if (!query) return [...opts];\n\n return opts.filter((opt) => {\n const label = opt.getLabel().toLowerCase();\n return label.includes(query);\n });\n });\n\n protected readonly visibleAsyncOptions = computed(() => {\n if (!this.isAsyncMode()) return [];\n const asyncOpts = this.asyncOptions();\n const query = this.searchQuery().trim();\n // Show default options when no search query and no async results\n if (!query && asyncOpts.length === 0) {\n return this.defaultOptions();\n }\n return asyncOpts;\n });\n\n protected readonly exactMatchExists = computed(() => {\n const query = this.searchQuery().toLowerCase().trim();\n if (!query) return true;\n\n if (this.isAsyncMode()) {\n return this.asyncOptions().some((opt) => opt.label.toLowerCase() === query);\n }\n return this.options().some((opt) => opt.getLabel().toLowerCase() === query);\n });\n\n protected readonly totalVisibleCount = computed(() => {\n if (this.isAsyncMode()) {\n return this.visibleAsyncOptions().length;\n }\n return this.visibleOptions().length;\n });\n\n @HostListener('document:click', ['$event'])\n onDocumentClick(event: MouseEvent): void {\n const target = event.target as Node;\n if (\n !this.elementRef.nativeElement.contains(target) &&\n !this.dropdownRef?.nativeElement?.contains(target)\n ) {\n this.close();\n }\n }\n\n toggle(): void {\n if (this.disabled()) return;\n if (this.searchable()) {\n // In combobox mode, clicking trigger always opens\n if (!this.isOpen()) {\n this.open();\n }\n } else {\n if (this.isOpen()) {\n this.close();\n } else {\n this.open();\n }\n }\n }\n\n open(): void {\n if (this.disabled() || this.isOpen()) return;\n this.isOpen.set(true);\n this.searchQuery.set('');\n this.focusedIndex.set(-1);\n this.opened.emit();\n this.portalDropdown();\n\n if (this.searchable()) {\n setTimeout(() => {\n const input = this.searchInputRef?.nativeElement;\n if (input) {\n input.focus();\n // Only select if there's text to select, avoids racing with user input\n if (input.value) {\n input.select();\n }\n }\n });\n }\n }\n\n close(): void {\n if (!this.isOpen()) return;\n this.unportalDropdown();\n this.isOpen.set(false);\n this.searchQuery.set('');\n this.focusedIndex.set(-1);\n this.closed.emit();\n\n // Clean up async state\n this.cancelAsyncSearch();\n this.asyncLoading.set(false);\n this.asyncError.set(null);\n // Keep asyncOptions so displayValue still works after selection\n }\n\n private cancelAsyncSearch(): void {\n if (this.debounceTimer) {\n clearTimeout(this.debounceTimer);\n this.debounceTimer = null;\n }\n if (this.asyncSearchAbortController) {\n this.asyncSearchAbortController.abort();\n this.asyncSearchAbortController = null;\n }\n }\n\n clearAsyncCache(): void {\n this.asyncCache.clear();\n }\n\n selectOption(option: OptionComponent<T>, event?: MouseEvent): void {\n event?.stopPropagation();\n\n if (option.disabled()) return;\n if (!this.selectable()) return;\n\n const optionValue = option.value();\n if (optionValue === null) return;\n\n if (this.multiple()) {\n const currentValue = (this.value() as T[]) || [];\n const index = currentValue.indexOf(optionValue);\n\n let newValue: T[];\n if (index === -1) {\n newValue = [...currentValue, optionValue];\n } else {\n newValue = currentValue.filter((_, i) => i !== index);\n }\n\n this.value.set(newValue);\n // In multiple+searchable mode, clear search and refocus input\n if (this.searchable()) {\n this.searchQuery.set('');\n this.focusedIndex.set(-1);\n setTimeout(() => this.searchInputRef?.nativeElement?.focus());\n }\n } else {\n this.value.set(optionValue);\n this.close();\n }\n }\n\n clear(event: MouseEvent): void {\n event.stopPropagation();\n if (this.multiple()) {\n this.value.set([]);\n } else {\n this.value.set(null);\n }\n }\n\n selectAsyncOption(option: AsyncSelectOption<T>, event?: MouseEvent): void {\n event?.stopPropagation();\n\n if (option.disabled) return;\n if (!this.selectable()) return;\n\n const optionValue = option.value;\n\n if (this.multiple()) {\n const currentValue = (this.value() as T[]) || [];\n const index = currentValue.indexOf(optionValue);\n\n let newValue: T[];\n if (index === -1) {\n newValue = [...currentValue, optionValue];\n } else {\n newValue = currentValue.filter((_, i) => i !== index);\n }\n\n this.value.set(newValue);\n // In multiple+searchable mode, clear search and refocus input\n if (this.searchable()) {\n this.searchQuery.set('');\n this.focusedIndex.set(-1);\n this.asyncOptions.set([]);\n setTimeout(() => this.searchInputRef?.nativeElement?.focus());\n }\n } else {\n this.value.set(optionValue);\n this.close();\n }\n }\n\n isAsyncOptionSelected(option: AsyncSelectOption<T>): boolean {\n const val = this.value();\n if (this.multiple() && Array.isArray(val)) {\n return val.includes(option.value);\n }\n return val === option.value;\n }\n\n deleteOption(optionValue: T): void {\n // Remove from selection if selected\n if (this.multiple()) {\n const currentValue = (this.value() as T[]) || [];\n if (currentValue.includes(optionValue)) {\n this.value.set(currentValue.filter((v) => v !== optionValue));\n }\n } else if (this.value() === optionValue) {\n this.value.set(null);\n }\n this.deleted.emit(optionValue);\n }\n\n protected handleTriggerKeydown(event: KeyboardEvent): void {\n switch (event.key) {\n case 'Enter':\n case ' ':\n event.preventDefault();\n if (this.isOpen()) {\n this.selectFocusedOption();\n } else {\n this.open();\n }\n break;\n case 'ArrowDown':\n event.preventDefault();\n if (!this.isOpen()) {\n this.open();\n } else {\n this.focusNext();\n }\n break;\n case 'ArrowUp':\n event.preventDefault();\n if (this.isOpen()) {\n this.focusPrevious();\n }\n break;\n case 'Escape':\n event.preventDefault();\n this.close();\n break;\n case 'Tab':\n this.close();\n break;\n }\n }\n\n protected handleSearchInputKeydown(event: KeyboardEvent): void {\n // Stop propagation so the trigger's keydown handler doesn't\n // interfere (e.g. space would otherwise preventDefault).\n event.stopPropagation();\n switch (event.key) {\n case 'ArrowDown':\n event.preventDefault();\n if (!this.isOpen()) {\n this.open();\n } else {\n this.focusNext();\n }\n break;\n case 'ArrowUp':\n event.preventDefault();\n if (this.isOpen()) {\n this.focusPrevious();\n }\n break;\n case 'Enter':\n event.preventDefault();\n if (this.isOpen()) {\n const focusedIdx = this.focusedIndex();\n\n if (focusedIdx >= 0) {\n this.selectFocusedOption();\n } else if (this.totalVisibleCount() === 1) {\n // Auto-select single visible option\n if (this.isAsyncMode()) {\n const asyncOpts = this.visibleAsyncOptions();\n if (asyncOpts.length === 1) {\n this.selectAsyncOption(asyncOpts[0]);\n }\n } else {\n const visible = this.visibleOptions();\n if (visible.length === 1) {\n this.selectOption(visible[0]);\n }\n }\n } else if (this.creatable() && this.searchQuery().trim() && !this.exactMatchExists()) {\n this.handleCreate();\n }\n } else {\n this.open();\n }\n break;\n case 'Escape':\n event.preventDefault();\n this.close();\n break;\n case 'Tab':\n this.close();\n break;\n }\n }\n\n private selectFocusedOption(): void {\n const focusedIdx = this.focusedIndex();\n if (focusedIdx < 0) return;\n\n if (this.isAsyncMode()) {\n const asyncOpts = this.visibleAsyncOptions();\n const focused = asyncOpts[focusedIdx];\n if (focused) {\n this.selectAsyncOption(focused);\n }\n } else {\n const focused = this.visibleOptions()[focusedIdx];\n if (focused) {\n this.selectOption(focused);\n }\n }\n }\n\n protected onSearchInput(value: string): void {\n this.searchQuery.set(value);\n\n if (!this.isOpen()) {\n this.isOpen.set(true);\n this.focusedIndex.set(-1);\n this.opened.emit();\n this.portalDropdown();\n }\n\n if (this.isAsyncMode()) {\n this.triggerAsyncSearch(value);\n } else {\n // Auto-highlight when exactly one option is visible\n const visible = this.visibleOptions();\n this.focusedIndex.set(visible.length === 1 ? 0 : -1);\n }\n }\n\n private triggerAsyncSearch(query: string): void {\n // Clear previous debounce timer\n if (this.debounceTimer) {\n clearTimeout(this.debounceTimer);\n this.debounceTimer = null;\n }\n\n // Cancel previous request\n if (this.asyncSearchAbortController) {\n this.asyncSearchAbortController.abort();\n this.asyncSearchAbortController = null;\n }\n\n const trimmedQuery = query.trim();\n\n // Check minimum search length\n if (trimmedQuery.length < this.minSearchLength()) {\n this.asyncOptions.set([]);\n this.asyncLoading.set(false);\n this.asyncError.set(null);\n this.focusedIndex.set(-1);\n return;\n }\n\n // Set loading state immediately for visual feedback\n this.asyncLoading.set(true);\n this.asyncError.set(null);\n\n // Debounce the actual search\n this.debounceTimer = setTimeout(() => {\n this.executeAsyncSearch(trimmedQuery);\n }, this.debounceTime());\n }\n\n private async executeAsyncSearch(query: string): Promise<void> {\n const searchFn = this.asyncSearch();\n if (!searchFn) return;\n\n // Check cache first if caching is enabled\n if (this.cacheAsyncResults() && this.asyncCache.has(query)) {\n const cachedResults = this.asyncCache.get(query)!;\n this.asyncOptions.set(cachedResults);\n this.asyncLoading.set(false);\n this.asyncError.set(null);\n this.focusedIndex.set(cachedResults.length > 0 ? 0 : -1);\n return;\n }\n\n this.asyncSearchAbortController = new AbortController();\n const signal = this.asyncSearchAbortController.signal;\n\n try {\n const results = await searchFn(query);\n\n // Check if request was aborted\n if (signal.aborted) return;\n\n // Store in cache if caching is enabled\n if (this.cacheAsyncResults()) {\n this.asyncCache.set(query, results);\n }\n\n this.asyncOptions.set(results);\n this.asyncLoading.set(false);\n this.asyncError.set(null);\n\n // Auto-highlight first option if results exist\n this.focusedIndex.set(results.length > 0 ? 0 : -1);\n } catch (error) {\n // Ignore abort errors\n if (signal.aborted) return;\n\n this.asyncOptions.set([]);\n this.asyncLoading.set(false);\n this.asyncError.set(error instanceof Error ? error.message : 'Search failed');\n this.focusedIndex.set(-1);\n }\n }\n\n protected handleCreate(): void {\n const query = this.searchQuery().trim();\n if (!query) return;\n this.created.emit(query);\n this.searchQuery.set('');\n this.close();\n }\n\n private focusNext(): void {\n const current = this.focusedIndex();\n\n if (this.isAsyncMode()) {\n const opts = this.visibleAsyncOptions();\n let next = current + 1;\n\n while (next < opts.length && opts[next].disabled) {\n next++;\n }\n\n if (next < opts.length) {\n this.focusedIndex.set(next);\n this.scrollToFocusedAsync(next);\n }\n } else {\n const opts = this.visibleOptions();\n let next = current + 1;\n\n while (next < opts.length && opts[next].disabled()) {\n next++;\n }\n\n if (next < opts.length) {\n this.focusedIndex.set(next);\n this.scrollToFocused();\n }\n }\n }\n\n private focusPrevious(): void {\n const current = this.focusedIndex();\n\n if (this.isAsyncMode()) {\n const opts = this.visibleAsyncOptions();\n let prev = current - 1;\n\n while (prev >= 0 && opts[prev].disabled) {\n prev--;\n }\n\n if (prev >= 0) {\n this.focusedIndex.set(prev);\n this.scrollToFocusedAsync(prev);\n }\n } else {\n const opts = this.visibleOptions();\n let prev = current - 1;\n\n while (prev >= 0 && opts[prev].disabled()) {\n prev--;\n }\n\n if (prev >= 0) {\n this.focusedIndex.set(prev);\n this.scrollToFocused();\n }\n }\n }\n\n private scrollToFocused(): void {\n const focused = this.visibleOptions()[this.focusedIndex()];\n if (focused) {\n focused.elementRef.nativeElement.scrollIntoView({ block: 'nearest' });\n }\n }\n\n private scrollToFocusedAsync(index: number): void {\n const dropdown = this.dropdownRef?.nativeElement;\n if (!dropdown) return;\n\n const optionElements = dropdown.querySelectorAll('.ui-async-option');\n const focusedElement = optionElements[index] as HTMLElement | undefined;\n if (focusedElement) {\n focusedElement.scrollIntoView({ block: 'nearest' });\n }\n }\n\n private portalDropdown(): void {\n const dropdown = this.dropdownRef?.nativeElement;\n if (!dropdown) return;\n\n dropdown.style.display = 'block';\n this.document.body.appendChild(dropdown);\n this.updateDropdownPosition();\n this.addPositionListeners();\n }\n\n private unportalDropdown(): void {\n const dropdown = this.dropdownRef?.nativeElement;\n if (!dropdown) return;\n\n if (dropdown.parentElement === this.document.body) {\n const wrapper = this.elementRef.nativeElement.querySelector('.ui-select-wrapper');\n if (wrapper) {\n wrapper.appendChild(dropdown);\n }\n }\n\n dropdown.style.display = '';\n dropdown.style.position = '';\n dropdown.style.top = '';\n dropdown.style.left = '';\n dropdown.style.bottom = '';\n dropdown.style.width = '';\n dropdown.style.zIndex = '';\n dropdown.style.margin = '';\n\n this.removePositionListeners();\n }\n\n private updateDropdownPosition(): void {\n const trigger = this.triggerRef?.nativeElement;\n const dropdown = this.dropdownRef?.nativeElement;\n if (!trigger || !dropdown) return;\n\n const triggerRect = trigger.getBoundingClientRect();\n const dropdownHeight = dropdown.scrollHeight;\n const gap = 4;\n const spaceBelow = window.innerHeight - triggerRect.bottom;\n const spaceAbove = triggerRect.top;\n const openAbove = spaceBelow < dropdownHeight + gap && spaceAbove > spaceBelow;\n\n dropdown.style.position = 'fixed';\n dropdown.style.width = `${triggerRect.width}px`;\n dropdown.style.left = `${triggerRect.left}px`;\n dropdown.style.zIndex = '99999';\n dropdown.style.margin = '0';\n\n if (openAbove) {\n dropdown.style.top = 'auto';\n dropdown.style.bottom = `${window.innerHeight - triggerRect.top + gap}px`;\n } else {\n dropdown.style.top = `${triggerRect.bottom + gap}px`;\n dropdown.style.bottom = 'auto';\n }\n }\n\n private addPositionListeners(): void {\n const update = () => {\n if (this.isOpen()) {\n this.updateDropdownPosition();\n }\n };\n window.addEventListener('scroll', update, true);\n window.addEventListener('resize', update);\n this.positionCleanup = () => {\n window.removeEventListener('scroll', update, true);\n window.removeEventListener('resize', update);\n };\n }\n\n private removePositionListeners(): void {\n this.positionCleanup?.();\n this.positionCleanup = null;\n }\n}\n","<div\n class=\"ui-select-wrapper\"\n [class.ui-select-wrapper--error]=\"error()\"\n [class.ui-select-wrapper--disabled]=\"disabled()\"\n [class.ui-select-wrapper--open]=\"isOpen()\"\n>\n @if (label()) {\n <label class=\"ui-select__label\">\n {{ label() }}\n </label>\n }\n\n <div\n #triggerRef\n class=\"ui-select__trigger\"\n [class]=\"triggerClasses()\"\n [attr.role]=\"'combobox'\"\n [attr.aria-expanded]=\"isOpen()\"\n [attr.aria-haspopup]=\"'listbox'\"\n [attr.aria-disabled]=\"disabled()\"\n [attr.tabindex]=\"searchable() ? -1 : (disabled() ? -1 : 0)\"\n (click)=\"toggle()\"\n (keydown)=\"handleTriggerKeydown($event)\"\n >\n @if (searchable()) {\n <input\n #searchInput\n type=\"text\"\n class=\"ui-select__input\"\n [placeholder]=\"inputPlaceholder()\"\n [value]=\"isOpen() ? searchQuery() : (selectable() ? displayValue() : '')\"\n [disabled]=\"disabled()\"\n (input)=\"onSearchInput($any($event.target).value)\"\n (keydown)=\"handleSearchInputKeydown($event)\"\n (focus)=\"toggle()\"\n autocomplete=\"off\"\n />\n } @else {\n <span class=\"ui-select__value\">\n @if (displayValue()) {\n {{ displayValue() }}\n } @else {\n <span class=\"ui-select__placeholder\">{{ placeholder() }}</span>\n }\n </span>\n }\n\n <div class=\"ui-select__icons\">\n @if (clearable() && hasValue() && !disabled()) {\n <button\n type=\"button\"\n class=\"ui-select__clear\"\n (click)=\"clear($event)\"\n aria-label=\"Clear selection\"\n >\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\">\n <line x1=\"18\" y1=\"6\" x2=\"6\" y2=\"18\"></line>\n <line x1=\"6\" y1=\"6\" x2=\"18\" y2=\"18\"></line>\n </svg>\n </button>\n }\n <svg\n class=\"ui-select__arrow\"\n [class.ui-select__arrow--open]=\"isOpen()\"\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n >\n <polyline points=\"6 9 12 15 18 9\"></polyline>\n </svg>\n </div>\n </div>\n\n <div\n #dropdownRef\n class=\"ui-select__dropdown\"\n [class.ui-select__dropdown--open]=\"isOpen()\"\n [attr.role]=\"'listbox'\"\n [attr.aria-multiselectable]=\"multiple()\"\n >\n <div class=\"ui-select__options\">\n @if (isAsyncMode()) {\n <!-- Async mode: render options from asyncSearch results -->\n @if (asyncLoading()) {\n <div class=\"ui-select__loading\">\n <svg class=\"ui-select__spinner\" width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\">\n <circle cx=\"12\" cy=\"12\" r=\"10\" stroke-opacity=\"0.25\"></circle>\n <path d=\"M12 2a10 10 0 0 1 10 10\" stroke-linecap=\"round\"></path>\n </svg>\n <span>Searching...</span>\n </div>\n } @else if (asyncError()) {\n <div class=\"ui-select__error-message\">\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\">\n <circle cx=\"12\" cy=\"12\" r=\"10\"></circle>\n <line x1=\"12\" y1=\"8\" x2=\"12\" y2=\"12\"></line>\n <line x1=\"12\" y1=\"16\" x2=\"12.01\" y2=\"16\"></line>\n </svg>\n <span>{{ asyncError() }}</span>\n </div>\n } @else {\n @for (option of visibleAsyncOptions(); track option.value; let i = $index) {\n <div\n class=\"ui-async-option\"\n [class.ui-async-option--selected]=\"isAsyncOptionSelected(option)\"\n [class.ui-async-option--disabled]=\"option.disabled\"\n [class.ui-async-option--focused]=\"focusedIndex() === i\"\n [attr.role]=\"'option'\"\n [attr.aria-selected]=\"isAsyncOptionSelected(option)\"\n [attr.aria-disabled]=\"option.disabled\"\n (click)=\"selectAsyncOption(option, $event)\"\n >\n @if (multiple() && isAsyncOptionSelected(option)) {\n <svg class=\"ui-async-option__check\" width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\">\n <polyline points=\"20 6 9 17 4 12\"></polyline>\n </svg>\n }\n <span class=\"ui-async-option__content\">\n @if (optionTemplate(); as tpl) {\n <ng-container *ngTemplateOutlet=\"tpl.templateRef; context: { $implicit: option.value, option: option.value, selected: isAsyncOptionSelected(option), disabled: !!option.disabled }\"></ng-container>\n } @else {\n {{ option.label }}\n }\n </span>\n </div>\n }\n @if (visibleAsyncOptions().length === 0 && searchQuery().trim().length >= minSearchLength()) {\n <div class=\"ui-select__empty\">No results found</div>\n }\n @if (searchQuery().trim().length < minSearchLength() && minSearchLength() > 0) {\n <div class=\"ui-select__empty\">Type at least {{ minSearchLength() }} characters to search</div>\n }\n }\n } @else {\n <!-- Static mode: render content children -->\n <ng-content />\n @if (visibleOptions().length === 0 && !(creatable() && searchQuery().trim())) {\n <div class=\"ui-select__empty\">No options found</div>\n }\n }\n </div>\n @if (creatable() && searchQuery().trim() && !exactMatchExists()) {\n <div\n class=\"ui-select__create\"\n (click)=\"handleCreate()\"\n >\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\">\n <line x1=\"12\" y1=\"5\" x2=\"12\" y2=\"19\"></line>\n <line x1=\"5\" y1=\"12\" x2=\"19\" y2=\"12\"></line>\n </svg>\n Create \"{{ searchQuery().trim() }}\"\n </div>\n }\n </div>\n\n @if (error()) {\n <span class=\"ui-select__error\">{{ error() }}</span>\n }\n @if (hint() && !error()) {\n <span class=\"ui-select__hint\">{{ hint() }}</span>\n }\n</div>\n","import { Directive, ElementRef, inject, output } from '@angular/core';\n\n@Directive({\n selector: '[uiDropdownTrigger]',\n standalone: true,\n host: {\n '(click)': 'toggleDropdown.emit()',\n '(keydown.enter)': 'toggleDropdown.emit()',\n '(keydown.space)': 'toggleDropdown.emit(); $event.preventDefault()',\n '(keydown.arrowDown)': 'openDropdown.emit(); $event.preventDefault()',\n '[attr.aria-haspopup]': '\"menu\"',\n },\n})\nexport class DropdownTriggerDirective {\n readonly elementRef = inject(ElementRef);\n\n readonly toggleDropdown = output<void>();\n readonly openDropdown = output<void>();\n}\n","import {\n Component,\n input,\n output,\n signal,\n ChangeDetectionStrategy,\n ElementRef,\n inject,\n} from '@angular/core';\n\n@Component({\n selector: 'ui-dropdown-item',\n standalone: true,\n templateUrl: './dropdown-item.component.html',\n styleUrl: './dropdown-item.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class DropdownItemComponent {\n readonly disabled = input(false);\n readonly icon = input<string>('');\n\n readonly clicked = output<void>();\n\n /** Internal state managed by DropdownComponent */\n readonly focused = signal(false);\n\n readonly elementRef = inject(ElementRef);\n\n protected handleClick(event: MouseEvent): void {\n if (this.disabled()) {\n event.preventDefault();\n event.stopPropagation();\n return;\n }\n this.clicked.emit();\n }\n\n protected handleKeydown(event: KeyboardEvent): void {\n if (event.key === 'Enter' || event.key === ' ') {\n event.preventDefault();\n if (!this.disabled()) {\n this.clicked.emit();\n }\n }\n }\n}\n","<div\n class=\"ui-dropdown-item\"\n [class.ui-dropdown-item--disabled]=\"disabled()\"\n [class.ui-dropdown-item--focused]=\"focused()\"\n [attr.role]=\"'menuitem'\"\n [attr.aria-disabled]=\"disabled()\"\n [attr.tabindex]=\"disabled() ? -1 : 0\"\n (click)=\"handleClick($event)\"\n (keydown)=\"handleKeydown($event)\"\n>\n @if (icon()) {\n <span class=\"ui-dropdown-item__icon\">\n <ng-content select=\"[slot=icon]\" />\n </span>\n }\n <span class=\"ui-dropdown-item__content\">\n <ng-content />\n </span>\n</div>\n","import {\n Component,\n input,\n signal,\n contentChild,\n contentChildren,\n ChangeDetectionStrategy,\n ElementRef,\n inject,\n effect,\n HostListener,\n OnDestroy,\n ViewChild,\n} from '@angular/core';\nimport { DOCUMENT } from '@angular/common';\nimport { DropdownTriggerDirective } from './dropdown-trigger.directive';\nimport { DropdownItemComponent } from './dropdown-item.component';\n\nexport type DropdownPosition = 'bottom-start' | 'bottom-end' | 'top-start' | 'top-end';\nexport type DropdownAlign = 'start' | 'end';\n\n@Component({\n selector: 'ui-dropdown',\n standalone: true,\n templateUrl: './dropdown.component.html',\n styleUrl: './dropdown.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class DropdownComponent implements OnDestroy {\n readonly position = input<DropdownPosition>('bottom-start');\n readonly closeOnSelect = input(true);\n readonly matchTriggerWidth = input(false);\n\n readonly isOpen = signal(false);\n readonly focusedIndex = signal(-1);\n\n @ViewChild('triggerRef', { static: true }) triggerRef!: ElementRef<HTMLElement>;\n @ViewChild('menuRef', { static: true }) menuRef!: ElementRef<HTMLElement>;\n\n private readonly elementRef = inject(ElementRef);\n private readonly document = inject(DOCUMENT);\n private positionCleanup: (() => void) | null = null;\n private contextMenuPosition: { x: number; y: number } | null = null;\n\n readonly trigger = contentChild(DropdownTriggerDirective);\n readonly items = contentChildren(DropdownItemComponent);\n\n constructor() {\n // Connect trigger events\n effect(() => {\n const triggerRef = this.trigger();\n if (triggerRef) {\n triggerRef.toggleDropdown.subscribe(() => this.toggle());\n triggerRef.openDropdown.subscribe(() => this.open());\n }\n });\n\n // Handle item clicks\n effect(() => {\n const menuItems = this.items();\n menuItems.forEach((item) => {\n item.clicked.subscribe(() => {\n if (this.closeOnSelect()) {\n this.close();\n }\n });\n });\n });\n\n // Sync focused state\n effect(() => {\n const index = this.focusedIndex();\n const menuItems = this.items();\n menuItems.forEach((item, i) => {\n item.focused.set(i === index);\n });\n });\n }\n\n ngOnDestroy(): void {\n const menu = this.menuRef?.nativeElement;\n if (menu?.parentElement === this.document.body) {\n this.document.body.removeChild(menu);\n }\n this.removePositionListeners();\n }\n\n @HostListener('document:click', ['$event'])\n onDocumentClick(event: MouseEvent): void {\n const target = event.target as Node;\n if (\n !this.elementRef.nativeElement.contains(target) &&\n !this.menuRef?.nativeElement?.contains(target)\n ) {\n this.close();\n }\n }\n\n @HostListener('keydown', ['$event'])\n onKeydown(event: KeyboardEvent): void {\n if (!this.isOpen()) return;\n\n switch (event.key) {\n case 'ArrowDown':\n event.preventDefault();\n this.focusNext();\n break;\n case 'ArrowUp':\n event.preventDefault();\n this.focusPrevious();\n break;\n case 'Enter':\n case ' ':\n event.preventDefault();\n const focused = this.items()[this.focusedIndex()];\n if (focused && !focused.disabled()) {\n focused.clicked.emit();\n }\n break;\n case 'Escape':\n event.preventDefault();\n this.close();\n break;\n case 'Tab':\n this.close();\n break;\n }\n }\n\n toggle(): void {\n if (this.isOpen()) {\n this.close();\n } else {\n this.open();\n }\n }\n\n open(): void {\n if (this.isOpen()) return;\n this.contextMenuPosition = null;\n this.isOpen.set(true);\n this.focusedIndex.set(-1);\n this.portalMenu();\n }\n\n /** Opens the dropdown at specific coordinates (for context menus) */\n openAt(x: number, y: number): void {\n if (this.isOpen()) {\n this.close();\n }\n this.contextMenuPosition = { x, y };\n this.isOpen.set(true);\n this.focusedIndex.set(-1);\n this.portalMenu();\n }\n\n close(): void {\n if (!this.isOpen()) return;\n this.unportalMenu();\n this.isOpen.set(false);\n this.focusedIndex.set(-1);\n this.contextMenuPosition = null;\n }\n\n private focusNext(): void {\n const menuItems = this.items();\n const current = this.focusedIndex();\n let next = current + 1;\n\n while (next < menuItems.length && menuItems[next].disabled()) {\n next++;\n }\n\n if (next < menuItems.length) {\n this.focusedIndex.set(next);\n }\n }\n\n private focusPrevious(): void {\n const menuItems = this.items();\n const current = this.focusedIndex();\n let prev = current <= 0 ? menuItems.length - 1 : current - 1;\n\n while (prev >= 0 && menuItems[prev].disabled()) {\n prev--;\n }\n\n if (prev >= 0) {\n this.focusedIndex.set(prev);\n }\n }\n\n private portalMenu(): void {\n const menu = this.menuRef?.nativeElement;\n if (!menu) return;\n\n menu.style.display = 'block';\n this.document.body.appendChild(menu);\n this.updateMenuPosition();\n this.addPositionListeners();\n }\n\n private unportalMenu(): void {\n const menu = this.menuRef?.nativeElement;\n if (!menu) return;\n\n if (menu.parentElement === this.document.body) {\n const wrapper = this.elementRef.nativeElement.querySelector('.ui-dropdown');\n if (wrapper) {\n wrapper.appendChild(menu);\n }\n }\n\n menu.style.display = '';\n menu.style.position = '';\n menu.style.top = '';\n menu.style.left = '';\n menu.style.right = '';\n menu.style.bottom = '';\n menu.style.width = '';\n menu.style.zIndex = '';\n menu.style.margin = '';\n\n this.removePositionListeners();\n }\n\n private updateMenuPosition(): void {\n const menu = this.menuRef?.nativeElement;\n if (!menu) return;\n\n menu.style.position = 'fixed';\n menu.style.zIndex = '99999';\n menu.style.margin = '0';\n\n // Context menu mode: position at cursor\n if (this.contextMenuPosition) {\n const { x, y } = this.contextMenuPosition;\n const menuWidth = menu.scrollWidth;\n const menuHeight = menu.scrollHeight;\n\n // Adjust if menu would go off-screen\n const adjustedX = x + menuWidth > window.innerWidth ? window.innerWidth - menuWidth - 4 : x;\n const adjustedY = y + menuHeight > window.innerHeight ? window.innerHeight - menuHeight - 4 : y;\n\n menu.style.left = `${Math.max(4, adjustedX)}px`;\n menu.style.top = `${Math.max(4, adjustedY)}px`;\n menu.style.right = 'auto';\n menu.style.bottom = 'auto';\n return;\n }\n\n // Standard dropdown mode: position relative to trigger\n const trigger = this.triggerRef?.nativeElement;\n if (!trigger) return;\n\n const triggerRect = trigger.getBoundingClientRect();\n const menuHeight = menu.scrollHeight;\n const gap = 4;\n const spaceBelow = window.innerHeight - triggerRect.bottom;\n const spaceAbove = triggerRect.top;\n const preferTop = this.position().startsWith('top');\n const openAbove = preferTop\n ? spaceAbove >= menuHeight + gap || spaceAbove > spaceBelow\n : spaceBelow < menuHeight + gap && spaceAbove > spaceBelow;\n const alignEnd = this.position().endsWith('end');\n\n if (openAbove) {\n menu.style.top = 'auto';\n menu.style.bottom = `${window.innerHeight - triggerRect.top + gap}px`;\n } else {\n menu.style.top = `${triggerRect.bottom + gap}px`;\n menu.style.bottom = 'auto';\n }\n\n if (alignEnd) {\n menu.style.left = 'auto';\n menu.style.right = `${window.innerWidth - triggerRect.right}px`;\n } else {\n menu.style.left = `${triggerRect.left}px`;\n menu.style.right = 'auto';\n }\n\n if (this.matchTriggerWidth()) {\n menu.style.width = `${triggerRect.width}px`;\n }\n }\n\n private addPositionListeners(): void {\n const update = () => {\n if (this.isOpen()) {\n this.updateMenuPosition();\n }\n };\n window.addEventListener('scroll', update, true);\n window.addEventListener('resize', update);\n this.positionCleanup = () => {\n window.removeEventListener('scroll', update, true);\n window.removeEventListener('resize', update);\n };\n }\n\n private removePositionListeners(): void {\n this.positionCleanup?.();\n this.positionCleanup = null;\n }\n}\n","<div class=\"ui-dropdown\">\n <div #triggerRef class=\"ui-dropdown__trigger\">\n <ng-content select=\"[uiDropdownTrigger]\" />\n </div>\n\n <div\n #menuRef\n class=\"ui-dropdown__menu\"\n [class.ui-dropdown__menu--open]=\"isOpen()\"\n [attr.role]=\"'menu'\"\n >\n <ng-content />\n </div>\n</div>\n","import { Component, ChangeDetectionStrategy } from '@angular/core';\n\n@Component({\n selector: 'ui-dropdown-divider',\n standalone: true,\n templateUrl: './dropdown-divider.component.html',\n styleUrl: './dropdown-divider.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class DropdownDividerComponent {}\n","<div class=\"ui-dropdown-divider\" role=\"separator\"></div>\n","import { Directive, HostListener, input } from '@angular/core';\nimport { DropdownComponent } from './dropdown.component';\n\n@Directive({\n selector: '[uiContextMenu]',\n standalone: true,\n})\nexport class ContextMenuDirective {\n readonly uiContextMenu = input.required<DropdownComponent>();\n\n @HostListener('contextmenu', ['$event'])\n onContextMenu(event: MouseEvent): void {\n event.preventDefault();\n event.stopPropagation();\n this.uiContextMenu().openAt(event.clientX, event.clientY);\n }\n}\n","import { Component, input, model, output, computed, ChangeDetectionStrategy } from '@angular/core';\n\nexport type CheckboxSize = 'sm' | 'md' | 'lg';\n\n@Component({\n selector: 'ui-checkbox',\n standalone: true,\n templateUrl: './checkbox.component.html',\n styleUrl: './checkbox.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class CheckboxComponent {\n readonly size = input<CheckboxSize>('md');\n readonly disabled = input(false);\n readonly indeterminate = input(false);\n\n readonly checked = model(false);\n\n // Check if there's label content\n protected readonly hasLabel = input(true);\n\n protected readonly checkboxClasses = computed(() => {\n return `ui-checkbox--${this.size()}`;\n });\n\n protected handleChange(event: Event): void {\n const target = event.target as HTMLInputElement;\n this.checked.set(target.checked);\n }\n}\n","<label\n class=\"ui-checkbox\"\n [class]=\"checkboxClasses()\"\n [class.ui-checkbox--disabled]=\"disabled()\"\n [class.ui-checkbox--checked]=\"checked()\"\n [class.ui-checkbox--indeterminate]=\"indeterminate()\"\n>\n <input\n type=\"checkbox\"\n class=\"ui-checkbox__input\"\n [checked]=\"checked()\"\n [disabled]=\"disabled()\"\n [indeterminate]=\"indeterminate()\"\n (change)=\"handleChange($event)\"\n />\n <span class=\"ui-checkbox__box\">\n <svg class=\"ui-checkbox__icon ui-checkbox__icon--check\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"3\">\n <polyline points=\"20 6 9 17 4 12\"></polyline>\n </svg>\n <svg class=\"ui-checkbox__icon ui-checkbox__icon--indeterminate\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"3\">\n <line x1=\"5\" y1=\"12\" x2=\"19\" y2=\"12\"></line>\n </svg>\n </span>\n @if (hasLabel()) {\n <span class=\"ui-checkbox__label\">\n <ng-content />\n </span>\n }\n</label>\n","import { Component, input, model, computed, ChangeDetectionStrategy } from '@angular/core';\n\nexport type SwitchSize = 'sm' | 'md' | 'lg';\n\n@Component({\n selector: 'ui-switch',\n standalone: true,\n templateUrl: './switch.component.html',\n styleUrl: './switch.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class SwitchComponent {\n readonly size = input<SwitchSize>('md');\n readonly disabled = input(false);\n\n readonly checked = model(false);\n\n // Check if there's label content\n protected readonly hasLabel = input(true);\n\n protected readonly switchClasses = computed(() => {\n return `ui-switch--${this.size()}`;\n });\n\n protected handleChange(event: Event): void {\n const target = event.target as HTMLInputElement;\n this.checked.set(target.checked);\n }\n}\n","<label\n class=\"ui-switch\"\n [class]=\"switchClasses()\"\n [class.ui-switch--disabled]=\"disabled()\"\n [class.ui-switch--checked]=\"checked()\"\n>\n <input\n type=\"checkbox\"\n class=\"ui-switch__input\"\n [checked]=\"checked()\"\n [disabled]=\"disabled()\"\n (change)=\"handleChange($event)\"\n role=\"switch\"\n [attr.aria-checked]=\"checked()\"\n />\n <span class=\"ui-switch__track\">\n <span class=\"ui-switch__thumb\"></span>\n </span>\n @if (hasLabel()) {\n <span class=\"ui-switch__label\">\n <ng-content />\n </span>\n }\n</label>\n","import { ChangeDetectionStrategy, Component, computed, input, output } from '@angular/core';\n\nexport type BadgeVariant = 'default' | 'primary' | 'success' | 'warning' | 'danger' | 'info';\nexport type BadgeSize = 'sm' | 'md' | 'lg';\n\n@Component({\n selector: 'ui-badge',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n templateUrl: './badge.component.html',\n styleUrl: './badge.component.scss',\n})\nexport class BadgeComponent {\n readonly variant = input<BadgeVariant>('default');\n readonly size = input<BadgeSize>('md');\n readonly rounded = input<boolean>(false);\n readonly removable = input<boolean>(false);\n\n readonly removed = output<void>();\n\n protected readonly badgeClass = computed(() => {\n const classes = ['ui-badge', `ui-badge--${this.variant()}`, `ui-badge--${this.size()}`];\n if (this.rounded()) classes.push('ui-badge--rounded');\n return classes.join(' ');\n });\n\n protected onRemove(event: Event): void {\n event.stopPropagation();\n this.removed.emit();\n }\n}\n","<span [class]=\"badgeClass()\">\n <ng-content />\n @if (removable()) {\n <button type=\"button\" class=\"ui-badge__remove\" (click)=\"onRemove($event)\" aria-label=\"Remove\">\n <svg viewBox=\"0 0 16 16\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\">\n <path d=\"M4 4l8 8M12 4l-8 8\"/>\n </svg>\n </button>\n }\n</span>\n","import { Component, input, model, computed, ChangeDetectionStrategy } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\n\nexport type TextareaResize = 'none' | 'vertical' | 'horizontal' | 'both';\n\n@Component({\n selector: 'ui-textarea',\n standalone: true,\n imports: [FormsModule],\n templateUrl: './textarea.component.html',\n styleUrl: './textarea.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class TextareaComponent {\n readonly label = input<string>('');\n readonly placeholder = input<string>('');\n readonly hint = input<string>('');\n readonly error = input<string>('');\n readonly disabled = input(false);\n readonly readonly = input(false);\n readonly required = input(false);\n readonly rows = input(3);\n readonly maxlength = input<number | null>(null);\n readonly resize = input<TextareaResize>('vertical');\n readonly id = input<string>('');\n\n readonly value = model<string>('');\n\n private static nextId = 0;\n private readonly generatedId = `ui-textarea-${++TextareaComponent.nextId}`;\n\n protected readonly textareaId = computed(() => this.id() || this.generatedId);\n\n protected readonly textareaClass = computed(() => {\n return `ui-textarea ui-textarea--resize-${this.resize()}`;\n });\n\n protected readonly isAtLimit = computed(() => {\n const max = this.maxlength();\n return max !== null && this.value().length >= max;\n });\n}\n","<div class=\"ui-textarea-wrapper\" [class.ui-textarea-wrapper--error]=\"error()\" [class.ui-textarea-wrapper--disabled]=\"disabled()\">\n @if (label()) {\n <label class=\"ui-textarea__label\" [attr.for]=\"textareaId()\">\n {{ label() }}\n @if (required()) {\n <span class=\"ui-textarea__required\">*</span>\n }\n </label>\n }\n <div class=\"ui-textarea__container\">\n <textarea\n [class]=\"textareaClass()\"\n [id]=\"textareaId()\"\n [placeholder]=\"placeholder()\"\n [disabled]=\"disabled()\"\n [readonly]=\"readonly()\"\n [required]=\"required()\"\n [rows]=\"rows()\"\n [attr.maxlength]=\"maxlength()\"\n [(ngModel)]=\"value\"\n ></textarea>\n </div>\n <div class=\"ui-textarea__footer\">\n @if (error()) {\n <span class=\"ui-textarea__error\">{{ error() }}</span>\n } @else if (hint()) {\n <span class=\"ui-textarea__hint\">{{ hint() }}</span>\n } @else {\n <span></span>\n }\n @if (maxlength()) {\n <span class=\"ui-textarea__counter\" [class.ui-textarea__counter--limit]=\"isAtLimit()\">\n {{ value().toString().length }} / {{ maxlength() }}\n </span>\n }\n </div>\n</div>\n","import { Component, input, computed, ChangeDetectionStrategy } from '@angular/core';\n\nexport type ProgressVariant = 'primary' | 'success' | 'warning' | 'danger';\nexport type ProgressSize = 'sm' | 'md' | 'lg';\n\n@Component({\n selector: 'ui-progress',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n templateUrl: './progress.component.html',\n styleUrl: './progress.component.scss',\n})\nexport class ProgressComponent {\n readonly value = input(0);\n readonly variant = input<ProgressVariant>('primary');\n readonly size = input<ProgressSize>('md');\n readonly showLabel = input(false);\n readonly indeterminate = input(false);\n readonly striped = input(false);\n readonly animated = input(false);\n\n protected readonly clampedValue = computed(() => Math.min(100, Math.max(0, this.value())));\n\n protected readonly barWidth = computed(() => {\n if (this.indeterminate()) return '30%';\n return `${this.clampedValue()}%`;\n });\n\n protected readonly trackClass = computed(() => {\n return `ui-progress ui-progress--${this.size()}`;\n });\n\n protected readonly barClass = computed(() => {\n const classes = ['ui-progress__bar', `ui-progress__bar--${this.variant()}`];\n if (this.striped() || this.animated()) classes.push('ui-progress__bar--striped');\n if (this.animated()) classes.push('ui-progress__bar--animated');\n if (this.indeterminate()) classes.push('ui-progress__bar--indeterminate');\n return classes.join(' ');\n });\n}\n","<div [class]=\"trackClass()\" role=\"progressbar\"\n [attr.aria-valuenow]=\"indeterminate() ? null : clampedValue()\"\n [attr.aria-valuemin]=\"indeterminate() ? null : 0\"\n [attr.aria-valuemax]=\"indeterminate() ? null : 100\">\n <div [class]=\"barClass()\" [style.width]=\"barWidth()\">\n @if (showLabel() && !indeterminate()) {\n <span class=\"ui-progress__label\">{{ clampedValue() }}%</span>\n }\n </div>\n</div>\n","import { Component, input, computed, ChangeDetectionStrategy } from '@angular/core';\n\nexport type CircularProgressVariant = 'primary' | 'success' | 'warning' | 'danger';\nexport type CircularProgressSize = 'xs' | 'sm' | 'md' | 'lg' | 'xl';\n\n@Component({\n selector: 'ui-circular-progress',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n templateUrl: './circular-progress.component.html',\n styleUrl: './circular-progress.component.scss',\n})\nexport class CircularProgressComponent {\n readonly value = input(0);\n readonly variant = input<CircularProgressVariant>('primary');\n readonly size = input<CircularProgressSize>('md');\n readonly strokeWidth = input(4);\n readonly showLabel = input(false);\n readonly indeterminate = input(false);\n\n protected readonly clampedValue = computed(() => Math.min(100, Math.max(0, this.value())));\n\n protected readonly sizeValue = computed(() => {\n const sizes: Record<CircularProgressSize, number> = { xs: 16, sm: 32, md: 48, lg: 64, xl: 96 };\n return sizes[this.size()];\n });\n\n protected readonly center = computed(() => this.sizeValue() / 2);\n protected readonly radius = computed(() => (this.sizeValue() - this.strokeWidth()) / 2);\n protected readonly circumference = computed(() => 2 * Math.PI * this.radius());\n protected readonly viewBox = computed(() => `0 0 ${this.sizeValue()} ${this.sizeValue()}`);\n\n protected readonly dashOffset = computed(() => {\n if (this.indeterminate()) return this.circumference() * 0.75;\n return this.circumference() * (1 - this.clampedValue() / 100);\n });\n\n protected readonly containerClass = computed(() => {\n const classes = ['ui-circular-progress', `ui-circular-progress--${this.size()}`];\n if (this.indeterminate()) classes.push('ui-circular-progress--indeterminate');\n return classes.join(' ');\n });\n\n protected readonly circleClass = computed(() => {\n const classes = ['ui-circular-progress__circle', `ui-circular-progress__circle--${this.variant()}`];\n if (this.indeterminate()) classes.push('ui-circular-progress__circle--indeterminate');\n return classes.join(' ');\n });\n}\n","<div [class]=\"containerClass()\" role=\"progressbar\"\n [attr.aria-valuenow]=\"indeterminate() ? null : clampedValue()\"\n [attr.aria-valuemin]=\"indeterminate() ? null : 0\"\n [attr.aria-valuemax]=\"indeterminate() ? null : 100\"\n [style.width.px]=\"sizeValue()\"\n [style.height.px]=\"sizeValue()\">\n <svg [attr.viewBox]=\"viewBox()\">\n <circle\n class=\"ui-circular-progress__track\"\n [attr.cx]=\"center()\"\n [attr.cy]=\"center()\"\n [attr.r]=\"radius()\"\n [attr.stroke-width]=\"strokeWidth()\"\n fill=\"none\"\n />\n <circle\n [class]=\"circleClass()\"\n [attr.cx]=\"center()\"\n [attr.cy]=\"center()\"\n [attr.r]=\"radius()\"\n [attr.stroke-width]=\"strokeWidth()\"\n [attr.stroke-dasharray]=\"circumference()\"\n [attr.stroke-dashoffset]=\"dashOffset()\"\n fill=\"none\"\n stroke-linecap=\"round\"\n />\n </svg>\n @if (showLabel() && !indeterminate()) {\n <span class=\"ui-circular-progress__label\">{{ clampedValue() }}%</span>\n }\n <span class=\"ui-circular-progress__content\">\n <ng-content />\n </span>\n</div>\n","import { Component, input, computed, ChangeDetectionStrategy } from '@angular/core';\n\nexport type SpinnerSize = 'sm' | 'md' | 'lg' | 'xl';\nexport type SpinnerVariant = 'primary' | 'secondary' | 'white';\n\n@Component({\n selector: 'ui-spinner',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n templateUrl: './spinner.component.html',\n styleUrl: './spinner.component.scss',\n})\nexport class SpinnerComponent {\n readonly size = input<SpinnerSize>('md');\n readonly variant = input<SpinnerVariant>('primary');\n\n protected readonly spinnerClass = computed(() => {\n return `ui-spinner ui-spinner--${this.size()} ui-spinner--${this.variant()}`;\n });\n}\n","<span [class]=\"spinnerClass()\" role=\"status\" aria-label=\"Loading\">\n <svg viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <circle cx=\"12\" cy=\"12\" r=\"10\" stroke=\"currentColor\" stroke-opacity=\"0.25\" stroke-width=\"3\"/>\n <path d=\"M12 2a10 10 0 0 1 10 10\" stroke=\"currentColor\" stroke-width=\"3\" stroke-linecap=\"round\"/>\n </svg>\n</span>\n","import { Component, input, output, signal, computed, ChangeDetectionStrategy } from '@angular/core';\n\nexport type AlertVariant = 'info' | 'success' | 'warning' | 'danger';\n\n@Component({\n selector: 'ui-alert',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n templateUrl: './alert.component.html',\n styleUrl: './alert.component.scss',\n})\nexport class AlertComponent {\n readonly variant = input<AlertVariant>('info');\n readonly title = input<string>('');\n readonly dismissible = input(false);\n readonly showIcon = input(true);\n\n readonly dismissed = output<void>();\n\n protected readonly visible = signal(true);\n\n protected readonly alertClass = computed(() => {\n return `ui-alert ui-alert--${this.variant()}`;\n });\n\n protected dismiss(): void {\n this.visible.set(false);\n this.dismissed.emit();\n }\n}\n","@if (visible()) {\n <div [class]=\"alertClass()\" role=\"alert\">\n @if (showIcon()) {\n <span class=\"ui-alert__icon\">\n @switch (variant()) {\n @case ('success') {\n <svg viewBox=\"0 0 20 20\" fill=\"currentColor\">\n <path fill-rule=\"evenodd\" d=\"M10 18a8 8 0 100-16 8 8 0 000 16zm3.707-9.293a1 1 0 00-1.414-1.414L9 10.586 7.707 9.293a1 1 0 00-1.414 1.414l2 2a1 1 0 001.414 0l4-4z\" clip-rule=\"evenodd\"/>\n </svg>\n }\n @case ('warning') {\n <svg viewBox=\"0 0 20 20\" fill=\"currentColor\">\n <path fill-rule=\"evenodd\" d=\"M8.257 3.099c.765-1.36 2.722-1.36 3.486 0l5.58 9.92c.75 1.334-.213 2.98-1.742 2.98H4.42c-1.53 0-2.493-1.646-1.743-2.98l5.58-9.92zM11 13a1 1 0 11-2 0 1 1 0 012 0zm-1-8a1 1 0 00-1 1v3a1 1 0 002 0V6a1 1 0 00-1-1z\" clip-rule=\"evenodd\"/>\n </svg>\n }\n @case ('danger') {\n <svg viewBox=\"0 0 20 20\" fill=\"currentColor\">\n <path fill-rule=\"evenodd\" d=\"M10 18a8 8 0 100-16 8 8 0 000 16zM8.707 7.293a1 1 0 00-1.414 1.414L8.586 10l-1.293 1.293a1 1 0 101.414 1.414L10 11.414l1.293 1.293a1 1 0 001.414-1.414L11.414 10l1.293-1.293a1 1 0 00-1.414-1.414L10 8.586 8.707 7.293z\" clip-rule=\"evenodd\"/>\n </svg>\n }\n @default {\n <svg viewBox=\"0 0 20 20\" fill=\"currentColor\">\n <path fill-rule=\"evenodd\" d=\"M18 10a8 8 0 11-16 0 8 8 0 0116 0zm-7-4a1 1 0 11-2 0 1 1 0 012 0zM9 9a1 1 0 000 2v3a1 1 0 001 1h1a1 1 0 100-2v-3a1 1 0 00-1-1H9z\" clip-rule=\"evenodd\"/>\n </svg>\n }\n }\n </span>\n }\n <div class=\"ui-alert__content\">\n @if (title()) {\n <h4 class=\"ui-alert__title\">{{ title() }}</h4>\n }\n <div class=\"ui-alert__message\">\n <ng-content />\n </div>\n </div>\n @if (dismissible()) {\n <button type=\"button\" class=\"ui-alert__close\" (click)=\"dismiss()\" aria-label=\"Dismiss\">\n <svg viewBox=\"0 0 20 20\" fill=\"currentColor\">\n <path fill-rule=\"evenodd\" d=\"M4.293 4.293a1 1 0 011.414 0L10 8.586l4.293-4.293a1 1 0 111.414 1.414L11.414 10l4.293 4.293a1 1 0 01-1.414 1.414L10 11.414l-4.293 4.293a1 1 0 01-1.414-1.414L8.586 10 4.293 5.707a1 1 0 010-1.414z\" clip-rule=\"evenodd\"/>\n </svg>\n </button>\n }\n </div>\n}\n","import { Component, input, output, computed, ChangeDetectionStrategy } from '@angular/core';\n\nexport type CardVariant = 'default' | 'outlined' | 'elevated';\nexport type CardPadding = 'none' | 'sm' | 'md' | 'lg';\n\n@Component({\n selector: 'ui-card',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n templateUrl: './card.component.html',\n styleUrl: './card.component.scss',\n})\nexport class CardComponent {\n readonly variant = input<CardVariant>('default');\n readonly padding = input<CardPadding>('md');\n readonly clickable = input(false);\n\n readonly clicked = output<void>();\n\n protected readonly cardClass = computed(() => {\n const classes = ['ui-card', `ui-card--${this.variant()}`, `ui-card--padding-${this.padding()}`];\n if (this.clickable()) classes.push('ui-card--clickable');\n return classes.join(' ');\n });\n\n protected onClick(): void {\n if (this.clickable()) {\n this.clicked.emit();\n }\n }\n}\n","<div [class]=\"cardClass()\" [attr.role]=\"clickable() ? 'button' : null\" [attr.tabindex]=\"clickable() ? 0 : null\" (click)=\"onClick()\" (keydown.enter)=\"onClick()\" (keydown.space)=\"onClick()\">\n <div class=\"ui-card__header\">\n <ng-content select=\"[card-header]\" />\n </div>\n <div class=\"ui-card__body\">\n <ng-content />\n </div>\n <div class=\"ui-card__footer\">\n <ng-content select=\"[card-footer]\" />\n </div>\n</div>\n","import { Directive, ElementRef, inject, input, OnDestroy, PLATFORM_ID, Renderer2, signal, effect, HostListener } from '@angular/core';\nimport { DOCUMENT, isPlatformBrowser } from '@angular/common';\n\nexport type TooltipPosition = 'top' | 'bottom' | 'left' | 'right';\n\n@Directive({\n selector: '[uiTooltip]',\n standalone: true,\n})\nexport class TooltipDirective implements OnDestroy {\n readonly uiTooltip = input.required<string>();\n readonly tooltipPosition = input<TooltipPosition>('top');\n readonly tooltipDelay = input(200);\n readonly tooltipDisabled = input(false);\n\n private readonly document = inject(DOCUMENT);\n private readonly platformId = inject(PLATFORM_ID);\n\n private tooltipElement: HTMLElement | null = null;\n private showTimeout: ReturnType<typeof setTimeout> | null = null;\n private readonly isVisible = signal(false);\n\n constructor(\n private readonly el: ElementRef<HTMLElement>,\n private readonly renderer: Renderer2\n ) {\n effect(() => {\n if (this.tooltipElement && this.isVisible()) {\n this.renderer.setProperty(this.tooltipElement.querySelector('.ui-tooltip__content'), 'textContent', this.uiTooltip());\n }\n });\n }\n\n @HostListener('mouseenter')\n onMouseEnter(): void {\n if (this.tooltipDisabled()) return;\n this.showTimeout = setTimeout(() => this.show(), this.tooltipDelay());\n }\n\n @HostListener('mouseleave')\n onMouseLeave(): void {\n this.hide();\n }\n\n @HostListener('focus')\n onFocus(): void {\n if (this.tooltipDisabled()) return;\n this.show();\n }\n\n @HostListener('blur')\n onBlur(): void {\n this.hide();\n }\n\n private show(): void {\n if (this.tooltipDisabled() || this.isVisible()) return;\n\n this.createTooltip();\n this.positionTooltip();\n this.isVisible.set(true);\n\n requestAnimationFrame(() => {\n if (this.tooltipElement) {\n this.renderer.addClass(this.tooltipElement, 'ui-tooltip--visible');\n }\n });\n }\n\n private hide(): void {\n if (this.showTimeout) {\n clearTimeout(this.showTimeout);\n this.showTimeout = null;\n }\n\n if (this.tooltipElement) {\n this.renderer.removeClass(this.tooltipElement, 'ui-tooltip--visible');\n setTimeout(() => this.destroyTooltip(), 150);\n }\n\n this.isVisible.set(false);\n }\n\n private createTooltip(): void {\n if (this.tooltipElement) return;\n\n this.tooltipElement = this.renderer.createElement('div');\n this.renderer.addClass(this.tooltipElement, 'ui-tooltip');\n this.renderer.addClass(this.tooltipElement, `ui-tooltip--${this.tooltipPosition()}`);\n\n const content = this.renderer.createElement('span');\n this.renderer.addClass(content, 'ui-tooltip__content');\n this.renderer.setProperty(content, 'textContent', this.uiTooltip());\n this.renderer.appendChild(this.tooltipElement, content);\n\n const arrow = this.renderer.createElement('span');\n this.renderer.addClass(arrow, 'ui-tooltip__arrow');\n this.renderer.appendChild(this.tooltipElement, arrow);\n\n this.renderer.appendChild(this.document.body, this.tooltipElement);\n this.injectStyles();\n }\n\n private positionTooltip(): void {\n if (!this.tooltipElement) return;\n\n const hostRect = this.el.nativeElement.getBoundingClientRect();\n const tooltipRect = this.tooltipElement.getBoundingClientRect();\n const scrollY = window.scrollY;\n const scrollX = window.scrollX;\n\n let top = 0;\n let left = 0;\n\n switch (this.tooltipPosition()) {\n case 'top':\n top = hostRect.top + scrollY - tooltipRect.height - 8;\n left = hostRect.left + scrollX + (hostRect.width - tooltipRect.width) / 2;\n break;\n case 'bottom':\n top = hostRect.bottom + scrollY + 8;\n left = hostRect.left + scrollX + (hostRect.width - tooltipRect.width) / 2;\n break;\n case 'left':\n top = hostRect.top + scrollY + (hostRect.height - tooltipRect.height) / 2;\n left = hostRect.left + scrollX - tooltipRect.width - 8;\n break;\n case 'right':\n top = hostRect.top + scrollY + (hostRect.height - tooltipRect.height) / 2;\n left = hostRect.right + scrollX + 8;\n break;\n }\n\n // Viewport boundary checks\n const padding = 8;\n left = Math.max(padding, Math.min(left, window.innerWidth - tooltipRect.width - padding));\n top = Math.max(padding, top);\n\n this.renderer.setStyle(this.tooltipElement, 'top', `${top}px`);\n this.renderer.setStyle(this.tooltipElement, 'left', `${left}px`);\n }\n\n private destroyTooltip(): void {\n if (this.tooltipElement) {\n this.renderer.removeChild(this.document.body, this.tooltipElement);\n this.tooltipElement = null;\n }\n }\n\n private injectStyles(): void {\n const styleId = 'ui-tooltip-styles';\n if (!isPlatformBrowser(this.platformId) || this.document.getElementById(styleId)) return;\n\n const style = this.renderer.createElement('style');\n this.renderer.setProperty(style, 'id', styleId);\n this.renderer.setProperty(style, 'textContent', `\n .ui-tooltip {\n position: absolute;\n z-index: 10000;\n pointer-events: none;\n opacity: 0;\n transform: scale(0.95);\n transition: opacity 150ms, transform 150ms;\n }\n\n .ui-tooltip--visible {\n opacity: 1;\n transform: scale(1);\n }\n\n .ui-tooltip__content {\n display: block;\n padding: 0.375rem 0.625rem;\n font-size: 0.75rem;\n font-weight: 500;\n color: white;\n background: #1f2937;\n border-radius: 0.375rem;\n white-space: nowrap;\n box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -1px rgba(0, 0, 0, 0.06);\n }\n\n .ui-tooltip__arrow {\n position: absolute;\n width: 8px;\n height: 8px;\n background: #1f2937;\n transform: rotate(45deg);\n }\n\n .ui-tooltip--top .ui-tooltip__arrow {\n bottom: -4px;\n left: 50%;\n margin-left: -4px;\n }\n\n .ui-tooltip--bottom .ui-tooltip__arrow {\n top: -4px;\n left: 50%;\n margin-left: -4px;\n }\n\n .ui-tooltip--left .ui-tooltip__arrow {\n right: -4px;\n top: 50%;\n margin-top: -4px;\n }\n\n .ui-tooltip--right .ui-tooltip__arrow {\n left: -4px;\n top: 50%;\n margin-top: -4px;\n }\n `);\n this.renderer.appendChild(this.document.head, style);\n }\n\n ngOnDestroy(): void {\n this.hide();\n this.destroyTooltip();\n }\n}\n","import {\n Component,\n input,\n signal,\n computed,\n ElementRef,\n viewChild,\n ChangeDetectionStrategy,\n model,\n} from '@angular/core';\nimport type { RadioGroupComponent, RadioGroupVariant } from './radio-group.component';\n\n@Component({\n selector: 'ui-radio',\n standalone: true,\n templateUrl: './radio.component.html',\n styleUrl: './radio.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class RadioComponent<T = unknown> {\n readonly value = model.required<T>();\n readonly disabled = input(false);\n\n private readonly inputEl = viewChild.required<ElementRef<HTMLInputElement>>('inputEl');\n\n /** @internal */\n readonly _checked = signal(false);\n /** @internal */\n readonly _index = signal(0);\n /** @internal */\n readonly _variant = signal<RadioGroupVariant>('default');\n\n private _group: RadioGroupComponent<T> | null = null;\n\n protected readonly _groupName = computed(() => {\n return this._group?.name() ?? '';\n });\n\n protected readonly isDisabled = computed(() => {\n return this.disabled() || (this._group?.disabled() ?? false);\n });\n\n protected readonly radioClasses = computed(() => {\n const size = this._group?.size() ?? 'md';\n const variant = this._variant();\n return `ui-radio--${variant} ui-radio--${size}`;\n });\n\n /** @internal */\n _setGroup(group: RadioGroupComponent<T>): void {\n this._group = group;\n this._variant.set(group.variant());\n }\n\n /** @internal */\n _setIndex(index: number): void {\n this._index.set(index);\n }\n\n /** @internal */\n _setChecked(checked: boolean): void {\n this._checked.set(checked);\n }\n\n /** @internal */\n _focus(): void {\n this.inputEl().nativeElement.focus();\n }\n\n protected handleChange(): void {\n if (this.isDisabled()) return;\n this._group?._selectRadio(this.value());\n }\n\n protected handleKeyDown(event: KeyboardEvent): void {\n this._group?._handleKeyDown(event, this._index());\n }\n}\n","<label\n class=\"ui-radio\"\n [class]=\"radioClasses()\"\n [class.ui-radio--disabled]=\"isDisabled()\"\n [class.ui-radio--checked]=\"_checked()\"\n>\n <input\n #inputEl\n type=\"radio\"\n class=\"ui-radio__input\"\n [attr.name]=\"_groupName()\"\n [value]=\"value()\"\n [checked]=\"_checked()\"\n [disabled]=\"isDisabled()\"\n (change)=\"handleChange()\"\n (keydown)=\"handleKeyDown($event)\"\n />\n @if (_variant() === 'default') {\n <span class=\"ui-radio__circle\">\n <span class=\"ui-radio__dot\"></span>\n </span>\n }\n <span class=\"ui-radio__label\">\n <ng-content />\n </span>\n</label>\n","import {\n Component,\n input,\n model,\n output,\n computed,\n contentChildren,\n AfterContentInit,\n effect,\n ChangeDetectionStrategy,\n} from '@angular/core';\nimport { RadioComponent } from './radio.component';\n\nexport type RadioGroupOrientation = 'horizontal' | 'vertical';\nexport type RadioGroupSize = 'sm' | 'md' | 'lg';\nexport type RadioGroupVariant = 'default' | 'segmented';\n\n@Component({\n selector: 'ui-radio-group',\n standalone: true,\n templateUrl: './radio-group.component.html',\n styleUrl: './radio-group.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class RadioGroupComponent<T = unknown> implements AfterContentInit {\n readonly name = input<string>(`radio-group-${Math.random().toString(36).slice(2, 9)}`);\n readonly disabled = input(false);\n readonly orientation = input<RadioGroupOrientation>('vertical');\n readonly size = input<RadioGroupSize>('md');\n readonly variant = input<RadioGroupVariant>('default');\n readonly ariaLabel = input<string>('');\n\n readonly value = model<T | null>(null);\n\n readonly changed = output<T | null>();\n\n readonly radios = contentChildren(RadioComponent);\n\n protected readonly groupClasses = computed(() => {\n const classes: string[] = [];\n const v = this.variant();\n\n if (v === 'segmented') {\n classes.push('ui-radio-group--segmented');\n classes.push(`ui-radio-group--${this.size()}`);\n } else {\n classes.push(`ui-radio-group--${this.orientation()}`);\n }\n\n if (this.disabled()) {\n classes.push('ui-radio-group--disabled');\n }\n return classes.join(' ');\n });\n\n constructor() {\n // Sync value changes to child radios\n effect(() => {\n const currentValue = this.value();\n const radioList = this.radios();\n radioList.forEach(radio => {\n radio._setChecked(radio.value() === currentValue);\n });\n });\n }\n\n ngAfterContentInit(): void {\n this._setupRadios();\n }\n\n private _setupRadios(): void {\n const radioList = this.radios();\n radioList.forEach((radio, index) => {\n radio._setGroup(this);\n radio._setIndex(index);\n });\n }\n\n /** @internal */\n _selectRadio(value: T): void {\n if (this.disabled()) return;\n this.value.set(value);\n this.changed.emit(value);\n }\n\n /** @internal */\n _handleKeyDown(event: KeyboardEvent, currentIndex: number): void {\n const radioList = this.radios();\n const enabledRadios = radioList.filter(r => !r.disabled());\n if (enabledRadios.length === 0) return;\n\n const currentEnabledIndex = enabledRadios.findIndex(\n r => r._index() === currentIndex\n );\n\n let nextIndex = -1;\n\n switch (event.key) {\n case 'ArrowDown':\n case 'ArrowRight':\n event.preventDefault();\n nextIndex = (currentEnabledIndex + 1) % enabledRadios.length;\n break;\n case 'ArrowUp':\n case 'ArrowLeft':\n event.preventDefault();\n nextIndex = (currentEnabledIndex - 1 + enabledRadios.length) % enabledRadios.length;\n break;\n case ' ':\n case 'Enter':\n event.preventDefault();\n const currentRadio = radioList[currentIndex];\n if (currentRadio && !currentRadio.disabled()) {\n this._selectRadio(currentRadio.value() as T);\n }\n return;\n default:\n return;\n }\n\n if (nextIndex >= 0) {\n const nextRadio = enabledRadios[nextIndex];\n nextRadio._focus();\n this._selectRadio(nextRadio.value() as T);\n }\n }\n}\n","<div\n class=\"ui-radio-group\"\n [class]=\"groupClasses()\"\n role=\"radiogroup\"\n [attr.aria-label]=\"ariaLabel()\"\n>\n <ng-content />\n</div>\n","import { Directive, TemplateRef, inject } from '@angular/core';\n\n@Directive({\n selector: '[uiTabIcon]',\n standalone: true,\n})\nexport class TabIconDirective {\n readonly templateRef = inject(TemplateRef);\n}\n","import {\n Component,\n input,\n signal,\n computed,\n TemplateRef,\n contentChild,\n ChangeDetectionStrategy,\n} from '@angular/core';\nimport { TabIconDirective } from './tab-icon.directive';\nimport type { TabRenderMode } from './tab.config';\nimport type { TabsComponent } from './tabs.component';\n\n@Component({\n selector: 'ui-tab, [ui-tab]',\n standalone: true,\n templateUrl: './tab.component.html',\n styleUrl: './tab.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class TabComponent {\n readonly id = input<string | number>('');\n readonly label = input.required<string>();\n readonly disabled = input(false);\n\n private readonly iconDirective = contentChild(TabIconDirective);\n\n /** @internal */\n readonly _index = signal(0);\n /** @internal */\n readonly _renderMode = signal<TabRenderMode>('conditional');\n\n private _parent: TabsComponent | null = null;\n\n readonly iconTemplate = computed<TemplateRef<unknown> | null>(() => {\n return this.iconDirective()?.templateRef ?? null;\n });\n\n protected readonly isActive = computed(() => {\n if (!this._parent) return false;\n return this._parent._isTabActive(this, this._index());\n });\n\n /** @internal */\n _setTabsParent(parent: TabsComponent, index: number): void {\n this._parent = parent;\n this._index.set(index);\n }\n}\n","@if (_renderMode() === 'persistent' || isActive()) {\n <div\n class=\"ui-tab-panel\"\n [class.ui-tab-panel--hidden]=\"_renderMode() === 'persistent' && !isActive()\"\n role=\"tabpanel\"\n [attr.id]=\"'panel-' + (id() || _index())\"\n [attr.aria-labelledby]=\"'tab-' + (id() || _index())\"\n >\n <ng-content />\n </div>\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { TabComponent } from './tab.component';\n\n@Pipe({\n name: 'tabActive',\n standalone: true,\n pure: true,\n})\nexport class TabActivePipe implements PipeTransform {\n transform(tab: TabComponent, index: number, activeTab: string | number): boolean {\n const tabId = tab.id();\n if (tabId !== '' && tabId !== undefined) {\n return activeTab === tabId;\n }\n return activeTab === index;\n }\n}\n","import {\n Component,\n input,\n model,\n computed,\n contentChildren,\n signal,\n effect,\n afterRenderEffect,\n ElementRef,\n viewChild,\n ChangeDetectionStrategy,\n} from '@angular/core';\nimport { NgTemplateOutlet } from '@angular/common';\nimport { TabComponent } from './tab.component';\nimport { TabActivePipe } from './tab-active.pipe';\nimport type { TabRenderMode } from './tab.config';\n\nexport type TabsVariant = 'default' | 'pills' | 'underline';\nexport type TabsSize = 'sm' | 'md' | 'lg';\n\n@Component({\n selector: 'ui-tabs',\n standalone: true,\n imports: [NgTemplateOutlet, TabActivePipe],\n templateUrl: './tabs.component.html',\n styleUrl: './tabs.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class TabsComponent {\n readonly variant = input<TabsVariant>('default');\n readonly size = input<TabsSize>('md');\n readonly ariaLabel = input<string>('');\n readonly renderMode = input<TabRenderMode>('conditional');\n\n readonly activeTab = model<string | number>(0);\n\n readonly tabs = contentChildren(TabComponent);\n\n private readonly tabList = viewChild<ElementRef<HTMLElement>>('tabList');\n\n protected readonly indicatorLeft = signal(0);\n protected readonly indicatorWidth = signal(0);\n\n protected readonly tabsClasses = computed(() => {\n return `ui-tabs--${this.variant()} ui-tabs--${this.size()}`;\n });\n\n constructor() {\n effect(() => {\n const tabList = this.tabs();\n const renderMode = this.renderMode();\n tabList.forEach((tab, index) => {\n tab._setTabsParent(this, index);\n tab._renderMode.set(renderMode);\n });\n });\n\n afterRenderEffect(() => {\n this.tabs();\n this.activeTab();\n this.updateIndicator();\n });\n }\n\n protected selectTab(tab: TabComponent, index: number): void {\n if (tab.disabled()) return;\n const tabId = tab.id();\n const value = tabId !== '' && tabId !== undefined ? tabId : index;\n this.activeTab.set(value);\n }\n\n protected handleKeyDown(event: KeyboardEvent, currentIndex: number): void {\n const tabList = this.tabs();\n const enabledTabs = tabList\n .map((t, i) => ({ tab: t, index: i }))\n .filter(({ tab }) => !tab.disabled());\n\n if (enabledTabs.length === 0) return;\n\n const currentEnabledIndex = enabledTabs.findIndex(({ index }) => index === currentIndex);\n let nextEnabledIndex = -1;\n\n switch (event.key) {\n case 'ArrowLeft':\n event.preventDefault();\n nextEnabledIndex = (currentEnabledIndex - 1 + enabledTabs.length) % enabledTabs.length;\n break;\n case 'ArrowRight':\n event.preventDefault();\n nextEnabledIndex = (currentEnabledIndex + 1) % enabledTabs.length;\n break;\n case 'Home':\n event.preventDefault();\n nextEnabledIndex = 0;\n break;\n case 'End':\n event.preventDefault();\n nextEnabledIndex = enabledTabs.length - 1;\n break;\n default:\n return;\n }\n\n if (nextEnabledIndex >= 0) {\n const { tab, index } = enabledTabs[nextEnabledIndex];\n this.selectTab(tab, index);\n this.focusTab(index);\n }\n }\n\n private focusTab(index: number): void {\n const tabListEl = this.tabList()?.nativeElement;\n if (!tabListEl) return;\n const buttons = tabListEl.querySelectorAll<HTMLButtonElement>('.ui-tabs__tab');\n buttons[index]?.focus();\n }\n\n private updateIndicator(): void {\n if (this.variant() !== 'underline') return;\n\n const tabListEl = this.tabList()?.nativeElement;\n if (!tabListEl) return;\n\n const buttons = tabListEl.querySelectorAll<HTMLButtonElement>('.ui-tabs__tab');\n const activeIndex = this.getActiveIndex();\n\n if (activeIndex >= 0 && activeIndex < buttons.length) {\n const activeButton = buttons[activeIndex];\n this.indicatorLeft.set(activeButton.offsetLeft);\n this.indicatorWidth.set(activeButton.offsetWidth);\n }\n }\n\n private getActiveIndex(): number {\n const active = this.activeTab();\n const tabList = this.tabs();\n\n for (let i = 0; i < tabList.length; i++) {\n const tab = tabList[i];\n const tabId = tab.id();\n if (tabId !== '' && tabId !== undefined) {\n if (active === tabId) return i;\n } else if (active === i) {\n return i;\n }\n }\n return 0;\n }\n\n /** @internal */\n _isTabActive(tab: TabComponent, index: number): boolean {\n const active = this.activeTab();\n const tabId = tab.id();\n if (tabId !== '' && tabId !== undefined) {\n return active === tabId;\n }\n return active === index;\n }\n}\n","<div class=\"ui-tabs\" [class]=\"tabsClasses()\">\n <div\n #tabList\n class=\"ui-tabs__list\"\n role=\"tablist\"\n [attr.aria-label]=\"ariaLabel()\"\n >\n @for (tab of tabs(); track tab.id() || $index; let i = $index) {\n @let active = tab | tabActive:i:activeTab();\n <button\n #tabButton\n type=\"button\"\n class=\"ui-tabs__tab\"\n role=\"tab\"\n [class.ui-tabs__tab--active]=\"active\"\n [class.ui-tabs__tab--disabled]=\"tab.disabled()\"\n [attr.aria-selected]=\"active\"\n [attr.aria-controls]=\"'panel-' + (tab.id() || i)\"\n [attr.tabindex]=\"active ? 0 : -1\"\n [disabled]=\"tab.disabled()\"\n (click)=\"selectTab(tab, i)\"\n (keydown)=\"handleKeyDown($event, i)\"\n >\n @if (tab.iconTemplate()) {\n <span class=\"ui-tabs__tab-icon\">\n <ng-container *ngTemplateOutlet=\"tab.iconTemplate()!\" />\n </span>\n }\n {{ tab.label() }}\n </button>\n }\n @if (variant() === 'underline') {\n <span\n class=\"ui-tabs__indicator\"\n [style.left.px]=\"indicatorLeft()\"\n [style.width.px]=\"indicatorWidth()\"\n ></span>\n }\n </div>\n <div class=\"ui-tabs__panels\">\n <ng-content />\n </div>\n</div>\n","import {\n Component,\n ChangeDetectionStrategy,\n inject,\n input,\n computed,\n Injector,\n effect,\n viewChild,\n ElementRef,\n signal,\n} from '@angular/core';\nimport { NgComponentOutlet, NgTemplateOutlet } from '@angular/common';\nimport { TabsService } from './tabs.service';\nimport { DynamicTab, TabRenderMode } from './tab.config';\n\nexport type DynamicTabsVariant = 'default' | 'pills' | 'underline';\nexport type DynamicTabsSize = 'sm' | 'md' | 'lg';\n\n@Component({\n selector: 'ui-dynamic-tabs',\n standalone: true,\n imports: [NgComponentOutlet, NgTemplateOutlet],\n template: `\n <div class=\"ui-tabs\" [class]=\"tabsClasses()\">\n <div\n #tabList\n class=\"ui-tabs__list\"\n role=\"tablist\"\n [attr.aria-label]=\"ariaLabel()\"\n >\n @for (tab of tabs(); track tab.id) {\n @let active = tab.id === activeTabId();\n <button\n type=\"button\"\n class=\"ui-tabs__tab\"\n role=\"tab\"\n [class.ui-tabs__tab--active]=\"active\"\n [class.ui-tabs__tab--closable]=\"tab.closable\"\n [attr.aria-selected]=\"active\"\n [attr.aria-controls]=\"'panel-' + tab.id\"\n [attr.tabindex]=\"active ? 0 : -1\"\n (click)=\"selectTab(tab)\"\n (keydown)=\"handleKeyDown($event, tab)\"\n >\n @if (tab.icon) {\n <span class=\"ui-tabs__tab-icon\">\n <ng-container *ngTemplateOutlet=\"tab.icon\" />\n </span>\n }\n <span class=\"ui-tabs__tab-label\">{{ tab.label }}</span>\n @if (tab.closable) {\n <button\n type=\"button\"\n class=\"ui-tabs__tab-close\"\n aria-label=\"Close tab\"\n (click)=\"closeTab($event, tab)\"\n >\n <svg\n width=\"14\"\n height=\"14\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n >\n <line x1=\"18\" y1=\"6\" x2=\"6\" y2=\"18\"></line>\n <line x1=\"6\" y1=\"6\" x2=\"18\" y2=\"18\"></line>\n </svg>\n </button>\n }\n </button>\n }\n @if (variant() === 'underline') {\n <span\n class=\"ui-tabs__indicator\"\n [style.left.px]=\"indicatorLeft()\"\n [style.width.px]=\"indicatorWidth()\"\n ></span>\n }\n </div>\n <div class=\"ui-tabs__panels\">\n @for (tab of tabs(); track tab.id) {\n @if (renderMode() === 'persistent' || tab.id === activeTabId()) {\n <div\n class=\"ui-tab-panel\"\n [class.ui-tab-panel--hidden]=\"renderMode() === 'persistent' && tab.id !== activeTabId()\"\n role=\"tabpanel\"\n [attr.id]=\"'panel-' + tab.id\"\n >\n <ng-container\n *ngComponentOutlet=\"tab.component; injector: getInjector(tab)\"\n />\n </div>\n }\n }\n </div>\n </div>\n `,\n styleUrls: ['./tabs.component.scss', './dynamic-tabs.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class DynamicTabsComponent {\n private readonly tabsService = inject(TabsService);\n private readonly injector = inject(Injector);\n\n readonly variant = input<DynamicTabsVariant>('default');\n readonly size = input<DynamicTabsSize>('md');\n readonly ariaLabel = input<string>('');\n readonly renderMode = input<TabRenderMode>('conditional');\n\n private readonly tabList = viewChild<ElementRef<HTMLElement>>('tabList');\n\n protected readonly indicatorLeft = signal(0);\n protected readonly indicatorWidth = signal(0);\n\n readonly tabs = this.tabsService.tabs;\n readonly activeTabId = this.tabsService.activeTabId;\n\n private readonly injectorCache = new Map<string, Injector>();\n\n protected readonly tabsClasses = computed(() => {\n return `ui-tabs--${this.variant()} ui-tabs--${this.size()}`;\n });\n\n constructor() {\n effect(() => {\n const _ = this.activeTabId();\n this.updateIndicator();\n });\n\n // Clean up injector cache when tabs are removed\n effect(() => {\n const currentTabs = this.tabs();\n const currentIds = new Set(currentTabs.map((t) => t.id));\n for (const id of this.injectorCache.keys()) {\n if (!currentIds.has(id)) {\n this.injectorCache.delete(id);\n }\n }\n });\n }\n\n protected getInjector(tab: DynamicTab): Injector {\n let injector = this.injectorCache.get(tab.id);\n if (!injector) {\n injector = this.tabsService._createInjector(\n this.injector,\n tab.data,\n tab.tabRef\n );\n this.injectorCache.set(tab.id, injector);\n }\n return injector;\n }\n\n protected selectTab(tab: DynamicTab): void {\n this.tabsService.activateById(tab.id);\n }\n\n protected closeTab(event: Event, tab: DynamicTab): void {\n event.stopPropagation();\n tab.tabRef.close();\n }\n\n protected handleKeyDown(event: KeyboardEvent, currentTab: DynamicTab): void {\n const tabList = this.tabs();\n if (tabList.length === 0) return;\n\n const currentIndex = tabList.findIndex((t) => t.id === currentTab.id);\n let nextIndex = -1;\n\n switch (event.key) {\n case 'ArrowLeft':\n event.preventDefault();\n nextIndex = (currentIndex - 1 + tabList.length) % tabList.length;\n break;\n case 'ArrowRight':\n event.preventDefault();\n nextIndex = (currentIndex + 1) % tabList.length;\n break;\n case 'Home':\n event.preventDefault();\n nextIndex = 0;\n break;\n case 'End':\n event.preventDefault();\n nextIndex = tabList.length - 1;\n break;\n case 'Delete':\n if (currentTab.closable) {\n event.preventDefault();\n currentTab.tabRef.close();\n }\n return;\n default:\n return;\n }\n\n if (nextIndex >= 0) {\n const nextTab = tabList[nextIndex];\n this.tabsService.activateById(nextTab.id);\n this.focusTab(nextIndex);\n }\n }\n\n private focusTab(index: number): void {\n const tabListEl = this.tabList()?.nativeElement;\n if (!tabListEl) return;\n const buttons = tabListEl.querySelectorAll<HTMLButtonElement>(\n '.ui-tabs__tab'\n );\n buttons[index]?.focus();\n }\n\n private updateIndicator(): void {\n if (this.variant() !== 'underline') return;\n\n const tabListEl = this.tabList()?.nativeElement;\n if (!tabListEl) return;\n\n const buttons = tabListEl.querySelectorAll<HTMLButtonElement>(\n '.ui-tabs__tab'\n );\n const activeId = this.activeTabId();\n const tabs = this.tabs();\n const activeIndex = tabs.findIndex((t) => t.id === activeId);\n\n if (activeIndex >= 0 && activeIndex < buttons.length) {\n const activeButton = buttons[activeIndex];\n this.indicatorLeft.set(activeButton.offsetLeft);\n this.indicatorWidth.set(activeButton.offsetWidth);\n }\n }\n}\n","import { Directive, TemplateRef, inject } from '@angular/core';\n\n@Directive({\n selector: '[uiAccordionHeader]',\n standalone: true,\n})\nexport class AccordionHeaderDirective {\n readonly templateRef = inject(TemplateRef);\n}\n","import {\n Component,\n input,\n signal,\n computed,\n TemplateRef,\n contentChild,\n ChangeDetectionStrategy,\n} from '@angular/core';\nimport { NgTemplateOutlet } from '@angular/common';\nimport { AccordionHeaderDirective } from './accordion-header.directive';\nimport type { AccordionComponent } from './accordion.component';\n\n@Component({\n selector: 'ui-accordion-item',\n standalone: true,\n imports: [NgTemplateOutlet],\n templateUrl: './accordion-item.component.html',\n styleUrl: './accordion-item.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class AccordionItemComponent {\n readonly header = input('');\n readonly disabled = input(false);\n readonly expanded = input(false);\n\n private readonly headerDirective = contentChild(AccordionHeaderDirective);\n\n /** @internal */\n readonly _index = signal(0);\n\n private _parent: AccordionComponent | null = null;\n\n readonly isExpanded = signal(false);\n\n readonly headerTemplate = computed<TemplateRef<unknown> | null>(() => {\n return this.headerDirective()?.templateRef ?? null;\n });\n\n /** @internal */\n _setParent(parent: AccordionComponent, index: number): void {\n this._parent = parent;\n this._index.set(index);\n if (this.expanded()) {\n this.isExpanded.set(true);\n }\n }\n\n toggle(): void {\n if (this.disabled()) return;\n if (this.isExpanded()) {\n this.collapse();\n } else {\n this.expand();\n }\n }\n\n expand(): void {\n if (this.disabled()) return;\n this.isExpanded.set(true);\n this._parent?._onItemToggled(this);\n }\n\n collapse(): void {\n this.isExpanded.set(false);\n }\n}\n","<div\n class=\"ui-accordion-item\"\n [class.ui-accordion-item--expanded]=\"isExpanded()\"\n [class.ui-accordion-item--disabled]=\"disabled()\"\n>\n <button\n type=\"button\"\n class=\"ui-accordion-item__header\"\n [disabled]=\"disabled()\"\n (click)=\"toggle()\"\n [attr.aria-expanded]=\"isExpanded()\"\n [attr.aria-controls]=\"'accordion-panel-' + _index()\"\n >\n @if (headerTemplate()) {\n <span class=\"ui-accordion-item__title\">\n <ng-container *ngTemplateOutlet=\"headerTemplate()!\" />\n </span>\n } @else {\n <span class=\"ui-accordion-item__title\">{{ header() }}</span>\n }\n <span\n class=\"ui-accordion-item__icon\"\n [class.ui-accordion-item__icon--rotated]=\"isExpanded()\"\n >\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M4 6L8 10L12 6\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n </span>\n </button>\n <div\n class=\"ui-accordion-item__panel\"\n [attr.id]=\"'accordion-panel-' + _index()\"\n role=\"region\"\n >\n <div class=\"ui-accordion-item__content\">\n <ng-content />\n </div>\n </div>\n</div>\n","import {\n Component,\n input,\n computed,\n contentChildren,\n AfterContentInit,\n ChangeDetectionStrategy,\n} from '@angular/core';\nimport { AccordionItemComponent } from './accordion-item.component';\n\nexport type AccordionVariant = 'default' | 'bordered' | 'separated';\n\n@Component({\n selector: 'ui-accordion',\n standalone: true,\n templateUrl: './accordion.component.html',\n styleUrl: './accordion.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class AccordionComponent implements AfterContentInit {\n readonly multi = input(false);\n readonly variant = input<AccordionVariant>('default');\n\n readonly items = contentChildren(AccordionItemComponent);\n\n protected readonly accordionClasses = computed(() => {\n return `ui-accordion--${this.variant()}`;\n });\n\n ngAfterContentInit(): void {\n this._setupItems();\n }\n\n private _setupItems(): void {\n const itemList = this.items();\n itemList.forEach((item, index) => {\n item._setParent(this, index);\n });\n }\n\n /** @internal */\n _onItemToggled(expandedItem: AccordionItemComponent): void {\n if (this.multi()) return;\n const itemList = this.items();\n for (const item of itemList) {\n if (item !== expandedItem && item.isExpanded()) {\n item.collapse();\n }\n }\n }\n}\n","<div class=\"ui-accordion\" [class]=\"accordionClasses()\">\n <ng-content />\n</div>\n","import { Component, input, model, computed, ChangeDetectionStrategy } from '@angular/core';\n\nexport type PaginationSize = 'sm' | 'md' | 'lg';\n\n@Component({\n selector: 'ui-pagination',\n standalone: true,\n templateUrl: './pagination.component.html',\n styleUrl: './pagination.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class PaginationComponent {\n readonly total = input.required<number>();\n readonly pageSize = input(10);\n readonly maxPages = input(5);\n readonly showFirstLast = input(true);\n readonly size = input<PaginationSize>('md');\n\n readonly page = model(1);\n\n protected readonly totalPages = computed(() => {\n return Math.max(1, Math.ceil(this.total() / this.pageSize()));\n });\n\n protected readonly paginationClasses = computed(() => {\n return `ui-pagination--${this.size()}`;\n });\n\n protected readonly visiblePages = computed(() => {\n const total = this.totalPages();\n const current = this.page();\n const max = this.maxPages();\n\n const pages: { type: 'page' | 'ellipsis'; value: number }[] = [];\n\n if (total <= max) {\n // Show all pages\n for (let i = 1; i <= total; i++) {\n pages.push({ type: 'page', value: i });\n }\n } else {\n // Calculate range around current page\n const sidePages = Math.floor((max - 3) / 2); // Reserve slots for first, last, and one ellipsis\n let startPage = Math.max(2, current - sidePages);\n let endPage = Math.min(total - 1, current + sidePages);\n\n // Adjust if we're near the start\n if (current <= sidePages + 2) {\n startPage = 2;\n endPage = max - 2;\n }\n\n // Adjust if we're near the end\n if (current >= total - sidePages - 1) {\n startPage = total - max + 3;\n endPage = total - 1;\n }\n\n // Always show first page\n pages.push({ type: 'page', value: 1 });\n\n // Show ellipsis if there's a gap after first page\n if (startPage > 2) {\n pages.push({ type: 'ellipsis', value: -1 });\n }\n\n // Show middle pages\n for (let i = startPage; i <= endPage; i++) {\n pages.push({ type: 'page', value: i });\n }\n\n // Show ellipsis if there's a gap before last page\n if (endPage < total - 1) {\n pages.push({ type: 'ellipsis', value: -2 });\n }\n\n // Always show last page\n pages.push({ type: 'page', value: total });\n }\n\n return pages;\n });\n\n protected goToPage(pageNum: number): void {\n const total = this.totalPages();\n const newPage = Math.max(1, Math.min(total, pageNum));\n\n if (newPage !== this.page()) {\n this.page.set(newPage);\n }\n }\n}\n","<nav class=\"ui-pagination\" [class]=\"paginationClasses()\" aria-label=\"Pagination\">\n @if (showFirstLast()) {\n <button\n type=\"button\"\n class=\"ui-pagination__btn ui-pagination__btn--nav\"\n [disabled]=\"page() === 1\"\n (click)=\"goToPage(1)\"\n aria-label=\"First page\"\n >\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\">\n <polyline points=\"11 17 6 12 11 7\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n <polyline points=\"18 17 13 12 18 7\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n </button>\n }\n\n <button\n type=\"button\"\n class=\"ui-pagination__btn ui-pagination__btn--nav\"\n [disabled]=\"page() === 1\"\n (click)=\"goToPage(page() - 1)\"\n aria-label=\"Previous page\"\n >\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\">\n <polyline points=\"15 18 9 12 15 6\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n </button>\n\n @for (item of visiblePages(); track item.value) {\n @if (item.type === 'ellipsis') {\n <span class=\"ui-pagination__ellipsis\">...</span>\n } @else {\n <button\n type=\"button\"\n class=\"ui-pagination__btn ui-pagination__btn--page\"\n [class.ui-pagination__btn--active]=\"item.value === page()\"\n [attr.aria-current]=\"item.value === page() ? 'page' : null\"\n (click)=\"goToPage(item.value)\"\n >\n {{ item.value }}\n </button>\n }\n }\n\n <button\n type=\"button\"\n class=\"ui-pagination__btn ui-pagination__btn--nav\"\n [disabled]=\"page() === totalPages()\"\n (click)=\"goToPage(page() + 1)\"\n aria-label=\"Next page\"\n >\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\">\n <polyline points=\"9 18 15 12 9 6\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n </button>\n\n @if (showFirstLast()) {\n <button\n type=\"button\"\n class=\"ui-pagination__btn ui-pagination__btn--nav\"\n [disabled]=\"page() === totalPages()\"\n (click)=\"goToPage(totalPages())\"\n aria-label=\"Last page\"\n >\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\">\n <polyline points=\"13 17 18 12 13 7\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n <polyline points=\"6 17 11 12 6 7\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n </button>\n }\n</nav>\n","import { Pipe, PipeTransform } from '@angular/core';\n\n@Pipe({\n name: 'fileSize',\n standalone: true,\n pure: true,\n})\nexport class FileSizePipe implements PipeTransform {\n transform(bytes: number): string {\n if (bytes === 0) return '0 B';\n const k = 1024;\n const sizes = ['B', 'KB', 'MB', 'GB'];\n const i = Math.floor(Math.log(bytes) / Math.log(k));\n return parseFloat((bytes / Math.pow(k, i)).toFixed(1)) + ' ' + sizes[i];\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\n\n@Pipe({\n name: 'filePreview',\n standalone: true,\n pure: true,\n})\nexport class FilePreviewPipe implements PipeTransform {\n private url: string | null = null;\n\n transform(file: File): string | null {\n if (!file.type.startsWith('image/')) {\n this.cleanup();\n return null;\n }\n\n this.cleanup();\n this.url = URL.createObjectURL(file);\n return this.url;\n }\n\n ngOnDestroy(): void {\n this.cleanup();\n }\n\n private cleanup(): void {\n if (this.url) {\n URL.revokeObjectURL(this.url);\n this.url = null;\n }\n }\n}\n","import {\n Component,\n input,\n output,\n model,\n computed,\n ChangeDetectionStrategy,\n ElementRef,\n viewChild,\n} from '@angular/core';\nimport { FileSizePipe } from './file-size.pipe';\nimport { FilePreviewPipe } from './file-preview.pipe';\n\nexport type FileChooserVariant = 'default' | 'compact' | 'minimal';\nexport type FileChooserSize = 'sm' | 'md' | 'lg';\n\n@Component({\n selector: 'ui-file-chooser',\n standalone: true,\n imports: [FileSizePipe, FilePreviewPipe],\n templateUrl: './file-chooser.component.html',\n styleUrl: './file-chooser.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class FileChooserComponent {\n readonly variant = input<FileChooserVariant>('default');\n readonly size = input<FileChooserSize>('md');\n readonly accept = input<string>('');\n readonly multiple = input(false);\n readonly disabled = input(false);\n readonly maxFileSize = input<number | null>(null);\n readonly maxFiles = input<number | null>(null);\n readonly showFileList = input(true);\n readonly showPreviews = input(true);\n\n readonly dropzoneText = input('Drag and drop files here');\n readonly browseText = input('or click to browse');\n readonly acceptHint = input<string>('');\n\n readonly error = input<string>('');\n\n readonly value = model<File[]>([]);\n\n readonly fileAdded = output<File>();\n readonly fileRemoved = output<File>();\n readonly filesRejected = output<{ file: File; reason: string }[]>();\n\n protected dragOver = false;\n private readonly fileInput = viewChild.required<ElementRef<HTMLInputElement>>('fileInput');\n\n protected readonly containerClasses = computed(() => {\n return `ui-file-chooser--${this.variant()} ui-file-chooser--${this.size()}`;\n });\n\n protected readonly ariaLabel = computed(() => {\n const base = this.multiple() ? 'Choose files' : 'Choose file';\n return this.accept() ? `${base} (${this.accept()})` : base;\n });\n\n protected fileKey(file: File): string {\n return `${file.name}-${file.size}-${file.lastModified}`;\n }\n\n protected onDragOver(event: DragEvent): void {\n event.preventDefault();\n event.stopPropagation();\n if (!this.disabled()) {\n this.dragOver = true;\n }\n }\n\n protected onDragLeave(event: DragEvent): void {\n event.preventDefault();\n event.stopPropagation();\n this.dragOver = false;\n }\n\n protected onDrop(event: DragEvent): void {\n event.preventDefault();\n event.stopPropagation();\n this.dragOver = false;\n\n if (this.disabled()) return;\n\n const files = event.dataTransfer?.files;\n if (files && files.length > 0) {\n this.processFiles(Array.from(files));\n }\n }\n\n protected openFilePicker(): void {\n if (!this.disabled()) {\n this.fileInput().nativeElement.click();\n }\n }\n\n protected onFileSelected(event: Event): void {\n const input = event.target as HTMLInputElement;\n if (input.files && input.files.length > 0) {\n this.processFiles(Array.from(input.files));\n input.value = '';\n }\n }\n\n protected removeFile(file: File): void {\n this.value.update(files => files.filter(f => f !== file));\n this.fileRemoved.emit(file);\n }\n\n private formatFileSize(bytes: number): string {\n if (bytes === 0) return '0 B';\n const k = 1024;\n const sizes = ['B', 'KB', 'MB', 'GB'];\n const i = Math.floor(Math.log(bytes) / Math.log(k));\n return parseFloat((bytes / Math.pow(k, i)).toFixed(1)) + ' ' + sizes[i];\n }\n\n private processFiles(newFiles: File[]): void {\n const accepted: File[] = [];\n const rejected: { file: File; reason: string }[] = [];\n const currentCount = this.value().length;\n const maxFiles = this.maxFiles();\n const maxFileSize = this.maxFileSize();\n const acceptPattern = this.accept();\n\n for (const file of newFiles) {\n if (maxFiles !== null && currentCount + accepted.length >= maxFiles) {\n rejected.push({ file, reason: `Maximum ${maxFiles} file(s) allowed` });\n continue;\n }\n\n if (acceptPattern && !this.isFileTypeAccepted(file, acceptPattern)) {\n rejected.push({ file, reason: 'File type not accepted' });\n continue;\n }\n\n if (maxFileSize !== null && file.size > maxFileSize) {\n rejected.push({ file, reason: `File exceeds maximum size of ${this.formatFileSize(maxFileSize)}` });\n continue;\n }\n\n accepted.push(file);\n this.fileAdded.emit(file);\n }\n\n if (accepted.length > 0) {\n if (this.multiple()) {\n this.value.update(files => [...files, ...accepted]);\n } else {\n this.value.set([accepted[0]]);\n }\n }\n\n if (rejected.length > 0) {\n this.filesRejected.emit(rejected);\n }\n }\n\n private isFileTypeAccepted(file: File, accept: string): boolean {\n const acceptedTypes = accept.split(',').map(t => t.trim().toLowerCase());\n\n for (const type of acceptedTypes) {\n if (type === file.type.toLowerCase()) return true;\n\n if (type.endsWith('/*')) {\n const category = type.slice(0, -2);\n if (file.type.toLowerCase().startsWith(category + '/')) return true;\n }\n\n if (type.startsWith('.')) {\n const ext = file.name.toLowerCase().slice(file.name.lastIndexOf('.'));\n if (ext === type) return true;\n }\n }\n\n return false;\n }\n}\n","<div\n class=\"ui-file-chooser\"\n [class]=\"containerClasses()\"\n [class.ui-file-chooser--dragover]=\"dragOver\"\n [class.ui-file-chooser--disabled]=\"disabled()\"\n [class.ui-file-chooser--error]=\"error()\"\n (dragover)=\"onDragOver($event)\"\n (dragleave)=\"onDragLeave($event)\"\n (drop)=\"onDrop($event)\"\n (click)=\"openFilePicker()\"\n (keydown.enter)=\"openFilePicker()\"\n (keydown.space)=\"openFilePicker(); $event.preventDefault()\"\n [attr.tabindex]=\"disabled() ? -1 : 0\"\n role=\"button\"\n [attr.aria-label]=\"ariaLabel()\"\n [attr.aria-disabled]=\"disabled()\"\n>\n <input\n #fileInput\n type=\"file\"\n class=\"ui-file-chooser__input\"\n [accept]=\"accept()\"\n [multiple]=\"multiple()\"\n [disabled]=\"disabled()\"\n (change)=\"onFileSelected($event)\"\n (click)=\"$event.stopPropagation()\"\n />\n\n @if (variant() !== 'minimal') {\n <div class=\"ui-file-chooser__icon\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n <path d=\"M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4\" />\n <polyline points=\"17 8 12 3 7 8\" />\n <line x1=\"12\" y1=\"3\" x2=\"12\" y2=\"15\" />\n </svg>\n </div>\n }\n\n <div class=\"ui-file-chooser__content\">\n @if (variant() === 'default') {\n <span class=\"ui-file-chooser__title\">{{ dropzoneText() }}</span>\n <span class=\"ui-file-chooser__subtitle\">{{ browseText() }}</span>\n @if (acceptHint()) {\n <span class=\"ui-file-chooser__hint\">{{ acceptHint() }}</span>\n }\n } @else if (variant() === 'compact') {\n <span class=\"ui-file-chooser__title\">{{ dropzoneText() }} <span class=\"ui-file-chooser__link\">{{ browseText() }}</span></span>\n } @else {\n <span class=\"ui-file-chooser__link\">{{ browseText() }}</span>\n }\n </div>\n</div>\n\n@if (error()) {\n <span class=\"ui-file-chooser__error\">{{ error() }}</span>\n}\n\n@if (showFileList() && value().length > 0) {\n <ul class=\"ui-file-chooser__list\" role=\"list\">\n @for (file of value(); track fileKey(file)) {\n <li class=\"ui-file-chooser__file\">\n @if (showPreviews() && (file | filePreview); as preview) {\n <img [src]=\"preview\" alt=\"\" class=\"ui-file-chooser__preview\" />\n } @else {\n <div class=\"ui-file-chooser__file-icon\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n <path d=\"M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z\" />\n <polyline points=\"14 2 14 8 20 8\" />\n </svg>\n </div>\n }\n <div class=\"ui-file-chooser__file-info\">\n <span class=\"ui-file-chooser__file-name\">{{ file.name }}</span>\n <span class=\"ui-file-chooser__file-size\">{{ file.size | fileSize }}</span>\n </div>\n <button\n type=\"button\"\n class=\"ui-file-chooser__remove\"\n (click)=\"removeFile(file); $event.stopPropagation()\"\n [attr.aria-label]=\"'Remove ' + file.name\"\n [disabled]=\"disabled()\"\n >\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n <line x1=\"18\" y1=\"6\" x2=\"6\" y2=\"18\" />\n <line x1=\"6\" y1=\"6\" x2=\"18\" y2=\"18\" />\n </svg>\n </button>\n </li>\n }\n </ul>\n}\n","import { Component, input, model, output, computed, ChangeDetectionStrategy } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\n\nexport type SliderSize = 'sm' | 'md' | 'lg';\n\n@Component({\n selector: 'ui-slider',\n standalone: true,\n imports: [FormsModule],\n templateUrl: './slider.component.html',\n styleUrl: './slider.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class SliderComponent {\n readonly min = input(0);\n readonly max = input(100);\n readonly step = input(1);\n readonly size = input<SliderSize>('md');\n readonly disabled = input(false);\n readonly showValue = input(false);\n readonly label = input<string>('');\n\n readonly value = model(0);\n readonly valueCommit = output<number>();\n\n private static nextId = 0;\n private readonly generatedId = `ui-slider-${++SliderComponent.nextId}`;\n\n protected readonly inputId = computed(() => this.generatedId);\n\n protected readonly sliderClasses = computed(() => `ui-slider--${this.size()}`);\n\n protected readonly fillPercent = computed(() => {\n const min = this.min();\n const max = this.max();\n const range = max - min;\n if (range <= 0) return '0%';\n const percent = ((this.value() - min) / range) * 100;\n return `${Math.max(0, Math.min(100, percent))}%`;\n });\n}\n","<div class=\"ui-slider-wrapper\" [class]=\"sliderClasses()\" [class.ui-slider-wrapper--disabled]=\"disabled()\">\n @if (label()) {\n <label class=\"ui-slider__label\" [attr.for]=\"inputId()\">\n {{ label() }}\n </label>\n }\n <div class=\"ui-slider__container\" [style.--fill]=\"fillPercent()\">\n <input\n class=\"ui-slider\"\n type=\"range\"\n [id]=\"inputId()\"\n [min]=\"min()\"\n [max]=\"max()\"\n [step]=\"step()\"\n [disabled]=\"disabled()\"\n [(ngModel)]=\"value\"\n (change)=\"valueCommit.emit(value())\"\n />\n </div>\n @if (showValue()) {\n <span class=\"ui-slider__value\">{{ value() }}</span>\n }\n</div>\n","import {\n Component,\n Directive,\n input,\n model,\n output,\n signal,\n computed,\n contentChild,\n ChangeDetectionStrategy,\n ElementRef,\n ViewChild,\n TemplateRef,\n} from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { NgTemplateOutlet } from '@angular/common';\n\nexport type ChipInputVariant = 'default' | 'outlined' | 'filled';\nexport type ChipInputSize = 'sm' | 'md' | 'lg';\n\n/** Context provided to custom chip templates */\nexport interface ChipTemplateContext<T = string> {\n /** The chip value */\n $implicit: T;\n /** Function to remove this chip */\n remove: () => void;\n}\n\n/** Directive to mark a custom chip template */\n@Directive({\n selector: 'ng-template[uiChipTemplate]',\n standalone: true,\n})\nexport class ChipTemplateDirective {}\n\n@Component({\n selector: 'ui-chip-input',\n standalone: true,\n imports: [FormsModule, NgTemplateOutlet],\n templateUrl: './chip-input.component.html',\n styleUrl: './chip-input.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ChipInputComponent<T = string> {\n readonly variant = input<ChipInputVariant>('default');\n readonly size = input<ChipInputSize>('md');\n readonly placeholder = input('Add item...');\n readonly label = input('');\n readonly hint = input('');\n readonly error = input('');\n readonly disabled = input(false);\n readonly allowDuplicates = input(false);\n /** When false, only emits the `added` event without adding to the array (useful for custom object chips) */\n readonly autoAdd = input(true);\n\n /** The array of chip values */\n readonly value = model<T[]>([]);\n\n /** Emitted when a chip is added */\n readonly added = output<string>();\n\n /** Emitted when a chip is removed */\n readonly removed = output<T>();\n\n /** Custom chip template */\n readonly chipTemplate = contentChild(ChipTemplateDirective, { read: TemplateRef });\n\n @ViewChild('inputRef') inputRef?: ElementRef<HTMLInputElement>;\n\n protected readonly inputValue = signal('');\n protected readonly isFocused = signal(false);\n\n protected readonly containerClasses = computed(() => {\n const classes = [\n `ui-chip-input--${this.variant()}`,\n `ui-chip-input--${this.size()}`,\n ];\n if (this.isFocused()) classes.push('ui-chip-input--focused');\n if (this.disabled()) classes.push('ui-chip-input--disabled');\n if (this.error()) classes.push('ui-chip-input--error');\n return classes.join(' ');\n });\n\n protected onContainerClick(): void {\n if (!this.disabled()) {\n this.inputRef?.nativeElement?.focus();\n }\n }\n\n protected onInputKeydown(event: KeyboardEvent): void {\n const value = this.inputValue().trim();\n\n switch (event.key) {\n case 'Enter':\n event.preventDefault();\n if (value) {\n this.addChip(value);\n }\n break;\n case 'Backspace':\n if (!value && this.value().length > 0) {\n this.removeChip(this.value()[this.value().length - 1]);\n }\n break;\n }\n }\n\n protected addChip(chipValue: string): void {\n const current = this.value();\n // For string chips, check duplicates\n if (!this.allowDuplicates() && current.includes(chipValue as T)) {\n return;\n }\n if (this.autoAdd()) {\n this.value.set([...current, chipValue as T]);\n }\n this.inputValue.set('');\n this.added.emit(chipValue);\n }\n\n removeChip(chipValue: T): void {\n this.value.set(this.value().filter((v) => v !== chipValue));\n this.removed.emit(chipValue);\n // Refocus input after removal\n setTimeout(() => this.inputRef?.nativeElement?.focus());\n }\n\n /** Get template context for a chip */\n protected getChipContext(chip: T): ChipTemplateContext<T> {\n return {\n $implicit: chip,\n remove: () => this.removeChip(chip),\n };\n }\n\n /** Get display text for a chip (for default template) */\n protected getChipDisplay(chip: T): string {\n return String(chip);\n }\n\n protected onFocus(): void {\n this.isFocused.set(true);\n }\n\n protected onBlur(): void {\n this.isFocused.set(false);\n }\n}\n","<div class=\"ui-chip-input-wrapper\">\n @if (label()) {\n <label class=\"ui-chip-input__label\">{{ label() }}</label>\n }\n\n <div\n class=\"ui-chip-input\"\n [class]=\"containerClasses()\"\n (click)=\"onContainerClick()\"\n >\n @for (chip of value(); track chip) {\n @if (chipTemplate()) {\n <ng-container\n [ngTemplateOutlet]=\"chipTemplate()!\"\n [ngTemplateOutletContext]=\"getChipContext(chip)\"\n />\n } @else {\n <span class=\"ui-chip-input__chip\">\n <span class=\"ui-chip-input__chip-text\">{{ getChipDisplay(chip) }}</span>\n @if (!disabled()) {\n <button\n type=\"button\"\n class=\"ui-chip-input__chip-remove\"\n (click)=\"removeChip(chip); $event.stopPropagation()\"\n aria-label=\"Remove\"\n >\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\">\n <line x1=\"18\" y1=\"6\" x2=\"6\" y2=\"18\"></line>\n <line x1=\"6\" y1=\"6\" x2=\"18\" y2=\"18\"></line>\n </svg>\n </button>\n }\n </span>\n }\n }\n <input\n #inputRef\n type=\"text\"\n class=\"ui-chip-input__input\"\n [placeholder]=\"value().length === 0 ? placeholder() : ''\"\n [disabled]=\"disabled()\"\n [(ngModel)]=\"inputValue\"\n (keydown)=\"onInputKeydown($event)\"\n (focus)=\"onFocus()\"\n (blur)=\"onBlur()\"\n />\n </div>\n\n @if (error()) {\n <span class=\"ui-chip-input__error\">{{ error() }}</span>\n }\n @if (hint() && !error()) {\n <span class=\"ui-chip-input__hint\">{{ hint() }}</span>\n }\n</div>\n","import {\n Component,\n input,\n model,\n output,\n signal,\n computed,\n ChangeDetectionStrategy,\n ElementRef,\n inject,\n HostListener,\n OnDestroy,\n ViewChild,\n} from '@angular/core';\nimport { DOCUMENT } from '@angular/common';\n\nexport type DatepickerView = 'day' | 'month' | 'year';\nexport type DatepickerSize = 'sm' | 'md' | 'lg';\nexport type DatepickerVariant = 'default' | 'outlined' | 'filled';\nexport interface DateRange {\n start: Date | null;\n end: Date | null;\n}\n\nexport interface CalendarDay {\n date: Date;\n day: number;\n isCurrentMonth: boolean;\n isToday: boolean;\n isSelected: boolean;\n isInRange: boolean;\n isRangeStart: boolean;\n isRangeEnd: boolean;\n isDisabled: boolean;\n isFocused: boolean;\n}\n\nexport interface CalendarMonth {\n month: number;\n label: string;\n isSelected: boolean;\n isDisabled: boolean;\n isCurrent: boolean;\n}\n\nexport interface CalendarYear {\n year: number;\n isSelected: boolean;\n isDisabled: boolean;\n isCurrent: boolean;\n isInRange: boolean;\n}\n\n@Component({\n selector: 'ui-datepicker',\n standalone: true,\n templateUrl: './datepicker.component.html',\n styleUrl: './datepicker.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class DatepickerComponent implements OnDestroy {\n // Inputs\n readonly variant = input<DatepickerVariant>('default');\n readonly size = input<DatepickerSize>('md');\n readonly placeholder = input('Select date');\n readonly label = input('');\n readonly hint = input('');\n readonly error = input('');\n readonly disabled = input(false);\n readonly readonly = input(false);\n readonly clearable = input(false);\n readonly range = input(false);\n readonly required = input(false);\n readonly minDate = input<Date | null>(null);\n readonly maxDate = input<Date | null>(null);\n readonly disabledDates = input<Date[] | ((date: Date) => boolean)>([]);\n readonly format = input('yyyy-MM-dd');\n readonly firstDayOfWeek = input<0 | 1>(1);\n readonly id = input('');\n\n // Two-way binding\n readonly value = model<Date | DateRange | null>(null);\n\n // Outputs\n readonly opened = output<void>();\n readonly closed = output<void>();\n\n // View children for dropdown portal\n @ViewChild('triggerRef', { static: true }) triggerRef!: ElementRef<HTMLElement>;\n @ViewChild('dropdownRef', { static: true }) dropdownRef!: ElementRef<HTMLElement>;\n\n // Internal state\n readonly isOpen = signal(false);\n readonly currentView = signal<DatepickerView>('day');\n readonly viewDate = signal(new Date());\n readonly focusedDate = signal<Date | null>(null);\n readonly hoveredDate = signal<Date | null>(null);\n\n private readonly elementRef = inject(ElementRef);\n private readonly document = inject(DOCUMENT);\n private positionCleanup: (() => void) | null = null;\n\n private static nextId = 0;\n private readonly generatedId = `ui-datepicker-${++DatepickerComponent.nextId}`;\n\n protected readonly inputId = computed(() => this.id() || this.generatedId);\n\n // Computed: display value\n protected readonly displayValue = computed(() => {\n const val = this.value();\n const fmt = this.format();\n\n if (!val) return '';\n\n if (this.range()) {\n const r = val as DateRange;\n if (!r.start && !r.end) return '';\n const startStr = r.start ? this.formatDate(r.start, fmt) : '';\n const endStr = r.end ? this.formatDate(r.end, fmt) : '';\n if (startStr && endStr) return `${startStr} — ${endStr}`;\n return startStr || endStr;\n }\n\n return this.formatDate(val as Date, fmt);\n });\n\n // Computed: trigger CSS classes\n protected readonly triggerClasses = computed(() => {\n return `ui-datepicker__trigger--${this.variant()} ui-datepicker__trigger--${this.size()}`;\n });\n\n // Computed: has value\n protected readonly hasValue = computed(() => {\n const val = this.value();\n if (!val) return false;\n if (this.range()) {\n const r = val as DateRange;\n return r.start !== null || r.end !== null;\n }\n return true;\n });\n\n // Computed: weekday headers\n protected readonly weekdayHeaders = computed(() => {\n const first = this.firstDayOfWeek();\n const formatter = new Intl.DateTimeFormat(undefined, { weekday: 'short' });\n const headers: string[] = [];\n // Use a known Sunday: Jan 4, 1970\n const base = new Date(1970, 0, 4 + first);\n for (let i = 0; i < 7; i++) {\n const d = new Date(base);\n d.setDate(base.getDate() + i);\n headers.push(formatter.format(d));\n }\n return headers;\n });\n\n // Computed: month/year label for header\n protected readonly monthYearLabel = computed(() => {\n const vd = this.viewDate();\n const formatter = new Intl.DateTimeFormat(undefined, { month: 'long', year: 'numeric' });\n return formatter.format(vd);\n });\n\n // Computed: decade label for year view\n protected readonly decadeLabel = computed(() => {\n const year = this.viewDate().getFullYear();\n const startYear = year - (year % 10);\n return `${startYear} — ${startYear + 9}`;\n });\n\n // Computed: calendar grid (6 weeks x 7 days)\n protected readonly calendarGrid = computed(() => {\n const vd = this.viewDate();\n const year = vd.getFullYear();\n const month = vd.getMonth();\n const first = this.firstDayOfWeek();\n const today = new Date();\n const val = this.value();\n const isRange = this.range();\n const focused = this.focusedDate();\n const hovered = this.hoveredDate();\n\n // Find the start of the calendar grid\n const firstOfMonth = new Date(year, month, 1);\n let dayOfWeek = firstOfMonth.getDay() - first;\n if (dayOfWeek < 0) dayOfWeek += 7;\n const gridStart = new Date(year, month, 1 - dayOfWeek);\n\n // Determine selected date(s) and range\n let selectedDate: Date | null = null;\n let rangeStart: Date | null = null;\n let rangeEnd: Date | null = null;\n\n if (isRange && val) {\n const r = val as DateRange;\n rangeStart = r.start;\n rangeEnd = r.end;\n // If only start is set and we're hovering, use hovered as temporary end\n if (rangeStart && !rangeEnd && hovered) {\n if (hovered < rangeStart) {\n rangeEnd = rangeStart;\n rangeStart = hovered;\n } else {\n rangeEnd = hovered;\n }\n }\n } else if (val && !isRange) {\n selectedDate = val as Date;\n }\n\n const grid: CalendarDay[][] = [];\n const cursor = new Date(gridStart);\n\n for (let week = 0; week < 6; week++) {\n const row: CalendarDay[] = [];\n for (let day = 0; day < 7; day++) {\n const date = new Date(cursor);\n const isCurrentMonth = date.getMonth() === month;\n const isToday = this.isSameDay(date, today);\n const isSelected = isRange\n ? (rangeStart ? this.isSameDay(date, rangeStart) : false) ||\n (rangeEnd ? this.isSameDay(date, rangeEnd) : false)\n : selectedDate ? this.isSameDay(date, selectedDate) : false;\n const isInRange = isRange && rangeStart && rangeEnd\n ? date > rangeStart && date < rangeEnd\n : false;\n const isRangeStart = isRange && rangeStart ? this.isSameDay(date, rangeStart) : false;\n const isRangeEnd = isRange && rangeEnd ? this.isSameDay(date, rangeEnd) : false;\n const isDisabled = this.isDateDisabled(date);\n const isFocused = focused ? this.isSameDay(date, focused) : false;\n\n row.push({\n date,\n day: date.getDate(),\n isCurrentMonth,\n isToday,\n isSelected,\n isInRange,\n isRangeStart,\n isRangeEnd,\n isDisabled,\n isFocused,\n });\n\n cursor.setDate(cursor.getDate() + 1);\n }\n grid.push(row);\n }\n\n return grid;\n });\n\n // Computed: month grid (4 rows x 3 columns)\n protected readonly monthGrid = computed(() => {\n const vd = this.viewDate();\n const year = vd.getFullYear();\n const today = new Date();\n const val = this.value();\n const isRange = this.range();\n const formatter = new Intl.DateTimeFormat(undefined, { month: 'short' });\n\n const grid: CalendarMonth[][] = [];\n let monthIdx = 0;\n\n for (let row = 0; row < 4; row++) {\n const rowArr: CalendarMonth[] = [];\n for (let col = 0; col < 3; col++) {\n const date = new Date(year, monthIdx, 1);\n let isSelected = false;\n\n if (isRange && val) {\n const r = val as DateRange;\n if (r.start && r.start.getFullYear() === year && r.start.getMonth() === monthIdx) isSelected = true;\n if (r.end && r.end.getFullYear() === year && r.end.getMonth() === monthIdx) isSelected = true;\n } else if (val && !isRange) {\n const d = val as Date;\n isSelected = d.getFullYear() === year && d.getMonth() === monthIdx;\n }\n\n const isDisabled = this.isMonthDisabled(year, monthIdx);\n const isCurrent = today.getFullYear() === year && today.getMonth() === monthIdx;\n\n rowArr.push({\n month: monthIdx,\n label: formatter.format(date),\n isSelected,\n isDisabled,\n isCurrent,\n });\n monthIdx++;\n }\n grid.push(rowArr);\n }\n\n return grid;\n });\n\n // Computed: year grid (4 rows x 3 columns)\n protected readonly yearGrid = computed(() => {\n const vd = this.viewDate();\n const year = vd.getFullYear();\n const startYear = year - (year % 10) - 1;\n const today = new Date();\n const val = this.value();\n const isRange = this.range();\n\n const grid: CalendarYear[][] = [];\n let yearIdx = startYear;\n\n for (let row = 0; row < 4; row++) {\n const rowArr: CalendarYear[] = [];\n for (let col = 0; col < 3; col++) {\n let isSelected = false;\n\n if (isRange && val) {\n const r = val as DateRange;\n if (r.start && r.start.getFullYear() === yearIdx) isSelected = true;\n if (r.end && r.end.getFullYear() === yearIdx) isSelected = true;\n } else if (val && !isRange) {\n isSelected = (val as Date).getFullYear() === yearIdx;\n }\n\n const isDisabled = this.isYearDisabled(yearIdx);\n const isCurrent = today.getFullYear() === yearIdx;\n const isInRange = yearIdx >= startYear + 1 && yearIdx <= startYear + 10;\n\n rowArr.push({\n year: yearIdx,\n isSelected,\n isDisabled,\n isCurrent,\n isInRange,\n });\n yearIdx++;\n }\n grid.push(rowArr);\n }\n\n return grid;\n });\n\n // Computed: can navigate prev/next\n protected readonly canNavigatePrev = computed(() => {\n const min = this.minDate();\n if (!min) return true;\n const vd = this.viewDate();\n const view = this.currentView();\n\n if (view === 'day') {\n return vd.getFullYear() > min.getFullYear() ||\n (vd.getFullYear() === min.getFullYear() && vd.getMonth() > min.getMonth());\n }\n if (view === 'month') {\n return vd.getFullYear() > min.getFullYear();\n }\n // year view\n const startYear = vd.getFullYear() - (vd.getFullYear() % 10);\n return startYear > min.getFullYear();\n });\n\n protected readonly canNavigateNext = computed(() => {\n const max = this.maxDate();\n if (!max) return true;\n const vd = this.viewDate();\n const view = this.currentView();\n\n if (view === 'day') {\n return vd.getFullYear() < max.getFullYear() ||\n (vd.getFullYear() === max.getFullYear() && vd.getMonth() < max.getMonth());\n }\n if (view === 'month') {\n return vd.getFullYear() < max.getFullYear();\n }\n // year view\n const startYear = vd.getFullYear() - (vd.getFullYear() % 10);\n return startYear + 9 < max.getFullYear();\n });\n\n ngOnDestroy(): void {\n const dropdown = this.dropdownRef?.nativeElement;\n if (dropdown?.parentElement === this.document.body) {\n this.document.body.removeChild(dropdown);\n }\n this.removePositionListeners();\n }\n\n @HostListener('document:click', ['$event'])\n onDocumentClick(event: MouseEvent): void {\n const target = event.target as Node;\n if (\n !this.elementRef.nativeElement.contains(target) &&\n !this.dropdownRef?.nativeElement?.contains(target)\n ) {\n this.close();\n }\n }\n\n toggle(): void {\n if (this.disabled() || this.readonly()) return;\n if (this.isOpen()) {\n this.close();\n } else {\n this.open();\n }\n }\n\n open(): void {\n if (this.disabled() || this.readonly() || this.isOpen()) return;\n this.isOpen.set(true);\n this.currentView.set('day');\n this.focusedDate.set(null);\n this.hoveredDate.set(null);\n\n // Set viewDate to current value or today\n const val = this.value();\n if (val) {\n if (this.range()) {\n const r = val as DateRange;\n if (r.start) {\n this.viewDate.set(new Date(r.start.getFullYear(), r.start.getMonth(), 1));\n }\n } else {\n const d = val as Date;\n this.viewDate.set(new Date(d.getFullYear(), d.getMonth(), 1));\n }\n } else {\n const today = new Date();\n this.viewDate.set(new Date(today.getFullYear(), today.getMonth(), 1));\n }\n\n this.opened.emit();\n this.portalDropdown();\n }\n\n close(): void {\n if (!this.isOpen()) return;\n this.unportalDropdown();\n this.isOpen.set(false);\n this.focusedDate.set(null);\n this.hoveredDate.set(null);\n this.closed.emit();\n }\n\n selectDay(day: CalendarDay): void {\n if (day.isDisabled) return;\n\n if (this.range()) {\n const current = this.value() as DateRange | null;\n if (!current || !current.start || current.end) {\n // Start new range\n this.value.set({ start: day.date, end: null });\n } else {\n // Complete the range\n let start = current.start;\n let end = day.date;\n if (end < start) {\n [start, end] = [end, start];\n }\n this.value.set({ start, end });\n this.close();\n }\n } else {\n this.value.set(day.date);\n this.close();\n }\n }\n\n selectMonth(month: CalendarMonth): void {\n if (month.isDisabled) return;\n const vd = this.viewDate();\n this.viewDate.set(new Date(vd.getFullYear(), month.month, 1));\n this.currentView.set('day');\n }\n\n selectYear(year: CalendarYear): void {\n if (year.isDisabled) return;\n const vd = this.viewDate();\n this.viewDate.set(new Date(year.year, vd.getMonth(), 1));\n this.currentView.set('month');\n }\n\n navigatePrev(): void {\n if (!this.canNavigatePrev()) return;\n const vd = this.viewDate();\n const view = this.currentView();\n\n if (view === 'day') {\n this.viewDate.set(new Date(vd.getFullYear(), vd.getMonth() - 1, 1));\n } else if (view === 'month') {\n this.viewDate.set(new Date(vd.getFullYear() - 1, vd.getMonth(), 1));\n } else {\n this.viewDate.set(new Date(vd.getFullYear() - 10, vd.getMonth(), 1));\n }\n }\n\n navigateNext(): void {\n if (!this.canNavigateNext()) return;\n const vd = this.viewDate();\n const view = this.currentView();\n\n if (view === 'day') {\n this.viewDate.set(new Date(vd.getFullYear(), vd.getMonth() + 1, 1));\n } else if (view === 'month') {\n this.viewDate.set(new Date(vd.getFullYear() + 1, vd.getMonth(), 1));\n } else {\n this.viewDate.set(new Date(vd.getFullYear() + 10, vd.getMonth(), 1));\n }\n }\n\n switchToMonthView(): void {\n this.currentView.set('month');\n }\n\n switchToYearView(): void {\n this.currentView.set('year');\n }\n\n goToToday(): void {\n const today = new Date();\n this.viewDate.set(new Date(today.getFullYear(), today.getMonth(), 1));\n this.currentView.set('day');\n }\n\n clear(event: MouseEvent): void {\n event.stopPropagation();\n if (this.range()) {\n this.value.set({ start: null, end: null });\n } else {\n this.value.set(null);\n }\n }\n\n onDayHover(day: CalendarDay): void {\n if (this.range()) {\n const current = this.value() as DateRange | null;\n if (current && current.start && !current.end) {\n this.hoveredDate.set(day.date);\n }\n }\n }\n\n onDayHoverLeave(): void {\n this.hoveredDate.set(null);\n }\n\n protected handleTriggerKeydown(event: KeyboardEvent): void {\n switch (event.key) {\n case 'Enter':\n case ' ':\n event.preventDefault();\n if (this.isOpen()) {\n const focused = this.focusedDate();\n if (focused && this.currentView() === 'day') {\n const day = this.findDayInGrid(focused);\n if (day && !day.isDisabled) {\n this.selectDay(day);\n }\n }\n } else {\n this.open();\n }\n break;\n case 'ArrowDown':\n event.preventDefault();\n if (!this.isOpen()) {\n this.open();\n } else if (this.currentView() === 'day') {\n this.moveFocus(7);\n }\n break;\n case 'ArrowUp':\n event.preventDefault();\n if (this.currentView() === 'day') {\n this.moveFocus(-7);\n }\n break;\n case 'ArrowLeft':\n event.preventDefault();\n if (this.currentView() === 'day') {\n this.moveFocus(-1);\n }\n break;\n case 'ArrowRight':\n event.preventDefault();\n if (this.currentView() === 'day') {\n this.moveFocus(1);\n }\n break;\n case 'Escape':\n event.preventDefault();\n this.close();\n break;\n case 'Tab':\n this.close();\n break;\n }\n }\n\n // Date formatting\n private formatDate(date: Date, format: string): string {\n const yyyy = date.getFullYear().toString();\n const yy = yyyy.slice(-2);\n const MM = (date.getMonth() + 1).toString().padStart(2, '0');\n const M = (date.getMonth() + 1).toString();\n const dd = date.getDate().toString().padStart(2, '0');\n const d = date.getDate().toString();\n\n return format\n .replace('yyyy', yyyy)\n .replace('yy', yy)\n .replace('MM', MM)\n .replace('M', M)\n .replace('dd', dd)\n .replace('d', d);\n }\n\n private isSameDay(a: Date, b: Date): boolean {\n return (\n a.getFullYear() === b.getFullYear() &&\n a.getMonth() === b.getMonth() &&\n a.getDate() === b.getDate()\n );\n }\n\n private isDateDisabled(date: Date): boolean {\n const min = this.minDate();\n const max = this.maxDate();\n\n if (min && date < new Date(min.getFullYear(), min.getMonth(), min.getDate())) return true;\n if (max && date > new Date(max.getFullYear(), max.getMonth(), max.getDate())) return true;\n\n const disabled = this.disabledDates();\n if (typeof disabled === 'function') {\n return disabled(date);\n }\n if (Array.isArray(disabled)) {\n return disabled.some((d) => this.isSameDay(d, date));\n }\n return false;\n }\n\n private isMonthDisabled(year: number, month: number): boolean {\n const min = this.minDate();\n const max = this.maxDate();\n\n if (min) {\n if (year < min.getFullYear()) return true;\n if (year === min.getFullYear() && month < min.getMonth()) return true;\n }\n if (max) {\n if (year > max.getFullYear()) return true;\n if (year === max.getFullYear() && month > max.getMonth()) return true;\n }\n return false;\n }\n\n private isYearDisabled(year: number): boolean {\n const min = this.minDate();\n const max = this.maxDate();\n\n if (min && year < min.getFullYear()) return true;\n if (max && year > max.getFullYear()) return true;\n return false;\n }\n\n private moveFocus(days: number): void {\n let current = this.focusedDate();\n if (!current) {\n // Start from current value or today\n const val = this.value();\n if (val && !this.range()) {\n current = val as Date;\n } else if (val && this.range()) {\n const r = val as DateRange;\n current = r.start || new Date();\n } else {\n current = new Date();\n }\n }\n\n const next = new Date(current);\n next.setDate(next.getDate() + days);\n\n // If moving outside the current month, navigate\n const vd = this.viewDate();\n if (next.getMonth() !== vd.getMonth() || next.getFullYear() !== vd.getFullYear()) {\n this.viewDate.set(new Date(next.getFullYear(), next.getMonth(), 1));\n }\n\n this.focusedDate.set(next);\n }\n\n private findDayInGrid(date: Date): CalendarDay | null {\n for (const week of this.calendarGrid()) {\n for (const day of week) {\n if (this.isSameDay(day.date, date)) {\n return day;\n }\n }\n }\n return null;\n }\n\n // Portal pattern (matches SelectComponent)\n private portalDropdown(): void {\n const dropdown = this.dropdownRef?.nativeElement;\n if (!dropdown) return;\n\n dropdown.style.display = 'block';\n this.document.body.appendChild(dropdown);\n this.updateDropdownPosition();\n this.addPositionListeners();\n }\n\n private unportalDropdown(): void {\n const dropdown = this.dropdownRef?.nativeElement;\n if (!dropdown) return;\n\n if (dropdown.parentElement === this.document.body) {\n const wrapper = this.elementRef.nativeElement.querySelector('.ui-datepicker-wrapper');\n if (wrapper) {\n wrapper.appendChild(dropdown);\n }\n }\n\n dropdown.style.display = '';\n dropdown.style.position = '';\n dropdown.style.top = '';\n dropdown.style.left = '';\n dropdown.style.bottom = '';\n dropdown.style.minWidth = '';\n dropdown.style.zIndex = '';\n dropdown.style.margin = '';\n\n this.removePositionListeners();\n }\n\n private updateDropdownPosition(): void {\n const trigger = this.triggerRef?.nativeElement;\n const dropdown = this.dropdownRef?.nativeElement;\n if (!trigger || !dropdown) return;\n\n const triggerRect = trigger.getBoundingClientRect();\n const dropdownHeight = dropdown.scrollHeight;\n const gap = 4;\n const spaceBelow = window.innerHeight - triggerRect.bottom;\n const spaceAbove = triggerRect.top;\n const openAbove = spaceBelow < dropdownHeight + gap && spaceAbove > spaceBelow;\n\n dropdown.style.position = 'fixed';\n dropdown.style.minWidth = `${triggerRect.width}px`;\n dropdown.style.left = `${triggerRect.left}px`;\n dropdown.style.zIndex = '99999';\n dropdown.style.margin = '0';\n\n if (openAbove) {\n dropdown.style.top = 'auto';\n dropdown.style.bottom = `${window.innerHeight - triggerRect.top + gap}px`;\n } else {\n dropdown.style.top = `${triggerRect.bottom + gap}px`;\n dropdown.style.bottom = 'auto';\n }\n }\n\n private addPositionListeners(): void {\n const update = () => {\n if (this.isOpen()) {\n this.updateDropdownPosition();\n }\n };\n window.addEventListener('scroll', update, true);\n window.addEventListener('resize', update);\n this.positionCleanup = () => {\n window.removeEventListener('scroll', update, true);\n window.removeEventListener('resize', update);\n };\n }\n\n private removePositionListeners(): void {\n this.positionCleanup?.();\n this.positionCleanup = null;\n }\n}\n","<div\n class=\"ui-datepicker-wrapper\"\n [class.ui-datepicker-wrapper--error]=\"error()\"\n [class.ui-datepicker-wrapper--disabled]=\"disabled()\"\n [class.ui-datepicker-wrapper--open]=\"isOpen()\"\n>\n @if (label()) {\n <label class=\"ui-datepicker__label\" [attr.for]=\"inputId()\">\n {{ label() }}\n @if (required()) {\n <span class=\"ui-datepicker__required\">*</span>\n }\n </label>\n }\n\n <div\n #triggerRef\n class=\"ui-datepicker__trigger\"\n [class]=\"triggerClasses()\"\n [attr.role]=\"'combobox'\"\n [attr.aria-expanded]=\"isOpen()\"\n [attr.aria-haspopup]=\"'dialog'\"\n [attr.aria-disabled]=\"disabled()\"\n [attr.tabindex]=\"disabled() ? -1 : 0\"\n (click)=\"toggle()\"\n (keydown)=\"handleTriggerKeydown($event)\"\n >\n <span class=\"ui-datepicker__value\">\n @if (displayValue()) {\n {{ displayValue() }}\n } @else {\n <span class=\"ui-datepicker__placeholder\">{{ placeholder() }}</span>\n }\n </span>\n\n <div class=\"ui-datepicker__icons\">\n @if (clearable() && hasValue() && !disabled() && !readonly()) {\n <button\n type=\"button\"\n class=\"ui-datepicker__clear\"\n (click)=\"clear($event)\"\n aria-label=\"Clear date\"\n >\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\">\n <line x1=\"18\" y1=\"6\" x2=\"6\" y2=\"18\"></line>\n <line x1=\"6\" y1=\"6\" x2=\"18\" y2=\"18\"></line>\n </svg>\n </button>\n }\n <svg\n class=\"ui-datepicker__calendar-icon\"\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n >\n <rect x=\"3\" y=\"4\" width=\"18\" height=\"18\" rx=\"2\" ry=\"2\"></rect>\n <line x1=\"16\" y1=\"2\" x2=\"16\" y2=\"6\"></line>\n <line x1=\"8\" y1=\"2\" x2=\"8\" y2=\"6\"></line>\n <line x1=\"3\" y1=\"10\" x2=\"21\" y2=\"10\"></line>\n </svg>\n </div>\n </div>\n\n <div\n #dropdownRef\n class=\"ui-datepicker__dropdown\"\n [class.ui-datepicker__dropdown--open]=\"isOpen()\"\n [attr.role]=\"'dialog'\"\n [attr.aria-label]=\"'Date picker'\"\n >\n <div class=\"ui-datepicker__header\">\n <button\n type=\"button\"\n class=\"ui-datepicker__nav-btn\"\n [disabled]=\"!canNavigatePrev()\"\n (click)=\"navigatePrev()\"\n aria-label=\"Previous\"\n >\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\">\n <polyline points=\"15 18 9 12 15 6\"></polyline>\n </svg>\n </button>\n\n @if (currentView() === 'day') {\n <button\n type=\"button\"\n class=\"ui-datepicker__header-label\"\n (click)=\"switchToMonthView()\"\n >\n {{ monthYearLabel() }}\n </button>\n } @else if (currentView() === 'month') {\n <button\n type=\"button\"\n class=\"ui-datepicker__header-label\"\n (click)=\"switchToYearView()\"\n >\n {{ viewDate().getFullYear() }}\n </button>\n } @else {\n <span class=\"ui-datepicker__header-label ui-datepicker__header-label--static\">\n {{ decadeLabel() }}\n </span>\n }\n\n <button\n type=\"button\"\n class=\"ui-datepicker__nav-btn\"\n [disabled]=\"!canNavigateNext()\"\n (click)=\"navigateNext()\"\n aria-label=\"Next\"\n >\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\">\n <polyline points=\"9 18 15 12 9 6\"></polyline>\n </svg>\n </button>\n </div>\n\n @if (currentView() === 'day') {\n <div class=\"ui-datepicker__calendar\" role=\"grid\">\n <div class=\"ui-datepicker__weekdays\">\n @for (header of weekdayHeaders(); track header) {\n <div class=\"ui-datepicker__weekday\">{{ header }}</div>\n }\n </div>\n @for (week of calendarGrid(); track $index) {\n <div class=\"ui-datepicker__week\" role=\"row\">\n @for (day of week; track day.date.getTime()) {\n <button\n type=\"button\"\n class=\"ui-datepicker__day\"\n [class.ui-datepicker__day--outside]=\"!day.isCurrentMonth\"\n [class.ui-datepicker__day--today]=\"day.isToday\"\n [class.ui-datepicker__day--selected]=\"day.isSelected\"\n [class.ui-datepicker__day--in-range]=\"day.isInRange\"\n [class.ui-datepicker__day--range-start]=\"day.isRangeStart\"\n [class.ui-datepicker__day--range-end]=\"day.isRangeEnd\"\n [class.ui-datepicker__day--disabled]=\"day.isDisabled\"\n [class.ui-datepicker__day--focused]=\"day.isFocused\"\n [disabled]=\"day.isDisabled\"\n (click)=\"selectDay(day)\"\n (mouseenter)=\"onDayHover(day)\"\n (mouseleave)=\"onDayHoverLeave()\"\n role=\"gridcell\"\n [attr.aria-selected]=\"day.isSelected\"\n >\n {{ day.day }}\n </button>\n }\n </div>\n }\n </div>\n } @else if (currentView() === 'month') {\n <div class=\"ui-datepicker__months\">\n @for (row of monthGrid(); track $index) {\n <div class=\"ui-datepicker__month-row\">\n @for (month of row; track month.month) {\n <button\n type=\"button\"\n class=\"ui-datepicker__month\"\n [class.ui-datepicker__month--selected]=\"month.isSelected\"\n [class.ui-datepicker__month--current]=\"month.isCurrent\"\n [class.ui-datepicker__month--disabled]=\"month.isDisabled\"\n [disabled]=\"month.isDisabled\"\n (click)=\"selectMonth(month)\"\n >\n {{ month.label }}\n </button>\n }\n </div>\n }\n </div>\n } @else {\n <div class=\"ui-datepicker__years\">\n @for (row of yearGrid(); track $index) {\n <div class=\"ui-datepicker__year-row\">\n @for (year of row; track year.year) {\n <button\n type=\"button\"\n class=\"ui-datepicker__year\"\n [class.ui-datepicker__year--selected]=\"year.isSelected\"\n [class.ui-datepicker__year--current]=\"year.isCurrent\"\n [class.ui-datepicker__year--disabled]=\"year.isDisabled\"\n [class.ui-datepicker__year--outside]=\"!year.isInRange\"\n [disabled]=\"year.isDisabled\"\n (click)=\"selectYear(year)\"\n >\n {{ year.year }}\n </button>\n }\n </div>\n }\n </div>\n }\n\n <div class=\"ui-datepicker__footer\">\n <button\n type=\"button\"\n class=\"ui-datepicker__today-btn\"\n (click)=\"goToToday()\"\n >\n Today\n </button>\n </div>\n </div>\n\n @if (error()) {\n <span class=\"ui-datepicker__error\">{{ error() }}</span>\n }\n @if (hint() && !error()) {\n <span class=\"ui-datepicker__hint\">{{ hint() }}</span>\n }\n</div>\n","import {\n Component,\n input,\n model,\n output,\n signal,\n computed,\n ChangeDetectionStrategy,\n ElementRef,\n inject,\n HostListener,\n OnDestroy,\n ViewChild,\n} from '@angular/core';\nimport { DOCUMENT } from '@angular/common';\n\nexport type TimepickerSize = 'sm' | 'md' | 'lg';\nexport type TimepickerVariant = 'default' | 'outlined' | 'filled';\nexport type TimeFormat = '12h' | '24h';\n\nexport interface TimeValue {\n hours: number;\n minutes: number;\n seconds?: number;\n}\n\n@Component({\n selector: 'ui-timepicker',\n standalone: true,\n templateUrl: './timepicker.component.html',\n styleUrl: './timepicker.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class TimepickerComponent implements OnDestroy {\n // Inputs\n readonly variant = input<TimepickerVariant>('default');\n readonly size = input<TimepickerSize>('md');\n readonly placeholder = input('Select time');\n readonly label = input('');\n readonly hint = input('');\n readonly error = input('');\n readonly disabled = input(false);\n readonly readonly = input(false);\n readonly clearable = input(false);\n readonly required = input(false);\n readonly showSeconds = input(false);\n readonly format = input<TimeFormat>('24h');\n readonly minuteStep = input(1);\n readonly secondStep = input(1);\n readonly minTime = input<TimeValue | null>(null);\n readonly maxTime = input<TimeValue | null>(null);\n readonly id = input('');\n\n // Two-way binding\n readonly value = model<TimeValue | null>(null);\n\n // Outputs\n readonly opened = output<void>();\n readonly closed = output<void>();\n\n // View children for dropdown portal\n @ViewChild('triggerRef', { static: true }) triggerRef!: ElementRef<HTMLElement>;\n @ViewChild('dropdownRef', { static: true }) dropdownRef!: ElementRef<HTMLElement>;\n\n // Internal state\n readonly isOpen = signal(false);\n readonly selectedHour = signal(0);\n readonly selectedMinute = signal(0);\n readonly selectedSecond = signal(0);\n readonly selectedPeriod = signal<'AM' | 'PM'>('AM');\n\n private readonly elementRef = inject(ElementRef);\n private readonly document = inject(DOCUMENT);\n private positionCleanup: (() => void) | null = null;\n\n private static nextId = 0;\n private readonly generatedId = `ui-timepicker-${++TimepickerComponent.nextId}`;\n\n protected readonly inputId = computed(() => this.id() || this.generatedId);\n\n // Computed: hours list\n protected readonly hoursList = computed(() => {\n const is12h = this.format() === '12h';\n const hours: number[] = [];\n const max = is12h ? 12 : 24;\n const start = is12h ? 1 : 0;\n\n for (let i = start; i <= (is12h ? 12 : 23); i++) {\n hours.push(i);\n }\n return hours;\n });\n\n // Computed: minutes list\n protected readonly minutesList = computed(() => {\n const step = this.minuteStep();\n const minutes: number[] = [];\n for (let i = 0; i < 60; i += step) {\n minutes.push(i);\n }\n return minutes;\n });\n\n // Computed: seconds list\n protected readonly secondsList = computed(() => {\n const step = this.secondStep();\n const seconds: number[] = [];\n for (let i = 0; i < 60; i += step) {\n seconds.push(i);\n }\n return seconds;\n });\n\n // Computed: display value\n protected readonly displayValue = computed(() => {\n const val = this.value();\n if (!val) return '';\n\n const is12h = this.format() === '12h';\n let hours = val.hours;\n let period = '';\n\n if (is12h) {\n period = hours >= 12 ? ' PM' : ' AM';\n hours = hours % 12;\n if (hours === 0) hours = 12;\n }\n\n const hStr = hours.toString().padStart(2, '0');\n const mStr = val.minutes.toString().padStart(2, '0');\n\n if (this.showSeconds() && val.seconds !== undefined) {\n const sStr = val.seconds.toString().padStart(2, '0');\n return `${hStr}:${mStr}:${sStr}${period}`;\n }\n\n return `${hStr}:${mStr}${period}`;\n });\n\n // Computed: trigger CSS classes\n protected readonly triggerClasses = computed(() => {\n return `ui-timepicker__trigger--${this.variant()} ui-timepicker__trigger--${this.size()}`;\n });\n\n // Computed: has value\n protected readonly hasValue = computed(() => {\n return this.value() !== null;\n });\n\n ngOnDestroy(): void {\n const dropdown = this.dropdownRef?.nativeElement;\n if (dropdown?.parentElement === this.document.body) {\n this.document.body.removeChild(dropdown);\n }\n this.removePositionListeners();\n }\n\n @HostListener('document:click', ['$event'])\n onDocumentClick(event: MouseEvent): void {\n const target = event.target as Node;\n if (\n !this.elementRef.nativeElement.contains(target) &&\n !this.dropdownRef?.nativeElement?.contains(target)\n ) {\n this.close();\n }\n }\n\n toggle(): void {\n if (this.disabled() || this.readonly()) return;\n if (this.isOpen()) {\n this.close();\n } else {\n this.open();\n }\n }\n\n open(): void {\n if (this.disabled() || this.readonly() || this.isOpen()) return;\n this.isOpen.set(true);\n\n // Initialize selection from current value\n const val = this.value();\n if (val) {\n const is12h = this.format() === '12h';\n if (is12h) {\n const period = val.hours >= 12 ? 'PM' : 'AM';\n let hours = val.hours % 12;\n if (hours === 0) hours = 12;\n this.selectedHour.set(hours);\n this.selectedPeriod.set(period);\n } else {\n this.selectedHour.set(val.hours);\n }\n this.selectedMinute.set(val.minutes);\n this.selectedSecond.set(val.seconds ?? 0);\n } else {\n const now = new Date();\n const is12h = this.format() === '12h';\n if (is12h) {\n const hours = now.getHours();\n this.selectedPeriod.set(hours >= 12 ? 'PM' : 'AM');\n let h = hours % 12;\n if (h === 0) h = 12;\n this.selectedHour.set(h);\n } else {\n this.selectedHour.set(now.getHours());\n }\n this.selectedMinute.set(now.getMinutes());\n this.selectedSecond.set(now.getSeconds());\n }\n\n this.opened.emit();\n this.portalDropdown();\n }\n\n close(): void {\n if (!this.isOpen()) return;\n this.unportalDropdown();\n this.isOpen.set(false);\n this.closed.emit();\n }\n\n selectHour(hour: number): void {\n this.selectedHour.set(hour);\n this.updateValue();\n }\n\n selectMinute(minute: number): void {\n this.selectedMinute.set(minute);\n this.updateValue();\n }\n\n selectSecond(second: number): void {\n this.selectedSecond.set(second);\n this.updateValue();\n }\n\n selectPeriod(period: 'AM' | 'PM'): void {\n this.selectedPeriod.set(period);\n this.updateValue();\n }\n\n setNow(): void {\n const now = new Date();\n const is12h = this.format() === '12h';\n const hours = now.getHours();\n\n if (is12h) {\n this.selectedPeriod.set(hours >= 12 ? 'PM' : 'AM');\n let h = hours % 12;\n if (h === 0) h = 12;\n this.selectedHour.set(h);\n } else {\n this.selectedHour.set(hours);\n }\n this.selectedMinute.set(now.getMinutes());\n this.selectedSecond.set(now.getSeconds());\n this.updateValue();\n }\n\n clear(event: MouseEvent): void {\n event.stopPropagation();\n this.value.set(null);\n }\n\n protected isHourDisabled(hour: number): boolean {\n return false; // Can be extended for min/max time validation\n }\n\n protected isMinuteDisabled(minute: number): boolean {\n return false; // Can be extended for min/max time validation\n }\n\n protected isSecondDisabled(second: number): boolean {\n return false; // Can be extended for min/max time validation\n }\n\n protected handleTriggerKeydown(event: KeyboardEvent): void {\n switch (event.key) {\n case 'Enter':\n case ' ':\n event.preventDefault();\n this.toggle();\n break;\n case 'Escape':\n event.preventDefault();\n this.close();\n break;\n case 'Tab':\n this.close();\n break;\n }\n }\n\n protected formatNumber(n: number): string {\n return n.toString().padStart(2, '0');\n }\n\n private updateValue(): void {\n const is12h = this.format() === '12h';\n let hours = this.selectedHour();\n\n if (is12h) {\n if (this.selectedPeriod() === 'PM' && hours !== 12) {\n hours += 12;\n } else if (this.selectedPeriod() === 'AM' && hours === 12) {\n hours = 0;\n }\n }\n\n const newValue: TimeValue = {\n hours,\n minutes: this.selectedMinute(),\n };\n\n if (this.showSeconds()) {\n newValue.seconds = this.selectedSecond();\n }\n\n this.value.set(newValue);\n }\n\n // Portal pattern\n private portalDropdown(): void {\n const dropdown = this.dropdownRef?.nativeElement;\n if (!dropdown) return;\n\n dropdown.style.display = 'block';\n this.document.body.appendChild(dropdown);\n this.updateDropdownPosition();\n this.addPositionListeners();\n }\n\n private unportalDropdown(): void {\n const dropdown = this.dropdownRef?.nativeElement;\n if (!dropdown) return;\n\n if (dropdown.parentElement === this.document.body) {\n const wrapper = this.elementRef.nativeElement.querySelector('.ui-timepicker-wrapper');\n if (wrapper) {\n wrapper.appendChild(dropdown);\n }\n }\n\n dropdown.style.display = '';\n dropdown.style.position = '';\n dropdown.style.top = '';\n dropdown.style.left = '';\n dropdown.style.bottom = '';\n dropdown.style.minWidth = '';\n dropdown.style.zIndex = '';\n dropdown.style.margin = '';\n\n this.removePositionListeners();\n }\n\n private updateDropdownPosition(): void {\n const trigger = this.triggerRef?.nativeElement;\n const dropdown = this.dropdownRef?.nativeElement;\n if (!trigger || !dropdown) return;\n\n const triggerRect = trigger.getBoundingClientRect();\n const dropdownHeight = dropdown.scrollHeight;\n const gap = 4;\n const spaceBelow = window.innerHeight - triggerRect.bottom;\n const spaceAbove = triggerRect.top;\n const openAbove = spaceBelow < dropdownHeight + gap && spaceAbove > spaceBelow;\n\n dropdown.style.position = 'fixed';\n dropdown.style.minWidth = `${triggerRect.width}px`;\n dropdown.style.left = `${triggerRect.left}px`;\n dropdown.style.zIndex = '99999';\n dropdown.style.margin = '0';\n\n if (openAbove) {\n dropdown.style.top = 'auto';\n dropdown.style.bottom = `${window.innerHeight - triggerRect.top + gap}px`;\n } else {\n dropdown.style.top = `${triggerRect.bottom + gap}px`;\n dropdown.style.bottom = 'auto';\n }\n }\n\n private addPositionListeners(): void {\n const update = () => {\n if (this.isOpen()) {\n this.updateDropdownPosition();\n }\n };\n window.addEventListener('scroll', update, true);\n window.addEventListener('resize', update);\n this.positionCleanup = () => {\n window.removeEventListener('scroll', update, true);\n window.removeEventListener('resize', update);\n };\n }\n\n private removePositionListeners(): void {\n this.positionCleanup?.();\n this.positionCleanup = null;\n }\n}\n","<div\n class=\"ui-timepicker-wrapper\"\n [class.ui-timepicker-wrapper--error]=\"error()\"\n [class.ui-timepicker-wrapper--disabled]=\"disabled()\"\n [class.ui-timepicker-wrapper--open]=\"isOpen()\"\n>\n @if (label()) {\n <label class=\"ui-timepicker__label\" [attr.for]=\"inputId()\">\n {{ label() }}\n @if (required()) {\n <span class=\"ui-timepicker__required\">*</span>\n }\n </label>\n }\n\n <div\n #triggerRef\n class=\"ui-timepicker__trigger\"\n [class]=\"triggerClasses()\"\n [attr.role]=\"'combobox'\"\n [attr.aria-expanded]=\"isOpen()\"\n [attr.aria-haspopup]=\"'dialog'\"\n [attr.aria-disabled]=\"disabled()\"\n [attr.tabindex]=\"disabled() ? -1 : 0\"\n (click)=\"toggle()\"\n (keydown)=\"handleTriggerKeydown($event)\"\n >\n <span class=\"ui-timepicker__value\">\n @if (displayValue()) {\n {{ displayValue() }}\n } @else {\n <span class=\"ui-timepicker__placeholder\">{{ placeholder() }}</span>\n }\n </span>\n\n <div class=\"ui-timepicker__icons\">\n @if (clearable() && hasValue() && !disabled() && !readonly()) {\n <button\n type=\"button\"\n class=\"ui-timepicker__clear\"\n (click)=\"clear($event)\"\n aria-label=\"Clear time\"\n >\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\">\n <line x1=\"18\" y1=\"6\" x2=\"6\" y2=\"18\"></line>\n <line x1=\"6\" y1=\"6\" x2=\"18\" y2=\"18\"></line>\n </svg>\n </button>\n }\n <svg\n class=\"ui-timepicker__clock-icon\"\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n >\n <circle cx=\"12\" cy=\"12\" r=\"10\"></circle>\n <polyline points=\"12 6 12 12 16 14\"></polyline>\n </svg>\n </div>\n </div>\n\n <div\n #dropdownRef\n class=\"ui-timepicker__dropdown\"\n [class.ui-timepicker__dropdown--open]=\"isOpen()\"\n [attr.role]=\"'dialog'\"\n [attr.aria-label]=\"'Time picker'\"\n >\n <div class=\"ui-timepicker__columns\">\n <!-- Hours -->\n <div class=\"ui-timepicker__column\">\n <div class=\"ui-timepicker__column-header\">Hr</div>\n <div class=\"ui-timepicker__column-list\">\n @for (hour of hoursList(); track hour) {\n <button\n type=\"button\"\n class=\"ui-timepicker__option\"\n [class.ui-timepicker__option--selected]=\"hour === selectedHour()\"\n [disabled]=\"isHourDisabled(hour)\"\n (click)=\"selectHour(hour)\"\n >\n {{ formatNumber(hour) }}\n </button>\n }\n </div>\n </div>\n\n <!-- Minutes -->\n <div class=\"ui-timepicker__column\">\n <div class=\"ui-timepicker__column-header\">Min</div>\n <div class=\"ui-timepicker__column-list\">\n @for (minute of minutesList(); track minute) {\n <button\n type=\"button\"\n class=\"ui-timepicker__option\"\n [class.ui-timepicker__option--selected]=\"minute === selectedMinute()\"\n [disabled]=\"isMinuteDisabled(minute)\"\n (click)=\"selectMinute(minute)\"\n >\n {{ formatNumber(minute) }}\n </button>\n }\n </div>\n </div>\n\n <!-- Seconds (optional) -->\n @if (showSeconds()) {\n <div class=\"ui-timepicker__column\">\n <div class=\"ui-timepicker__column-header\">Sec</div>\n <div class=\"ui-timepicker__column-list\">\n @for (second of secondsList(); track second) {\n <button\n type=\"button\"\n class=\"ui-timepicker__option\"\n [class.ui-timepicker__option--selected]=\"second === selectedSecond()\"\n [disabled]=\"isSecondDisabled(second)\"\n (click)=\"selectSecond(second)\"\n >\n {{ formatNumber(second) }}\n </button>\n }\n </div>\n </div>\n }\n\n <!-- AM/PM (12h format) -->\n @if (format() === '12h') {\n <div class=\"ui-timepicker__column ui-timepicker__column--period\">\n <div class=\"ui-timepicker__column-header\"> </div>\n <div class=\"ui-timepicker__column-list\">\n <button\n type=\"button\"\n class=\"ui-timepicker__option\"\n [class.ui-timepicker__option--selected]=\"selectedPeriod() === 'AM'\"\n (click)=\"selectPeriod('AM')\"\n >\n AM\n </button>\n <button\n type=\"button\"\n class=\"ui-timepicker__option\"\n [class.ui-timepicker__option--selected]=\"selectedPeriod() === 'PM'\"\n (click)=\"selectPeriod('PM')\"\n >\n PM\n </button>\n </div>\n </div>\n }\n </div>\n\n <div class=\"ui-timepicker__footer\">\n <button\n type=\"button\"\n class=\"ui-timepicker__now-btn\"\n (click)=\"setNow()\"\n >\n Now\n </button>\n </div>\n </div>\n\n @if (error()) {\n <span class=\"ui-timepicker__error\">{{ error() }}</span>\n }\n @if (hint() && !error()) {\n <span class=\"ui-timepicker__hint\">{{ hint() }}</span>\n }\n</div>\n","import {\n Component,\n input,\n model,\n output,\n signal,\n computed,\n ChangeDetectionStrategy,\n ElementRef,\n inject,\n HostListener,\n OnDestroy,\n ViewChild,\n} from '@angular/core';\nimport { DOCUMENT } from '@angular/common';\nimport { TimeValue, TimeFormat } from '../timepicker/timepicker.component';\n\nexport type DatetimepickerSize = 'sm' | 'md' | 'lg';\nexport type DatetimepickerVariant = 'default' | 'outlined' | 'filled';\nexport type DatetimepickerView = 'day' | 'month' | 'year';\n\nexport interface CalendarDay {\n date: Date;\n day: number;\n isCurrentMonth: boolean;\n isToday: boolean;\n isSelected: boolean;\n isDisabled: boolean;\n isFocused: boolean;\n}\n\nexport interface CalendarMonth {\n month: number;\n label: string;\n isSelected: boolean;\n isDisabled: boolean;\n isCurrent: boolean;\n}\n\nexport interface CalendarYear {\n year: number;\n isSelected: boolean;\n isDisabled: boolean;\n isCurrent: boolean;\n isInRange: boolean;\n}\n\n@Component({\n selector: 'ui-datetimepicker',\n standalone: true,\n templateUrl: './datetimepicker.component.html',\n styleUrl: './datetimepicker.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class DatetimepickerComponent implements OnDestroy {\n // Inputs\n readonly variant = input<DatetimepickerVariant>('default');\n readonly size = input<DatetimepickerSize>('md');\n readonly placeholder = input('Select date and time');\n readonly label = input('');\n readonly hint = input('');\n readonly error = input('');\n readonly disabled = input(false);\n readonly readonly = input(false);\n readonly clearable = input(false);\n readonly required = input(false);\n readonly showSeconds = input(false);\n readonly timeFormat = input<TimeFormat>('24h');\n readonly dateFormat = input('yyyy-MM-dd');\n readonly minuteStep = input(1);\n readonly secondStep = input(1);\n readonly minDate = input<Date | null>(null);\n readonly maxDate = input<Date | null>(null);\n readonly disabledDates = input<Date[] | ((date: Date) => boolean)>([]);\n readonly firstDayOfWeek = input<0 | 1>(1);\n readonly id = input('');\n\n // Two-way binding\n readonly value = model<Date | null>(null);\n\n // Outputs\n readonly opened = output<void>();\n readonly closed = output<void>();\n\n // View children for dropdown portal\n @ViewChild('triggerRef', { static: true }) triggerRef!: ElementRef<HTMLElement>;\n @ViewChild('dropdownRef', { static: true }) dropdownRef!: ElementRef<HTMLElement>;\n\n // Internal state\n readonly isOpen = signal(false);\n readonly currentView = signal<DatetimepickerView>('day');\n readonly viewDate = signal(new Date());\n readonly focusedDate = signal<Date | null>(null);\n\n // Time state\n readonly selectedHour = signal(0);\n readonly selectedMinute = signal(0);\n readonly selectedSecond = signal(0);\n readonly selectedPeriod = signal<'AM' | 'PM'>('AM');\n\n private readonly elementRef = inject(ElementRef);\n private readonly document = inject(DOCUMENT);\n private positionCleanup: (() => void) | null = null;\n\n private static nextId = 0;\n private readonly generatedId = `ui-datetimepicker-${++DatetimepickerComponent.nextId}`;\n\n protected readonly inputId = computed(() => this.id() || this.generatedId);\n\n // Computed: hours list\n protected readonly hoursList = computed(() => {\n const is12h = this.timeFormat() === '12h';\n const hours: number[] = [];\n const start = is12h ? 1 : 0;\n const max = is12h ? 12 : 23;\n\n for (let i = start; i <= max; i++) {\n hours.push(i);\n }\n return hours;\n });\n\n // Computed: minutes list\n protected readonly minutesList = computed(() => {\n const step = this.minuteStep();\n const minutes: number[] = [];\n for (let i = 0; i < 60; i += step) {\n minutes.push(i);\n }\n return minutes;\n });\n\n // Computed: seconds list\n protected readonly secondsList = computed(() => {\n const step = this.secondStep();\n const seconds: number[] = [];\n for (let i = 0; i < 60; i += step) {\n seconds.push(i);\n }\n return seconds;\n });\n\n // Computed: display value\n protected readonly displayValue = computed(() => {\n const val = this.value();\n if (!val) return '';\n\n const datePart = this.formatDate(val, this.dateFormat());\n const timePart = this.formatTime(val);\n\n return `${datePart} ${timePart}`;\n });\n\n // Computed: trigger CSS classes\n protected readonly triggerClasses = computed(() => {\n return `ui-datetimepicker__trigger--${this.variant()} ui-datetimepicker__trigger--${this.size()}`;\n });\n\n // Computed: has value\n protected readonly hasValue = computed(() => {\n return this.value() !== null;\n });\n\n // Computed: weekday headers\n protected readonly weekdayHeaders = computed(() => {\n const first = this.firstDayOfWeek();\n const formatter = new Intl.DateTimeFormat(undefined, { weekday: 'short' });\n const headers: string[] = [];\n const base = new Date(1970, 0, 4 + first);\n for (let i = 0; i < 7; i++) {\n const d = new Date(base);\n d.setDate(base.getDate() + i);\n headers.push(formatter.format(d));\n }\n return headers;\n });\n\n // Computed: month/year label for header\n protected readonly monthYearLabel = computed(() => {\n const vd = this.viewDate();\n const formatter = new Intl.DateTimeFormat(undefined, { month: 'long', year: 'numeric' });\n return formatter.format(vd);\n });\n\n // Computed: decade label for year view\n protected readonly decadeLabel = computed(() => {\n const year = this.viewDate().getFullYear();\n const startYear = year - (year % 10);\n return `${startYear} — ${startYear + 9}`;\n });\n\n // Computed: calendar grid (6 weeks x 7 days)\n protected readonly calendarGrid = computed(() => {\n const vd = this.viewDate();\n const year = vd.getFullYear();\n const month = vd.getMonth();\n const first = this.firstDayOfWeek();\n const today = new Date();\n const val = this.value();\n const focused = this.focusedDate();\n\n const firstOfMonth = new Date(year, month, 1);\n let dayOfWeek = firstOfMonth.getDay() - first;\n if (dayOfWeek < 0) dayOfWeek += 7;\n const gridStart = new Date(year, month, 1 - dayOfWeek);\n\n const grid: CalendarDay[][] = [];\n const cursor = new Date(gridStart);\n\n for (let week = 0; week < 6; week++) {\n const row: CalendarDay[] = [];\n for (let day = 0; day < 7; day++) {\n const date = new Date(cursor);\n const isCurrentMonth = date.getMonth() === month;\n const isToday = this.isSameDay(date, today);\n const isSelected = val ? this.isSameDay(date, val) : false;\n const isDisabled = this.isDateDisabled(date);\n const isFocused = focused ? this.isSameDay(date, focused) : false;\n\n row.push({\n date,\n day: date.getDate(),\n isCurrentMonth,\n isToday,\n isSelected,\n isDisabled,\n isFocused,\n });\n\n cursor.setDate(cursor.getDate() + 1);\n }\n grid.push(row);\n }\n\n return grid;\n });\n\n // Computed: month grid (4 rows x 3 columns)\n protected readonly monthGrid = computed(() => {\n const vd = this.viewDate();\n const year = vd.getFullYear();\n const today = new Date();\n const val = this.value();\n const formatter = new Intl.DateTimeFormat(undefined, { month: 'short' });\n\n const grid: CalendarMonth[][] = [];\n let monthIdx = 0;\n\n for (let row = 0; row < 4; row++) {\n const rowArr: CalendarMonth[] = [];\n for (let col = 0; col < 3; col++) {\n const date = new Date(year, monthIdx, 1);\n const isSelected = val ? val.getFullYear() === year && val.getMonth() === monthIdx : false;\n const isDisabled = this.isMonthDisabled(year, monthIdx);\n const isCurrent = today.getFullYear() === year && today.getMonth() === monthIdx;\n\n rowArr.push({\n month: monthIdx,\n label: formatter.format(date),\n isSelected,\n isDisabled,\n isCurrent,\n });\n monthIdx++;\n }\n grid.push(rowArr);\n }\n\n return grid;\n });\n\n // Computed: year grid (4 rows x 3 columns)\n protected readonly yearGrid = computed(() => {\n const vd = this.viewDate();\n const year = vd.getFullYear();\n const startYear = year - (year % 10) - 1;\n const today = new Date();\n const val = this.value();\n\n const grid: CalendarYear[][] = [];\n let yearIdx = startYear;\n\n for (let row = 0; row < 4; row++) {\n const rowArr: CalendarYear[] = [];\n for (let col = 0; col < 3; col++) {\n const isSelected = val ? val.getFullYear() === yearIdx : false;\n const isDisabled = this.isYearDisabled(yearIdx);\n const isCurrent = today.getFullYear() === yearIdx;\n const isInRange = yearIdx >= startYear + 1 && yearIdx <= startYear + 10;\n\n rowArr.push({\n year: yearIdx,\n isSelected,\n isDisabled,\n isCurrent,\n isInRange,\n });\n yearIdx++;\n }\n grid.push(rowArr);\n }\n\n return grid;\n });\n\n // Computed: can navigate prev/next\n protected readonly canNavigatePrev = computed(() => {\n const min = this.minDate();\n if (!min) return true;\n const vd = this.viewDate();\n const view = this.currentView();\n\n if (view === 'day') {\n return vd.getFullYear() > min.getFullYear() ||\n (vd.getFullYear() === min.getFullYear() && vd.getMonth() > min.getMonth());\n }\n if (view === 'month') {\n return vd.getFullYear() > min.getFullYear();\n }\n const startYear = vd.getFullYear() - (vd.getFullYear() % 10);\n return startYear > min.getFullYear();\n });\n\n protected readonly canNavigateNext = computed(() => {\n const max = this.maxDate();\n if (!max) return true;\n const vd = this.viewDate();\n const view = this.currentView();\n\n if (view === 'day') {\n return vd.getFullYear() < max.getFullYear() ||\n (vd.getFullYear() === max.getFullYear() && vd.getMonth() < max.getMonth());\n }\n if (view === 'month') {\n return vd.getFullYear() < max.getFullYear();\n }\n const startYear = vd.getFullYear() - (vd.getFullYear() % 10);\n return startYear + 9 < max.getFullYear();\n });\n\n ngOnDestroy(): void {\n const dropdown = this.dropdownRef?.nativeElement;\n if (dropdown?.parentElement === this.document.body) {\n this.document.body.removeChild(dropdown);\n }\n this.removePositionListeners();\n }\n\n @HostListener('document:click', ['$event'])\n onDocumentClick(event: MouseEvent): void {\n const target = event.target as Node;\n if (\n !this.elementRef.nativeElement.contains(target) &&\n !this.dropdownRef?.nativeElement?.contains(target)\n ) {\n this.close();\n }\n }\n\n toggle(): void {\n if (this.disabled() || this.readonly()) return;\n if (this.isOpen()) {\n this.close();\n } else {\n this.open();\n }\n }\n\n open(): void {\n if (this.disabled() || this.readonly() || this.isOpen()) return;\n this.isOpen.set(true);\n this.currentView.set('day');\n this.focusedDate.set(null);\n\n const val = this.value();\n if (val) {\n this.viewDate.set(new Date(val.getFullYear(), val.getMonth(), 1));\n this.initTimeFromValue(val);\n } else {\n const today = new Date();\n this.viewDate.set(new Date(today.getFullYear(), today.getMonth(), 1));\n this.initTimeFromValue(today);\n }\n\n this.opened.emit();\n this.portalDropdown();\n }\n\n close(): void {\n if (!this.isOpen()) return;\n this.unportalDropdown();\n this.isOpen.set(false);\n this.focusedDate.set(null);\n this.closed.emit();\n }\n\n selectDay(day: CalendarDay): void {\n if (day.isDisabled) return;\n\n const date = new Date(day.date);\n this.applyTimeToDate(date);\n this.value.set(date);\n }\n\n selectMonth(month: CalendarMonth): void {\n if (month.isDisabled) return;\n const vd = this.viewDate();\n this.viewDate.set(new Date(vd.getFullYear(), month.month, 1));\n this.currentView.set('day');\n }\n\n selectYear(year: CalendarYear): void {\n if (year.isDisabled) return;\n const vd = this.viewDate();\n this.viewDate.set(new Date(year.year, vd.getMonth(), 1));\n this.currentView.set('month');\n }\n\n navigatePrev(): void {\n if (!this.canNavigatePrev()) return;\n const vd = this.viewDate();\n const view = this.currentView();\n\n if (view === 'day') {\n this.viewDate.set(new Date(vd.getFullYear(), vd.getMonth() - 1, 1));\n } else if (view === 'month') {\n this.viewDate.set(new Date(vd.getFullYear() - 1, vd.getMonth(), 1));\n } else {\n this.viewDate.set(new Date(vd.getFullYear() - 10, vd.getMonth(), 1));\n }\n }\n\n navigateNext(): void {\n if (!this.canNavigateNext()) return;\n const vd = this.viewDate();\n const view = this.currentView();\n\n if (view === 'day') {\n this.viewDate.set(new Date(vd.getFullYear(), vd.getMonth() + 1, 1));\n } else if (view === 'month') {\n this.viewDate.set(new Date(vd.getFullYear() + 1, vd.getMonth(), 1));\n } else {\n this.viewDate.set(new Date(vd.getFullYear() + 10, vd.getMonth(), 1));\n }\n }\n\n switchToMonthView(): void {\n this.currentView.set('month');\n }\n\n switchToYearView(): void {\n this.currentView.set('year');\n }\n\n goToNow(): void {\n const now = new Date();\n this.viewDate.set(new Date(now.getFullYear(), now.getMonth(), 1));\n this.currentView.set('day');\n this.initTimeFromValue(now);\n this.value.set(now);\n }\n\n selectHour(hour: number): void {\n this.selectedHour.set(hour);\n this.updateValueWithTime();\n }\n\n selectMinute(minute: number): void {\n this.selectedMinute.set(minute);\n this.updateValueWithTime();\n }\n\n selectSecond(second: number): void {\n this.selectedSecond.set(second);\n this.updateValueWithTime();\n }\n\n selectPeriod(period: 'AM' | 'PM'): void {\n this.selectedPeriod.set(period);\n this.updateValueWithTime();\n }\n\n clear(event: MouseEvent): void {\n event.stopPropagation();\n this.value.set(null);\n }\n\n protected handleTriggerKeydown(event: KeyboardEvent): void {\n switch (event.key) {\n case 'Enter':\n case ' ':\n event.preventDefault();\n if (this.isOpen()) {\n const focused = this.focusedDate();\n if (focused && this.currentView() === 'day') {\n const day = this.findDayInGrid(focused);\n if (day && !day.isDisabled) {\n this.selectDay(day);\n }\n }\n } else {\n this.open();\n }\n break;\n case 'ArrowDown':\n event.preventDefault();\n if (!this.isOpen()) {\n this.open();\n } else if (this.currentView() === 'day') {\n this.moveFocus(7);\n }\n break;\n case 'ArrowUp':\n event.preventDefault();\n if (this.currentView() === 'day') {\n this.moveFocus(-7);\n }\n break;\n case 'ArrowLeft':\n event.preventDefault();\n if (this.currentView() === 'day') {\n this.moveFocus(-1);\n }\n break;\n case 'ArrowRight':\n event.preventDefault();\n if (this.currentView() === 'day') {\n this.moveFocus(1);\n }\n break;\n case 'Escape':\n event.preventDefault();\n this.close();\n break;\n case 'Tab':\n this.close();\n break;\n }\n }\n\n protected formatNumber(n: number): string {\n return n.toString().padStart(2, '0');\n }\n\n protected isHourDisabled(hour: number): boolean {\n return false;\n }\n\n protected isMinuteDisabled(minute: number): boolean {\n return false;\n }\n\n protected isSecondDisabled(second: number): boolean {\n return false;\n }\n\n // Private methods\n private formatDate(date: Date, format: string): string {\n const yyyy = date.getFullYear().toString();\n const yy = yyyy.slice(-2);\n const MM = (date.getMonth() + 1).toString().padStart(2, '0');\n const M = (date.getMonth() + 1).toString();\n const dd = date.getDate().toString().padStart(2, '0');\n const d = date.getDate().toString();\n\n return format\n .replace('yyyy', yyyy)\n .replace('yy', yy)\n .replace('MM', MM)\n .replace('M', M)\n .replace('dd', dd)\n .replace('d', d);\n }\n\n private formatTime(date: Date): string {\n const is12h = this.timeFormat() === '12h';\n let hours = date.getHours();\n let period = '';\n\n if (is12h) {\n period = hours >= 12 ? ' PM' : ' AM';\n hours = hours % 12;\n if (hours === 0) hours = 12;\n }\n\n const hStr = hours.toString().padStart(2, '0');\n const mStr = date.getMinutes().toString().padStart(2, '0');\n\n if (this.showSeconds()) {\n const sStr = date.getSeconds().toString().padStart(2, '0');\n return `${hStr}:${mStr}:${sStr}${period}`;\n }\n\n return `${hStr}:${mStr}${period}`;\n }\n\n private initTimeFromValue(date: Date): void {\n const is12h = this.timeFormat() === '12h';\n const hours = date.getHours();\n\n if (is12h) {\n this.selectedPeriod.set(hours >= 12 ? 'PM' : 'AM');\n let h = hours % 12;\n if (h === 0) h = 12;\n this.selectedHour.set(h);\n } else {\n this.selectedHour.set(hours);\n }\n this.selectedMinute.set(date.getMinutes());\n this.selectedSecond.set(date.getSeconds());\n }\n\n private applyTimeToDate(date: Date): void {\n const is12h = this.timeFormat() === '12h';\n let hours = this.selectedHour();\n\n if (is12h) {\n if (this.selectedPeriod() === 'PM' && hours !== 12) {\n hours += 12;\n } else if (this.selectedPeriod() === 'AM' && hours === 12) {\n hours = 0;\n }\n }\n\n date.setHours(hours, this.selectedMinute(), this.showSeconds() ? this.selectedSecond() : 0, 0);\n }\n\n private updateValueWithTime(): void {\n const val = this.value();\n if (!val) return;\n\n const newDate = new Date(val);\n this.applyTimeToDate(newDate);\n this.value.set(newDate);\n }\n\n private isSameDay(a: Date, b: Date): boolean {\n return (\n a.getFullYear() === b.getFullYear() &&\n a.getMonth() === b.getMonth() &&\n a.getDate() === b.getDate()\n );\n }\n\n private isDateDisabled(date: Date): boolean {\n const min = this.minDate();\n const max = this.maxDate();\n\n if (min && date < new Date(min.getFullYear(), min.getMonth(), min.getDate())) return true;\n if (max && date > new Date(max.getFullYear(), max.getMonth(), max.getDate())) return true;\n\n const disabled = this.disabledDates();\n if (typeof disabled === 'function') {\n return disabled(date);\n }\n if (Array.isArray(disabled)) {\n return disabled.some((d) => this.isSameDay(d, date));\n }\n return false;\n }\n\n private isMonthDisabled(year: number, month: number): boolean {\n const min = this.minDate();\n const max = this.maxDate();\n\n if (min) {\n if (year < min.getFullYear()) return true;\n if (year === min.getFullYear() && month < min.getMonth()) return true;\n }\n if (max) {\n if (year > max.getFullYear()) return true;\n if (year === max.getFullYear() && month > max.getMonth()) return true;\n }\n return false;\n }\n\n private isYearDisabled(year: number): boolean {\n const min = this.minDate();\n const max = this.maxDate();\n\n if (min && year < min.getFullYear()) return true;\n if (max && year > max.getFullYear()) return true;\n return false;\n }\n\n private moveFocus(days: number): void {\n let current = this.focusedDate();\n if (!current) {\n const val = this.value();\n current = val || new Date();\n }\n\n const next = new Date(current);\n next.setDate(next.getDate() + days);\n\n const vd = this.viewDate();\n if (next.getMonth() !== vd.getMonth() || next.getFullYear() !== vd.getFullYear()) {\n this.viewDate.set(new Date(next.getFullYear(), next.getMonth(), 1));\n }\n\n this.focusedDate.set(next);\n }\n\n private findDayInGrid(date: Date): CalendarDay | null {\n for (const week of this.calendarGrid()) {\n for (const day of week) {\n if (this.isSameDay(day.date, date)) {\n return day;\n }\n }\n }\n return null;\n }\n\n // Portal pattern\n private portalDropdown(): void {\n const dropdown = this.dropdownRef?.nativeElement;\n if (!dropdown) return;\n\n dropdown.style.display = 'block';\n this.document.body.appendChild(dropdown);\n this.updateDropdownPosition();\n this.addPositionListeners();\n }\n\n private unportalDropdown(): void {\n const dropdown = this.dropdownRef?.nativeElement;\n if (!dropdown) return;\n\n if (dropdown.parentElement === this.document.body) {\n const wrapper = this.elementRef.nativeElement.querySelector('.ui-datetimepicker-wrapper');\n if (wrapper) {\n wrapper.appendChild(dropdown);\n }\n }\n\n dropdown.style.display = '';\n dropdown.style.position = '';\n dropdown.style.top = '';\n dropdown.style.left = '';\n dropdown.style.bottom = '';\n dropdown.style.minWidth = '';\n dropdown.style.zIndex = '';\n dropdown.style.margin = '';\n\n this.removePositionListeners();\n }\n\n private updateDropdownPosition(): void {\n const trigger = this.triggerRef?.nativeElement;\n const dropdown = this.dropdownRef?.nativeElement;\n if (!trigger || !dropdown) return;\n\n const triggerRect = trigger.getBoundingClientRect();\n const dropdownHeight = dropdown.scrollHeight;\n const gap = 4;\n const spaceBelow = window.innerHeight - triggerRect.bottom;\n const spaceAbove = triggerRect.top;\n const openAbove = spaceBelow < dropdownHeight + gap && spaceAbove > spaceBelow;\n\n dropdown.style.position = 'fixed';\n dropdown.style.minWidth = `${triggerRect.width}px`;\n dropdown.style.left = `${triggerRect.left}px`;\n dropdown.style.zIndex = '99999';\n dropdown.style.margin = '0';\n\n if (openAbove) {\n dropdown.style.top = 'auto';\n dropdown.style.bottom = `${window.innerHeight - triggerRect.top + gap}px`;\n } else {\n dropdown.style.top = `${triggerRect.bottom + gap}px`;\n dropdown.style.bottom = 'auto';\n }\n }\n\n private addPositionListeners(): void {\n const update = () => {\n if (this.isOpen()) {\n this.updateDropdownPosition();\n }\n };\n window.addEventListener('scroll', update, true);\n window.addEventListener('resize', update);\n this.positionCleanup = () => {\n window.removeEventListener('scroll', update, true);\n window.removeEventListener('resize', update);\n };\n }\n\n private removePositionListeners(): void {\n this.positionCleanup?.();\n this.positionCleanup = null;\n }\n}\n","<div\n class=\"ui-datetimepicker-wrapper\"\n [class.ui-datetimepicker-wrapper--error]=\"error()\"\n [class.ui-datetimepicker-wrapper--disabled]=\"disabled()\"\n [class.ui-datetimepicker-wrapper--open]=\"isOpen()\"\n>\n @if (label()) {\n <label class=\"ui-datetimepicker__label\" [attr.for]=\"inputId()\">\n {{ label() }}\n @if (required()) {\n <span class=\"ui-datetimepicker__required\">*</span>\n }\n </label>\n }\n\n <div\n #triggerRef\n class=\"ui-datetimepicker__trigger\"\n [class]=\"triggerClasses()\"\n [attr.role]=\"'combobox'\"\n [attr.aria-expanded]=\"isOpen()\"\n [attr.aria-haspopup]=\"'dialog'\"\n [attr.aria-disabled]=\"disabled()\"\n [attr.tabindex]=\"disabled() ? -1 : 0\"\n (click)=\"toggle()\"\n (keydown)=\"handleTriggerKeydown($event)\"\n >\n <span class=\"ui-datetimepicker__value\">\n @if (displayValue()) {\n {{ displayValue() }}\n } @else {\n <span class=\"ui-datetimepicker__placeholder\">{{ placeholder() }}</span>\n }\n </span>\n\n <div class=\"ui-datetimepicker__icons\">\n @if (clearable() && hasValue() && !disabled() && !readonly()) {\n <button\n type=\"button\"\n class=\"ui-datetimepicker__clear\"\n (click)=\"clear($event)\"\n aria-label=\"Clear datetime\"\n >\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\">\n <line x1=\"18\" y1=\"6\" x2=\"6\" y2=\"18\"></line>\n <line x1=\"6\" y1=\"6\" x2=\"18\" y2=\"18\"></line>\n </svg>\n </button>\n }\n <svg\n class=\"ui-datetimepicker__calendar-icon\"\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n >\n <rect x=\"3\" y=\"4\" width=\"18\" height=\"18\" rx=\"2\" ry=\"2\"></rect>\n <line x1=\"16\" y1=\"2\" x2=\"16\" y2=\"6\"></line>\n <line x1=\"8\" y1=\"2\" x2=\"8\" y2=\"6\"></line>\n <line x1=\"3\" y1=\"10\" x2=\"21\" y2=\"10\"></line>\n </svg>\n </div>\n </div>\n\n <div\n #dropdownRef\n class=\"ui-datetimepicker__dropdown\"\n [class.ui-datetimepicker__dropdown--open]=\"isOpen()\"\n [attr.role]=\"'dialog'\"\n [attr.aria-label]=\"'Date and time picker'\"\n >\n <div class=\"ui-datetimepicker__content\">\n <!-- Calendar section -->\n <div class=\"ui-datetimepicker__calendar-section\">\n <div class=\"ui-datetimepicker__header\">\n <button\n type=\"button\"\n class=\"ui-datetimepicker__nav-btn\"\n [disabled]=\"!canNavigatePrev()\"\n (click)=\"navigatePrev()\"\n aria-label=\"Previous\"\n >\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\">\n <polyline points=\"15 18 9 12 15 6\"></polyline>\n </svg>\n </button>\n\n @if (currentView() === 'day') {\n <button\n type=\"button\"\n class=\"ui-datetimepicker__header-label\"\n (click)=\"switchToMonthView()\"\n >\n {{ monthYearLabel() }}\n </button>\n } @else if (currentView() === 'month') {\n <button\n type=\"button\"\n class=\"ui-datetimepicker__header-label\"\n (click)=\"switchToYearView()\"\n >\n {{ viewDate().getFullYear() }}\n </button>\n } @else {\n <span class=\"ui-datetimepicker__header-label ui-datetimepicker__header-label--static\">\n {{ decadeLabel() }}\n </span>\n }\n\n <button\n type=\"button\"\n class=\"ui-datetimepicker__nav-btn\"\n [disabled]=\"!canNavigateNext()\"\n (click)=\"navigateNext()\"\n aria-label=\"Next\"\n >\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\">\n <polyline points=\"9 18 15 12 9 6\"></polyline>\n </svg>\n </button>\n </div>\n\n @if (currentView() === 'day') {\n <div class=\"ui-datetimepicker__calendar\" role=\"grid\">\n <div class=\"ui-datetimepicker__weekdays\">\n @for (header of weekdayHeaders(); track header) {\n <div class=\"ui-datetimepicker__weekday\">{{ header }}</div>\n }\n </div>\n @for (week of calendarGrid(); track $index) {\n <div class=\"ui-datetimepicker__week\" role=\"row\">\n @for (day of week; track day.date.getTime()) {\n <button\n type=\"button\"\n class=\"ui-datetimepicker__day\"\n [class.ui-datetimepicker__day--outside]=\"!day.isCurrentMonth\"\n [class.ui-datetimepicker__day--today]=\"day.isToday\"\n [class.ui-datetimepicker__day--selected]=\"day.isSelected\"\n [class.ui-datetimepicker__day--disabled]=\"day.isDisabled\"\n [class.ui-datetimepicker__day--focused]=\"day.isFocused\"\n [disabled]=\"day.isDisabled\"\n (click)=\"selectDay(day)\"\n role=\"gridcell\"\n [attr.aria-selected]=\"day.isSelected\"\n >\n {{ day.day }}\n </button>\n }\n </div>\n }\n </div>\n } @else if (currentView() === 'month') {\n <div class=\"ui-datetimepicker__months\">\n @for (row of monthGrid(); track $index) {\n <div class=\"ui-datetimepicker__month-row\">\n @for (month of row; track month.month) {\n <button\n type=\"button\"\n class=\"ui-datetimepicker__month\"\n [class.ui-datetimepicker__month--selected]=\"month.isSelected\"\n [class.ui-datetimepicker__month--current]=\"month.isCurrent\"\n [class.ui-datetimepicker__month--disabled]=\"month.isDisabled\"\n [disabled]=\"month.isDisabled\"\n (click)=\"selectMonth(month)\"\n >\n {{ month.label }}\n </button>\n }\n </div>\n }\n </div>\n } @else {\n <div class=\"ui-datetimepicker__years\">\n @for (row of yearGrid(); track $index) {\n <div class=\"ui-datetimepicker__year-row\">\n @for (year of row; track year.year) {\n <button\n type=\"button\"\n class=\"ui-datetimepicker__year\"\n [class.ui-datetimepicker__year--selected]=\"year.isSelected\"\n [class.ui-datetimepicker__year--current]=\"year.isCurrent\"\n [class.ui-datetimepicker__year--disabled]=\"year.isDisabled\"\n [class.ui-datetimepicker__year--outside]=\"!year.isInRange\"\n [disabled]=\"year.isDisabled\"\n (click)=\"selectYear(year)\"\n >\n {{ year.year }}\n </button>\n }\n </div>\n }\n </div>\n }\n </div>\n\n <!-- Time section -->\n <div class=\"ui-datetimepicker__time-section\">\n <div class=\"ui-datetimepicker__time-header\">\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\">\n <circle cx=\"12\" cy=\"12\" r=\"10\"></circle>\n <polyline points=\"12 6 12 12 16 14\"></polyline>\n </svg>\n <span>Time</span>\n </div>\n\n <div class=\"ui-datetimepicker__time-columns\">\n <!-- Hours -->\n <div class=\"ui-datetimepicker__time-column\">\n <div class=\"ui-datetimepicker__time-column-header\">Hr</div>\n <div class=\"ui-datetimepicker__time-column-list\">\n @for (hour of hoursList(); track hour) {\n <button\n type=\"button\"\n class=\"ui-datetimepicker__time-option\"\n [class.ui-datetimepicker__time-option--selected]=\"hour === selectedHour()\"\n [disabled]=\"isHourDisabled(hour)\"\n (click)=\"selectHour(hour)\"\n >\n {{ formatNumber(hour) }}\n </button>\n }\n </div>\n </div>\n\n <!-- Minutes -->\n <div class=\"ui-datetimepicker__time-column\">\n <div class=\"ui-datetimepicker__time-column-header\">Min</div>\n <div class=\"ui-datetimepicker__time-column-list\">\n @for (minute of minutesList(); track minute) {\n <button\n type=\"button\"\n class=\"ui-datetimepicker__time-option\"\n [class.ui-datetimepicker__time-option--selected]=\"minute === selectedMinute()\"\n [disabled]=\"isMinuteDisabled(minute)\"\n (click)=\"selectMinute(minute)\"\n >\n {{ formatNumber(minute) }}\n </button>\n }\n </div>\n </div>\n\n <!-- Seconds (optional) -->\n @if (showSeconds()) {\n <div class=\"ui-datetimepicker__time-column\">\n <div class=\"ui-datetimepicker__time-column-header\">Sec</div>\n <div class=\"ui-datetimepicker__time-column-list\">\n @for (second of secondsList(); track second) {\n <button\n type=\"button\"\n class=\"ui-datetimepicker__time-option\"\n [class.ui-datetimepicker__time-option--selected]=\"second === selectedSecond()\"\n [disabled]=\"isSecondDisabled(second)\"\n (click)=\"selectSecond(second)\"\n >\n {{ formatNumber(second) }}\n </button>\n }\n </div>\n </div>\n }\n\n <!-- AM/PM (12h format) -->\n @if (timeFormat() === '12h') {\n <div class=\"ui-datetimepicker__time-column ui-datetimepicker__time-column--period\">\n <div class=\"ui-datetimepicker__time-column-header\"> </div>\n <div class=\"ui-datetimepicker__time-column-list\">\n <button\n type=\"button\"\n class=\"ui-datetimepicker__time-option\"\n [class.ui-datetimepicker__time-option--selected]=\"selectedPeriod() === 'AM'\"\n (click)=\"selectPeriod('AM')\"\n >\n AM\n </button>\n <button\n type=\"button\"\n class=\"ui-datetimepicker__time-option\"\n [class.ui-datetimepicker__time-option--selected]=\"selectedPeriod() === 'PM'\"\n (click)=\"selectPeriod('PM')\"\n >\n PM\n </button>\n </div>\n </div>\n }\n </div>\n </div>\n </div>\n\n <div class=\"ui-datetimepicker__footer\">\n <button\n type=\"button\"\n class=\"ui-datetimepicker__now-btn\"\n (click)=\"goToNow()\"\n >\n Now\n </button>\n </div>\n </div>\n\n @if (error()) {\n <span class=\"ui-datetimepicker__error\">{{ error() }}</span>\n }\n @if (hint() && !error()) {\n <span class=\"ui-datetimepicker__hint\">{{ hint() }}</span>\n }\n</div>\n","import { Component, inject, input, ChangeDetectionStrategy } from '@angular/core';\nimport { SidebarService } from '../../../services/sidebar.service';\n\nexport type ShellVariant = 'default' | 'header';\n\n@Component({\n selector: 'ui-shell',\n standalone: true,\n templateUrl: './shell.component.html',\n styleUrl: './shell.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ShellComponent {\n readonly variant = input<ShellVariant>('default');\n protected readonly sidebarService = inject(SidebarService);\n}\n","<div class=\"ui-shell\"\n [class.ui-shell--header]=\"variant() === 'header'\"\n [class.ui-shell--sidebar-collapsed]=\"sidebarService.collapsed()\"\n [class.ui-shell--mobile]=\"sidebarService.isMobile()\"\n [class.ui-shell--mobile-open]=\"sidebarService.mobileOpen()\">\n <ng-content />\n @if (sidebarService.isMobile() && sidebarService.mobileOpen()) {\n <div class=\"ui-shell__backdrop\" (click)=\"sidebarService.closeMobile()\"></div>\n }\n</div>\n","import { Component, ChangeDetectionStrategy } from '@angular/core';\n\n@Component({\n selector: 'ui-navbar',\n standalone: true,\n templateUrl: './navbar.component.html',\n styleUrl: './navbar.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class NavbarComponent {}\n","<header class=\"ui-navbar\">\n <div class=\"ui-navbar__start\">\n <ng-content select=\"[slot=start]\" />\n </div>\n <div class=\"ui-navbar__center\">\n <ng-content select=\"[slot=center]\" />\n </div>\n <div class=\"ui-navbar__end\">\n <ng-content select=\"[slot=end]\" />\n </div>\n <ng-content />\n</header>\n","import { Component, inject, ChangeDetectionStrategy } from '@angular/core';\nimport { SidebarService } from '../../../services/sidebar.service';\n\n@Component({\n selector: 'ui-sidebar',\n standalone: true,\n templateUrl: './sidebar.component.html',\n styleUrl: './sidebar.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class SidebarComponent {\n protected readonly sidebarService = inject(SidebarService);\n}\n","<aside class=\"ui-sidebar\"\n [class.ui-sidebar--collapsed]=\"sidebarService.collapsed()\"\n [class.ui-sidebar--mobile]=\"sidebarService.isMobile()\"\n [class.ui-sidebar--mobile-open]=\"sidebarService.mobileOpen()\">\n <div class=\"ui-sidebar__header\">\n <ng-content select=\"[slot=header]\" />\n </div>\n <nav class=\"ui-sidebar__nav\">\n <ng-content />\n </nav>\n <div class=\"ui-sidebar__footer\">\n <ng-content select=\"[slot=footer]\" />\n </div>\n</aside>\n","import { Component, ChangeDetectionStrategy } from '@angular/core';\n\n@Component({\n selector: 'ui-content',\n standalone: true,\n templateUrl: './content.component.html',\n styleUrl: './content.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ContentComponent {}\n","<main class=\"ui-content\">\n <ng-content />\n</main>\n","import { Component, ChangeDetectionStrategy } from '@angular/core';\n\n@Component({\n selector: 'ui-footer',\n standalone: true,\n templateUrl: './footer.component.html',\n styleUrl: './footer.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class FooterComponent {}\n","<footer class=\"ui-footer\">\n <ng-content />\n</footer>\n","import { Component, inject, ChangeDetectionStrategy, input } from '@angular/core';\nimport { SidebarService } from '../../../services/sidebar.service';\n\n@Component({\n selector: 'ui-sidebar-toggle',\n standalone: true,\n templateUrl: './sidebar-toggle.component.html',\n styleUrl: './sidebar-toggle.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class SidebarToggleComponent {\n protected readonly sidebarService = inject(SidebarService);\n readonly mobileOnly = input(true);\n}\n","<button class=\"ui-sidebar-toggle\"\n type=\"button\"\n [class.ui-sidebar-toggle--mobile-only]=\"mobileOnly()\"\n [attr.aria-expanded]=\"sidebarService.isMobile() ? sidebarService.mobileOpen() : !sidebarService.collapsed()\"\n aria-label=\"Toggle sidebar\"\n (click)=\"sidebarService.toggle()\">\n <svg class=\"ui-sidebar-toggle__icon\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\">\n <line x1=\"3\" y1=\"6\" x2=\"21\" y2=\"6\" />\n <line x1=\"3\" y1=\"12\" x2=\"21\" y2=\"12\" />\n <line x1=\"3\" y1=\"18\" x2=\"21\" y2=\"18\" />\n </svg>\n</button>\n","import {\n Component,\n input,\n signal,\n computed,\n ChangeDetectionStrategy,\n ElementRef,\n inject,\n} from '@angular/core';\nimport type { SplitComponent } from './split.component';\n\n@Component({\n selector: 'ui-split-pane',\n standalone: true,\n templateUrl: './split-pane.component.html',\n styleUrl: './split-pane.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: 'ui-split-pane',\n '[style.flex]': 'flexStyle()',\n '[style.order]': 'orderStyle()',\n },\n})\nexport class SplitPaneComponent {\n readonly size = input<number | undefined>(undefined);\n readonly minSize = input(0);\n readonly maxSize = input(100);\n\n /** @internal */\n readonly _index = signal(0);\n /** @internal */\n readonly _computedSize = signal<number>(0);\n\n private _parent: SplitComponent | null = null;\n\n readonly elementRef = inject(ElementRef);\n\n protected readonly flexStyle = computed(() => {\n const size = this._computedSize();\n return `0 0 ${size}%`;\n });\n\n protected readonly orderStyle = computed(() => {\n return this._index() * 2;\n });\n\n /** @internal */\n _setParent(parent: SplitComponent, index: number): void {\n this._parent = parent;\n this._index.set(index);\n }\n\n /** @internal */\n _setComputedSize(size: number): void {\n this._computedSize.set(size);\n }\n\n /** @internal */\n _getParent(): SplitComponent | null {\n return this._parent;\n }\n}\n","<ng-content />\n","import {\n Component,\n input,\n output,\n computed,\n contentChildren,\n signal,\n effect,\n ElementRef,\n inject,\n ChangeDetectionStrategy,\n PLATFORM_ID,\n DestroyRef,\n} from '@angular/core';\nimport { isPlatformBrowser, DOCUMENT, DecimalPipe } from '@angular/common';\nimport { SplitPaneComponent } from './split-pane.component';\n\nexport type SplitOrientation = 'horizontal' | 'vertical';\nexport type SplitGutterSize = 'sm' | 'md' | 'lg';\n\nexport interface SplitSizeChange {\n gutterIndex: number;\n sizes: number[];\n}\n\n@Component({\n selector: 'ui-split',\n standalone: true,\n imports: [DecimalPipe],\n templateUrl: './split.component.html',\n styleUrl: './split.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: 'ui-split',\n '[class.ui-split--horizontal]': 'orientation() === \"horizontal\"',\n '[class.ui-split--vertical]': 'orientation() === \"vertical\"',\n '[class.ui-split--disabled]': 'disabled()',\n '[class.ui-split--dragging]': 'isDragging()',\n },\n})\nexport class SplitComponent {\n readonly orientation = input<SplitOrientation>('horizontal');\n readonly gutterSize = input<SplitGutterSize>('md');\n readonly disabled = input(false);\n\n readonly sizeChange = output<SplitSizeChange>();\n readonly dragStart = output<number>();\n readonly dragEnd = output<number>();\n\n readonly panes = contentChildren(SplitPaneComponent);\n\n protected readonly isDragging = signal(false);\n protected readonly paneSizes = signal<number[]>([]);\n protected readonly gutterIndices = computed(() => {\n const count = this.panes().length;\n return count > 1 ? Array.from({ length: count - 1 }, (_, i) => i) : [];\n });\n\n private readonly elementRef = inject(ElementRef);\n private readonly platformId = inject(PLATFORM_ID);\n private readonly document = inject(DOCUMENT);\n private readonly destroyRef = inject(DestroyRef);\n\n private dragGutterIndex = -1;\n private dragStartPos = 0;\n private dragStartSizes: number[] = [];\n\n private mouseMoveHandler = (e: MouseEvent) => this.onMouseMove(e);\n private mouseUpHandler = () => this.onMouseUp();\n\n constructor() {\n // Single effect to handle pane setup and size distribution\n effect(() => {\n const paneList = this.panes();\n if (paneList.length === 0) return;\n\n // Set parent reference and index on each pane\n paneList.forEach((pane, index) => {\n pane._setParent(this, index);\n });\n\n // Calculate sizes based on inputs\n const sizes = this.calculateSizes(paneList);\n\n // Apply sizes to each pane\n sizes.forEach((size, index) => {\n paneList[index]._setComputedSize(size);\n });\n\n // Store sizes for drag operations\n this.paneSizes.set(sizes);\n });\n\n this.destroyRef.onDestroy(() => {\n this.cleanupListeners();\n });\n }\n\n protected readonly gutterSizeClass = computed(() => {\n return `ui-split__gutter--${this.gutterSize()}`;\n });\n\n protected onGutterMouseDown(event: MouseEvent, gutterIndex: number): void {\n if (this.disabled()) return;\n event.preventDefault();\n\n this.dragGutterIndex = gutterIndex;\n this.dragStartPos = this.orientation() === 'horizontal' ? event.clientX : event.clientY;\n this.dragStartSizes = [...this.paneSizes()];\n this.isDragging.set(true);\n\n this.dragStart.emit(gutterIndex);\n\n if (isPlatformBrowser(this.platformId)) {\n this.document.addEventListener('mousemove', this.mouseMoveHandler);\n this.document.addEventListener('mouseup', this.mouseUpHandler);\n }\n }\n\n protected onGutterKeyDown(event: KeyboardEvent, gutterIndex: number): void {\n if (this.disabled()) return;\n\n const step = 1;\n const sizes = [...this.paneSizes()];\n const paneList = this.panes();\n\n const leftPane = paneList[gutterIndex];\n const rightPane = paneList[gutterIndex + 1];\n\n let delta = 0;\n\n switch (event.key) {\n case 'ArrowLeft':\n case 'ArrowUp':\n event.preventDefault();\n delta = -step;\n break;\n case 'ArrowRight':\n case 'ArrowDown':\n event.preventDefault();\n delta = step;\n break;\n case 'Home':\n event.preventDefault();\n delta = -(sizes[gutterIndex] - leftPane.minSize());\n break;\n case 'End':\n event.preventDefault();\n delta = sizes[gutterIndex + 1] - rightPane.minSize();\n break;\n default:\n return;\n }\n\n const originalTotal = sizes[gutterIndex] + sizes[gutterIndex + 1];\n let newLeftSize = Math.max(leftPane.minSize(), Math.min(leftPane.maxSize(), sizes[gutterIndex] + delta));\n let newRightSize = Math.max(rightPane.minSize(), Math.min(rightPane.maxSize(), originalTotal - newLeftSize));\n // Recalculate left after right is clamped to preserve total\n newLeftSize = Math.max(leftPane.minSize(), Math.min(leftPane.maxSize(), originalTotal - newRightSize));\n\n sizes[gutterIndex] = newLeftSize;\n sizes[gutterIndex + 1] = newRightSize;\n\n this.paneSizes.set(sizes);\n leftPane._setComputedSize(newLeftSize);\n rightPane._setComputedSize(newRightSize);\n this.sizeChange.emit({ gutterIndex, sizes: [...sizes] });\n }\n\n private onMouseMove(event: MouseEvent): void {\n if (!this.isDragging()) return;\n\n const container = this.elementRef.nativeElement as HTMLElement;\n const containerRect = container.getBoundingClientRect();\n const containerSize = this.orientation() === 'horizontal' ? containerRect.width : containerRect.height;\n\n const currentPos = this.orientation() === 'horizontal' ? event.clientX : event.clientY;\n const deltaPixels = currentPos - this.dragStartPos;\n const deltaPercent = (deltaPixels / containerSize) * 100;\n\n const paneList = this.panes();\n const leftPane = paneList[this.dragGutterIndex];\n const rightPane = paneList[this.dragGutterIndex + 1];\n\n const originalTotal = this.dragStartSizes[this.dragGutterIndex] + this.dragStartSizes[this.dragGutterIndex + 1];\n\n // Apply delta and clamp left pane\n let newLeftSize = this.dragStartSizes[this.dragGutterIndex] + deltaPercent;\n newLeftSize = Math.max(leftPane.minSize(), Math.min(leftPane.maxSize(), newLeftSize));\n\n // Calculate right pane from remainder, then clamp\n let newRightSize = originalTotal - newLeftSize;\n newRightSize = Math.max(rightPane.minSize(), Math.min(rightPane.maxSize(), newRightSize));\n\n // Recalculate left from clamped right to preserve total\n newLeftSize = originalTotal - newRightSize;\n newLeftSize = Math.max(leftPane.minSize(), Math.min(leftPane.maxSize(), newLeftSize));\n\n const sizes = [...this.paneSizes()];\n sizes[this.dragGutterIndex] = newLeftSize;\n sizes[this.dragGutterIndex + 1] = newRightSize;\n\n this.paneSizes.set(sizes);\n leftPane._setComputedSize(newLeftSize);\n rightPane._setComputedSize(newRightSize);\n this.sizeChange.emit({ gutterIndex: this.dragGutterIndex, sizes: [...sizes] });\n }\n\n private onMouseUp(): void {\n if (!this.isDragging()) return;\n\n this.cleanupListeners();\n this.isDragging.set(false);\n this.dragEnd.emit(this.dragGutterIndex);\n this.dragGutterIndex = -1;\n }\n\n private cleanupListeners(): void {\n if (isPlatformBrowser(this.platformId)) {\n this.document.removeEventListener('mousemove', this.mouseMoveHandler);\n this.document.removeEventListener('mouseup', this.mouseUpHandler);\n }\n }\n\n private calculateSizes(paneList: readonly SplitPaneComponent[]): number[] {\n if (paneList.length === 0) {\n return [];\n }\n\n const sizes: number[] = [];\n let totalExplicit = 0;\n let implicitCount = 0;\n\n paneList.forEach((pane) => {\n const size = pane.size();\n if (size !== undefined) {\n totalExplicit += size;\n sizes.push(size);\n } else {\n implicitCount++;\n sizes.push(-1); // placeholder\n }\n });\n\n // Calculate remaining space for implicit panes\n const remaining = Math.max(0, 100 - totalExplicit);\n const implicitSize = implicitCount > 0 ? remaining / implicitCount : 0;\n\n // Replace placeholders\n for (let i = 0; i < sizes.length; i++) {\n if (sizes[i] === -1) {\n sizes[i] = implicitSize;\n }\n }\n\n // Normalize if total exceeds 100\n const total = sizes.reduce((a, b) => a + b, 0);\n if (total > 0 && Math.abs(total - 100) > 0.01) {\n const scale = 100 / total;\n for (let i = 0; i < sizes.length; i++) {\n sizes[i] *= scale;\n }\n }\n\n return sizes;\n }\n\n /** @internal - Get current sizes for external access */\n _getSizes(): number[] {\n return [...this.paneSizes()];\n }\n}\n","<ng-content />\n@for (gutterIndex of gutterIndices(); track gutterIndex) {\n <div\n class=\"ui-split__gutter\"\n [class]=\"gutterSizeClass()\"\n [style.order]=\"gutterIndex * 2 + 1\"\n role=\"separator\"\n tabindex=\"0\"\n [attr.aria-orientation]=\"orientation() === 'horizontal' ? 'vertical' : 'horizontal'\"\n [attr.aria-valuenow]=\"paneSizes()[gutterIndex] | number:'1.0-1'\"\n [attr.aria-valuemin]=\"panes()[gutterIndex]?.minSize()\"\n [attr.aria-valuemax]=\"panes()[gutterIndex]?.maxSize()\"\n (mousedown)=\"onGutterMouseDown($event, gutterIndex)\"\n (keydown)=\"onGutterKeyDown($event, gutterIndex)\"\n >\n <div class=\"ui-split__gutter-handle\"></div>\n </div>\n}\n","import { Component, input, output, signal, computed, inject, ChangeDetectionStrategy } from '@angular/core';\nimport type { TreeNode, TreeDropPosition } from './tree.component';\nimport { TREE_HOST } from './tree.component';\n\nfunction isDescendantOf(target: TreeNode, potentialAncestor: TreeNode): boolean {\n if (!potentialAncestor.children) return false;\n for (const child of potentialAncestor.children) {\n if (child === target || isDescendantOf(target, child)) return true;\n }\n return false;\n}\n\n@Component({\n selector: 'ui-tree-node',\n standalone: true,\n templateUrl: './tree-node.component.html',\n styleUrl: './tree-node.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class TreeNodeComponent {\n readonly node = input.required<TreeNode>();\n readonly level = input(0);\n readonly indent = input(16);\n\n readonly nodeClick = output<TreeNode>();\n readonly nodeExpand = output<TreeNode>();\n readonly nodeCollapse = output<TreeNode>();\n\n private readonly treeHost = inject(TREE_HOST);\n\n private readonly _expanded = signal<boolean | null>(null);\n\n readonly isExpanded = computed(() => {\n const manualState = this._expanded();\n if (manualState !== null) {\n return manualState;\n }\n return this.node().expanded ?? false;\n });\n\n readonly hasChildren = computed(() => {\n const children = this.node().children;\n return children && children.length > 0;\n });\n\n readonly indentGuides = computed(() => {\n const lvl = this.level();\n return lvl > 0 ? Array.from({ length: lvl }, (_, i) => i) : [];\n });\n\n readonly isDraggable = computed(() => this.treeHost.draggable());\n\n readonly isDragging = computed(() => this.treeHost._dragNode() === this.node());\n\n readonly dropPosition = computed<TreeDropPosition | null>(() => {\n if (this.treeHost._dragOverNode() === this.node()) {\n return this.treeHost._dropPosition();\n }\n return null;\n });\n\n toggle(event: MouseEvent): void {\n event.stopPropagation();\n if (!this.hasChildren()) return;\n\n const newState = !this.isExpanded();\n this._expanded.set(newState);\n\n if (newState) {\n this.nodeExpand.emit(this.node());\n } else {\n this.nodeCollapse.emit(this.node());\n }\n }\n\n onClick(event: MouseEvent): void {\n event.stopPropagation();\n this.nodeClick.emit(this.node());\n }\n\n onDoubleClick(event: MouseEvent): void {\n event.stopPropagation();\n if (this.hasChildren()) {\n this.toggle(event);\n }\n }\n\n onDragStart(event: DragEvent): void {\n if (!this.isDraggable()) return;\n this.treeHost._dragNode.set(this.node());\n event.dataTransfer!.effectAllowed = 'move';\n event.dataTransfer!.setData('text/plain', this.node().label);\n }\n\n onDragEnd(): void {\n this.treeHost._dragNode.set(null);\n this.treeHost._dragOverNode.set(null);\n this.treeHost._dropPosition.set(null);\n }\n\n onDragOver(event: DragEvent): void {\n if (!this.isDraggable()) return;\n\n const dragNode = this.treeHost._dragNode();\n if (!dragNode) return;\n\n // Prevent dropping on self or own descendants\n if (dragNode === this.node() || isDescendantOf(this.node(), dragNode)) {\n return;\n }\n\n event.preventDefault();\n event.dataTransfer!.dropEffect = 'move';\n\n const target = (event.currentTarget as HTMLElement).querySelector('.ui-tree-node__content') as HTMLElement;\n if (!target) return;\n\n const rect = target.getBoundingClientRect();\n const y = event.clientY - rect.top;\n const ratio = y / rect.height;\n\n let position: TreeDropPosition;\n if (ratio < 0.25) {\n position = 'before';\n } else if (ratio > 0.75) {\n position = 'after';\n } else {\n position = 'inside';\n }\n\n this.treeHost._dragOverNode.set(this.node());\n this.treeHost._dropPosition.set(position);\n }\n\n onDragLeave(event: DragEvent): void {\n const related = event.relatedTarget as Node | null;\n const current = event.currentTarget as HTMLElement;\n if (related && current.contains(related)) return;\n\n if (this.treeHost._dragOverNode() === this.node()) {\n this.treeHost._dragOverNode.set(null);\n this.treeHost._dropPosition.set(null);\n }\n }\n\n onDrop(event: DragEvent): void {\n event.preventDefault();\n\n const dragNode = this.treeHost._dragNode();\n const position = this.treeHost._dropPosition();\n if (!dragNode || !position) return;\n\n if (dragNode === this.node() || isDescendantOf(this.node(), dragNode)) {\n return;\n }\n\n this.treeHost._emitDrop({\n node: dragNode,\n target: this.node(),\n position,\n });\n\n this.treeHost._dragNode.set(null);\n this.treeHost._dragOverNode.set(null);\n this.treeHost._dropPosition.set(null);\n }\n\n /** @internal - forward events from child nodes */\n _onChildNodeClick(node: TreeNode): void {\n this.nodeClick.emit(node);\n }\n\n /** @internal */\n _onChildNodeExpand(node: TreeNode): void {\n this.nodeExpand.emit(node);\n }\n\n /** @internal */\n _onChildNodeCollapse(node: TreeNode): void {\n this.nodeCollapse.emit(node);\n }\n}\n","<div\n class=\"ui-tree-node\"\n [class.ui-tree-node--dragging]=\"isDragging()\"\n [attr.draggable]=\"isDraggable()\"\n (dragstart)=\"onDragStart($event)\"\n (dragend)=\"onDragEnd()\"\n (dragover)=\"onDragOver($event)\"\n (dragleave)=\"onDragLeave($event)\"\n (drop)=\"onDrop($event)\"\n>\n <div class=\"ui-tree-node__guides\">\n @for (guide of indentGuides(); track guide) {\n <span class=\"ui-tree-node__guide\" [style.width.px]=\"indent()\"></span>\n }\n </div>\n <div\n class=\"ui-tree-node__content\"\n [class.ui-tree-node__content--selected]=\"false\"\n [class.ui-tree-node__content--drop-before]=\"dropPosition() === 'before'\"\n [class.ui-tree-node__content--drop-after]=\"dropPosition() === 'after'\"\n [class.ui-tree-node__content--drop-inside]=\"dropPosition() === 'inside'\"\n [style.padding-left.px]=\"level() * indent() + 8\"\n (click)=\"onClick($event)\"\n (dblclick)=\"onDoubleClick($event)\"\n >\n @if (hasChildren()) {\n <button\n type=\"button\"\n class=\"ui-tree-node__toggle\"\n [class.ui-tree-node__toggle--expanded]=\"isExpanded()\"\n (click)=\"toggle($event)\"\n [attr.aria-expanded]=\"isExpanded()\"\n [attr.aria-label]=\"isExpanded() ? 'Collapse' : 'Expand'\"\n >\n <svg\n class=\"ui-tree-node__chevron\"\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 16 16\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M6 4L10 8L6 12\"\n stroke=\"currentColor\"\n stroke-width=\"1.5\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n </svg>\n </button>\n }\n @if (node().icon) {\n <span class=\"ui-tree-node__icon\">{{ node().icon }}</span>\n }\n <span class=\"ui-tree-node__label\">{{ node().label }}</span>\n </div>\n</div>\n@if (isExpanded() && hasChildren()) {\n @for (child of node().children; track child) {\n <ui-tree-node\n [node]=\"child\"\n [level]=\"level() + 1\"\n [indent]=\"indent()\"\n (nodeClick)=\"_onChildNodeClick($event)\"\n (nodeExpand)=\"_onChildNodeExpand($event)\"\n (nodeCollapse)=\"_onChildNodeCollapse($event)\"\n />\n }\n}\n","import { Component, input, output, signal, InjectionToken, ChangeDetectionStrategy } from '@angular/core';\nimport { TreeNodeComponent } from './tree-node.component';\n\nexport interface TreeNode {\n label: string;\n icon?: string;\n expanded?: boolean;\n children?: TreeNode[];\n data?: unknown;\n}\n\nexport type TreeDropPosition = 'before' | 'after' | 'inside';\n\nexport interface TreeNodeDropEvent {\n node: TreeNode;\n target: TreeNode;\n position: TreeDropPosition;\n}\n\nexport const TREE_HOST = new InjectionToken<TreeComponent>('TREE_HOST');\n\n@Component({\n selector: 'ui-tree',\n standalone: true,\n imports: [TreeNodeComponent],\n templateUrl: './tree.component.html',\n styleUrl: './tree.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [{ provide: TREE_HOST, useExisting: TreeComponent }],\n})\nexport class TreeComponent {\n readonly nodes = input<TreeNode[]>([]);\n readonly indent = input(16);\n readonly draggable = input(false);\n\n readonly nodeClick = output<TreeNode>();\n readonly nodeExpand = output<TreeNode>();\n readonly nodeCollapse = output<TreeNode>();\n readonly nodeDrop = output<TreeNodeDropEvent>();\n\n /** @internal */\n readonly _dragNode = signal<TreeNode | null>(null);\n /** @internal */\n readonly _dragOverNode = signal<TreeNode | null>(null);\n /** @internal */\n readonly _dropPosition = signal<TreeDropPosition | null>(null);\n\n /** @internal */\n _onNodeClick(node: TreeNode): void {\n this.nodeClick.emit(node);\n }\n\n /** @internal */\n _onNodeExpand(node: TreeNode): void {\n this.nodeExpand.emit(node);\n }\n\n /** @internal */\n _onNodeCollapse(node: TreeNode): void {\n this.nodeCollapse.emit(node);\n }\n\n /** @internal */\n _emitDrop(event: TreeNodeDropEvent): void {\n this.nodeDrop.emit(event);\n }\n}\n","<div class=\"ui-tree\">\n @for (node of nodes(); track node) {\n <ui-tree-node\n [node]=\"node\"\n [level]=\"0\"\n [indent]=\"indent()\"\n (nodeClick)=\"_onNodeClick($event)\"\n (nodeExpand)=\"_onNodeExpand($event)\"\n (nodeCollapse)=\"_onNodeCollapse($event)\"\n />\n }\n</div>\n","import {\n Component,\n Directive,\n ChangeDetectionStrategy,\n computed,\n contentChild,\n contentChildren,\n inject,\n input,\n model,\n output,\n PLATFORM_ID,\n signal,\n viewChild,\n ElementRef,\n Renderer2,\n OnDestroy,\n AfterViewInit,\n TemplateRef,\n ViewChild,\n} from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { DOCUMENT, isPlatformBrowser, NgTemplateOutlet } from '@angular/common';\n\nexport interface TemplateVariable {\n key: string;\n value: string;\n}\n\nexport type VariableState = 'resolved' | 'unset' | 'unknown';\n\n/** Context provided to variable popover templates */\nexport interface VariablePopoverContext {\n /** The variable key (same as `key`) */\n $implicit: string;\n /** The variable key */\n key: string;\n /** Current value from the variables array, or empty string if unknown */\n value: string;\n /** State of the variable: 'resolved', 'unset', or 'unknown' */\n state: VariableState;\n /** Close the popover */\n close: () => void;\n}\n\n/** Directive to mark a custom variable popover template */\n@Directive({\n selector: 'ng-template[uiVariablePopover]',\n standalone: true,\n})\nexport class VariablePopoverDirective {}\n\n/** Directive to mark suffix content (buttons, icons, etc.) */\n@Directive({\n selector: '[uiTemplateInputSuffix]',\n standalone: true,\n})\nexport class TemplateInputSuffixDirective {}\n\n@Component({\n selector: 'ui-template-input',\n standalone: true,\n imports: [FormsModule, NgTemplateOutlet],\n templateUrl: './template-input.component.html',\n styleUrl: './template-input.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class TemplateInputComponent implements OnDestroy, AfterViewInit {\n readonly label = input<string>('');\n readonly placeholder = input<string>('');\n readonly hint = input<string>('');\n readonly error = input<string>('');\n readonly disabled = input(false);\n readonly readonly = input(false);\n readonly required = input(false);\n readonly id = input<string>('');\n\n /** The template string value. Two-way bindable. */\n readonly value = model.required<string>();\n\n /**\n * Known variables with their values. Two-way bindable.\n *\n * The component detects `{{key}}` patterns in the value and resolves state:\n * - Key found with a truthy value → 'resolved' (green)\n * - Key found with empty/falsy value → 'unset' (amber)\n * - Key NOT found in array → 'unknown' (red)\n */\n readonly variables = model.required<TemplateVariable[]>();\n\n /** Emits the variable key on hover, or null when hover ends. */\n readonly variableHover = output<string | null>();\n\n /** Custom popover template for variables. Receives VariablePopoverContext. */\n readonly popoverTemplate = contentChild(VariablePopoverDirective, { read: TemplateRef });\n\n /** Detect if suffix content is projected */\n readonly hasSuffix = contentChildren(TemplateInputSuffixDirective);\n\n protected readonly suffixRef = viewChild<ElementRef<HTMLDivElement>>('suffixEl');\n\n /** Computed padding-right based on suffix width */\n protected readonly suffixPadding = signal(0);\n\n private resizeObserver: ResizeObserver | null = null;\n private mutationObserver: MutationObserver | null = null;\n\n private static nextId = 0;\n private readonly generatedId = `ui-template-input-${++TemplateInputComponent.nextId}`;\n\n protected readonly inputId = computed(() => this.id() || this.generatedId);\n\n protected readonly mirrorRef = viewChild<ElementRef<HTMLDivElement>>('mirror');\n protected readonly inputRef = viewChild<ElementRef<HTMLInputElement>>('inputEl');\n @ViewChild('popoverRef', { static: true }) popoverRef!: ElementRef<HTMLElement>;\n\n private readonly hostRef = inject(ElementRef);\n private readonly document = inject(DOCUMENT);\n private readonly platformId = inject(PLATFORM_ID);\n private positionCleanup: (() => void) | null = null;\n private currentSpanRect: DOMRect | null = null;\n private isPortaled = false;\n\n // Popover state\n protected readonly popoverVisible = signal(false);\n protected readonly openAbove = signal(true);\n protected readonly popoverText = signal('');\n protected readonly popoverVarKey = signal('');\n\n protected readonly popoverContext = computed<VariablePopoverContext>(() => {\n const key = this.popoverVarKey();\n const vars = this.variables();\n const entry = vars.find(v => v.key === key);\n return {\n $implicit: key,\n key,\n value: entry?.value ?? '',\n state: this.resolveVarState(key, vars),\n close: () => this.closePopover(),\n };\n });\n\n private hoveredVar: string | null = null;\n private hideTimer: ReturnType<typeof setTimeout> | null = null;\n\n constructor(private readonly renderer: Renderer2) {\n this.injectStyles();\n }\n\n ngAfterViewInit(): void {\n this.setupSuffixObservers();\n }\n\n private setupSuffixObservers(): void {\n const suffixEl = this.suffixRef()?.nativeElement;\n if (!suffixEl) return;\n\n // Initial measurement - wait for layout to complete\n requestAnimationFrame(() => {\n this.updateSuffixPadding(suffixEl);\n });\n\n // Watch for size changes\n this.resizeObserver = new ResizeObserver(() => {\n this.updateSuffixPadding(suffixEl);\n });\n this.resizeObserver.observe(suffixEl);\n\n // Watch for content projection changes (children being added/removed)\n this.mutationObserver = new MutationObserver(() => {\n // Need RAF here too since DOM change doesn't mean layout is done\n requestAnimationFrame(() => {\n this.updateSuffixPadding(suffixEl);\n });\n });\n this.mutationObserver.observe(suffixEl, { childList: true, subtree: true });\n }\n\n private updateSuffixPadding(el: HTMLElement): void {\n // Only count width if there are actual children (not just whitespace/comments)\n const hasContent = el.children.length > 0;\n if (hasContent) {\n const width = el.offsetWidth;\n // Add small gap between content and suffix\n this.suffixPadding.set(width + 8);\n } else {\n this.suffixPadding.set(0);\n }\n }\n\n protected readonly highlightedHtml = computed(() => {\n const text = this.value();\n if (!text) return '\\u200b';\n\n const vars = this.variables();\n const escaped = this.escapeHtml(text);\n\n // Use CSS classes instead of data-* attributes since Angular's\n // innerHTML sanitizer strips data attributes.\n return (\n escaped.replace(/\\{\\{([^}]+)\\}\\}/g, (_match, varKey: string) => {\n const state = this.resolveVarState(varKey, vars);\n return `<span class=\"ui-tmpl__var ui-tmpl__var--${state}\">{{${this.escapeHtml(varKey)}}}</span>`;\n }) + '\\u200b'\n );\n });\n\n protected syncScroll(): void {\n const inputEl = this.inputRef()?.nativeElement;\n const mirrorEl = this.mirrorRef()?.nativeElement;\n if (inputEl && mirrorEl) {\n mirrorEl.scrollLeft = inputEl.scrollLeft;\n }\n }\n\n protected onInput(): void {\n this.syncScroll();\n }\n\n protected onKeyDown(): void {\n requestAnimationFrame(() => this.syncScroll());\n }\n\n protected onMouseMove(event: MouseEvent): void {\n const mirrorEl = this.mirrorRef()?.nativeElement;\n if (!mirrorEl) {\n this.scheduleHide();\n return;\n }\n\n const spans = mirrorEl.querySelectorAll('.ui-tmpl__var') as NodeListOf<HTMLElement>;\n const { clientX, clientY } = event;\n\n for (const span of spans) {\n const rect = span.getBoundingClientRect();\n if (\n clientX >= rect.left &&\n clientX <= rect.right &&\n clientY >= rect.top &&\n clientY <= rect.bottom\n ) {\n // Extract variable key from text content: \"{{varKey}}\" → \"varKey\"\n const varKey = (span.textContent || '').replace(/^\\{\\{|\\}\\}$/g, '');\n this.cancelHide();\n this.showPopover(varKey, rect);\n return;\n }\n }\n\n this.scheduleHide();\n }\n\n protected onContainerMouseLeave(): void {\n this.scheduleHide();\n }\n\n protected onPopoverMouseEnter(): void {\n this.cancelHide();\n }\n\n protected onPopoverMouseLeave(): void {\n this.scheduleHide();\n }\n\n private resolveVarState(varKey: string, vars: TemplateVariable[]): VariableState {\n const entry = vars.find(v => v.key === varKey);\n if (!entry) return 'unknown';\n return entry.value ? 'resolved' : 'unset';\n }\n\n private showPopover(varKey: string, spanRect: DOMRect): void {\n if (this.hoveredVar !== varKey) {\n this.hoveredVar = varKey;\n this.variableHover.emit(varKey);\n }\n\n const vars = this.variables();\n const entry = vars.find(v => v.key === varKey);\n this.popoverVarKey.set(varKey);\n this.popoverText.set(entry ? (entry.value || varKey) : varKey);\n this.currentSpanRect = spanRect;\n this.popoverVisible.set(true);\n\n if (!this.isPortaled) {\n this.portalPopover();\n } else {\n this.updatePopoverPosition();\n }\n }\n\n private closePopover(): void {\n this.cancelHide();\n this.popoverVisible.set(false);\n this.unportalPopover();\n if (this.hoveredVar !== null) {\n this.hoveredVar = null;\n this.variableHover.emit(null);\n }\n }\n\n private scheduleHide(): void {\n if (this.hideTimer) return;\n this.hideTimer = setTimeout(() => {\n this.hideTimer = null;\n this.closePopover();\n }, 200);\n }\n\n private cancelHide(): void {\n if (this.hideTimer) {\n clearTimeout(this.hideTimer);\n this.hideTimer = null;\n }\n }\n\n private escapeHtml(text: string): string {\n return text\n .replace(/&/g, '&')\n .replace(/</g, '<')\n .replace(/>/g, '>')\n .replace(/\"/g, '"');\n }\n\n private static readonly STYLE_CONTENT = `\n .ui-tmpl__var {\n border-radius: 0.125rem;\n }\n .ui-tmpl__var--resolved {\n color: var(--ui-tmpl-resolved-color, var(--ui-success));\n background: var(--ui-tmpl-resolved-bg, color-mix(in srgb, var(--ui-success) 12%, transparent));\n }\n .ui-tmpl__var--unset {\n color: var(--ui-tmpl-unset-color, var(--ui-warning));\n background: var(--ui-tmpl-unset-bg, color-mix(in srgb, var(--ui-warning) 12%, transparent));\n }\n .ui-tmpl__var--unknown {\n color: var(--ui-tmpl-unknown-color, var(--ui-danger));\n background: var(--ui-tmpl-unknown-bg, color-mix(in srgb, var(--ui-danger) 12%, transparent));\n }\n `;\n\n private injectStyles(): void {\n const styleId = 'ui-tmpl-styles';\n if (!isPlatformBrowser(this.platformId)) return;\n\n let existing = this.document.getElementById(styleId);\n\n // Always replace to handle HMR / version upgrades\n if (existing) {\n existing.textContent = TemplateInputComponent.STYLE_CONTENT;\n return;\n }\n\n const style = this.renderer.createElement('style');\n this.renderer.setProperty(style, 'id', styleId);\n this.renderer.setProperty(style, 'textContent', TemplateInputComponent.STYLE_CONTENT);\n this.renderer.appendChild(this.document.head, style);\n }\n\n private portalPopover(): void {\n const el = this.popoverRef.nativeElement;\n this.document.body.appendChild(el);\n el.style.display = 'block';\n this.isPortaled = true;\n requestAnimationFrame(() => this.updatePopoverPosition());\n this.addPositionListeners();\n }\n\n private unportalPopover(): void {\n if (!this.isPortaled) return;\n const el = this.popoverRef.nativeElement;\n el.style.display = '';\n el.style.position = '';\n el.style.top = '';\n el.style.bottom = '';\n el.style.left = '';\n el.style.zIndex = '';\n this.hostRef.nativeElement.appendChild(el);\n this.isPortaled = false;\n this.currentSpanRect = null;\n this.removePositionListeners();\n }\n\n private updatePopoverPosition(): void {\n const el = this.popoverRef.nativeElement;\n const spanRect = this.getCurrentSpanRect() ?? this.currentSpanRect;\n if (!spanRect) return;\n\n this.currentSpanRect = spanRect;\n\n const gap = 6;\n const edgePadding = 8;\n const spaceAbove = spanRect.top;\n const spaceBelow = window.innerHeight - spanRect.bottom;\n const popoverHeight = el.offsetHeight;\n\n const above = spaceAbove >= popoverHeight + gap || spaceAbove >= spaceBelow;\n this.openAbove.set(above);\n\n el.style.position = 'fixed';\n el.style.zIndex = '10000';\n\n if (above) {\n el.style.top = '';\n el.style.bottom = `${window.innerHeight - spanRect.top + gap}px`;\n } else {\n el.style.top = `${spanRect.bottom + gap}px`;\n el.style.bottom = '';\n }\n\n // Horizontal: center on span, clamp to viewport\n const centerX = spanRect.left + spanRect.width / 2;\n const popoverWidth = el.offsetWidth;\n let left = centerX - popoverWidth / 2;\n left = Math.max(edgePadding, Math.min(left, window.innerWidth - popoverWidth - edgePadding));\n el.style.left = `${left}px`;\n }\n\n private getCurrentSpanRect(): DOMRect | null {\n const mirrorEl = this.mirrorRef()?.nativeElement;\n if (!mirrorEl) return null;\n\n const varKey = this.popoverVarKey();\n if (!varKey) return null;\n\n const spans = mirrorEl.querySelectorAll('.ui-tmpl__var') as NodeListOf<HTMLElement>;\n for (const span of spans) {\n const text = (span.textContent || '').replace(/^\\{\\{|\\}\\}$/g, '');\n if (text === varKey) {\n return span.getBoundingClientRect();\n }\n }\n return null;\n }\n\n private readonly onPositionUpdate = (): void => {\n if (this.isPortaled && this.popoverVisible()) {\n this.updatePopoverPosition();\n }\n };\n\n private addPositionListeners(): void {\n window.addEventListener('scroll', this.onPositionUpdate, true);\n window.addEventListener('resize', this.onPositionUpdate);\n this.positionCleanup = () => {\n window.removeEventListener('scroll', this.onPositionUpdate, true);\n window.removeEventListener('resize', this.onPositionUpdate);\n };\n }\n\n private removePositionListeners(): void {\n if (this.positionCleanup) {\n this.positionCleanup();\n this.positionCleanup = null;\n }\n }\n\n ngOnDestroy(): void {\n this.cancelHide();\n // Remove from body if still portaled\n if (this.isPortaled) {\n const el = this.popoverRef.nativeElement;\n el.remove();\n this.removePositionListeners();\n this.isPortaled = false;\n }\n // Clean up observers\n if (this.resizeObserver) {\n this.resizeObserver.disconnect();\n this.resizeObserver = null;\n }\n if (this.mutationObserver) {\n this.mutationObserver.disconnect();\n this.mutationObserver = null;\n }\n }\n}\n","<div\n class=\"ui-template-input-wrapper\"\n [class.ui-template-input-wrapper--error]=\"error()\"\n [class.ui-template-input-wrapper--disabled]=\"disabled()\"\n>\n @if (label()) {\n <label class=\"ui-template-input__label\" [attr.for]=\"inputId()\">\n {{ label() }}\n @if (required()) {\n <span class=\"ui-template-input__required\">*</span>\n }\n </label>\n }\n <div\n class=\"ui-template-input__container\"\n [style.--ui-tmpl-suffix-width]=\"suffixPadding() + 'px'\"\n (mousemove)=\"onMouseMove($event)\"\n (mouseleave)=\"onContainerMouseLeave()\"\n >\n <div\n class=\"ui-template-input__mirror\"\n #mirror\n [innerHTML]=\"highlightedHtml()\"\n ></div>\n <input\n class=\"ui-template-input__input\"\n #inputEl\n [id]=\"inputId()\"\n type=\"text\"\n [placeholder]=\"placeholder()\"\n [disabled]=\"disabled()\"\n [readonly]=\"readonly()\"\n [required]=\"required()\"\n [(ngModel)]=\"value\"\n (input)=\"onInput()\"\n (scroll)=\"syncScroll()\"\n (click)=\"syncScroll()\"\n (keydown)=\"onKeyDown()\"\n />\n <div class=\"ui-template-input__suffix\" #suffixEl>\n <ng-content select=\"[uiTemplateInputSuffix]\" />\n </div>\n </div>\n @if (error()) {\n <span class=\"ui-template-input__error\">{{ error() }}</span>\n }\n @if (hint() && !error()) {\n <span class=\"ui-template-input__hint\">{{ hint() }}</span>\n }\n</div>\n\n<div\n #popoverRef\n class=\"ui-tmpl-popover\"\n [class.ui-tmpl-popover--open]=\"popoverVisible()\"\n [class.ui-tmpl-popover--above]=\"openAbove()\"\n [class.ui-tmpl-popover--below]=\"!openAbove()\"\n (mouseenter)=\"onPopoverMouseEnter()\"\n (mouseleave)=\"onPopoverMouseLeave()\"\n>\n @if (popoverVisible()) {\n @if (popoverTemplate()) {\n <ng-container\n [ngTemplateOutlet]=\"popoverTemplate()!\"\n [ngTemplateOutletContext]=\"popoverContext()\"\n />\n } @else {\n <span class=\"ui-tmpl-popover__text\">{{ popoverText() }}</span>\n }\n }\n</div>\n","/*\n * Public API Surface of @m1z23r/ngx-ui\n */\n\n// Validators\nexport { Validators } from './lib/validators/validators';\nexport type { ValidationError, ValidatorFn } from './lib/validators/validators';\n\n// Services\nexport { SidebarService } from './lib/services/sidebar.service';\nexport { LoadingService } from './lib/loading/loading.service';\nexport { DialogService } from './lib/dialog/dialog.service';\nexport { ToastService } from './lib/toast/toast.service';\nexport { TabsService } from './lib/components/tabs/tabs.service';\n\n// Toast\nexport { ToastRef } from './lib/toast/toast-ref';\nexport type { ToastConfig, ToastVariant, ToastPosition } from './lib/toast/toast.config';\n\n// Dialog\nexport { DialogRef } from './lib/dialog/dialog-ref';\nexport { ModalComponent } from './lib/components/modal/modal.component';\nexport { DIALOG_DATA, DIALOG_REF } from './lib/dialog/dialog.config';\nexport type { DialogConfig, ModalSize } from './lib/dialog/dialog.config';\n\n// Loading\nexport { LoadingDirective } from './lib/loading/loading.directive';\nexport type { Loadable } from './lib/loading/loadable';\nexport { LOADABLE } from './lib/loading/loadable';\n\n// Components\nexport { ButtonComponent } from './lib/components/button/button.component';\nexport type { ButtonVariant, ButtonColor, ButtonSize } from './lib/components/button/button.component';\n\nexport { InputComponent } from './lib/components/input/input.component';\nexport type { InputType, ValidationState } from './lib/components/input/input.component';\n\nexport { TableComponent, CellTemplateDirective } from './lib/components/table/table.component';\nexport type { TableColumn, SortDirection, SortState } from './lib/components/table/table.component';\nexport { CellValuePipe } from './lib/components/table/cell-value.pipe';\n\nexport { SelectComponent } from './lib/components/select/select.component';\nexport type { SelectVariant, SelectSize, AsyncSelectOption, AsyncSearchFn } from './lib/components/select/select.component';\nexport { OptionComponent } from './lib/components/select/option.component';\nexport { OptionTemplateDirective } from './lib/components/select/option-template.directive';\nexport type { OptionTemplateContext } from './lib/components/select/option-template.directive';\n\nexport { DropdownComponent } from './lib/components/dropdown/dropdown.component';\nexport type { DropdownPosition, DropdownAlign } from './lib/components/dropdown/dropdown.component';\nexport { DropdownItemComponent } from './lib/components/dropdown/dropdown-item.component';\nexport { DropdownDividerComponent } from './lib/components/dropdown/dropdown-divider.component';\nexport { DropdownTriggerDirective } from './lib/components/dropdown/dropdown-trigger.directive';\nexport { ContextMenuDirective } from './lib/components/dropdown/context-menu.directive';\n\nexport { CheckboxComponent } from './lib/components/checkbox/checkbox.component';\nexport type { CheckboxSize } from './lib/components/checkbox/checkbox.component';\n\nexport { SwitchComponent } from './lib/components/switch/switch.component';\nexport type { SwitchSize } from './lib/components/switch/switch.component';\n\nexport { BadgeComponent } from './lib/components/badge/badge.component';\nexport type { BadgeVariant, BadgeSize } from './lib/components/badge/badge.component';\n\nexport { TextareaComponent } from './lib/components/textarea/textarea.component';\nexport type { TextareaResize } from './lib/components/textarea/textarea.component';\n\nexport { ProgressComponent } from './lib/components/progress/progress.component';\nexport type { ProgressVariant, ProgressSize } from './lib/components/progress/progress.component';\n\nexport { CircularProgressComponent } from './lib/components/progress/circular-progress.component';\nexport type { CircularProgressVariant, CircularProgressSize } from './lib/components/progress/circular-progress.component';\n\nexport { SpinnerComponent } from './lib/components/spinner/spinner.component';\nexport type { SpinnerSize, SpinnerVariant } from './lib/components/spinner/spinner.component';\n\nexport { AlertComponent } from './lib/components/alert/alert.component';\nexport type { AlertVariant } from './lib/components/alert/alert.component';\n\nexport { CardComponent } from './lib/components/card/card.component';\nexport type { CardVariant, CardPadding } from './lib/components/card/card.component';\n\nexport { TooltipDirective } from './lib/components/tooltip/tooltip.directive';\nexport type { TooltipPosition } from './lib/components/tooltip/tooltip.directive';\n\nexport { RadioGroupComponent } from './lib/components/radio/radio-group.component';\nexport type { RadioGroupOrientation, RadioGroupSize, RadioGroupVariant } from './lib/components/radio/radio-group.component';\nexport { RadioComponent } from './lib/components/radio/radio.component';\n\nexport { TabsComponent } from './lib/components/tabs/tabs.component';\nexport type { TabsVariant, TabsSize } from './lib/components/tabs/tabs.component';\nexport { TabComponent } from './lib/components/tabs/tab.component';\nexport { TabIconDirective } from './lib/components/tabs/tab-icon.directive';\nexport { TabActivePipe } from './lib/components/tabs/tab-active.pipe';\nexport { DynamicTabsComponent } from './lib/components/tabs/dynamic-tabs.component';\nexport type { DynamicTabsVariant, DynamicTabsSize } from './lib/components/tabs/dynamic-tabs.component';\nexport { TabRef } from './lib/components/tabs/tab-ref';\nexport { TAB_DATA, TAB_REF } from './lib/components/tabs/tab.config';\nexport type { DynamicTabConfig, TabRenderMode } from './lib/components/tabs/tab.config';\n\nexport { AccordionComponent } from './lib/components/accordion/accordion.component';\nexport type { AccordionVariant } from './lib/components/accordion/accordion.component';\nexport { AccordionItemComponent } from './lib/components/accordion/accordion-item.component';\nexport { AccordionHeaderDirective } from './lib/components/accordion/accordion-header.directive';\n\nexport { PaginationComponent } from './lib/components/pagination/pagination.component';\nexport type { PaginationSize } from './lib/components/pagination/pagination.component';\n\nexport { FileChooserComponent } from './lib/components/file-chooser/file-chooser.component';\nexport type { FileChooserVariant, FileChooserSize } from './lib/components/file-chooser/file-chooser.component';\nexport { FileSizePipe } from './lib/components/file-chooser/file-size.pipe';\nexport { FilePreviewPipe } from './lib/components/file-chooser/file-preview.pipe';\n\nexport { SliderComponent } from './lib/components/slider/slider.component';\nexport type { SliderSize } from './lib/components/slider/slider.component';\n\nexport { ChipInputComponent, ChipTemplateDirective } from './lib/components/chip-input/chip-input.component';\nexport type { ChipInputVariant, ChipInputSize, ChipTemplateContext } from './lib/components/chip-input/chip-input.component';\n\nexport { DatepickerComponent } from './lib/components/datepicker/datepicker.component';\nexport type { DatepickerView, DatepickerSize, DatepickerVariant, DateRange } from './lib/components/datepicker/datepicker.component';\n\nexport { TimepickerComponent } from './lib/components/timepicker/timepicker.component';\nexport type { TimepickerSize, TimepickerVariant, TimeFormat, TimeValue } from './lib/components/timepicker/timepicker.component';\n\nexport { DatetimepickerComponent } from './lib/components/datetimepicker/datetimepicker.component';\nexport type { DatetimepickerSize, DatetimepickerVariant, DatetimepickerView } from './lib/components/datetimepicker/datetimepicker.component';\n\n// Layout Components\nexport { ShellComponent } from './lib/components/layout/shell/shell.component';\nexport type { ShellVariant } from './lib/components/layout/shell/shell.component';\nexport { NavbarComponent } from './lib/components/layout/navbar/navbar.component';\nexport { SidebarComponent } from './lib/components/layout/sidebar/sidebar.component';\nexport { ContentComponent } from './lib/components/layout/content/content.component';\nexport { FooterComponent } from './lib/components/layout/footer/footer.component';\nexport { SidebarToggleComponent } from './lib/components/layout/sidebar-toggle/sidebar-toggle.component';\n\n// Split Pane\nexport { SplitComponent } from './lib/components/split-pane/split.component';\nexport type { SplitOrientation, SplitGutterSize, SplitSizeChange } from './lib/components/split-pane/split.component';\nexport { SplitPaneComponent } from './lib/components/split-pane/split-pane.component';\n\n// Tree\nexport { TreeComponent, TREE_HOST } from './lib/components/tree/tree.component';\nexport type { TreeNode, TreeDropPosition, TreeNodeDropEvent } from './lib/components/tree/tree.component';\nexport { TreeNodeComponent } from './lib/components/tree/tree-node.component';\n\n// Template Input\nexport { TemplateInputComponent, VariablePopoverDirective, TemplateInputSuffixDirective } from './lib/components/template-input/template-input.component';\nexport type { TemplateVariable, VariablePopoverContext, VariableState } from './lib/components/template-input/template-input.component';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
|