@truenas/ui-components 0.1.2 → 0.1.4

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":"truenas-ui-components.mjs","sources":["../../../projects/truenas-ui/src/lib/enums/disk-type.enum.ts","../../../projects/truenas-ui/src/lib/disk-icon/disk-icon.component.ts","../../../projects/truenas-ui/src/lib/disk-icon/disk-icon.component.html","../../../projects/truenas-ui/src/lib/icon/sprite-loader.service.ts","../../../projects/truenas-ui/src/lib/icon/icon-registry.service.ts","../../../projects/truenas-ui/src/lib/icon/icon.component.ts","../../../projects/truenas-ui/src/lib/icon/icon.component.html","../../../projects/truenas-ui/src/lib/banner/banner.component.ts","../../../projects/truenas-ui/src/lib/banner/banner.component.html","../../../projects/truenas-ui/src/lib/banner/banner.harness.ts","../../../projects/truenas-ui/src/lib/button/button.component.ts","../../../projects/truenas-ui/src/lib/button/button.component.html","../../../projects/truenas-ui/src/lib/icon-button/icon-button.component.ts","../../../projects/truenas-ui/src/lib/icon-button/icon-button.component.html","../../../projects/truenas-ui/src/lib/enums/input-type.enum.ts","../../../projects/truenas-ui/src/lib/input/input.component.ts","../../../projects/truenas-ui/src/lib/input/input.component.html","../../../projects/truenas-ui/src/lib/input/input.directive.ts","../../../projects/truenas-ui/src/lib/chip/chip.component.ts","../../../projects/truenas-ui/src/lib/chip/chip.component.html","../../../projects/truenas-ui/src/lib/menu/menu-trigger.directive.ts","../../../projects/truenas-ui/src/lib/menu/menu.component.ts","../../../projects/truenas-ui/src/lib/menu/menu.component.html","../../../projects/truenas-ui/src/lib/slide-toggle/slide-toggle.component.ts","../../../projects/truenas-ui/src/lib/slide-toggle/slide-toggle.component.html","../../../projects/truenas-ui/src/lib/card/card.component.ts","../../../projects/truenas-ui/src/lib/card/card.component.html","../../../projects/truenas-ui/src/lib/expansion-panel/expansion-panel.component.ts","../../../projects/truenas-ui/src/lib/expansion-panel/expansion-panel.component.html","../../../projects/truenas-ui/src/lib/checkbox/checkbox.component.ts","../../../projects/truenas-ui/src/lib/checkbox/checkbox.component.html","../../../projects/truenas-ui/src/lib/radio/radio.component.ts","../../../projects/truenas-ui/src/lib/radio/radio.component.html","../../../projects/truenas-ui/src/lib/tab/tab.component.ts","../../../projects/truenas-ui/src/lib/tab/tab.component.html","../../../projects/truenas-ui/src/lib/tab-panel/tab-panel.component.ts","../../../projects/truenas-ui/src/lib/tab-panel/tab-panel.component.html","../../../projects/truenas-ui/src/lib/tabs/tabs.component.ts","../../../projects/truenas-ui/src/lib/tabs/tabs.component.html","../../../projects/truenas-ui/src/lib/keyboard-shortcut/keyboard-shortcut.component.ts","../../../projects/truenas-ui/src/lib/keyboard-shortcut/keyboard-shortcut.component.html","../../../projects/truenas-ui/src/lib/form-field/form-field.component.ts","../../../projects/truenas-ui/src/lib/form-field/form-field.component.html","../../../projects/truenas-ui/src/lib/select/select.component.ts","../../../projects/truenas-ui/src/lib/select/select.component.html","../../../projects/truenas-ui/src/lib/icon/icon.harness.ts","../../../projects/truenas-ui/src/lib/icon/icon-marker.ts","../../../projects/truenas-ui/src/lib/icon/integrations/lucide.integration.ts","../../../projects/truenas-ui/src/lib/list/list.component.ts","../../../projects/truenas-ui/src/lib/list/list.component.html","../../../projects/truenas-ui/src/lib/list-item/list-item.component.ts","../../../projects/truenas-ui/src/lib/list-item/list-item.component.html","../../../projects/truenas-ui/src/lib/list-subheader/list-subheader.component.ts","../../../projects/truenas-ui/src/lib/list-subheader/list-subheader.component.html","../../../projects/truenas-ui/src/lib/list-directives/list-directives.ts","../../../projects/truenas-ui/src/lib/divider/divider.component.ts","../../../projects/truenas-ui/src/lib/divider/divider.component.html","../../../projects/truenas-ui/src/lib/list-option/list-option.component.ts","../../../projects/truenas-ui/src/lib/list-option/list-option.component.html","../../../projects/truenas-ui/src/lib/selection-list/selection-list.component.ts","../../../projects/truenas-ui/src/lib/selection-list/selection-list.component.html","../../../projects/truenas-ui/src/lib/table-column/table-column.directive.ts","../../../projects/truenas-ui/src/lib/table/table.component.ts","../../../projects/truenas-ui/src/lib/table/table.component.html","../../../projects/truenas-ui/src/lib/tree/tree.component.ts","../../../projects/truenas-ui/src/lib/tree/tree.component.html","../../../projects/truenas-ui/src/lib/tree/tree-node.component.ts","../../../projects/truenas-ui/src/lib/tree/tree-node.component.html","../../../projects/truenas-ui/src/lib/tree/tree-node-outlet.directive.ts","../../../projects/truenas-ui/src/lib/tree/nested-tree-node.component.ts","../../../projects/truenas-ui/src/lib/tree/nested-tree-node.component.html","../../../projects/truenas-ui/src/lib/enums/modifier-keys.enum.ts","../../../projects/truenas-ui/src/lib/enums/common-shortcuts.enum.ts","../../../projects/truenas-ui/src/lib/utils/shortcut-builder.ts","../../../projects/truenas-ui/src/lib/pipes/file-size/bits.constant.ts","../../../projects/truenas-ui/src/lib/pipes/file-size/bytes.constant.ts","../../../projects/truenas-ui/src/lib/pipes/file-size/file-size.utils.ts","../../../projects/truenas-ui/src/lib/pipes/file-size/file-size.pipe.ts","../../../projects/truenas-ui/src/lib/pipes/strip-mnt-prefix/strip-mnt-prefix.pipe.ts","../../../projects/truenas-ui/src/lib/pipes/truncate-path/truncate-path.pipe.ts","../../../projects/truenas-ui/src/lib/spinner/spinner.component.ts","../../../projects/truenas-ui/src/lib/spinner/spinner.component.html","../../../projects/truenas-ui/src/lib/spinner/branded-spinner.component.ts","../../../projects/truenas-ui/src/lib/spinner/branded-spinner.component.html","../../../projects/truenas-ui/src/lib/progress-bar/progress-bar.component.ts","../../../projects/truenas-ui/src/lib/progress-bar/progress-bar.component.html","../../../projects/truenas-ui/src/lib/progress-bar/particle-progress-bar.component.ts","../../../projects/truenas-ui/src/lib/progress-bar/particle-progress-bar.component.html","../../../projects/truenas-ui/src/lib/calendar/calendar-header.component.ts","../../../projects/truenas-ui/src/lib/calendar/calendar-header.component.html","../../../projects/truenas-ui/src/lib/calendar/month-view.component.ts","../../../projects/truenas-ui/src/lib/calendar/month-view.component.html","../../../projects/truenas-ui/src/lib/calendar/multi-year-view.component.ts","../../../projects/truenas-ui/src/lib/calendar/multi-year-view.component.html","../../../projects/truenas-ui/src/lib/calendar/calendar.component.ts","../../../projects/truenas-ui/src/lib/calendar/calendar.component.html","../../../projects/truenas-ui/src/lib/date-range-input/date-input.component.ts","../../../projects/truenas-ui/src/lib/date-range-input/date-input.component.html","../../../projects/truenas-ui/src/lib/date-range-input/date-range-input.component.ts","../../../projects/truenas-ui/src/lib/date-range-input/date-range-input.component.html","../../../projects/truenas-ui/src/lib/date-range-input/time-input.component.ts","../../../projects/truenas-ui/src/lib/date-range-input/time-input.component.html","../../../projects/truenas-ui/src/lib/slider/slider-thumb.directive.ts","../../../projects/truenas-ui/src/lib/slider/slider.component.ts","../../../projects/truenas-ui/src/lib/slider/slider.component.html","../../../projects/truenas-ui/src/lib/slider/slider-with-label.directive.ts","../../../projects/truenas-ui/src/lib/button-toggle/button-toggle.component.ts","../../../projects/truenas-ui/src/lib/button-toggle/button-toggle.component.html","../../../projects/truenas-ui/src/lib/button-toggle/button-toggle-group.component.ts","../../../projects/truenas-ui/src/lib/button-toggle/button-toggle-group.component.html","../../../projects/truenas-ui/src/lib/tooltip/tooltip.component.ts","../../../projects/truenas-ui/src/lib/tooltip/tooltip.component.html","../../../projects/truenas-ui/src/lib/tooltip/tooltip.directive.ts","../../../projects/truenas-ui/src/lib/dialog/dialog.service.ts","../../../projects/truenas-ui/src/lib/dialog/dialog-shell.component.ts","../../../projects/truenas-ui/src/lib/dialog/dialog-shell.component.html","../../../projects/truenas-ui/src/lib/dialog/confirm-dialog.component.ts","../../../projects/truenas-ui/src/lib/dialog/confirm-dialog.component.html","../../../projects/truenas-ui/src/lib/stepper/step.component.ts","../../../projects/truenas-ui/src/lib/stepper/stepper.component.ts","../../../projects/truenas-ui/src/lib/stepper/stepper.component.html","../../../projects/truenas-ui/src/lib/custom-icons/generated-icons.ts","../../../projects/truenas-ui/src/lib/file-picker/file-picker-popup.component.ts","../../../projects/truenas-ui/src/lib/file-picker/file-picker-popup.component.html","../../../projects/truenas-ui/src/lib/file-picker/file-picker.component.ts","../../../projects/truenas-ui/src/lib/file-picker/file-picker.component.html","../../../projects/truenas-ui/src/lib/services/keyboard-shortcut.service.ts","../../../projects/truenas-ui/src/lib/theme/theme.interface.ts","../../../projects/truenas-ui/src/lib/theme/theme.constants.ts","../../../projects/truenas-ui/src/lib/theme/theme.service.ts","../../../projects/truenas-ui/src/public-api.ts","../../../projects/truenas-ui/src/truenas-ui-components.ts"],"sourcesContent":["export enum DiskType {\n Hdd = 'HDD',\n Ssd = 'SSD',\n}\n","import {\n ChangeDetectionStrategy, Component, input,\n} from '@angular/core';\nimport { DiskType } from '../enums/disk-type.enum';\n\n@Component({\n selector: 'tn-disk-icon',\n templateUrl: './disk-icon.component.html',\n styleUrls: ['./disk-icon.component.scss'],\n standalone: true,\n imports: [\n // FileSizePipe,\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class DiskIconComponent {\n readonly size = input.required<string>(); // Was originally a number\n readonly type = input.required<DiskType>();\n readonly name = input.required<string>();\n\n protected readonly DiskType = DiskType;\n}\n","<html>\n<svg id=\"disk-icon-large\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" width=\"72\" height=\"80\" viewBox=\"0 0 72 80\">\n <defs>\n <clipPath id=\"clip-path\">\n <rect id=\"Mask_Rounded_Corners\" data-name=\"Mask Rounded Corners\" width=\"72\" height=\"80\" rx=\"4\" transform=\"translate(-0.039)\" fill=\"none\" stroke=\"#414141\" stroke-width=\"1\"/>\n </clipPath>\n <filter id=\"BG_Fill\" x=\"-9\" y=\"-6\" width=\"90\" height=\"98\" filterUnits=\"userSpaceOnUse\">\n <feOffset dy=\"3\" input=\"SourceAlpha\"/>\n <feGaussianBlur stdDeviation=\"3\" result=\"blur\"/>\n <feFlood flood-opacity=\"0.161\"/>\n <feComposite operator=\"in\" in2=\"blur\"/>\n <feComposite in=\"SourceGraphic\"/>\n </filter>\n </defs>\n <g id=\"Normal\" transform=\"translate(11)\">\n <g id=\"BG_Masks\" data-name=\"BG Masks\" transform=\"translate(-10.961)\" clip-path=\"url(#clip-path)\">\n <g transform=\"matrix(1, 0, 0, 1, -0.04, 0)\" filter=\"url(#BG_Fill)\">\n <g id=\"BG_Fill-2\" data-name=\"BG Fill\" fill=\"#1e1e1e\" stroke=\"#8f8f8f\" stroke-width=\"1\">\n <rect width=\"72\" height=\"80\" rx=\"4\" stroke=\"none\"/>\n <rect x=\"0.5\" y=\"0.5\" width=\"71\" height=\"79\" rx=\"3.5\" fill=\"none\"/>\n </g>\n </g>\n <rect id=\"BG_Top\" data-name=\"BG Top\" width=\"70.5\" height=\"17.391\" transform=\"translate(-0.039)\" fill=\"rgba(255,255,255,0.5)\" opacity=\"0.5\"/>\n <path id=\"BG_Bottom\" data-name=\"BG Bottom\" d=\"M0,0H70.5V17.391H0Z\" transform=\"translate(-0.039 62.609)\" fill=\"rgba(255,255,255,0.5)\" opacity=\"0.5\"/>\n </g>\n @if (type() === DiskType.Hdd) {\n <g id=\"harddisk\" transform=\"scale(1.2), translate(4 14)\" opacity=\"0.5\">\n <path id=\"harddisk-2\" data-name=\"harddisk\" d=\"M6.856,2H23.989a2.856,2.856,0,0,1,2.856,2.856V27.7a2.856,2.856,0,0,1-2.856,2.856H6.856A2.856,2.856,0,0,1,4,27.7V4.856A2.856,2.856,0,0,1,6.856,2Zm8.567,2.856a8.567,8.567,0,0,0-8.567,8.567,8.474,8.474,0,0,0,8.567,8.567l-1.428-2.856c-.394-.683.745-2.461,1.428-2.856h0c.683-.394,2.461-.683,2.856,0l2.856,4.283c1.963-1.57,2.856-4.43,2.856-7.139A8.567,8.567,0,0,0,15.422,4.856Zm0,7.139a1.428,1.428,0,1,1-1.428,1.428A1.428,1.428,0,0,1,15.422,11.995ZM8.283,24.845a1.428,1.428,0,1,0,1.428,1.428A1.428,1.428,0,0,0,8.283,24.845Zm7.139-7.139L19.706,27.7l2.856-2.856L16.85,17.706Z\" transform=\"translate(0.098 3.322)\" fill=\"#fff\"/>\n </g>\n } @else if (type() === DiskType.Ssd) {\n <g id=\"ssd\" transform=\"translate(-50 17.5) scale(0.5)\" opacity=\"0.5\">\n <path id=\"ssd-2\" d=\"M 132.935 15.223 L 140.185 15.223 L 140.185 19.723 C 140.185 21.944 141.985 23.744 144.206 23.744 L 157.231 23.744 C 159.452 23.744 161.252 21.944 161.252 19.723 L 161.252 15.223 L 168.503 15.223 C 171.577 15.223 174.069 17.715 174.069 20.789 L 174.069 68.904 C 174.069 71.978 171.577 74.47 168.503 74.47 L 132.935 74.47 C 129.861 74.47 127.369 71.978 127.369 68.904 L 127.369 20.789 C 127.369 17.715 129.861 15.223 132.935 15.223 Z M 143.428 15.498 L 150.92 15.498 C 151.394 15.498 151.779 15.883 151.779 16.357 L 151.779 20.207 C 151.779 20.681 151.394 21.066 150.92 21.066 L 143.428 21.066 C 142.954 21.066 142.569 20.681 142.569 20.207 L 142.569 16.357 C 142.569 15.883 142.954 15.498 143.428 15.498 Z M 155.103 15.498 L 157.561 15.498 C 158.163 15.498 158.651 15.986 158.651 16.588 L 158.651 20.002 C 158.651 20.604 158.163 21.092 157.561 21.092 L 155.103 21.092 C 154.501 21.092 154.013 20.604 154.013 20.002 L 154.013 16.588 C 154.013 15.986 154.501 15.498 155.103 15.498 Z M 135.852 38.928 L 135.852 59.34 C 135.852 62.06 138.057 64.265 140.777 64.265 L 160.662 64.265 C 163.382 64.265 165.587 62.06 165.587 59.34 L 165.587 38.928 C 165.587 36.208 163.382 34.003 160.662 34.003 L 140.777 34.003 C 138.057 34.003 135.852 36.208 135.852 38.928 Z M 140.106 36.674 L 161.333 36.674 C 162.385 36.674 163.237 37.526 163.237 38.578 L 163.237 59.69 C 163.237 60.742 162.385 61.594 161.333 61.594 L 140.106 61.594 C 139.054 61.594 138.202 60.742 138.202 59.69 L 138.202 38.578 C 138.202 37.526 139.054 36.674 140.106 36.674 Z M 167.69 19.867 C 166.509 19.867 165.552 20.824 165.552 22.005 C 165.552 23.186 166.509 24.143 167.69 24.143 C 168.871 24.143 169.828 23.186 169.828 22.005 C 169.828 20.824 168.871 19.867 167.69 19.867 Z M 167.69 65.55 C 166.509 65.55 165.552 66.507 165.552 67.688 C 165.552 68.869 166.509 69.826 167.69 69.826 C 168.871 69.826 169.828 68.869 169.828 67.688 C 169.828 66.507 168.871 65.55 167.69 65.55 Z M 133.748 65.55 C 132.567 65.55 131.61 66.507 131.61 67.688 C 131.61 68.869 132.567 69.826 133.748 69.826 C 134.929 69.826 135.886 68.869 135.886 67.688 C 135.886 66.507 134.929 65.55 133.748 65.55 Z M 133.748 19.867 C 132.567 19.867 131.61 20.824 131.61 22.005 C 131.61 23.186 132.567 24.143 133.748 24.143 C 134.929 24.143 135.886 23.186 135.886 22.005 C 135.886 20.824 134.929 19.867 133.748 19.867 Z\" style=\"fill: rgb(216, 216, 216);\" />\n </g>\n }\n <g id=\"Labels\" transform=\"translate(11.451 1.857)\" opacity=\"0.998\">\n <text id=\"disk-size\" data-name=\"2 TiB\" transform=\"translate(13 72.714)\" fill=\"#fff\" font-size=\"11\" font-family=\"Inter\" style=\"text-anchor: middle\">\n <tspan x=\"0\" y=\"0\">{{ size() }}</tspan>\n </text>\n <text id=\"disk-identifier\" transform=\"translate(12.647 11)\" fill=\"#fff\" font-size=\"11\" font-family=\"Inter\" style=\"text-anchor: middle\">\n <tspan x=\"0\" y=\"0\">{{ name() }}</tspan>\n </text>\n </g>\n </g>\n</svg>\n</html>\n","import { HttpClient } from '@angular/common/http';\nimport { inject, Injectable } from '@angular/core';\nimport { DomSanitizer, type SafeResourceUrl } from '@angular/platform-browser';\nimport { firstValueFrom } from 'rxjs';\n\n/**\n * Default base path for sprite assets (namespaced to avoid collisions with consumer apps)\n * This should match the value in sprite-config-interface.ts\n */\nexport const defaultSpriteBasePath = 'assets/tn-icons';\n\n/**\n * Default path for the sprite configuration file.\n */\nexport const defaultSpriteConfigPath = `${defaultSpriteBasePath}/sprite-config.json`;\n\nexport interface SpriteConfig {\n iconUrl: string;\n icons?: string[]; // List of available icon IDs in the sprite\n}\n\n/**\n * Service for loading and managing icon sprites.\n * This is a custom implementation that does NOT depend on Angular Material.\n *\n * The sprite system works by:\n * 1. Loads the application's sprite (generated via `yarn icons` command)\n * 2. The sprite includes both consumer icons and library-internal icons (chevrons, folder, etc.)\n * 3. Icons are resolved as SVG fragment identifiers (e.g., sprite.svg#icon-name)\n */\n@Injectable({\n providedIn: 'root'\n})\nexport class TnSpriteLoaderService {\n private spriteConfig?: SpriteConfig;\n private spriteLoaded = false;\n private spriteLoadPromise?: Promise<void>;\n\n private http = inject(HttpClient);\n private sanitizer = inject(DomSanitizer);\n\n constructor() {\n // Start loading sprite immediately (fire-and-forget)\n void this.loadSpriteConfig();\n }\n\n /**\n * Load the sprite configuration\n */\n private async loadSpriteConfig(): Promise<void> {\n if (this.spriteLoadPromise) {\n return this.spriteLoadPromise;\n }\n\n this.spriteLoadPromise = (async () => {\n try {\n const config = await firstValueFrom(\n this.http.get<SpriteConfig>(defaultSpriteConfigPath)\n );\n this.spriteConfig = config;\n this.spriteLoaded = true;\n } catch (error) {\n console.error('[TnSpriteLoader] Failed to load sprite config. Icons may not work:', error);\n }\n })();\n\n return this.spriteLoadPromise;\n }\n\n /**\n * Ensure the sprite is loaded before resolving icons\n */\n async ensureSpriteLoaded(): Promise<boolean> {\n await this.loadSpriteConfig();\n return this.spriteLoaded;\n }\n\n /**\n * Get the full URL for an icon in the sprite\n * Returns a URL like: assets/icons/sprite.svg?v=hash#icon-name\n *\n * @param iconName The icon name (e.g., 'folder', 'mdi-server', 'tn-dataset')\n * @returns The fragment identifier URL for the icon, or null if sprite not loaded or icon not in sprite\n */\n getIconUrl(iconName: string): string | null {\n if (!this.spriteConfig) {\n console.warn(`[TnSpriteLoader] Icon sprite not loaded yet, cannot resolve: ${iconName}`);\n return null;\n }\n\n // Check if the icon exists in the sprite manifest\n if (this.spriteConfig.icons && !this.spriteConfig.icons.includes(iconName)) {\n return null;\n }\n\n // The sprite URL already includes the cache-busting version parameter\n // We just append the icon name as a fragment identifier\n return `${this.spriteConfig.iconUrl}#${iconName}`;\n }\n\n /**\n * Get a sanitized resource URL for an icon\n * This is used when binding to [src] or similar attributes\n *\n * @param iconName The icon name\n * @returns Sanitized resource URL or null\n */\n getSafeIconUrl(iconName: string): SafeResourceUrl | null {\n const url = this.getIconUrl(iconName);\n if (!url) {\n return null;\n }\n\n return this.sanitizer.bypassSecurityTrustResourceUrl(url);\n }\n\n /**\n * Check if the sprite is loaded\n */\n isSpriteLoaded(): boolean {\n return this.spriteLoaded;\n }\n\n /**\n * Get the sprite config if loaded\n */\n getSpriteConfig(): SpriteConfig | undefined {\n return this.spriteConfig;\n }\n}\n","import { inject, Injectable } from '@angular/core';\nimport { DomSanitizer, type SafeHtml } from '@angular/platform-browser';\nimport { TnSpriteLoaderService } from './sprite-loader.service';\n\nexport interface IconLibrary {\n name: string;\n resolver: (iconName: string, options?: unknown) => string | HTMLElement | null;\n defaultOptions?: unknown;\n}\n\nexport interface ResolvedIcon {\n source: 'svg' | 'css' | 'unicode' | 'text' | 'sprite';\n content: string | SafeHtml;\n spriteUrl?: string; // For sprite-based icons\n}\n\n@Injectable({\n providedIn: 'root'\n})\nexport class TnIconRegistryService {\n private libraries = new Map<string, IconLibrary>();\n private customIcons = new Map<string, string>();\n\n private sanitizer: DomSanitizer;\n private spriteLoader: TnSpriteLoaderService;\n\n constructor(\n sanitizer?: DomSanitizer,\n spriteLoader?: TnSpriteLoaderService\n ) {\n // Support both DI and manual injection for testing\n this.sanitizer = sanitizer ?? inject(DomSanitizer);\n this.spriteLoader = spriteLoader ?? inject(TnSpriteLoaderService);\n }\n\n /**\n * Register an icon library (like Lucide, Heroicons, etc.)\n * \n * @example\n * ```typescript\n * // Register Lucide\n * import * as LucideIcons from 'lucide';\n * \n * iconRegistry.registerLibrary({\n * name: 'lucide',\n * resolver: (iconName: string, options = {}) => {\n * const pascalCase = iconName.split('-').map(part => \n * part.charAt(0).toUpperCase() + part.slice(1)\n * ).join('');\n * \n * const iconFunction = (LucideIcons as any)[pascalCase];\n * if (iconFunction && typeof iconFunction === 'function') {\n * return iconFunction({\n * size: 24,\n * color: 'currentColor',\n * strokeWidth: 2,\n * ...options\n * });\n * }\n * return null;\n * },\n * defaultOptions: { size: 24, strokeWidth: 2 }\n * });\n * ```\n */\n registerLibrary(library: IconLibrary): void {\n this.libraries.set(library.name, library);\n }\n\n /**\n * Register a custom SVG icon\n * \n * @example\n * ```typescript\n * iconRegistry.registerIcon('my-logo', `\n * <svg viewBox=\"0 0 24 24\">\n * <path d=\"M12 2L2 7v10c0 5.55 3.84 10 9 11 1.16-.08 2-.35 3-.82z\"/>\n * </svg>\n * `);\n * ```\n */\n registerIcon(name: string, svgContent: string): void {\n this.customIcons.set(name, svgContent);\n }\n\n /**\n * Register multiple custom icons at once\n */\n registerIcons(icons: Record<string, string>): void {\n Object.entries(icons).forEach(([name, svg]) => {\n this.registerIcon(name, svg);\n });\n }\n\n /**\n * Resolve an icon from the sprite\n * Returns the sprite URL if the sprite is loaded\n */\n private resolveSpriteIcon(name: string): ResolvedIcon | null {\n if (!this.spriteLoader.isSpriteLoaded()) {\n return null;\n }\n\n const spriteUrl = this.spriteLoader.getIconUrl(name);\n if (!spriteUrl) {\n return null;\n }\n\n return {\n source: 'sprite',\n content: '', // Not used for sprite icons\n spriteUrl: spriteUrl\n };\n }\n\n /**\n * Resolve an icon using sprite, registered libraries, and custom icons\n *\n * Resolution order:\n * 1. Sprite icons (Material, MDI, custom TrueNAS icons)\n * 2. Registered libraries (with prefix, e.g., \"lucide:home\")\n * 3. Custom registered icons\n *\n * Format: \"library:icon-name\" or just \"icon-name\"\n *\n * @example\n * ```typescript\n * // Sprite icons (automatic from sprite.svg)\n * registry.resolveIcon('folder') // Material Design icon\n * registry.resolveIcon('mdi-server') // MDI icon\n * registry.resolveIcon('tn-dataset') // Custom TrueNAS icon\n *\n * // Library icons\n * registry.resolveIcon('lucide:home')\n * registry.resolveIcon('heroicons:user-circle')\n *\n * // Custom registered icons\n * registry.resolveIcon('my-logo')\n * ```\n */\n resolveIcon(name: string, options?: unknown): ResolvedIcon | null {\n // 1. Try sprite first (if loaded)\n const spriteIcon = this.resolveSpriteIcon(name);\n if (spriteIcon) {\n return spriteIcon;\n }\n\n // 2. Handle library prefix (e.g., \"lucide:home\")\n if (name.includes(':')) {\n const [libraryName, iconName] = name.split(':', 2);\n return this.resolveLibraryIcon(libraryName, iconName, options);\n }\n\n // 3. Handle custom prefix (e.g., \"custom:icon\")\n if (name.startsWith('custom:')) {\n const iconName = name.replace('custom:', '');\n return this.resolveCustomIcon(iconName);\n }\n\n // 4. Handle direct custom icon name\n return this.resolveCustomIcon(name);\n }\n\n /**\n * Check if a library is registered\n */\n hasLibrary(libraryName: string): boolean {\n return this.libraries.has(libraryName);\n }\n\n /**\n * Check if a custom icon is registered\n */\n hasIcon(iconName: string): boolean {\n return this.customIcons.has(iconName);\n }\n\n /**\n * Get list of registered libraries\n */\n getRegisteredLibraries(): string[] {\n return Array.from(this.libraries.keys());\n }\n\n /**\n * Get list of registered custom icons\n */\n getRegisteredIcons(): string[] {\n return Array.from(this.customIcons.keys());\n }\n\n /**\n * Remove a library\n */\n unregisterLibrary(libraryName: string): void {\n this.libraries.delete(libraryName);\n }\n\n /**\n * Remove a custom icon\n */\n unregisterIcon(iconName: string): void {\n this.customIcons.delete(iconName);\n }\n\n /**\n * Clear all registered libraries and icons\n */\n clear(): void {\n this.libraries.clear();\n this.customIcons.clear();\n }\n\n /**\n * Get the sprite loader service\n * Useful for checking sprite status or manually resolving sprite icons\n */\n getSpriteLoader(): TnSpriteLoaderService {\n return this.spriteLoader;\n }\n\n private resolveLibraryIcon(libraryName: string, iconName: string, options?: unknown): ResolvedIcon | null {\n const library = this.libraries.get(libraryName);\n if (!library) {\n console.warn(`Icon library '${libraryName}' is not registered`);\n return null;\n }\n\n try {\n const mergedOptions = {\n ...(library.defaultOptions && typeof library.defaultOptions === 'object' ? library.defaultOptions : {}),\n ...(options && typeof options === 'object' ? options : {})\n };\n const result = library.resolver(iconName, mergedOptions);\n\n if (!result) {\n return null;\n }\n\n // Handle different types of results\n if (typeof result === 'string') {\n // Assume it's SVG content\n return {\n source: 'svg',\n content: this.sanitizer.bypassSecurityTrustHtml(result)\n };\n } else if (result instanceof HTMLElement) {\n // Convert HTMLElement to string\n return {\n source: 'svg',\n content: this.sanitizer.bypassSecurityTrustHtml(result.outerHTML)\n };\n }\n\n return null;\n } catch (error) {\n console.warn(`Failed to resolve icon '${libraryName}:${iconName}':`, error);\n return null;\n }\n }\n\n private resolveCustomIcon(iconName: string): ResolvedIcon | null {\n const svgContent = this.customIcons.get(iconName);\n if (!svgContent) {\n return null;\n }\n\n return {\n source: 'svg',\n content: this.sanitizer.bypassSecurityTrustHtml(svgContent)\n };\n }\n}","import { CommonModule } from '@angular/common';\nimport type { ElementRef, AfterViewInit} from '@angular/core';\nimport { ChangeDetectorRef} from '@angular/core';\nimport { Component, input, computed, effect, ChangeDetectionStrategy, ViewEncapsulation, inject, viewChild } from '@angular/core';\nimport { DomSanitizer, type SafeHtml } from '@angular/platform-browser';\nimport { TnIconRegistryService } from './icon-registry.service';\n\nexport type IconSize = 'xs' | 'sm' | 'md' | 'lg' | 'xl';\nexport type IconSource = 'svg' | 'css' | 'unicode' | 'text' | 'sprite';\nexport type IconLibraryType = 'material' | 'mdi' | 'custom' | 'lucide';\n\nexport interface IconResult {\n source: IconSource;\n content: string | SafeHtml;\n spriteUrl?: string; // For sprite-based icons\n}\n\n@Component({\n selector: 'tn-icon',\n standalone: true,\n imports: [CommonModule],\n templateUrl: './icon.component.html',\n styleUrl: './icon.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None\n})\nexport class TnIconComponent implements AfterViewInit {\n name = input<string>('');\n size = input<IconSize>('md');\n color = input<string | undefined>(undefined);\n tooltip = input<string | undefined>(undefined);\n ariaLabel = input<string | undefined>(undefined);\n library = input<IconLibraryType | undefined>(undefined);\n\n svgContainer = viewChild<ElementRef<HTMLDivElement>>('svgContainer');\n\n iconResult: IconResult = { source: 'text', content: '?' };\n\n private iconRegistry = inject(TnIconRegistryService);\n private cdr = inject(ChangeDetectorRef);\n private sanitizer = inject(DomSanitizer);\n\n constructor() {\n // Use effect to watch for changes in name or library\n effect(() => {\n // Track signals to re-run effect when they change\n this.name();\n this.library();\n\n // Trigger icon resolution when name or library changes\n this.resolveIcon()\n .then(() => {\n this.cdr.markForCheck();\n setTimeout(() => this.updateSvgContent(), 0);\n })\n .catch((error) => {\n console.error('[TnIcon] Resolution failed (onChange)', error);\n this.iconResult = { source: 'text', content: '!' };\n this.cdr.markForCheck();\n });\n });\n }\n\n ngAfterViewInit(): void {\n this.updateSvgContent();\n }\n\n effectiveAriaLabel = computed(() => {\n return this.ariaLabel() || this.name() || 'Icon';\n });\n\n sanitizedContent = computed(() => {\n const content = this.iconResult.content;\n\n // Handle mock SafeHtml objects from Storybook\n if (content && typeof content === 'object' && (content as { changingThisBreaksApplicationSecurity?: string }).changingThisBreaksApplicationSecurity) {\n return (content as { changingThisBreaksApplicationSecurity: string }).changingThisBreaksApplicationSecurity;\n }\n\n return content;\n });\n\n private updateSvgContent(): void {\n const svgContainer = this.svgContainer();\n if (this.iconResult.source === 'svg' && svgContainer) {\n const content = this.sanitizedContent();\n if (typeof content === 'string') {\n // Bypass Angular's sanitization by setting innerHTML directly\n svgContainer.nativeElement.innerHTML = content;\n }\n }\n }\n\n private async resolveIcon(): Promise<void> {\n if (!this.name()) {\n this.iconResult = { source: 'text', content: '?' };\n return;\n }\n\n // Wait for sprite to load (if it's being loaded)\n try {\n await this.iconRegistry.getSpriteLoader().ensureSpriteLoaded();\n } catch (error) {\n // Sprite loading failed, continue with other resolution methods\n console.warn('[TnIcon] Sprite loading failed, falling back to other icon sources:', error);\n }\n\n // Construct the effective icon name based on library attribute\n let effectiveIconName = this.name();\n if (this.library() === 'mdi' && !this.name().startsWith('mdi-')) {\n effectiveIconName = `mdi-${this.name()}`;\n } else if (this.library() === 'material' && !this.name().startsWith('mat-')) {\n // Material icons get mat- prefix in sprite\n effectiveIconName = `mat-${this.name()}`;\n } else if (this.library() === 'lucide' && !this.name().includes(':')) {\n // Convert to registry format for Lucide icons\n effectiveIconName = `lucide:${this.name()}`;\n }\n\n // 1. Try icon registry (libraries and custom icons)\n const iconOptions = {\n size: this.size(),\n color: this.color()\n };\n let registryResult = this.iconRegistry.resolveIcon(effectiveIconName, iconOptions);\n\n // Fallback to global registry for Storybook/demos (when DI doesn't work)\n if (!registryResult && typeof window !== 'undefined' && (window as { __storybookIconRegistry?: TnIconRegistryService }).__storybookIconRegistry) {\n const globalRegistry = (window as unknown as { __storybookIconRegistry: TnIconRegistryService }).__storybookIconRegistry;\n if (globalRegistry) {\n registryResult = globalRegistry.resolveIcon(effectiveIconName, iconOptions);\n }\n }\n\n if (registryResult) {\n this.iconResult = registryResult;\n return;\n }\n\n // 2. Try built-in third-party patterns (deprecated - use registry instead)\n const thirdPartyResult = this.tryThirdPartyIcon(effectiveIconName);\n if (thirdPartyResult) {\n this.iconResult = thirdPartyResult;\n return;\n }\n\n // 3. Try CSS class (Font Awesome, Material Icons, etc.)\n const cssResult = this.tryCssIcon(effectiveIconName);\n if (cssResult) {\n this.iconResult = cssResult;\n return;\n }\n\n // 4. Try Unicode mapping\n const unicodeResult = this.tryUnicodeIcon(effectiveIconName);\n if (unicodeResult) {\n this.iconResult = unicodeResult;\n return;\n }\n\n // 5. Fallback to text abbreviation\n this.iconResult = {\n source: 'text',\n content: this.generateTextAbbreviation(effectiveIconName)\n };\n }\n\n private tryThirdPartyIcon(name: string): IconResult | null {\n // This method is deprecated in favor of the icon registry\n // Keeping for backward compatibility only\n \n // Legacy support for old custom: prefix before registry was available\n if (name.startsWith('custom:')) {\n console.warn('Using deprecated custom: prefix. Please use the icon registry instead.');\n const iconName = name.replace('custom:', '');\n const legacyIcons: Record<string, string> = {\n 'heart': `<svg viewBox=\"0 0 24 24\" fill=\"currentColor\">\n <path d=\"M12 21.35l-1.45-1.32C5.4 15.36 2 12.28 2 8.5 2 5.42 4.42 3 7.5 3c1.74 0 3.41.81 4.5 2.09C13.09 3.81 14.76 3 16.5 3 19.58 3 22 5.42 22 8.5c0 3.78-3.4 6.86-8.55 11.54L12 21.35z\"/>\n </svg>`,\n 'rocket': `<svg viewBox=\"0 0 24 24\" fill=\"currentColor\">\n <path d=\"M2.81 14.7l1.68-1.68L7.66 16.2 6.93 17.78 2.81 14.7zm16.55-11.45c-.78-.78-2.05-.78-2.83 0l-1.72 1.72c-.78.78-.78 2.05 0 2.83.78.78 2.05.78 2.83 0l1.72-1.72c.78-.78.78-2.05 0-2.83z\"/>\n </svg>`\n };\n \n if (legacyIcons[iconName]) {\n return {\n source: 'svg',\n content: this.sanitizer.bypassSecurityTrustHtml(legacyIcons[iconName])\n };\n }\n }\n\n return null;\n }\n\n private tryCssIcon(name: string): IconResult | null {\n // Font Awesome pattern\n if (name.startsWith('fa-') || name.startsWith('fas-') || name.startsWith('far-')) {\n return {\n source: 'css',\n content: name.startsWith('fa-') ? name : name.replace('-', ' fa-')\n };\n }\n\n // Material Icons pattern\n if (name.startsWith('mat-') || name.includes('material')) {\n const materialName = name.replace('mat-', '').replace('material-', '');\n return {\n source: 'css',\n content: `material-icons material-icons-${materialName}`\n };\n }\n\n // Check if class exists in document\n if (this.cssClassExists(name)) {\n return {\n source: 'css',\n content: name\n };\n }\n\n return null;\n }\n\n private tryUnicodeIcon(name: string): IconResult | null {\n const unicodeMap: Record<string, string> = {\n 'home': '⌂',\n 'star': '★',\n 'check': '✓',\n 'close': '✕',\n 'warning': '⚠',\n 'info': 'ⓘ',\n 'arrow-left': '←',\n 'arrow-right': '→',\n 'arrow-up': '↑',\n 'arrow-down': '↓',\n 'menu': '☰',\n 'settings': '⚙',\n 'user': '👤',\n 'search': '🔍',\n 'heart': '♥',\n 'plus': '+',\n 'minus': '−',\n };\n\n const unicode = unicodeMap[name.toLowerCase()];\n return unicode ? { source: 'unicode', content: unicode } : null;\n }\n\n private generateTextAbbreviation(name: string): string {\n if (!name) {return '?';}\n \n // Handle hyphenated names (e.g., 'arrow-left' -> 'AL')\n if (name.includes('-')) {\n const parts = name.split('-');\n return parts\n .map(part => part.charAt(0).toUpperCase())\n .slice(0, 2)\n .join('');\n }\n\n // Default to first 2 characters\n return name.substring(0, 2).toUpperCase();\n }\n\n private cssClassExists(_className: string): boolean {\n if (typeof document === 'undefined') {return false;}\n \n // For now, only return true for known CSS icon patterns\n // In real implementation, consumers would override this method\n return false; // Disable generic CSS class checking for now\n }\n}","<div\n class=\"tn-icon\"\n role=\"img\"\n [ngClass]=\"'tn-icon--' + size()\"\n [style.color]=\"color()\"\n [attr.aria-label]=\"effectiveAriaLabel()\"\n [attr.title]=\"tooltip()\">\n \n\n @switch (iconResult.source) {\n <!-- Sprite icons (from generated sprite.svg) -->\n @case ('sprite') {\n <svg\n class=\"tn-icon__sprite\"\n aria-hidden=\"true\">\n <use [attr.href]=\"iconResult.spriteUrl\" />\n </svg>\n }\n\n <!-- SVG content (from third-party libraries or assets) -->\n @case ('svg') {\n <div\n #svgContainer\n class=\"tn-icon__svg\">\n </div>\n }\n\n <!-- CSS class icons (Font Awesome, Material Icons, etc.) -->\n @case ('css') {\n <i\n aria-hidden=\"true\"\n [class]=\"'tn-icon__css ' + iconResult.content\">\n </i>\n }\n\n <!-- Unicode characters -->\n @case ('unicode') {\n <span\n class=\"tn-icon__unicode\"\n aria-hidden=\"true\">{{ iconResult.content }}</span>\n }\n\n <!-- Text abbreviation fallback -->\n @default {\n <span\n class=\"tn-icon__text\"\n aria-hidden=\"true\">{{ iconResult.content }}</span>\n }\n }\n</div>","import { CommonModule } from '@angular/common';\nimport { Component, input, inject, computed } from '@angular/core';\nimport {\n mdiInformation,\n mdiAlert,\n mdiAlertCircle,\n mdiCheckCircle,\n} from '@mdi/js';\nimport { TnIconRegistryService } from '../icon/icon-registry.service';\nimport { TnIconComponent } from '../icon/icon.component';\n\nexport type TnBannerType = 'info' | 'warning' | 'error' | 'success';\n\nconst ICON_MAP = {\n 'info': 'information',\n 'warning': 'alert',\n 'error': 'alert-circle',\n 'success': 'check-circle',\n} as const;\n\n@Component({\n selector: 'tn-banner',\n standalone: true,\n imports: [CommonModule, TnIconComponent],\n templateUrl: './banner.component.html',\n styleUrls: ['./banner.component.scss'],\n})\nexport class TnBannerComponent {\n private iconRegistry = inject(TnIconRegistryService);\n\n // Signal-based inputs (modern Angular 19+)\n heading = input.required<string>();\n message = input<string | undefined>(undefined);\n type = input<TnBannerType>('info');\n\n constructor() {\n this.registerMdiIcons();\n }\n\n /**\n * Register all MDI icons used by the banner component\n * Makes component self-contained with zero external configuration\n */\n private registerMdiIcons(): void {\n const mdiIcons: Record<string, string> = {\n 'information': mdiInformation,\n 'alert': mdiAlert,\n 'alert-circle': mdiAlertCircle,\n 'check-circle': mdiCheckCircle,\n };\n\n this.iconRegistry.registerLibrary({\n name: 'mdi',\n resolver: (iconName: string) => {\n const pathData = mdiIcons[iconName];\n if (!pathData) {\n return null;\n }\n return `<svg viewBox=\"0 0 24 24\"><path fill=\"currentColor\" d=\"${pathData}\"/></svg>`;\n }\n });\n }\n\n /**\n * Get the appropriate icon name based on banner type\n */\n iconName = computed(() => {\n return ICON_MAP[this.type()];\n });\n\n /**\n * Get ARIA role based on banner type\n * Error/warning use 'alert' for immediate attention\n * Info/success use 'status' for polite announcements\n */\n ariaRole = computed(() => {\n return this.type() === 'error' || this.type() === 'warning'\n ? 'alert'\n : 'status';\n });\n\n /**\n * Generate CSS classes using BEM methodology\n */\n classes = computed(() => {\n return [\n 'tn-banner',\n `tn-banner--${this.type()}`,\n ];\n });\n}\n","<div\n aria-live=\"polite\"\n [ngClass]=\"classes()\"\n [attr.role]=\"ariaRole()\"\n>\n <div class=\"tn-banner__icon\">\n <tn-icon\n library=\"mdi\"\n size=\"md\"\n aria-hidden=\"true\"\n [name]=\"iconName()\"\n />\n </div>\n\n <div class=\"tn-banner__content\">\n <div class=\"tn-banner__heading\">\n {{ heading() }}\n </div>\n\n @if (message()) {\n <div class=\"tn-banner__message\">\n {{ message() }}\n </div>\n }\n </div>\n</div>\n","import type { BaseHarnessFilters } from '@angular/cdk/testing';\nimport { ComponentHarness, HarnessPredicate } from '@angular/cdk/testing';\n\n/**\n * Harness for interacting with tn-banner in tests.\n * Provides simple text-based querying for existence checks.\n *\n * @example\n * ```typescript\n * // Check for existence\n * const banner = await loader.getHarness(TnBannerHarness);\n *\n * // Find banner containing specific text\n * const errorBanner = await loader.getHarness(\n * TnBannerHarness.with({ textContains: 'network error' })\n * );\n *\n * // Check if banner exists with text\n * const hasBanner = await loader.hasHarness(\n * TnBannerHarness.with({ textContains: /success/i })\n * );\n * ```\n */\nexport class TnBannerHarness extends ComponentHarness {\n /**\n * The selector for the host element of an `TnBannerComponent` instance.\n */\n static hostSelector = 'tn-banner';\n\n /**\n * Gets a `HarnessPredicate` that can be used to search for a banner\n * with specific text content.\n *\n * @param options Options for filtering which banner instances are considered a match.\n * @returns A `HarnessPredicate` configured with the given options.\n *\n * @example\n * ```typescript\n * // Find banner containing specific text\n * const banner = await loader.getHarness(\n * TnBannerHarness.with({ textContains: 'error occurred' })\n * );\n *\n * // Find banner with regex pattern\n * const banner = await loader.getHarness(\n * TnBannerHarness.with({ textContains: /Error:/ })\n * );\n * ```\n */\n static with(options: BannerHarnessFilters = {}) {\n return new HarnessPredicate(TnBannerHarness, options)\n .addOption('textContains', options.textContains, (harness, text) =>\n HarnessPredicate.stringMatches(harness.getText(), text)\n );\n }\n\n /**\n * Gets all text content from the banner (heading + message combined).\n *\n * @returns Promise resolving to the banner's text content, trimmed of whitespace.\n *\n * @example\n * ```typescript\n * const banner = await loader.getHarness(TnBannerHarness);\n * const text = await banner.getText();\n * expect(text).toContain('Success');\n * ```\n */\n async getText(): Promise<string> {\n const host = await this.host();\n return (await host.text()).trim();\n }\n}\n\n/**\n * A set of criteria that can be used to filter a list of `TnBannerHarness` instances.\n */\nexport interface BannerHarnessFilters extends BaseHarnessFilters {\n /** Filters by text content within banner. Supports string or regex matching. */\n textContains?: string | RegExp;\n}\n","import { CommonModule } from '@angular/common';\nimport { Component, input, output, computed } from '@angular/core';\n\n@Component({\n selector: 'tn-button',\n standalone: true,\n imports: [CommonModule],\n templateUrl: './button.component.html',\n styleUrls: ['./button.component.scss'],\n})\nexport class TnButtonComponent {\n size = 'large';\n\n primary = input<boolean>(false);\n color = input<'primary' | 'secondary' | 'warn' | 'default'>('default');\n variant = input<'filled' | 'outline'>('filled');\n backgroundColor = input<string | undefined>(undefined);\n label = input<string>('Button');\n disabled = input<boolean>(false);\n\n onClick = output<MouseEvent>();\n\n classes = computed(() => {\n // Support both primary boolean and color string approaches\n const isPrimary = this.primary() || this.color() === 'primary';\n const isWarn = this.color() === 'warn';\n\n let mode = '';\n if (this.variant() === 'outline') {\n if (isPrimary) {\n mode = 'button-outline-primary';\n } else if (isWarn) {\n mode = 'button-outline-warn';\n } else {\n mode = 'button-outline-default';\n }\n } else {\n if (isPrimary) {\n mode = 'button-primary';\n } else if (isWarn) {\n mode = 'button-warn';\n } else {\n mode = 'button-default';\n }\n }\n\n return ['storybook-button', `storybook-button--${this.size}`, mode];\n });\n}\n","<button\n type=\"button\"\n [ngClass]=\"classes()\"\n [ngStyle]=\"{ 'background-color': backgroundColor() }\"\n [disabled]=\"disabled()\"\n (click)=\"onClick.emit($event)\"\n>\n {{ label() }}\n</button>\n\n","import { CommonModule } from '@angular/common';\nimport { Component, input, output, computed } from '@angular/core';\nimport type { IconSize, IconLibraryType } from '../icon/icon.component';\nimport { TnIconComponent } from '../icon/icon.component';\n\n@Component({\n selector: 'tn-icon-button',\n standalone: true,\n imports: [CommonModule, TnIconComponent],\n templateUrl: './icon-button.component.html',\n styleUrls: ['./icon-button.component.scss'],\n})\nexport class TnIconButtonComponent {\n // Button-related inputs\n disabled = input<boolean>(false);\n ariaLabel = input<string | undefined>(undefined);\n\n // Icon-related inputs\n name = input<string>('');\n size = input<IconSize>('md');\n color = input<string | undefined>(undefined);\n tooltip = input<string | undefined>(undefined);\n library = input<IconLibraryType | undefined>(undefined);\n\n onClick = output<MouseEvent>();\n\n classes = computed(() => {\n return ['tn-icon-button'];\n });\n\n effectiveAriaLabel = computed(() => {\n return this.ariaLabel() || this.name() || 'Icon button';\n });\n}\n","<button\n type=\"button\"\n [ngClass]=\"classes()\"\n [disabled]=\"disabled()\"\n [attr.aria-label]=\"effectiveAriaLabel()\"\n [attr.title]=\"tooltip()\"\n (click)=\"onClick.emit($event)\"\n>\n <tn-icon\n [name]=\"name()\"\n [size]=\"size()\"\n [color]=\"color()\"\n [library]=\"library()\"\n [ariaLabel]=\"effectiveAriaLabel()\" />\n</button>\n","export enum InputType {\n Email = 'email',\n Password = 'password',\n PlainText = 'text',\n}\n","import { FocusMonitor, A11yModule } from '@angular/cdk/a11y';\nimport type { ElementRef, AfterViewInit} from '@angular/core';\nimport { Component, viewChild, inject, input, computed, signal, forwardRef } from '@angular/core';\nimport type { ControlValueAccessor} from '@angular/forms';\nimport { FormsModule, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { InputType } from '../enums/input-type.enum';\n\n@Component({\n selector: 'tn-input',\n standalone: true,\n imports: [FormsModule, A11yModule],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => TnInputComponent),\n multi: true\n }\n ],\n templateUrl: './input.component.html',\n styleUrl: './input.component.scss',\n})\nexport class TnInputComponent implements AfterViewInit, ControlValueAccessor {\n inputEl = viewChild.required<ElementRef<HTMLInputElement | HTMLTextAreaElement>>('inputEl');\n\n inputType = input<InputType>(InputType.PlainText);\n placeholder = input<string>('Enter your name');\n testId = input<string | undefined>(undefined);\n disabled = input<boolean>(false);\n multiline = input<boolean>(false);\n rows = input<number>(3);\n\n id = 'tn-input';\n value = '';\n\n // CVA disabled state management\n private formDisabled = signal<boolean>(false);\n isDisabled = computed(() => this.disabled() || this.formDisabled());\n\n private onChange = (_value: string) => {};\n private onTouched = () => {};\n private focusMonitor = inject(FocusMonitor);\n\n ngAfterViewInit() {\n this.focusMonitor.monitor(this.inputEl());\n }\n\n // ControlValueAccessor implementation\n writeValue(value: string): void {\n this.value = value || '';\n }\n\n registerOnChange(fn: (value: string) => void): void {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n\n setDisabledState(isDisabled: boolean): void {\n this.formDisabled.set(isDisabled);\n }\n\n // Component methods\n onValueChange(event: Event): void {\n const target = event.target as HTMLInputElement | HTMLTextAreaElement;\n this.value = target.value;\n this.onChange(this.value);\n }\n\n onBlur(): void {\n this.onTouched();\n }\n}\n","<div class=\"tn-input-container\">\n <!-- Regular input field -->\n @if (!multiline()) {\n <input\n #inputEl\n class=\"tn-input\"\n [id]=\"id\"\n [value]=\"value\"\n [type]=\"inputType()\"\n [attr.placeholder]=\"placeholder()\"\n [attr.data-testid]=\"testId()\"\n [disabled]=\"isDisabled()\"\n (input)=\"onValueChange($event)\"\n (blur)=\"onBlur()\"\n />\n }\n\n <!-- Textarea field -->\n @if (multiline()) {\n <textarea\n #inputEl\n class=\"tn-input tn-textarea\"\n [id]=\"id\"\n [value]=\"value\"\n [attr.placeholder]=\"placeholder()\"\n [attr.data-testid]=\"testId()\"\n [rows]=\"rows()\"\n [disabled]=\"isDisabled()\"\n (input)=\"onValueChange($event)\"\n (blur)=\"onBlur()\"\n ></textarea>\n }\n</div>\n","import { Directive } from '@angular/core';\n\n@Directive({\n selector: 'input[tnInput], textarea[tnInput], div[tnInput]',\n standalone: true,\n host: {\n 'class': 'tn-input-directive'\n }\n})\nexport class TnInputDirective {\n constructor() {}\n}","import { FocusMonitor, A11yModule } from '@angular/cdk/a11y';\nimport { CommonModule } from '@angular/common';\nimport type { ElementRef, AfterViewInit, OnDestroy} from '@angular/core';\nimport { Component, input, output, computed, viewChild, inject } from '@angular/core';\nimport { TnIconComponent } from '../icon/icon.component';\n\nexport type ChipColor = 'primary' | 'secondary' | 'accent';\n\n@Component({\n selector: 'tn-chip',\n standalone: true,\n imports: [CommonModule, A11yModule, TnIconComponent],\n templateUrl: './chip.component.html',\n styleUrls: ['./chip.component.scss'],\n})\nexport class TnChipComponent implements AfterViewInit, OnDestroy {\n chipEl = viewChild.required<ElementRef<HTMLElement>>('chipEl');\n\n label = input<string>('Chip');\n icon = input<string | undefined>(undefined);\n closable = input<boolean>(true);\n disabled = input<boolean>(false);\n color = input<ChipColor>('primary');\n testId = input<string | undefined>(undefined);\n\n onClose = output<void>();\n onClick = output<MouseEvent>();\n\n private focusMonitor = inject(FocusMonitor);\n\n ngAfterViewInit() {\n this.focusMonitor.monitor(this.chipEl());\n }\n\n ngOnDestroy() {\n this.focusMonitor.stopMonitoring(this.chipEl());\n }\n\n classes = computed(() => {\n const classes = ['tn-chip', `tn-chip--${this.color()}`];\n\n if (this.disabled()) {\n classes.push('tn-chip--disabled');\n }\n\n if (this.closable()) {\n classes.push('tn-chip--closable');\n }\n\n return classes;\n });\n\n handleClick(event: MouseEvent): void {\n if (this.disabled()) {\n return;\n }\n this.onClick.emit(event);\n }\n\n handleClose(event: MouseEvent): void {\n event.stopPropagation();\n if (this.disabled()) {\n return;\n }\n this.onClose.emit();\n }\n\n handleKeyDown(event: KeyboardEvent): void {\n if (this.disabled()) {\n return;\n }\n\n if (event.key === 'Enter' || event.key === ' ') {\n event.preventDefault();\n this.onClick.emit(event as unknown as MouseEvent);\n }\n\n if (this.closable() && (event.key === 'Delete' || event.key === 'Backspace')) {\n event.preventDefault();\n this.onClose.emit();\n }\n }\n}","<div\n #chipEl\n role=\"button\"\n [ngClass]=\"classes()\"\n [attr.data-testid]=\"testId()\"\n [attr.aria-label]=\"label()\"\n [attr.aria-disabled]=\"disabled()\"\n [attr.tabindex]=\"disabled() ? -1 : 0\"\n (click)=\"handleClick($event)\"\n (keydown)=\"handleKeyDown($event)\"\n>\n @if (icon()) {\n <tn-icon class=\"tn-chip__icon\" size=\"sm\" [name]=\"icon()!\" />\n }\n <span class=\"tn-chip__label\">{{ label() }}</span>\n @if (closable()) {\n <button\n type=\"button\"\n class=\"tn-chip__close\"\n [attr.aria-label]=\"'Remove ' + label()\"\n [disabled]=\"disabled()\"\n (click)=\"handleClose($event)\"\n >\n <span class=\"tn-chip__close-icon\">×</span>\n </button>\n }\n</div>","import { Overlay, type OverlayRef, type ConnectedPosition } from '@angular/cdk/overlay';\nimport { TemplatePortal } from '@angular/cdk/portal';\nimport { ElementRef, ViewContainerRef, Directive, input, signal, inject } from '@angular/core';\nimport type { TnMenuComponent } from './menu.component';\n\n/**\n * Directive that attaches a menu to any element.\n * Usage: <button [tnMenuTriggerFor]=\"menu\">Open Menu</button>\n */\n@Directive({\n selector: '[tnMenuTriggerFor]',\n standalone: true,\n exportAs: 'tnMenuTrigger',\n host: {\n '(click)': 'onClick()'\n }\n})\nexport class TnMenuTriggerDirective {\n menu = input.required<TnMenuComponent>({ alias: 'tnMenuTriggerFor' });\n tnMenuPosition = input<'above' | 'below' | 'before' | 'after'>('below');\n\n private overlayRef?: OverlayRef;\n private isMenuOpen = signal<boolean>(false);\n\n private elementRef = inject(ElementRef);\n private overlay = inject(Overlay);\n private viewContainerRef = inject(ViewContainerRef);\n\n onClick(): void {\n if (this.isMenuOpen()) {\n this.closeMenu();\n } else {\n this.openMenu();\n }\n }\n\n openMenu(): void {\n const menuComponent = this.menu();\n if (!menuComponent || this.isMenuOpen()) {\n return;\n }\n\n // Get menu template\n const menuTemplate = menuComponent.getMenuTemplate();\n if (!menuTemplate) {\n return;\n }\n\n // Create overlay\n const positionStrategy = this.overlay.position()\n .flexibleConnectedTo(this.elementRef)\n .withPositions(this.getPositions());\n\n this.overlayRef = this.overlay.create({\n positionStrategy,\n scrollStrategy: this.overlay.scrollStrategies.reposition(),\n hasBackdrop: true,\n backdropClass: 'cdk-overlay-transparent-backdrop',\n width: 'auto',\n height: 'auto',\n minWidth: '160px',\n maxWidth: '300px'\n });\n\n // Create portal and attach\n const portal = new TemplatePortal(menuTemplate, this.viewContainerRef);\n this.overlayRef.attach(portal);\n\n this.isMenuOpen.set(true);\n\n // Handle backdrop click\n this.overlayRef.backdropClick().subscribe(() => {\n this.closeMenu();\n });\n\n // Notify menu component\n menuComponent.onMenuOpen();\n }\n\n closeMenu(): void {\n if (this.overlayRef) {\n this.overlayRef.dispose();\n this.overlayRef = undefined;\n this.isMenuOpen.set(false);\n this.menu().onMenuClose();\n }\n }\n\n private getPositions(): ConnectedPosition[] {\n switch (this.tnMenuPosition()) {\n case 'above':\n return [\n { originX: 'start', originY: 'top', overlayX: 'start', overlayY: 'bottom' }\n ];\n case 'below':\n return [\n { originX: 'start', originY: 'bottom', overlayX: 'start', overlayY: 'top' }\n ];\n case 'before':\n return [\n { originX: 'start', originY: 'top', overlayX: 'end', overlayY: 'top' }\n ];\n case 'after':\n return [\n { originX: 'end', originY: 'top', overlayX: 'start', overlayY: 'top' }\n ];\n default:\n return [\n { originX: 'start', originY: 'bottom', overlayX: 'start', overlayY: 'top' }\n ];\n }\n }\n}\n","import { CdkMenu, CdkMenuItem, CdkMenuTrigger } from '@angular/cdk/menu';\nimport { Overlay, type OverlayRef } from '@angular/cdk/overlay';\nimport { TemplatePortal } from '@angular/cdk/portal';\nimport { CommonModule } from '@angular/common';\nimport type { TemplateRef} from '@angular/core';\nimport { Component, input, output, viewChild, computed, inject, ViewContainerRef } from '@angular/core';\nimport { TnIconComponent } from '../icon/icon.component';\n\nexport interface TnMenuItem {\n id: string;\n label: string;\n icon?: string;\n iconLibrary?: 'material' | 'mdi' | 'custom' | 'lucide';\n disabled?: boolean;\n separator?: boolean;\n action?: () => void;\n children?: TnMenuItem[];\n shortcut?: string;\n}\n\n@Component({\n selector: 'tn-menu',\n standalone: true,\n imports: [CommonModule, CdkMenu, CdkMenuItem, CdkMenuTrigger, TnIconComponent],\n templateUrl: './menu.component.html',\n styleUrls: ['./menu.component.scss'],\n})\nexport class TnMenuComponent {\n items = input<TnMenuItem[]>([]);\n contextMenu = input<boolean>(false); // Enable context menu mode (right-click)\n\n menuItemClick = output<TnMenuItem>();\n menuOpen = output<void>();\n menuClose = output<void>();\n\n menuTemplate = viewChild.required<TemplateRef<unknown>>('menuTemplate');\n contextMenuTemplate = viewChild.required<TemplateRef<unknown>>('contextMenuTemplate');\n\n private contextOverlayRef?: OverlayRef;\n\n private overlay = inject(Overlay);\n private viewContainerRef = inject(ViewContainerRef);\n\n onMenuItemClick(item: TnMenuItem): void {\n if (!item.disabled && (!item.children || item.children.length === 0)) {\n this.menuItemClick.emit(item);\n if (item.action) {\n item.action();\n }\n // Close context menu if it's open\n if (this.contextOverlayRef) {\n this.closeContextMenu();\n }\n }\n }\n\n hasChildren = computed(() => (item: TnMenuItem): boolean => {\n return !!(item.children && item.children.length > 0);\n });\n\n onMenuOpen(): void {\n this.menuOpen.emit();\n }\n\n onMenuClose(): void {\n this.menuClose.emit();\n }\n\n /**\n * Get the menu template for use by the trigger directive\n */\n getMenuTemplate(): TemplateRef<unknown> | null {\n if (this.contextMenu()) {\n return this.contextMenuTemplate() || null;\n }\n return this.menuTemplate() || null;\n }\n\n openContextMenuAt(x: number, y: number): void {\n const contextMenuTemplate = this.contextMenuTemplate();\n if (this.contextMenu() && contextMenuTemplate) {\n // Close any existing context menu\n this.closeContextMenu();\n\n // Create overlay at cursor position\n const positionStrategy = this.overlay.position()\n .flexibleConnectedTo({ x, y })\n .withPositions([\n { originX: 'start', originY: 'top', overlayX: 'start', overlayY: 'top' },\n { originX: 'start', originY: 'bottom', overlayX: 'start', overlayY: 'bottom' },\n { originX: 'end', originY: 'top', overlayX: 'end', overlayY: 'top' },\n { originX: 'end', originY: 'bottom', overlayX: 'end', overlayY: 'bottom' }\n ]);\n\n this.contextOverlayRef = this.overlay.create({\n positionStrategy,\n scrollStrategy: this.overlay.scrollStrategies.close(),\n hasBackdrop: true,\n backdropClass: 'cdk-overlay-transparent-backdrop'\n });\n\n // Create portal and attach to overlay\n const portal = new TemplatePortal(contextMenuTemplate, this.viewContainerRef);\n this.contextOverlayRef.attach(portal);\n\n // Handle backdrop click to close menu\n this.contextOverlayRef.backdropClick().subscribe(() => {\n this.closeContextMenu();\n });\n\n this.onMenuOpen();\n }\n }\n\n private closeContextMenu(): void {\n if (this.contextOverlayRef) {\n this.contextOverlayRef.dispose();\n this.contextOverlayRef = undefined;\n this.onMenuClose();\n }\n }\n\n onContextMenu(event: MouseEvent): void {\n if (this.contextMenu()) {\n event.preventDefault();\n event.stopPropagation();\n\n // Open at cursor position\n this.openContextMenuAt(event.clientX, event.clientY);\n }\n }\n\n trackByItemId(index: number, item: TnMenuItem): string {\n return item.id;\n }\n}","<!-- Context menu content slot -->\n@if (contextMenu()) {\n <div class=\"tn-menu-context-content\" (contextmenu)=\"onContextMenu($event)\">\n <ng-content />\n </div>\n}\n\n <!-- Context menu template for overlay -->\n <ng-template #contextMenuTemplate>\n <div class=\"tn-menu\" cdkMenu>\n @for (item of items(); track trackByItemId($index, item)) {\n @if (item.separator) {\n <div\n class=\"tn-menu-separator\"\n role=\"separator\"\n ></div>\n } @else {\n @if (!item.children || item.children.length === 0) {\n <button\n cdkMenuItem\n class=\"tn-menu-item\"\n type=\"button\"\n [disabled]=\"item.disabled\"\n [class.disabled]=\"item.disabled\"\n (click)=\"onMenuItemClick(item)\"\n >\n @if (item.icon) {\n <tn-icon size=\"sm\" class=\"tn-menu-item-icon\" [name]=\"item.icon\" [library]=\"item.iconLibrary\" />\n }\n <span class=\"tn-menu-item-label\">{{ item.label }}</span>\n @if (item.shortcut) {\n <span class=\"tn-menu-item-shortcut\">{{ item.shortcut }}</span>\n }\n </button>\n } @else {\n <button\n cdkMenuItem\n class=\"tn-menu-item tn-menu-item--nested\"\n type=\"button\"\n [cdkMenuTriggerFor]=\"nestedMenu\"\n [disabled]=\"item.disabled\"\n [class.disabled]=\"item.disabled\"\n >\n @if (item.icon) {\n <tn-icon size=\"sm\" class=\"tn-menu-item-icon\" [name]=\"item.icon\" [library]=\"item.iconLibrary\" />\n }\n <span class=\"tn-menu-item-label\">{{ item.label }}</span>\n @if (item.shortcut) {\n <span class=\"tn-menu-item-shortcut\">{{ item.shortcut }}</span>\n }\n <span class=\"tn-menu-item-arrow\">▶</span>\n </button>\n\n <ng-template #nestedMenu>\n <div class=\"tn-menu tn-menu--nested\" cdkMenu>\n @for (nestedItem of item.children; track trackByItemId($index, nestedItem)) {\n @if (nestedItem.separator) {\n <div\n class=\"tn-menu-separator\"\n role=\"separator\"\n ></div>\n } @else {\n @if (!nestedItem.children || nestedItem.children.length === 0) {\n <button\n cdkMenuItem\n class=\"tn-menu-item\"\n type=\"button\"\n [disabled]=\"nestedItem.disabled\"\n [class.disabled]=\"nestedItem.disabled\"\n (click)=\"onMenuItemClick(nestedItem)\"\n >\n @if (nestedItem.icon) {\n <tn-icon size=\"sm\" class=\"tn-menu-item-icon\" [name]=\"nestedItem.icon\" [library]=\"nestedItem.iconLibrary\" />\n }\n <span class=\"tn-menu-item-label\">{{ nestedItem.label }}</span>\n @if (nestedItem.shortcut) {\n <span class=\"tn-menu-item-shortcut\">{{ nestedItem.shortcut }}</span>\n }\n </button>\n } @else {\n <button\n cdkMenuItem\n class=\"tn-menu-item tn-menu-item--nested\"\n type=\"button\"\n [cdkMenuTriggerFor]=\"deepNestedMenu\"\n [disabled]=\"nestedItem.disabled\"\n [class.disabled]=\"nestedItem.disabled\"\n >\n @if (nestedItem.icon) {\n <tn-icon size=\"sm\" class=\"tn-menu-item-icon\" [name]=\"nestedItem.icon\" [library]=\"nestedItem.iconLibrary\" />\n }\n <span class=\"tn-menu-item-label\">{{ nestedItem.label }}</span>\n @if (nestedItem.shortcut) {\n <span class=\"tn-menu-item-shortcut\">{{ nestedItem.shortcut }}</span>\n }\n <span class=\"tn-menu-item-arrow\">▶</span>\n </button>\n\n <ng-template #deepNestedMenu>\n <div class=\"tn-menu tn-menu--nested\" cdkMenu>\n @for (deepNestedItem of nestedItem.children; track trackByItemId($index, deepNestedItem)) {\n @if (deepNestedItem.separator) {\n <div\n class=\"tn-menu-separator\"\n role=\"separator\"\n ></div>\n } @else {\n <button\n cdkMenuItem\n class=\"tn-menu-item\"\n type=\"button\"\n [disabled]=\"deepNestedItem.disabled\"\n [class.disabled]=\"deepNestedItem.disabled\"\n (click)=\"onMenuItemClick(deepNestedItem)\"\n >\n @if (deepNestedItem.icon) {\n <tn-icon size=\"sm\" class=\"tn-menu-item-icon\" [name]=\"deepNestedItem.icon\" [library]=\"deepNestedItem.iconLibrary\" />\n }\n <span class=\"tn-menu-item-label\">{{ deepNestedItem.label }}</span>\n @if (deepNestedItem.shortcut) {\n <span class=\"tn-menu-item-shortcut\">{{ deepNestedItem.shortcut }}</span>\n }\n </button>\n }\n }\n </div>\n </ng-template>\n }\n }\n }\n </div>\n </ng-template>\n }\n }\n }\n </div>\n </ng-template>\n\n <!-- Regular menu template -->\n <ng-template #menuTemplate>\n <div class=\"tn-menu\" cdkMenu>\n @for (item of items(); track trackByItemId($index, item)) {\n @if (item.separator) {\n <div\n class=\"tn-menu-separator\"\n role=\"separator\"\n ></div>\n } @else {\n @if (!item.children || item.children.length === 0) {\n <button\n cdkMenuItem\n class=\"tn-menu-item\"\n type=\"button\"\n [disabled]=\"item.disabled\"\n [class.disabled]=\"item.disabled\"\n (click)=\"onMenuItemClick(item)\"\n >\n @if (item.icon) {\n <tn-icon size=\"sm\" class=\"tn-menu-item-icon\" [name]=\"item.icon\" [library]=\"item.iconLibrary\" />\n }\n <span class=\"tn-menu-item-label\">{{ item.label }}</span>\n @if (item.shortcut) {\n <span class=\"tn-menu-item-shortcut\">{{ item.shortcut }}</span>\n }\n </button>\n } @else {\n <button\n cdkMenuItem\n class=\"tn-menu-item tn-menu-item--nested\"\n type=\"button\"\n [cdkMenuTriggerFor]=\"nestedMenu\"\n [disabled]=\"item.disabled\"\n [class.disabled]=\"item.disabled\"\n >\n @if (item.icon) {\n <tn-icon size=\"sm\" class=\"tn-menu-item-icon\" [name]=\"item.icon\" [library]=\"item.iconLibrary\" />\n }\n <span class=\"tn-menu-item-label\">{{ item.label }}</span>\n @if (item.shortcut) {\n <span class=\"tn-menu-item-shortcut\">{{ item.shortcut }}</span>\n }\n <span class=\"tn-menu-item-arrow\">▶</span>\n </button>\n\n <ng-template #nestedMenu>\n <div class=\"tn-menu tn-menu--nested\" cdkMenu>\n @for (nestedItem of item.children; track trackByItemId($index, nestedItem)) {\n @if (nestedItem.separator) {\n <div\n class=\"tn-menu-separator\"\n role=\"separator\"\n ></div>\n } @else {\n @if (!nestedItem.children || nestedItem.children.length === 0) {\n <button\n cdkMenuItem\n class=\"tn-menu-item\"\n type=\"button\"\n [disabled]=\"nestedItem.disabled\"\n [class.disabled]=\"nestedItem.disabled\"\n (click)=\"onMenuItemClick(nestedItem)\"\n >\n @if (nestedItem.icon) {\n <tn-icon size=\"sm\" class=\"tn-menu-item-icon\" [name]=\"nestedItem.icon\" [library]=\"nestedItem.iconLibrary\" />\n }\n <span class=\"tn-menu-item-label\">{{ nestedItem.label }}</span>\n @if (nestedItem.shortcut) {\n <span class=\"tn-menu-item-shortcut\">{{ nestedItem.shortcut }}</span>\n }\n </button>\n } @else {\n <button\n cdkMenuItem\n class=\"tn-menu-item tn-menu-item--nested\"\n type=\"button\"\n [cdkMenuTriggerFor]=\"deepNestedMenu\"\n [disabled]=\"nestedItem.disabled\"\n [class.disabled]=\"nestedItem.disabled\"\n >\n @if (nestedItem.icon) {\n <tn-icon size=\"sm\" class=\"tn-menu-item-icon\" [name]=\"nestedItem.icon\" [library]=\"nestedItem.iconLibrary\" />\n }\n <span class=\"tn-menu-item-label\">{{ nestedItem.label }}</span>\n @if (nestedItem.shortcut) {\n <span class=\"tn-menu-item-shortcut\">{{ nestedItem.shortcut }}</span>\n }\n <span class=\"tn-menu-item-arrow\">▶</span>\n </button>\n\n <ng-template #deepNestedMenu>\n <div class=\"tn-menu tn-menu--nested\" cdkMenu>\n @for (deepNestedItem of nestedItem.children; track trackByItemId($index, deepNestedItem)) {\n @if (deepNestedItem.separator) {\n <div\n class=\"tn-menu-separator\"\n role=\"separator\"\n ></div>\n } @else {\n <button\n cdkMenuItem\n class=\"tn-menu-item\"\n type=\"button\"\n [disabled]=\"deepNestedItem.disabled\"\n [class.disabled]=\"deepNestedItem.disabled\"\n (click)=\"onMenuItemClick(deepNestedItem)\"\n >\n @if (deepNestedItem.icon) {\n <tn-icon size=\"sm\" class=\"tn-menu-item-icon\" [name]=\"deepNestedItem.icon\" [library]=\"deepNestedItem.iconLibrary\" />\n }\n <span class=\"tn-menu-item-label\">{{ deepNestedItem.label }}</span>\n @if (deepNestedItem.shortcut) {\n <span class=\"tn-menu-item-shortcut\">{{ deepNestedItem.shortcut }}</span>\n }\n </button>\n }\n }\n </div>\n </ng-template>\n }\n }\n }\n </div>\n </ng-template>\n }\n }\n }\n </div>\n </ng-template>","import { FocusMonitor, A11yModule } from '@angular/cdk/a11y';\nimport { CommonModule } from '@angular/common';\nimport type { ElementRef, AfterViewInit, OnDestroy} from '@angular/core';\nimport { Component, viewChild, inject, input, output, computed, signal, forwardRef } from '@angular/core';\nimport type { ControlValueAccessor} from '@angular/forms';\nimport { FormsModule, NG_VALUE_ACCESSOR } from '@angular/forms';\n\nexport type SlideToggleColor = 'primary' | 'accent' | 'warn';\n\n@Component({\n selector: 'tn-slide-toggle',\n standalone: true,\n imports: [CommonModule, FormsModule, A11yModule],\n templateUrl: './slide-toggle.component.html',\n styleUrl: './slide-toggle.component.scss',\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => TnSlideToggleComponent),\n multi: true\n }\n ]\n})\nexport class TnSlideToggleComponent implements AfterViewInit, OnDestroy, ControlValueAccessor {\n toggleEl = viewChild.required<ElementRef<HTMLInputElement>>('toggleEl');\n\n labelPosition = input<'before' | 'after'>('after');\n label = input<string | undefined>(undefined);\n disabled = input<boolean>(false);\n required = input<boolean>(false);\n color = input<SlideToggleColor>('primary');\n testId = input<string | undefined>(undefined);\n ariaLabel = input<string | undefined>(undefined);\n ariaLabelledby = input<string | undefined>(undefined);\n checked = input<boolean>(false);\n\n change = output<boolean>();\n toggleChange = output<boolean>();\n\n id = `tn-slide-toggle-${Math.random().toString(36).substr(2, 9)}`;\n\n // Internal state for CVA\n private internalChecked = signal<boolean>(false);\n\n // CVA disabled state management\n private formDisabled = signal<boolean>(false);\n isDisabled = computed(() => this.disabled() || this.formDisabled());\n\n private focusMonitor = inject(FocusMonitor);\n private onChange = (_: boolean) => {};\n private onTouched = () => {};\n\n ngAfterViewInit() {\n const toggleEl = this.toggleEl();\n if (toggleEl) {\n this.focusMonitor.monitor(toggleEl)\n .subscribe(() => {\n // Focus monitoring for accessibility\n });\n }\n }\n\n ngOnDestroy() {\n const toggleEl = this.toggleEl();\n if (toggleEl) {\n this.focusMonitor.stopMonitoring(toggleEl);\n }\n }\n\n // Computed for effective checked state (input or CVA-controlled)\n effectiveChecked = computed(() => this.internalChecked() || this.checked());\n\n // ControlValueAccessor implementation\n writeValue(value: boolean): void {\n this.internalChecked.set(value !== null && value !== undefined ? value : false);\n }\n\n registerOnChange(fn: (value: boolean) => void): void {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n\n setDisabledState(isDisabled: boolean): void {\n this.formDisabled.set(isDisabled);\n }\n\n onToggleChange(event: Event): void {\n event.stopPropagation();\n\n const target = event.target as HTMLInputElement;\n const checked = target.checked;\n this.internalChecked.set(checked);\n\n this.onChange(checked);\n this.onTouched();\n this.change.emit(checked);\n this.toggleChange.emit(checked);\n }\n\n onLabelClick(): void {\n const toggleEl = this.toggleEl();\n if (!this.isDisabled() && toggleEl) {\n toggleEl.nativeElement.click();\n }\n }\n\n classes = computed(() => {\n const classes = ['tn-slide-toggle'];\n\n if (this.isDisabled()) {\n classes.push('tn-slide-toggle--disabled');\n }\n\n if (this.effectiveChecked()) {\n classes.push('tn-slide-toggle--checked');\n }\n\n classes.push(`tn-slide-toggle--${this.color()}`);\n classes.push(`tn-slide-toggle--label-${this.labelPosition()}`);\n\n return classes;\n });\n\n effectiveAriaLabel = computed(() => {\n return this.ariaLabel() || (this.label() ? undefined : 'Toggle');\n });\n}","<div [ngClass]=\"classes()\" [attr.data-testid]=\"testId()\">\n <label class=\"tn-slide-toggle__label\" [for]=\"id\">\n\n <!-- Label before toggle -->\n @if (label() && labelPosition() === 'before') {\n <span\n class=\"tn-slide-toggle__label-text tn-slide-toggle__label-text--before\"\n tabindex=\"0\"\n role=\"button\"\n (click)=\"onLabelClick()\"\n (keydown.enter)=\"onLabelClick()\"\n (keydown.space)=\"onLabelClick()\">\n {{ label() }}\n </span>\n }\n\n <!-- Toggle track and thumb -->\n <div class=\"tn-slide-toggle__bar\">\n <input\n #toggleEl\n type=\"checkbox\"\n class=\"tn-slide-toggle__input\"\n [id]=\"id\"\n [checked]=\"effectiveChecked()\"\n [disabled]=\"isDisabled()\"\n [required]=\"required()\"\n [attr.aria-label]=\"effectiveAriaLabel()\"\n [attr.aria-labelledby]=\"ariaLabelledby()\"\n (change)=\"onToggleChange($event)\"\n />\n\n <div class=\"tn-slide-toggle__track\">\n <div class=\"tn-slide-toggle__track-fill\"></div>\n </div>\n\n <div class=\"tn-slide-toggle__thumb-container\">\n <div class=\"tn-slide-toggle__thumb\">\n <div class=\"tn-slide-toggle__ripple\"></div>\n <!-- State icon -->\n <div class=\"tn-slide-toggle__icon\">\n @if (effectiveChecked()) {\n <svg\n class=\"tn-slide-toggle__check-icon\"\n viewBox=\"0 0 24 24\"\n width=\"16\"\n height=\"16\">\n <path d=\"M9 16.17L4.83 12l-1.42 1.41L9 19 21 7l-1.41-1.41L9 16.17z\" fill=\"currentColor\"/>\n </svg>\n }\n @if (!effectiveChecked()) {\n <svg\n class=\"tn-slide-toggle__minus-icon\"\n viewBox=\"0 0 24 24\"\n width=\"16\"\n height=\"16\">\n <path d=\"M19 13H5v-2h14v2z\" fill=\"currentColor\"/>\n </svg>\n }\n </div>\n </div>\n </div>\n </div>\n\n <!-- Label after toggle -->\n @if (label() && labelPosition() === 'after') {\n <span\n class=\"tn-slide-toggle__label-text tn-slide-toggle__label-text--after\"\n tabindex=\"0\"\n role=\"button\"\n (click)=\"onLabelClick()\"\n (keydown.enter)=\"onLabelClick()\"\n (keydown.space)=\"onLabelClick()\">\n {{ label() }}\n </span>\n }\n\n </label>\n</div>","import { CommonModule } from '@angular/common';\nimport { Component, input, computed, inject } from '@angular/core';\nimport { mdiDotsVertical } from '@mdi/js';\nimport type {\n TnCardAction,\n TnCardControl,\n TnCardHeaderStatus,\n TnCardFooterLink\n} from './card.interfaces';\nimport { TnButtonComponent } from '../button/button.component';\nimport { TnIconRegistryService } from '../icon/icon-registry.service';\nimport { TnIconComponent } from '../icon/icon.component';\nimport { TnIconButtonComponent } from '../icon-button/icon-button.component';\nimport { TnMenuTriggerDirective } from '../menu/menu-trigger.directive';\nimport type { TnMenuItem } from '../menu/menu.component';\nimport { TnMenuComponent } from '../menu/menu.component';\nimport { TnSlideToggleComponent } from '../slide-toggle/slide-toggle.component';\n\n@Component({\n selector: 'tn-card',\n standalone: true,\n imports: [CommonModule, TnButtonComponent, TnIconComponent, TnIconButtonComponent, TnSlideToggleComponent, TnMenuComponent, TnMenuTriggerDirective],\n templateUrl: './card.component.html',\n styleUrls: ['./card.component.scss'],\n})\nexport class TnCardComponent {\n private iconRegistry = inject(TnIconRegistryService);\n\n constructor() {\n // Register MDI icons used by this component\n this.registerMdiIcons();\n }\n\n title = input<string | undefined>(undefined);\n titleLink = input<string | undefined>(undefined); // Makes title navigable\n elevation = input<'none' | 'low' | 'medium' | 'high'>('medium');\n padding = input<'small' | 'medium' | 'large'>('medium');\n padContent = input<boolean>(true);\n bordered = input<boolean>(false);\n background = input<boolean>(true);\n\n // Header elements (top-right) - Always render in header\n headerStatus = input<TnCardHeaderStatus | undefined>(undefined);\n headerControl = input<TnCardControl | undefined>(undefined); // Slide toggle - ALWAYS in header\n headerMenu = input<TnMenuItem[] | undefined>(undefined);\n\n // Footer elements (bottom-right) - Always render in footer\n primaryAction = input<TnCardAction | undefined>(undefined);\n secondaryAction = input<TnCardAction | undefined>(undefined);\n footerLink = input<TnCardFooterLink | undefined>(undefined);\n\n /**\n * Register MDI icon library with all icons used by the card component\n * This makes the component self-contained with zero configuration required\n */\n private registerMdiIcons(): void {\n const mdiIcons: Record<string, string> = {\n 'dots-vertical': mdiDotsVertical,\n };\n\n // Register MDI library with resolver for card icons\n this.iconRegistry.registerLibrary({\n name: 'mdi',\n resolver: (iconName: string) => {\n const pathData = mdiIcons[iconName];\n if (!pathData) {\n return null;\n }\n return `<svg viewBox=\"0 0 24 24\"><path fill=\"currentColor\" d=\"${pathData}\"/></svg>`;\n }\n });\n }\n\n classes = computed(() => {\n const elevationClass = `tn-card--elevation-${this.elevation()}`;\n const paddingClass = `tn-card--padding-${this.padding()}`;\n const contentPaddingClass = this.padContent() ? `tn-card--content-padding-${this.padding()}` : 'tn-card--content-padding-none';\n const borderedClass = this.bordered() ? 'tn-card--bordered' : '';\n const backgroundClass = this.background() ? 'tn-card--background' : '';\n\n return ['tn-card', elevationClass, paddingClass, contentPaddingClass, borderedClass, backgroundClass].filter(Boolean);\n });\n\n hasHeader = computed(() => {\n return !!(this.title() || this.headerStatus() || this.headerControl() || this.headerMenu());\n });\n\n hasFooter = computed(() => {\n return !!(this.primaryAction() || this.secondaryAction() || this.footerLink());\n });\n\n onTitleClick(): void {\n const link = this.titleLink();\n if (link) {\n window.location.href = link;\n }\n }\n\n onControlChange(checked: boolean): void {\n const control = this.headerControl();\n if (control) {\n control.handler(checked);\n }\n }\n\n onHeaderMenuItemClick(_item: TnMenuItem): void {\n // Handler is called automatically via TnMenuItem.action\n }\n\n getStatusClass(type?: string): string {\n return type ? `tn-card__status--${type}` : 'tn-card__status--neutral';\n }\n}","<div [ngClass]=\"classes()\">\n <!-- Header section -->\n @if (hasHeader()) {\n <div class=\"tn-card__header\">\n <div class=\"tn-card__header-left\">\n @if (title()) {\n <h3\n class=\"tn-card__title\"\n [class.tn-card__title--link]=\"titleLink()\"\n [attr.tabindex]=\"titleLink() ? 0 : null\"\n [attr.role]=\"titleLink() ? 'button' : null\"\n (click)=\"onTitleClick()\"\n (keydown.enter)=\"onTitleClick()\"\n (keydown.space)=\"onTitleClick()\">\n {{ title() }}\n </h3>\n }\n </div>\n\n <div class=\"tn-card__header-right\">\n <!-- Header Status -->\n @if (headerStatus(); as status) {\n <div\n class=\"tn-card__status\"\n [ngClass]=\"getStatusClass(status?.type)\">\n {{ status.label }}\n </div>\n }\n\n <!-- Header Control (Slide Toggle) -->\n @if (headerControl(); as control) {\n <div class=\"tn-card__control\">\n <tn-slide-toggle\n [label]=\"control.label\"\n [checked]=\"control.checked\"\n [disabled]=\"control.disabled || false\"\n (change)=\"onControlChange($event)\" />\n </div>\n }\n\n <!-- Header Menu -->\n @if (headerMenu(); as menu) {\n @if (menu.length) {\n <div class=\"tn-card__menu\">\n <tn-icon-button\n name=\"dots-vertical\"\n library=\"mdi\"\n size=\"md\"\n ariaLabel=\"Card menu\"\n [tnMenuTriggerFor]=\"cardMenu\" />\n <tn-menu\n #cardMenu\n [items]=\"menu\"\n (menuItemClick)=\"onHeaderMenuItemClick($event)\" />\n </div>\n }\n }\n </div>\n </div>\n }\n\n <!-- Content section -->\n <div class=\"tn-card__content\">\n <ng-content />\n </div>\n\n <!-- Footer section -->\n @if (hasFooter()) {\n <div class=\"tn-card__footer\">\n <div class=\"tn-card__footer-left\">\n @if (footerLink(); as link) {\n <button\n type=\"button\"\n class=\"tn-card__footer-link\"\n (click)=\"link.handler()\">\n {{ link.label }}\n </button>\n }\n </div>\n\n <div class=\"tn-card__footer-right\">\n @if (secondaryAction(); as action) {\n <tn-button\n variant=\"outline\"\n color=\"default\"\n [label]=\"action.label\"\n [disabled]=\"action.disabled || false\"\n (click)=\"action.handler()\" />\n }\n\n @if (primaryAction(); as action) {\n <tn-button\n variant=\"filled\"\n color=\"primary\"\n [label]=\"action.label\"\n [disabled]=\"action.disabled || false\"\n (click)=\"action.handler()\" />\n }\n </div>\n </div>\n }\n</div>","import { trigger, state, style, transition, animate } from '@angular/animations';\nimport { CommonModule } from '@angular/common';\nimport { Component, input, output, computed, signal } from '@angular/core';\n\nconst expandCollapseAnimation = trigger('expandCollapse', [\n state('collapsed', style({\n height: '0px',\n opacity: 0,\n overflow: 'hidden',\n display: 'none'\n })),\n state('expanded', style({\n height: '*',\n opacity: 1,\n overflow: 'visible',\n display: 'block'\n })),\n transition('collapsed => expanded', [\n style({ display: 'block', height: '0px', opacity: 0 }),\n animate('300ms cubic-bezier(0.4, 0, 0.2, 1)', style({ height: '*', opacity: 1 }))\n ]),\n transition('expanded => collapsed', [\n animate('300ms cubic-bezier(0.4, 0, 0.2, 1)', style({ height: '0px', opacity: 0 })),\n style({ display: 'none' })\n ])\n]);\n\n@Component({\n selector: 'tn-expansion-panel',\n standalone: true,\n imports: [CommonModule],\n templateUrl: './expansion-panel.component.html',\n styleUrls: ['./expansion-panel.component.scss'],\n animations: [expandCollapseAnimation]\n})\nexport class TnExpansionPanelComponent {\n title = input<string | undefined>(undefined);\n elevation = input<'none' | 'low' | 'medium' | 'high'>('medium');\n padding = input<'small' | 'medium' | 'large'>('medium');\n bordered = input<boolean>(false);\n background = input<boolean>(true);\n expanded = input<boolean>(false);\n disabled = input<boolean>(false);\n titleStyle = input<'header' | 'body' | 'link'>('header');\n\n expandedChange = output<boolean>();\n toggleEvent = output<void>();\n\n // Internal state for tracking expansion (for uncontrolled usage)\n private internalExpanded = signal<boolean | null>(null);\n\n // Effective expanded state (prefers internal state if set, otherwise uses input)\n effectiveExpanded = computed(() => {\n const internal = this.internalExpanded();\n return internal !== null ? internal : this.expanded();\n });\n\n readonly contentId = `tn-expansion-panel-content-${Math.random().toString(36).substr(2, 9)}`;\n\n toggle(): void {\n if (this.disabled()) {\n return;\n }\n\n const newExpanded = !this.effectiveExpanded();\n this.internalExpanded.set(newExpanded);\n this.expandedChange.emit(newExpanded);\n this.toggleEvent.emit();\n }\n\n classes = computed(() => {\n const elevationClass = `tn-expansion-panel--elevation-${this.elevation()}`;\n const paddingClass = `tn-expansion-panel--padding-${this.padding()}`;\n const borderedClass = this.bordered() ? 'tn-expansion-panel--bordered' : '';\n const backgroundClass = this.background() ? 'tn-expansion-panel--background' : '';\n const expandedClass = this.effectiveExpanded() ? 'tn-expansion-panel--expanded' : '';\n const disabledClass = this.disabled() ? 'tn-expansion-panel--disabled' : '';\n const titleStyleClass = `tn-expansion-panel--title-${this.titleStyle()}`;\n\n return [\n 'tn-expansion-panel',\n elevationClass,\n paddingClass,\n borderedClass,\n backgroundClass,\n expandedClass,\n disabledClass,\n titleStyleClass\n ].filter(Boolean);\n });\n}","<div [ngClass]=\"classes()\">\n <button class=\"tn-expansion-panel__header\"\n [disabled]=\"disabled()\"\n [attr.aria-expanded]=\"effectiveExpanded()\"\n [attr.aria-controls]=\"contentId\"\n [attr.aria-disabled]=\"disabled()\"\n (click)=\"toggle()\">\n @if (title()) {\n <div class=\"tn-expansion-panel__title\">\n {{ title() }}\n </div>\n }\n <ng-content select=\"[slot=title]\" />\n\n <div class=\"tn-expansion-panel__indicator\">\n <svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n <path d=\"m6 9 6 6 6-6\"/>\n </svg>\n </div>\n </button>\n\n <div class=\"tn-expansion-panel__content\"\n [id]=\"contentId\"\n [attr.aria-hidden]=\"!effectiveExpanded()\"\n [@expandCollapse]=\"effectiveExpanded() ? 'expanded' : 'collapsed'\">\n <ng-content />\n </div>\n</div>","import { FocusMonitor, A11yModule } from '@angular/cdk/a11y';\nimport { CommonModule } from '@angular/common';\nimport type { ElementRef, AfterViewInit, OnDestroy} from '@angular/core';\nimport { Component, viewChild, inject, input, output, computed, signal, forwardRef } from '@angular/core';\nimport type { ControlValueAccessor} from '@angular/forms';\nimport { FormsModule, NG_VALUE_ACCESSOR } from '@angular/forms';\n\n@Component({\n selector: 'tn-checkbox',\n standalone: true,\n imports: [CommonModule, FormsModule, A11yModule],\n templateUrl: './checkbox.component.html',\n styleUrl: './checkbox.component.scss',\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => TnCheckboxComponent),\n multi: true\n }\n ]\n})\nexport class TnCheckboxComponent implements AfterViewInit, OnDestroy, ControlValueAccessor {\n checkboxEl = viewChild.required<ElementRef<HTMLInputElement>>('checkboxEl');\n\n label = input<string>('Checkbox');\n hideLabel = input<boolean>(false);\n disabled = input<boolean>(false);\n required = input<boolean>(false);\n indeterminate = input<boolean>(false);\n testId = input<string | undefined>(undefined);\n error = input<string | null>(null);\n checked = input<boolean>(false);\n\n change = output<boolean>();\n\n id = `tn-checkbox-${Math.random().toString(36).substr(2, 9)}`;\n\n // Internal state for CVA\n private internalChecked = signal<boolean>(false);\n\n // CVA disabled state management\n private formDisabled = signal<boolean>(false);\n isDisabled = computed(() => this.disabled() || this.formDisabled());\n\n private focusMonitor = inject(FocusMonitor);\n private onChange = (_: boolean) => {};\n private onTouched = () => {};\n\n ngAfterViewInit() {\n const checkboxEl = this.checkboxEl();\n if (checkboxEl) {\n this.focusMonitor.monitor(checkboxEl)\n .subscribe(() => {\n // Focus monitoring for accessibility\n });\n }\n }\n\n ngOnDestroy() {\n const checkboxEl = this.checkboxEl();\n if (checkboxEl) {\n this.focusMonitor.stopMonitoring(checkboxEl);\n }\n }\n\n // Computed for effective checked state (input or CVA-controlled)\n effectiveChecked = computed(() => this.internalChecked() || this.checked());\n\n // ControlValueAccessor implementation\n writeValue(value: boolean): void {\n this.internalChecked.set(value !== null && value !== undefined ? value : false);\n }\n\n registerOnChange(fn: (value: boolean) => void): void {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n\n setDisabledState(isDisabled: boolean): void {\n this.formDisabled.set(isDisabled);\n }\n\n onCheckboxChange(event: Event): void {\n const target = event.target as HTMLInputElement;\n const checked = target.checked;\n this.internalChecked.set(checked);\n this.onChange(checked);\n this.onTouched();\n this.change.emit(checked);\n }\n\n classes = computed(() => {\n const classes = ['tn-checkbox'];\n\n if (this.isDisabled()) {\n classes.push('tn-checkbox--disabled');\n }\n\n if (this.error()) {\n classes.push('tn-checkbox--error');\n }\n\n if (this.indeterminate()) {\n classes.push('tn-checkbox--indeterminate');\n }\n\n return classes;\n });\n}","<div [ngClass]=\"classes()\">\n <label class=\"tn-checkbox__label\" [for]=\"id\">\n <input\n #checkboxEl\n type=\"checkbox\"\n class=\"tn-checkbox__input\"\n [id]=\"id\"\n [checked]=\"effectiveChecked()\"\n [disabled]=\"isDisabled()\"\n [required]=\"required()\"\n [indeterminate]=\"indeterminate()\"\n [attr.data-testid]=\"testId()\"\n [attr.aria-describedby]=\"error() ? id + '-error' : null\"\n [attr.aria-invalid]=\"error() ? 'true' : null\"\n (change)=\"onCheckboxChange($event)\"\n />\n <span class=\"tn-checkbox__checkmark\"></span>\n @if (!hideLabel()) {\n <span class=\"tn-checkbox__text\">{{ label() }}</span>\n }\n </label>\n\n @if (error()) {\n <div\n class=\"tn-checkbox__error\"\n role=\"alert\"\n aria-live=\"polite\"\n [id]=\"id + '-error'\"\n >\n {{ error() }}\n </div>\n }\n</div>","import { FocusMonitor, A11yModule } from '@angular/cdk/a11y';\nimport { CommonModule } from '@angular/common';\nimport type { ElementRef, AfterViewInit, OnDestroy} from '@angular/core';\nimport { Component, viewChild, inject, input, output, computed, signal, forwardRef } from '@angular/core';\nimport type { ControlValueAccessor} from '@angular/forms';\nimport { FormsModule, NG_VALUE_ACCESSOR } from '@angular/forms';\n\n@Component({\n selector: 'tn-radio',\n standalone: true,\n imports: [CommonModule, FormsModule, A11yModule],\n templateUrl: './radio.component.html',\n styleUrl: './radio.component.scss',\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => TnRadioComponent),\n multi: true\n }\n ]\n})\nexport class TnRadioComponent implements AfterViewInit, OnDestroy, ControlValueAccessor {\n radioEl = viewChild.required<ElementRef<HTMLInputElement>>('radioEl');\n\n label = input<string>('Radio');\n value = input<unknown>('');\n name = input<string | undefined>(undefined);\n disabled = input<boolean>(false);\n required = input<boolean>(false);\n testId = input<string | undefined>(undefined);\n error = input<string | null>(null);\n\n change = output<unknown>();\n\n id = `tn-radio-${Math.random().toString(36).substr(2, 9)}`;\n checked = false;\n\n // CVA disabled state management\n private formDisabled = signal<boolean>(false);\n isDisabled = computed(() => this.disabled() || this.formDisabled());\n\n private focusMonitor = inject(FocusMonitor);\n private onChange = (_: unknown) => {};\n private onTouched = () => {};\n\n ngAfterViewInit() {\n const radioEl = this.radioEl();\n if (radioEl) {\n this.focusMonitor.monitor(radioEl)\n .subscribe(() => {\n // Focus monitoring for accessibility\n });\n }\n }\n\n ngOnDestroy() {\n const radioEl = this.radioEl();\n if (radioEl) {\n this.focusMonitor.stopMonitoring(radioEl);\n }\n }\n\n // ControlValueAccessor implementation\n writeValue(value: unknown): void {\n this.checked = value !== null && value !== undefined && value === this.value();\n }\n\n registerOnChange(fn: (value: unknown) => void): void {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n\n setDisabledState(isDisabled: boolean): void {\n this.formDisabled.set(isDisabled);\n }\n\n onRadioChange(event: Event): void {\n const target = event.target as HTMLInputElement;\n this.checked = target.checked;\n if (target.checked) {\n this.onChange(this.value());\n this.onTouched();\n this.change.emit(this.value());\n }\n }\n\n classes = computed(() => {\n const classes = ['tn-radio'];\n\n if (this.isDisabled()) {\n classes.push('tn-radio--disabled');\n }\n\n if (this.error()) {\n classes.push('tn-radio--error');\n }\n\n return classes;\n });\n}","<div [ngClass]=\"classes()\">\n <label class=\"tn-radio__label\" [for]=\"id\">\n <input\n #radioEl\n type=\"radio\"\n class=\"tn-radio__input\"\n [id]=\"id\"\n [name]=\"name()\"\n [value]=\"value()\"\n [checked]=\"checked\"\n [disabled]=\"isDisabled()\"\n [required]=\"required()\"\n [attr.data-testid]=\"testId()\"\n [attr.aria-describedby]=\"error() ? id + '-error' : null\"\n [attr.aria-invalid]=\"error() ? 'true' : null\"\n (change)=\"onRadioChange($event)\"\n />\n <span class=\"tn-radio__checkmark\"></span>\n <span class=\"tn-radio__text\">{{ label() }}</span>\n </label>\n\n @if (error()) {\n <div\n class=\"tn-radio__error\"\n role=\"alert\"\n aria-live=\"polite\"\n [id]=\"id + '-error'\"\n >\n {{ error() }}\n </div>\n }\n</div>","import { A11yModule } from '@angular/cdk/a11y';\nimport { CommonModule } from '@angular/common';\nimport type { TemplateRef, AfterContentInit} from '@angular/core';\nimport { Component, input, output, ElementRef, inject, contentChild, computed, signal } from '@angular/core';\n\n@Component({\n selector: 'tn-tab',\n standalone: true,\n imports: [CommonModule, A11yModule],\n templateUrl: './tab.component.html',\n styleUrl: './tab.component.scss'\n})\nexport class TnTabComponent implements AfterContentInit {\n label = input<string>('');\n disabled = input<boolean>(false);\n icon = input<string | undefined>(undefined);\n iconTemplate = input<TemplateRef<unknown> | undefined>(undefined);\n testId = input<string | undefined>(undefined);\n\n selected = output<void>();\n\n iconContent = contentChild<TemplateRef<unknown>>('iconContent');\n\n // Internal properties set by parent TnTabsComponent (public signals for parent control)\n index = signal<number>(0);\n isActive = signal<boolean>(false);\n tabsComponent?: { onKeydown: (event: KeyboardEvent, index: number) => void }; // Will be set by parent\n\n elementRef = inject(ElementRef<HTMLElement>);\n\n protected hasIconContent = signal<boolean>(false);\n\n ngAfterContentInit() {\n this.hasIconContent.set(!!this.iconContent());\n }\n\n onClick() {\n if (!this.disabled()) {\n this.selected.emit();\n }\n }\n\n onKeydown(event: KeyboardEvent) {\n if (this.tabsComponent) {\n this.tabsComponent.onKeydown(event, this.index());\n }\n }\n\n classes = computed(() => {\n const classes = ['tn-tab'];\n\n if (this.isActive()) {\n classes.push('tn-tab--active');\n }\n\n if (this.disabled()) {\n classes.push('tn-tab--disabled');\n }\n\n return classes.join(' ');\n });\n\n tabIndex = computed(() => {\n return this.isActive() ? 0 : -1;\n });\n\n hasIcon = computed(() => {\n return !!(this.hasIconContent() || this.iconTemplate() || this.icon());\n });\n}","<button\n role=\"tab\"\n type=\"button\"\n [ngClass]=\"classes()\"\n [attr.data-testid]=\"testId()\"\n [attr.aria-selected]=\"isActive()\"\n [attr.aria-disabled]=\"disabled()\"\n [attr.tabindex]=\"tabIndex()\"\n [disabled]=\"disabled()\"\n (click)=\"onClick()\"\n (keydown)=\"onKeydown($event)\"\n>\n @if (hasIcon()) {\n <span class=\"tn-tab__icon\">\n @if (iconContent()) {\n <ng-container *ngTemplateOutlet=\"iconContent()\" />\n } @else if (iconTemplate()) {\n <ng-container *ngTemplateOutlet=\"iconTemplate()\" />\n } @else {\n <span [innerHTML]=\"icon()\"></span>\n }\n </span>\n }\n <span class=\"tn-tab__label\">\n {{ label() }}\n <ng-content />\n </span>\n</button>","import { A11yModule } from '@angular/cdk/a11y';\nimport { CommonModule } from '@angular/common';\nimport type { TemplateRef} from '@angular/core';\nimport { Component, input, viewChild, ElementRef, inject, computed, signal } from '@angular/core';\n\n@Component({\n selector: 'tn-tab-panel',\n standalone: true,\n imports: [CommonModule, A11yModule],\n templateUrl: './tab-panel.component.html',\n styleUrl: './tab-panel.component.scss'\n})\nexport class TnTabPanelComponent {\n label = input<string>('');\n lazyLoad = input<boolean>(false);\n testId = input<string | undefined>(undefined);\n\n content = viewChild.required<TemplateRef<unknown>>('content');\n\n // Internal properties set by parent TnTabsComponent (public signals for parent control)\n index = signal<number>(0);\n isActive = signal<boolean>(false);\n hasBeenActive = signal<boolean>(false);\n\n elementRef = inject(ElementRef<HTMLElement>);\n\n classes = computed(() => {\n const classes = ['tn-tab-panel'];\n\n if (this.isActive()) {\n classes.push('tn-tab-panel--active');\n }\n\n if (!this.isActive()) {\n classes.push('tn-tab-panel--hidden');\n }\n\n return classes.join(' ');\n });\n\n shouldRender = computed(() => {\n if (!this.lazyLoad()) {\n return true;\n }\n\n // For lazy loading, only render if it's currently active or has been active before\n return this.isActive() || this.hasBeenActive();\n });\n\n onActivate() {\n this.hasBeenActive.set(true);\n }\n}","<div\n role=\"tabpanel\"\n [ngClass]=\"classes()\"\n [attr.data-testid]=\"testId()\"\n [attr.aria-hidden]=\"!isActive()\"\n [attr.aria-labelledby]=\"'tab-' + index()\"\n [attr.tabindex]=\"isActive() ? 0 : -1\"\n>\n @if (shouldRender()) {\n <div class=\"tn-tab-panel__content\">\n <ng-content />\n </div>\n }\n</div>","import { FocusMonitor, A11yModule } from '@angular/cdk/a11y';\nimport { LEFT_ARROW, RIGHT_ARROW, UP_ARROW, DOWN_ARROW, HOME, END, ENTER, SPACE } from '@angular/cdk/keycodes';\nimport { CommonModule } from '@angular/common';\nimport type { AfterContentInit, ElementRef, AfterViewInit, OnDestroy } from '@angular/core';\nimport { Component, contentChildren, input, output, ChangeDetectionStrategy, inject, ChangeDetectorRef, viewChild, signal, computed, effect } from '@angular/core';\nimport { TnTabComponent } from '../tab/tab.component';\nimport { TnTabPanelComponent } from '../tab-panel/tab-panel.component';\n\nexport interface TabChangeEvent {\n index: number;\n tab: TnTabComponent;\n previousIndex: number;\n}\n\n@Component({\n selector: 'tn-tabs',\n standalone: true,\n imports: [CommonModule, A11yModule, TnTabComponent, TnTabPanelComponent],\n templateUrl: './tabs.component.html',\n styleUrl: './tabs.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class TnTabsComponent implements AfterContentInit, AfterViewInit, OnDestroy {\n tabs = contentChildren(TnTabComponent);\n panels = contentChildren(TnTabPanelComponent);\n tabHeader = viewChild.required<ElementRef<HTMLElement>>('tabHeader');\n\n selectedIndex = input<number>(0);\n orientation = input<'horizontal' | 'vertical'>('horizontal');\n highlightPosition = input<'left' | 'right' | 'top' | 'bottom'>('bottom');\n\n selectedIndexChange = output<number>();\n tabChange = output<TabChangeEvent>();\n\n // Internal state for selected index (mutable)\n private internalSelectedIndex = signal<number>(0);\n\n highlightBarLeft = signal<number>(0);\n highlightBarWidth = signal<number>(0);\n highlightBarTop = signal<number>(0);\n highlightBarHeight = signal<number>(0);\n highlightBarVisible = signal<boolean>(false);\n\n private focusMonitor = inject(FocusMonitor);\n private cdr = inject(ChangeDetectorRef);\n\n constructor() {\n // Sync input to internal state\n effect(() => {\n this.internalSelectedIndex.set(this.selectedIndex());\n });\n\n // Reactive child state management - update tabs and panels when selectedIndex changes\n effect(() => {\n const currentIndex = this.internalSelectedIndex();\n\n const tabs = this.tabs();\n if (tabs && tabs.length > 0) {\n tabs.forEach((tab, i) => {\n tab.isActive.set(i === currentIndex);\n });\n }\n\n const panels = this.panels();\n if (panels && panels.length > 0) {\n panels.forEach((panel, i) => {\n panel.isActive.set(i === currentIndex);\n if (i === currentIndex) {\n panel.onActivate();\n }\n });\n }\n\n this.cdr.detectChanges();\n });\n }\n\n ngAfterContentInit() {\n this.initializeTabs();\n this.selectTab(this.internalSelectedIndex());\n\n // Listen for tab changes\n effect(() => {\n // Track tabs signal to react to changes\n const tabs = this.tabs();\n if (tabs.length > 0) {\n this.initializeTabs();\n this.updateHighlightBar();\n }\n });\n }\n\n ngAfterViewInit() {\n // Wait for next tick to ensure DOM is fully rendered\n setTimeout(() => {\n this.updateHighlightBar();\n this.highlightBarVisible.set(true);\n this.cdr.detectChanges();\n }, 0);\n }\n\n\n ngOnDestroy() {\n this.tabs().forEach(tab => {\n if (tab.elementRef) {\n this.focusMonitor.stopMonitoring(tab.elementRef);\n }\n });\n }\n\n private initializeTabs() {\n const currentIndex = this.internalSelectedIndex();\n\n this.tabs().forEach((tab, index) => {\n tab.index.set(index);\n tab.isActive.set(index === currentIndex);\n tab.tabsComponent = this;\n\n // Set up focus monitoring\n if (tab.elementRef) {\n this.focusMonitor.monitor(tab.elementRef);\n }\n\n // Set up click handlers\n tab.selected.subscribe(() => {\n if (!tab.disabled()) {\n this.selectTab(index);\n }\n });\n });\n\n this.panels().forEach((panel, index) => {\n panel.index.set(index);\n panel.isActive.set(index === currentIndex);\n });\n\n // Trigger change detection to update DOM\n this.cdr.detectChanges();\n }\n\n selectTab(index: number) {\n const tabs = this.tabs();\n if (index < 0 || index >= tabs.length) {\n return;\n }\n\n const tab = tabs[index];\n if (tab && tab.disabled()) {\n return;\n }\n\n const previousIndex = this.internalSelectedIndex();\n this.internalSelectedIndex.set(index);\n\n // Effect will update child states automatically\n\n // Update highlight bar\n this.updateHighlightBar();\n\n // Emit events\n this.selectedIndexChange.emit(index);\n if (tab) {\n this.tabChange.emit({\n index,\n tab,\n previousIndex\n });\n }\n }\n\n private updateHighlightBar() {\n const tabHeader = this.tabHeader();\n const tabs = this.tabs();\n if (!tabHeader || !tabs || tabs.length === 0) {\n return;\n }\n\n const activeTab = tabs[this.internalSelectedIndex()];\n if (!activeTab || !activeTab.elementRef) {\n return;\n }\n\n const tabElement = activeTab.elementRef.nativeElement;\n const headerElement = tabHeader.nativeElement;\n\n // Get the position and dimensions of the active tab relative to the header\n const tabRect = tabElement.getBoundingClientRect();\n const headerRect = headerElement.getBoundingClientRect();\n\n if (this.orientation() === 'vertical') {\n // For vertical tabs, animate top position and height\n this.highlightBarTop.set(tabRect.top - headerRect.top);\n this.highlightBarHeight.set(tabRect.height);\n // Position highlight bar based on highlightPosition\n if (this.highlightPosition() === 'left') {\n this.highlightBarLeft.set(tabRect.left - headerRect.left);\n this.highlightBarWidth.set(3);\n } else { // right\n this.highlightBarLeft.set((tabRect.right - headerRect.left) - 3);\n this.highlightBarWidth.set(3);\n }\n } else {\n // For horizontal tabs, animate left position and width\n this.highlightBarLeft.set(tabRect.left - headerRect.left);\n this.highlightBarWidth.set(tabRect.width);\n // Position highlight bar based on highlightPosition\n if (this.highlightPosition() === 'top') {\n this.highlightBarTop.set(tabRect.top - headerRect.top);\n this.highlightBarHeight.set(2);\n } else { // bottom\n this.highlightBarTop.set((tabRect.bottom - headerRect.top) - 2);\n this.highlightBarHeight.set(2);\n }\n }\n\n // Trigger change detection to update the highlight bar position\n this.cdr.detectChanges();\n }\n\n onKeydown(event: KeyboardEvent, currentIndex: number) {\n let targetIndex = currentIndex;\n\n switch (event.keyCode) {\n case LEFT_ARROW:\n if (this.orientation() === 'horizontal') {\n targetIndex = this.getPreviousEnabledTabIndex(currentIndex);\n } else {\n return; // No action for vertical tabs\n }\n break;\n case RIGHT_ARROW:\n if (this.orientation() === 'horizontal') {\n targetIndex = this.getNextEnabledTabIndex(currentIndex);\n } else {\n return; // No action for vertical tabs\n }\n break;\n case UP_ARROW:\n if (this.orientation() === 'vertical') {\n targetIndex = this.getPreviousEnabledTabIndex(currentIndex);\n } else {\n return; // No action for horizontal tabs\n }\n break;\n case DOWN_ARROW:\n if (this.orientation() === 'vertical') {\n targetIndex = this.getNextEnabledTabIndex(currentIndex);\n } else {\n return; // No action for horizontal tabs\n }\n break;\n case HOME:\n targetIndex = this.getFirstEnabledTabIndex();\n break;\n case END:\n targetIndex = this.getLastEnabledTabIndex();\n break;\n case ENTER:\n case SPACE:\n this.selectTab(currentIndex);\n event.preventDefault();\n return;\n default:\n return;\n }\n\n if (targetIndex !== currentIndex) {\n this.focusTab(targetIndex);\n event.preventDefault();\n }\n }\n\n private getPreviousEnabledTabIndex(currentIndex: number): number {\n const tabs = this.tabs();\n for (let i = currentIndex - 1; i >= 0; i--) {\n if (!tabs[i]?.disabled()) {\n return i;\n }\n }\n return this.getLastEnabledTabIndex();\n }\n\n private getNextEnabledTabIndex(currentIndex: number): number {\n const tabs = this.tabs();\n for (let i = currentIndex + 1; i < tabs.length; i++) {\n if (!tabs[i]?.disabled()) {\n return i;\n }\n }\n return this.getFirstEnabledTabIndex();\n }\n\n private getFirstEnabledTabIndex(): number {\n const tabs = this.tabs();\n for (let i = 0; i < tabs.length; i++) {\n if (!tabs[i]?.disabled()) {\n return i;\n }\n }\n return 0;\n }\n\n private getLastEnabledTabIndex(): number {\n const tabs = this.tabs();\n for (let i = tabs.length - 1; i >= 0; i--) {\n if (!tabs[i]?.disabled()) {\n return i;\n }\n }\n return tabs.length - 1;\n }\n\n private focusTab(index: number) {\n const tab = this.tabs()[index];\n if (tab && tab.elementRef) {\n tab.elementRef.nativeElement.focus();\n }\n }\n\n classes = computed(() => {\n const classes = ['tn-tabs'];\n\n if (this.orientation() === 'vertical') {\n classes.push('tn-tabs--vertical');\n } else {\n classes.push('tn-tabs--horizontal');\n }\n\n // Add highlight position class\n classes.push(`tn-tabs--highlight-${this.highlightPosition()}`);\n\n return classes.join(' ');\n });\n}\n","<div role=\"tablist\" [ngClass]=\"classes()\" [attr.aria-orientation]=\"orientation()\">\n <div #tabHeader class=\"tn-tabs__header\">\n <ng-content select=\"tn-tab\" />\n @if (highlightBarVisible()) {\n <div class=\"tn-tabs__highlight-bar\"\n [style.left.px]=\"highlightBarLeft()\"\n [style.width.px]=\"highlightBarWidth()\"\n [style.top.px]=\"highlightBarTop()\"\n [style.height.px]=\"highlightBarHeight()\">\n </div>\n }\n </div>\n\n <div class=\"tn-tabs__content\">\n <ng-content select=\"tn-tab-panel\" />\n </div>\n</div>","\nimport { Component, input, computed } from '@angular/core';\nimport type { PlatformType } from '../enums/modifier-keys.enum';\n\n@Component({\n selector: 'tn-keyboard-shortcut',\n standalone: true,\n imports: [],\n templateUrl: './keyboard-shortcut.component.html',\n styleUrls: ['./keyboard-shortcut.component.scss'],\n})\nexport class TnKeyboardShortcutComponent {\n shortcut = input<string>('');\n platform = input<PlatformType>('auto');\n separator = input<string>('');\n\n displayShortcut = computed(() => {\n return this.formatShortcut(this.shortcut());\n });\n\n private formatShortcut(shortcut: string): string {\n if (!shortcut) {return '';}\n\n const detectedPlatform = this.platform() === 'auto' ? this.detectPlatform() : this.platform();\n \n // Convert Mac-style shortcuts to platform-appropriate format\n if (detectedPlatform === 'windows' || detectedPlatform === 'linux') {\n return this.convertToWindows(shortcut);\n }\n \n // Return Mac format by default\n return shortcut;\n }\n\n private detectPlatform(): 'mac' | 'windows' | 'linux' {\n const userAgent = navigator.userAgent.toLowerCase();\n \n if (userAgent.includes('mac')) {\n return 'mac';\n } else if (userAgent.includes('win')) {\n return 'windows';\n } else if (userAgent.includes('linux')) {\n return 'linux';\n }\n \n return 'mac'; // Default to Mac\n }\n\n private convertToWindows(macShortcut: string): string {\n return macShortcut\n .replace(/⌘/g, 'Ctrl')\n .replace(/⌥/g, 'Alt')\n .replace(/⇧/g, 'Shift')\n .replace(/⌃/g, 'Ctrl');\n }\n\n\n shortcutKeys = computed(() => {\n const displayShortcut = this.displayShortcut();\n if (!displayShortcut) {return [];}\n\n let keys: string[] = [];\n\n // For Mac-style shortcuts without separators\n if (displayShortcut.includes('⌘') || displayShortcut.includes('⌥') || displayShortcut.includes('⇧')) {\n const macSymbols = ['⌘', '⌥', '⇧', '⌃'];\n let currentKey = '';\n\n // Iterate through each character to preserve order\n for (const char of displayShortcut) {\n if (macSymbols.includes(char)) {\n // If we have accumulated characters, add them first\n if (currentKey) {\n keys.push(currentKey);\n currentKey = '';\n }\n // Add the Mac symbol\n keys.push(char);\n } else {\n // Accumulate non-symbol characters\n currentKey += char;\n }\n }\n\n // Add any remaining characters\n if (currentKey) {\n keys.push(currentKey);\n }\n } else {\n // For Windows/Linux style shortcuts with + separators\n keys = displayShortcut.split('+');\n }\n\n return keys.filter(key => key.trim() !== '');\n });\n}","<span class=\"tn-keyboard-shortcut\" [attr.aria-label]=\"'Keyboard shortcut: ' + displayShortcut()\">\n @for (key of shortcutKeys(); track $index; let last = $last) {\n <kbd class=\"tn-key\">{{ key }}</kbd>\n @if (!last) {\n <span class=\"tn-key-separator\">{{ separator() || '+' }}</span>\n }\n }\n</span>","\nimport type { AfterContentInit } from '@angular/core';\nimport { Component, input, computed, signal, contentChild } from '@angular/core';\nimport { NgControl } from '@angular/forms';\n\n@Component({\n selector: 'tn-form-field',\n standalone: true,\n imports: [],\n templateUrl: './form-field.component.html',\n styleUrls: ['./form-field.component.scss']\n})\nexport class TnFormFieldComponent implements AfterContentInit {\n label = input<string>('');\n hint = input<string>('');\n required = input<boolean>(false);\n testId = input<string>('');\n\n control = contentChild(NgControl);\n\n protected hasError = signal<boolean>(false);\n protected errorMessage = signal<string>('');\n\n ngAfterContentInit(): void {\n const control = this.control();\n if (control) {\n // Listen for control status changes\n control.statusChanges?.subscribe(() => {\n this.updateErrorState();\n });\n\n // Initial error state check\n this.updateErrorState();\n }\n }\n\n private updateErrorState(): void {\n const control = this.control();\n if (control) {\n this.hasError.set(!!(control.invalid && (control.dirty || control.touched)));\n this.errorMessage.set(this.getErrorMessage());\n }\n }\n\n private getErrorMessage(): string {\n const control = this.control();\n if (!control?.errors) {return '';}\n\n const errors = control.errors;\n\n // Return the first error message found\n if (errors['required']) {return 'This field is required';}\n if (errors['email']) {return 'Please enter a valid email address';}\n if (errors['minlength']) {return `Minimum length is ${errors['minlength'].requiredLength}`;}\n if (errors['maxlength']) {return `Maximum length is ${errors['maxlength'].requiredLength}`;}\n if (errors['pattern']) {return 'Please enter a valid format';}\n if (errors['min']) {return `Minimum value is ${errors['min'].min}`;}\n if (errors['max']) {return `Maximum value is ${errors['max'].max}`;}\n\n // Return custom error message if available\n return Object.keys(errors)[0] || 'Invalid input';\n }\n\n showError = computed(() => {\n return this.hasError() && !!this.errorMessage();\n });\n\n showHint = computed(() => {\n return !!this.hint() && !this.showError();\n });\n}","<div class=\"tn-form-field\" [attr.data-testid]=\"testId()\">\n <!-- Label -->\n @if (label()) {\n <label class=\"tn-form-field-label\" [class.required]=\"required()\">\n {{ label() }}\n @if (required()) {\n <span class=\"required-asterisk\" aria-label=\"required\">*</span>\n }\n </label>\n }\n\n <!-- Form Control Content -->\n <div class=\"tn-form-field-wrapper\">\n <ng-content />\n </div>\n\n <!-- Hint or Error Message -->\n <div class=\"tn-form-field-subscript\">\n @if (showError()) {\n <div\n class=\"tn-form-field-error\"\n role=\"alert\"\n aria-live=\"polite\">\n {{ errorMessage() }}\n </div>\n }\n @if (showHint()) {\n <div class=\"tn-form-field-hint\">\n {{ hint() }}\n </div>\n }\n </div>\n</div>","\nimport { ElementRef, ChangeDetectorRef, Component, input, output, forwardRef, signal, computed, effect, inject } from '@angular/core';\nimport type { ControlValueAccessor} from '@angular/forms';\nimport { NG_VALUE_ACCESSOR } from '@angular/forms';\n\nexport interface TnSelectOption<T = unknown> {\n value: T;\n label: string;\n disabled?: boolean;\n}\n\nexport interface TnSelectOptionGroup<T = unknown> {\n label: string;\n options: TnSelectOption<T>[];\n disabled?: boolean;\n}\n\n@Component({\n selector: 'tn-select',\n standalone: true,\n imports: [],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => TnSelectComponent),\n multi: true\n }\n ],\n templateUrl: './select.component.html',\n styleUrls: ['./select.component.scss']\n})\nexport class TnSelectComponent<T = unknown> implements ControlValueAccessor {\n options = input<TnSelectOption<T>[]>([]);\n optionGroups = input<TnSelectOptionGroup<T>[]>([]);\n placeholder = input<string>('Select an option');\n disabled = input<boolean>(false);\n testId = input<string>('');\n\n selectionChange = output<T>();\n\n // Internal state signals\n protected isOpen = signal<boolean>(false);\n protected selectedValue = signal<T | null>(null);\n private formDisabled = signal<boolean>(false);\n\n // Computed disabled state (combines input and form state)\n isDisabled = computed(() => this.disabled() || this.formDisabled());\n\n private onChange = (_value: T | null) => {};\n private onTouched = () => {};\n\n private elementRef = inject(ElementRef);\n private cdr = inject(ChangeDetectorRef);\n\n constructor() {\n // Click-outside detection using effect\n effect(() => {\n if (this.isOpen()) {\n const clickListener = (event: Event) => {\n if (!this.elementRef.nativeElement.contains(event.target as Node)) {\n this.closeDropdown();\n }\n };\n\n // Add listener after a small delay to avoid immediate closure\n setTimeout(() => {\n document.addEventListener('click', clickListener);\n }, 0);\n\n // Cleanup function\n return () => {\n document.removeEventListener('click', clickListener);\n };\n }\n return undefined;\n });\n }\n\n // ControlValueAccessor implementation\n writeValue(value: T | null): void {\n this.selectedValue.set(value);\n }\n\n registerOnChange(fn: (value: T | null) => void): void {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n\n setDisabledState(isDisabled: boolean): void {\n this.formDisabled.set(isDisabled);\n }\n\n // Component methods\n toggleDropdown(): void {\n if (this.isDisabled()) {return;}\n this.isOpen.set(!this.isOpen());\n if (!this.isOpen()) {\n this.onTouched();\n }\n }\n\n closeDropdown(): void {\n this.isOpen.set(false);\n this.onTouched();\n }\n\n onOptionClick(option: TnSelectOption<T>): void {\n this.selectOption(option);\n }\n\n selectOption(option: TnSelectOption<T>): void {\n if (option.disabled) {return;}\n\n this.selectedValue.set(option.value);\n this.onChange(option.value);\n this.selectionChange.emit(option.value);\n this.closeDropdown();\n this.cdr.markForCheck(); // Trigger change detection\n }\n\n // Computed properties\n isSelected = computed(() => (option: TnSelectOption<T>): boolean => {\n return this.compareValues(this.selectedValue(), option.value);\n });\n\n getDisplayText = computed(() => {\n const value = this.selectedValue();\n if (value === null || value === undefined) {\n return this.placeholder();\n }\n const option = this.findOptionByValue(value);\n return option ? option.label : value;\n });\n\n private findOptionByValue(value: T | null): TnSelectOption<T> | undefined {\n // Search in regular options first\n const regularOption = this.options().find(opt => this.compareValues(opt.value, value));\n if (regularOption) {return regularOption;}\n\n // Search in option groups\n for (const group of this.optionGroups()) {\n const groupOption = group.options.find(opt => this.compareValues(opt.value, value));\n if (groupOption) {return groupOption;}\n }\n\n return undefined;\n }\n\n hasAnyOptions = computed(() => {\n return this.options().length > 0 || this.optionGroups().length > 0;\n });\n\n private compareValues(a: T | null, b: T | null): boolean {\n if (a === b) {return true;}\n if (typeof a === 'object' && typeof b === 'object' && a !== null && b !== null) {\n return JSON.stringify(a) === JSON.stringify(b);\n }\n return false;\n }\n\n // Keyboard navigation\n onKeydown(event: KeyboardEvent): void {\n switch (event.key) {\n case 'Enter':\n case ' ':\n if (!this.isOpen()) {\n this.toggleDropdown();\n event.preventDefault();\n }\n break;\n case 'Escape':\n if (this.isOpen()) {\n this.closeDropdown();\n event.preventDefault();\n }\n break;\n case 'ArrowDown':\n if (!this.isOpen()) {\n this.toggleDropdown();\n }\n event.preventDefault();\n break;\n }\n }\n}\n","<div class=\"tn-select-container\" [attr.data-testid]=\"testId()\">\n <!-- Select Trigger -->\n <div\n class=\"tn-select-trigger\"\n role=\"combobox\"\n tabindex=\"0\"\n [class.disabled]=\"isDisabled()\"\n [class.open]=\"isOpen()\"\n [attr.aria-expanded]=\"isOpen()\"\n [attr.aria-haspopup]=\"true\"\n [attr.aria-controls]=\"isOpen() ? 'tn-select-dropdown-' + testId() : null\"\n [attr.aria-label]=\"placeholder()\"\n (click)=\"toggleDropdown()\"\n (keydown)=\"onKeydown($event)\">\n\n <!-- Display Text -->\n <span\n class=\"tn-select-text\"\n [class.placeholder]=\"selectedValue() === null || selectedValue() === undefined\">\n {{ getDisplayText() }}\n </span>\n\n <!-- Dropdown Arrow -->\n <div class=\"tn-select-arrow\" [class.open]=\"isOpen()\">\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\">\n <polyline points=\"6,9 12,15 18,9\" />\n </svg>\n </div>\n </div>\n\n <!-- Dropdown Menu -->\n @if (isOpen()) {\n <div\n class=\"tn-select-dropdown\"\n role=\"listbox\"\n [attr.id]=\"'tn-select-dropdown-' + testId()\">\n\n <!-- Options List -->\n <div class=\"tn-select-options\">\n <!-- Regular Options -->\n @for (option of options(); track $index) {\n <div\n class=\"tn-select-option\"\n role=\"option\"\n [attr.tabindex]=\"option.disabled ? null : 0\"\n [class.selected]=\"isSelected()(option)\"\n [class.disabled]=\"option.disabled\"\n [attr.aria-selected]=\"isSelected()(option)\"\n [attr.aria-disabled]=\"option.disabled\"\n (mousedown)=\"$event.preventDefault()\"\n (click)=\"onOptionClick(option)\"\n (keydown.enter)=\"onOptionClick(option)\"\n (keydown.space)=\"onOptionClick(option)\">\n\n {{ option.label }}\n </div>\n }\n\n <!-- Option Groups -->\n @for (group of optionGroups(); track $index; let isFirst = $first) {\n <!-- Group Separator (not shown before first group if we have regular options) -->\n @if (!isFirst || options().length > 0) {\n <div\n class=\"tn-select-separator\"\n role=\"separator\">\n </div>\n }\n\n <!-- Group Label -->\n <div\n class=\"tn-select-group-label\"\n [class.disabled]=\"group.disabled\">\n {{ group.label }}\n </div>\n\n <!-- Group Options -->\n @for (option of group.options; track $index) {\n <div\n class=\"tn-select-option\"\n role=\"option\"\n [attr.tabindex]=\"option.disabled || group.disabled ? null : 0\"\n [class.selected]=\"isSelected()(option)\"\n [class.disabled]=\"option.disabled || group.disabled\"\n [attr.aria-selected]=\"isSelected()(option)\"\n [attr.aria-disabled]=\"option.disabled || group.disabled\"\n (mousedown)=\"$event.preventDefault()\"\n (click)=\"onOptionClick(option)\"\n (keydown.enter)=\"onOptionClick(option)\"\n (keydown.space)=\"onOptionClick(option)\">\n\n {{ option.label }}\n </div>\n }\n }\n\n <!-- No Options Message -->\n @if (!hasAnyOptions()) {\n <div class=\"tn-select-no-options\">\n No options available\n </div>\n }\n </div>\n </div>\n }\n</div>","import type { BaseHarnessFilters } from '@angular/cdk/testing';\nimport { ComponentHarness, HarnessPredicate } from '@angular/cdk/testing';\n\n/**\n * Harness for interacting with tn-icon in tests.\n * Provides filtering by icon name and library for existence checks.\n *\n * @example\n * ```typescript\n * // Check for existence\n * const icon = await loader.getHarness(TnIconHarness);\n *\n * // Find icon by name\n * const folderIcon = await loader.getHarness(\n * TnIconHarness.with({ name: 'folder' })\n * );\n *\n * // Find icon by name and library\n * const mdiIcon = await loader.getHarness(\n * TnIconHarness.with({ name: 'account-circle', library: 'mdi' })\n * );\n *\n * // Check if icon exists\n * const hasIcon = await loader.hasHarness(\n * TnIconHarness.with({ name: 'check' })\n * );\n * ```\n */\nexport class TnIconHarness extends ComponentHarness {\n /**\n * The selector for the host element of a `TnIconComponent` instance.\n */\n static hostSelector = 'tn-icon';\n\n /**\n * Gets a `HarnessPredicate` that can be used to search for an icon\n * with specific attributes.\n *\n * @param options Options for filtering which icon instances are considered a match.\n * @returns A `HarnessPredicate` configured with the given options.\n *\n * @example\n * ```typescript\n * // Find icon by name\n * const icon = await loader.getHarness(\n * TnIconHarness.with({ name: 'home' })\n * );\n *\n * // Find icon by library\n * const customIcon = await loader.getHarness(\n * TnIconHarness.with({ library: 'custom' })\n * );\n *\n * // Find icon with specific size\n * const largeIcon = await loader.getHarness(\n * TnIconHarness.with({ size: 'lg' })\n * );\n * ```\n */\n static with(options: IconHarnessFilters = {}) {\n return new HarnessPredicate(TnIconHarness, options)\n .addOption('name', options.name, async (harness, name) => {\n return (await harness.getName()) === name;\n })\n .addOption('library', options.library, async (harness, library) => {\n return (await harness.getLibrary()) === library;\n })\n .addOption('size', options.size, async (harness, size) => {\n return (await harness.getSize()) === size;\n });\n }\n\n /**\n * Gets the icon name.\n *\n * @returns Promise resolving to the icon name.\n *\n * @example\n * ```typescript\n * const icon = await loader.getHarness(TnIconHarness);\n * const name = await icon.getName();\n * expect(name).toBe('folder');\n * ```\n */\n async getName(): Promise<string | null> {\n const host = await this.host();\n return host.getAttribute('name');\n }\n\n /**\n * Gets the icon library.\n *\n * @returns Promise resolving to the icon library.\n *\n * @example\n * ```typescript\n * const icon = await loader.getHarness(TnIconHarness);\n * const library = await icon.getLibrary();\n * expect(library).toBe('mdi');\n * ```\n */\n async getLibrary(): Promise<string | null> {\n const host = await this.host();\n return host.getAttribute('library');\n }\n\n /**\n * Gets the icon size.\n *\n * @returns Promise resolving to the icon size.\n *\n * @example\n * ```typescript\n * const icon = await loader.getHarness(TnIconHarness);\n * const size = await icon.getSize();\n * expect(size).toBe('lg');\n * ```\n */\n async getSize(): Promise<string | null> {\n const host = await this.host();\n return host.getAttribute('size');\n }\n\n /**\n * Gets the icon color.\n *\n * @returns Promise resolving to the icon color.\n *\n * @example\n * ```typescript\n * const icon = await loader.getHarness(TnIconHarness);\n * const color = await icon.getColor();\n * expect(color).toBe('primary');\n * ```\n */\n async getColor(): Promise<string | null> {\n const host = await this.host();\n return host.getAttribute('color');\n }\n}\n\n/**\n * A set of criteria that can be used to filter a list of `TnIconHarness` instances.\n */\nexport interface IconHarnessFilters extends BaseHarnessFilters {\n /** Filters by icon name. */\n name?: string;\n /** Filters by icon library (material, mdi, custom, lucide). */\n library?: string;\n /** Filters by icon size (xs, sm, md, lg, xl). */\n size?: string;\n}\n","/**\n * Marks an icon name for inclusion in the TrueNAS UI sprite generation.\n *\n * This function serves two purposes:\n * 1. At runtime: Applies library-specific prefixes (e.g., mdi-, app-)\n * 2. At build time: Marker for the scanner to detect icons for sprite inclusion\n *\n * Use this when icon names are computed dynamically or come from variables,\n * to ensure they're included in the sprite at build time.\n *\n * @example\n * // Static icon name - automatically detected from template\n * <tn-icon name=\"folder\"></tn-icon>\n *\n * @example\n * // Dynamic MDI icon\n * const iconName = condition ? tnIconMarker(\"pencil\", \"mdi\") : tnIconMarker(\"delete\", \"mdi\");\n * <tn-icon [name]=\"iconName\"></tn-icon>\n *\n * @example\n * // Dynamic custom icon (consumer's own icon)\n * const logo = tnIconMarker(\"your-logo-name\", \"custom\");\n * <tn-icon [name]=\"logo\"></tn-icon>\n *\n * @example\n * // Array of dynamic icons\n * const actions = [\n * { name: \"Save\", icon: tnIconMarker(\"content-save\", \"mdi\") },\n * { name: \"Cancel\", icon: tnIconMarker(\"close\", \"mdi\") }\n * ];\n *\n * @param iconName - The icon name to mark for sprite inclusion\n * @param library - Optional library type: 'mdi', 'material', or 'custom'\n * @returns The icon name with appropriate prefix applied\n * @public\n */\nexport function tnIconMarker(\n iconName: string,\n library?: 'mdi' | 'material' | 'custom'\n): string {\n // Apply library-specific prefixes\n if (library === 'mdi' && !iconName.startsWith('mdi-')) {\n return `mdi-${iconName}`;\n }\n if (library === 'custom' && !iconName.startsWith('app-')) {\n return `app-${iconName}`;\n }\n if (library === 'material' && !iconName.startsWith('mat-')) {\n return `mat-${iconName}`;\n }\n return iconName;\n}\n\n/**\n * INTERNAL LIBRARY USE ONLY\n *\n * Marks an icon name for inclusion in the sprite generation with library namespace.\n * This function MUST be used by library component code for custom icons.\n *\n * The TypeScript type enforces that the icon name starts with 'tn-' prefix,\n * which reserves this namespace exclusively for library-provided custom icons.\n *\n * @example\n * ```typescript\n * // ✅ Correct - Library component code\n * const icon = libIconMarker('tn-dataset');\n *\n * // ❌ Wrong - Will cause TypeScript error\n * const icon = libIconMarker('dataset');\n * ```\n *\n * @param iconName - The icon name with 'tn-' prefix (enforced by TypeScript)\n * @returns The same icon name (identity function)\n * @internal\n */\nexport function libIconMarker(iconName: `tn-${string}`): string {\n return iconName;\n}\n","/**\n * Lucide Icons Integration Helper\n * \n * This helper provides easy integration with Lucide icons.\n * Usage:\n * \n * ```typescript\n * import { setupLucideIntegration } from '@truenas/ui-components';\n * import * as LucideIcons from 'lucide';\n * \n * // In your app.module.ts or main.ts\n * setupLucideIntegration(LucideIcons);\n * \n * // Now you can use lucide icons in templates:\n * // <tn-icon name=\"lucide:home\"></tn-icon>\n * // <tn-icon name=\"lucide:user-circle\"></tn-icon>\n * ```\n */\n\nimport { inject } from '@angular/core';\nimport type { IconLibrary } from '../icon-registry.service';\nimport { TnIconRegistryService } from '../icon-registry.service';\n\nexport interface LucideIconOptions {\n size?: number;\n color?: string;\n strokeWidth?: number;\n fill?: string;\n stroke?: string;\n}\n\n/**\n * Set up Lucide icons integration with the icon registry\n * \n * @param lucideIcons - The Lucide icons object (import * as LucideIcons from 'lucide')\n * @param defaultOptions - Default options for all Lucide icons\n * \n * @example\n * ```typescript\n * import * as LucideIcons from 'lucide';\n * import { setupLucideIntegration } from '@truenas/ui-components';\n * \n * setupLucideIntegration(LucideIcons, {\n * size: 24,\n * strokeWidth: 2,\n * color: 'currentColor'\n * });\n * ```\n */\nexport function setupLucideIntegration(\n lucideIcons: Record<string, unknown>,\n defaultOptions: LucideIconOptions = {}\n): void {\n const registry = inject(TnIconRegistryService);\n \n const lucideLibrary: IconLibrary = {\n name: 'lucide',\n resolver: (iconName: string, options?: unknown) => {\n const typedOptions = (options as LucideIconOptions) || {};\n // Convert kebab-case to PascalCase (home-icon -> HomeIcon)\n const pascalCase = iconName\n .split('-')\n .map(part => part.charAt(0).toUpperCase() + part.slice(1))\n .join('');\n\n const iconFunction = lucideIcons[pascalCase];\n\n if (iconFunction && typeof iconFunction === 'function') {\n try {\n // Merge default options with provided options\n const mergedOptions = {\n size: 24,\n color: 'currentColor',\n strokeWidth: 2,\n ...defaultOptions,\n ...typedOptions\n };\n \n // Call the Lucide icon function to get SVG element\n const svgElement = iconFunction(mergedOptions);\n \n if (svgElement && svgElement.outerHTML) {\n return svgElement.outerHTML;\n }\n } catch (error) {\n console.warn(`Failed to render Lucide icon '${iconName}':`, error);\n }\n }\n \n return null;\n },\n defaultOptions\n };\n \n registry.registerLibrary(lucideLibrary);\n}\n\n/**\n * Alternative setup function that allows manual registration\n * Use this if you want more control over which icons are available\n * \n * @example\n * ```typescript\n * import { Home, User, Settings } from 'lucide';\n * import { createLucideLibrary } from '@truenas/ui-components';\n * \n * const lucideLibrary = createLucideLibrary({\n * home: Home,\n * user: User,\n * settings: Settings\n * });\n * \n * // Register manually\n * iconRegistry.registerLibrary(lucideLibrary);\n * ```\n */\nexport function createLucideLibrary(\n icons: Record<string, unknown>,\n defaultOptions: LucideIconOptions = {}\n): IconLibrary {\n return {\n name: 'lucide',\n resolver: (iconName: string, options?: unknown) => {\n const typedOptions = (options as LucideIconOptions) || {};\n const iconFunction = icons[iconName];\n\n if (iconFunction && typeof iconFunction === 'function') {\n try {\n const mergedOptions = {\n size: 24,\n color: 'currentColor',\n strokeWidth: 2,\n ...defaultOptions,\n ...typedOptions\n };\n \n const svgElement = iconFunction(mergedOptions);\n \n if (svgElement && svgElement.outerHTML) {\n return svgElement.outerHTML;\n }\n } catch (error) {\n console.warn(`Failed to render Lucide icon '${iconName}':`, error);\n }\n }\n \n return null;\n },\n defaultOptions\n };\n}\n\n/**\n * Register common Lucide icons individually\n * Useful when you only want specific icons to reduce bundle size\n * \n * @example\n * ```typescript\n * import { Home, User, Settings, Heart, Star } from 'lucide';\n * import { registerLucideIcons } from '@truenas/ui-components';\n * \n * registerLucideIcons({\n * home: Home,\n * user: User,\n * settings: Settings,\n * heart: Heart,\n * star: Star\n * });\n * ```\n */\nexport function registerLucideIcons(icons: Record<string, unknown>): void {\n const registry = inject(TnIconRegistryService);\n \n Object.entries(icons).forEach(([name, iconFunction]) => {\n if (typeof iconFunction === 'function') {\n try {\n const svgElement = iconFunction({\n size: 24,\n color: 'currentColor',\n strokeWidth: 2\n });\n \n if (svgElement && svgElement.outerHTML) {\n registry.registerIcon(`lucide-${name}`, svgElement.outerHTML);\n }\n } catch (error) {\n console.warn(`Failed to register Lucide icon '${name}':`, error);\n }\n }\n });\n}","\nimport { Component, input } from '@angular/core';\n\n@Component({\n selector: 'tn-list',\n standalone: true,\n imports: [],\n templateUrl: './list.component.html',\n styleUrl: './list.component.scss',\n host: {\n 'class': 'tn-list',\n '[class.tn-list--dense]': 'dense()',\n '[class.tn-list--disabled]': 'disabled()',\n 'role': 'list'\n }\n})\nexport class TnListComponent {\n dense = input<boolean>(false);\n disabled = input<boolean>(false);\n}","<ng-content />","\nimport type { AfterContentInit} from '@angular/core';\nimport { ElementRef, Component, input, output, computed, signal, inject } from '@angular/core';\n\n@Component({\n selector: 'tn-list-item',\n standalone: true,\n imports: [],\n templateUrl: './list-item.component.html',\n styleUrl: './list-item.component.scss',\n host: {\n 'class': 'tn-list-item',\n '[class.tn-list-item--disabled]': 'disabled()',\n '[class.tn-list-item--clickable]': 'clickable()',\n '[class.tn-list-item--two-line]': 'hasSecondaryText()',\n '[class.tn-list-item--three-line]': 'hasThirdText()',\n 'role': 'listitem',\n '(click)': 'onClick($event)'\n }\n})\nexport class TnListItemComponent implements AfterContentInit {\n disabled = input<boolean>(false);\n clickable = input<boolean>(false);\n\n itemClick = output<Event>();\n\n protected hasLeadingContent = signal<boolean>(false);\n protected hasSecondaryTextContent = signal<boolean>(false);\n protected hasTrailingContent = signal<boolean>(false);\n protected hasPrimaryTextDirective = signal<boolean>(false);\n\n private elementRef = inject(ElementRef);\n\n ngAfterContentInit(): void {\n this.checkContentProjection();\n }\n\n private checkContentProjection(): void {\n const element = this.elementRef.nativeElement;\n\n // Check for leading content (icons/avatars)\n this.hasLeadingContent.set(!!(\n element.querySelector('[tnListIcon]') ||\n element.querySelector('[tnListAvatar]')\n ));\n\n // Check for secondary text content\n this.hasSecondaryTextContent.set(!!(\n element.querySelector('[tnListItemLine]') ||\n element.querySelector('[tnListItemSecondary]')\n ));\n\n // Check for trailing content\n this.hasTrailingContent.set(!!element.querySelector('[tnListItemTrailing]'));\n\n // Check for primary text directive\n this.hasPrimaryTextDirective.set(!!(\n element.querySelector('[tnListItemTitle]') ||\n element.querySelector('[tnListItemPrimary]')\n ));\n }\n\n hasSecondaryText = computed(() => {\n return this.hasSecondaryTextContent();\n });\n\n hasThirdText = computed(() => {\n // For now, we'll consider third line as having more than one secondary line\n const element = this.elementRef.nativeElement;\n const secondaryElements = element.querySelectorAll('[tnListItemLine], [tnListItemSecondary]');\n return secondaryElements.length > 1;\n });\n\n onClick(event: Event): void {\n if (!this.disabled() && this.clickable()) {\n this.itemClick.emit(event);\n }\n }\n}","<div class=\"tn-list-item__content\">\n <!-- Leading icon/avatar slot -->\n @if (hasLeadingContent()) {\n <div class=\"tn-list-item__leading\">\n <ng-content select=\"[tnListIcon], [tnListAvatar]\" />\n </div>\n }\n\n <!-- Text content -->\n <div class=\"tn-list-item__text\">\n <!-- Primary text -->\n <div class=\"tn-list-item__primary-text\">\n <ng-content select=\"[tnListItemTitle], [tnListItemPrimary]\" />\n @if (!hasPrimaryTextDirective()) {\n <ng-content />\n }\n </div>\n\n <!-- Secondary text -->\n @if (hasSecondaryTextContent()) {\n <div class=\"tn-list-item__secondary-text\">\n <ng-content select=\"[tnListItemLine], [tnListItemSecondary]\" />\n </div>\n }\n </div>\n\n <!-- Trailing content slot -->\n @if (hasTrailingContent()) {\n <div class=\"tn-list-item__trailing\">\n <ng-content select=\"[tnListItemTrailing]\" />\n </div>\n }\n</div>","\nimport { Component, input } from '@angular/core';\n\n@Component({\n selector: 'tn-list-subheader',\n standalone: true,\n imports: [],\n templateUrl: './list-subheader.component.html',\n styleUrl: './list-subheader.component.scss',\n host: {\n 'class': 'tn-list-subheader',\n '[class.tn-list-subheader--inset]': 'inset()',\n 'role': 'heading',\n 'aria-level': '3'\n }\n})\nexport class TnListSubheaderComponent {\n inset = input<boolean>(false);\n}","<ng-content />","import { Directive } from '@angular/core';\n\n@Directive({\n selector: '[tnListIcon]',\n standalone: true,\n host: {\n 'class': 'tn-list-icon'\n }\n})\nexport class TnListIconDirective {}\n\n@Directive({\n selector: '[tnListAvatar]',\n standalone: true,\n host: {\n 'class': 'tn-list-avatar'\n }\n})\nexport class TnListAvatarDirective {}\n\n@Directive({\n selector: '[tnListItemTitle]',\n standalone: true,\n host: {\n 'class': 'tn-list-item-title'\n }\n})\nexport class TnListItemTitleDirective {}\n\n@Directive({\n selector: '[tnListItemLine]',\n standalone: true,\n host: {\n 'class': 'tn-list-item-line'\n }\n})\nexport class TnListItemLineDirective {}\n\n@Directive({\n selector: '[tnListItemPrimary]',\n standalone: true,\n host: {\n 'class': 'tn-list-item-primary'\n }\n})\nexport class TnListItemPrimaryDirective {}\n\n@Directive({\n selector: '[tnListItemSecondary]',\n standalone: true,\n host: {\n 'class': 'tn-list-item-secondary'\n }\n})\nexport class TnListItemSecondaryDirective {}\n\n@Directive({\n selector: '[tnListItemTrailing]',\n standalone: true,\n host: {\n 'class': 'tn-list-item-trailing'\n }\n})\nexport class TnListItemTrailingDirective {}\n\n@Directive({\n selector: 'tn-divider, [tnDivider]',\n standalone: true,\n host: {\n 'class': 'tn-divider',\n 'role': 'separator'\n }\n})\nexport class TnDividerDirective {}","\nimport { Component, input } from '@angular/core';\n\n@Component({\n selector: 'tn-divider',\n standalone: true,\n imports: [],\n templateUrl: './divider.component.html',\n styleUrl: './divider.component.scss',\n host: {\n 'class': 'tn-divider',\n '[class.tn-divider--vertical]': 'vertical()',\n '[class.tn-divider--inset]': 'inset()',\n 'role': 'separator',\n '[attr.aria-orientation]': 'vertical() ? \"vertical\" : \"horizontal\"'\n }\n})\nexport class TnDividerComponent {\n vertical = input<boolean>(false);\n inset = input<boolean>(false);\n}","","\nimport type { AfterContentInit} from '@angular/core';\nimport { ElementRef, ChangeDetectorRef, inject } from '@angular/core';\nimport { Component, input, output, computed, signal, HostListener } from '@angular/core';\nimport { TnCheckboxComponent } from '../checkbox/checkbox.component';\n\n@Component({\n selector: 'tn-list-option',\n standalone: true,\n imports: [TnCheckboxComponent],\n templateUrl: './list-option.component.html',\n styleUrl: './list-option.component.scss',\n host: {\n 'class': 'tn-list-option',\n '[class.tn-list-option--selected]': 'effectiveSelected()',\n '[class.tn-list-option--disabled]': 'effectiveDisabled()',\n 'role': 'option',\n '[attr.aria-selected]': 'effectiveSelected()',\n '[attr.aria-disabled]': 'effectiveDisabled()'\n }\n})\nexport class TnListOptionComponent implements AfterContentInit {\n cdr = inject(ChangeDetectorRef);\n elementRef = inject(ElementRef);\n\n value = input<unknown>(undefined);\n selected = input<boolean>(false);\n disabled = input<boolean>(false);\n color = input<'primary' | 'accent' | 'warn'>('primary');\n\n selectionChange = output<boolean>();\n\n // Reference to parent selection list (set by parent)\n selectionList?: { onOptionSelectionChange: () => void };\n\n // Internal state for tracking selection (for uncontrolled usage)\n // Made public so parent tn-selection-list can control it\n internalSelected = signal<boolean | null>(null);\n internalDisabled = signal<boolean | null>(null);\n internalColor = signal<'primary' | 'accent' | 'warn' | null>(null);\n\n // Effective selected state (prefers internal state if set, otherwise uses input)\n effectiveSelected = computed(() => {\n const internal = this.internalSelected();\n return internal !== null ? internal : this.selected();\n });\n\n effectiveDisabled = computed(() => {\n const internal = this.internalDisabled();\n return internal !== null ? internal : this.disabled();\n });\n\n effectiveColor = computed(() => {\n const internal = this.internalColor();\n return internal !== null ? internal : this.color();\n });\n\n protected hasLeadingContent = signal<boolean>(false);\n protected hasSecondaryTextContent = signal<boolean>(false);\n protected hasPrimaryTextDirective = signal<boolean>(false);\n\n ngAfterContentInit(): void {\n this.checkContentProjection();\n }\n\n private checkContentProjection(): void {\n const element = this.elementRef.nativeElement;\n\n // Check for leading content (icons/avatars)\n this.hasLeadingContent.set(!!(\n element.querySelector('[tnListIcon]') ||\n element.querySelector('[tnListAvatar]')\n ));\n\n // Check for secondary text content\n this.hasSecondaryTextContent.set(!!(\n element.querySelector('[tnListItemLine]') ||\n element.querySelector('[tnListItemSecondary]')\n ));\n\n // Check for primary text directive\n this.hasPrimaryTextDirective.set(!!(\n element.querySelector('[tnListItemTitle]') ||\n element.querySelector('[tnListItemPrimary]')\n ));\n }\n\n @HostListener('click', ['$event'])\n onClick(_event: Event): void {\n if (this.effectiveDisabled()) {\n return;\n }\n\n this.toggle();\n }\n\n @HostListener('keydown.space', ['$event'])\n @HostListener('keydown.enter', ['$event'])\n onKeydown(event: Event): void {\n if (this.effectiveDisabled()) {\n return;\n }\n\n event.preventDefault();\n this.toggle();\n }\n\n toggle(): void {\n if (this.effectiveDisabled()) {\n return;\n }\n\n const newSelected = !this.effectiveSelected();\n this.internalSelected.set(newSelected);\n this.cdr.detectChanges();\n this.selectionChange.emit(newSelected);\n\n // Notify parent selection list\n if (this.selectionList) {\n this.selectionList.onOptionSelectionChange();\n }\n }\n}","<div class=\"tn-list-option__content\">\n <!-- Leading content (icons, avatars) -->\n @if (hasLeadingContent()) {\n <div class=\"tn-list-option__leading\">\n <ng-content select=\"[tnListIcon], [tnListAvatar]\" />\n </div>\n }\n\n <!-- Text content -->\n <div class=\"tn-list-option__text\">\n <div class=\"tn-list-option__primary-text\">\n <ng-content select=\"[tnListItemTitle], [tnListItemPrimary]\" />\n @if (!hasPrimaryTextDirective()) {\n <ng-content />\n }\n </div>\n\n @if (hasSecondaryTextContent()) {\n <div class=\"tn-list-option__secondary-text\">\n <ng-content select=\"[tnListItemLine], [tnListItemSecondary]\" />\n </div>\n }\n </div>\n\n <!-- Checkbox on the right -->\n <div class=\"tn-list-option__checkbox\">\n <tn-checkbox\n tabindex=\"-1\"\n [checked]=\"effectiveSelected()\"\n [disabled]=\"effectiveDisabled()\"\n [hideLabel]=\"true\"\n (click)=\"$event.stopPropagation()\" />\n </div>\n</div>","\nimport { Component, input, output, contentChildren, signal, computed, forwardRef, effect } from '@angular/core';\nimport type { ControlValueAccessor} from '@angular/forms';\nimport { NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { TnListOptionComponent } from '../list-option/list-option.component';\n\nexport interface TnSelectionChange {\n source: TnSelectionListComponent;\n options: TnListOptionComponent[];\n}\n\n@Component({\n selector: 'tn-selection-list',\n standalone: true,\n imports: [],\n templateUrl: './selection-list.component.html',\n styleUrl: './selection-list.component.scss',\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => TnSelectionListComponent),\n multi: true\n }\n ],\n host: {\n 'class': 'tn-selection-list',\n '[class.tn-selection-list--dense]': 'dense()',\n '[class.tn-selection-list--disabled]': 'isDisabled()',\n 'role': 'listbox',\n '[attr.aria-multiselectable]': 'multiple()'\n }\n})\nexport class TnSelectionListComponent implements ControlValueAccessor {\n dense = input<boolean>(false);\n disabled = input<boolean>(false);\n multiple = input<boolean>(true);\n color = input<'primary' | 'accent' | 'warn'>('primary');\n\n selectionChange = output<TnSelectionChange>();\n\n options = contentChildren(TnListOptionComponent, { descendants: true });\n\n private formDisabled = signal<boolean>(false);\n\n // Computed disabled state (combines input and form state)\n isDisabled = computed(() => this.disabled() || this.formDisabled());\n\n private onChange = (_: unknown[]) => {};\n private onTouched = () => {};\n\n constructor() {\n // Effect to update options when they change\n effect(() => {\n const opts = this.options();\n const currentColor = this.color();\n opts.forEach(option => {\n option.selectionList = this;\n option.internalColor.set(currentColor);\n });\n });\n }\n\n // ControlValueAccessor implementation\n writeValue(value: unknown[]): void {\n if (value) {\n const opts = this.options();\n opts.forEach(option => {\n option.internalSelected.set(value.includes(option.value()));\n });\n }\n }\n\n registerOnChange(fn: (value: unknown[]) => void): void {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n\n setDisabledState(isDisabled: boolean): void {\n this.formDisabled.set(isDisabled);\n const opts = this.options();\n opts.forEach(option => {\n option.internalDisabled.set(isDisabled);\n });\n }\n\n onOptionSelectionChange(): void {\n this.onTouched();\n const opts = this.options();\n const selectedValues = opts\n .filter(option => option.effectiveSelected())\n .map(option => option.value());\n\n this.onChange(selectedValues);\n\n this.selectionChange.emit({\n source: this,\n options: opts.filter(option => option.effectiveSelected())\n });\n }\n\n get selectedOptions(): TnListOptionComponent[] {\n const opts = this.options();\n return opts.filter(option => option.effectiveSelected());\n }\n}","<ng-content />","import { Directive, TemplateRef, input, contentChild, inject } from '@angular/core';\n\n@Directive({\n selector: '[tnHeaderCellDef]',\n standalone: true\n})\nexport class TnHeaderCellDefDirective {\n template = inject(TemplateRef<unknown>);\n}\n\n@Directive({\n selector: '[tnCellDef]',\n standalone: true\n})\nexport class TnCellDefDirective {\n template = inject(TemplateRef<unknown>);\n}\n\n@Directive({\n selector: '[tnColumnDef]',\n standalone: true,\n exportAs: 'tnColumnDef'\n})\nexport class TnTableColumnDirective {\n name = input.required<string>({ alias: 'tnColumnDef' });\n\n headerTemplate = contentChild(TnHeaderCellDefDirective, { read: TemplateRef });\n\n cellTemplate = contentChild(TnCellDefDirective, { read: TemplateRef });\n}","import { CommonModule } from '@angular/common';\nimport { ChangeDetectorRef, Component, input, contentChildren, computed, effect, inject } from '@angular/core';\nimport { TnTableColumnDirective } from '../table-column/table-column.directive';\n\nexport interface TnTableDataSource<T = unknown> {\n data?: T[];\n connect?(): T[];\n disconnect?(): void;\n}\n\n@Component({\n selector: 'tn-table',\n standalone: true,\n imports: [CommonModule],\n templateUrl: './table.component.html',\n styleUrl: './table.component.scss',\n host: {\n 'class': 'tn-table'\n }\n})\nexport class TnTableComponent<T = unknown> {\n dataSource = input<TnTableDataSource<T> | T[]>([]);\n displayedColumns = input<string[]>([]);\n\n columnDefs = contentChildren(TnTableColumnDirective);\n\n private columnDefMap = new Map<string, TnTableColumnDirective>();\n\n private cdr = inject(ChangeDetectorRef);\n\n constructor() {\n // Effect to process column defs whenever they change\n effect(() => {\n const columns = this.columnDefs();\n this.processColumnDefs(columns);\n });\n }\n\n private processColumnDefs(columns: readonly TnTableColumnDirective[]): void {\n this.columnDefMap.clear();\n columns.forEach(columnDef => {\n const name = columnDef.name();\n if (name) {\n this.columnDefMap.set(name, columnDef);\n }\n });\n this.cdr.detectChanges();\n }\n\n data = computed(() => {\n const source = this.dataSource();\n if (Array.isArray(source)) {\n return source;\n }\n return source?.data || source?.connect?.() || [];\n });\n\n getColumnDef(columnName: string): TnTableColumnDirective | undefined {\n return this.columnDefMap.get(columnName);\n }\n\n trackByIndex(index: number): number {\n return index;\n }\n\n getCellValue(row: T, column: string): unknown {\n return (row as Record<string, unknown>)[column];\n }\n}","<table class=\"tn-table__table\">\n <!-- Header Row -->\n <thead class=\"tn-table__header\">\n <tr class=\"tn-table__header-row\">\n @for (column of displayedColumns(); track $index) {\n <th\n class=\"tn-table__header-cell\"\n [attr.data-column]=\"column\">\n @if (getColumnDef(column)?.headerTemplate()) {\n <ng-container\n [ngTemplateOutlet]=\"getColumnDef(column)?.headerTemplate() || null\" />\n }\n @if (!getColumnDef(column)?.headerTemplate()) {\n <span>{{ column }}</span>\n }\n </th>\n }\n </tr>\n </thead>\n\n <!-- Data Rows -->\n <tbody class=\"tn-table__body\">\n @for (row of data(); track $index) {\n <tr class=\"tn-table__row\">\n @for (column of displayedColumns(); track $index) {\n <td\n class=\"tn-table__cell\"\n [attr.data-column]=\"column\">\n @if (getColumnDef(column)?.cellTemplate()) {\n <ng-container\n [ngTemplateOutlet]=\"getColumnDef(column)?.cellTemplate() || null\"\n [ngTemplateOutletContext]=\"{ $implicit: row, column: column }\" />\n }\n @if (!getColumnDef(column)?.cellTemplate()) {\n <span>{{ getCellValue(row, column) }}</span>\n }\n </td>\n }\n </tr>\n }\n </tbody>\n</table>","import { DataSource } from '@angular/cdk/collections';\nimport { CdkTree, CdkTreeModule } from '@angular/cdk/tree';\nimport type { FlatTreeControl } from '@angular/cdk/tree';\nimport { ChangeDetectorRef, IterableDiffers, ViewContainerRef, Component, ChangeDetectionStrategy, ViewEncapsulation, inject } from '@angular/core';\nimport type { Observable} from 'rxjs';\nimport { BehaviorSubject, merge } from 'rxjs';\nimport { map } from 'rxjs/operators';\n\n// Re-export CDK Tree types for convenience\nexport { FlatTreeControl } from '@angular/cdk/tree';\nexport { ArrayDataSource } from '@angular/cdk/collections';\n\n/** Flat node with expandable and level information */\nexport interface TnFlatTreeNode<T = unknown> {\n data: T;\n expandable: boolean;\n level: number;\n}\n\n/**\n * Tree flattener to convert normal type of node to node with children & level information.\n */\nexport class TnTreeFlattener<T, F> {\n constructor(\n public transformFunction: (node: T, level: number) => F,\n public getLevel: (node: F) => number,\n public isExpandable: (node: F) => boolean,\n public getChildren: (node: T) => T[] | null | undefined\n ) {}\n\n flattenNodes(structuredData: T[]): F[] {\n const resultNodes: F[] = [];\n structuredData.forEach(node => this._flattenNode(node, 0, resultNodes));\n return resultNodes;\n }\n\n private _flattenNode(node: T, level: number, resultNodes: F[]): void {\n const flatNode = this.transformFunction(node, level);\n resultNodes.push(flatNode);\n\n if (this.isExpandable(flatNode)) {\n const childrenNodes = this.getChildren(node);\n if (childrenNodes) {\n childrenNodes.forEach(child => this._flattenNode(child, level + 1, resultNodes));\n }\n }\n }\n}\n\n/**\n * Data source for flat tree.\n */\nexport class TnTreeFlatDataSource<T, F> extends DataSource<F> {\n private _flattenedData = new BehaviorSubject<F[]>([]);\n private _expandedData = new BehaviorSubject<F[]>([]);\n private _data = new BehaviorSubject<T[]>([]);\n\n constructor(\n private _treeControl: FlatTreeControl<F>,\n private _treeFlattener: TnTreeFlattener<T, F>\n ) {\n super();\n }\n\n get data() { return this._data.value; }\n set data(value: T[]) {\n this._data.next(value);\n this._flattenedData.next(this._treeFlattener.flattenNodes(this.data));\n this._treeControl.dataNodes = this._flattenedData.value;\n }\n\n connect(): Observable<F[]> {\n return merge(\n this._treeControl.expansionModel.changed,\n this._flattenedData\n ).pipe(map(() => {\n this._expandedData.next(this._getExpandedNodesWithLevel());\n return this._expandedData.value;\n }));\n }\n\n disconnect() {}\n\n private _getExpandedNodesWithLevel(): F[] {\n const expandedNodes: F[] = [];\n const flatNodes = this._flattenedData.value;\n\n for (let i = 0; i < flatNodes.length; i++) {\n const node = flatNodes[i];\n expandedNodes.push(node);\n\n if (!this._treeControl.isExpanded(node)) {\n // Skip children if node is not expanded\n const currentLevel = this._treeFlattener.getLevel(node);\n let j = i + 1;\n while (j < flatNodes.length && this._treeFlattener.getLevel(flatNodes[j]) > currentLevel) {\n j++;\n }\n i = j - 1;\n }\n }\n\n return expandedNodes;\n }\n}\n\n@Component({\n selector: 'tn-tree',\n standalone: true,\n imports: [CdkTreeModule],\n exportAs: 'tnTree',\n providers: [\n { provide: CdkTree, useExisting: TnTreeComponent }\n ],\n templateUrl: './tree.component.html',\n styleUrl: './tree.component.scss',\n host: {\n 'class': 'tn-tree',\n 'role': 'tree'\n },\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.Default,\n})\nexport class TnTreeComponent<T, K = T> extends CdkTree<T, K> {\n constructor() {\n super(inject(IterableDiffers), inject(ChangeDetectorRef), inject(ViewContainerRef));\n }\n}","<ng-container cdkTreeNodeOutlet />","import { CdkTree, CdkTreeNode, CDK_TREE_NODE_OUTLET_NODE, CdkTreeModule } from '@angular/cdk/tree';\nimport { ElementRef, ChangeDetectorRef, Component, ChangeDetectionStrategy, ViewEncapsulation, inject } from '@angular/core';\nimport { TnIconComponent } from '../icon/icon.component';\n\n@Component({\n selector: 'tn-tree-node',\n standalone: true,\n imports: [CdkTreeModule, TnIconComponent],\n exportAs: 'tnTreeNode',\n providers: [\n { provide: CdkTreeNode, useExisting: TnTreeNodeComponent }\n ],\n templateUrl: './tree-node.component.html',\n styleUrl: './tree-node.component.scss',\n host: {\n 'class': 'tn-tree-node-wrapper',\n '[attr.aria-level]': 'level + 1',\n '[attr.aria-expanded]': 'isExpandable ? isExpanded : null',\n 'role': 'treeitem'\n },\n encapsulation: ViewEncapsulation.Emulated,\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class TnTreeNodeComponent<T, K = T> extends CdkTreeNode<T, K> {\n constructor() {\n super(\n inject(ElementRef<HTMLElement>),\n inject(CdkTree, { optional: true }),\n inject(CDK_TREE_NODE_OUTLET_NODE, { optional: true }),\n inject(ChangeDetectorRef, { optional: true })\n );\n }\n\n /** The tree node's level in the tree */\n override get level(): number {\n return this._tree?.treeControl?.getLevel ? this._tree.treeControl.getLevel(this.data) : 0;\n }\n\n /** Whether the tree node is expandable */\n override get isExpandable(): boolean {\n return this._tree?.treeControl?.isExpandable ? this._tree.treeControl.isExpandable(this.data) : false;\n }\n\n /** Whether the tree node is expanded */\n override get isExpanded(): boolean {\n return this._tree?.treeControl ? this._tree.treeControl.isExpanded(this.data) : false;\n }\n}","<div class=\"tn-tree-node\"\n cdkTreeNodeToggle\n role=\"treeitem\"\n [class.tn-tree-node--expandable]=\"isExpandable\"\n [attr.aria-level]=\"level + 1\"\n [attr.aria-expanded]=\"isExpandable ? isExpanded : null\"\n [attr.aria-selected]=\"false\"\n [style.cursor]=\"isExpandable ? 'pointer' : 'default'\">\n \n <div class=\"tn-tree-node__content\">\n <!-- Arrow icon for expandable nodes -->\n @if (isExpandable) {\n <div\n class=\"tn-tree-node__toggle\"\n [class.tn-tree-node__toggle--expanded]=\"isExpanded\">\n <tn-icon\n library=\"mdi\"\n size=\"sm\"\n style=\"transition: transform 0.2s ease;\"\n [name]=\"isExpanded ? 'chevron-down' : 'chevron-right'\" />\n </div>\n }\n\n <!-- Spacer for non-expandable nodes -->\n @if (!isExpandable) {\n <div class=\"tn-tree-node__spacer\"></div>\n }\n \n <!-- Node content -->\n <div class=\"tn-tree-node__text\">\n <ng-content />\n </div>\n </div>\n</div>","import { CdkTreeNodeOutlet } from '@angular/cdk/tree';\nimport { Directive } from '@angular/core';\n\n@Directive({\n selector: '[tnTreeNodeOutlet]',\n standalone: true,\n hostDirectives: [{\n directive: CdkTreeNodeOutlet,\n inputs: [],\n outputs: []\n }]\n})\nexport class TnTreeNodeOutletDirective {}","import { CdkTree } from '@angular/cdk/tree';\nimport { CdkNestedTreeNode, CdkTreeNode, CDK_TREE_NODE_OUTLET_NODE, CdkTreeModule } from '@angular/cdk/tree';\nimport { ElementRef, ChangeDetectorRef, Component, ChangeDetectionStrategy, ViewEncapsulation, inject } from '@angular/core';\nimport { TnTreeNodeOutletDirective } from './tree-node-outlet.directive';\nimport { TnIconComponent } from '../icon/icon.component';\n\n@Component({\n selector: 'tn-nested-tree-node',\n standalone: true,\n imports: [CdkTreeModule, TnIconComponent, TnTreeNodeOutletDirective],\n exportAs: 'tnNestedTreeNode',\n providers: [\n { provide: CdkNestedTreeNode, useExisting: TnNestedTreeNodeComponent },\n { provide: CdkTreeNode, useExisting: TnNestedTreeNodeComponent }\n ],\n templateUrl: './nested-tree-node.component.html',\n styleUrl: './nested-tree-node.component.scss',\n host: {\n 'class': 'tn-nested-tree-node-wrapper',\n '[attr.aria-level]': 'level + 1',\n '[attr.aria-expanded]': 'isExpandable ? isExpanded : null',\n 'role': 'treeitem'\n },\n encapsulation: ViewEncapsulation.Emulated,\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class TnNestedTreeNodeComponent<T, K = T> extends CdkNestedTreeNode<T, K> {\n constructor() {\n super(\n inject(ElementRef<HTMLElement>),\n inject(CdkTree, { optional: true }),\n inject(CDK_TREE_NODE_OUTLET_NODE, { optional: true }),\n inject(ChangeDetectorRef, { optional: true })\n );\n }\n\n /** The tree node's level in the tree */\n override get level(): number {\n if (this._tree?.treeControl?.getLevel) {\n // Legacy treeControl approach\n return this._tree.treeControl.getLevel(this.data);\n } else if (this._tree && 'getLevel' in this._tree && typeof (this._tree as { getLevel?: (data: T) => number }).getLevel === 'function') {\n // Modern childrenAccessor approach - use tree's getLevel method\n return (this._tree as { getLevel: (data: T) => number }).getLevel(this.data);\n }\n return 0;\n }\n\n /** Whether the tree node is expandable */\n override get isExpandable(): boolean {\n if (this._tree?.treeControl?.isExpandable) {\n // Legacy treeControl approach\n return this._tree.treeControl.isExpandable(this.data);\n } else if (this._tree && 'childrenAccessor' in this._tree && (this._tree as { childrenAccessor?: (data: T) => T[] | undefined }).childrenAccessor) {\n // Modern childrenAccessor approach\n const childrenAccessor = (this._tree as { childrenAccessor: (data: T) => T[] | undefined }).childrenAccessor;\n const children = childrenAccessor(this.data);\n // Handle both array and observable results\n if (Array.isArray(children)) {\n return children.length > 0;\n }\n return false; // For now, don't handle Observable case\n }\n return false;\n }\n\n /** Whether the tree node is expanded */\n override get isExpanded(): boolean {\n if (this._tree?.treeControl) {\n // Legacy treeControl approach\n return this._tree.treeControl.isExpanded(this.data);\n } else if (this._tree && 'isExpanded' in this._tree && typeof (this._tree as { isExpanded?: (data: T) => boolean }).isExpanded === 'function') {\n // Modern childrenAccessor approach - use tree's isExpanded method\n return (this._tree as { isExpanded: (data: T) => boolean }).isExpanded(this.data);\n }\n return false;\n }\n}\n","<div class=\"tn-nested-tree-node__content\">\n <!-- Toggle button for expandable nodes (provided by component) -->\n @if (isExpandable) {\n <button\n class=\"tn-nested-tree-node__toggle\"\n cdkTreeNodeToggle\n type=\"button\"\n [class.tn-nested-tree-node__toggle--expanded]=\"isExpanded\"\n [attr.aria-label]=\"'Toggle node'\">\n <tn-icon\n library=\"mdi\"\n size=\"sm\"\n style=\"transition: transform 0.2s ease;\"\n [name]=\"isExpanded ? 'chevron-down' : 'chevron-right'\" />\n </button>\n }\n\n <!-- Spacer for non-expandable nodes to maintain alignment -->\n @if (!isExpandable) {\n <div class=\"tn-nested-tree-node__spacer\"></div>\n }\n\n <!-- Consumer content -->\n <ng-content />\n</div>\n\n<!-- Children container -->\n@if (isExpandable) {\n <div class=\"tn-nested-tree-node-container\" role=\"group\" [class.tn-tree-invisible]=\"!isExpanded\">\n <ng-content select=\"[slot=children]\" />\n </div>\n}","export enum ModifierKeys {\n COMMAND = '⌘',\n CMD = '⌘',\n CTRL = 'Ctrl',\n CONTROL = 'Ctrl',\n ALT = '⌥',\n OPTION = '⌥',\n OPT = '⌥',\n SHIFT = '⇧',\n META = '⌘',\n SUPER = '⌘',\n}\n\nexport enum WindowsModifierKeys {\n CTRL = 'Ctrl',\n CONTROL = 'Ctrl',\n ALT = 'Alt',\n SHIFT = 'Shift',\n WIN = 'Win',\n WINDOWS = 'Win',\n}\n\nexport enum LinuxModifierKeys {\n CTRL = 'Ctrl',\n CONTROL = 'Ctrl',\n ALT = 'Alt',\n SHIFT = 'Shift',\n SUPER = 'Super',\n META = 'Meta',\n}\n\nexport type PlatformType = 'mac' | 'windows' | 'linux' | 'auto';","export enum CommonShortcuts {\n // File operations\n NEW = '⌘N',\n OPEN = '⌘O',\n SAVE = '⌘S',\n SAVE_AS = '⇧⌘S',\n PRINT = '⌘P',\n CLOSE = '⌘W',\n QUIT = '⌘Q',\n \n // Edit operations\n UNDO = '⌘Z',\n REDO = '⇧⌘Z',\n CUT = '⌘X',\n COPY = '⌘C',\n PASTE = '⌘V',\n SELECT_ALL = '⌘A',\n \n // Search operations\n FIND = '⌘F',\n FIND_NEXT = '⌘G',\n FIND_PREVIOUS = '⇧⌘G',\n REPLACE = '⌥⌘F',\n \n // View operations\n ZOOM_IN = '⌘=',\n ZOOM_OUT = '⌘-',\n ZOOM_RESET = '⌘0',\n FULL_SCREEN = '⌃⌘F',\n \n // Navigation\n BACK = '⌘[',\n FORWARD = '⌘]',\n RELOAD = '⌘R',\n HOME = '⌘H',\n \n // Window operations\n NEW_WINDOW = '⇧⌘N',\n NEW_TAB = '⌘T',\n CLOSE_TAB = '⌘W',\n MINIMIZE = '⌘M',\n \n // Application\n PREFERENCES = '⌘,',\n HELP = '⌘?',\n ABOUT = '⌘I',\n}\n\nexport enum WindowsShortcuts {\n // File operations\n NEW = 'Ctrl+N',\n OPEN = 'Ctrl+O',\n SAVE = 'Ctrl+S',\n SAVE_AS = 'Ctrl+Shift+S',\n PRINT = 'Ctrl+P',\n CLOSE = 'Ctrl+W',\n QUIT = 'Alt+F4',\n \n // Edit operations\n UNDO = 'Ctrl+Z',\n REDO = 'Ctrl+Y',\n CUT = 'Ctrl+X',\n COPY = 'Ctrl+C',\n PASTE = 'Ctrl+V',\n SELECT_ALL = 'Ctrl+A',\n \n // Search operations\n FIND = 'Ctrl+F',\n FIND_NEXT = 'F3',\n FIND_PREVIOUS = 'Shift+F3',\n REPLACE = 'Ctrl+H',\n \n // View operations\n ZOOM_IN = 'Ctrl+=',\n ZOOM_OUT = 'Ctrl+-',\n ZOOM_RESET = 'Ctrl+0',\n FULL_SCREEN = 'F11',\n \n // Navigation\n BACK = 'Alt+Left',\n FORWARD = 'Alt+Right',\n RELOAD = 'Ctrl+R',\n HOME = 'Alt+Home',\n \n // Window operations\n NEW_WINDOW = 'Ctrl+Shift+N',\n NEW_TAB = 'Ctrl+T',\n CLOSE_TAB = 'Ctrl+W',\n MINIMIZE = 'Win+M',\n \n // Application\n PREFERENCES = 'Ctrl+,',\n HELP = 'F1',\n ABOUT = 'Alt+H+A',\n}\n\nexport enum LinuxShortcuts {\n // File operations\n NEW = 'Ctrl+N',\n OPEN = 'Ctrl+O',\n SAVE = 'Ctrl+S',\n SAVE_AS = 'Ctrl+Shift+S',\n PRINT = 'Ctrl+P',\n CLOSE = 'Ctrl+W',\n QUIT = 'Ctrl+Q',\n \n // Edit operations\n UNDO = 'Ctrl+Z',\n REDO = 'Ctrl+Shift+Z',\n CUT = 'Ctrl+X',\n COPY = 'Ctrl+C',\n PASTE = 'Ctrl+V',\n SELECT_ALL = 'Ctrl+A',\n \n // Search operations\n FIND = 'Ctrl+F',\n FIND_NEXT = 'Ctrl+G',\n FIND_PREVIOUS = 'Ctrl+Shift+G',\n REPLACE = 'Ctrl+H',\n \n // View operations\n ZOOM_IN = 'Ctrl+=',\n ZOOM_OUT = 'Ctrl+-',\n ZOOM_RESET = 'Ctrl+0',\n FULL_SCREEN = 'F11',\n \n // Navigation\n BACK = 'Alt+Left',\n FORWARD = 'Alt+Right',\n RELOAD = 'Ctrl+R',\n HOME = 'Alt+Home',\n \n // Window operations\n NEW_WINDOW = 'Ctrl+Shift+N',\n NEW_TAB = 'Ctrl+T',\n CLOSE_TAB = 'Ctrl+W',\n MINIMIZE = 'Ctrl+H',\n \n // Application\n PREFERENCES = 'Ctrl+,',\n HELP = 'F1',\n ABOUT = 'Ctrl+I',\n}","import type { PlatformType } from '../enums/modifier-keys.enum';\nimport { ModifierKeys, WindowsModifierKeys, LinuxModifierKeys } from '../enums/modifier-keys.enum';\n\nexport class ShortcutBuilder {\n private keysList: string[] = [];\n private targetPlatform: PlatformType = 'mac';\n\n constructor(platform: PlatformType = 'mac') {\n this.targetPlatform = platform;\n }\n\n /**\n * Add Command key (⌘ on Mac, Ctrl on Windows/Linux)\n */\n command(): ShortcutBuilder {\n switch (this.targetPlatform) {\n case 'mac':\n this.keysList.push(ModifierKeys.COMMAND);\n break;\n case 'windows':\n this.keysList.push(WindowsModifierKeys.CTRL);\n break;\n case 'linux':\n this.keysList.push(LinuxModifierKeys.CTRL);\n break;\n default:\n this.keysList.push(ModifierKeys.COMMAND);\n }\n return this;\n }\n\n /**\n * Add Ctrl key\n */\n ctrl(): ShortcutBuilder {\n switch (this.targetPlatform) {\n case 'mac':\n this.keysList.push('⌃');\n break;\n case 'windows':\n this.keysList.push(WindowsModifierKeys.CTRL);\n break;\n case 'linux':\n this.keysList.push(LinuxModifierKeys.CTRL);\n break;\n default:\n this.keysList.push('⌃');\n }\n return this;\n }\n\n /**\n * Add Shift key (⇧ on Mac, Shift on Windows/Linux)\n */\n shift(): ShortcutBuilder {\n switch (this.targetPlatform) {\n case 'mac':\n this.keysList.push(ModifierKeys.SHIFT);\n break;\n case 'windows':\n this.keysList.push(WindowsModifierKeys.SHIFT);\n break;\n case 'linux':\n this.keysList.push(LinuxModifierKeys.SHIFT);\n break;\n default:\n this.keysList.push(ModifierKeys.SHIFT);\n }\n return this;\n }\n\n /**\n * Add Alt/Option key (⌥ on Mac, Alt on Windows/Linux)\n */\n alt(): ShortcutBuilder {\n switch (this.targetPlatform) {\n case 'mac':\n this.keysList.push(ModifierKeys.ALT);\n break;\n case 'windows':\n this.keysList.push(WindowsModifierKeys.ALT);\n break;\n case 'linux':\n this.keysList.push(LinuxModifierKeys.ALT);\n break;\n default:\n this.keysList.push(ModifierKeys.ALT);\n }\n return this;\n }\n\n /**\n * Add Option key (alias for alt on Mac)\n */\n option(): ShortcutBuilder {\n return this.alt();\n }\n\n /**\n * Add Windows/Super key\n */\n windows(): ShortcutBuilder {\n switch (this.targetPlatform) {\n case 'mac':\n this.keysList.push(ModifierKeys.COMMAND);\n break;\n case 'windows':\n this.keysList.push(WindowsModifierKeys.WINDOWS);\n break;\n case 'linux':\n this.keysList.push(LinuxModifierKeys.SUPER);\n break;\n default:\n this.keysList.push(ModifierKeys.COMMAND);\n }\n return this;\n }\n\n /**\n * Add a regular key (letter, number, or special key)\n */\n key(key: string): ShortcutBuilder {\n this.keysList.push(key);\n return this;\n }\n\n /**\n * Add multiple keys at once\n */\n keys(...keys: string[]): ShortcutBuilder {\n this.keysList.push(...keys);\n return this;\n }\n\n /**\n * Reset the builder to start over\n */\n reset(): ShortcutBuilder {\n this.keysList = [];\n return this;\n }\n\n /**\n * Build the final shortcut string\n */\n build(): string {\n if (this.keysList.length === 0) {\n return '';\n }\n\n if (this.targetPlatform === 'mac') {\n // Mac style: no separators between keys\n return this.keysList.join('');\n } else {\n // Windows/Linux style: + separators between keys\n return this.keysList.join('+');\n }\n }\n\n /**\n * Get the current keys array (for debugging)\n */\n getKeys(): string[] {\n return [...this.keysList];\n }\n\n /**\n * Get the current platform\n */\n getPlatform(): PlatformType {\n return this.targetPlatform;\n }\n\n /**\n * Change the target platform\n */\n setPlatform(platform: PlatformType): ShortcutBuilder {\n this.targetPlatform = platform;\n return this;\n }\n}\n\n/**\n * Create a new ShortcutBuilder instance\n */\nexport function createShortcut(platform: PlatformType = 'mac'): ShortcutBuilder {\n return new ShortcutBuilder(platform);\n}\n\n/**\n * Quick builder functions for common patterns\n */\nexport const QuickShortcuts = {\n /**\n * Create a simple Command+Key shortcut\n */\n cmd(key: string, platform: PlatformType = 'mac'): string {\n return createShortcut(platform).command().key(key).build();\n },\n\n /**\n * Create a Shift+Command+Key shortcut\n */\n shiftCmd(key: string, platform: PlatformType = 'mac'): string {\n return createShortcut(platform).shift().command().key(key).build();\n },\n\n /**\n * Create an Alt+Command+Key shortcut\n */\n altCmd(key: string, platform: PlatformType = 'mac'): string {\n return createShortcut(platform).alt().command().key(key).build();\n },\n\n /**\n * Create a Ctrl+Key shortcut\n */\n ctrl(key: string, platform: PlatformType = 'mac'): string {\n return createShortcut(platform).ctrl().key(key).build();\n },\n\n /**\n * Create an Alt+Key shortcut\n */\n alt(key: string, platform: PlatformType = 'mac'): string {\n return createShortcut(platform).alt().key(key).build();\n },\n};"," \nexport const kb = 1000;\nexport const Mb = 1000 ** 2;\nexport const Gb = 1000 ** 3;\nexport const Tb = 1000 ** 4;\nexport const Pb = 1000 ** 5;\nexport const Eb = 1000 ** 6;\nexport const Zb = 1000 ** 7;\nexport const Yb = 1000 ** 8;\n"," \nexport const KiB = 1024;\nexport const MiB = 1024 ** 2;\nexport const GiB = 1024 ** 3;\nexport const TiB = 1024 ** 4;\nexport const PiB = 1024 ** 5;\nexport const EiB = 1024 ** 6;\nexport const ZiB = 1024 ** 7;\nexport const YiB = 1024 ** 8;\n","import {\n Gb, kb, Mb, Tb, Pb, Eb, Zb, Yb,\n} from './bits.constant';\nimport {\n GiB, KiB, MiB, PiB, TiB, EiB, ZiB, YiB,\n} from './bytes.constant';\n\nexport function normalizeFileSize(\n value: number,\n baseUnit: 'b' | 'B' = 'B',\n base: 10 | 2 = 2,\n): [formatted: number, unit: string] {\n return base === 10 ? normalizeFileSizeBase10(value, baseUnit) : normalizeFileSizeBase2(value, baseUnit);\n}\n\nexport function buildNormalizedFileSize(\n value: number,\n baseUnit: 'b' | 'B' = 'B',\n base: 10 | 2 = 2,\n): string {\n const [formatted, unit] = normalizeFileSize(value, baseUnit, base);\n return `${formatted} ${unit}`;\n}\n\nexport function convertStringDiskSizeToBytes(input: string): number | null {\n const sizeRegex = /^(\\d+(\\.\\d+)?)([KMGTP](?:i)?(?:B)?)?$/i;\n const match = input.replace(/\\s+/g, '').match(sizeRegex);\n\n if (!match) {\n return null;\n }\n\n const value = parseFloat(match[1]);\n let unit = match[3]?.toUpperCase() || '';\n\n const units = [\n 'B', 'Gb', 'kb', 'Mb', 'Tb', 'Pb', 'Eb', 'Zb', 'Yb',\n 'GiB', 'KiB', 'MiB', 'PiB', 'TiB', 'EiB', 'ZiB', 'YiB',\n ];\n\n unit = units.find((item) => item.toUpperCase().includes(unit.toUpperCase())) || 'B';\n\n const unitMultipliers: Record<string, number> = {\n B: 1,\n KIB: KiB,\n MIB: MiB,\n GIB: GiB,\n TIB: TiB,\n PIB: PiB,\n EIB: EiB,\n ZIB: ZiB,\n YIB: YiB,\n KB: KiB,\n MB: MiB,\n GB: GiB,\n TB: TiB,\n PB: PiB,\n EB: EiB,\n ZB: ZiB,\n YB: YiB,\n };\n\n return value * (unitMultipliers[unit.toUpperCase()] || 1);\n}\n\nfunction normalizeFileSizeBase2(value: number, baseUnit: 'b' | 'B'): [formatted: number, unit: string] {\n let formatted = value;\n let increment = 1;\n while (formatted >= KiB && increment < YiB) {\n increment *= KiB;\n formatted = value / increment;\n }\n formatted = Math.round((formatted + Number.EPSILON) * 100) / 100;\n switch (increment) {\n case KiB:\n return [formatted, 'Ki' + baseUnit];\n case MiB:\n return [formatted, 'Mi' + baseUnit];\n case GiB:\n return [formatted, 'Gi' + baseUnit];\n case TiB:\n return [formatted, 'Ti' + baseUnit];\n case PiB:\n return [formatted, 'Pi' + baseUnit];\n case EiB:\n return [formatted, 'Ei' + baseUnit];\n case ZiB:\n return [formatted, 'Zi' + baseUnit];\n case YiB:\n return [formatted, 'Yi' + baseUnit];\n default:\n return [formatted, baseUnit];\n }\n}\n\nfunction normalizeFileSizeBase10(value: number, baseUnit: 'b' | 'B'): [formatted: number, unit: string] {\n let formatted = value;\n let increment = 1;\n while (formatted >= kb && increment < Yb) {\n increment *= kb;\n formatted = value / increment;\n }\n formatted = Math.round((formatted + Number.EPSILON) * 100) / 100;\n switch (increment) {\n case kb:\n return [formatted, 'k' + baseUnit];\n case Mb:\n return [formatted, 'M' + baseUnit];\n case Gb:\n return [formatted, 'G' + baseUnit];\n case Tb:\n return [formatted, 'T' + baseUnit];\n case Pb:\n return [formatted, 'P' + baseUnit];\n case Eb:\n return [formatted, 'E' + baseUnit];\n case Zb:\n return [formatted, 'Z' + baseUnit];\n case Yb:\n return [formatted, 'Y' + baseUnit];\n default:\n return [formatted, baseUnit];\n }\n}\n","import type { PipeTransform } from '@angular/core';\nimport { Pipe } from '@angular/core';\nimport { buildNormalizedFileSize } from './file-size.utils';\n\n@Pipe({\n name: 'tnFileSize',\n standalone: true,\n})\nexport class FileSizePipe implements PipeTransform {\n transform(value: number): string {\n return buildNormalizedFileSize(value, 'B', 2);\n }\n}\n","import type { PipeTransform } from '@angular/core';\nimport { Pipe } from '@angular/core';\n\n@Pipe({\n name: 'tnStripMntPrefix',\n standalone: true,\n})\nexport class StripMntPrefixPipe implements PipeTransform {\n transform(path: string | null | undefined): string {\n if (!path) {return '';}\n\n if (path.startsWith('/mnt/')) {\n return path.substring(4); // Remove \"/mnt\" prefix -> \"/mnt/foo\" becomes \"/foo\"\n } else if (path === '/mnt') {\n return '/'; // Show root as just \"/\"\n }\n\n return path;\n }\n}\n","import type { PipeTransform } from '@angular/core';\nimport { Pipe } from '@angular/core';\nimport type { PathSegment } from '../../file-picker/file-picker.interfaces';\n\n@Pipe({\n name: 'tnTruncatePath',\n standalone: true,\n})\nexport class TruncatePathPipe implements PipeTransform {\n transform(path: string): PathSegment[] {\n // At root /mnt, show just \"/\"\n if (!path || path === '/mnt') {\n return [{ name: '/', path: '/mnt' }];\n }\n\n // For subdirectories, show \"..\" (parent) and current directory\n const segments: PathSegment[] = [];\n\n // Calculate parent path\n const lastSlashIndex = path.lastIndexOf('/');\n const parentPath = lastSlashIndex > 0 ? path.substring(0, lastSlashIndex) : '/mnt';\n\n // Get current directory name\n const currentDirName = path.substring(lastSlashIndex + 1);\n\n // Add parent navigation (..) and current directory\n segments.push({ name: '..', path: parentPath });\n segments.push({ name: currentDirName, path: path });\n\n return segments;\n }\n}\n","\nimport { Component, input, ChangeDetectionStrategy, ViewEncapsulation, computed } from '@angular/core';\n\nexport type SpinnerMode = 'determinate' | 'indeterminate';\n\n@Component({\n selector: 'tn-spinner',\n standalone: true,\n imports: [],\n templateUrl: './spinner.component.html',\n styleUrls: ['./spinner.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n host: {\n 'class': 'tn-spinner',\n '[class.tn-spinner-indeterminate]': 'mode() === \"indeterminate\"',\n '[class.tn-spinner-determinate]': 'mode() === \"determinate\"',\n '[attr.aria-valuenow]': 'mode() === \"determinate\" ? value() : null',\n '[attr.aria-valuemin]': 'mode() === \"determinate\" ? 0 : null',\n '[attr.aria-valuemax]': 'mode() === \"determinate\" ? 100 : null',\n 'role': 'progressbar',\n '[attr.aria-label]': 'ariaLabel() || null',\n '[attr.aria-labelledby]': 'ariaLabelledby() || null'\n }\n})\nexport class TnSpinnerComponent {\n mode = input<SpinnerMode>('indeterminate');\n value = input<number>(0);\n diameter = input<number>(40);\n strokeWidth = input<number>(4);\n ariaLabel = input<string | null>(null);\n ariaLabelledby = input<string | null>(null);\n\n radius = computed(() => {\n return (this.diameter() - this.strokeWidth()) / 2;\n });\n\n circumference = computed(() => {\n return 2 * Math.PI * this.radius();\n });\n\n strokeDasharray = computed(() => {\n return `${this.circumference()} ${this.circumference()}`;\n });\n\n strokeDashoffset = computed(() => {\n if (this.mode() === 'indeterminate') {\n return 0;\n }\n const progress = Math.max(0, Math.min(100, this.value()));\n return this.circumference() - (progress / 100) * this.circumference();\n });\n\n viewBox = computed(() => {\n const size = this.diameter();\n return `0 0 ${size} ${size}`;\n });\n}","<svg\n class=\"tn-spinner-svg\"\n [attr.width]=\"diameter()\"\n [attr.height]=\"diameter()\"\n [attr.viewBox]=\"viewBox()\">\n <circle\n class=\"tn-spinner-circle\"\n fill=\"none\"\n [attr.cx]=\"diameter() / 2\"\n [attr.cy]=\"diameter() / 2\"\n [attr.r]=\"radius()\"\n [attr.stroke-width]=\"strokeWidth()\"\n [attr.stroke-dasharray]=\"strokeDasharray()\"\n [attr.stroke-dashoffset]=\"strokeDashoffset()\" />\n</svg>","import type { OnInit, OnDestroy, AfterViewInit} from '@angular/core';\nimport { ElementRef, Component, input, ViewEncapsulation, ChangeDetectionStrategy, inject } from '@angular/core';\n\n@Component({\n selector: 'tn-branded-spinner',\n standalone: true,\n templateUrl: './branded-spinner.component.html',\n styleUrls: ['./branded-spinner.component.scss'], \n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n host: {\n 'class': 'tn-branded-spinner',\n 'role': 'progressbar',\n '[attr.aria-label]': 'ariaLabel() || \"Loading...\"'\n }\n})\nexport class TnBrandedSpinnerComponent implements OnInit, OnDestroy, AfterViewInit {\n ariaLabel = input<string | null>(null);\n\n private paths: SVGPathElement[] = [];\n private animationId: number | null = null;\n private isAnimating = false;\n\n // Animation timing constants from reference implementation\n private readonly duration = 300; // time to draw each individual path\n private readonly delayStep = 500; // delay between starting each path\n private readonly cyclePause = 1200; // pause after all paths are drawn\n private readonly emptyPause = 100; // brief pause with no strokes\n\n private elementRef = inject(ElementRef<HTMLElement>);\n\n ngOnInit(): void {\n this.isAnimating = true;\n }\n\n ngAfterViewInit(): void {\n this.paths = Array.from(this.elementRef.nativeElement.querySelectorAll('path.exploded'));\n this.startProgressLoop();\n }\n\n ngOnDestroy(): void {\n this.isAnimating = false;\n if (this.animationId) {\n cancelAnimationFrame(this.animationId);\n this.animationId = null;\n }\n }\n\n private startProgressLoop(): void {\n if (!this.isAnimating || this.paths.length === 0) {return;}\n\n // Reset all paths to invisible\n this.paths.forEach((path) => {\n // Check if getTotalLength exists (not available in Jest/JSDom)\n const length = typeof path.getTotalLength === 'function' ? path.getTotalLength() : 200;\n path.style.strokeDasharray = length.toString();\n path.style.strokeDashoffset = length.toString();\n path.style.fillOpacity = '0';\n });\n\n this.animateSequence();\n }\n\n private animateSequence(): void {\n if (!this.isAnimating) {return;}\n\n let startTime: number;\n\n const animate = (timestamp: number) => {\n if (!this.isAnimating) {return;}\n\n if (!startTime) {startTime = timestamp;}\n const elapsed = timestamp - startTime;\n\n let allDone = true;\n\n // Animate each path with staggered delays\n this.paths.forEach((path, index) => {\n const delay = index * this.delayStep;\n // Check if getTotalLength exists (not available in Jest/JSDom)\n const length = typeof path.getTotalLength === 'function' ? path.getTotalLength() : 200;\n\n if (elapsed < delay) {\n allDone = false;\n return;\n }\n\n const progress = Math.min((elapsed - delay) / this.duration, 1);\n const offset = this.tween(length, 0, progress);\n path.style.strokeDashoffset = offset.toString();\n\n if (progress < 1) {\n allDone = false;\n }\n });\n\n if (!allDone) {\n this.animationId = requestAnimationFrame(animate);\n } else {\n // All paths drawn, now pause with complete logo\n setTimeout(() => {\n if (this.isAnimating) {\n // Hide all paths briefly\n this.paths.forEach((path) => {\n // Check if getTotalLength exists (not available in Jest/JSDom)\n const length = typeof path.getTotalLength === 'function' ? path.getTotalLength() : 200;\n path.style.strokeDashoffset = length.toString();\n });\n\n // Start next cycle after brief empty pause\n setTimeout(() => {\n if (this.isAnimating) {\n this.startProgressLoop();\n }\n }, this.emptyPause);\n }\n }, this.cyclePause);\n }\n };\n\n this.animationId = requestAnimationFrame(animate);\n }\n\n private tween(from: number, to: number, progress: number): number {\n return from + (to - from) * progress;\n }\n}","<div class=\"tn-branded-spinner-container\">\n <svg \n viewBox=\"0 -7 62 62\" \n preserveAspectRatio=\"xMidYMid meet\" \n xmlns=\"http://www.w3.org/2000/svg\"\n class=\"tn-branded-spinner-logo\">\n \n <!-- EXPLODED LOGO PATHS -->\n <path class=\"exploded center\" fill=\"#AFADAE\" d=\"m41.79 24.13-11.26 6.51-11.28-6.51 11.28-6.51 11.26 6.51Z\" />\n <path class=\"exploded top-left\" fill=\"#35BEEB\" d=\"M27.86 0v13.01l-13.93 8.04-11.28-6.5L27.86 0Z\" />\n <path class=\"exploded bottom-right\" fill=\"#35BEEB\" d=\"M61.03 19.16v13.01L33.19 48.25V35.24l27.84-16.08Z\" />\n <path class=\"exploded bottom-left\" fill=\"#0A95D3\" d=\"M27.86 35.24v13L0 32.17v-13l12.59 7.26s.03.02.05.03l15.23 8.79-.01-.01Z\" />\n <path class=\"exploded top-right\" fill=\"#0A95D3\" d=\"m58.38 14.55-11.27 6.51-13.92-8.05V0l25.19 14.55Z\" />\n </svg>\n</div>","\nimport { Component, input, ChangeDetectionStrategy, computed } from '@angular/core';\n\nexport type ProgressBarMode = 'determinate' | 'indeterminate' | 'buffer';\n\n@Component({\n selector: 'tn-progress-bar',\n standalone: true,\n imports: [],\n templateUrl: './progress-bar.component.html',\n styleUrls: ['./progress-bar.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n 'class': 'tn-progress-bar',\n '[class.tn-progress-bar-determinate]': 'mode() === \"determinate\"',\n '[class.tn-progress-bar-indeterminate]': 'mode() === \"indeterminate\"',\n '[class.tn-progress-bar-buffer]': 'mode() === \"buffer\"',\n 'role': 'progressbar',\n '[attr.aria-valuenow]': 'mode() === \"determinate\" ? value() : null',\n '[attr.aria-valuemin]': 'mode() === \"determinate\" ? 0 : null',\n '[attr.aria-valuemax]': 'mode() === \"determinate\" ? 100 : null',\n '[attr.aria-label]': 'ariaLabel() || null',\n '[attr.aria-labelledby]': 'ariaLabelledby() || null'\n }\n})\nexport class TnProgressBarComponent {\n mode = input<ProgressBarMode>('determinate');\n value = input<number>(0);\n bufferValue = input<number>(0);\n ariaLabel = input<string | null>(null);\n ariaLabelledby = input<string | null>(null);\n\n /**\n * Gets the transform value for the primary progress bar\n */\n primaryTransform = computed(() => {\n if (this.mode() === 'determinate' || this.mode() === 'buffer') {\n const clampedValue = Math.max(0, Math.min(100, this.value()));\n const scale = clampedValue / 100;\n return `scaleX(${scale})`;\n }\n // For indeterminate mode, don't apply inline transform - CSS animation handles it\n if (this.mode() === 'indeterminate') {\n return '';\n }\n return 'scaleX(0)';\n });\n\n /**\n * Gets the positioning and size for the buffer dots animation\n */\n bufferStyles = computed(() => {\n if (this.mode() === 'buffer') {\n const buffer = Math.max(0, Math.min(100, this.bufferValue()));\n\n // Buffer takes up bufferValue% of total width, positioned from right\n return {\n width: `${buffer}%`,\n right: '0px'\n };\n }\n return { width: '0%', right: '0px' };\n });\n\n /**\n * Gets the transform value for the buffer progress bar (deprecated - use bufferStyles)\n */\n bufferTransform = computed(() => {\n return 'scaleX(0)'; // Hide the old buffer bar\n });\n}","<!-- Background/buffer layer -->\n<div class=\"tn-progress-bar-buffer\" aria-hidden=\"true\">\n <!-- Buffer bar hidden in new implementation -->\n <!-- Buffer dots for buffer mode -->\n @if (mode() === 'buffer') {\n <div class=\"tn-progress-bar-buffer-dots\"\n [style.width]=\"bufferStyles().width\"\n [style.right]=\"bufferStyles().right\"></div>\n }\n</div>\n\n<!-- Primary bar -->\n<div class=\"tn-progress-bar-bar tn-progress-bar-primary-bar\" aria-hidden=\"true\">\n <span class=\"tn-progress-bar-bar-inner\"\n [style.transform]=\"primaryTransform()\"></span>\n</div>\n\n<!-- Secondary bar (for indeterminate mode) -->\n@if (mode() === 'indeterminate') {\n <div class=\"tn-progress-bar-bar tn-progress-bar-secondary-bar\" aria-hidden=\"true\">\n <span class=\"tn-progress-bar-bar-inner\"></span>\n </div>\n}\n\n","import type {\n AfterViewInit,\n ElementRef,\n OnDestroy\n} from '@angular/core';\nimport {\n Component,\n input,\n computed,\n viewChild,\n ChangeDetectionStrategy\n} from '@angular/core';\n\n@Component({\n selector: 'tn-particle-progress-bar',\n standalone: true,\n templateUrl: './particle-progress-bar.component.html',\n styleUrls: ['./particle-progress-bar.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n 'class': 'tn-particle-progress-bar'\n }\n})\nexport class TnParticleProgressBarComponent implements AfterViewInit, OnDestroy {\n speed = input<'slow' | 'medium' | 'fast' | 'ludicrous'>('medium');\n color = input<string>('hsla(198, 100%, 42%, 1)');\n height = input<number>(40);\n width = input<number>(600);\n fill = input<number>(300);\n\n canvasRef = viewChild.required<ElementRef<HTMLCanvasElement>>('canvas');\n\n private ctx!: CanvasRenderingContext2D;\n private particles: Array<{\n x: number;\n y: number;\n radius: number;\n speed: number;\n opacity: number;\n color: string;\n }> = [];\n private shades: string[] = [];\n private animationId?: number;\n\n private speedConfig = computed(() => {\n const baseConfig = {\n slow: { speedMin: 0.5, speedMax: 1.5 },\n medium: { speedMin: 1, speedMax: 2.5 },\n fast: { speedMin: 2, speedMax: 4 },\n ludicrous: { speedMin: 4, speedMax: 8 }\n }[this.speed()];\n\n // Calculate dynamic fade rate based on travel distance\n // Particles should fade out over the full travel distance (minus border radius buffer)\n const travelDistance = Math.max(this.fill() - 12, 20); // Distance from x=50 to x=50+fill-12 (avoid border radius), minimum 20px\n const averageSpeed = (baseConfig.speedMin + baseConfig.speedMax) / 2;\n const estimatedFrames = travelDistance / averageSpeed; // Approximate frames to travel the distance\n const fadeRate = 1 / estimatedFrames; // Fade from 1 to 0 over the travel distance\n\n return {\n ...baseConfig,\n fadeRate: Math.max(fadeRate, 0.001) // Minimum fade rate to prevent too slow fading\n };\n });\n\n /**\n * Calculate the gradient offset so the transition only happens in the last 100px\n */\n gradientTransitionStart = computed(() => {\n if (this.fill() <= 100) {\n return 0; // If fill is 100px or less, transition starts immediately\n }\n return ((this.fill() - 100) / this.fill()) * 100; // Transparent until last 100px\n });\n\n /**\n * Get the color for the progress bar (uses the exact same color as input)\n */\n progressBarColor = computed(() => {\n return this.color();\n });\n\n ngAfterViewInit(): void {\n this.ctx = this.canvasRef().nativeElement.getContext('2d')!;\n this.shades = this.generateDarkerShades(this.color(), 4);\n this.animate();\n }\n\n ngOnDestroy(): void {\n if (this.animationId) {\n cancelAnimationFrame(this.animationId);\n }\n }\n\n private animate() {\n this.ctx.clearRect(0, 0, this.width(), this.height());\n\n for (let i = 0; i < this.particles.length; i++) {\n const p = this.particles[i];\n this.ctx.beginPath();\n // If color contains ALPHA placeholder, replace it; otherwise use the color with current opacity\n if (p.color.includes('ALPHA')) {\n this.ctx.fillStyle = p.color.replace('ALPHA', p.opacity.toFixed(2));\n } else {\n // Parse the color and apply current opacity\n const parsed = this.parseHSLA(p.color);\n this.ctx.fillStyle = `hsla(${parsed.h}, ${(parsed.s * 100).toFixed(0)}%, ${(parsed.l * 100).toFixed(0)}%, ${p.opacity.toFixed(2)})`;\n }\n this.ctx.arc(p.x, p.y, p.radius, 0, Math.PI * 2);\n this.ctx.fill();\n\n p.x += p.speed;\n p.opacity -= this.speedConfig().fadeRate;\n\n if (p.x > 50 + this.fill() - 12 || p.opacity <= 0) {\n this.particles.splice(i, 1);\n i--;\n }\n }\n\n for (let j = 0; j < 3; j++) {\n if (Math.random() < 0.8) {this.spawnParticle();}\n }\n\n this.animationId = requestAnimationFrame(() => this.animate());\n }\n\n private spawnParticle() {\n const { speedMin, speedMax } = this.speedConfig();\n const color = this.shades[Math.floor(Math.random() * this.shades.length)];\n const speed = speedMin + Math.random() * (speedMax - speedMin);\n this.particles.push({\n x: 50,\n y: this.height() / 2 + (Math.random() * (this.height() / 2) - this.height() / 4),\n radius: Math.random() * 2 + 1,\n speed,\n opacity: 1,\n color\n });\n }\n\n private parseHSLA(hsla: string): { h: number; s: number; l: number; a: number } {\n const match = hsla.match(/hsla?\\(([\\d.]+),\\s*([\\d.]+)%?,\\s*([\\d.]+)%?(?:,\\s*([\\d.]+))?\\)/i);\n if (!match) {throw new Error('Invalid HSLA color');}\n return {\n h: parseFloat(match[1]),\n s: parseFloat(match[2]) / 100,\n l: parseFloat(match[3]) / 100,\n a: match[4] !== undefined ? parseFloat(match[4]) : 1\n };\n }\n\n /**\n * Convert any color format to HSLA\n */\n private convertToHSLA(color: string): { h: number; s: number; l: number; a: number } {\n // Already HSLA format\n if (color.startsWith('hsla') || color.startsWith('hsl')) {\n return this.parseHSLA(color);\n }\n\n // Create a temporary element to get computed color\n const tempDiv = document.createElement('div');\n tempDiv.style.color = color;\n document.body.appendChild(tempDiv);\n const computedColor = getComputedStyle(tempDiv).color;\n document.body.removeChild(tempDiv);\n\n // Parse RGB/RGBA from computed style\n const rgbaMatch = computedColor.match(/rgba?\\((\\d+),\\s*(\\d+),\\s*(\\d+)(?:,\\s*([\\d.]+))?\\)/);\n if (!rgbaMatch) {\n throw new Error('Invalid color format');\n }\n\n const r = parseInt(rgbaMatch[1]) / 255;\n const g = parseInt(rgbaMatch[2]) / 255;\n const b = parseInt(rgbaMatch[3]) / 255;\n const a = rgbaMatch[4] ? parseFloat(rgbaMatch[4]) : 1;\n\n // Convert RGB to HSL\n const max = Math.max(r, g, b);\n const min = Math.min(r, g, b);\n const diff = max - min;\n const sum = max + min;\n const l = sum / 2;\n\n let h = 0;\n let s = 0;\n\n if (diff !== 0) {\n s = l > 0.5 ? diff / (2 - sum) : diff / sum;\n\n switch (max) {\n case r:\n h = ((g - b) / diff) + (g < b ? 6 : 0);\n break;\n case g:\n h = (b - r) / diff + 2;\n break;\n case b:\n h = (r - g) / diff + 4;\n break;\n }\n h /= 6;\n }\n\n return {\n h: Math.round(h * 360),\n s: Math.round(s * 100) / 100,\n l: Math.round(l * 100) / 100,\n a\n };\n }\n\n /**\n * Generate darker shades of the input color for particle depth effect\n */\n private generateDarkerShades(color: string, count: number): string[] {\n const baseHSLA = this.convertToHSLA(color);\n const shades: string[] = [];\n\n // Include the original color as the brightest shade\n shades.push(`hsla(${baseHSLA.h}, ${(baseHSLA.s * 100).toFixed(0)}%, ${(baseHSLA.l * 100).toFixed(0)}%, ALPHA)`);\n\n // Generate darker shades by reducing lightness\n for (let i = 1; i < count; i++) {\n const darkeningFactor = 0.85 - (i * 0.1); // More conservative darkening: 85%, 75%, 65%\n const newLightness = Math.max(baseHSLA.l * darkeningFactor, Math.max(baseHSLA.l * 0.4, 0.2)); // Limit darkness to 40% of original or 20% minimum\n shades.push(`hsla(${baseHSLA.h}, ${(baseHSLA.s * 100).toFixed(0)}%, ${(newLightness * 100).toFixed(0)}%, ALPHA)`);\n }\n\n return shades;\n }\n\n}\n\n","<svg [attr.width]=\"width()\" [attr.height]=\"height()\">\n <defs>\n <linearGradient id=\"fadeToPrimary\" x1=\"0%\" y1=\"0%\" x2=\"100%\" y2=\"0%\">\n <stop offset=\"0%\" stop-color=\"transparent\" />\n <stop stop-color=\"transparent\" [attr.offset]=\"gradientTransitionStart() + '%'\" />\n <stop offset=\"100%\" [attr.stop-color]=\"progressBarColor()\" />\n </linearGradient>\n </defs>\n\n <!-- Background bar -->\n <rect x=\"50\" fill=\"rgba(0,0,0,0.1)\" [attr.y]=\"height() / 2 - height() / 4\" [attr.width]=\"width() - 100\" [attr.height]=\"height() / 2\" [attr.rx]=\"height() / 4\" />\n\n <!-- Fill bar -->\n <rect\n x=\"50\"\n fill=\"url(#fadeToPrimary)\"\n [attr.y]=\"height() / 2 - height() / 4\"\n [attr.width]=\"fill()\"\n [attr.height]=\"height() / 2\"\n [attr.rx]=\"height() / 4\"\n />\n\n <!-- Particle canvas -->\n <foreignObject x=\"0\" y=\"0\" [attr.width]=\"width()\" [attr.height]=\"height()\">\n <canvas #canvas style=\"pointer-events: none;\" [attr.width]=\"width()\" [attr.height]=\"height()\"></canvas>\n </foreignObject>\n</svg>\n","\nimport { Component, input, output, computed } from '@angular/core';\n\n@Component({\n selector: 'tn-calendar-header',\n standalone: true,\n imports: [],\n templateUrl: './calendar-header.component.html',\n styleUrls: ['./calendar-header.component.scss']\n})\nexport class TnCalendarHeaderComponent {\n currentDate = input<Date>(new Date());\n currentView = input<'month' | 'year'>('month');\n\n monthSelected = output<number>();\n yearSelected = output<number>();\n viewChanged = output<'month' | 'year'>();\n previousClicked = output<void>();\n nextClicked = output<void>();\n\n private months = [\n 'JAN', 'FEB', 'MAR', 'APR', 'MAY', 'JUN',\n 'JUL', 'AUG', 'SEP', 'OCT', 'NOV', 'DEC'\n ];\n\n periodLabelId = `tn-calendar-period-label-${Math.floor(Math.random() * 10000)}`;\n\n periodLabel = computed(() => {\n const date = this.currentDate();\n if (!date) {return '';}\n\n if (this.currentView() === 'month') {\n const month = this.months[date.getMonth()];\n const year = date.getFullYear();\n return `${month} ${year}`;\n } else {\n // For year view, show the year range (24 years like Material)\n const currentYear = date.getFullYear();\n const startYear = Math.floor(currentYear / 24) * 24;\n const endYear = startYear + 23;\n return `${startYear} – ${endYear}`;\n }\n });\n\n previousLabel = computed(() => {\n return this.currentView() === 'month' ? 'Previous month' : 'Previous 24 years';\n });\n\n nextLabel = computed(() => {\n return this.currentView() === 'month' ? 'Next month' : 'Next 24 years';\n });\n\n toggleView(): void {\n const newView = this.currentView() === 'month' ? 'year' : 'month';\n this.viewChanged.emit(newView);\n }\n\n onPreviousClick(): void {\n this.previousClicked.emit();\n }\n\n onNextClick(): void {\n this.nextClicked.emit();\n }\n}","<div class=\"tn-calendar-header\">\n <div class=\"tn-calendar-controls\">\n <!-- Period label (visually hidden for screen readers) -->\n <span aria-live=\"polite\" class=\"cdk-visually-hidden\" [id]=\"periodLabelId\">\n {{ periodLabel() }}\n </span>\n\n <!-- Period button (month/year selector) -->\n <button\n type=\"button\"\n class=\"tn-calendar-period-button\"\n [attr.aria-label]=\"'Choose month and year'\"\n [attr.aria-describedby]=\"periodLabelId\"\n (click)=\"toggleView()\">\n <span [attr.aria-hidden]=\"true\">{{ periodLabel() }}</span>\n <svg viewBox=\"0 0 10 5\" focusable=\"false\" aria-hidden=\"true\" class=\"tn-calendar-arrow\">\n <polygon points=\"0,0 5,5 10,0\" />\n </svg>\n </button>\n\n <!-- Spacer -->\n <div class=\"tn-calendar-spacer\"></div>\n\n <!-- Previous button -->\n <button\n type=\"button\"\n class=\"tn-calendar-previous-button\"\n [attr.aria-label]=\"previousLabel()\"\n (click)=\"onPreviousClick()\">\n <svg viewBox=\"0 0 24 24\" focusable=\"false\" aria-hidden=\"true\">\n <path d=\"M15.41 7.41L14 6l-6 6 6 6 1.41-1.41L10.83 12z\" />\n </svg>\n </button>\n\n <!-- Next button -->\n <button\n type=\"button\"\n class=\"tn-calendar-next-button\"\n [attr.aria-label]=\"nextLabel()\"\n (click)=\"onNextClick()\">\n <svg viewBox=\"0 0 24 24\" focusable=\"false\" aria-hidden=\"true\">\n <path d=\"M10 6L8.59 7.41 13.17 12l-4.58 4.59L10 18l6-6z\" />\n </svg>\n </button>\n </div>\n</div>\n","\nimport { Component, input, output, computed } from '@angular/core';\n\nexport interface CalendarCell {\n value: number;\n date: Date;\n label: string;\n ariaLabel: string;\n enabled: boolean;\n selected: boolean;\n today: boolean;\n compareStart?: boolean;\n compareEnd?: boolean;\n rangeStart?: boolean;\n rangeEnd?: boolean;\n inRange?: boolean;\n}\n\n@Component({\n selector: 'tn-month-view',\n standalone: true,\n imports: [],\n templateUrl: './month-view.component.html',\n styleUrls: ['./month-view.component.scss']\n})\nexport class TnMonthViewComponent {\n activeDate = input<Date>(new Date());\n selected = input<Date | null | undefined>(undefined);\n minDate = input<Date | undefined>(undefined);\n maxDate = input<Date | undefined>(undefined);\n dateFilter = input<((date: Date) => boolean) | undefined>(undefined);\n\n // Range mode inputs\n rangeMode = input<boolean>(false);\n selectedRange = input<{ start: Date | null; end: Date | null; selecting: 'start' | 'end' } | undefined>(undefined);\n\n selectedChange = output<Date>();\n activeDateChange = output<Date>();\n\n readonly weekdays = [\n { long: 'Sunday', short: 'S' },\n { long: 'Monday', short: 'M' },\n { long: 'Tuesday', short: 'T' },\n { long: 'Wednesday', short: 'W' },\n { long: 'Thursday', short: 'T' },\n { long: 'Friday', short: 'F' },\n { long: 'Saturday', short: 'S' },\n ];\n\n // Cell sizing now controlled via CSS custom properties in the SCSS file\n \n\n calendarRows = computed(() => {\n const activeDate = this.activeDate();\n // Track selectedRange signal so computed recalculates when range changes\n this.selectedRange();\n\n if (!activeDate) {return [];}\n \n const year = activeDate.getFullYear();\n const month = activeDate.getMonth();\n const firstDate = new Date(year, month, 1);\n const lastDate = new Date(year, month + 1, 0);\n const startDayOfWeek = firstDate.getDay(); // 0 = Sunday, 1 = Monday, etc.\n \n const rows: CalendarCell[][] = [];\n let currentRow: CalendarCell[] = [];\n \n // Add empty cells for days before month starts\n for (let i = 0; i < startDayOfWeek; i++) {\n currentRow.push(this.createEmptyCell());\n }\n \n // Add all days of the month\n for (let day = 1; day <= lastDate.getDate(); day++) {\n const date = new Date(year, month, day);\n currentRow.push(this.createCell(date, day));\n \n // If we have 7 cells, complete the row\n if (currentRow.length === 7) {\n rows.push(currentRow);\n currentRow = [];\n }\n }\n \n // Fill remaining cells in last row if needed\n if (currentRow.length > 0) {\n while (currentRow.length < 7) {\n currentRow.push(this.createEmptyCell());\n }\n rows.push(currentRow);\n }\n \n return rows;\n });\n\n private createCell(date: Date, value: number): CalendarCell {\n const today = new Date();\n const isToday = this.isSameDate(date, today);\n const isSelected = this.selected() ? this.isSameDate(date, this.selected()!) : false;\n const enabled = this.isDateEnabled(date);\n\n // Range mode calculations\n let rangeStart = false;\n let rangeEnd = false;\n let inRange = false;\n\n const currentRange = this.selectedRange();\n if (this.rangeMode() && currentRange) {\n const { start, end } = currentRange;\n \n if (start && this.isSameDate(date, start)) {\n rangeStart = true;\n }\n if (end && this.isSameDate(date, end)) {\n rangeEnd = true;\n }\n if (start && end && date > start && date < end) {\n inRange = true;\n }\n }\n\n return {\n value,\n date: new Date(date),\n label: date.getDate().toString(),\n ariaLabel: this.formatAriaLabel(date, isSelected, isToday, rangeStart, rangeEnd, inRange),\n enabled,\n selected: isSelected,\n today: isToday,\n rangeStart,\n rangeEnd,\n inRange,\n };\n }\n\n private createEmptyCell(): CalendarCell {\n return {\n value: 0,\n date: new Date(),\n label: '',\n ariaLabel: '',\n enabled: false,\n selected: false,\n today: false,\n };\n }\n\n private isDateEnabled(date: Date): boolean {\n const minDate = this.minDate();\n const maxDate = this.maxDate();\n const dateFilter = this.dateFilter();\n if (minDate && date < minDate) {return false;}\n if (maxDate && date > maxDate) {return false;}\n if (dateFilter && !dateFilter(date)) {return false;}\n return true;\n }\n\n private isSameDate(date1: Date, date2: Date): boolean {\n return date1.getFullYear() === date2.getFullYear() &&\n date1.getMonth() === date2.getMonth() &&\n date1.getDate() === date2.getDate();\n }\n\n private formatAriaLabel(\n date: Date, \n isSelected: boolean, \n isToday: boolean,\n rangeStart?: boolean,\n rangeEnd?: boolean,\n inRange?: boolean\n ): string {\n let label = date.toLocaleDateString('en', { \n weekday: 'long', \n year: 'numeric', \n month: 'long', \n day: 'numeric' \n });\n \n if (isSelected) {label += ' (selected)';}\n if (isToday) {label += ' (today)';}\n if (rangeStart) {label += ' (range start)';}\n if (rangeEnd) {label += ' (range end)';}\n if (inRange) {label += ' (in range)';}\n \n return label;\n }\n\n trackByDate(index: number, cell: CalendarCell): string {\n return cell.date.toISOString();\n }\n\n trackByRow(index: number, row: CalendarCell[]): string {\n return row.map(cell => cell.date.toISOString()).join(',');\n }\n\n onCellClicked(cell: CalendarCell): void {\n if (cell.enabled && cell.value > 0) {\n this.selectedChange.emit(cell.date);\n }\n }\n}","<table role=\"grid\" class=\"tn-calendar-table\">\n <!-- Table header with day names -->\n <thead class=\"tn-calendar-table-header\">\n <tr>\n @for (day of weekdays; track day) {\n <th scope=\"col\">\n <span class=\"cdk-visually-hidden\">{{ day.long }}</span>\n <span aria-hidden=\"true\">{{ day.short }}</span>\n </th>\n }\n </tr>\n </thead>\n\n <!-- Table body with calendar cells -->\n <tbody class=\"tn-calendar-body\">\n <!-- Calendar rows -->\n @for (row of calendarRows(); track trackByRow($index, row); let rowIndex = $index) {\n <tr role=\"row\">\n @for (cell of row; track trackByDate($index, cell); let colIndex = $index) {\n <td\n role=\"gridcell\"\n class=\"tn-calendar-body-cell-container\"\n [attr.data-tn-row]=\"rowIndex\"\n [attr.data-tn-col]=\"colIndex\">\n @if (cell.value > 0) {\n <button\n type=\"button\"\n class=\"tn-calendar-body-cell\"\n [class.tn-calendar-body-selected]=\"cell.selected\"\n [class.tn-calendar-body-today]=\"cell.today\"\n [class.tn-calendar-body-active]=\"cell.selected\"\n [class.tn-calendar-body-range-start]=\"cell.rangeStart\"\n [class.tn-calendar-body-range-end]=\"cell.rangeEnd\"\n [class.tn-calendar-body-in-range]=\"cell.inRange\"\n [disabled]=\"!cell.enabled\"\n [attr.tabindex]=\"cell.selected ? 0 : -1\"\n [attr.aria-label]=\"cell.ariaLabel\"\n [attr.aria-pressed]=\"cell.selected\"\n [attr.aria-current]=\"cell.today ? 'date' : null\"\n (click)=\"onCellClicked(cell)\">\n <span class=\"tn-calendar-body-cell-content tn-focus-indicator\"\n [class.tn-calendar-body-selected]=\"cell.selected\"\n [class.tn-calendar-body-today]=\"cell.today\"\n [class.tn-calendar-body-range-start]=\"cell.rangeStart\"\n [class.tn-calendar-body-range-end]=\"cell.rangeEnd\"\n [class.tn-calendar-body-in-range]=\"cell.inRange\">\n {{ cell.value }}\n </span>\n <span aria-hidden=\"true\" class=\"tn-calendar-body-cell-preview\"></span>\n </button>\n }\n </td>\n }\n </tr>\n }\n </tbody>\n</table>\n","\nimport { Component, input, output, computed } from '@angular/core';\n\nexport interface YearCell {\n value: number;\n year: number;\n label: string;\n ariaLabel: string;\n enabled: boolean;\n selected: boolean;\n today: boolean;\n}\n\n@Component({\n selector: 'tn-multi-year-view',\n standalone: true,\n imports: [],\n templateUrl: './multi-year-view.component.html',\n styleUrls: ['./multi-year-view.component.scss']\n})\nexport class TnMultiYearViewComponent {\n activeDate = input<Date>(new Date());\n selected = input<Date | null | undefined>(undefined);\n minDate = input<Date | undefined>(undefined);\n maxDate = input<Date | undefined>(undefined);\n dateFilter = input<((date: Date) => boolean) | undefined>(undefined);\n\n selectedChange = output<Date>();\n activeDateChange = output<Date>();\n\n readonly cellWidth = 25; // 100/4 for 4 columns\n readonly cellAspectRatio = 7.14286; // Same as Material\n readonly yearsPerRow = 4;\n readonly yearRowCount = 6; // Shows 24 years total (6 rows x 4 columns)\n\n // Calculate the year range to display\n yearRange = computed(() => {\n const activeDate = this.activeDate();\n const currentYear = activeDate.getFullYear();\n\n // Calculate the starting year for a 24-year range\n // We want the active year to be roughly in the middle\n const startYear = Math.floor(currentYear / 24) * 24;\n\n return { start: startYear, end: startYear + 23 };\n });\n\n yearRows = computed(() => {\n const range = this.yearRange();\n const rows: YearCell[][] = [];\n \n for (let row = 0; row < this.yearRowCount; row++) {\n const yearRow: YearCell[] = [];\n \n for (let col = 0; col < this.yearsPerRow; col++) {\n const year = range.start + (row * this.yearsPerRow) + col;\n yearRow.push(this.createYearCell(year));\n }\n \n rows.push(yearRow);\n }\n \n return rows;\n });\n\n private createYearCell(year: number): YearCell {\n const today = new Date();\n const currentYear = today.getFullYear();\n const selectedYear = this.selected()?.getFullYear();\n\n const isToday = year === currentYear;\n const isSelected = year === selectedYear;\n const enabled = this.isYearEnabled(year);\n\n return {\n value: year,\n year: year,\n label: year.toString(),\n ariaLabel: this.formatYearAriaLabel(year, isSelected, isToday),\n enabled,\n selected: isSelected,\n today: isToday,\n };\n }\n\n private isYearEnabled(year: number): boolean {\n const minDate = this.minDate();\n const maxDate = this.maxDate();\n const dateFilter = this.dateFilter();\n if (minDate && year < minDate.getFullYear()) {return false;}\n if (maxDate && year > maxDate.getFullYear()) {return false;}\n\n // If we have a date filter, test January 1st of that year\n if (dateFilter) {\n const testDate = new Date(year, 0, 1);\n if (!dateFilter(testDate)) {return false;}\n }\n\n return true;\n }\n\n private formatYearAriaLabel(year: number, isSelected: boolean, isToday: boolean): string {\n let label = year.toString();\n \n if (isSelected) {label += ' (selected)';}\n if (isToday) {label += ' (current year)';}\n \n return label;\n }\n\n trackByYear(index: number, cell: YearCell): number {\n return cell.year;\n }\n\n trackByRow(index: number, row: YearCell[]): string {\n return row.map(cell => cell.year).join(',');\n }\n\n onYearClicked(cell: YearCell): void {\n if (cell.enabled) {\n // Create a new date with the selected year, keeping current month and day\n const currentDate = this.activeDate();\n const newDate = new Date(cell.year, currentDate.getMonth(), currentDate.getDate());\n this.selectedChange.emit(newDate);\n }\n }\n}","<table role=\"grid\" class=\"tn-calendar-table\">\n <!-- Table body with year cells -->\n <tbody class=\"tn-calendar-body\">\n @for (row of yearRows(); track trackByRow($index, row); let rowIndex = $index) {\n <tr role=\"row\">\n @for (cell of row; track trackByYear($index, cell); let colIndex = $index) {\n <td\n role=\"gridcell\"\n class=\"tn-calendar-body-cell-container\"\n [attr.data-tn-row]=\"rowIndex\"\n [attr.data-tn-col]=\"colIndex\"\n [style.width.%]=\"cellWidth\"\n [style.padding-top.%]=\"cellAspectRatio\"\n [style.padding-bottom.%]=\"cellAspectRatio\">\n <button\n type=\"button\"\n class=\"tn-calendar-body-cell\"\n [class.tn-calendar-body-selected]=\"cell.selected\"\n [class.tn-calendar-body-today]=\"cell.today\"\n [class.tn-calendar-body-active]=\"cell.selected\"\n [disabled]=\"!cell.enabled\"\n [attr.tabindex]=\"cell.selected ? 0 : -1\"\n [attr.aria-label]=\"cell.ariaLabel\"\n [attr.aria-pressed]=\"cell.selected\"\n [attr.aria-current]=\"cell.today ? 'date' : null\"\n (click)=\"onYearClicked(cell)\">\n <span class=\"tn-calendar-body-cell-content tn-focus-indicator\"\n [class.tn-calendar-body-selected]=\"cell.selected\"\n [class.tn-calendar-body-today]=\"cell.today\">\n {{ cell.value }}\n </span>\n <span aria-hidden=\"true\" class=\"tn-calendar-body-cell-preview\"></span>\n </button>\n </td>\n }\n </tr>\n }\n </tbody>\n</table>\n","\nimport type { OnInit } from '@angular/core';\nimport { Component, input, output, signal, effect } from '@angular/core';\nimport { TnCalendarHeaderComponent } from './calendar-header.component';\nimport { TnMonthViewComponent } from './month-view.component';\nimport { TnMultiYearViewComponent } from './multi-year-view.component';\nimport type { DateRange } from '../date-range-input/date-range-input.component';\n\n@Component({\n selector: 'tn-calendar',\n standalone: true,\n imports: [TnCalendarHeaderComponent, TnMonthViewComponent, TnMultiYearViewComponent],\n templateUrl: './calendar.component.html',\n styleUrls: ['./calendar.component.scss']\n})\nexport class TnCalendarComponent implements OnInit {\n startView = input<'month' | 'year'>('month');\n selected = input<Date | null | undefined>(undefined);\n minDate = input<Date | undefined>(undefined);\n maxDate = input<Date | undefined>(undefined);\n dateFilter = input<((date: Date) => boolean) | undefined>(undefined);\n\n // Range mode inputs\n rangeMode = input<boolean>(false);\n selectedRange = input<DateRange | undefined>(undefined);\n\n selectedChange = output<Date>();\n activeDateChange = output<Date>();\n viewChanged = output<'month' | 'year'>();\n\n // Range mode outputs\n selectedRangeChange = output<DateRange>();\n\n currentDate = signal<Date>(new Date());\n currentView = signal<'month' | 'year'>('month');\n \n // Range selection state - this is the authoritative source for calendar display\n rangeState = signal<{\n start: Date | null;\n end: Date | null;\n selecting: 'start' | 'end';\n }>({\n start: null,\n end: null,\n selecting: 'start'\n });\n\n // Track if user has interacted with calendar - once true, ignore external selectedRange\n private userHasInteracted = false;\n\n constructor() {\n // Watch for changes to selectedRange input\n effect(() => {\n // Track signals to re-run effect when they change\n this.selectedRange();\n const rangeMode = this.rangeMode();\n // Only update range state from external selectedRange if user hasn't interacted yet\n if (!this.userHasInteracted && rangeMode) {\n this.initializeRangeState();\n }\n });\n }\n\n ngOnInit(): void {\n this.currentView.set(this.startView());\n\n // Initialize range state if in range mode (this also handles currentDate)\n if (this.rangeMode()) {\n this.initializeRangeState();\n } else {\n const selected = this.selected();\n if (selected) {\n // For single date mode, navigate to the selected date's month\n this.currentDate.set(new Date(selected));\n }\n }\n }\n\n private initializeRangeState(): void {\n if (this.rangeMode()) {\n const selectedRange = this.selectedRange();\n if (selectedRange) {\n this.rangeState.set({\n start: selectedRange.start,\n end: selectedRange.end,\n selecting: selectedRange.start && selectedRange.end ? 'start' :\n selectedRange.start ? 'end' : 'start'\n });\n\n // Navigate to the month of the selected start date, or end date if no start date\n const dateToShow = selectedRange.start || selectedRange.end;\n if (dateToShow) {\n this.currentDate.set(new Date(dateToShow));\n }\n } else {\n // No selected range - initialize empty range state\n this.rangeState.set({\n start: null,\n end: null,\n selecting: 'start'\n });\n }\n }\n }\n\n onMonthSelected(month: number): void {\n const newDate = new Date(this.currentDate());\n newDate.setMonth(month);\n this.currentDate.set(newDate);\n this.currentView.set('month');\n this.viewChanged.emit('month');\n }\n\n onYearSelected(year: number): void {\n const newDate = new Date(this.currentDate());\n newDate.setFullYear(year);\n this.currentDate.set(newDate);\n this.activeDateChange.emit(newDate);\n }\n\n onViewChanged(view: 'month' | 'year'): void {\n this.currentView.set(view);\n this.viewChanged.emit(view);\n }\n\n onPreviousClicked(): void {\n const current = this.currentDate();\n let newDate: Date;\n \n if (this.currentView() === 'month') {\n newDate = new Date(current.getFullYear(), current.getMonth() - 1, 1);\n } else {\n // For year view, navigate by 24-year ranges (like Material)\n newDate = new Date(current.getFullYear() - 24, current.getMonth(), 1);\n }\n \n this.currentDate.set(newDate);\n this.activeDateChange.emit(newDate);\n }\n\n onNextClicked(): void {\n const current = this.currentDate();\n let newDate: Date;\n \n if (this.currentView() === 'month') {\n newDate = new Date(current.getFullYear(), current.getMonth() + 1, 1);\n } else {\n // For year view, navigate by 24-year ranges (like Material)\n newDate = new Date(current.getFullYear() + 24, current.getMonth(), 1);\n }\n \n this.currentDate.set(newDate);\n this.activeDateChange.emit(newDate);\n }\n\n onSelectedChange(date: Date): void {\n if (this.rangeMode()) {\n this.handleRangeSelection(date);\n } else {\n this.selectedChange.emit(date);\n }\n }\n \n private handleRangeSelection(date: Date): void {\n // Mark that user has interacted - calendar is now authoritative\n this.userHasInteracted = true;\n \n const currentRange = this.rangeState();\n \n // If we already have a complete range (both start and end), clear and start fresh\n if (currentRange.start && currentRange.end && currentRange.selecting === 'start') {\n const newRangeState = {\n start: date,\n end: null,\n selecting: 'end' as const\n };\n this.rangeState.set(newRangeState);\n this.selectedRangeChange.emit({ start: date, end: null });\n return;\n }\n \n if (currentRange.selecting === 'start' || !currentRange.start) {\n // First click or selecting start date - clear any previous range immediately\n const newRangeState = {\n start: date,\n end: null,\n selecting: 'end' as const\n };\n this.rangeState.set(newRangeState);\n this.selectedRangeChange.emit({ start: date, end: null });\n } else {\n // Setting end date\n const start = currentRange.start!;\n \n // If second date is earlier than first, treat it as new start date\n if (date < start) {\n const newRangeState = {\n start: date,\n end: null,\n selecting: 'end' as const\n };\n this.rangeState.set(newRangeState);\n this.selectedRangeChange.emit({ start: date, end: null });\n } else {\n // Valid end date - complete the range\n const newRangeState = {\n start: start,\n end: date,\n selecting: 'start' as const\n };\n this.rangeState.set(newRangeState);\n this.selectedRangeChange.emit({ start: start, end: date });\n }\n }\n }\n\n onActiveDateChange(date: Date): void {\n this.currentDate.set(date);\n this.activeDateChange.emit(date);\n }\n\n onYearSelectedFromView(date: Date): void {\n // When a year is selected from the multi-year view, update the current date\n // and switch back to month view\n this.currentDate.set(date);\n this.currentView.set('month');\n this.viewChanged.emit('month');\n this.activeDateChange.emit(date);\n }\n\n /**\n * Reset the calendar to accept external range values - called when calendar reopens\n */\n resetInteractionState(): void {\n this.userHasInteracted = false;\n // Reinitialize range state from selectedRange if provided\n this.initializeRangeState();\n }\n}","<tn-calendar-header\n [currentDate]=\"currentDate()\"\n [currentView]=\"currentView()\"\n (monthSelected)=\"onMonthSelected($event)\"\n (yearSelected)=\"onYearSelected($event)\"\n (viewChanged)=\"onViewChanged($event)\"\n (previousClicked)=\"onPreviousClicked()\"\n (nextClicked)=\"onNextClicked()\" />\n\n<div class=\"tn-calendar-content\" cdkMonitorSubtreeFocus tabindex=\"-1\">\n @if (currentView() === 'month') {\n <tn-month-view\n [activeDate]=\"currentDate()\"\n [selected]=\"selected()\"\n [dateFilter]=\"dateFilter()\"\n [minDate]=\"minDate()\"\n [maxDate]=\"maxDate()\"\n [rangeMode]=\"rangeMode()\"\n [selectedRange]=\"rangeMode() ? rangeState() : undefined\"\n (selectedChange)=\"onSelectedChange($event)\"\n (activeDateChange)=\"onActiveDateChange($event)\" />\n }\n\n <!-- Multi-year view -->\n @if (currentView() === 'year') {\n <tn-multi-year-view\n [activeDate]=\"currentDate()\"\n [selected]=\"selected()\"\n [dateFilter]=\"dateFilter()\"\n [minDate]=\"minDate()\"\n [maxDate]=\"maxDate()\"\n (selectedChange)=\"onYearSelectedFromView($event)\"\n (activeDateChange)=\"onActiveDateChange($event)\" />\n }\n</div>\n","import { A11yModule } from '@angular/cdk/a11y';\nimport type { OverlayRef, ConnectedPosition } from '@angular/cdk/overlay';\nimport { Overlay } from '@angular/cdk/overlay';\nimport { OverlayModule } from '@angular/cdk/overlay';\nimport { TemplatePortal, PortalModule } from '@angular/cdk/portal';\nimport type { ElementRef, OnInit, TemplateRef, OnDestroy } from '@angular/core';\nimport { ViewContainerRef } from '@angular/core';\nimport { Component, input, forwardRef, signal, computed, viewChild, inject } from '@angular/core';\nimport type { ControlValueAccessor} from '@angular/forms';\nimport { NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { Subject } from 'rxjs';\nimport { TnCalendarComponent } from '../calendar/calendar.component';\nimport { TnInputDirective } from '../input/input.directive';\n\n@Component({\n selector: 'tn-date-input',\n standalone: true,\n imports: [TnInputDirective, TnCalendarComponent, OverlayModule, PortalModule, A11yModule],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => TnDateInputComponent),\n multi: true\n }\n ],\n templateUrl: './date-input.component.html',\n styleUrl: './date-input.component.scss',\n host: {\n 'class': 'tn-date-input'\n }\n})\nexport class TnDateInputComponent implements ControlValueAccessor, OnInit, OnDestroy {\n overlay = inject(Overlay);\n viewContainerRef = inject(ViewContainerRef);\n\n disabled = input<boolean>(false);\n placeholder = input<string>('Select date');\n min = input<Date | undefined>(undefined);\n max = input<Date | undefined>(undefined);\n dateFilter = input<((date: Date) => boolean) | undefined>(undefined);\n\n private formDisabled = signal<boolean>(false);\n isDisabled = computed(() => this.disabled() || this.formDisabled());\n\n monthRef = viewChild.required<ElementRef<HTMLInputElement>>('monthInput');\n dayRef = viewChild.required<ElementRef<HTMLInputElement>>('dayInput');\n yearRef = viewChild.required<ElementRef<HTMLInputElement>>('yearInput');\n calendarTemplate = viewChild.required<TemplateRef<unknown>>('calendarTemplate');\n calendar = viewChild.required<TnCalendarComponent>(TnCalendarComponent);\n wrapperEl = viewChild.required<ElementRef<HTMLDivElement>>('wrapper');\n\n private destroy$ = new Subject<void>();\n private overlayRef?: OverlayRef;\n private portal?: TemplatePortal;\n isOpen = signal<boolean>(false);\n\n private onChange = (_value: Date | null) => {};\n private onTouched = () => {};\n\n value = signal<Date | null>(null);\n \n // Individual segment signals\n month = signal<string>('');\n day = signal<string>('');\n year = signal<string>('');\n\n ngOnInit() {\n // Initialize display values\n this.updateDisplayValues();\n }\n\n ngOnDestroy(): void {\n this.destroy$.next();\n this.destroy$.complete();\n this.close();\n }\n\n // ControlValueAccessor implementation\n writeValue(value: Date | null): void {\n this.value.set(value);\n this.updateDisplayValues();\n }\n\n registerOnChange(fn: (value: Date | null) => void): void {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn as () => void;\n }\n\n setDisabledState(isDisabled: boolean): void {\n this.formDisabled.set(isDisabled);\n }\n\n // Segment event handlers\n onSegmentFocus(_segment: 'month' | 'day' | 'year'): void {\n // Focus handling\n }\n\n onSegmentBlur(_segment: 'month' | 'day' | 'year'): void {\n this.onTouched();\n // Only validate and update when we have complete values\n const month = this.monthRef()?.nativeElement?.value || '';\n const day = this.dayRef()?.nativeElement?.value || '';\n const year = this.yearRef()?.nativeElement?.value || '';\n\n // Only try to create a date if all segments have some value\n if (month && day && year && year.length === 4) {\n this.updateDateFromSegments();\n }\n }\n\n onSegmentKeydown(event: KeyboardEvent, segment: 'month' | 'day' | 'year'): void {\n const inp = event.target as HTMLInputElement;\n\n // Handle navigation between segments\n if (event.key === 'ArrowRight') {\n if (inp.selectionStart === inp.value.length) {\n event.preventDefault();\n this.focusNextSegment(segment);\n }\n } else if (event.key === 'ArrowLeft') {\n if (inp.selectionStart === 0) {\n event.preventDefault();\n this.focusPrevSegment(segment);\n }\n } else if (event.key === 'Backspace') {\n if (inp.value === '' || inp.selectionStart === 0) {\n event.preventDefault();\n this.focusPrevSegment(segment);\n }\n }\n }\n\n onDateSelected(date: Date): void {\n this.updateDate(date);\n // Close calendar after single date selection\n this.close();\n }\n\n private updateDate(date: Date | null): void {\n this.value.set(date);\n this.updateDisplayValues();\n this.onChange(date);\n }\n\n private updateDisplayValues(): void {\n const date = this.value();\n \n if (date) {\n const monthVal = (date.getMonth() + 1).toString().padStart(2, '0');\n const dayVal = date.getDate().toString().padStart(2, '0');\n const yearVal = date.getFullYear().toString();\n \n this.month.set(monthVal);\n this.day.set(dayVal);\n this.year.set(yearVal);\n \n // Update input elements\n if (this.monthRef()?.nativeElement) {this.monthRef().nativeElement.value = monthVal;}\n if (this.dayRef()?.nativeElement) {this.dayRef().nativeElement.value = dayVal;}\n if (this.yearRef()?.nativeElement) {this.yearRef().nativeElement.value = yearVal;}\n } else {\n // Clear all values\n this.month.set('');\n this.day.set('');\n this.year.set('');\n\n if (this.monthRef()?.nativeElement) {this.monthRef().nativeElement.value = '';}\n if (this.dayRef()?.nativeElement) {this.dayRef().nativeElement.value = '';}\n if (this.yearRef()?.nativeElement) {this.yearRef().nativeElement.value = '';}\n }\n }\n\n private updateDateFromSegments(): void {\n const month = this.monthRef()?.nativeElement?.value || '';\n const day = this.dayRef()?.nativeElement?.value || '';\n const year = this.yearRef()?.nativeElement?.value || '';\n \n let date: Date | null = null;\n if (month && day && year && year.length === 4) {\n const monthNum = parseInt(month, 10);\n const dayNum = parseInt(day, 10);\n const yearNum = parseInt(year, 10);\n \n if (monthNum >= 1 && monthNum <= 12 && dayNum >= 1 && dayNum <= 31) {\n date = new Date(yearNum, monthNum - 1, dayNum);\n // Validate the date is real\n if (date.getFullYear() !== yearNum || date.getMonth() !== monthNum - 1 || date.getDate() !== dayNum) {\n date = null;\n }\n }\n }\n \n this.updateDate(date);\n }\n \n private focusNextSegment(segment: 'month' | 'day' | 'year'): void {\n if (segment === 'month') {this.dayRef().nativeElement.focus();}\n else if (segment === 'day') {this.yearRef().nativeElement.focus();}\n // Year is the last field\n }\n\n private focusPrevSegment(segment: 'month' | 'day' | 'year'): void {\n if (segment === 'day') {this.monthRef().nativeElement.focus();}\n else if (segment === 'year') {this.dayRef().nativeElement.focus();}\n // Month is the first field\n }\n\n openDatepicker(): void {\n if (this.isOpen()) {return;}\n\n this.createOverlay();\n this.isOpen.set(true);\n\n // Reset calendar interaction state when opening\n const cal = this.calendar();\n if (cal) {\n setTimeout(() => cal.resetInteractionState(), 0);\n }\n }\n\n close(): void {\n if (this.overlayRef) {\n this.overlayRef.dispose();\n this.overlayRef = undefined;\n this.portal = undefined;\n }\n this.isOpen.set(false);\n }\n\n private createOverlay(): void {\n if (this.overlayRef) {return;}\n\n const positions: ConnectedPosition[] = [\n {\n originX: 'start',\n originY: 'bottom',\n overlayX: 'start',\n overlayY: 'top',\n offsetY: 8,\n },\n {\n originX: 'start',\n originY: 'top',\n overlayX: 'start',\n overlayY: 'bottom',\n offsetY: -8,\n },\n {\n originX: 'end',\n originY: 'bottom',\n overlayX: 'end',\n overlayY: 'top',\n offsetY: 8,\n },\n {\n originX: 'end',\n originY: 'top',\n overlayX: 'end',\n overlayY: 'bottom',\n offsetY: -8,\n },\n ];\n\n const positionStrategy = this.overlay\n .position()\n .flexibleConnectedTo(this.wrapperEl())\n .withPositions(positions)\n .withPush(false);\n\n this.overlayRef = this.overlay.create({\n positionStrategy,\n scrollStrategy: this.overlay.scrollStrategies.reposition(),\n hasBackdrop: true,\n backdropClass: 'cdk-overlay-transparent-backdrop',\n panelClass: 'tn-datepicker-overlay'\n });\n\n // Close datepicker when backdrop is clicked\n this.overlayRef.backdropClick().subscribe(() => {\n this.close();\n });\n\n this.portal = new TemplatePortal(this.calendarTemplate(), this.viewContainerRef);\n this.overlayRef.attach(this.portal);\n }\n}","<div class=\"tn-date-input-container\">\n <div #wrapper ixInput class=\"tn-date-input-wrapper\" style=\"padding-right: 40px;\">\n <!-- Date segments MM/DD/YYYY -->\n <div class=\"tn-date-segment-group\">\n <input\n #monthInput\n type=\"text\"\n class=\"tn-date-segment tn-date-segment-month\"\n placeholder=\"MM\"\n maxlength=\"2\"\n [disabled]=\"isDisabled()\"\n (focus)=\"onSegmentFocus('month')\"\n (blur)=\"onSegmentBlur('month')\"\n (keydown)=\"onSegmentKeydown($event, 'month')\">\n <span class=\"tn-date-segment-separator\">/</span>\n <input\n #dayInput\n type=\"text\"\n class=\"tn-date-segment tn-date-segment-day\"\n placeholder=\"DD\"\n maxlength=\"2\"\n [disabled]=\"isDisabled()\"\n (focus)=\"onSegmentFocus('day')\"\n (blur)=\"onSegmentBlur('day')\"\n (keydown)=\"onSegmentKeydown($event, 'day')\">\n <span class=\"tn-date-segment-separator\">/</span>\n <input\n #yearInput\n type=\"text\"\n class=\"tn-date-segment tn-date-segment-year\"\n placeholder=\"YYYY\"\n maxlength=\"4\"\n [disabled]=\"isDisabled()\"\n (focus)=\"onSegmentFocus('year')\"\n (blur)=\"onSegmentBlur('year')\"\n (keydown)=\"onSegmentKeydown($event, 'year')\">\n </div>\n\n <button\n type=\"button\"\n class=\"tn-date-input-toggle\"\n aria-label=\"Open calendar\"\n [disabled]=\"isDisabled()\"\n (click)=\"openDatepicker()\">\n <span aria-hidden=\"true\">📅</span>\n </button>\n </div>\n\n <ng-template #calendarTemplate>\n <tn-calendar\n class=\"tn-calendar\"\n [startView]=\"'month'\"\n [rangeMode]=\"false\"\n [selected]=\"value()\"\n (selectedChange)=\"onDateSelected($event)\" />\n </ng-template>\n</div>\n","import { A11yModule } from '@angular/cdk/a11y';\nimport { Overlay, type OverlayRef, type ConnectedPosition } from '@angular/cdk/overlay';\nimport { OverlayModule } from '@angular/cdk/overlay';\nimport { TemplatePortal, PortalModule } from '@angular/cdk/portal';\nimport type { OnInit, TemplateRef, OnDestroy , ElementRef} from '@angular/core';\nimport { Component, input, forwardRef, signal, computed, viewChild, ViewContainerRef, inject } from '@angular/core';\nimport type { ControlValueAccessor} from '@angular/forms';\nimport { NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { Subject } from 'rxjs';\nimport { TnCalendarComponent } from '../calendar/calendar.component';\nimport { TnInputDirective } from '../input/input.directive';\n\nexport interface DateRange {\n start: Date | null;\n end: Date | null;\n}\n\n@Component({\n selector: 'tn-date-range-input',\n standalone: true,\n imports: [TnInputDirective, TnCalendarComponent, OverlayModule, PortalModule, A11yModule],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => TnDateRangeInputComponent),\n multi: true\n }\n ],\n templateUrl: './date-range-input.component.html',\n styleUrl: './date-range-input.component.scss',\n host: {\n 'class': 'tn-date-range-input'\n }\n})\nexport class TnDateRangeInputComponent implements ControlValueAccessor, OnInit, OnDestroy {\n disabled = input<boolean>(false);\n placeholder = input<string>('Select date range');\n\n private formDisabled = signal<boolean>(false);\n isDisabled = computed(() => this.disabled() || this.formDisabled());\n\n startMonthRef = viewChild.required<ElementRef<HTMLInputElement>>('startMonthInput');\n startDayRef = viewChild.required<ElementRef<HTMLInputElement>>('startDayInput');\n startYearRef = viewChild.required<ElementRef<HTMLInputElement>>('startYearInput');\n endMonthRef = viewChild.required<ElementRef<HTMLInputElement>>('endMonthInput');\n endDayRef = viewChild.required<ElementRef<HTMLInputElement>>('endDayInput');\n endYearRef = viewChild.required<ElementRef<HTMLInputElement>>('endYearInput');\n calendarTemplate = viewChild.required<TemplateRef<unknown>>('calendarTemplate');\n calendar = viewChild.required<TnCalendarComponent>(TnCalendarComponent);\n wrapperEl = viewChild.required<ElementRef<HTMLDivElement>>('wrapper');\n\n private destroy$ = new Subject<void>();\n private overlayRef?: OverlayRef;\n private portal?: TemplatePortal;\n isOpen = signal<boolean>(false);\n\n private onChange = (_value: DateRange) => {};\n private onTouched = () => {};\n\n value = signal<DateRange>({ start: null, end: null });\n \n // Individual segment signals\n startMonth = signal<string>('');\n startDay = signal<string>('');\n startYear = signal<string>('');\n endMonth = signal<string>('');\n endDay = signal<string>('');\n endYear = signal<string>('');\n \n private currentFocus: 'start' | 'end' = 'start';\n // Always provide current range to calendar for initial display\n initialRange = computed(() => {\n return this.value();\n });\n\n private overlay = inject(Overlay);\n private viewContainerRef = inject(ViewContainerRef);\n\n ngOnInit() {\n // Initialize display values\n this.updateDisplayValues();\n }\n\n ngOnDestroy(): void {\n this.destroy$.next();\n this.destroy$.complete();\n this.close();\n }\n\n // ControlValueAccessor implementation\n writeValue(value: DateRange): void {\n this.value.set(value || { start: null, end: null });\n this.updateDisplayValues();\n }\n\n registerOnChange(fn: (value: DateRange) => void): void {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n\n setDisabledState(isDisabled: boolean): void {\n this.formDisabled.set(isDisabled);\n }\n\n // Segment event handlers\n onSegmentFocus(range: 'start' | 'end', _segment: 'month' | 'day' | 'year'): void {\n this.currentFocus = range;\n }\n\n onSegmentBlur(range: 'start' | 'end', _segment: 'month' | 'day' | 'year'): void {\n this.onTouched();\n // Only validate and update when we have complete values, don't clear partial entries\n const month = range === 'start' ? (this.startMonthRef()?.nativeElement?.value || '') : (this.endMonthRef()?.nativeElement?.value || '');\n const day = range === 'start' ? (this.startDayRef()?.nativeElement?.value || '') : (this.endDayRef()?.nativeElement?.value || '');\n const year = range === 'start' ? (this.startYearRef()?.nativeElement?.value || '') : (this.endYearRef()?.nativeElement?.value || '');\n \n // Only try to create a date if all segments have some value\n if (month && day && year && year.length === 4) {\n this.updateDateFromSegments(range);\n }\n }\n\n\n onSegmentKeydown(event: KeyboardEvent, range: 'start' | 'end', segment: 'month' | 'day' | 'year'): void {\n const inp = event.target as HTMLInputElement;\n \n // Only handle navigation - don't interfere with typing\n if (event.key === 'ArrowRight') {\n if (inp.selectionStart === inp.value.length) {\n event.preventDefault();\n this.focusNextSegment(range, segment);\n }\n } else if (event.key === 'ArrowLeft') {\n if (inp.selectionStart === 0) {\n event.preventDefault();\n this.focusPrevSegment(range, segment);\n }\n } else if (event.key === 'Backspace') {\n if (inp.value === '' || inp.selectionStart === 0) {\n event.preventDefault();\n this.focusPrevSegment(range, segment);\n }\n }\n }\n\n onRangeSelected(range: DateRange): void {\n this.updateRange(range);\n \n // Handle input field updates and clearing\n if (range.start && !range.end) {\n // Start date selected - clear end date input fields immediately\n if (this.endMonthRef()?.nativeElement) {this.endMonthRef().nativeElement.value = '';}\n if (this.endDayRef()?.nativeElement) {this.endDayRef().nativeElement.value = '';}\n if (this.endYearRef()?.nativeElement) {this.endYearRef().nativeElement.value = '';}\n \n // Focus end month for next selection\n setTimeout(() => this.endMonthRef()?.nativeElement?.focus(), 0);\n } else if (range.start && range.end) {\n // Both dates selected - close calendar\n this.close();\n }\n }\n\n private updateRange(range: DateRange): void {\n this.value.set(range);\n this.updateDisplayValues();\n this.onChange(range);\n }\n\n private updateDisplayValues(): void {\n const range = this.value();\n \n // Update start date segments - only when we have valid dates from calendar\n if (range.start) {\n const monthVal = (range.start.getMonth() + 1).toString().padStart(2, '0');\n const dayVal = range.start.getDate().toString().padStart(2, '0');\n const yearVal = range.start.getFullYear().toString();\n \n this.startMonth.set(monthVal);\n this.startDay.set(dayVal);\n this.startYear.set(yearVal);\n \n // Only update input elements if they're empty or this is from calendar selection\n if (this.startMonthRef()?.nativeElement) {this.startMonthRef().nativeElement.value = monthVal;}\n if (this.startDayRef()?.nativeElement) {this.startDayRef().nativeElement.value = dayVal;}\n if (this.startYearRef()?.nativeElement) {this.startYearRef().nativeElement.value = yearVal;}\n }\n \n // Update end date segments - only when we have valid dates from calendar \n if (range.end) {\n const monthVal = (range.end.getMonth() + 1).toString().padStart(2, '0');\n const dayVal = range.end.getDate().toString().padStart(2, '0');\n const yearVal = range.end.getFullYear().toString();\n \n this.endMonth.set(monthVal);\n this.endDay.set(dayVal);\n this.endYear.set(yearVal);\n \n // Only update input elements if they're empty or this is from calendar selection\n if (this.endMonthRef()?.nativeElement) {this.endMonthRef().nativeElement.value = monthVal;}\n if (this.endDayRef()?.nativeElement) {this.endDayRef().nativeElement.value = dayVal;}\n if (this.endYearRef()?.nativeElement) {this.endYearRef().nativeElement.value = yearVal;}\n }\n }\n \n private setSegmentValue(range: 'start' | 'end', segment: 'month' | 'day' | 'year', value: string): void {\n if (range === 'start') {\n if (segment === 'month') {this.startMonth.set(value);}\n else if (segment === 'day') {this.startDay.set(value);}\n else if (segment === 'year') {this.startYear.set(value);}\n } else {\n if (segment === 'month') {this.endMonth.set(value);}\n else if (segment === 'day') {this.endDay.set(value);}\n else if (segment === 'year') {this.endYear.set(value);}\n }\n }\n \n private updateDateFromSegments(range: 'start' | 'end'): void {\n let month: string, day: string, year: string;\n \n if (range === 'start') {\n month = this.startMonthRef()?.nativeElement?.value || '';\n day = this.startDayRef()?.nativeElement?.value || '';\n year = this.startYearRef()?.nativeElement?.value || '';\n } else {\n month = this.endMonthRef()?.nativeElement?.value || '';\n day = this.endDayRef()?.nativeElement?.value || '';\n year = this.endYearRef()?.nativeElement?.value || '';\n }\n \n let date: Date | null = null;\n if (month && day && year && year.length === 4) {\n const monthNum = parseInt(month, 10);\n const dayNum = parseInt(day, 10);\n const yearNum = parseInt(year, 10);\n \n if (monthNum >= 1 && monthNum <= 12 && dayNum >= 1 && dayNum <= 31) {\n date = new Date(yearNum, monthNum - 1, dayNum);\n // Validate the date is real (handles Feb 30, etc.)\n if (date.getFullYear() !== yearNum || date.getMonth() !== monthNum - 1 || date.getDate() !== dayNum) {\n date = null;\n }\n }\n }\n \n const currentValue = this.value();\n if (range === 'start') {\n this.updateRange({ start: date, end: currentValue.end });\n } else {\n this.updateRange({ start: currentValue.start, end: date });\n }\n }\n \n private focusNextSegment(range: 'start' | 'end', segment: 'month' | 'day' | 'year'): void {\n if (range === 'start') {\n if (segment === 'month') {this.startDayRef().nativeElement.focus();}\n else if (segment === 'day') {this.startYearRef().nativeElement.focus();}\n else if (segment === 'year') {this.endMonthRef().nativeElement.focus();}\n } else {\n if (segment === 'month') {this.endDayRef().nativeElement.focus();}\n else if (segment === 'day') {this.endYearRef().nativeElement.focus();}\n // End year is the last field - could focus calendar button or just stay\n }\n }\n \n private focusPrevSegment(range: 'start' | 'end', segment: 'month' | 'day' | 'year'): void {\n if (range === 'start') {\n // Start month is the first field - nowhere to go back\n if (segment === 'day') {this.startMonthRef().nativeElement.focus();}\n else if (segment === 'year') {this.startDayRef().nativeElement.focus();}\n } else {\n if (segment === 'month') {this.startYearRef().nativeElement.focus();}\n else if (segment === 'day') {this.endMonthRef().nativeElement.focus();}\n else if (segment === 'year') {this.endDayRef().nativeElement.focus();}\n }\n }\n\n openDatepicker(): void {\n if (this.isOpen()) {return;}\n\n this.createOverlay();\n this.isOpen.set(true);\n\n // Reset calendar interaction state when opening\n const cal = this.calendar();\n if (cal) {\n setTimeout(() => cal.resetInteractionState(), 0);\n }\n }\n\n close(): void {\n if (this.overlayRef) {\n this.overlayRef.dispose();\n this.overlayRef = undefined;\n this.portal = undefined;\n }\n this.isOpen.set(false);\n }\n\n private createOverlay(): void {\n if (this.overlayRef) {return;}\n\n const positions: ConnectedPosition[] = [\n {\n originX: 'start',\n originY: 'bottom',\n overlayX: 'start',\n overlayY: 'top',\n offsetY: 8,\n },\n {\n originX: 'start',\n originY: 'top',\n overlayX: 'start',\n overlayY: 'bottom',\n offsetY: -8,\n },\n {\n originX: 'end',\n originY: 'bottom',\n overlayX: 'end',\n overlayY: 'top',\n offsetY: 8,\n },\n {\n originX: 'end',\n originY: 'top',\n overlayX: 'end',\n overlayY: 'bottom',\n offsetY: -8,\n },\n ];\n\n const positionStrategy = this.overlay\n .position()\n .flexibleConnectedTo(this.wrapperEl())\n .withPositions(positions)\n .withPush(false);\n\n this.overlayRef = this.overlay.create({\n positionStrategy,\n scrollStrategy: this.overlay.scrollStrategies.reposition(),\n hasBackdrop: true,\n backdropClass: 'cdk-overlay-transparent-backdrop',\n panelClass: 'tn-datepicker-overlay'\n });\n\n // Close datepicker when backdrop is clicked\n this.overlayRef.backdropClick().subscribe(() => {\n this.close();\n });\n\n this.portal = new TemplatePortal(this.calendarTemplate(), this.viewContainerRef);\n this.overlayRef.attach(this.portal);\n }\n}","<div class=\"tn-date-range-container\">\n <div #wrapper ixInput class=\"tn-date-range-wrapper\" style=\"padding-right: 40px;\">\n <!-- Start date segments -->\n <div class=\"tn-date-segment-group\">\n <input\n #startMonthInput\n type=\"text\"\n class=\"tn-date-segment tn-date-segment-month\"\n placeholder=\"MM\"\n maxlength=\"2\"\n [disabled]=\"isDisabled()\"\n (focus)=\"onSegmentFocus('start', 'month')\"\n (blur)=\"onSegmentBlur('start', 'month')\"\n (keydown)=\"onSegmentKeydown($event, 'start', 'month')\">\n <span class=\"tn-date-segment-separator\">/</span>\n <input\n #startDayInput\n type=\"text\"\n class=\"tn-date-segment tn-date-segment-day\"\n placeholder=\"DD\"\n maxlength=\"2\"\n [disabled]=\"isDisabled()\"\n (focus)=\"onSegmentFocus('start', 'day')\"\n (blur)=\"onSegmentBlur('start', 'day')\"\n (keydown)=\"onSegmentKeydown($event, 'start', 'day')\">\n <span class=\"tn-date-segment-separator\">/</span>\n <input\n #startYearInput\n type=\"text\"\n class=\"tn-date-segment tn-date-segment-year\"\n placeholder=\"YYYY\"\n maxlength=\"4\"\n [disabled]=\"isDisabled()\"\n (focus)=\"onSegmentFocus('start', 'year')\"\n (blur)=\"onSegmentBlur('start', 'year')\"\n (keydown)=\"onSegmentKeydown($event, 'start', 'year')\">\n </div>\n\n <span class=\"tn-date-range-separator\">–</span>\n\n <!-- End date segments -->\n <div class=\"tn-date-segment-group\">\n <input\n #endMonthInput\n type=\"text\"\n class=\"tn-date-segment tn-date-segment-month\"\n placeholder=\"MM\"\n maxlength=\"2\"\n [disabled]=\"isDisabled()\"\n (focus)=\"onSegmentFocus('end', 'month')\"\n (blur)=\"onSegmentBlur('end', 'month')\"\n (keydown)=\"onSegmentKeydown($event, 'end', 'month')\">\n <span class=\"tn-date-segment-separator\">/</span>\n <input\n #endDayInput\n type=\"text\"\n class=\"tn-date-segment tn-date-segment-day\"\n placeholder=\"DD\"\n maxlength=\"2\"\n [disabled]=\"isDisabled()\"\n (focus)=\"onSegmentFocus('end', 'day')\"\n (blur)=\"onSegmentBlur('end', 'day')\"\n (keydown)=\"onSegmentKeydown($event, 'end', 'day')\">\n <span class=\"tn-date-segment-separator\">/</span>\n <input\n #endYearInput\n type=\"text\"\n class=\"tn-date-segment tn-date-segment-year\"\n placeholder=\"YYYY\"\n maxlength=\"4\"\n [disabled]=\"isDisabled()\"\n (focus)=\"onSegmentFocus('end', 'year')\"\n (blur)=\"onSegmentBlur('end', 'year')\"\n (keydown)=\"onSegmentKeydown($event, 'end', 'year')\">\n </div>\n\n <button\n type=\"button\"\n class=\"tn-date-range-toggle\"\n aria-label=\"Open calendar\"\n [disabled]=\"isDisabled()\"\n (click)=\"openDatepicker()\">\n <span aria-hidden=\"true\">📅</span>\n </button>\n </div>\n\n <ng-template #calendarTemplate>\n <tn-calendar\n class=\"tn-calendar\"\n [startView]=\"'month'\"\n [rangeMode]=\"true\"\n [selectedRange]=\"initialRange()\"\n (selectedRangeChange)=\"onRangeSelected($event)\" />\n </ng-template>\n</div>\n","\nimport { Component, input, signal, forwardRef, computed } from '@angular/core';\nimport type { ControlValueAccessor} from '@angular/forms';\nimport { NG_VALUE_ACCESSOR, FormsModule } from '@angular/forms';\nimport type { TnSelectOption } from '../select/select.component';\nimport { TnSelectComponent } from '../select/select.component';\n\n@Component({\n selector: 'tn-time-input',\n standalone: true,\n imports: [FormsModule, TnSelectComponent],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => TnTimeInputComponent),\n multi: true\n }\n ],\n templateUrl: './time-input.component.html',\n styleUrl: './time-input.component.scss',\n host: {\n 'class': 'tn-time-input'\n }\n})\nexport class TnTimeInputComponent implements ControlValueAccessor {\n disabled = input<boolean>(false);\n format = input<'12h' | '24h'>('12h');\n granularity = input<'15m' | '30m' | '1h'>('15m');\n placeholder = input<string>('Pick a time');\n testId = input<string>('');\n\n private formDisabled = signal<boolean>(false);\n isDisabled = computed(() => this.disabled() || this.formDisabled());\n\n private step = computed((): number => {\n switch (this.granularity()) {\n case '15m': return 15;\n case '30m': return 30;\n case '1h': return 60;\n default: return 15;\n }\n });\n\n private onChange = (_value: string) => {};\n private onTouched = () => {};\n\n _value: string | null = null;\n \n // Generate time options for tn-select\n timeSelectOptions = computed((): TnSelectOption<string>[] => {\n const options: TnSelectOption<string>[] = [];\n const totalMinutes = 24 * 60; // Total minutes in a day\n\n for (let minutes = 0; minutes < totalMinutes; minutes += this.step()) {\n const hours = Math.floor(minutes / 60);\n const mins = minutes % 60;\n\n if (this.format() === '24h') {\n const timeStr = `${hours.toString().padStart(2, '0')}:${mins.toString().padStart(2, '0')}`;\n options.push({ value: timeStr, label: timeStr });\n } else {\n const displayHour = hours === 0 ? 12 : hours > 12 ? hours - 12 : hours;\n const ampm = hours < 12 ? 'AM' : 'PM';\n const timeStr = `${displayHour}:${mins.toString().padStart(2, '0')} ${ampm}`;\n options.push({ value: timeStr, label: timeStr });\n }\n }\n\n return options;\n });\n\n\n // ControlValueAccessor implementation\n writeValue(value: string): void {\n this._value = value || null;\n }\n\n registerOnChange(fn: (value: string) => void): void {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n\n setDisabledState(isDisabled: boolean): void {\n this.formDisabled.set(isDisabled);\n }\n\n // Event handlers\n onSelectionChange(value: string): void {\n this._value = value;\n this.onChange(value);\n this.onTouched();\n }\n}","<tn-select\n [options]=\"timeSelectOptions()\"\n [placeholder]=\"placeholder()\"\n [disabled]=\"isDisabled()\"\n [testId]=\"testId()\"\n [ngModel]=\"_value\"\n (selectionChange)=\"onSelectionChange($event)\" />\n","import type { OnInit, OnDestroy} from '@angular/core';\nimport { ElementRef, Directive, forwardRef, signal, inject } from '@angular/core';\nimport type { ControlValueAccessor} from '@angular/forms';\nimport { NG_VALUE_ACCESSOR } from '@angular/forms';\n\n@Directive({\n selector: 'input[tnSliderThumb]',\n standalone: true,\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => TnSliderThumbDirective),\n multi: true\n }\n ],\n host: {\n 'type': 'range',\n 'class': 'tn-slider-thumb',\n '[disabled]': 'slider?.isDisabled()',\n '[attr.min]': 'slider?.min()',\n '[attr.max]': 'slider?.max()',\n '[attr.step]': 'slider?.step()',\n '[value]': 'slider?.value()',\n '(input)': 'onInput($event)',\n '(change)': 'onChange($event)',\n '(blur)': 'onTouched()',\n '(mousedown)': 'onMouseDown($event)',\n '(touchstart)': 'onTouchStart($event)'\n }\n})\nexport class TnSliderThumbDirective implements ControlValueAccessor, OnInit, OnDestroy {\n disabled = signal<boolean>(false);\n\n slider?: {\n isDisabled: () => boolean;\n min: () => number;\n max: () => number;\n step: () => number;\n value: () => number;\n updateValue: (value: number) => void;\n getSliderRect: () => DOMRect;\n }; // Will be set by parent slider component\n\n onTouched = () => {};\n\n private onChangeCallback = (_value: number) => {};\n private isDragging = false;\n\n private elementRef = inject(ElementRef<HTMLInputElement>);\n\n ngOnInit() {\n // Make the native input visually hidden but still accessible\n const input = this.elementRef.nativeElement;\n input.style.opacity = '0';\n input.style.position = 'absolute';\n input.style.width = '100%';\n input.style.height = '100%';\n input.style.margin = '0';\n input.style.padding = '0';\n input.style.cursor = 'pointer';\n input.style.zIndex = '2';\n }\n\n ngOnDestroy() {\n this.cleanup();\n }\n\n // ControlValueAccessor implementation\n writeValue(value: number): void {\n if (this.elementRef.nativeElement) {\n this.elementRef.nativeElement.value = value?.toString() || '0';\n }\n }\n\n registerOnChange(fn: (value: number) => void): void {\n this.onChangeCallback = fn;\n }\n\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n\n setDisabledState(isDisabled: boolean): void {\n this.disabled.set(isDisabled);\n if (this.elementRef.nativeElement) {\n this.elementRef.nativeElement.disabled = isDisabled;\n }\n }\n\n onInput(event: Event): void {\n const input = event.target as HTMLInputElement;\n const value = parseFloat(input.value);\n \n if (this.slider) {\n this.slider.updateValue(value);\n }\n this.onChangeCallback(value);\n }\n\n onChange(_event: Event): void {\n this.onTouched();\n }\n\n onMouseDown(event: MouseEvent): void {\n if (this.disabled()) {return;}\n this.isDragging = true;\n this.addGlobalListeners();\n event.stopPropagation(); // Prevent track click\n }\n\n onTouchStart(event: TouchEvent): void {\n if (this.disabled()) {return;}\n this.isDragging = true;\n this.addGlobalListeners();\n event.stopPropagation(); // Prevent track click\n }\n\n private addGlobalListeners(): void {\n document.addEventListener('mousemove', this.onGlobalMouseMove);\n document.addEventListener('mouseup', this.onGlobalMouseUp);\n document.addEventListener('touchmove', this.onGlobalTouchMove, { passive: false });\n document.addEventListener('touchend', this.onGlobalTouchEnd);\n }\n\n private removeGlobalListeners(): void {\n document.removeEventListener('mousemove', this.onGlobalMouseMove);\n document.removeEventListener('mouseup', this.onGlobalMouseUp);\n document.removeEventListener('touchmove', this.onGlobalTouchMove);\n document.removeEventListener('touchend', this.onGlobalTouchEnd);\n }\n\n private onGlobalMouseMove = (event: MouseEvent): void => {\n if (!this.isDragging || this.disabled()) {return;}\n event.preventDefault();\n this.updateValueFromPosition(event.clientX);\n };\n\n private onGlobalMouseUp = (): void => {\n if (this.isDragging) {\n this.isDragging = false;\n this.onTouched();\n this.removeGlobalListeners();\n }\n };\n\n private onGlobalTouchMove = (event: TouchEvent): void => {\n if (!this.isDragging || this.disabled()) {return;}\n event.preventDefault();\n const touch = event.touches[0];\n this.updateValueFromPosition(touch.clientX);\n };\n\n private onGlobalTouchEnd = (): void => {\n if (this.isDragging) {\n this.isDragging = false;\n this.onTouched();\n this.removeGlobalListeners();\n }\n };\n\n private updateValueFromPosition(clientX: number): void {\n if (!this.slider) {return;}\n\n const rect = this.slider.getSliderRect();\n const percentage = Math.max(0, Math.min(1, (clientX - rect.left) / rect.width));\n const minVal = this.slider.min();\n const maxVal = this.slider.max();\n const newValue = minVal + (percentage * (maxVal - minVal));\n\n this.slider.updateValue(newValue);\n }\n\n private cleanup(): void {\n this.removeGlobalListeners();\n }\n}","import { A11yModule } from '@angular/cdk/a11y';\nimport type { ElementRef, OnDestroy, AfterViewInit} from '@angular/core';\nimport { Component, contentChild, input, forwardRef, signal, computed, viewChild, effect } from '@angular/core';\nimport type { ControlValueAccessor} from '@angular/forms';\nimport { NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { TnSliderThumbDirective } from './slider-thumb.directive';\n\nexport type LabelType = 'none' | 'handle' | 'track' | 'both';\n\n@Component({\n selector: 'tn-slider',\n standalone: true,\n imports: [A11yModule],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => TnSliderComponent),\n multi: true\n }\n ],\n templateUrl: './slider.component.html',\n styleUrl: './slider.component.scss',\n host: {\n 'class': 'tn-slider',\n '[attr.aria-disabled]': 'isDisabled()'\n }\n})\nexport class TnSliderComponent implements ControlValueAccessor, OnDestroy, AfterViewInit {\n min = input<number>(0);\n max = input<number>(100);\n step = input<number>(1);\n disabled = input<boolean>(false);\n labelPrefix = input<string>('');\n labelSuffix = input<string>('');\n labelType = input<LabelType>('none');\n\n thumbDirective = contentChild.required(TnSliderThumbDirective);\n sliderContainer = viewChild.required<ElementRef<HTMLDivElement>>('sliderContainer');\n thumbVisual = viewChild.required<ElementRef<HTMLDivElement>>('thumbVisual');\n\n private onChange = (_value: number) => {};\n private onTouched = () => {};\n\n value = signal<number>(0);\n private _showLabel = signal<boolean>(false);\n private _labelVisible = signal<boolean>(false);\n private formDisabled = signal<boolean>(false);\n\n // Computed disabled state (combines input and form state)\n isDisabled = computed(() => this.disabled() || this.formDisabled());\n\n // Computed percentage for track fill\n fillPercentage = computed(() => {\n const range = this.max() - this.min();\n if (range === 0) {return 0;}\n return ((this.value() - this.min()) / range) * 100;\n });\n\n // Computed scale for track fill (0 to 1)\n fillScale = computed(() => {\n return this.fillPercentage() / 100;\n });\n\n // Computed position for thumb (in pixels from left)\n thumbPosition = computed(() => {\n const containerWidth = this.sliderContainer()?.nativeElement?.offsetWidth || 0;\n const percentage = this.fillPercentage();\n // Center the thumb (20px width, so -10px offset)\n return (containerWidth * percentage / 100) - 10;\n });\n\n // Public signals for label management\n showLabel = this._showLabel.asReadonly();\n labelVisible = this._labelVisible.asReadonly();\n\n constructor() {\n // Effect to handle labelType changes\n effect(() => {\n const currentLabelType = this.labelType();\n if (currentLabelType !== 'none') {\n this.enableLabel();\n // Set up interaction listeners for handle type after view init\n if (this.sliderContainer() && (currentLabelType === 'handle' || currentLabelType === 'both')) {\n this.setupHandleInteractionListeners();\n }\n } else {\n // Disable label and clean up listeners\n this._showLabel.set(false);\n this.cleanupHandleInteractionListeners();\n }\n });\n }\n\n ngAfterViewInit() {\n // Initialize thumb directive if present\n const thumbDirective = this.thumbDirective();\n if (thumbDirective) {\n thumbDirective.slider = this;\n }\n this.updateThumbPosition();\n\n // Set up handle interaction listeners if labelType is handle or both\n const currentLabelType = this.labelType();\n if ((currentLabelType === 'handle' || currentLabelType === 'both') && this._showLabel()) {\n this.setupHandleInteractionListeners();\n }\n }\n\n ngOnDestroy() {\n this.cleanupHandleInteractionListeners();\n }\n\n // ControlValueAccessor implementation\n writeValue(value: number): void {\n if (value !== null && value !== undefined) {\n this.value.set(this.clampValue(value));\n }\n }\n\n registerOnChange(fn: (value: number) => void): void {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n\n setDisabledState(isDisabled: boolean): void {\n this.formDisabled.set(isDisabled);\n }\n\n // Public methods for thumb directive and label management\n updateValue(newValue: number): void {\n const clampedValue = this.clampValue(newValue);\n this.value.set(clampedValue);\n this.onChange(clampedValue);\n this.updateThumbPosition();\n }\n\n enableLabel(): void {\n this._showLabel.set(true);\n }\n\n showThumbLabel(): void {\n this._labelVisible.set(true);\n }\n\n hideThumbLabel(): void {\n this._labelVisible.set(false);\n }\n\n getSliderRect(): DOMRect {\n return this.sliderContainer().nativeElement.getBoundingClientRect();\n }\n\n onTrackClick(event: MouseEvent | TouchEvent): void {\n if (this.isDisabled()) {return;}\n\n event.preventDefault();\n const rect = this.getSliderRect();\n const clientX = event instanceof MouseEvent ? event.clientX : event.touches[0].clientX;\n const percentage = (clientX - rect.left) / rect.width;\n const minVal = this.min();\n const maxVal = this.max();\n const newValue = minVal + (percentage * (maxVal - minVal));\n\n this.updateValue(newValue);\n this.onTouched();\n }\n\n private updateThumbPosition(): void {\n // Thumb position is now handled by computed signal and template binding\n // No manual DOM manipulation needed\n }\n\n private clampValue(value: number): number {\n const minVal = this.min();\n const maxVal = this.max();\n const stepVal = this.step();\n\n // Clamp to min/max\n let clampedValue = Math.max(minVal, Math.min(maxVal, value));\n\n // Snap to step\n if (stepVal > 0) {\n const steps = Math.round((clampedValue - minVal) / stepVal);\n clampedValue = minVal + (steps * stepVal);\n }\n\n return clampedValue;\n }\n\n // Handle interaction listeners for tooltip-style labels\n private setupHandleInteractionListeners(): void {\n const sliderContainer = this.sliderContainer();\n if (sliderContainer) {\n const containerEl = sliderContainer.nativeElement;\n const thumbInput = containerEl.querySelector('input[tnSliderThumb]');\n\n containerEl.addEventListener('mousedown', this.onInteractionStart);\n containerEl.addEventListener('touchstart', this.onInteractionStart);\n\n if (thumbInput) {\n thumbInput.addEventListener('mousedown', this.onInteractionStart);\n thumbInput.addEventListener('touchstart', this.onInteractionStart);\n }\n\n document.addEventListener('mouseup', this.onInteractionEnd);\n document.addEventListener('touchend', this.onInteractionEnd);\n }\n }\n\n private cleanupHandleInteractionListeners(): void {\n const sliderContainer = this.sliderContainer();\n if (sliderContainer) {\n const containerEl = sliderContainer.nativeElement;\n const thumbInput = containerEl.querySelector('input[tnSliderThumb]');\n\n containerEl.removeEventListener('mousedown', this.onInteractionStart);\n containerEl.removeEventListener('touchstart', this.onInteractionStart);\n\n if (thumbInput) {\n thumbInput.removeEventListener('mousedown', this.onInteractionStart);\n thumbInput.removeEventListener('touchstart', this.onInteractionStart);\n }\n\n document.removeEventListener('mouseup', this.onInteractionEnd);\n document.removeEventListener('touchend', this.onInteractionEnd);\n }\n }\n\n private onInteractionStart = (): void => {\n const currentLabelType = this.labelType();\n if (currentLabelType === 'handle' || currentLabelType === 'both') {\n this.showThumbLabel();\n }\n }\n\n private onInteractionEnd = (): void => {\n const currentLabelType = this.labelType();\n if (currentLabelType === 'handle' || currentLabelType === 'both') {\n this.hideThumbLabel();\n }\n }\n}","<div\n #sliderContainer\n class=\"tn-slider-container\"\n [attr.aria-disabled]=\"isDisabled()\"\n [attr.data-disabled]=\"isDisabled()\"\n (mousedown)=\"onTrackClick($event)\"\n (touchstart)=\"onTrackClick($event)\">\n\n <div class=\"tn-slider-track\">\n <div class=\"tn-slider-track-inactive\"></div>\n <div class=\"tn-slider-track-active\">\n <div\n class=\"tn-slider-track-active-fill\"\n [style.transform]=\"'scaleX(' + fillScale() + ')'\">\n </div>\n </div>\n @if ((labelType() === 'track' || labelType() === 'both') && showLabel()) {\n <div class=\"tn-slider-track-label\">\n {{ labelPrefix() }}{{ value() }}{{ labelSuffix() }}\n </div>\n }\n </div>\n\n <div\n #thumbVisual\n class=\"tn-slider-thumb-visual\"\n [style.transform]=\"'translateX(' + thumbPosition() + 'px)'\">\n <div class=\"tn-slider-thumb-knob\"></div>\n @if ((labelType() === 'handle' || labelType() === 'both') && showLabel()) {\n <div\n class=\"tn-slider-thumb-label\"\n [class.visible]=\"labelVisible()\">\n {{ labelPrefix() }}{{ value() }}{{ labelSuffix() }}\n </div>\n }\n </div>\n\n <ng-content />\n</div>\n","import type {\n OnDestroy,\n OnInit} from '@angular/core';\nimport {\n Directive,\n input,\n ElementRef,\n inject\n} from '@angular/core';\nimport { TnSliderComponent } from './slider.component';\n\n@Directive({\n selector: 'tn-slider[tnSliderWithLabel]',\n standalone: true\n})\nexport class TnSliderWithLabelDirective implements OnInit, OnDestroy {\n enabled = input<boolean | string>(true, { alias: 'tnSliderWithLabel' });\n\n private _elementRef = inject(ElementRef<HTMLElement>);\n private _slider = inject(TnSliderComponent, { host: true });\n\n ngOnInit() {\n const enabled = this.enabled();\n const isEnabled = enabled === true || enabled === '' || enabled === 'true';\n\n if (!isEnabled) {\n return;\n }\n\n // Enable the label in the slider component\n this._slider.enableLabel();\n\n // Only set up event listeners for handle type labels (tooltip behavior)\n const currentLabelType = this._slider.labelType();\n if (currentLabelType === 'handle' || currentLabelType === 'both') {\n this._setupInteractionListeners();\n }\n }\n\n private _setupInteractionListeners(): void {\n const sliderContainer = this._elementRef.nativeElement.querySelector('.tn-slider-container');\n const thumbInput = this._elementRef.nativeElement.querySelector('input[tnSliderThumb]');\n \n if (sliderContainer) {\n sliderContainer.addEventListener('mousedown', this._onInteractionStart);\n sliderContainer.addEventListener('touchstart', this._onInteractionStart);\n }\n \n if (thumbInput) {\n thumbInput.addEventListener('mousedown', this._onInteractionStart);\n thumbInput.addEventListener('touchstart', this._onInteractionStart);\n }\n \n document.addEventListener('mouseup', this._onInteractionEnd);\n document.addEventListener('touchend', this._onInteractionEnd);\n }\n\n ngOnDestroy() {\n this._cleanup();\n }\n\n\n private _onInteractionStart = (_event: Event): void => {\n this._slider.showThumbLabel();\n }\n\n private _onInteractionEnd = (): void => {\n this._slider.hideThumbLabel();\n }\n\n private _cleanup(): void {\n // Only clean up interaction listeners if they were set up for handle type\n const currentLabelType = this._slider.labelType();\n if (currentLabelType === 'handle' || currentLabelType === 'both') {\n const sliderContainer = this._elementRef.nativeElement.querySelector('.tn-slider-container');\n const thumbInput = this._elementRef.nativeElement.querySelector('input[tnSliderThumb]');\n\n if (sliderContainer) {\n sliderContainer.removeEventListener('mousedown', this._onInteractionStart);\n sliderContainer.removeEventListener('touchstart', this._onInteractionStart);\n }\n\n if (thumbInput) {\n thumbInput.removeEventListener('mousedown', this._onInteractionStart);\n thumbInput.removeEventListener('touchstart', this._onInteractionStart);\n }\n\n document.removeEventListener('mouseup', this._onInteractionEnd);\n document.removeEventListener('touchend', this._onInteractionEnd);\n }\n }\n}","import { A11yModule } from '@angular/cdk/a11y';\nimport { ChangeDetectorRef } from '@angular/core';\nimport { Component, input, output, signal, computed, forwardRef, ChangeDetectionStrategy, ViewEncapsulation, inject } from '@angular/core';\nimport type { ControlValueAccessor} from '@angular/forms';\nimport { NG_VALUE_ACCESSOR } from '@angular/forms';\nimport type { TnButtonToggleGroupComponent } from './button-toggle-group.component';\n\n@Component({\n selector: 'tn-button-toggle',\n standalone: true,\n imports: [A11yModule],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => TnButtonToggleComponent),\n multi: true\n }\n ],\n templateUrl: './button-toggle.component.html',\n styleUrl: './button-toggle.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n host: {\n 'class': 'tn-button-toggle',\n '[attr.id]': 'id()',\n '[class.tn-button-toggle--checked]': 'checked()',\n '[class.tn-button-toggle--disabled]': 'isDisabled()',\n '[class.tn-button-toggle--standalone]': '!buttonToggleGroup',\n '(focus)': 'onFocus()'\n }\n})\nexport class TnButtonToggleComponent implements ControlValueAccessor {\n cdr = inject(ChangeDetectorRef);\n\n private static _uniqueIdCounter = 0;\n\n id = input<string>(`tn-button-toggle-${TnButtonToggleComponent._uniqueIdCounter++}`);\n value = input<unknown>(undefined);\n disabled = input<boolean>(false);\n checked = signal<boolean>(false);\n ariaLabel = input<string>('');\n ariaLabelledby = input<string>('');\n\n change = output<{ source: TnButtonToggleComponent; value: unknown }>();\n\n buttonId = computed(() => this.id() + '-button');\n buttonToggleGroup?: TnButtonToggleGroupComponent;\n\n private formDisabled = signal<boolean>(false);\n\n // Computed disabled state (combines input and form state)\n isDisabled = computed(() => this.disabled() || this.formDisabled());\n\n private onChange = (_value: boolean) => {};\n private onTouched = () => {};\n\n // ControlValueAccessor implementation\n writeValue(value: boolean): void {\n this.checked.set(!!value);\n }\n\n registerOnChange(fn: (value: boolean) => void): void {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n\n setDisabledState(isDisabled: boolean): void {\n this.formDisabled.set(isDisabled);\n }\n\n toggle(): void {\n if (this.isDisabled()) {\n return;\n }\n\n // If part of a group, let the group handle the state\n if (this.buttonToggleGroup) {\n this.buttonToggleGroup._onButtonToggleClick(this);\n } else {\n // Standalone toggle - handle its own state\n const newValue = !this.checked();\n this.checked.set(newValue);\n this.onChange(newValue);\n this.onTouched();\n\n this.change.emit({\n source: this,\n value: this.value() || newValue\n });\n }\n }\n\n onFocus(): void {\n this.onTouched();\n }\n\n // Method for group to mark this toggle as checked\n _markForCheck(): void {\n this.checked.set(true);\n this.cdr.markForCheck();\n }\n\n // Method for group to mark this toggle as unchecked\n _markForUncheck(): void {\n this.checked.set(false);\n this.cdr.markForCheck();\n }\n}","<button\n type=\"button\"\n class=\"tn-button-toggle__button\"\n [class.tn-button-toggle__button--checked]=\"checked()\"\n [disabled]=\"isDisabled()\"\n [attr.aria-pressed]=\"checked()\"\n [attr.aria-label]=\"ariaLabel() || null\"\n [attr.aria-labelledby]=\"ariaLabelledby()\"\n [attr.id]=\"buttonId()\"\n (click)=\"toggle()\">\n <span class=\"tn-button-toggle__label\">\n @if (checked()) {\n <span class=\"tn-button-toggle__check\">✓</span>\n }\n <ng-content />\n </span>\n</button>\n","import { A11yModule } from '@angular/cdk/a11y';\nimport { Component, contentChildren, input, output, signal, computed, forwardRef, ChangeDetectionStrategy, ViewEncapsulation, effect } from '@angular/core';\nimport type { ControlValueAccessor} from '@angular/forms';\nimport { NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { TnButtonToggleComponent } from './button-toggle.component';\n\nexport type TnButtonToggleType = 'checkbox' | 'radio';\n\n@Component({\n selector: 'tn-button-toggle-group',\n standalone: true,\n imports: [A11yModule],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => TnButtonToggleGroupComponent),\n multi: true\n }\n ],\n templateUrl: './button-toggle-group.component.html',\n styleUrl: './button-toggle-group.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n host: {\n 'class': 'tn-button-toggle-group'\n }\n})\nexport class TnButtonToggleGroupComponent implements ControlValueAccessor {\n buttonToggles = contentChildren(TnButtonToggleComponent, { descendants: true });\n\n multiple = input<boolean>(false);\n disabled = input<boolean>(false);\n name = input<string>('');\n ariaLabel = input<string>('');\n ariaLabelledby = input<string>('');\n\n change = output<{ source: TnButtonToggleComponent; value: unknown }>();\n\n private selectedValue = signal<unknown>(null);\n private selectedValues = signal<unknown[]>([]);\n private formDisabled = signal<boolean>(false);\n\n // Computed disabled state (combines input and form state)\n isDisabled = computed(() => this.disabled() || this.formDisabled());\n\n private onChange = (_value: unknown) => {};\n private onTouched = () => {};\n\n constructor() {\n // Effect to update button toggles when content children change\n effect(() => {\n const toggles = this.buttonToggles();\n toggles.forEach(toggle => {\n toggle.buttonToggleGroup = this;\n });\n });\n }\n\n // ControlValueAccessor implementation\n writeValue(value: unknown): void {\n if (this.multiple()) {\n this.selectedValues.set(Array.isArray(value) ? value : []);\n this.updateTogglesFromValues();\n } else {\n this.selectedValue.set(value);\n this.updateTogglesFromValue();\n }\n }\n\n registerOnChange(fn: (value: unknown) => void): void {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n\n setDisabledState(isDisabled: boolean): void {\n this.formDisabled.set(isDisabled);\n const toggles = this.buttonToggles();\n toggles.forEach(toggle => {\n toggle.setDisabledState(isDisabled);\n });\n }\n\n _onButtonToggleClick(clickedToggle: TnButtonToggleComponent): void {\n if (this.isDisabled() || clickedToggle.isDisabled()) {\n return;\n }\n\n if (this.multiple()) {\n this.handleMultipleSelection(clickedToggle);\n } else {\n this.handleSingleSelection(clickedToggle);\n }\n\n this.onTouched();\n this.change.emit({\n source: clickedToggle,\n value: this.multiple() ? this.selectedValues() : this.selectedValue()\n });\n }\n\n private handleSingleSelection(clickedToggle: TnButtonToggleComponent): void {\n // In radio mode, clicking the same toggle deselects it\n if (this.selectedValue() === clickedToggle.value) {\n this.selectedValue.set(null);\n clickedToggle._markForUncheck();\n } else {\n // Deselect all others\n const toggles = this.buttonToggles();\n toggles.forEach(toggle => {\n if (toggle !== clickedToggle) {\n toggle._markForUncheck();\n }\n });\n\n this.selectedValue.set(clickedToggle.value);\n clickedToggle._markForCheck();\n }\n\n this.onChange(this.selectedValue());\n }\n\n private handleMultipleSelection(clickedToggle: TnButtonToggleComponent): void {\n const currentValues = [...this.selectedValues()];\n const index = currentValues.indexOf(clickedToggle.value);\n\n if (index > -1) {\n // Remove from selection\n currentValues.splice(index, 1);\n clickedToggle._markForUncheck();\n } else {\n // Add to selection\n currentValues.push(clickedToggle.value);\n clickedToggle._markForCheck();\n }\n\n this.selectedValues.set(currentValues);\n this.onChange([...currentValues]);\n }\n\n private updateTogglesFromValue(): void {\n const toggles = this.buttonToggles();\n const value = this.selectedValue();\n\n toggles.forEach(toggle => {\n if (toggle.value === value) {\n toggle._markForCheck();\n } else {\n toggle._markForUncheck();\n }\n });\n }\n\n private updateTogglesFromValues(): void {\n const toggles = this.buttonToggles();\n const values = this.selectedValues();\n\n toggles.forEach(toggle => {\n if (values.includes(toggle.value)) {\n toggle._markForCheck();\n } else {\n toggle._markForUncheck();\n }\n });\n }\n}","<div class=\"tn-button-toggle-group\"\n [attr.role]=\"multiple() ? 'group' : 'radiogroup'\"\n [attr.aria-label]=\"ariaLabel()\"\n [attr.aria-labelledby]=\"ariaLabelledby()\">\n <ng-content />\n</div>\n","\nimport { Component, input, ChangeDetectionStrategy } from '@angular/core';\n\n@Component({\n selector: 'tn-tooltip',\n standalone: true,\n imports: [],\n templateUrl: './tooltip.component.html',\n styleUrl: './tooltip.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n 'class': 'tn-tooltip-component'\n }\n})\nexport class TnTooltipComponent {\n message = input('');\n id = input('');\n}","<div\n class=\"tn-tooltip\"\n role=\"tooltip\"\n [id]=\"id()\"\n [attr.aria-hidden]=\"false\">\n {{ message() }}\n</div>\n","/* eslint-disable @angular-eslint/no-input-rename */\n// Input aliasing is intentional for directive API consistency (e.g., ixTooltip, ixTooltipPosition)\n// This follows the standard Angular pattern used by Material and other directive-based components\nimport {\n Overlay,\n type OverlayRef,\n type ConnectedPosition,\n OverlayPositionBuilder\n} from '@angular/cdk/overlay';\nimport { ComponentPortal } from '@angular/cdk/portal';\nimport type {\n OnDestroy,\n OnInit,\n ComponentRef\n} from '@angular/core';\nimport {\n Directive,\n input,\n HostListener,\n ElementRef,\n ViewContainerRef,\n inject\n} from '@angular/core';\nimport { TnTooltipComponent } from './tooltip.component';\n\nexport type TooltipPosition = 'above' | 'below' | 'left' | 'right' | 'before' | 'after';\n\n@Directive({\n selector: '[tnTooltip]',\n standalone: true,\n host: {\n '[attr.aria-describedby]': '_ariaDescribedBy',\n }\n})\nexport class TnTooltipDirective implements OnInit, OnDestroy {\n message = input<string>('', { alias: 'tnTooltip' });\n position = input<TooltipPosition>('above', { alias: 'tnTooltipPosition' });\n disabled = input<boolean>(false, { alias: 'tnTooltipDisabled' });\n showDelay = input<number>(0, { alias: 'tnTooltipShowDelay' });\n hideDelay = input<number>(0, { alias: 'tnTooltipHideDelay' });\n tooltipClass = input<string>('', { alias: 'tnTooltipClass' });\n\n private _overlayRef: OverlayRef | null = null;\n private _tooltipInstance: ComponentRef<TnTooltipComponent> | null = null;\n private _showTimeout: ReturnType<typeof setTimeout> | null = null;\n private _hideTimeout: ReturnType<typeof setTimeout> | null = null;\n private _isTooltipVisible = false;\n protected _ariaDescribedBy: string | null = null;\n\n private _overlay = inject(Overlay);\n private _elementRef = inject(ElementRef<HTMLElement>);\n private _viewContainerRef = inject(ViewContainerRef);\n private _overlayPositionBuilder = inject(OverlayPositionBuilder);\n\n ngOnInit() {\n // Generate unique ID for aria-describedby\n this._ariaDescribedBy = `tn-tooltip-${Math.random().toString(36).substr(2, 9)}`;\n }\n\n ngOnDestroy() {\n this._clearTimeouts();\n this.hide(0);\n \n if (this._overlayRef) {\n this._overlayRef.dispose();\n this._overlayRef = null;\n }\n }\n\n @HostListener('mouseenter')\n _onMouseEnter(): void {\n if (!this.disabled() && this.message()) {\n this.show(this.showDelay());\n }\n }\n\n @HostListener('mouseleave')\n _onMouseLeave(): void {\n this.hide(this.hideDelay());\n }\n\n @HostListener('focus')\n _onFocus(): void {\n if (!this.disabled() && this.message()) {\n this.show(this.showDelay());\n }\n }\n\n @HostListener('blur')\n _onBlur(): void {\n this.hide(this.hideDelay());\n }\n\n @HostListener('keydown', ['$event'])\n _onKeydown(event: KeyboardEvent): void {\n if (event.key === 'Escape' && this._isTooltipVisible) {\n this.hide(0);\n }\n }\n\n /** Shows the tooltip */\n show(delay: number = 0): void {\n if (this.disabled() || !this.message() || this._isTooltipVisible) {\n return;\n }\n\n this._clearTimeouts();\n\n this._showTimeout = setTimeout(() => {\n if (!this._overlayRef) {\n this._createOverlay();\n }\n\n this._attachTooltip();\n }, delay);\n }\n\n /** Hides the tooltip */\n hide(delay: number = 0): void {\n this._clearTimeouts();\n\n this._hideTimeout = setTimeout(() => {\n if (this._tooltipInstance) {\n this._tooltipInstance.destroy();\n this._tooltipInstance = null;\n this._isTooltipVisible = false;\n }\n }, delay);\n }\n\n /** Toggle the tooltip visibility */\n toggle(): void {\n this._isTooltipVisible ? this.hide() : this.show();\n }\n\n private _createOverlay(): void {\n const positions = this._getPositions();\n\n const positionStrategy = this._overlayPositionBuilder\n .flexibleConnectedTo(this._elementRef)\n .withPositions(positions)\n .withFlexibleDimensions(false)\n .withViewportMargin(8)\n .withScrollableContainers([]);\n\n this._overlayRef = this._overlay.create({\n positionStrategy,\n scrollStrategy: this._overlay.scrollStrategies.reposition({ scrollThrottle: 20 }),\n panelClass: ['tn-tooltip-panel', `tn-tooltip-panel-${this.position()}`, this.tooltipClass()].filter(Boolean),\n });\n }\n\n private _attachTooltip(): void {\n if (!this._overlayRef) {\n return;\n }\n\n if (!this._tooltipInstance) {\n const portal = new ComponentPortal(TnTooltipComponent, this._viewContainerRef);\n this._tooltipInstance = this._overlayRef.attach(portal);\n this._tooltipInstance.setInput('message', this.message());\n this._tooltipInstance.setInput('id', this._ariaDescribedBy!);\n this._isTooltipVisible = true;\n }\n }\n\n private _getPositions(): ConnectedPosition[] {\n switch (this.position()) {\n case 'above':\n return [\n { originX: 'center', originY: 'top', overlayX: 'center', overlayY: 'bottom', offsetY: -12 },\n { originX: 'center', originY: 'bottom', overlayX: 'center', overlayY: 'top', offsetY: 12 },\n ];\n case 'below':\n return [\n { originX: 'center', originY: 'bottom', overlayX: 'center', overlayY: 'top', offsetY: 12 },\n { originX: 'center', originY: 'top', overlayX: 'center', overlayY: 'bottom', offsetY: -12 },\n ];\n case 'left':\n case 'before':\n return [\n { originX: 'start', originY: 'center', overlayX: 'end', overlayY: 'center', offsetX: -12 },\n { originX: 'end', originY: 'center', overlayX: 'start', overlayY: 'center', offsetX: 12 },\n ];\n case 'right':\n case 'after':\n return [\n { originX: 'end', originY: 'center', overlayX: 'start', overlayY: 'center', offsetX: 12 },\n { originX: 'start', originY: 'center', overlayX: 'end', overlayY: 'center', offsetX: -12 },\n ];\n default:\n return [\n { originX: 'center', originY: 'bottom', overlayX: 'center', overlayY: 'top', offsetY: 12 },\n ];\n }\n }\n\n private _clearTimeouts(): void {\n if (this._showTimeout) {\n clearTimeout(this._showTimeout);\n this._showTimeout = null;\n }\n if (this._hideTimeout) {\n clearTimeout(this._hideTimeout);\n this._hideTimeout = null;\n }\n }\n}","import type { DialogConfig, DialogRef } from '@angular/cdk/dialog';\nimport { Dialog } from '@angular/cdk/dialog';\nimport type { ComponentType } from '@angular/cdk/portal';\nimport type { TemplateRef } from '@angular/core';\nimport { Injectable, inject } from '@angular/core';\nimport type { Observable } from 'rxjs';\n\nexport type TnDialogOpenTarget<C> = ComponentType<C> | TemplateRef<unknown>;\n\nexport interface TnDialogDefaults {\n panelClass?: string | string[];\n maxWidth?: string;\n maxHeight?: string;\n width?: string;\n height?: string;\n disableClose?: boolean;\n role?: 'dialog' | 'alertdialog';\n fullscreen?: boolean;\n}\n\nconst defaults: TnDialogDefaults = {\n panelClass: ['tn-dialog-panel'],\n maxWidth: '90vw',\n maxHeight: '90vh',\n role: 'dialog',\n};\n\n@Injectable({ providedIn: 'root' })\nexport class TnDialog {\n private dialog = inject(Dialog);\n\n /**\n * Open a dialog with the given component or template.\n * Applies default configuration for panel class, max dimensions, and focus behavior.\n */\n open<C, D = unknown, R = unknown>(\n target: ComponentType<C> | TemplateRef<C>,\n config?: DialogConfig<D, DialogRef<R, C>>\n ): DialogRef<R, C> {\n const merged = {\n ...defaults,\n ...config,\n panelClass: [\n ...(defaults.panelClass as string[]),\n ...(Array.isArray(config?.panelClass) ? config.panelClass : config?.panelClass ? [config.panelClass] : [])\n ],\n autoFocus: config?.autoFocus ?? true,\n restoreFocus: config?.restoreFocus ?? true,\n };\n\n return this.dialog.open(target, merged);\n }\n\n /**\n * Open a fullscreen dialog that takes over the entire viewport.\n * Automatically applies fullscreen styling and dimensions.\n */\n openFullscreen<C, D = unknown, R = unknown>(\n target: ComponentType<C> | TemplateRef<C>,\n config?: DialogConfig<D, DialogRef<R, C>>\n ): DialogRef<R, C> {\n const merged = {\n ...defaults,\n ...config,\n maxWidth: '100vw',\n maxHeight: '100vh',\n width: '100vw',\n height: '100vh',\n panelClass: [\n ...(defaults.panelClass as string[]),\n ...(Array.isArray(config?.panelClass) ? config.panelClass : config?.panelClass ? [config.panelClass] : []),\n 'tn-dialog--fullscreen'\n ],\n autoFocus: config?.autoFocus ?? true,\n restoreFocus: config?.restoreFocus ?? true,\n };\n\n return this.dialog.open(target, merged);\n }\n\n /**\n * Open a confirmation dialog with customizable title, message, and button labels.\n * Returns a promise that resolves to an Observable of the user's choice.\n */\n confirm(opts: {\n title: string;\n message?: string;\n confirmText?: string;\n cancelText?: string;\n destructive?: boolean;\n }): Promise<Observable<boolean | undefined>> {\n // Import the confirm dialog component dynamically to avoid circular dependencies\n return import('./confirm-dialog.component').then(m => {\n const dialogRef = this.open(\n m.TnConfirmDialogComponent,\n {\n data: opts,\n role: 'alertdialog',\n disableClose: true,\n panelClass: [opts.destructive ? 'tn-dialog--destructive' : ''].filter(Boolean),\n }\n );\n return dialogRef.closed as Observable<boolean | undefined>;\n });\n }\n}","import { DialogRef, DIALOG_DATA } from '@angular/cdk/dialog';\nimport { DOCUMENT } from '@angular/common';\nimport { Component, input, signal, inject } from '@angular/core';\nimport type { OnInit} from '@angular/core';\n\n@Component({\n selector: 'tn-dialog-shell',\n templateUrl: './dialog-shell.component.html',\n standalone: true,\n imports: [],\n host: {\n 'class': 'tn-dialog-shell'\n }\n})\nexport class TnDialogShellComponent implements OnInit {\n title = input<string>('');\n showFullscreenButton = input<boolean>(false);\n\n isFullscreen = signal<boolean>(false);\n private originalStyles: { [key: string]: string } = {};\n\n private ref = inject(DialogRef);\n private document = inject(DOCUMENT);\n private data = inject(DIALOG_DATA, { optional: true });\n\n ngOnInit() {\n // Check if dialog was opened in fullscreen mode by looking for existing fullscreen class\n setTimeout(() => {\n const dialogPanel = this.document.querySelector('.tn-dialog-panel');\n if (dialogPanel?.classList.contains('tn-dialog--fullscreen')) {\n this.isFullscreen.set(true);\n }\n });\n }\n\n close(result?: unknown): void {\n this.ref.close(result);\n }\n \n toggleFullscreen() {\n if (this.isFullscreen()) {\n this.exitFullscreen();\n } else {\n this.enterFullscreen();\n }\n }\n\n private enterFullscreen() {\n const dialogPanel = this.document.querySelector('.tn-dialog-panel') as HTMLElement;\n\n if (dialogPanel) {\n // Store original styles\n this.originalStyles = {\n panelMaxWidth: dialogPanel.style.maxWidth,\n panelMaxHeight: dialogPanel.style.maxHeight,\n panelWidth: dialogPanel.style.width,\n panelHeight: dialogPanel.style.height,\n panelBorderRadius: dialogPanel.style.borderRadius\n };\n\n // Apply fullscreen styles\n dialogPanel.style.maxWidth = '100vw';\n dialogPanel.style.maxHeight = '100vh';\n dialogPanel.style.width = '100vw';\n dialogPanel.style.height = '100vh';\n dialogPanel.style.borderRadius = '0';\n\n // Add fullscreen class\n dialogPanel.classList.add('tn-dialog--fullscreen');\n\n this.isFullscreen.set(true);\n }\n }\n\n private exitFullscreen() {\n const dialogPanel = this.document.querySelector('.tn-dialog-panel') as HTMLElement;\n\n if (dialogPanel) {\n // Restore original styles\n dialogPanel.style.maxWidth = this.originalStyles['panelMaxWidth'] || '90vw';\n dialogPanel.style.maxHeight = this.originalStyles['panelMaxHeight'] || '90vh';\n dialogPanel.style.width = this.originalStyles['panelWidth'] || '';\n dialogPanel.style.height = this.originalStyles['panelHeight'] || '';\n dialogPanel.style.borderRadius = this.originalStyles['panelBorderRadius'] || '8px';\n\n // Remove fullscreen class\n dialogPanel.classList.remove('tn-dialog--fullscreen');\n\n this.isFullscreen.set(false);\n }\n }\n}","<header class=\"tn-dialog__header\">\n <h2 class=\"tn-dialog__title\">{{ title() }}</h2>\n @if (showFullscreenButton()) {\n <button\n type=\"button\"\n class=\"tn-dialog__fullscreen\"\n tabindex=\"-1\"\n [attr.aria-label]=\"isFullscreen() ? 'Exit fullscreen' : 'Enter fullscreen'\"\n (click)=\"toggleFullscreen()\">\n <span class=\"tn-dialog__fullscreen-icon\">{{ isFullscreen() ? '⤓' : '⤢' }}</span>\n </button>\n }\n <button type=\"button\" class=\"tn-dialog__close\" tabindex=\"-1\" aria-label=\"Close dialog\" (click)=\"close()\">✕</button>\n</header>\n\n<section class=\"tn-dialog__content\" cdkDialogContent>\n <ng-content />\n</section>\n\n<footer class=\"tn-dialog__actions\" cdkDialogActions>\n <ng-content select=\"[tnDialogAction]\" />\n</footer>\n","import { DialogRef} from '@angular/cdk/dialog';\nimport { DIALOG_DATA } from '@angular/cdk/dialog';\nimport { Component, inject } from '@angular/core';\nimport { TnDialogShellComponent } from './dialog-shell.component';\nimport { TnButtonComponent } from '../button/button.component';\n\nexport interface TnConfirmDialogData {\n title: string;\n message?: string;\n confirmText?: string;\n cancelText?: string;\n destructive?: boolean;\n}\n\n@Component({\n selector: 'tn-confirm-dialog',\n templateUrl: './confirm-dialog.component.html',\n standalone: true,\n imports: [TnDialogShellComponent, TnButtonComponent],\n host: {\n 'class': 'tn-dialog-shell',\n '[class.tn-dialog--destructive]': 'data.destructive'\n }\n})\nexport class TnConfirmDialogComponent {\n ref = inject(DialogRef<boolean>);\n data = inject<TnConfirmDialogData>(DIALOG_DATA);\n}","<tn-dialog-shell [title]=\"data.title\">\n <p style=\"padding: var(--content-padding);\">{{ data.message }}</p>\n <div tnDialogAction>\n <tn-button\n type=\"button\"\n variant=\"outline\"\n [label]=\"data.cancelText || 'Cancel'\"\n (click)=\"ref.close(false)\" />\n <tn-button\n type=\"button\"\n [color]=\"data.destructive ? 'warn' : 'primary'\"\n [label]=\"data.confirmText || 'OK'\"\n (click)=\"ref.close(true)\" />\n </div>\n</tn-dialog-shell>\n","import type { TemplateRef} from '@angular/core';\nimport { Component, input, viewChild } from '@angular/core';\n\n@Component({\n selector: 'tn-step',\n template: `\n <ng-template #content>\n <ng-content />\n </ng-template>\n `,\n standalone: true\n})\nexport class TnStepComponent {\n label = input<string>('');\n icon = input<string | undefined>(undefined);\n optional = input<boolean>(false);\n completed = input<boolean>(false);\n hasError = input<boolean>(false);\n data = input<unknown>(null);\n\n content = viewChild.required<TemplateRef<unknown>>('content');\n}","import { trigger, style, transition, animate } from '@angular/animations';\nimport { CommonModule } from '@angular/common';\nimport { ChangeDetectorRef, Component, input, output, contentChildren, computed, effect, model, inject } from '@angular/core';\nimport { TnStepComponent } from './step.component';\n\n@Component({\n selector: 'tn-stepper',\n templateUrl: './stepper.component.html',\n styleUrls: ['./stepper.component.scss'],\n standalone: true,\n imports: [CommonModule],\n animations: [\n trigger('stepTransition', [\n transition(':enter', [\n style({ opacity: 0, transform: 'translateX(50px)' }),\n animate('300ms ease-in-out', style({ opacity: 1, transform: 'translateX(0)' }))\n ])\n ])\n ],\n host: {\n '(window:resize)': 'onWindowResize($event)'\n }\n})\nexport class TnStepperComponent {\n orientation = input<'horizontal' | 'vertical' | 'auto'>('horizontal');\n linear = input<boolean>(false);\n selectedIndex = model<number>(0);\n\n selectionChange = output<{ selectedIndex: number; previouslySelectedIndex: number }>();\n completed = output<Array<{ label: string; completed: boolean; data: unknown }>>();\n\n steps = contentChildren(TnStepComponent, { descendants: true });\n\n private cdr = inject(ChangeDetectorRef);\n\n constructor() {\n // Effect to check if all steps are completed\n effect(() => {\n // Trigger on any step completion change\n const stepsArray = this.steps();\n const allCompleted = stepsArray.every(step => step.completed());\n if (allCompleted && stepsArray.length > 0) {\n this.completed.emit(this._getStepData());\n }\n });\n }\n\n onWindowResize(_event: Event) {\n this.cdr.detectChanges();\n }\n\n private _getStepData(): Array<{ label: string; completed: boolean; data: unknown }> {\n return this.steps().map(step => ({\n label: step.label(),\n completed: step.completed(),\n data: step.data()\n }));\n }\n\n isWideScreen = computed(() => {\n // Note: This will only update on window resize due to ChangeDetectorRef trigger\n return window.innerWidth > 768;\n });\n\n selectStep(index: number): void {\n if (!this.linear() || this.canSelectStep(index)) {\n const previousIndex = this.selectedIndex();\n this.selectedIndex.set(index);\n this.selectionChange.emit({\n selectedIndex: index,\n previouslySelectedIndex: previousIndex\n });\n }\n }\n\n canSelectStep(index: number): boolean {\n if (!this.linear()) {return true;}\n\n // In linear mode, can only select completed steps or the next step\n const stepsArray = this.steps();\n for (let i = 0; i < index; i++) {\n if (!stepsArray[i]?.completed()) {\n return false;\n }\n }\n return true;\n }\n\n next(): void {\n const stepsLength = this.steps().length;\n if (this.selectedIndex() < stepsLength - 1) {\n this.selectStep(this.selectedIndex() + 1);\n }\n }\n\n previous(): void {\n if (this.selectedIndex() > 0) {\n this.selectStep(this.selectedIndex() - 1);\n }\n }\n\n _trackByStepIndex(index: number): number {\n return index;\n }\n}","<div class=\"tn-stepper\"\n [class.tn-stepper--horizontal]=\"orientation() === 'horizontal' || (orientation() === 'auto' && isWideScreen())\"\n [class.tn-stepper--vertical]=\"orientation() === 'vertical' || (orientation() === 'auto' && !isWideScreen())\">\n\n <!-- Step Headers -->\n <div class=\"tn-stepper__header\">\n @for (step of steps(); track $index; let i = $index) {\n <div class=\"tn-stepper__step-header\"\n tabindex=\"0\"\n role=\"button\"\n [class.tn-stepper__step-header--active]=\"selectedIndex() === i\"\n [class.tn-stepper__step-header--completed]=\"step.completed()\"\n [class.tn-stepper__step-header--error]=\"step.hasError()\"\n [class.tn-stepper__step-header--optional]=\"step.optional()\"\n (click)=\"selectStep(i)\"\n (keydown.enter)=\"selectStep(i)\"\n (keydown.space)=\"selectStep(i)\">\n\n <!-- Step Number/Icon -->\n <div class=\"tn-stepper__step-indicator\">\n @if (step.completed() && !step.hasError()) {\n <span class=\"tn-stepper__step-check\">✓</span>\n }\n @if (step.hasError()) {\n <span class=\"tn-stepper__step-error\">!</span>\n }\n @if (!step.completed() && !step.hasError()) {\n @if (step.icon()) {\n <span class=\"tn-stepper__step-icon\">{{ step.icon() }}</span>\n } @else {\n <span class=\"tn-stepper__step-number\">{{ i + 1 }}</span>\n }\n }\n </div>\n\n <!-- Step Label -->\n <div class=\"tn-stepper__step-label\">\n <div class=\"tn-stepper__step-title\">{{ step.label() }}</div>\n @if (step.optional()) {\n <span class=\"tn-stepper__step-subtitle\">Optional</span>\n }\n </div>\n </div>\n\n <!-- Connector Line (except for last step) -->\n @if (i < steps().length - 1) {\n <div class=\"tn-stepper__connector\"></div>\n }\n }\n </div>\n\n <!-- Step Content -->\n <div class=\"tn-stepper__content\">\n @for (step of steps(); track $index; let i = $index) {\n @if (selectedIndex() === i) {\n <div class=\"tn-stepper__step-content\"\n [@stepTransition]=\"selectedIndex()\">\n <ng-container *ngTemplateOutlet=\"step.content()\" />\n </div>\n }\n }\n </div>\n</div>","/**\n * Auto-generated from SVG files - DO NOT EDIT MANUALLY\n * \n * To regenerate this file, run:\n * npm run generate-icons\n * \n * Generated: 2025-12-31T21:56:45.992Z\n * Source: projects/truenas-ui/src/assets/icons\n */\n\n/* eslint-disable */\n\nexport const TRUENAS_ICONS: Record<string, string> = {\n 'tn-dataset': `<svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M6 8C5.72 8 5.48 7.9 5.29 7.71C5.1 7.52 5 7.28 5 7C5 6.72 5.1 6.48 5.29 6.29C5.48 6.1 5.72 6 6 6H18C18.28 6 18.52 6.1 18.71 6.29C18.9 6.48 19 6.72 19 7C19 7.28 18.9 7.52 18.71 7.71C18.52 7.9 18.28 8 18 8H6ZM8 5C7.72 5 7.48 4.9 7.29 4.71C7.1 4.52 7 4.28 7 4C7 3.72 7.1 3.48 7.29 3.29C7.48 3.1 7.72 3 8 3H16C16.28 3 16.52 3.1 16.71 3.29C16.9 3.48 17 3.72 17 4C17 4.28 16.9 4.52 16.71 4.71C16.52 4.9 16.28 5 16 5H8ZM3 9L5 21H19L21 9H3ZM14.71 15.1C14.52 15.29 14.28 15.39 14 15.39H10C9.72 15.39 9.48 15.29 9.29 15.1C9.1 14.91 9 14.67 9 14.39C9 14.11 9.1 13.87 9.29 13.68C9.48 13.49 9.72 13.39 10 13.39H14C14.28 13.39 14.52 13.49 14.71 13.68C14.9 13.87 15 14.11 15 14.39C15 14.67 14.9 14.91 14.71 15.1Z\" fill=\"currentColor\"/>\n</svg>`\n};\n\n/**\n * Register all TrueNAS custom icons with the icon registry\n * @param iconRegistry The IxIconRegistryService instance\n */\nexport function registerTruenasIcons(iconRegistry: any): void {\n Object.entries(TRUENAS_ICONS).forEach(([name, svg]) => {\n iconRegistry.registerIcon(name, svg);\n });\n}\n","import { A11yModule } from '@angular/cdk/a11y';\nimport { ScrollingModule } from '@angular/cdk/scrolling';\nimport type { OnInit, AfterViewInit, AfterViewChecked} from '@angular/core';\nimport { Component, computed, input, output, inject } from '@angular/core';\nimport {\n mdiFolder,\n mdiFile,\n mdiDatabase,\n mdiHarddisk,\n mdiFolderNetwork,\n mdiFolderPlus,\n mdiLoading,\n mdiLock,\n mdiFolderOpen,\n mdiAlertCircle\n} from '@mdi/js';\nimport type { FileSystemItem, CreateFolderEvent, FilePickerMode } from './file-picker.interfaces';\nimport { TnButtonComponent } from '../button/button.component';\nimport { registerTruenasIcons } from '../custom-icons/generated-icons';\nimport { TnIconRegistryService } from '../icon/icon-registry.service';\nimport { TnIconComponent } from '../icon/icon.component';\nimport { FileSizePipe } from '../pipes/file-size/file-size.pipe';\nimport { TruncatePathPipe } from '../pipes/truncate-path/truncate-path.pipe';\nimport { TnTableComponent } from '../table/table.component';\nimport { TnTableColumnDirective, TnHeaderCellDefDirective, TnCellDefDirective } from '../table-column/table-column.directive';\n\n@Component({\n selector: 'tn-file-picker-popup',\n standalone: true,\n imports: [\n TnIconComponent,\n TnButtonComponent,\n TnTableComponent,\n TnTableColumnDirective,\n TnHeaderCellDefDirective,\n TnCellDefDirective,\n ScrollingModule,\n A11yModule,\n FileSizePipe,\n TruncatePathPipe\n],\n templateUrl: './file-picker-popup.component.html',\n styleUrl: './file-picker-popup.component.scss',\n host: {\n 'class': 'tn-file-picker-popup'\n }\n})\nexport class TnFilePickerPopupComponent implements OnInit, AfterViewInit, AfterViewChecked {\n mode = input<FilePickerMode>('any');\n multiSelect = input<boolean>(false);\n allowCreate = input<boolean>(true);\n allowDatasetCreate = input<boolean>(false);\n allowZvolCreate = input<boolean>(false);\n currentPath = input<string>('/mnt');\n fileItems = input<FileSystemItem[]>([]);\n selectedItems = input<string[]>([]);\n loading = input<boolean>(false);\n creationLoading = input<boolean>(false);\n fileExtensions = input<string[] | undefined>(undefined);\n\n private iconRegistry = inject(TnIconRegistryService);\n\n constructor() {\n // Register TrueNAS custom icons\n registerTruenasIcons(this.iconRegistry);\n\n // Register MDI icons used by this component\n this.registerMdiIcons();\n }\n\n /**\n * Register MDI icon library with all icons used by the file picker component\n * This makes the component self-contained with zero configuration required\n */\n private registerMdiIcons(): void {\n const mdiIcons: Record<string, string> = {\n 'folder': mdiFolder,\n 'file': mdiFile,\n 'database': mdiDatabase,\n 'harddisk': mdiHarddisk,\n 'folder-network': mdiFolderNetwork,\n 'folder-plus': mdiFolderPlus,\n 'loading': mdiLoading,\n 'lock': mdiLock,\n 'folder-open': mdiFolderOpen,\n 'alert-circle': mdiAlertCircle\n };\n\n // Register MDI library with resolver for file picker icons\n this.iconRegistry.registerLibrary({\n name: 'mdi',\n resolver: (iconName: string) => {\n const pathData = mdiIcons[iconName];\n if (!pathData) {\n return null;\n }\n return `<svg viewBox=\"0 0 24 24\"><path fill=\"currentColor\" d=\"${pathData}\"/></svg>`;\n }\n });\n }\n\n ngOnInit() {\n }\n\n ngAfterViewInit() {\n }\n\n ngAfterViewChecked(): void {\n // Auto-focus and select text in input when it appears\n const inp = document.querySelector('[data-autofocus=\"true\"]') as HTMLInputElement;\n if (inp && inp !== document.activeElement) {\n setTimeout(() => {\n inp.focus();\n inp.select();\n }, 0);\n }\n }\n\n itemClick = output<FileSystemItem>();\n itemDoubleClick = output<FileSystemItem>();\n pathNavigate = output<string>();\n createFolder = output<CreateFolderEvent>();\n clearSelection = output<void>();\n close = output<void>();\n submit = output<void>();\n cancel = output<void>();\n submitFolderName = output<{ name: string; tempId: string }>();\n cancelFolderCreation = output<string>();\n\n // Table configuration\n displayedColumns = ['select', 'name', 'size', 'modified'];\n\n // Computed values\n filteredFileItems = computed(() => {\n const items = this.fileItems();\n const extensions = this.fileExtensions();\n const mode = this.mode();\n\n return items.map(item => {\n let shouldDisable = false;\n\n // Check if item matches mode\n if (mode !== 'any') {\n const matchesMode =\n (mode === 'file' && item.type === 'file') ||\n (mode === 'folder' && item.type === 'folder') ||\n (mode === 'dataset' && item.type === 'dataset') ||\n (mode === 'zvol' && item.type === 'zvol');\n\n shouldDisable = !matchesMode;\n }\n\n // Check file extension filter (only applies to files)\n if (extensions && extensions.length > 0 && item.type === 'file') {\n const matchesExtension = extensions.some(ext =>\n item.name.toLowerCase().endsWith(ext.toLowerCase())\n );\n shouldDisable = shouldDisable || !matchesExtension;\n }\n\n // Don't override existing disabled state from backend\n return { ...item, disabled: item.disabled || shouldDisable };\n });\n });\n\n onItemClick(item: FileSystemItem): void {\n if (item.isCreating) {return;} // Don't allow selection during creation\n this.itemClick.emit(item);\n }\n\n onItemDoubleClick(item: FileSystemItem): void {\n if (item.isCreating) {return;} // Don't allow navigation during creation\n this.itemDoubleClick.emit(item);\n }\n\n navigateToPath(path: string): void {\n // Check if any item is in creation mode\n const hasCreatingItem = this.fileItems().some(item => item.isCreating);\n if (hasCreatingItem) {\n console.warn('Cannot navigate while creating a folder');\n return;\n }\n this.pathNavigate.emit(path);\n }\n\n onCreateFolder(): void {\n this.createFolder.emit({\n parentPath: this.currentPath(),\n folderName: 'New Folder'\n });\n }\n\n onClearSelection(): void {\n this.clearSelection.emit();\n }\n\n onSubmit(): void {\n this.submit.emit();\n }\n\n onCancel(): void {\n this.cancel.emit();\n }\n\n onFolderNameSubmit(event: Event, item: FileSystemItem): void {\n const inp = event.target as HTMLInputElement;\n const name = inp.value.trim();\n\n if (item.tempId) {\n // Even if empty, let parent component handle validation\n this.submitFolderName.emit({ name, tempId: item.tempId });\n }\n }\n\n onFolderNameCancel(item: FileSystemItem): void {\n if (item.tempId) {\n this.cancelFolderCreation.emit(item.tempId);\n }\n }\n\n onFolderNameInputBlur(event: Event, item: FileSystemItem): void {\n // Auto-submit on blur (don't close picker, parent handles submission)\n const inp = event.target as HTMLInputElement;\n if (item.tempId) {\n this.submitFolderName.emit({\n name: inp.value.trim(),\n tempId: item.tempId\n });\n }\n }\n\n onFolderNameKeyDown(event: KeyboardEvent, item: FileSystemItem): void {\n if (event.key === 'Enter') {\n event.preventDefault();\n this.onFolderNameSubmit(event, item);\n } else if (event.key === 'Escape') {\n event.preventDefault();\n this.onFolderNameCancel(item);\n }\n }\n\n isCreateDisabled(): boolean {\n return this.fileItems().some(item => item.isCreating) || this.creationLoading();\n }\n\n // Utility methods\n isNavigatable(item: FileSystemItem): boolean {\n return ['folder', 'dataset', 'mountpoint'].includes(item.type);\n }\n\n getItemIcon(item: FileSystemItem): string {\n if (item.icon) {return item.icon;}\n\n switch (item.type) {\n case 'folder': return 'folder';\n case 'dataset': return 'tn-dataset';\n case 'zvol': return 'database';\n case 'mountpoint': return 'folder-network';\n case 'file': return this.getFileIcon(item.name);\n default: return 'file';\n }\n }\n\n getFileIcon(filename: string): string {\n const ext = filename.split('.').pop()?.toLowerCase();\n switch (ext) {\n case 'txt': case 'log': case 'md': case 'readme': return 'file';\n case 'pdf': return 'file';\n case 'jpg': case 'jpeg': case 'png': case 'gif': case 'svg': case 'webp': return 'file';\n case 'mp4': case 'avi': case 'mov': case 'mkv': case 'webm': return 'file';\n case 'mp3': case 'wav': case 'flac': case 'ogg': case 'aac': return 'file';\n case 'zip': case 'tar': case 'gz': case 'rar': case '7z': return 'file';\n case 'js': case 'ts': case 'html': case 'css': case 'py': case 'java': case 'cpp': case 'c': return 'file';\n case 'json': case 'xml': case 'yaml': case 'yml': case 'toml': return 'file';\n case 'iso': case 'img': case 'dmg': return 'harddisk';\n default: return 'file';\n }\n }\n\n /**\n * Get the library type for the icon\n * @param item FileSystemItem\n * @returns 'custom' for TrueNAS custom icons, 'mdi' for Material Design Icons\n */\n getItemIconLibrary(item: FileSystemItem): 'mdi' | 'custom' {\n // Use custom library for dataset icon\n if (item.type === 'dataset') {\n return 'custom';\n }\n // Use mdi for all other icons\n return 'mdi';\n }\n\n getZfsBadge(item: FileSystemItem): string {\n switch (item.type) {\n case 'dataset': return 'DS';\n case 'zvol': return 'ZV';\n case 'mountpoint': return 'MP';\n default: return '';\n }\n }\n\n isZfsObject(item: FileSystemItem): boolean {\n return ['dataset', 'zvol', 'mountpoint'].includes(item.type);\n }\n\n isSelected(item: FileSystemItem): boolean {\n return this.selectedItems().includes(item.path);\n }\n\n getRowClass = (row: FileSystemItem): string | string[] => {\n const classes: string[] = [];\n\n if (this.isSelected(row) && !row.disabled) {\n classes.push('selected');\n }\n\n if (row.disabled) {\n classes.push('disabled');\n }\n\n return classes;\n }\n\n getFileInfo(item: FileSystemItem): string {\n const parts: string[] = [];\n \n if (item.size !== undefined) {\n parts.push(this.formatFileSize(item.size));\n }\n \n if (item.modified) {\n parts.push(item.modified.toLocaleDateString());\n }\n \n return parts.join(' • ');\n }\n\n formatFileSize(bytes: number): string {\n if (bytes === 0) {return '0 B';}\n \n const k = 1024;\n const sizes = ['B', 'KB', 'MB', 'GB', 'TB'];\n const i = Math.floor(Math.log(bytes) / Math.log(k));\n \n return parseFloat((bytes / Math.pow(k, i)).toFixed(1)) + ' ' + sizes[i];\n }\n\n getTypeDisplayName(type: string): string {\n switch (type) {\n case 'file': return 'File';\n case 'folder': return 'Folder';\n case 'dataset': return 'Dataset';\n case 'zvol': return 'Zvol';\n case 'mountpoint': return 'Mount Point';\n default: return type;\n }\n }\n\n formatDate(date: Date): string {\n const now = new Date();\n const today = new Date(now.getFullYear(), now.getMonth(), now.getDate());\n const itemDate = new Date(date.getFullYear(), date.getMonth(), date.getDate());\n \n const timePart = date.toLocaleTimeString([], { \n hour: 'numeric', \n minute: '2-digit',\n hour12: true \n });\n \n // Check if it's today\n if (itemDate.getTime() === today.getTime()) {\n return `Today ${timePart}`;\n }\n \n // Check if it's yesterday\n const yesterday = new Date(today);\n yesterday.setDate(yesterday.getDate() - 1);\n if (itemDate.getTime() === yesterday.getTime()) {\n return `Yesterday ${timePart}`;\n }\n \n // Check if it's this year\n if (date.getFullYear() === now.getFullYear()) {\n return `${(date.getMonth() + 1).toString().padStart(2, '0')}/${date.getDate().toString().padStart(2, '0')} ${timePart}`;\n }\n \n // Different year - include year\n return `${(date.getMonth() + 1).toString().padStart(2, '0')}/${date.getDate().toString().padStart(2, '0')}/${date.getFullYear()} ${timePart}`;\n }\n\n}","<!-- Header with breadcrumb navigation -->\n<div class=\"tn-file-picker-header\">\n <nav class=\"tn-file-picker-breadcrumb\" aria-label=\"File path\">\n @for (segment of currentPath() | tnTruncatePath; track $index; let last = $last) {\n <button\n class=\"breadcrumb-segment\"\n [class.current]=\"last\"\n [class.parent-nav]=\"segment.name === '..'\"\n [disabled]=\"last\"\n (click)=\"navigateToPath(segment.path)\">\n {{ segment.name }}\n </button>\n }\n </nav>\n\n <div class=\"tn-file-picker-actions\">\n @if (allowCreate()) {\n <tn-button\n variant=\"outline\"\n label=\"New Folder\"\n [disabled]=\"isCreateDisabled()\"\n (onClick)=\"onCreateFolder()\" />\n }\n </div>\n</div>\n\n<!-- Loading indicator -->\n@if (loading()) {\n <div class=\"tn-file-picker-loading\">\n <tn-icon name=\"loading\" library=\"mdi\" />\n <span>Loading...</span>\n </div>\n}\n\n<!-- File table -->\n@if (!loading()) {\n <div class=\"tn-file-picker-content\">\n <tn-table\n [dataSource]=\"filteredFileItems()\"\n [displayedColumns]=\"multiSelect() ? displayedColumns : displayedColumns.slice(1)\">\n\n <!-- Selection column -->\n @if (multiSelect()) {\n <ng-container tnColumnDef=\"select\">\n <ng-template tnHeaderCellDef>\n <!-- Select all checkbox -->\n </ng-template>\n <ng-template let-item tnCellDef>\n <input \n type=\"checkbox\" \n [checked]=\"isSelected(item)\"\n [disabled]=\"!!item.disabled\"\n (click)=\"$event.stopPropagation()\"\n (change)=\"onItemClick(item)\">\n </ng-template>\n </ng-container>\n }\n\n <!-- Name column -->\n <ng-container tnColumnDef=\"name\">\n <ng-template tnHeaderCellDef>Name</ng-template>\n <ng-template let-item tnCellDef>\n\n <!-- NORMAL MODE: Display name -->\n @if (!item.isCreating) {\n <div\n class=\"file-name-cell\"\n [class.disabled]=\"!!item.disabled\"\n [class.zfs-object]=\"isZfsObject(item)\"\n [attr.tabindex]=\"item.disabled ? null : 0\"\n [attr.role]=\"'button'\"\n (click)=\"onItemClick(item)\"\n (dblclick)=\"onItemDoubleClick(item)\"\n (keydown.enter)=\"onItemDoubleClick(item)\"\n (keydown.space)=\"onItemClick(item)\">\n <tn-icon\n [name]=\"getItemIcon(item)\"\n [library]=\"getItemIconLibrary(item)\"\n [class]=\"'file-icon file-icon-' + item.type\" />\n <span class=\"file-name\">{{ item.name }}</span>\n\n <!-- ZFS badge -->\n @if (isZfsObject(item)) {\n <span\n [class]=\"'zfs-badge zfs-badge-' + item.type\">\n {{ getZfsBadge(item) }}\n </span>\n }\n\n <!-- Permission indicator -->\n @if (item.permissions === 'none') {\n <tn-icon\n name=\"lock\"\n library=\"mdi\"\n class=\"permission-icon\" />\n }\n </div>\n }\n\n <!-- EDIT MODE: Inline name input with error display -->\n @if (item.isCreating) {\n <div class=\"file-name-cell-wrapper\">\n <div class=\"file-name-cell editing\" [class.has-error]=\"!!item.creationError\">\n <tn-icon\n name=\"folder\"\n library=\"mdi\"\n class=\"file-icon file-icon-folder\" />\n <input\n #folderNameInput\n type=\"text\"\n role=\"textbox\"\n aria-label=\"Folder name\"\n class=\"folder-name-input\"\n spellcheck=\"false\"\n autocomplete=\"off\"\n [class.error]=\"!!item.creationError\"\n [value]=\"item.name\"\n [disabled]=\"creationLoading()\"\n [attr.data-autofocus]=\"true\"\n (keydown)=\"onFolderNameKeyDown($event, item)\"\n (blur)=\"onFolderNameInputBlur($event, item)\">\n\n <!-- Loading indicator during submission -->\n @if (creationLoading()) {\n <tn-icon\n name=\"loading\"\n library=\"mdi\"\n class=\"creation-loading-icon\" />\n }\n </div>\n\n <!-- Inline error message -->\n @if (item.creationError) {\n <div class=\"folder-creation-error\">\n <tn-icon name=\"alert-circle\" library=\"mdi\" class=\"error-icon\" />\n <span class=\"error-text\">{{ item.creationError }}</span>\n </div>\n }\n </div>\n }\n\n </ng-template>\n </ng-container>\n\n <!-- Size column -->\n <ng-container tnColumnDef=\"size\">\n <ng-template tnHeaderCellDef>Size</ng-template>\n <ng-template let-item tnCellDef>\n @if (item.size !== undefined) {\n <span>{{ item.size | tnFileSize }}</span>\n }\n @if (item.size === undefined && item.type === 'folder') {\n <span class=\"folder-indicator\">--</span>\n }\n </ng-template>\n </ng-container>\n\n <!-- Modified column -->\n <ng-container tnColumnDef=\"modified\">\n <ng-template tnHeaderCellDef>Modified</ng-template>\n <ng-template let-item tnCellDef>\n @if (item.modified) {\n <span>{{ formatDate(item.modified) }}</span>\n }\n </ng-template>\n </ng-container>\n\n\n </tn-table>\n\n <!-- Empty state -->\n @if (filteredFileItems().length === 0) {\n <div class=\"empty-state\">\n <tn-icon name=\"folder-open\" library=\"mdi\" />\n <p>No items found</p>\n </div>\n }\n </div>\n}\n\n<!-- Footer -->\n@if (!loading()) {\n <div class=\"tn-file-picker-footer\">\n @if (selectedItems().length > 0) {\n <span class=\"selection-count\">\n {{ selectedItems().length }} item{{ selectedItems().length !== 1 ? 's' : '' }} selected\n </span>\n }\n @if (selectedItems().length === 0) {\n <span class=\"selection-count\">\n No items selected\n </span>\n }\n <div class=\"footer-actions\">\n <tn-button\n label=\"Select\"\n [disabled]=\"selectedItems().length === 0\"\n (onClick)=\"onSubmit()\" />\n </div>\n </div>\n}","import { A11yModule } from '@angular/cdk/a11y';\nimport { type ConnectedPosition, Overlay, type OverlayRef } from '@angular/cdk/overlay';\nimport { OverlayModule } from '@angular/cdk/overlay';\nimport { PortalModule, TemplatePortal } from '@angular/cdk/portal';\nimport type { OnDestroy, OnInit} from '@angular/core';\nimport { ElementRef, type TemplateRef, ViewContainerRef, Component, computed, forwardRef, input, output, signal, viewChild, inject } from '@angular/core';\nimport type { ControlValueAccessor} from '@angular/forms';\nimport { NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { Subject } from 'rxjs';\nimport { TnFilePickerPopupComponent } from './file-picker-popup.component';\nimport type { CreateFolderEvent, FilePickerCallbacks, FilePickerError, FilePickerMode, FileSystemItem } from './file-picker.interfaces';\nimport { TnIconComponent } from '../icon/icon.component';\nimport { TnInputDirective } from '../input/input.directive';\nimport { StripMntPrefixPipe } from '../pipes/strip-mnt-prefix/strip-mnt-prefix.pipe';\n\n@Component({\n selector: 'tn-file-picker',\n standalone: true,\n imports: [\n TnInputDirective,\n TnIconComponent,\n TnFilePickerPopupComponent,\n OverlayModule,\n PortalModule,\n A11yModule,\n StripMntPrefixPipe\n],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => TnFilePickerComponent),\n multi: true\n }\n ],\n templateUrl: './file-picker.component.html',\n styleUrl: './file-picker.component.scss',\n host: {\n 'class': 'tn-file-picker',\n '[class.error]': 'hasError()'\n }\n})\nexport class TnFilePickerComponent implements ControlValueAccessor, OnInit, OnDestroy {\n mode = input<FilePickerMode>('any');\n multiSelect = input<boolean>(false);\n allowCreate = input<boolean>(true);\n allowDatasetCreate = input<boolean>(false);\n allowZvolCreate = input<boolean>(false);\n allowManualInput = input<boolean>(true);\n placeholder = input<string>('Select file or folder');\n disabled = input<boolean>(false);\n startPath = input<string>('/mnt');\n rootPath = input<string | undefined>(undefined);\n fileExtensions = input<string[] | undefined>(undefined);\n callbacks = input<FilePickerCallbacks | undefined>(undefined);\n\n selectionChange = output<string | string[]>();\n pathChange = output<string>();\n createFolder = output<CreateFolderEvent>();\n error = output<FilePickerError>();\n\n wrapperEl = viewChild.required<ElementRef<HTMLDivElement>>('wrapper');\n filePickerTemplate = viewChild.required<TemplateRef<unknown>>('filePickerTemplate');\n\n private destroy$ = new Subject<void>();\n private overlayRef?: OverlayRef;\n private portal?: TemplatePortal;\n\n // Component state\n isOpen = signal<boolean>(false);\n selectedPath = signal<string>('');\n currentPath = signal<string>('');\n fileItems = signal<FileSystemItem[]>([]);\n selectedItems = signal<string[]>([]);\n loading = signal<boolean>(false);\n hasError = signal<boolean>(false);\n creatingItemTempId = signal<string | null>(null);\n creationLoading = signal<boolean>(false);\n private formDisabled = signal<boolean>(false);\n\n // Computed disabled state (combines input and form state)\n isDisabled = computed(() => this.disabled() || this.formDisabled());\n\n // ControlValueAccessor implementation\n private onChange = (_value: string | string[]) => {};\n private onTouched = () => {};\n\n private overlay = inject(Overlay);\n private elementRef = inject(ElementRef);\n private viewContainerRef = inject(ViewContainerRef);\n\n ngOnInit(): void {\n this.currentPath.set(this.startPath());\n this.selectedPath.set(this.multiSelect() ? '' : '');\n }\n\n ngOnDestroy(): void {\n this.destroy$.next();\n this.destroy$.complete();\n this.close();\n }\n\n // ControlValueAccessor implementation\n writeValue(value: string | string[]): void {\n if (this.multiSelect()) {\n this.selectedItems.set(Array.isArray(value) ? value : value ? [value] : []);\n // For multi-select, show full paths separated by commas\n this.selectedPath.set(this.selectedItems().join(', '));\n } else {\n // Store the full path internally\n this.selectedPath.set(typeof value === 'string' ? value : '');\n this.selectedItems.set(value ? [typeof value === 'string' ? value : value[0]] : []);\n }\n }\n\n registerOnChange(fn: (value: string | string[]) => void): void {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n\n setDisabledState(isDisabled: boolean): void {\n this.formDisabled.set(isDisabled);\n }\n\n // Event handlers\n onPathInput(event: Event): void {\n const target = event.target as HTMLInputElement;\n const inputValue = target.value;\n\n if (this.allowManualInput()) {\n // Convert display path to full path with /mnt prefix\n const fullPath = this.toFullPath(inputValue);\n\n const cb = this.callbacks();\n if (cb?.validatePath) {\n cb.validatePath(fullPath).then(isValid => {\n if (isValid) {\n this.updateSelection(fullPath);\n } else {\n this.emitError('validation', `Invalid path: ${inputValue}`, fullPath);\n }\n }).catch(err => {\n this.emitError('validation', err.message || 'Path validation failed', fullPath);\n });\n } else {\n this.updateSelection(fullPath);\n }\n }\n\n this.onTouched();\n }\n\n openFilePicker(): void {\n if (this.isOpen() || this.isDisabled()) {return;}\n\n this.createOverlay();\n this.isOpen.set(true);\n void this.loadDirectory(this.currentPath());\n }\n\n close(): void {\n if (this.overlayRef) {\n this.overlayRef.dispose();\n this.overlayRef = undefined;\n this.portal = undefined;\n }\n this.isOpen.set(false);\n }\n\n // File browser methods\n onItemClick(item: FileSystemItem): void {\n if (item.disabled || item.isCreating || this.creatingItemTempId()) {return;}\n\n if (this.multiSelect()) {\n const selected = this.selectedItems();\n const index = selected.indexOf(item.path);\n\n if (index >= 0) {\n selected.splice(index, 1);\n } else {\n selected.push(item.path);\n }\n\n this.selectedItems.set([...selected]);\n } else {\n // Single select - just update selection state, don't apply yet\n this.selectedItems.set([item.path]);\n }\n }\n\n onItemDoubleClick(item: FileSystemItem): void {\n if (item.isCreating || this.creatingItemTempId()) {return;}\n\n // Define navigatable types\n const isNavigatable = ['folder', 'dataset', 'mountpoint'].includes(item.type);\n\n // Allow navigation even if disabled, as long as it's a navigatable type\n if (isNavigatable) {\n this.navigateToPath(item.path);\n } else if (!item.disabled) {\n // Double-click on selectable item submits immediately\n this.selectedItems.set([item.path]);\n this.onSubmit();\n }\n }\n\n onSubmit(): void {\n // Apply the selection and close the popup\n const selected = this.selectedItems();\n\n if (selected.length === 0) {return;}\n\n // Clear any existing error state\n this.hasError.set(false);\n\n if (this.multiSelect()) {\n this.selectedPath.set(selected.join(', '));\n this.onChange(selected);\n this.selectionChange.emit(selected);\n } else {\n const path = selected[0];\n this.selectedPath.set(path);\n this.onChange(path);\n this.selectionChange.emit(path);\n }\n\n this.close();\n }\n\n onCancel(): void {\n // Close without applying selection\n this.close();\n }\n\n navigateToPath(path: string): void {\n // Prevent navigation if currently creating a folder\n if (this.creatingItemTempId()) {\n console.warn('Cannot navigate while creating a folder');\n return;\n }\n void this.loadDirectory(path);\n }\n\n onCreateFolder(): void {\n // Prevent multiple simultaneous creations\n if (this.creatingItemTempId()) {\n console.warn('Already creating a folder');\n return;\n }\n\n // Generate temporary ID\n const tempId = `temp-${Date.now()}`;\n\n // Create pending item\n const pendingFolder: FileSystemItem = {\n path: `${this.currentPath()}/__pending__/${tempId}`,\n name: 'New Folder',\n type: 'folder',\n isCreating: true,\n tempId: tempId,\n modified: new Date()\n };\n\n // Add to top of file list\n const currentItems = this.fileItems();\n this.fileItems.set([pendingFolder, ...currentItems]);\n this.creatingItemTempId.set(tempId);\n\n // Still emit event for parent components\n this.createFolder.emit({\n parentPath: this.currentPath(),\n folderName: 'New Folder'\n });\n }\n\n onClearSelection(): void {\n this.selectedItems.set([]);\n this.selectedPath.set('');\n this.onChange(this.multiSelect() ? [] : '');\n this.selectionChange.emit(this.multiSelect() ? [] : '');\n }\n\n async onSubmitFolderName(name: string, tempId: string): Promise<void> {\n // Validate folder name\n const validation = this.validateFolderName(name);\n if (!validation.valid) {\n // Update the item with error message\n this.updateCreatingItemError(tempId, validation.error!);\n return;\n }\n\n const cb = this.callbacks();\n if (!cb?.createFolder) {\n this.updateCreatingItemError(tempId, 'Create folder callback not provided');\n return;\n }\n\n // Clear any previous errors\n this.updateCreatingItemError(tempId, undefined);\n this.creationLoading.set(true);\n\n try {\n // Call the callback with parent path and user-entered name\n await cb.createFolder(\n this.currentPath(),\n name.trim()\n );\n\n // Remove pending item\n this.removePendingItem(tempId);\n this.creatingItemTempId.set(null);\n\n // Reload directory to show the newly created folder\n await this.loadDirectory(this.currentPath());\n\n } catch (err: unknown) {\n console.error('Failed to create folder:', err);\n\n // Show error inline, keep input editable for retry\n const errorMessage = err instanceof Error ? err.message : 'Failed to create folder';\n this.updateCreatingItemError(tempId, errorMessage);\n this.emitError('creation', errorMessage, this.currentPath());\n\n } finally {\n this.creationLoading.set(false);\n }\n }\n\n onCancelFolderCreation(tempId: string): void {\n this.removePendingItem(tempId);\n this.creatingItemTempId.set(null);\n this.creationLoading.set(false);\n }\n\n private removePendingItem(tempId: string): void {\n const items = this.fileItems().filter(item => item.tempId !== tempId);\n this.fileItems.set(items);\n }\n\n private updateCreatingItemError(tempId: string, error: string | undefined): void {\n const items = this.fileItems().map(item => {\n if (item.tempId === tempId) {\n return { ...item, creationError: error };\n }\n return item;\n });\n this.fileItems.set(items);\n }\n\n private validateFolderName(name: string): { valid: boolean; error?: string } {\n const trimmed = name.trim();\n\n if (!trimmed) {\n return { valid: false, error: 'Folder name cannot be empty' };\n }\n\n if (trimmed.length > 255) {\n return { valid: false, error: 'Folder name too long (max 255 characters)' };\n }\n\n // Check for invalid characters (common across file systems)\n const invalidChars = /[<>:\"|?*\\x00-\\x1f]/;\n if (invalidChars.test(trimmed)) {\n return { valid: false, error: 'Invalid characters in folder name' };\n }\n\n // Disallow folder names that are just dots\n if (/^\\.+$/.test(trimmed)) {\n return { valid: false, error: 'Invalid folder name' };\n }\n\n // Check for duplicate names in current directory\n const existingNames = this.fileItems()\n .filter(item => !item.isCreating)\n .map(item => item.name.toLowerCase());\n\n if (existingNames.includes(trimmed.toLowerCase())) {\n return { valid: false, error: 'A folder with this name already exists' };\n }\n\n return { valid: true };\n }\n\n private async loadDirectory(path: string): Promise<void> {\n const cb = this.callbacks();\n if (!cb?.getChildren) {\n // Default mock data for development\n this.fileItems.set(this.getMockFileItems(path));\n this.currentPath.set(path);\n this.pathChange.emit(path);\n return;\n }\n\n this.loading.set(true);\n\n try {\n const items = await cb.getChildren(path);\n this.fileItems.set(items || []);\n this.currentPath.set(path);\n this.pathChange.emit(path);\n } catch (err: unknown) {\n console.error('❌ Error loading directory:', err);\n this.emitError('navigation', err instanceof Error ? err.message : 'Failed to load directory', path);\n } finally {\n this.loading.set(false);\n }\n }\n\n private getMockFileItems(path: string): FileSystemItem[] {\n // Mock data for development\n return [\n {\n path: `${path}/Documents`,\n name: 'Documents',\n type: 'folder',\n modified: new Date()\n },\n {\n path: `${path}/Downloads`,\n name: 'Downloads',\n type: 'folder',\n modified: new Date()\n },\n {\n path: `${path}/dataset1`,\n name: 'dataset1',\n type: 'dataset',\n modified: new Date()\n },\n {\n path: `${path}/example.txt`,\n name: 'example.txt',\n type: 'file',\n size: 1024,\n modified: new Date()\n }\n ];\n }\n\n private updateSelection(path: string): void {\n // Clear any existing error state since popup selections are valid\n this.hasError.set(false);\n\n if (this.multiSelect()) {\n const selected = [path];\n this.selectedItems.set(selected);\n this.selectedPath.set(selected.join(', '));\n this.onChange(selected);\n } else {\n this.selectedPath.set(path);\n this.selectedItems.set([path]);\n this.onChange(path);\n }\n\n this.selectionChange.emit(this.multiSelect() ? this.selectedItems() : path);\n }\n\n private updateSelectionFromItems(): void {\n // Clear any existing error state since popup selections are valid\n this.hasError.set(false);\n\n const selected = this.selectedItems();\n this.selectedPath.set(selected.join(', '));\n this.onChange(this.multiSelect() ? selected : selected[0] || '');\n this.selectionChange.emit(this.multiSelect() ? selected : selected[0] || '');\n }\n\n private toFullPath(displayPath: string): string {\n if (!displayPath) {return '/mnt';}\n if (displayPath === '/') {return '/mnt';}\n if (displayPath.startsWith('/')) {return '/mnt' + displayPath;}\n return '/mnt/' + displayPath;\n }\n\n private emitError(type: FilePickerError['type'], message: string, path?: string): void {\n this.hasError.set(true);\n this.error.emit({ type, message, path });\n // Error persists until cleared by valid input or selection\n }\n\n private createOverlay(): void {\n if (this.overlayRef) {return;}\n\n const positions: ConnectedPosition[] = [\n {\n originX: 'start',\n originY: 'bottom',\n overlayX: 'start',\n overlayY: 'top',\n offsetY: 8,\n },\n {\n originX: 'start',\n originY: 'top',\n overlayX: 'start',\n overlayY: 'bottom',\n offsetY: -8,\n },\n {\n originX: 'end',\n originY: 'bottom',\n overlayX: 'end',\n overlayY: 'top',\n offsetY: 8,\n },\n {\n originX: 'end',\n originY: 'top',\n overlayX: 'end',\n overlayY: 'bottom',\n offsetY: -8,\n },\n ];\n\n const positionStrategy = this.overlay\n .position()\n .flexibleConnectedTo(this.wrapperEl())\n .withPositions(positions)\n .withFlexibleDimensions(false)\n .withPush(false);\n\n this.overlayRef = this.overlay.create({\n positionStrategy,\n scrollStrategy: this.overlay.scrollStrategies.reposition(),\n hasBackdrop: true,\n backdropClass: 'cdk-overlay-transparent-backdrop',\n panelClass: 'tn-file-picker-overlay'\n });\n\n this.overlayRef.backdropClick().subscribe(() => {\n this.close();\n });\n\n this.portal = new TemplatePortal(this.filePickerTemplate(), this.viewContainerRef);\n this.overlayRef.attach(this.portal);\n }\n\n}\n","<div class=\"tn-file-picker-container\">\n <div #wrapper ixInput class=\"tn-file-picker-wrapper\" style=\"padding-right: 40px;\">\n <input\n type=\"text\"\n class=\"tn-file-picker-input\"\n [class.error]=\"hasError()\"\n [value]=\"selectedPath() | tnStripMntPrefix\"\n [placeholder]=\"placeholder()\"\n [readonly]=\"!allowManualInput()\"\n [disabled]=\"isDisabled()\"\n (input)=\"onPathInput($event)\">\n\n <button\n type=\"button\"\n class=\"tn-file-picker-toggle\"\n aria-label=\"Open file picker\"\n [disabled]=\"isDisabled()\"\n (click)=\"openFilePicker()\">\n <tn-icon name=\"folder\" library=\"mdi\" />\n </button>\n </div>\n \n <ng-template #filePickerTemplate>\n <tn-file-picker-popup\n class=\"tn-file-picker-popup\"\n [mode]=\"mode()\"\n [multiSelect]=\"multiSelect()\"\n [allowCreate]=\"allowCreate()\"\n [allowDatasetCreate]=\"allowDatasetCreate()\"\n [allowZvolCreate]=\"allowZvolCreate()\"\n [currentPath]=\"currentPath()\"\n [fileItems]=\"fileItems()\"\n [selectedItems]=\"selectedItems()\"\n [loading]=\"loading()\"\n [creationLoading]=\"creationLoading()\"\n [fileExtensions]=\"fileExtensions()\"\n (itemClick)=\"onItemClick($event)\"\n (itemDoubleClick)=\"onItemDoubleClick($event)\"\n (pathNavigate)=\"navigateToPath($event)\"\n (createFolder)=\"onCreateFolder()\"\n (submitFolderName)=\"onSubmitFolderName($event.name, $event.tempId)\"\n (cancelFolderCreation)=\"onCancelFolderCreation($event)\"\n (clearSelection)=\"onClearSelection()\"\n (submit)=\"onSubmit()\"\n (cancel)=\"onCancel()\"\n (close)=\"close()\" />\n </ng-template>\n</div>","import { Injectable } from '@angular/core';\nimport { CommonShortcuts, WindowsShortcuts, LinuxShortcuts } from '../enums/common-shortcuts.enum';\nimport type { PlatformType } from '../enums/modifier-keys.enum';\n\nexport interface KeyCombination {\n ctrlKey: boolean;\n altKey: boolean;\n shiftKey: boolean;\n metaKey: boolean;\n key: string;\n}\n\nexport interface ShortcutHandler {\n id: string;\n combination: KeyCombination;\n callback: () => void;\n context?: string;\n enabled: boolean;\n}\n\n@Injectable({\n providedIn: 'root'\n})\nexport class TnKeyboardShortcutService {\n private shortcuts = new Map<string, ShortcutHandler>();\n private globalEnabled = true;\n\n /**\n * Register a keyboard shortcut\n */\n registerShortcut(\n id: string,\n shortcut: string,\n callback: () => void,\n context?: string\n ): void {\n const combination = this.parseShortcut(shortcut);\n \n this.shortcuts.set(id, {\n id,\n combination,\n callback,\n context,\n enabled: true\n });\n }\n\n /**\n * Unregister a keyboard shortcut\n */\n unregisterShortcut(id: string): void {\n this.shortcuts.delete(id);\n }\n\n /**\n * Unregister all shortcuts for a given context\n */\n unregisterContext(context: string): void {\n for (const [id, handler] of this.shortcuts) {\n if (handler.context === context) {\n this.shortcuts.delete(id);\n }\n }\n }\n\n /**\n * Enable/disable a specific shortcut\n */\n setShortcutEnabled(id: string, enabled: boolean): void {\n const handler = this.shortcuts.get(id);\n if (handler) {\n handler.enabled = enabled;\n }\n }\n\n /**\n * Enable/disable all shortcuts globally\n */\n setGlobalEnabled(enabled: boolean): void {\n this.globalEnabled = enabled;\n }\n\n /**\n * Check if shortcuts are globally enabled\n */\n isGlobalEnabled(): boolean {\n return this.globalEnabled;\n }\n\n /**\n * Handle keyboard events\n */\n handleKeyboardEvent(event: KeyboardEvent): boolean {\n if (!this.globalEnabled) {\n return false;\n }\n\n const combination: KeyCombination = {\n ctrlKey: event.ctrlKey,\n altKey: event.altKey,\n shiftKey: event.shiftKey,\n metaKey: event.metaKey,\n key: event.key\n };\n\n for (const handler of this.shortcuts.values()) {\n if (handler.enabled && this.matchesCombination(combination, handler.combination)) {\n event.preventDefault();\n event.stopPropagation();\n handler.callback();\n return true;\n }\n }\n\n return false;\n }\n\n /**\n * Parse a shortcut string into a KeyCombination\n */\n parseShortcut(shortcut: string): KeyCombination {\n const combination: KeyCombination = {\n ctrlKey: false,\n altKey: false,\n shiftKey: false,\n metaKey: false,\n key: ''\n };\n\n // Handle Mac-style shortcuts\n if (shortcut.includes('⌘')) {\n combination.metaKey = true;\n shortcut = shortcut.replace(/⌘/g, '');\n }\n \n if (shortcut.includes('⌃')) {\n combination.ctrlKey = true;\n shortcut = shortcut.replace(/⌃/g, '');\n }\n \n if (shortcut.includes('⌥')) {\n combination.altKey = true;\n shortcut = shortcut.replace(/⌥/g, '');\n }\n \n if (shortcut.includes('⇧')) {\n combination.shiftKey = true;\n shortcut = shortcut.replace(/⇧/g, '');\n }\n\n // Handle Windows/Linux-style shortcuts\n const parts = shortcut.split('+').map(part => part.trim());\n \n for (const part of parts) {\n const lowerPart = part.toLowerCase();\n \n if (lowerPart === 'ctrl' || lowerPart === 'control') {\n combination.ctrlKey = true;\n } else if (lowerPart === 'alt') {\n combination.altKey = true;\n } else if (lowerPart === 'shift') {\n combination.shiftKey = true;\n } else if (lowerPart === 'meta' || lowerPart === 'cmd' || lowerPart === 'win') {\n combination.metaKey = true;\n } else if (part.length > 0) {\n combination.key = part;\n }\n }\n\n return combination;\n }\n\n /**\n * Check if two key combinations match\n */\n private matchesCombination(actual: KeyCombination, expected: KeyCombination): boolean {\n return actual.ctrlKey === expected.ctrlKey &&\n actual.altKey === expected.altKey &&\n actual.shiftKey === expected.shiftKey &&\n actual.metaKey === expected.metaKey &&\n actual.key.toLowerCase() === expected.key.toLowerCase();\n }\n\n /**\n * Get the current platform\n */\n getCurrentPlatform(): PlatformType {\n const userAgent = navigator.userAgent.toLowerCase();\n \n if (userAgent.includes('mac')) {\n return 'mac';\n } else if (userAgent.includes('win')) {\n return 'windows';\n } else if (userAgent.includes('linux')) {\n return 'linux';\n }\n \n return 'mac';\n }\n\n /**\n * Format a shortcut for display on the current platform\n */\n formatShortcutForPlatform(shortcut: string, platform?: PlatformType): string {\n const targetPlatform = platform || this.getCurrentPlatform();\n \n if (targetPlatform === 'windows') {\n return this.convertToWindowsDisplay(shortcut);\n } else if (targetPlatform === 'linux') {\n return this.convertToLinuxDisplay(shortcut);\n }\n \n return shortcut; // Return Mac format by default\n }\n\n /**\n * Convert Mac-style shortcut to Windows display format\n */\n private convertToWindowsDisplay(macShortcut: string): string {\n return macShortcut\n .replace(/⌘/g, 'Ctrl')\n .replace(/⌥/g, 'Alt')\n .replace(/⇧/g, 'Shift')\n .replace(/⌃/g, 'Ctrl')\n .replace(/([a-zA-Z])([A-Z])/g, '$1+$2')\n .replace(/([a-zA-Z])([a-z])/g, '$1+$2');\n }\n\n /**\n * Convert Mac-style shortcut to Linux display format\n */\n private convertToLinuxDisplay(macShortcut: string): string {\n return macShortcut\n .replace(/⌘/g, 'Ctrl')\n .replace(/⌥/g, 'Alt')\n .replace(/⇧/g, 'Shift')\n .replace(/⌃/g, 'Ctrl')\n .replace(/([a-zA-Z])([A-Z])/g, '$1+$2')\n .replace(/([a-zA-Z])([a-z])/g, '$1+$2');\n }\n\n /**\n * Get platform-specific shortcut enum\n */\n getPlatformShortcuts(platform?: PlatformType): typeof CommonShortcuts | typeof WindowsShortcuts | typeof LinuxShortcuts {\n const targetPlatform = platform || this.getCurrentPlatform();\n \n switch (targetPlatform) {\n case 'windows':\n return WindowsShortcuts;\n case 'linux':\n return LinuxShortcuts;\n default:\n return CommonShortcuts;\n }\n }\n\n /**\n * Get all registered shortcuts\n */\n getAllShortcuts(): ShortcutHandler[] {\n return Array.from(this.shortcuts.values());\n }\n\n /**\n * Get shortcuts for a specific context\n */\n getShortcutsForContext(context: string): ShortcutHandler[] {\n return Array.from(this.shortcuts.values()).filter(handler => handler.context === context);\n }\n\n /**\n * Clear all shortcuts\n */\n clearAllShortcuts(): void {\n this.shortcuts.clear();\n }\n}","/**\n * Enum of available theme names.\n * Use these constants instead of hardcoded strings.\n *\n * @example\n * ```typescript\n * themeService.setTheme(TnTheme.Dracula);\n * ```\n */\nexport enum TnTheme {\n Dark = 'tn-dark',\n Blue = 'tn-blue',\n Dracula = 'tn-dracula',\n Nord = 'tn-nord',\n Paper = 'tn-paper',\n SolarizedDark = 'tn-solarized-dark',\n Midnight = 'tn-midnight',\n HighContrast = 'tn-high-contrast',\n}\n\n/**\n * Represents a theme definition/configuration.\n */\nexport interface TnThemeDefinition {\n /** Unique identifier/name for the theme (from TnTheme enum) */\n name: TnTheme;\n\n /** Human-readable display name */\n label: string;\n\n /** CSS class name to apply to document root */\n className: string;\n\n /** Optional description of the theme */\n description?: string;\n}\n","import type { TnThemeDefinition } from './theme.interface';\nimport { TnTheme } from './theme.interface';\n\n/**\n * Default theme used when no theme is set\n */\nexport const DEFAULT_THEME = TnTheme.Dark;\n\n/**\n * localStorage key for storing the current theme name\n */\nexport const THEME_STORAGE_KEY = 'tn-theme';\n\n/**\n * All available theme definitions in the TrueNAS UI Components library.\n * These themes correspond to CSS classes defined in themes.css\n */\nexport const TN_THEME_DEFINITIONS: readonly TnThemeDefinition[] = [\n {\n name: TnTheme.Dark,\n label: 'TN Dark',\n className: 'tn-dark',\n description: 'TrueNAS default dark theme',\n },\n {\n name: TnTheme.Blue,\n label: 'TN Blue',\n className: 'tn-blue',\n description: 'Official TrueNAS colors on light background',\n },\n {\n name: TnTheme.Dracula,\n label: 'Dracula',\n className: 'tn-dracula',\n description: 'Popular Dracula color scheme',\n },\n {\n name: TnTheme.Nord,\n label: 'Nord',\n className: 'tn-nord',\n description: 'Nord color palette inspired theme',\n },\n {\n name: TnTheme.Paper,\n label: 'Paper',\n className: 'tn-paper',\n description: 'FreeNAS 11.2 legacy theme',\n },\n {\n name: TnTheme.SolarizedDark,\n label: 'Solarized Dark',\n className: 'tn-solarized-dark',\n description: 'Solarized dark color scheme',\n },\n {\n name: TnTheme.Midnight,\n label: 'Midnight',\n className: 'tn-midnight',\n description: 'Dark theme with blues and greys',\n },\n {\n name: TnTheme.HighContrast,\n label: 'High Contrast',\n className: 'tn-high-contrast',\n description: 'High contrast theme for accessibility',\n },\n] as const;\n\n/**\n * Map of theme enum values to theme definition objects for quick lookup\n */\nexport const THEME_MAP = new Map<TnTheme, TnThemeDefinition>(\n TN_THEME_DEFINITIONS.map((theme) => [theme.name, theme])\n);\n","import { isPlatformBrowser } from '@angular/common';\nimport { Injectable, signal, computed, effect, PLATFORM_ID, inject } from '@angular/core';\nimport {\n TN_THEME_DEFINITIONS,\n THEME_MAP,\n DEFAULT_THEME,\n THEME_STORAGE_KEY,\n} from './theme.constants';\nimport type { TnThemeDefinition } from './theme.interface';\nimport { TnTheme } from './theme.interface';\n\n/**\n * Service for managing themes in the TrueNAS UI Components library.\n *\n * Features:\n * - Signal-based reactive theme state\n * - LocalStorage persistence (key: 'tn-theme')\n * - Automatic CSS class application to document root\n * - SSR-safe (checks for browser platform)\n *\n * @example\n * ```typescript\n * import { Component, inject, effect } from '@angular/core';\n * import { TnThemeService, TnTheme } from '@truenas/ui-components';\n *\n * @Component({...})\n * export class MyComponent {\n * private themeService = inject(TnThemeService);\n *\n * constructor() {\n * // Get available theme definitions\n * const themes = this.themeService.availableThemes;\n *\n * // Get current theme (signal)\n * const currentTheme = this.themeService.currentTheme();\n *\n * // Set theme using enum (recommended)\n * this.themeService.setTheme(TnTheme.Blue);\n *\n * // React to theme changes\n * effect(() => {\n * console.log('Theme changed to:', this.themeService.currentTheme()?.label);\n * });\n * }\n * }\n * ```\n */\n@Injectable({\n providedIn: 'root',\n})\nexport class TnThemeService {\n private readonly platformId = inject(PLATFORM_ID);\n private readonly isBrowser = isPlatformBrowser(this.platformId);\n\n /**\n * Internal signal holding the current theme enum value\n */\n private readonly currentThemeSignal = signal<TnTheme>(DEFAULT_THEME);\n\n /**\n * Computed signal that returns the full theme definition for the current theme\n */\n readonly currentTheme = computed<TnThemeDefinition | undefined>(() => {\n const theme = this.currentThemeSignal();\n return THEME_MAP.get(theme);\n });\n\n /**\n * Computed signal that returns the current theme's CSS class name\n */\n readonly currentThemeClass = computed<string>(() => {\n return this.currentTheme()?.className ?? TnTheme.Dark;\n });\n\n /**\n * All available theme definitions in the library (readonly array)\n */\n readonly availableThemes: readonly TnThemeDefinition[] = TN_THEME_DEFINITIONS;\n\n constructor() {\n // Initialize theme from localStorage or default\n this.initializeTheme();\n\n // Effect to apply theme CSS class to document root whenever theme changes\n effect(() => {\n if (this.isBrowser) {\n this.applyThemeToDOM(this.currentThemeClass());\n }\n });\n\n // Effect to persist theme to localStorage whenever it changes\n effect(() => {\n if (this.isBrowser) {\n const theme = this.currentTheme();\n if (theme) {\n this.persistThemeToStorage(theme);\n }\n }\n });\n }\n\n /**\n * Set the current theme.\n * Updates the signal, which triggers effects to apply CSS and save to localStorage.\n *\n * @param theme - The theme to set (use TnTheme enum)\n * @returns true if theme was found and set, false otherwise\n *\n * @example\n * ```typescript\n * themeService.setTheme(TnTheme.Dracula);\n * ```\n */\n setTheme(theme: TnTheme): boolean {\n const themeDefinition = THEME_MAP.get(theme);\n if (themeDefinition) {\n this.currentThemeSignal.set(theme);\n return true;\n }\n console.warn(`[TnThemeService] Theme \"${theme}\" not found. Available themes:`, Array.from(THEME_MAP.keys()));\n return false;\n }\n\n /**\n * Get the current theme enum value (reactive signal value)\n */\n getCurrentTheme(): TnTheme {\n return this.currentThemeSignal();\n }\n\n /**\n * Reset theme to default\n */\n resetToDefault(): void {\n this.setTheme(DEFAULT_THEME);\n }\n\n /**\n * Check if a theme exists\n */\n hasTheme(theme: TnTheme): boolean {\n return THEME_MAP.has(theme);\n }\n\n /**\n * Initialize theme from localStorage or use default\n */\n private initializeTheme(): void {\n if (!this.isBrowser) {\n return;\n }\n\n try {\n const storedTheme = localStorage.getItem(THEME_STORAGE_KEY) as TnTheme;\n if (storedTheme && this.hasTheme(storedTheme)) {\n this.currentThemeSignal.set(storedTheme);\n } else {\n // If no valid stored theme, use default\n this.currentThemeSignal.set(DEFAULT_THEME);\n }\n } catch (error) {\n console.error('[TnThemeService] Error reading from localStorage:', error);\n this.currentThemeSignal.set(DEFAULT_THEME);\n }\n }\n\n /**\n * Apply theme CSS class to document root.\n * Removes all other theme classes first to avoid conflicts.\n *\n * @param themeClass - CSS class name to apply (e.g., 'tn-dark')\n */\n private applyThemeToDOM(themeClass: string): void {\n if (!this.isBrowser) {\n return;\n }\n\n try {\n const root = document.documentElement;\n\n // Remove all existing theme classes\n TN_THEME_DEFINITIONS.forEach((theme) => {\n root.classList.remove(theme.className);\n });\n\n // Add the new theme class\n root.classList.add(themeClass);\n } catch (error) {\n console.error('[TnThemeService] Error applying theme to DOM:', error);\n }\n }\n\n /**\n * Persist theme to localStorage.\n * Colors are applied automatically via CSS classes from themes.css.\n *\n * @param theme - Theme definition to persist\n */\n private persistThemeToStorage(theme: TnThemeDefinition): void {\n if (!this.isBrowser) {\n return;\n }\n\n try {\n localStorage.setItem(THEME_STORAGE_KEY, theme.name);\n } catch (error) {\n console.error('[TnThemeService] Error writing to localStorage:', error);\n }\n }\n}\n","/*\n * Public API Surface of truenas-ui\n */\n\nexport * from './lib/disk-icon/disk-icon.component';\nexport * from './lib/banner/banner.component';\nexport * from './lib/banner/banner.harness';\nexport * from './lib/button/button.component';\nexport * from './lib/icon-button/icon-button.component';\nexport * from './lib/input/input.component';\nexport * from './lib/input/input.directive';\nexport * from './lib/chip/chip.component';\nexport * from './lib/card';\nexport * from './lib/expansion-panel/expansion-panel.component';\nexport * from './lib/checkbox/checkbox.component';\nexport * from './lib/radio/radio.component';\nexport * from './lib/slide-toggle/slide-toggle.component';\nexport * from './lib/tabs/tabs.component';\nexport * from './lib/tab/tab.component';\nexport * from './lib/tab-panel/tab-panel.component';\nexport * from './lib/menu';\nexport * from './lib/keyboard-shortcut/keyboard-shortcut.component';\nexport * from './lib/form-field/form-field.component';\nexport * from './lib/select/select.component';\nexport * from './lib/icon/icon.component';\nexport * from './lib/icon/icon.harness';\nexport * from './lib/icon/icon-registry.service';\nexport * from './lib/icon/sprite-loader.service';\nexport * from './lib/icon/icon-marker';\nexport * from './lib/icon/integrations/lucide.integration';\nexport * from './lib/list/list.component';\nexport * from './lib/list-item/list-item.component';\nexport * from './lib/list-subheader/list-subheader.component';\nexport * from './lib/list-directives/list-directives';\nexport * from './lib/divider/divider.component';\nexport * from './lib/selection-list/selection-list.component';\nexport * from './lib/list-option/list-option.component';\nexport * from './lib/table/table.component';\nexport * from './lib/table-column/table-column.directive';\nexport { TnTreeComponent, FlatTreeControl, TnTreeFlatDataSource, TnTreeFlattener, TnFlatTreeNode } from './lib/tree/tree.component';\nexport { TnTreeNodeComponent } from './lib/tree/tree-node.component';\nexport { TnNestedTreeNodeComponent } from './lib/tree/nested-tree-node.component';\nexport { TnTreeNodeOutletDirective } from './lib/tree/tree-node-outlet.directive';\nexport * from './lib/enums/disk-type.enum';\nexport * from './lib/enums/input-type.enum';\nexport * from './lib/enums/modifier-keys.enum';\nexport * from './lib/enums/common-shortcuts.enum';\nexport * from './lib/utils/shortcut-builder';\nexport * from './lib/pipes/file-size/file-size.pipe';\nexport * from './lib/pipes/strip-mnt-prefix/strip-mnt-prefix.pipe';\nexport * from './lib/pipes/truncate-path/truncate-path.pipe';\nexport * from './lib/spinner/spinner.component';\nexport * from './lib/spinner/branded-spinner.component';\nexport * from './lib/progress-bar/progress-bar.component';\nexport * from './lib/progress-bar/particle-progress-bar.component';\nexport * from './lib/calendar/calendar.component';\nexport * from './lib/calendar/calendar-header.component';\nexport * from './lib/calendar/month-view.component';\nexport * from './lib/calendar/multi-year-view.component';\nexport * from './lib/date-range-input/date-input.component';\nexport * from './lib/date-range-input/date-range-input.component';\nexport * from './lib/date-range-input/time-input.component';\nexport * from './lib/slider/slider.component';\nexport * from './lib/slider/slider-thumb.directive';\nexport * from './lib/slider/slider-with-label.directive';\nexport * from './lib/button-toggle';\nexport * from './lib/tooltip/tooltip.directive';\nexport * from './lib/tooltip/tooltip.component';\nexport * from './lib/dialog';\nexport * from './lib/stepper';\nexport * from './lib/file-picker';\nexport * from './lib/services/keyboard-shortcut.service';\nexport * from './lib/theme/theme.service';\nexport * from './lib/theme/theme.interface';\nexport * from './lib/theme/theme.constants';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i2.TnSpriteLoaderService","i1"],"mappings":"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"}
1
+ {"version":3,"file":"truenas-ui-components.mjs","sources":["../../../projects/truenas-ui/src/lib/enums/disk-type.enum.ts","../../../projects/truenas-ui/src/lib/disk-icon/disk-icon.component.ts","../../../projects/truenas-ui/src/lib/disk-icon/disk-icon.component.html","../../../projects/truenas-ui/src/lib/icon/sprite-loader.service.ts","../../../projects/truenas-ui/src/lib/icon/icon-registry.service.ts","../../../projects/truenas-ui/src/lib/icon/icon.component.ts","../../../projects/truenas-ui/src/lib/icon/icon.component.html","../../../projects/truenas-ui/src/lib/banner/banner.component.ts","../../../projects/truenas-ui/src/lib/banner/banner.component.html","../../../projects/truenas-ui/src/lib/banner/banner.harness.ts","../../../projects/truenas-ui/src/lib/button/button.component.ts","../../../projects/truenas-ui/src/lib/button/button.component.html","../../../projects/truenas-ui/src/lib/button/button.harness.ts","../../../projects/truenas-ui/src/lib/icon-button/icon-button.component.ts","../../../projects/truenas-ui/src/lib/icon-button/icon-button.component.html","../../../projects/truenas-ui/src/lib/enums/input-type.enum.ts","../../../projects/truenas-ui/src/lib/input/input.component.ts","../../../projects/truenas-ui/src/lib/input/input.component.html","../../../projects/truenas-ui/src/lib/input/input.directive.ts","../../../projects/truenas-ui/src/lib/chip/chip.component.ts","../../../projects/truenas-ui/src/lib/chip/chip.component.html","../../../projects/truenas-ui/src/lib/menu/menu-trigger.directive.ts","../../../projects/truenas-ui/src/lib/menu/menu.component.ts","../../../projects/truenas-ui/src/lib/menu/menu.component.html","../../../projects/truenas-ui/src/lib/slide-toggle/slide-toggle.component.ts","../../../projects/truenas-ui/src/lib/slide-toggle/slide-toggle.component.html","../../../projects/truenas-ui/src/lib/card/card.component.ts","../../../projects/truenas-ui/src/lib/card/card.component.html","../../../projects/truenas-ui/src/lib/expansion-panel/expansion-panel.component.ts","../../../projects/truenas-ui/src/lib/expansion-panel/expansion-panel.component.html","../../../projects/truenas-ui/src/lib/checkbox/checkbox.component.ts","../../../projects/truenas-ui/src/lib/checkbox/checkbox.component.html","../../../projects/truenas-ui/src/lib/radio/radio.component.ts","../../../projects/truenas-ui/src/lib/radio/radio.component.html","../../../projects/truenas-ui/src/lib/tab/tab.component.ts","../../../projects/truenas-ui/src/lib/tab/tab.component.html","../../../projects/truenas-ui/src/lib/tab-panel/tab-panel.component.ts","../../../projects/truenas-ui/src/lib/tab-panel/tab-panel.component.html","../../../projects/truenas-ui/src/lib/tabs/tabs.component.ts","../../../projects/truenas-ui/src/lib/tabs/tabs.component.html","../../../projects/truenas-ui/src/lib/keyboard-shortcut/keyboard-shortcut.component.ts","../../../projects/truenas-ui/src/lib/keyboard-shortcut/keyboard-shortcut.component.html","../../../projects/truenas-ui/src/lib/form-field/form-field.component.ts","../../../projects/truenas-ui/src/lib/form-field/form-field.component.html","../../../projects/truenas-ui/src/lib/select/select.component.ts","../../../projects/truenas-ui/src/lib/select/select.component.html","../../../projects/truenas-ui/src/lib/icon/icon.harness.ts","../../../projects/truenas-ui/src/lib/icon/icon-marker.ts","../../../projects/truenas-ui/src/lib/icon/icon-testing.ts","../../../projects/truenas-ui/src/lib/icon/integrations/lucide.integration.ts","../../../projects/truenas-ui/src/lib/list/list.component.ts","../../../projects/truenas-ui/src/lib/list/list.component.html","../../../projects/truenas-ui/src/lib/list-item/list-item.component.ts","../../../projects/truenas-ui/src/lib/list-item/list-item.component.html","../../../projects/truenas-ui/src/lib/list-subheader/list-subheader.component.ts","../../../projects/truenas-ui/src/lib/list-subheader/list-subheader.component.html","../../../projects/truenas-ui/src/lib/list-directives/list-directives.ts","../../../projects/truenas-ui/src/lib/divider/divider.component.ts","../../../projects/truenas-ui/src/lib/divider/divider.component.html","../../../projects/truenas-ui/src/lib/list-option/list-option.component.ts","../../../projects/truenas-ui/src/lib/list-option/list-option.component.html","../../../projects/truenas-ui/src/lib/selection-list/selection-list.component.ts","../../../projects/truenas-ui/src/lib/selection-list/selection-list.component.html","../../../projects/truenas-ui/src/lib/table-column/table-column.directive.ts","../../../projects/truenas-ui/src/lib/table/table.component.ts","../../../projects/truenas-ui/src/lib/table/table.component.html","../../../projects/truenas-ui/src/lib/tree/tree.component.ts","../../../projects/truenas-ui/src/lib/tree/tree.component.html","../../../projects/truenas-ui/src/lib/tree/tree-node.component.ts","../../../projects/truenas-ui/src/lib/tree/tree-node.component.html","../../../projects/truenas-ui/src/lib/tree/tree-node-outlet.directive.ts","../../../projects/truenas-ui/src/lib/tree/nested-tree-node.component.ts","../../../projects/truenas-ui/src/lib/tree/nested-tree-node.component.html","../../../projects/truenas-ui/src/lib/enums/modifier-keys.enum.ts","../../../projects/truenas-ui/src/lib/enums/common-shortcuts.enum.ts","../../../projects/truenas-ui/src/lib/utils/shortcut-builder.ts","../../../projects/truenas-ui/src/lib/pipes/file-size/bits.constant.ts","../../../projects/truenas-ui/src/lib/pipes/file-size/bytes.constant.ts","../../../projects/truenas-ui/src/lib/pipes/file-size/file-size.utils.ts","../../../projects/truenas-ui/src/lib/pipes/file-size/file-size.pipe.ts","../../../projects/truenas-ui/src/lib/pipes/strip-mnt-prefix/strip-mnt-prefix.pipe.ts","../../../projects/truenas-ui/src/lib/pipes/truncate-path/truncate-path.pipe.ts","../../../projects/truenas-ui/src/lib/spinner/spinner.component.ts","../../../projects/truenas-ui/src/lib/spinner/spinner.component.html","../../../projects/truenas-ui/src/lib/spinner/branded-spinner.component.ts","../../../projects/truenas-ui/src/lib/spinner/branded-spinner.component.html","../../../projects/truenas-ui/src/lib/progress-bar/progress-bar.component.ts","../../../projects/truenas-ui/src/lib/progress-bar/progress-bar.component.html","../../../projects/truenas-ui/src/lib/progress-bar/particle-progress-bar.component.ts","../../../projects/truenas-ui/src/lib/progress-bar/particle-progress-bar.component.html","../../../projects/truenas-ui/src/lib/calendar/calendar-header.component.ts","../../../projects/truenas-ui/src/lib/calendar/calendar-header.component.html","../../../projects/truenas-ui/src/lib/calendar/month-view.component.ts","../../../projects/truenas-ui/src/lib/calendar/month-view.component.html","../../../projects/truenas-ui/src/lib/calendar/multi-year-view.component.ts","../../../projects/truenas-ui/src/lib/calendar/multi-year-view.component.html","../../../projects/truenas-ui/src/lib/calendar/calendar.component.ts","../../../projects/truenas-ui/src/lib/calendar/calendar.component.html","../../../projects/truenas-ui/src/lib/date-range-input/date-input.component.ts","../../../projects/truenas-ui/src/lib/date-range-input/date-input.component.html","../../../projects/truenas-ui/src/lib/date-range-input/date-range-input.component.ts","../../../projects/truenas-ui/src/lib/date-range-input/date-range-input.component.html","../../../projects/truenas-ui/src/lib/date-range-input/time-input.component.ts","../../../projects/truenas-ui/src/lib/date-range-input/time-input.component.html","../../../projects/truenas-ui/src/lib/slider/slider-thumb.directive.ts","../../../projects/truenas-ui/src/lib/slider/slider.component.ts","../../../projects/truenas-ui/src/lib/slider/slider.component.html","../../../projects/truenas-ui/src/lib/slider/slider-with-label.directive.ts","../../../projects/truenas-ui/src/lib/button-toggle/button-toggle.component.ts","../../../projects/truenas-ui/src/lib/button-toggle/button-toggle.component.html","../../../projects/truenas-ui/src/lib/button-toggle/button-toggle-group.component.ts","../../../projects/truenas-ui/src/lib/button-toggle/button-toggle-group.component.html","../../../projects/truenas-ui/src/lib/tooltip/tooltip.component.ts","../../../projects/truenas-ui/src/lib/tooltip/tooltip.component.html","../../../projects/truenas-ui/src/lib/tooltip/tooltip.directive.ts","../../../projects/truenas-ui/src/lib/dialog/dialog.service.ts","../../../projects/truenas-ui/src/lib/dialog/dialog-shell.component.ts","../../../projects/truenas-ui/src/lib/dialog/dialog-shell.component.html","../../../projects/truenas-ui/src/lib/dialog/confirm-dialog.component.ts","../../../projects/truenas-ui/src/lib/dialog/confirm-dialog.component.html","../../../projects/truenas-ui/src/lib/stepper/step.component.ts","../../../projects/truenas-ui/src/lib/stepper/stepper.component.ts","../../../projects/truenas-ui/src/lib/stepper/stepper.component.html","../../../projects/truenas-ui/src/lib/custom-icons/generated-icons.ts","../../../projects/truenas-ui/src/lib/file-picker/file-picker-popup.component.ts","../../../projects/truenas-ui/src/lib/file-picker/file-picker-popup.component.html","../../../projects/truenas-ui/src/lib/file-picker/file-picker.component.ts","../../../projects/truenas-ui/src/lib/file-picker/file-picker.component.html","../../../projects/truenas-ui/src/lib/services/keyboard-shortcut.service.ts","../../../projects/truenas-ui/src/lib/theme/theme.interface.ts","../../../projects/truenas-ui/src/lib/theme/theme.constants.ts","../../../projects/truenas-ui/src/lib/theme/theme.service.ts","../../../projects/truenas-ui/src/public-api.ts","../../../projects/truenas-ui/src/truenas-ui-components.ts"],"sourcesContent":["export enum DiskType {\n Hdd = 'HDD',\n Ssd = 'SSD',\n}\n","import {\n ChangeDetectionStrategy, Component, input,\n} from '@angular/core';\nimport { DiskType } from '../enums/disk-type.enum';\n\n@Component({\n selector: 'tn-disk-icon',\n templateUrl: './disk-icon.component.html',\n styleUrls: ['./disk-icon.component.scss'],\n standalone: true,\n imports: [\n // FileSizePipe,\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class DiskIconComponent {\n readonly size = input.required<string>(); // Was originally a number\n readonly type = input.required<DiskType>();\n readonly name = input.required<string>();\n\n protected readonly DiskType = DiskType;\n}\n","<html>\n<svg id=\"disk-icon-large\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" width=\"72\" height=\"80\" viewBox=\"0 0 72 80\">\n <defs>\n <clipPath id=\"clip-path\">\n <rect id=\"Mask_Rounded_Corners\" data-name=\"Mask Rounded Corners\" width=\"72\" height=\"80\" rx=\"4\" transform=\"translate(-0.039)\" fill=\"none\" stroke=\"#414141\" stroke-width=\"1\"/>\n </clipPath>\n <filter id=\"BG_Fill\" x=\"-9\" y=\"-6\" width=\"90\" height=\"98\" filterUnits=\"userSpaceOnUse\">\n <feOffset dy=\"3\" input=\"SourceAlpha\"/>\n <feGaussianBlur stdDeviation=\"3\" result=\"blur\"/>\n <feFlood flood-opacity=\"0.161\"/>\n <feComposite operator=\"in\" in2=\"blur\"/>\n <feComposite in=\"SourceGraphic\"/>\n </filter>\n </defs>\n <g id=\"Normal\" transform=\"translate(11)\">\n <g id=\"BG_Masks\" data-name=\"BG Masks\" transform=\"translate(-10.961)\" clip-path=\"url(#clip-path)\">\n <g transform=\"matrix(1, 0, 0, 1, -0.04, 0)\" filter=\"url(#BG_Fill)\">\n <g id=\"BG_Fill-2\" data-name=\"BG Fill\" fill=\"#1e1e1e\" stroke=\"#8f8f8f\" stroke-width=\"1\">\n <rect width=\"72\" height=\"80\" rx=\"4\" stroke=\"none\"/>\n <rect x=\"0.5\" y=\"0.5\" width=\"71\" height=\"79\" rx=\"3.5\" fill=\"none\"/>\n </g>\n </g>\n <rect id=\"BG_Top\" data-name=\"BG Top\" width=\"70.5\" height=\"17.391\" transform=\"translate(-0.039)\" fill=\"rgba(255,255,255,0.5)\" opacity=\"0.5\"/>\n <path id=\"BG_Bottom\" data-name=\"BG Bottom\" d=\"M0,0H70.5V17.391H0Z\" transform=\"translate(-0.039 62.609)\" fill=\"rgba(255,255,255,0.5)\" opacity=\"0.5\"/>\n </g>\n @if (type() === DiskType.Hdd) {\n <g id=\"harddisk\" transform=\"scale(1.2), translate(4 14)\" opacity=\"0.5\">\n <path id=\"harddisk-2\" data-name=\"harddisk\" d=\"M6.856,2H23.989a2.856,2.856,0,0,1,2.856,2.856V27.7a2.856,2.856,0,0,1-2.856,2.856H6.856A2.856,2.856,0,0,1,4,27.7V4.856A2.856,2.856,0,0,1,6.856,2Zm8.567,2.856a8.567,8.567,0,0,0-8.567,8.567,8.474,8.474,0,0,0,8.567,8.567l-1.428-2.856c-.394-.683.745-2.461,1.428-2.856h0c.683-.394,2.461-.683,2.856,0l2.856,4.283c1.963-1.57,2.856-4.43,2.856-7.139A8.567,8.567,0,0,0,15.422,4.856Zm0,7.139a1.428,1.428,0,1,1-1.428,1.428A1.428,1.428,0,0,1,15.422,11.995ZM8.283,24.845a1.428,1.428,0,1,0,1.428,1.428A1.428,1.428,0,0,0,8.283,24.845Zm7.139-7.139L19.706,27.7l2.856-2.856L16.85,17.706Z\" transform=\"translate(0.098 3.322)\" fill=\"#fff\"/>\n </g>\n } @else if (type() === DiskType.Ssd) {\n <g id=\"ssd\" transform=\"translate(-50 17.5) scale(0.5)\" opacity=\"0.5\">\n <path id=\"ssd-2\" d=\"M 132.935 15.223 L 140.185 15.223 L 140.185 19.723 C 140.185 21.944 141.985 23.744 144.206 23.744 L 157.231 23.744 C 159.452 23.744 161.252 21.944 161.252 19.723 L 161.252 15.223 L 168.503 15.223 C 171.577 15.223 174.069 17.715 174.069 20.789 L 174.069 68.904 C 174.069 71.978 171.577 74.47 168.503 74.47 L 132.935 74.47 C 129.861 74.47 127.369 71.978 127.369 68.904 L 127.369 20.789 C 127.369 17.715 129.861 15.223 132.935 15.223 Z M 143.428 15.498 L 150.92 15.498 C 151.394 15.498 151.779 15.883 151.779 16.357 L 151.779 20.207 C 151.779 20.681 151.394 21.066 150.92 21.066 L 143.428 21.066 C 142.954 21.066 142.569 20.681 142.569 20.207 L 142.569 16.357 C 142.569 15.883 142.954 15.498 143.428 15.498 Z M 155.103 15.498 L 157.561 15.498 C 158.163 15.498 158.651 15.986 158.651 16.588 L 158.651 20.002 C 158.651 20.604 158.163 21.092 157.561 21.092 L 155.103 21.092 C 154.501 21.092 154.013 20.604 154.013 20.002 L 154.013 16.588 C 154.013 15.986 154.501 15.498 155.103 15.498 Z M 135.852 38.928 L 135.852 59.34 C 135.852 62.06 138.057 64.265 140.777 64.265 L 160.662 64.265 C 163.382 64.265 165.587 62.06 165.587 59.34 L 165.587 38.928 C 165.587 36.208 163.382 34.003 160.662 34.003 L 140.777 34.003 C 138.057 34.003 135.852 36.208 135.852 38.928 Z M 140.106 36.674 L 161.333 36.674 C 162.385 36.674 163.237 37.526 163.237 38.578 L 163.237 59.69 C 163.237 60.742 162.385 61.594 161.333 61.594 L 140.106 61.594 C 139.054 61.594 138.202 60.742 138.202 59.69 L 138.202 38.578 C 138.202 37.526 139.054 36.674 140.106 36.674 Z M 167.69 19.867 C 166.509 19.867 165.552 20.824 165.552 22.005 C 165.552 23.186 166.509 24.143 167.69 24.143 C 168.871 24.143 169.828 23.186 169.828 22.005 C 169.828 20.824 168.871 19.867 167.69 19.867 Z M 167.69 65.55 C 166.509 65.55 165.552 66.507 165.552 67.688 C 165.552 68.869 166.509 69.826 167.69 69.826 C 168.871 69.826 169.828 68.869 169.828 67.688 C 169.828 66.507 168.871 65.55 167.69 65.55 Z M 133.748 65.55 C 132.567 65.55 131.61 66.507 131.61 67.688 C 131.61 68.869 132.567 69.826 133.748 69.826 C 134.929 69.826 135.886 68.869 135.886 67.688 C 135.886 66.507 134.929 65.55 133.748 65.55 Z M 133.748 19.867 C 132.567 19.867 131.61 20.824 131.61 22.005 C 131.61 23.186 132.567 24.143 133.748 24.143 C 134.929 24.143 135.886 23.186 135.886 22.005 C 135.886 20.824 134.929 19.867 133.748 19.867 Z\" style=\"fill: rgb(216, 216, 216);\" />\n </g>\n }\n <g id=\"Labels\" transform=\"translate(11.451 1.857)\" opacity=\"0.998\">\n <text id=\"disk-size\" data-name=\"2 TiB\" transform=\"translate(13 72.714)\" fill=\"#fff\" font-size=\"11\" font-family=\"Inter\" style=\"text-anchor: middle\">\n <tspan x=\"0\" y=\"0\">{{ size() }}</tspan>\n </text>\n <text id=\"disk-identifier\" transform=\"translate(12.647 11)\" fill=\"#fff\" font-size=\"11\" font-family=\"Inter\" style=\"text-anchor: middle\">\n <tspan x=\"0\" y=\"0\">{{ name() }}</tspan>\n </text>\n </g>\n </g>\n</svg>\n</html>\n","import { HttpClient } from '@angular/common/http';\nimport { inject, Injectable } from '@angular/core';\nimport { DomSanitizer, type SafeResourceUrl } from '@angular/platform-browser';\nimport { firstValueFrom } from 'rxjs';\n\n/**\n * Default base path for sprite assets (namespaced to avoid collisions with consumer apps)\n * This should match the value in sprite-config-interface.ts\n */\nexport const defaultSpriteBasePath = 'assets/tn-icons';\n\n/**\n * Default path for the sprite configuration file.\n */\nexport const defaultSpriteConfigPath = `${defaultSpriteBasePath}/sprite-config.json`;\n\nexport interface SpriteConfig {\n iconUrl: string;\n icons?: string[]; // List of available icon IDs in the sprite\n}\n\n/**\n * Service for loading and managing icon sprites.\n * This is a custom implementation that does NOT depend on Angular Material.\n *\n * The sprite system works by:\n * 1. Loads the application's sprite (generated via `yarn icons` command)\n * 2. The sprite includes both consumer icons and library-internal icons (chevrons, folder, etc.)\n * 3. Icons are resolved as SVG fragment identifiers (e.g., sprite.svg#icon-name)\n */\n@Injectable({\n providedIn: 'root'\n})\nexport class TnSpriteLoaderService {\n private spriteConfig?: SpriteConfig;\n private spriteLoaded = false;\n private spriteLoadPromise?: Promise<void>;\n\n private http = inject(HttpClient);\n private sanitizer = inject(DomSanitizer);\n\n constructor() {\n // Start loading sprite immediately (fire-and-forget)\n void this.loadSpriteConfig();\n }\n\n /**\n * Load the sprite configuration\n */\n private async loadSpriteConfig(): Promise<void> {\n if (this.spriteLoadPromise) {\n return this.spriteLoadPromise;\n }\n\n this.spriteLoadPromise = (async () => {\n try {\n const config = await firstValueFrom(\n this.http.get<SpriteConfig>(defaultSpriteConfigPath)\n );\n this.spriteConfig = config;\n this.spriteLoaded = true;\n } catch (error) {\n console.error('[TnSpriteLoader] Failed to load sprite config. Icons may not work:', error);\n }\n })();\n\n return this.spriteLoadPromise;\n }\n\n /**\n * Ensure the sprite is loaded before resolving icons\n */\n async ensureSpriteLoaded(): Promise<boolean> {\n await this.loadSpriteConfig();\n return this.spriteLoaded;\n }\n\n /**\n * Get the full URL for an icon in the sprite\n * Returns a URL like: assets/icons/sprite.svg?v=hash#icon-name\n *\n * @param iconName The icon name (e.g., 'folder', 'mdi-server', 'tn-dataset')\n * @returns The fragment identifier URL for the icon, or null if sprite not loaded or icon not in sprite\n */\n getIconUrl(iconName: string): string | null {\n if (!this.spriteConfig) {\n console.warn(`[TnSpriteLoader] Icon sprite not loaded yet, cannot resolve: ${iconName}`);\n return null;\n }\n\n // Check if the icon exists in the sprite manifest\n if (this.spriteConfig.icons && !this.spriteConfig.icons.includes(iconName)) {\n return null;\n }\n\n // The sprite URL already includes the cache-busting version parameter\n // We just append the icon name as a fragment identifier\n return `${this.spriteConfig.iconUrl}#${iconName}`;\n }\n\n /**\n * Get a sanitized resource URL for an icon\n * This is used when binding to [src] or similar attributes\n *\n * @param iconName The icon name\n * @returns Sanitized resource URL or null\n */\n getSafeIconUrl(iconName: string): SafeResourceUrl | null {\n const url = this.getIconUrl(iconName);\n if (!url) {\n return null;\n }\n\n return this.sanitizer.bypassSecurityTrustResourceUrl(url);\n }\n\n /**\n * Check if the sprite is loaded\n */\n isSpriteLoaded(): boolean {\n return this.spriteLoaded;\n }\n\n /**\n * Get the sprite config if loaded\n */\n getSpriteConfig(): SpriteConfig | undefined {\n return this.spriteConfig;\n }\n}\n","import { inject, Injectable } from '@angular/core';\nimport { DomSanitizer, type SafeHtml } from '@angular/platform-browser';\nimport { TnSpriteLoaderService } from './sprite-loader.service';\n\nexport interface IconLibrary {\n name: string;\n resolver: (iconName: string, options?: unknown) => string | HTMLElement | null;\n defaultOptions?: unknown;\n}\n\nexport interface ResolvedIcon {\n source: 'svg' | 'css' | 'unicode' | 'text' | 'sprite';\n content: string | SafeHtml;\n spriteUrl?: string; // For sprite-based icons\n}\n\n@Injectable({\n providedIn: 'root'\n})\nexport class TnIconRegistryService {\n private libraries = new Map<string, IconLibrary>();\n private customIcons = new Map<string, string>();\n\n private sanitizer: DomSanitizer;\n private spriteLoader: TnSpriteLoaderService;\n\n constructor(\n sanitizer?: DomSanitizer,\n spriteLoader?: TnSpriteLoaderService\n ) {\n // Support both DI and manual injection for testing\n this.sanitizer = sanitizer ?? inject(DomSanitizer);\n this.spriteLoader = spriteLoader ?? inject(TnSpriteLoaderService);\n }\n\n /**\n * Register an icon library (like Lucide, Heroicons, etc.)\n * \n * @example\n * ```typescript\n * // Register Lucide\n * import * as LucideIcons from 'lucide';\n * \n * iconRegistry.registerLibrary({\n * name: 'lucide',\n * resolver: (iconName: string, options = {}) => {\n * const pascalCase = iconName.split('-').map(part => \n * part.charAt(0).toUpperCase() + part.slice(1)\n * ).join('');\n * \n * const iconFunction = (LucideIcons as any)[pascalCase];\n * if (iconFunction && typeof iconFunction === 'function') {\n * return iconFunction({\n * size: 24,\n * color: 'currentColor',\n * strokeWidth: 2,\n * ...options\n * });\n * }\n * return null;\n * },\n * defaultOptions: { size: 24, strokeWidth: 2 }\n * });\n * ```\n */\n registerLibrary(library: IconLibrary): void {\n this.libraries.set(library.name, library);\n }\n\n /**\n * Register a custom SVG icon\n * \n * @example\n * ```typescript\n * iconRegistry.registerIcon('my-logo', `\n * <svg viewBox=\"0 0 24 24\">\n * <path d=\"M12 2L2 7v10c0 5.55 3.84 10 9 11 1.16-.08 2-.35 3-.82z\"/>\n * </svg>\n * `);\n * ```\n */\n registerIcon(name: string, svgContent: string): void {\n this.customIcons.set(name, svgContent);\n }\n\n /**\n * Register multiple custom icons at once\n */\n registerIcons(icons: Record<string, string>): void {\n Object.entries(icons).forEach(([name, svg]) => {\n this.registerIcon(name, svg);\n });\n }\n\n /**\n * Resolve an icon from the sprite\n * Returns the sprite URL if the sprite is loaded\n */\n private resolveSpriteIcon(name: string): ResolvedIcon | null {\n if (!this.spriteLoader.isSpriteLoaded()) {\n return null;\n }\n\n const spriteUrl = this.spriteLoader.getIconUrl(name);\n if (!spriteUrl) {\n return null;\n }\n\n return {\n source: 'sprite',\n content: '', // Not used for sprite icons\n spriteUrl: spriteUrl\n };\n }\n\n /**\n * Resolve an icon using sprite, registered libraries, and custom icons\n *\n * Resolution order:\n * 1. Sprite icons (Material, MDI, custom TrueNAS icons)\n * 2. Registered libraries (with prefix, e.g., \"lucide:home\")\n * 3. Custom registered icons\n *\n * Format: \"library:icon-name\" or just \"icon-name\"\n *\n * @example\n * ```typescript\n * // Sprite icons (automatic from sprite.svg)\n * registry.resolveIcon('folder') // Material Design icon\n * registry.resolveIcon('mdi-server') // MDI icon\n * registry.resolveIcon('tn-dataset') // Custom TrueNAS icon\n *\n * // Library icons\n * registry.resolveIcon('lucide:home')\n * registry.resolveIcon('heroicons:user-circle')\n *\n * // Custom registered icons\n * registry.resolveIcon('my-logo')\n * ```\n */\n resolveIcon(name: string, options?: unknown): ResolvedIcon | null {\n // 1. Try sprite first (if loaded)\n const spriteIcon = this.resolveSpriteIcon(name);\n if (spriteIcon) {\n return spriteIcon;\n }\n\n // 2. Handle library prefix (e.g., \"lucide:home\")\n if (name.includes(':')) {\n const [libraryName, iconName] = name.split(':', 2);\n return this.resolveLibraryIcon(libraryName, iconName, options);\n }\n\n // 3. Handle custom prefix (e.g., \"custom:icon\")\n if (name.startsWith('custom:')) {\n const iconName = name.replace('custom:', '');\n return this.resolveCustomIcon(iconName);\n }\n\n // 4. Handle direct custom icon name\n return this.resolveCustomIcon(name);\n }\n\n /**\n * Check if a library is registered\n */\n hasLibrary(libraryName: string): boolean {\n return this.libraries.has(libraryName);\n }\n\n /**\n * Check if a custom icon is registered\n */\n hasIcon(iconName: string): boolean {\n return this.customIcons.has(iconName);\n }\n\n /**\n * Get list of registered libraries\n */\n getRegisteredLibraries(): string[] {\n return Array.from(this.libraries.keys());\n }\n\n /**\n * Get list of registered custom icons\n */\n getRegisteredIcons(): string[] {\n return Array.from(this.customIcons.keys());\n }\n\n /**\n * Remove a library\n */\n unregisterLibrary(libraryName: string): void {\n this.libraries.delete(libraryName);\n }\n\n /**\n * Remove a custom icon\n */\n unregisterIcon(iconName: string): void {\n this.customIcons.delete(iconName);\n }\n\n /**\n * Clear all registered libraries and icons\n */\n clear(): void {\n this.libraries.clear();\n this.customIcons.clear();\n }\n\n /**\n * Get the sprite loader service\n * Useful for checking sprite status or manually resolving sprite icons\n */\n getSpriteLoader(): TnSpriteLoaderService {\n return this.spriteLoader;\n }\n\n private resolveLibraryIcon(libraryName: string, iconName: string, options?: unknown): ResolvedIcon | null {\n const library = this.libraries.get(libraryName);\n if (!library) {\n console.warn(`Icon library '${libraryName}' is not registered`);\n return null;\n }\n\n try {\n const mergedOptions = {\n ...(library.defaultOptions && typeof library.defaultOptions === 'object' ? library.defaultOptions : {}),\n ...(options && typeof options === 'object' ? options : {})\n };\n const result = library.resolver(iconName, mergedOptions);\n\n if (!result) {\n return null;\n }\n\n // Handle different types of results\n if (typeof result === 'string') {\n // Assume it's SVG content\n return {\n source: 'svg',\n content: this.sanitizer.bypassSecurityTrustHtml(result)\n };\n } else if (result instanceof HTMLElement) {\n // Convert HTMLElement to string\n return {\n source: 'svg',\n content: this.sanitizer.bypassSecurityTrustHtml(result.outerHTML)\n };\n }\n\n return null;\n } catch (error) {\n console.warn(`Failed to resolve icon '${libraryName}:${iconName}':`, error);\n return null;\n }\n }\n\n private resolveCustomIcon(iconName: string): ResolvedIcon | null {\n const svgContent = this.customIcons.get(iconName);\n if (!svgContent) {\n return null;\n }\n\n return {\n source: 'svg',\n content: this.sanitizer.bypassSecurityTrustHtml(svgContent)\n };\n }\n}","import { CommonModule } from '@angular/common';\nimport type { ElementRef, AfterViewInit} from '@angular/core';\nimport { ChangeDetectorRef} from '@angular/core';\nimport { Component, input, computed, effect, ChangeDetectionStrategy, ViewEncapsulation, inject, viewChild } from '@angular/core';\nimport { DomSanitizer, type SafeHtml } from '@angular/platform-browser';\nimport { TnIconRegistryService } from './icon-registry.service';\n\nexport type IconSize = 'xs' | 'sm' | 'md' | 'lg' | 'xl';\nexport type IconSource = 'svg' | 'css' | 'unicode' | 'text' | 'sprite';\nexport type IconLibraryType = 'material' | 'mdi' | 'custom' | 'lucide';\n\nexport interface IconResult {\n source: IconSource;\n content: string | SafeHtml;\n spriteUrl?: string; // For sprite-based icons\n}\n\n@Component({\n selector: 'tn-icon',\n standalone: true,\n imports: [CommonModule],\n templateUrl: './icon.component.html',\n styleUrl: './icon.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n host: {\n '[attr.name]': 'name()',\n '[attr.library]': 'library()',\n '[attr.size]': 'size()',\n '[attr.color]': 'color()'\n }\n})\nexport class TnIconComponent implements AfterViewInit {\n name = input<string>('');\n size = input<IconSize>('md');\n color = input<string | undefined>(undefined);\n tooltip = input<string | undefined>(undefined);\n ariaLabel = input<string | undefined>(undefined);\n library = input<IconLibraryType | undefined>(undefined);\n\n svgContainer = viewChild<ElementRef<HTMLDivElement>>('svgContainer');\n\n iconResult: IconResult = { source: 'text', content: '?' };\n\n private iconRegistry = inject(TnIconRegistryService);\n private cdr = inject(ChangeDetectorRef);\n private sanitizer = inject(DomSanitizer);\n\n constructor() {\n // Use effect to watch for changes in name or library\n effect(() => {\n // Track signals to re-run effect when they change\n this.name();\n this.library();\n\n // Trigger icon resolution when name or library changes\n this.resolveIcon()\n .then(() => {\n this.cdr.markForCheck();\n setTimeout(() => this.updateSvgContent(), 0);\n })\n .catch((error) => {\n console.error('[TnIcon] Resolution failed (onChange)', error);\n this.iconResult = { source: 'text', content: '!' };\n this.cdr.markForCheck();\n });\n });\n }\n\n ngAfterViewInit(): void {\n this.updateSvgContent();\n }\n\n effectiveAriaLabel = computed(() => {\n return this.ariaLabel() || this.name() || 'Icon';\n });\n\n sanitizedContent = computed(() => {\n const content = this.iconResult.content;\n\n // Handle mock SafeHtml objects from Storybook\n if (content && typeof content === 'object' && (content as { changingThisBreaksApplicationSecurity?: string }).changingThisBreaksApplicationSecurity) {\n return (content as { changingThisBreaksApplicationSecurity: string }).changingThisBreaksApplicationSecurity;\n }\n\n return content;\n });\n\n private updateSvgContent(): void {\n const svgContainer = this.svgContainer();\n if (this.iconResult.source === 'svg' && svgContainer) {\n const content = this.sanitizedContent();\n if (typeof content === 'string') {\n // Bypass Angular's sanitization by setting innerHTML directly\n svgContainer.nativeElement.innerHTML = content;\n }\n }\n }\n\n private async resolveIcon(): Promise<void> {\n if (!this.name()) {\n this.iconResult = { source: 'text', content: '?' };\n return;\n }\n\n // Wait for sprite to load (if it's being loaded)\n try {\n await this.iconRegistry.getSpriteLoader().ensureSpriteLoaded();\n } catch (error) {\n // Sprite loading failed, continue with other resolution methods\n console.warn('[TnIcon] Sprite loading failed, falling back to other icon sources:', error);\n }\n\n // Construct the effective icon name based on library attribute\n let effectiveIconName = this.name();\n if (this.library() === 'mdi' && !this.name().startsWith('mdi-')) {\n effectiveIconName = `mdi-${this.name()}`;\n } else if (this.library() === 'material' && !this.name().startsWith('mat-')) {\n // Material icons get mat- prefix in sprite\n effectiveIconName = `mat-${this.name()}`;\n } else if (this.library() === 'lucide' && !this.name().includes(':')) {\n // Convert to registry format for Lucide icons\n effectiveIconName = `lucide:${this.name()}`;\n }\n\n // 1. Try icon registry (libraries and custom icons)\n const iconOptions = {\n size: this.size(),\n color: this.color()\n };\n let registryResult = this.iconRegistry.resolveIcon(effectiveIconName, iconOptions);\n\n // Fallback to global registry for Storybook/demos (when DI doesn't work)\n if (!registryResult && typeof window !== 'undefined' && (window as { __storybookIconRegistry?: TnIconRegistryService }).__storybookIconRegistry) {\n const globalRegistry = (window as unknown as { __storybookIconRegistry: TnIconRegistryService }).__storybookIconRegistry;\n if (globalRegistry) {\n registryResult = globalRegistry.resolveIcon(effectiveIconName, iconOptions);\n }\n }\n\n if (registryResult) {\n this.iconResult = registryResult;\n return;\n }\n\n // 2. Try built-in third-party patterns (deprecated - use registry instead)\n const thirdPartyResult = this.tryThirdPartyIcon(effectiveIconName);\n if (thirdPartyResult) {\n this.iconResult = thirdPartyResult;\n return;\n }\n\n // 3. Try CSS class (Font Awesome, Material Icons, etc.)\n const cssResult = this.tryCssIcon(effectiveIconName);\n if (cssResult) {\n this.iconResult = cssResult;\n return;\n }\n\n // 4. Try Unicode mapping\n const unicodeResult = this.tryUnicodeIcon(effectiveIconName);\n if (unicodeResult) {\n this.iconResult = unicodeResult;\n return;\n }\n\n // 5. Fallback to text abbreviation\n this.iconResult = {\n source: 'text',\n content: this.generateTextAbbreviation(effectiveIconName)\n };\n }\n\n private tryThirdPartyIcon(name: string): IconResult | null {\n // This method is deprecated in favor of the icon registry\n // Keeping for backward compatibility only\n \n // Legacy support for old custom: prefix before registry was available\n if (name.startsWith('custom:')) {\n console.warn('Using deprecated custom: prefix. Please use the icon registry instead.');\n const iconName = name.replace('custom:', '');\n const legacyIcons: Record<string, string> = {\n 'heart': `<svg viewBox=\"0 0 24 24\" fill=\"currentColor\">\n <path d=\"M12 21.35l-1.45-1.32C5.4 15.36 2 12.28 2 8.5 2 5.42 4.42 3 7.5 3c1.74 0 3.41.81 4.5 2.09C13.09 3.81 14.76 3 16.5 3 19.58 3 22 5.42 22 8.5c0 3.78-3.4 6.86-8.55 11.54L12 21.35z\"/>\n </svg>`,\n 'rocket': `<svg viewBox=\"0 0 24 24\" fill=\"currentColor\">\n <path d=\"M2.81 14.7l1.68-1.68L7.66 16.2 6.93 17.78 2.81 14.7zm16.55-11.45c-.78-.78-2.05-.78-2.83 0l-1.72 1.72c-.78.78-.78 2.05 0 2.83.78.78 2.05.78 2.83 0l1.72-1.72c.78-.78.78-2.05 0-2.83z\"/>\n </svg>`\n };\n \n if (legacyIcons[iconName]) {\n return {\n source: 'svg',\n content: this.sanitizer.bypassSecurityTrustHtml(legacyIcons[iconName])\n };\n }\n }\n\n return null;\n }\n\n private tryCssIcon(name: string): IconResult | null {\n // Font Awesome pattern\n if (name.startsWith('fa-') || name.startsWith('fas-') || name.startsWith('far-')) {\n return {\n source: 'css',\n content: name.startsWith('fa-') ? name : name.replace('-', ' fa-')\n };\n }\n\n // Material Icons pattern\n if (name.startsWith('mat-') || name.includes('material')) {\n const materialName = name.replace('mat-', '').replace('material-', '');\n return {\n source: 'css',\n content: `material-icons material-icons-${materialName}`\n };\n }\n\n // Check if class exists in document\n if (this.cssClassExists(name)) {\n return {\n source: 'css',\n content: name\n };\n }\n\n return null;\n }\n\n private tryUnicodeIcon(name: string): IconResult | null {\n const unicodeMap: Record<string, string> = {\n 'home': '⌂',\n 'star': '★',\n 'check': '✓',\n 'close': '✕',\n 'warning': '⚠',\n 'info': 'ⓘ',\n 'arrow-left': '←',\n 'arrow-right': '→',\n 'arrow-up': '↑',\n 'arrow-down': '↓',\n 'menu': '☰',\n 'settings': '⚙',\n 'user': '👤',\n 'search': '🔍',\n 'heart': '♥',\n 'plus': '+',\n 'minus': '−',\n };\n\n const unicode = unicodeMap[name.toLowerCase()];\n return unicode ? { source: 'unicode', content: unicode } : null;\n }\n\n private generateTextAbbreviation(name: string): string {\n if (!name) {return '?';}\n \n // Handle hyphenated names (e.g., 'arrow-left' -> 'AL')\n if (name.includes('-')) {\n const parts = name.split('-');\n return parts\n .map(part => part.charAt(0).toUpperCase())\n .slice(0, 2)\n .join('');\n }\n\n // Default to first 2 characters\n return name.substring(0, 2).toUpperCase();\n }\n\n private cssClassExists(_className: string): boolean {\n if (typeof document === 'undefined') {return false;}\n \n // For now, only return true for known CSS icon patterns\n // In real implementation, consumers would override this method\n return false; // Disable generic CSS class checking for now\n }\n}","<div\n class=\"tn-icon\"\n role=\"img\"\n [ngClass]=\"'tn-icon--' + size()\"\n [style.color]=\"color()\"\n [attr.aria-label]=\"effectiveAriaLabel()\"\n [attr.title]=\"tooltip()\">\n \n\n @switch (iconResult.source) {\n <!-- Sprite icons (from generated sprite.svg) -->\n @case ('sprite') {\n <svg\n class=\"tn-icon__sprite\"\n aria-hidden=\"true\">\n <use [attr.href]=\"iconResult.spriteUrl\" />\n </svg>\n }\n\n <!-- SVG content (from third-party libraries or assets) -->\n @case ('svg') {\n <div\n #svgContainer\n class=\"tn-icon__svg\">\n </div>\n }\n\n <!-- CSS class icons (Font Awesome, Material Icons, etc.) -->\n @case ('css') {\n <i\n aria-hidden=\"true\"\n [class]=\"'tn-icon__css ' + iconResult.content\">\n </i>\n }\n\n <!-- Unicode characters -->\n @case ('unicode') {\n <span\n class=\"tn-icon__unicode\"\n aria-hidden=\"true\">{{ iconResult.content }}</span>\n }\n\n <!-- Text abbreviation fallback -->\n @default {\n <span\n class=\"tn-icon__text\"\n aria-hidden=\"true\">{{ iconResult.content }}</span>\n }\n }\n</div>","import { CommonModule } from '@angular/common';\nimport { Component, input, inject, computed, contentChildren, Directive } from '@angular/core';\nimport {\n mdiInformation,\n mdiAlert,\n mdiAlertCircle,\n mdiCheckCircle,\n} from '@mdi/js';\nimport { TnIconRegistryService } from '../icon/icon-registry.service';\nimport { TnIconComponent } from '../icon/icon.component';\n\nexport type TnBannerType = 'info' | 'warning' | 'error' | 'success';\n\n/**\n * Directive to mark an element as a banner action.\n * Apply this to any element that should appear in the banner's action area.\n *\n * @example\n * ```html\n * <tn-banner heading=\"Error\">\n * <button tnBannerAction>Fix Now</button>\n * </tn-banner>\n * ```\n */\n@Directive({\n selector: '[tnBannerAction]',\n standalone: true,\n})\nexport class TnBannerActionDirective {}\n\nconst ICON_MAP = {\n 'info': 'information',\n 'warning': 'alert',\n 'error': 'alert-circle',\n 'success': 'check-circle',\n} as const;\n\n@Component({\n selector: 'tn-banner',\n standalone: true,\n imports: [CommonModule, TnIconComponent],\n templateUrl: './banner.component.html',\n styleUrls: ['./banner.component.scss'],\n})\nexport class TnBannerComponent {\n private iconRegistry = inject(TnIconRegistryService);\n\n /** Query for projected action content */\n private actionContent = contentChildren(TnBannerActionDirective);\n\n /** Signal indicating whether action content has been projected */\n protected hasAction = computed(() => this.actionContent().length > 0);\n\n // Signal-based inputs (modern Angular 19+)\n heading = input.required<string>();\n message = input<string | undefined>(undefined);\n type = input<TnBannerType>('info');\n\n constructor() {\n this.registerMdiIcons();\n }\n\n /**\n * Register all MDI icons used by the banner component\n * Makes component self-contained with zero external configuration\n */\n private registerMdiIcons(): void {\n const mdiIcons: Record<string, string> = {\n 'information': mdiInformation,\n 'alert': mdiAlert,\n 'alert-circle': mdiAlertCircle,\n 'check-circle': mdiCheckCircle,\n };\n\n this.iconRegistry.registerLibrary({\n name: 'mdi',\n resolver: (iconName: string) => {\n const pathData = mdiIcons[iconName];\n if (!pathData) {\n return null;\n }\n return `<svg viewBox=\"0 0 24 24\"><path fill=\"currentColor\" d=\"${pathData}\"/></svg>`;\n }\n });\n }\n\n /**\n * Get the appropriate icon name based on banner type\n */\n iconName = computed(() => {\n return ICON_MAP[this.type()];\n });\n\n /**\n * Get ARIA role based on banner type\n * Error/warning use 'alert' for immediate attention\n * Info/success use 'status' for polite announcements\n */\n ariaRole = computed(() => {\n return this.type() === 'error' || this.type() === 'warning'\n ? 'alert'\n : 'status';\n });\n\n /**\n * Generate CSS classes using BEM methodology\n */\n classes = computed(() => {\n return [\n 'tn-banner',\n `tn-banner--${this.type()}`,\n ];\n });\n}\n","<div\n aria-live=\"polite\"\n [ngClass]=\"classes()\"\n [attr.role]=\"ariaRole()\"\n>\n <div class=\"tn-banner__main\">\n <div class=\"tn-banner__icon\">\n <tn-icon\n library=\"mdi\"\n size=\"md\"\n aria-hidden=\"true\"\n [name]=\"iconName()\"\n />\n </div>\n\n <div class=\"tn-banner__content\">\n <div class=\"tn-banner__heading\">\n {{ heading() }}\n </div>\n\n @if (message()) {\n <div class=\"tn-banner__message\">\n {{ message() }}\n </div>\n }\n </div>\n </div>\n\n @if (hasAction()) {\n <div class=\"tn-banner__action\">\n <ng-content select=\"[tnBannerAction]\" />\n </div>\n }\n</div>\n","import type { BaseHarnessFilters } from '@angular/cdk/testing';\nimport { ComponentHarness, HarnessPredicate } from '@angular/cdk/testing';\n\n/**\n * Harness for interacting with tn-banner in tests.\n * Provides simple text-based querying for existence checks.\n *\n * @example\n * ```typescript\n * // Check for existence\n * const banner = await loader.getHarness(TnBannerHarness);\n *\n * // Find banner containing specific text\n * const errorBanner = await loader.getHarness(\n * TnBannerHarness.with({ textContains: 'network error' })\n * );\n *\n * // Check if banner exists with text\n * const hasBanner = await loader.hasHarness(\n * TnBannerHarness.with({ textContains: /success/i })\n * );\n * ```\n */\nexport class TnBannerHarness extends ComponentHarness {\n /**\n * The selector for the host element of an `TnBannerComponent` instance.\n */\n static hostSelector = 'tn-banner';\n\n /**\n * Gets a `HarnessPredicate` that can be used to search for a banner\n * with specific text content.\n *\n * @param options Options for filtering which banner instances are considered a match.\n * @returns A `HarnessPredicate` configured with the given options.\n *\n * @example\n * ```typescript\n * // Find banner containing specific text\n * const banner = await loader.getHarness(\n * TnBannerHarness.with({ textContains: 'error occurred' })\n * );\n *\n * // Find banner with regex pattern\n * const banner = await loader.getHarness(\n * TnBannerHarness.with({ textContains: /Error:/ })\n * );\n * ```\n */\n static with(options: BannerHarnessFilters = {}) {\n return new HarnessPredicate(TnBannerHarness, options)\n .addOption('textContains', options.textContains, (harness, text) =>\n HarnessPredicate.stringMatches(harness.getText(), text)\n );\n }\n\n /**\n * Gets all text content from the banner (heading + message combined).\n *\n * @returns Promise resolving to the banner's text content, trimmed of whitespace.\n *\n * @example\n * ```typescript\n * const banner = await loader.getHarness(TnBannerHarness);\n * const text = await banner.getText();\n * expect(text).toContain('Success');\n * ```\n */\n async getText(): Promise<string> {\n const host = await this.host();\n return (await host.text()).trim();\n }\n}\n\n/**\n * A set of criteria that can be used to filter a list of `TnBannerHarness` instances.\n */\nexport interface BannerHarnessFilters extends BaseHarnessFilters {\n /** Filters by text content within banner. Supports string or regex matching. */\n textContains?: string | RegExp;\n}\n","import { CommonModule } from '@angular/common';\nimport { Component, input, output, computed } from '@angular/core';\n\n@Component({\n selector: 'tn-button',\n standalone: true,\n imports: [CommonModule],\n templateUrl: './button.component.html',\n styleUrls: ['./button.component.scss'],\n})\nexport class TnButtonComponent {\n size = 'large';\n\n primary = input<boolean>(false);\n color = input<'primary' | 'secondary' | 'warn' | 'default'>('default');\n variant = input<'filled' | 'outline'>('filled');\n backgroundColor = input<string | undefined>(undefined);\n label = input<string>('Button');\n disabled = input<boolean>(false);\n\n onClick = output<MouseEvent>();\n\n classes = computed(() => {\n // Support both primary boolean and color string approaches\n const isPrimary = this.primary() || this.color() === 'primary';\n const isWarn = this.color() === 'warn';\n\n let mode = '';\n if (this.variant() === 'outline') {\n if (isPrimary) {\n mode = 'button-outline-primary';\n } else if (isWarn) {\n mode = 'button-outline-warn';\n } else {\n mode = 'button-outline-default';\n }\n } else {\n if (isPrimary) {\n mode = 'button-primary';\n } else if (isWarn) {\n mode = 'button-warn';\n } else {\n mode = 'button-default';\n }\n }\n\n return ['storybook-button', `storybook-button--${this.size}`, mode];\n });\n}\n","<button\n type=\"button\"\n [ngClass]=\"classes()\"\n [ngStyle]=\"{ 'background-color': backgroundColor() }\"\n [disabled]=\"disabled()\"\n (click)=\"onClick.emit($event)\"\n>\n {{ label() }}\n</button>\n\n","import type { BaseHarnessFilters } from '@angular/cdk/testing';\nimport { ComponentHarness, HarnessPredicate } from '@angular/cdk/testing';\n\n/**\n * Harness for interacting with tn-button in tests.\n * Provides methods for querying button state and simulating user interactions.\n *\n * @example\n * ```typescript\n * // Find and click a button\n * const saveBtn = await loader.getHarness(TnButtonHarness.with({ label: 'Save' }));\n * await saveBtn.click();\n *\n * // Check if button is disabled\n * const submitBtn = await loader.getHarness(TnButtonHarness.with({ label: 'Submit' }));\n * expect(await submitBtn.isDisabled()).toBe(false);\n *\n * // Find button by regex\n * const cancelBtn = await loader.getHarness(TnButtonHarness.with({ label: /Cancel/i }));\n * ```\n */\nexport class TnButtonHarness extends ComponentHarness {\n /**\n * The selector for the host element of a `TnButtonComponent` instance.\n */\n static hostSelector = 'tn-button';\n\n private _button = this.locatorFor('button');\n\n /**\n * Gets a `HarnessPredicate` that can be used to search for a button\n * with specific attributes.\n *\n * @param options Options for filtering which button instances are considered a match.\n * @returns A `HarnessPredicate` configured with the given options.\n *\n * @example\n * ```typescript\n * // Find button by exact label\n * const button = await loader.getHarness(TnButtonHarness.with({ label: 'Save' }));\n *\n * // Find button with regex pattern\n * const button = await loader.getHarness(TnButtonHarness.with({ label: /Delete/i }));\n * ```\n */\n static with(options: ButtonHarnessFilters = {}) {\n return new HarnessPredicate(TnButtonHarness, options)\n .addOption('label', options.label, (harness, label) =>\n HarnessPredicate.stringMatches(harness.getLabel(), label)\n );\n }\n\n /**\n * Gets the button's label text.\n *\n * @returns Promise resolving to the button's text content.\n *\n * @example\n * ```typescript\n * const button = await loader.getHarness(TnButtonHarness);\n * const label = await button.getLabel();\n * expect(label).toBe('Submit');\n * ```\n */\n async getLabel(): Promise<string> {\n const button = await this._button();\n return (await button.text()).trim();\n }\n\n /**\n * Checks whether the button is disabled.\n *\n * @returns Promise resolving to true if the button is disabled.\n *\n * @example\n * ```typescript\n * const button = await loader.getHarness(TnButtonHarness.with({ label: 'Submit' }));\n * expect(await button.isDisabled()).toBe(false);\n * ```\n */\n async isDisabled(): Promise<boolean> {\n const button = await this._button();\n return (await button.getProperty<boolean>('disabled')) ?? false;\n }\n\n /**\n * Clicks the button.\n *\n * @returns Promise that resolves when the click action is complete.\n *\n * @example\n * ```typescript\n * const button = await loader.getHarness(TnButtonHarness.with({ label: 'Save' }));\n * await button.click();\n * ```\n */\n async click(): Promise<void> {\n const button = await this._button();\n return button.click();\n }\n}\n\n/**\n * A set of criteria that can be used to filter a list of `TnButtonHarness` instances.\n */\nexport interface ButtonHarnessFilters extends BaseHarnessFilters {\n /** Filters by button label text. Supports string or regex matching. */\n label?: string | RegExp;\n}\n","import { CommonModule } from '@angular/common';\nimport { Component, input, output, computed } from '@angular/core';\nimport type { IconSize, IconLibraryType } from '../icon/icon.component';\nimport { TnIconComponent } from '../icon/icon.component';\n\n@Component({\n selector: 'tn-icon-button',\n standalone: true,\n imports: [CommonModule, TnIconComponent],\n templateUrl: './icon-button.component.html',\n styleUrls: ['./icon-button.component.scss'],\n})\nexport class TnIconButtonComponent {\n // Button-related inputs\n disabled = input<boolean>(false);\n ariaLabel = input<string | undefined>(undefined);\n\n // Icon-related inputs\n name = input<string>('');\n size = input<IconSize>('md');\n color = input<string | undefined>(undefined);\n tooltip = input<string | undefined>(undefined);\n library = input<IconLibraryType | undefined>(undefined);\n\n onClick = output<MouseEvent>();\n\n classes = computed(() => {\n return ['tn-icon-button'];\n });\n\n effectiveAriaLabel = computed(() => {\n return this.ariaLabel() || this.name() || 'Icon button';\n });\n}\n","<button\n type=\"button\"\n [ngClass]=\"classes()\"\n [disabled]=\"disabled()\"\n [attr.aria-label]=\"effectiveAriaLabel()\"\n [attr.title]=\"tooltip()\"\n (click)=\"onClick.emit($event)\"\n>\n <tn-icon\n [name]=\"name()\"\n [size]=\"size()\"\n [color]=\"color()\"\n [library]=\"library()\"\n [ariaLabel]=\"effectiveAriaLabel()\" />\n</button>\n","export enum InputType {\n Email = 'email',\n Password = 'password',\n PlainText = 'text',\n}\n","import { FocusMonitor, A11yModule } from '@angular/cdk/a11y';\nimport type { ElementRef, AfterViewInit} from '@angular/core';\nimport { Component, viewChild, inject, input, computed, signal, forwardRef } from '@angular/core';\nimport type { ControlValueAccessor} from '@angular/forms';\nimport { FormsModule, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { InputType } from '../enums/input-type.enum';\n\n@Component({\n selector: 'tn-input',\n standalone: true,\n imports: [FormsModule, A11yModule],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => TnInputComponent),\n multi: true\n }\n ],\n templateUrl: './input.component.html',\n styleUrl: './input.component.scss',\n})\nexport class TnInputComponent implements AfterViewInit, ControlValueAccessor {\n inputEl = viewChild.required<ElementRef<HTMLInputElement | HTMLTextAreaElement>>('inputEl');\n\n inputType = input<InputType>(InputType.PlainText);\n placeholder = input<string>('Enter your name');\n testId = input<string | undefined>(undefined);\n disabled = input<boolean>(false);\n multiline = input<boolean>(false);\n rows = input<number>(3);\n\n id = 'tn-input';\n value = '';\n\n // CVA disabled state management\n private formDisabled = signal<boolean>(false);\n isDisabled = computed(() => this.disabled() || this.formDisabled());\n\n private onChange = (_value: string) => {};\n private onTouched = () => {};\n private focusMonitor = inject(FocusMonitor);\n\n ngAfterViewInit() {\n this.focusMonitor.monitor(this.inputEl());\n }\n\n // ControlValueAccessor implementation\n writeValue(value: string): void {\n this.value = value || '';\n }\n\n registerOnChange(fn: (value: string) => void): void {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n\n setDisabledState(isDisabled: boolean): void {\n this.formDisabled.set(isDisabled);\n }\n\n // Component methods\n onValueChange(event: Event): void {\n const target = event.target as HTMLInputElement | HTMLTextAreaElement;\n this.value = target.value;\n this.onChange(this.value);\n }\n\n onBlur(): void {\n this.onTouched();\n }\n}\n","<div class=\"tn-input-container\">\n <!-- Regular input field -->\n @if (!multiline()) {\n <input\n #inputEl\n class=\"tn-input\"\n [id]=\"id\"\n [value]=\"value\"\n [type]=\"inputType()\"\n [attr.placeholder]=\"placeholder()\"\n [attr.data-testid]=\"testId()\"\n [disabled]=\"isDisabled()\"\n (input)=\"onValueChange($event)\"\n (blur)=\"onBlur()\"\n />\n }\n\n <!-- Textarea field -->\n @if (multiline()) {\n <textarea\n #inputEl\n class=\"tn-input tn-textarea\"\n [id]=\"id\"\n [value]=\"value\"\n [attr.placeholder]=\"placeholder()\"\n [attr.data-testid]=\"testId()\"\n [rows]=\"rows()\"\n [disabled]=\"isDisabled()\"\n (input)=\"onValueChange($event)\"\n (blur)=\"onBlur()\"\n ></textarea>\n }\n</div>\n","import { Directive } from '@angular/core';\n\n@Directive({\n selector: 'input[tnInput], textarea[tnInput], div[tnInput]',\n standalone: true,\n host: {\n 'class': 'tn-input-directive'\n }\n})\nexport class TnInputDirective {\n constructor() {}\n}","import { FocusMonitor, A11yModule } from '@angular/cdk/a11y';\nimport { CommonModule } from '@angular/common';\nimport type { ElementRef, AfterViewInit, OnDestroy} from '@angular/core';\nimport { Component, input, output, computed, viewChild, inject } from '@angular/core';\nimport { TnIconComponent } from '../icon/icon.component';\n\nexport type ChipColor = 'primary' | 'secondary' | 'accent';\n\n@Component({\n selector: 'tn-chip',\n standalone: true,\n imports: [CommonModule, A11yModule, TnIconComponent],\n templateUrl: './chip.component.html',\n styleUrls: ['./chip.component.scss'],\n})\nexport class TnChipComponent implements AfterViewInit, OnDestroy {\n chipEl = viewChild.required<ElementRef<HTMLElement>>('chipEl');\n\n label = input<string>('Chip');\n icon = input<string | undefined>(undefined);\n closable = input<boolean>(true);\n disabled = input<boolean>(false);\n color = input<ChipColor>('primary');\n testId = input<string | undefined>(undefined);\n\n onClose = output<void>();\n onClick = output<MouseEvent>();\n\n private focusMonitor = inject(FocusMonitor);\n\n ngAfterViewInit() {\n this.focusMonitor.monitor(this.chipEl());\n }\n\n ngOnDestroy() {\n this.focusMonitor.stopMonitoring(this.chipEl());\n }\n\n classes = computed(() => {\n const classes = ['tn-chip', `tn-chip--${this.color()}`];\n\n if (this.disabled()) {\n classes.push('tn-chip--disabled');\n }\n\n if (this.closable()) {\n classes.push('tn-chip--closable');\n }\n\n return classes;\n });\n\n handleClick(event: MouseEvent): void {\n if (this.disabled()) {\n return;\n }\n this.onClick.emit(event);\n }\n\n handleClose(event: MouseEvent): void {\n event.stopPropagation();\n if (this.disabled()) {\n return;\n }\n this.onClose.emit();\n }\n\n handleKeyDown(event: KeyboardEvent): void {\n if (this.disabled()) {\n return;\n }\n\n if (event.key === 'Enter' || event.key === ' ') {\n event.preventDefault();\n this.onClick.emit(event as unknown as MouseEvent);\n }\n\n if (this.closable() && (event.key === 'Delete' || event.key === 'Backspace')) {\n event.preventDefault();\n this.onClose.emit();\n }\n }\n}","<div\n #chipEl\n role=\"button\"\n [ngClass]=\"classes()\"\n [attr.data-testid]=\"testId()\"\n [attr.aria-label]=\"label()\"\n [attr.aria-disabled]=\"disabled()\"\n [attr.tabindex]=\"disabled() ? -1 : 0\"\n (click)=\"handleClick($event)\"\n (keydown)=\"handleKeyDown($event)\"\n>\n @if (icon()) {\n <tn-icon class=\"tn-chip__icon\" size=\"sm\" [name]=\"icon()!\" />\n }\n <span class=\"tn-chip__label\">{{ label() }}</span>\n @if (closable()) {\n <button\n type=\"button\"\n class=\"tn-chip__close\"\n [attr.aria-label]=\"'Remove ' + label()\"\n [disabled]=\"disabled()\"\n (click)=\"handleClose($event)\"\n >\n <span class=\"tn-chip__close-icon\">×</span>\n </button>\n }\n</div>","import { Overlay, type OverlayRef, type ConnectedPosition } from '@angular/cdk/overlay';\nimport { TemplatePortal } from '@angular/cdk/portal';\nimport { ElementRef, ViewContainerRef, Directive, input, signal, inject } from '@angular/core';\nimport type { TnMenuComponent } from './menu.component';\n\n/**\n * Directive that attaches a menu to any element.\n * Usage: <button [tnMenuTriggerFor]=\"menu\">Open Menu</button>\n */\n@Directive({\n selector: '[tnMenuTriggerFor]',\n standalone: true,\n exportAs: 'tnMenuTrigger',\n host: {\n '(click)': 'onClick()'\n }\n})\nexport class TnMenuTriggerDirective {\n menu = input.required<TnMenuComponent>({ alias: 'tnMenuTriggerFor' });\n tnMenuPosition = input<'above' | 'below' | 'before' | 'after'>('below');\n\n private overlayRef?: OverlayRef;\n private isMenuOpen = signal<boolean>(false);\n\n private elementRef = inject(ElementRef);\n private overlay = inject(Overlay);\n private viewContainerRef = inject(ViewContainerRef);\n\n onClick(): void {\n if (this.isMenuOpen()) {\n this.closeMenu();\n } else {\n this.openMenu();\n }\n }\n\n openMenu(): void {\n const menuComponent = this.menu();\n if (!menuComponent || this.isMenuOpen()) {\n return;\n }\n\n // Get menu template\n const menuTemplate = menuComponent.getMenuTemplate();\n if (!menuTemplate) {\n return;\n }\n\n // Create overlay\n const positionStrategy = this.overlay.position()\n .flexibleConnectedTo(this.elementRef)\n .withPositions(this.getPositions());\n\n this.overlayRef = this.overlay.create({\n positionStrategy,\n scrollStrategy: this.overlay.scrollStrategies.reposition(),\n hasBackdrop: true,\n backdropClass: 'cdk-overlay-transparent-backdrop',\n width: 'auto',\n height: 'auto',\n minWidth: '160px',\n maxWidth: '300px'\n });\n\n // Create portal and attach\n const portal = new TemplatePortal(menuTemplate, this.viewContainerRef);\n this.overlayRef.attach(portal);\n\n this.isMenuOpen.set(true);\n\n // Handle backdrop click\n this.overlayRef.backdropClick().subscribe(() => {\n this.closeMenu();\n });\n\n // Notify menu component\n menuComponent.onMenuOpen();\n }\n\n closeMenu(): void {\n if (this.overlayRef) {\n this.overlayRef.dispose();\n this.overlayRef = undefined;\n this.isMenuOpen.set(false);\n this.menu().onMenuClose();\n }\n }\n\n private getPositions(): ConnectedPosition[] {\n switch (this.tnMenuPosition()) {\n case 'above':\n return [\n { originX: 'start', originY: 'top', overlayX: 'start', overlayY: 'bottom' }\n ];\n case 'below':\n return [\n { originX: 'start', originY: 'bottom', overlayX: 'start', overlayY: 'top' }\n ];\n case 'before':\n return [\n { originX: 'start', originY: 'top', overlayX: 'end', overlayY: 'top' }\n ];\n case 'after':\n return [\n { originX: 'end', originY: 'top', overlayX: 'start', overlayY: 'top' }\n ];\n default:\n return [\n { originX: 'start', originY: 'bottom', overlayX: 'start', overlayY: 'top' }\n ];\n }\n }\n}\n","import { CdkMenu, CdkMenuItem, CdkMenuTrigger } from '@angular/cdk/menu';\nimport { Overlay, type OverlayRef } from '@angular/cdk/overlay';\nimport { TemplatePortal } from '@angular/cdk/portal';\nimport { CommonModule } from '@angular/common';\nimport type { TemplateRef} from '@angular/core';\nimport { Component, input, output, viewChild, computed, inject, ViewContainerRef } from '@angular/core';\nimport { TnIconComponent } from '../icon/icon.component';\n\nexport interface TnMenuItem {\n id: string;\n label: string;\n icon?: string;\n iconLibrary?: 'material' | 'mdi' | 'custom' | 'lucide';\n disabled?: boolean;\n separator?: boolean;\n action?: () => void;\n children?: TnMenuItem[];\n shortcut?: string;\n}\n\n@Component({\n selector: 'tn-menu',\n standalone: true,\n imports: [CommonModule, CdkMenu, CdkMenuItem, CdkMenuTrigger, TnIconComponent],\n templateUrl: './menu.component.html',\n styleUrls: ['./menu.component.scss'],\n})\nexport class TnMenuComponent {\n items = input<TnMenuItem[]>([]);\n contextMenu = input<boolean>(false); // Enable context menu mode (right-click)\n\n menuItemClick = output<TnMenuItem>();\n menuOpen = output<void>();\n menuClose = output<void>();\n\n menuTemplate = viewChild.required<TemplateRef<unknown>>('menuTemplate');\n contextMenuTemplate = viewChild.required<TemplateRef<unknown>>('contextMenuTemplate');\n\n private contextOverlayRef?: OverlayRef;\n\n private overlay = inject(Overlay);\n private viewContainerRef = inject(ViewContainerRef);\n\n onMenuItemClick(item: TnMenuItem): void {\n if (!item.disabled && (!item.children || item.children.length === 0)) {\n this.menuItemClick.emit(item);\n if (item.action) {\n item.action();\n }\n // Close context menu if it's open\n if (this.contextOverlayRef) {\n this.closeContextMenu();\n }\n }\n }\n\n hasChildren = computed(() => (item: TnMenuItem): boolean => {\n return !!(item.children && item.children.length > 0);\n });\n\n onMenuOpen(): void {\n this.menuOpen.emit();\n }\n\n onMenuClose(): void {\n this.menuClose.emit();\n }\n\n /**\n * Get the menu template for use by the trigger directive\n */\n getMenuTemplate(): TemplateRef<unknown> | null {\n if (this.contextMenu()) {\n return this.contextMenuTemplate() || null;\n }\n return this.menuTemplate() || null;\n }\n\n openContextMenuAt(x: number, y: number): void {\n const contextMenuTemplate = this.contextMenuTemplate();\n if (this.contextMenu() && contextMenuTemplate) {\n // Close any existing context menu\n this.closeContextMenu();\n\n // Create overlay at cursor position\n const positionStrategy = this.overlay.position()\n .flexibleConnectedTo({ x, y })\n .withPositions([\n { originX: 'start', originY: 'top', overlayX: 'start', overlayY: 'top' },\n { originX: 'start', originY: 'bottom', overlayX: 'start', overlayY: 'bottom' },\n { originX: 'end', originY: 'top', overlayX: 'end', overlayY: 'top' },\n { originX: 'end', originY: 'bottom', overlayX: 'end', overlayY: 'bottom' }\n ]);\n\n this.contextOverlayRef = this.overlay.create({\n positionStrategy,\n scrollStrategy: this.overlay.scrollStrategies.close(),\n hasBackdrop: true,\n backdropClass: 'cdk-overlay-transparent-backdrop'\n });\n\n // Create portal and attach to overlay\n const portal = new TemplatePortal(contextMenuTemplate, this.viewContainerRef);\n this.contextOverlayRef.attach(portal);\n\n // Handle backdrop click to close menu\n this.contextOverlayRef.backdropClick().subscribe(() => {\n this.closeContextMenu();\n });\n\n this.onMenuOpen();\n }\n }\n\n private closeContextMenu(): void {\n if (this.contextOverlayRef) {\n this.contextOverlayRef.dispose();\n this.contextOverlayRef = undefined;\n this.onMenuClose();\n }\n }\n\n onContextMenu(event: MouseEvent): void {\n if (this.contextMenu()) {\n event.preventDefault();\n event.stopPropagation();\n\n // Open at cursor position\n this.openContextMenuAt(event.clientX, event.clientY);\n }\n }\n\n trackByItemId(index: number, item: TnMenuItem): string {\n return item.id;\n }\n}","<!-- Context menu content slot -->\n@if (contextMenu()) {\n <div class=\"tn-menu-context-content\" (contextmenu)=\"onContextMenu($event)\">\n <ng-content />\n </div>\n}\n\n <!-- Context menu template for overlay -->\n <ng-template #contextMenuTemplate>\n <div class=\"tn-menu\" cdkMenu>\n @for (item of items(); track trackByItemId($index, item)) {\n @if (item.separator) {\n <div\n class=\"tn-menu-separator\"\n role=\"separator\"\n ></div>\n } @else {\n @if (!item.children || item.children.length === 0) {\n <button\n cdkMenuItem\n class=\"tn-menu-item\"\n type=\"button\"\n [disabled]=\"item.disabled\"\n [class.disabled]=\"item.disabled\"\n (click)=\"onMenuItemClick(item)\"\n >\n @if (item.icon) {\n <tn-icon size=\"sm\" class=\"tn-menu-item-icon\" [name]=\"item.icon\" [library]=\"item.iconLibrary\" />\n }\n <span class=\"tn-menu-item-label\">{{ item.label }}</span>\n @if (item.shortcut) {\n <span class=\"tn-menu-item-shortcut\">{{ item.shortcut }}</span>\n }\n </button>\n } @else {\n <button\n cdkMenuItem\n class=\"tn-menu-item tn-menu-item--nested\"\n type=\"button\"\n [cdkMenuTriggerFor]=\"nestedMenu\"\n [disabled]=\"item.disabled\"\n [class.disabled]=\"item.disabled\"\n >\n @if (item.icon) {\n <tn-icon size=\"sm\" class=\"tn-menu-item-icon\" [name]=\"item.icon\" [library]=\"item.iconLibrary\" />\n }\n <span class=\"tn-menu-item-label\">{{ item.label }}</span>\n @if (item.shortcut) {\n <span class=\"tn-menu-item-shortcut\">{{ item.shortcut }}</span>\n }\n <span class=\"tn-menu-item-arrow\">▶</span>\n </button>\n\n <ng-template #nestedMenu>\n <div class=\"tn-menu tn-menu--nested\" cdkMenu>\n @for (nestedItem of item.children; track trackByItemId($index, nestedItem)) {\n @if (nestedItem.separator) {\n <div\n class=\"tn-menu-separator\"\n role=\"separator\"\n ></div>\n } @else {\n @if (!nestedItem.children || nestedItem.children.length === 0) {\n <button\n cdkMenuItem\n class=\"tn-menu-item\"\n type=\"button\"\n [disabled]=\"nestedItem.disabled\"\n [class.disabled]=\"nestedItem.disabled\"\n (click)=\"onMenuItemClick(nestedItem)\"\n >\n @if (nestedItem.icon) {\n <tn-icon size=\"sm\" class=\"tn-menu-item-icon\" [name]=\"nestedItem.icon\" [library]=\"nestedItem.iconLibrary\" />\n }\n <span class=\"tn-menu-item-label\">{{ nestedItem.label }}</span>\n @if (nestedItem.shortcut) {\n <span class=\"tn-menu-item-shortcut\">{{ nestedItem.shortcut }}</span>\n }\n </button>\n } @else {\n <button\n cdkMenuItem\n class=\"tn-menu-item tn-menu-item--nested\"\n type=\"button\"\n [cdkMenuTriggerFor]=\"deepNestedMenu\"\n [disabled]=\"nestedItem.disabled\"\n [class.disabled]=\"nestedItem.disabled\"\n >\n @if (nestedItem.icon) {\n <tn-icon size=\"sm\" class=\"tn-menu-item-icon\" [name]=\"nestedItem.icon\" [library]=\"nestedItem.iconLibrary\" />\n }\n <span class=\"tn-menu-item-label\">{{ nestedItem.label }}</span>\n @if (nestedItem.shortcut) {\n <span class=\"tn-menu-item-shortcut\">{{ nestedItem.shortcut }}</span>\n }\n <span class=\"tn-menu-item-arrow\">▶</span>\n </button>\n\n <ng-template #deepNestedMenu>\n <div class=\"tn-menu tn-menu--nested\" cdkMenu>\n @for (deepNestedItem of nestedItem.children; track trackByItemId($index, deepNestedItem)) {\n @if (deepNestedItem.separator) {\n <div\n class=\"tn-menu-separator\"\n role=\"separator\"\n ></div>\n } @else {\n <button\n cdkMenuItem\n class=\"tn-menu-item\"\n type=\"button\"\n [disabled]=\"deepNestedItem.disabled\"\n [class.disabled]=\"deepNestedItem.disabled\"\n (click)=\"onMenuItemClick(deepNestedItem)\"\n >\n @if (deepNestedItem.icon) {\n <tn-icon size=\"sm\" class=\"tn-menu-item-icon\" [name]=\"deepNestedItem.icon\" [library]=\"deepNestedItem.iconLibrary\" />\n }\n <span class=\"tn-menu-item-label\">{{ deepNestedItem.label }}</span>\n @if (deepNestedItem.shortcut) {\n <span class=\"tn-menu-item-shortcut\">{{ deepNestedItem.shortcut }}</span>\n }\n </button>\n }\n }\n </div>\n </ng-template>\n }\n }\n }\n </div>\n </ng-template>\n }\n }\n }\n </div>\n </ng-template>\n\n <!-- Regular menu template -->\n <ng-template #menuTemplate>\n <div class=\"tn-menu\" cdkMenu>\n @for (item of items(); track trackByItemId($index, item)) {\n @if (item.separator) {\n <div\n class=\"tn-menu-separator\"\n role=\"separator\"\n ></div>\n } @else {\n @if (!item.children || item.children.length === 0) {\n <button\n cdkMenuItem\n class=\"tn-menu-item\"\n type=\"button\"\n [disabled]=\"item.disabled\"\n [class.disabled]=\"item.disabled\"\n (click)=\"onMenuItemClick(item)\"\n >\n @if (item.icon) {\n <tn-icon size=\"sm\" class=\"tn-menu-item-icon\" [name]=\"item.icon\" [library]=\"item.iconLibrary\" />\n }\n <span class=\"tn-menu-item-label\">{{ item.label }}</span>\n @if (item.shortcut) {\n <span class=\"tn-menu-item-shortcut\">{{ item.shortcut }}</span>\n }\n </button>\n } @else {\n <button\n cdkMenuItem\n class=\"tn-menu-item tn-menu-item--nested\"\n type=\"button\"\n [cdkMenuTriggerFor]=\"nestedMenu\"\n [disabled]=\"item.disabled\"\n [class.disabled]=\"item.disabled\"\n >\n @if (item.icon) {\n <tn-icon size=\"sm\" class=\"tn-menu-item-icon\" [name]=\"item.icon\" [library]=\"item.iconLibrary\" />\n }\n <span class=\"tn-menu-item-label\">{{ item.label }}</span>\n @if (item.shortcut) {\n <span class=\"tn-menu-item-shortcut\">{{ item.shortcut }}</span>\n }\n <span class=\"tn-menu-item-arrow\">▶</span>\n </button>\n\n <ng-template #nestedMenu>\n <div class=\"tn-menu tn-menu--nested\" cdkMenu>\n @for (nestedItem of item.children; track trackByItemId($index, nestedItem)) {\n @if (nestedItem.separator) {\n <div\n class=\"tn-menu-separator\"\n role=\"separator\"\n ></div>\n } @else {\n @if (!nestedItem.children || nestedItem.children.length === 0) {\n <button\n cdkMenuItem\n class=\"tn-menu-item\"\n type=\"button\"\n [disabled]=\"nestedItem.disabled\"\n [class.disabled]=\"nestedItem.disabled\"\n (click)=\"onMenuItemClick(nestedItem)\"\n >\n @if (nestedItem.icon) {\n <tn-icon size=\"sm\" class=\"tn-menu-item-icon\" [name]=\"nestedItem.icon\" [library]=\"nestedItem.iconLibrary\" />\n }\n <span class=\"tn-menu-item-label\">{{ nestedItem.label }}</span>\n @if (nestedItem.shortcut) {\n <span class=\"tn-menu-item-shortcut\">{{ nestedItem.shortcut }}</span>\n }\n </button>\n } @else {\n <button\n cdkMenuItem\n class=\"tn-menu-item tn-menu-item--nested\"\n type=\"button\"\n [cdkMenuTriggerFor]=\"deepNestedMenu\"\n [disabled]=\"nestedItem.disabled\"\n [class.disabled]=\"nestedItem.disabled\"\n >\n @if (nestedItem.icon) {\n <tn-icon size=\"sm\" class=\"tn-menu-item-icon\" [name]=\"nestedItem.icon\" [library]=\"nestedItem.iconLibrary\" />\n }\n <span class=\"tn-menu-item-label\">{{ nestedItem.label }}</span>\n @if (nestedItem.shortcut) {\n <span class=\"tn-menu-item-shortcut\">{{ nestedItem.shortcut }}</span>\n }\n <span class=\"tn-menu-item-arrow\">▶</span>\n </button>\n\n <ng-template #deepNestedMenu>\n <div class=\"tn-menu tn-menu--nested\" cdkMenu>\n @for (deepNestedItem of nestedItem.children; track trackByItemId($index, deepNestedItem)) {\n @if (deepNestedItem.separator) {\n <div\n class=\"tn-menu-separator\"\n role=\"separator\"\n ></div>\n } @else {\n <button\n cdkMenuItem\n class=\"tn-menu-item\"\n type=\"button\"\n [disabled]=\"deepNestedItem.disabled\"\n [class.disabled]=\"deepNestedItem.disabled\"\n (click)=\"onMenuItemClick(deepNestedItem)\"\n >\n @if (deepNestedItem.icon) {\n <tn-icon size=\"sm\" class=\"tn-menu-item-icon\" [name]=\"deepNestedItem.icon\" [library]=\"deepNestedItem.iconLibrary\" />\n }\n <span class=\"tn-menu-item-label\">{{ deepNestedItem.label }}</span>\n @if (deepNestedItem.shortcut) {\n <span class=\"tn-menu-item-shortcut\">{{ deepNestedItem.shortcut }}</span>\n }\n </button>\n }\n }\n </div>\n </ng-template>\n }\n }\n }\n </div>\n </ng-template>\n }\n }\n }\n </div>\n </ng-template>","import { FocusMonitor, A11yModule } from '@angular/cdk/a11y';\nimport { CommonModule } from '@angular/common';\nimport type { ElementRef, AfterViewInit, OnDestroy} from '@angular/core';\nimport { Component, viewChild, inject, input, output, computed, signal, forwardRef } from '@angular/core';\nimport type { ControlValueAccessor} from '@angular/forms';\nimport { FormsModule, NG_VALUE_ACCESSOR } from '@angular/forms';\n\nexport type SlideToggleColor = 'primary' | 'accent' | 'warn';\n\n@Component({\n selector: 'tn-slide-toggle',\n standalone: true,\n imports: [CommonModule, FormsModule, A11yModule],\n templateUrl: './slide-toggle.component.html',\n styleUrl: './slide-toggle.component.scss',\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => TnSlideToggleComponent),\n multi: true\n }\n ]\n})\nexport class TnSlideToggleComponent implements AfterViewInit, OnDestroy, ControlValueAccessor {\n toggleEl = viewChild.required<ElementRef<HTMLInputElement>>('toggleEl');\n\n labelPosition = input<'before' | 'after'>('after');\n label = input<string | undefined>(undefined);\n disabled = input<boolean>(false);\n required = input<boolean>(false);\n color = input<SlideToggleColor>('primary');\n testId = input<string | undefined>(undefined);\n ariaLabel = input<string | undefined>(undefined);\n ariaLabelledby = input<string | undefined>(undefined);\n checked = input<boolean>(false);\n\n change = output<boolean>();\n toggleChange = output<boolean>();\n\n id = `tn-slide-toggle-${Math.random().toString(36).substr(2, 9)}`;\n\n // Internal state for CVA\n private internalChecked = signal<boolean>(false);\n\n // CVA disabled state management\n private formDisabled = signal<boolean>(false);\n isDisabled = computed(() => this.disabled() || this.formDisabled());\n\n private focusMonitor = inject(FocusMonitor);\n private onChange = (_: boolean) => {};\n private onTouched = () => {};\n\n ngAfterViewInit() {\n const toggleEl = this.toggleEl();\n if (toggleEl) {\n this.focusMonitor.monitor(toggleEl)\n .subscribe(() => {\n // Focus monitoring for accessibility\n });\n }\n }\n\n ngOnDestroy() {\n const toggleEl = this.toggleEl();\n if (toggleEl) {\n this.focusMonitor.stopMonitoring(toggleEl);\n }\n }\n\n // Computed for effective checked state (input or CVA-controlled)\n effectiveChecked = computed(() => this.internalChecked() || this.checked());\n\n // ControlValueAccessor implementation\n writeValue(value: boolean): void {\n this.internalChecked.set(value !== null && value !== undefined ? value : false);\n }\n\n registerOnChange(fn: (value: boolean) => void): void {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n\n setDisabledState(isDisabled: boolean): void {\n this.formDisabled.set(isDisabled);\n }\n\n onToggleChange(event: Event): void {\n event.stopPropagation();\n\n const target = event.target as HTMLInputElement;\n const checked = target.checked;\n this.internalChecked.set(checked);\n\n this.onChange(checked);\n this.onTouched();\n this.change.emit(checked);\n this.toggleChange.emit(checked);\n }\n\n onLabelClick(): void {\n const toggleEl = this.toggleEl();\n if (!this.isDisabled() && toggleEl) {\n toggleEl.nativeElement.click();\n }\n }\n\n classes = computed(() => {\n const classes = ['tn-slide-toggle'];\n\n if (this.isDisabled()) {\n classes.push('tn-slide-toggle--disabled');\n }\n\n if (this.effectiveChecked()) {\n classes.push('tn-slide-toggle--checked');\n }\n\n classes.push(`tn-slide-toggle--${this.color()}`);\n classes.push(`tn-slide-toggle--label-${this.labelPosition()}`);\n\n return classes;\n });\n\n effectiveAriaLabel = computed(() => {\n return this.ariaLabel() || (this.label() ? undefined : 'Toggle');\n });\n}","<div [ngClass]=\"classes()\" [attr.data-testid]=\"testId()\">\n <label class=\"tn-slide-toggle__label\" [for]=\"id\">\n\n <!-- Label before toggle -->\n @if (label() && labelPosition() === 'before') {\n <span\n class=\"tn-slide-toggle__label-text tn-slide-toggle__label-text--before\"\n tabindex=\"0\"\n role=\"button\"\n (click)=\"onLabelClick()\"\n (keydown.enter)=\"onLabelClick()\"\n (keydown.space)=\"onLabelClick()\">\n {{ label() }}\n </span>\n }\n\n <!-- Toggle track and thumb -->\n <div class=\"tn-slide-toggle__bar\">\n <input\n #toggleEl\n type=\"checkbox\"\n class=\"tn-slide-toggle__input\"\n [id]=\"id\"\n [checked]=\"effectiveChecked()\"\n [disabled]=\"isDisabled()\"\n [required]=\"required()\"\n [attr.aria-label]=\"effectiveAriaLabel()\"\n [attr.aria-labelledby]=\"ariaLabelledby()\"\n (change)=\"onToggleChange($event)\"\n />\n\n <div class=\"tn-slide-toggle__track\">\n <div class=\"tn-slide-toggle__track-fill\"></div>\n </div>\n\n <div class=\"tn-slide-toggle__thumb-container\">\n <div class=\"tn-slide-toggle__thumb\">\n <div class=\"tn-slide-toggle__ripple\"></div>\n <!-- State icon -->\n <div class=\"tn-slide-toggle__icon\">\n @if (effectiveChecked()) {\n <svg\n class=\"tn-slide-toggle__check-icon\"\n viewBox=\"0 0 24 24\"\n width=\"16\"\n height=\"16\">\n <path d=\"M9 16.17L4.83 12l-1.42 1.41L9 19 21 7l-1.41-1.41L9 16.17z\" fill=\"currentColor\"/>\n </svg>\n }\n @if (!effectiveChecked()) {\n <svg\n class=\"tn-slide-toggle__minus-icon\"\n viewBox=\"0 0 24 24\"\n width=\"16\"\n height=\"16\">\n <path d=\"M19 13H5v-2h14v2z\" fill=\"currentColor\"/>\n </svg>\n }\n </div>\n </div>\n </div>\n </div>\n\n <!-- Label after toggle -->\n @if (label() && labelPosition() === 'after') {\n <span\n class=\"tn-slide-toggle__label-text tn-slide-toggle__label-text--after\"\n tabindex=\"0\"\n role=\"button\"\n (click)=\"onLabelClick()\"\n (keydown.enter)=\"onLabelClick()\"\n (keydown.space)=\"onLabelClick()\">\n {{ label() }}\n </span>\n }\n\n </label>\n</div>","import { CommonModule } from '@angular/common';\nimport { Component, input, computed, inject } from '@angular/core';\nimport { mdiDotsVertical } from '@mdi/js';\nimport type {\n TnCardAction,\n TnCardControl,\n TnCardHeaderStatus,\n TnCardFooterLink\n} from './card.interfaces';\nimport { TnButtonComponent } from '../button/button.component';\nimport { TnIconRegistryService } from '../icon/icon-registry.service';\nimport { TnIconComponent } from '../icon/icon.component';\nimport { TnIconButtonComponent } from '../icon-button/icon-button.component';\nimport { TnMenuTriggerDirective } from '../menu/menu-trigger.directive';\nimport type { TnMenuItem } from '../menu/menu.component';\nimport { TnMenuComponent } from '../menu/menu.component';\nimport { TnSlideToggleComponent } from '../slide-toggle/slide-toggle.component';\n\n@Component({\n selector: 'tn-card',\n standalone: true,\n imports: [CommonModule, TnButtonComponent, TnIconComponent, TnIconButtonComponent, TnSlideToggleComponent, TnMenuComponent, TnMenuTriggerDirective],\n templateUrl: './card.component.html',\n styleUrls: ['./card.component.scss'],\n})\nexport class TnCardComponent {\n private iconRegistry = inject(TnIconRegistryService);\n\n constructor() {\n // Register MDI icons used by this component\n this.registerMdiIcons();\n }\n\n title = input<string | undefined>(undefined);\n titleLink = input<string | undefined>(undefined); // Makes title navigable\n elevation = input<'none' | 'low' | 'medium' | 'high'>('medium');\n padding = input<'small' | 'medium' | 'large'>('medium');\n padContent = input<boolean>(true);\n bordered = input<boolean>(false);\n background = input<boolean>(true);\n\n // Header elements (top-right) - Always render in header\n headerStatus = input<TnCardHeaderStatus | undefined>(undefined);\n headerControl = input<TnCardControl | undefined>(undefined); // Slide toggle - ALWAYS in header\n headerMenu = input<TnMenuItem[] | undefined>(undefined);\n\n // Footer elements (bottom-right) - Always render in footer\n primaryAction = input<TnCardAction | undefined>(undefined);\n secondaryAction = input<TnCardAction | undefined>(undefined);\n footerLink = input<TnCardFooterLink | undefined>(undefined);\n\n /**\n * Register MDI icon library with all icons used by the card component\n * This makes the component self-contained with zero configuration required\n */\n private registerMdiIcons(): void {\n const mdiIcons: Record<string, string> = {\n 'dots-vertical': mdiDotsVertical,\n };\n\n // Register MDI library with resolver for card icons\n this.iconRegistry.registerLibrary({\n name: 'mdi',\n resolver: (iconName: string) => {\n const pathData = mdiIcons[iconName];\n if (!pathData) {\n return null;\n }\n return `<svg viewBox=\"0 0 24 24\"><path fill=\"currentColor\" d=\"${pathData}\"/></svg>`;\n }\n });\n }\n\n classes = computed(() => {\n const elevationClass = `tn-card--elevation-${this.elevation()}`;\n const paddingClass = `tn-card--padding-${this.padding()}`;\n const contentPaddingClass = this.padContent() ? `tn-card--content-padding-${this.padding()}` : 'tn-card--content-padding-none';\n const borderedClass = this.bordered() ? 'tn-card--bordered' : '';\n const backgroundClass = this.background() ? 'tn-card--background' : '';\n\n return ['tn-card', elevationClass, paddingClass, contentPaddingClass, borderedClass, backgroundClass].filter(Boolean);\n });\n\n hasHeader = computed(() => {\n return !!(this.title() || this.headerStatus() || this.headerControl() || this.headerMenu());\n });\n\n hasFooter = computed(() => {\n return !!(this.primaryAction() || this.secondaryAction() || this.footerLink());\n });\n\n onTitleClick(): void {\n const link = this.titleLink();\n if (link) {\n window.location.href = link;\n }\n }\n\n onControlChange(checked: boolean): void {\n const control = this.headerControl();\n if (control) {\n control.handler(checked);\n }\n }\n\n onHeaderMenuItemClick(_item: TnMenuItem): void {\n // Handler is called automatically via TnMenuItem.action\n }\n\n getStatusClass(type?: string): string {\n return type ? `tn-card__status--${type}` : 'tn-card__status--neutral';\n }\n}","<div [ngClass]=\"classes()\">\n <!-- Header section -->\n @if (hasHeader()) {\n <div class=\"tn-card__header\">\n <div class=\"tn-card__header-left\">\n @if (title()) {\n <h3\n class=\"tn-card__title\"\n [class.tn-card__title--link]=\"titleLink()\"\n [attr.tabindex]=\"titleLink() ? 0 : null\"\n [attr.role]=\"titleLink() ? 'button' : null\"\n (click)=\"onTitleClick()\"\n (keydown.enter)=\"onTitleClick()\"\n (keydown.space)=\"onTitleClick()\">\n {{ title() }}\n </h3>\n }\n </div>\n\n <div class=\"tn-card__header-right\">\n <!-- Header Status -->\n @if (headerStatus(); as status) {\n <div\n class=\"tn-card__status\"\n [ngClass]=\"getStatusClass(status?.type)\">\n {{ status.label }}\n </div>\n }\n\n <!-- Header Control (Slide Toggle) -->\n @if (headerControl(); as control) {\n <div class=\"tn-card__control\">\n <tn-slide-toggle\n [label]=\"control.label\"\n [checked]=\"control.checked\"\n [disabled]=\"control.disabled || false\"\n (change)=\"onControlChange($event)\" />\n </div>\n }\n\n <!-- Header Menu -->\n @if (headerMenu(); as menu) {\n @if (menu.length) {\n <div class=\"tn-card__menu\">\n <tn-icon-button\n name=\"dots-vertical\"\n library=\"mdi\"\n size=\"md\"\n ariaLabel=\"Card menu\"\n [tnMenuTriggerFor]=\"cardMenu\" />\n <tn-menu\n #cardMenu\n [items]=\"menu\"\n (menuItemClick)=\"onHeaderMenuItemClick($event)\" />\n </div>\n }\n }\n </div>\n </div>\n }\n\n <!-- Content section -->\n <div class=\"tn-card__content\">\n <ng-content />\n </div>\n\n <!-- Footer section -->\n @if (hasFooter()) {\n <div class=\"tn-card__footer\">\n <div class=\"tn-card__footer-left\">\n @if (footerLink(); as link) {\n <button\n type=\"button\"\n class=\"tn-card__footer-link\"\n (click)=\"link.handler()\">\n {{ link.label }}\n </button>\n }\n </div>\n\n <div class=\"tn-card__footer-right\">\n @if (secondaryAction(); as action) {\n <tn-button\n variant=\"outline\"\n color=\"default\"\n [label]=\"action.label\"\n [disabled]=\"action.disabled || false\"\n (click)=\"action.handler()\" />\n }\n\n @if (primaryAction(); as action) {\n <tn-button\n variant=\"filled\"\n color=\"primary\"\n [label]=\"action.label\"\n [disabled]=\"action.disabled || false\"\n (click)=\"action.handler()\" />\n }\n </div>\n </div>\n }\n</div>","import { trigger, state, style, transition, animate } from '@angular/animations';\nimport { CommonModule } from '@angular/common';\nimport { Component, input, output, computed, signal } from '@angular/core';\n\nconst expandCollapseAnimation = trigger('expandCollapse', [\n state('collapsed', style({\n height: '0px',\n opacity: 0,\n overflow: 'hidden',\n display: 'none'\n })),\n state('expanded', style({\n height: '*',\n opacity: 1,\n overflow: 'visible',\n display: 'block'\n })),\n transition('collapsed => expanded', [\n style({ display: 'block', height: '0px', opacity: 0 }),\n animate('300ms cubic-bezier(0.4, 0, 0.2, 1)', style({ height: '*', opacity: 1 }))\n ]),\n transition('expanded => collapsed', [\n animate('300ms cubic-bezier(0.4, 0, 0.2, 1)', style({ height: '0px', opacity: 0 })),\n style({ display: 'none' })\n ])\n]);\n\n@Component({\n selector: 'tn-expansion-panel',\n standalone: true,\n imports: [CommonModule],\n templateUrl: './expansion-panel.component.html',\n styleUrls: ['./expansion-panel.component.scss'],\n animations: [expandCollapseAnimation]\n})\nexport class TnExpansionPanelComponent {\n title = input<string | undefined>(undefined);\n elevation = input<'none' | 'low' | 'medium' | 'high'>('medium');\n padding = input<'small' | 'medium' | 'large'>('medium');\n bordered = input<boolean>(false);\n background = input<boolean>(true);\n expanded = input<boolean>(false);\n disabled = input<boolean>(false);\n titleStyle = input<'header' | 'body' | 'link'>('header');\n\n expandedChange = output<boolean>();\n toggleEvent = output<void>();\n\n // Internal state for tracking expansion (for uncontrolled usage)\n private internalExpanded = signal<boolean | null>(null);\n\n // Effective expanded state (prefers internal state if set, otherwise uses input)\n effectiveExpanded = computed(() => {\n const internal = this.internalExpanded();\n return internal !== null ? internal : this.expanded();\n });\n\n readonly contentId = `tn-expansion-panel-content-${Math.random().toString(36).substr(2, 9)}`;\n\n toggle(): void {\n if (this.disabled()) {\n return;\n }\n\n const newExpanded = !this.effectiveExpanded();\n this.internalExpanded.set(newExpanded);\n this.expandedChange.emit(newExpanded);\n this.toggleEvent.emit();\n }\n\n classes = computed(() => {\n const elevationClass = `tn-expansion-panel--elevation-${this.elevation()}`;\n const paddingClass = `tn-expansion-panel--padding-${this.padding()}`;\n const borderedClass = this.bordered() ? 'tn-expansion-panel--bordered' : '';\n const backgroundClass = this.background() ? 'tn-expansion-panel--background' : '';\n const expandedClass = this.effectiveExpanded() ? 'tn-expansion-panel--expanded' : '';\n const disabledClass = this.disabled() ? 'tn-expansion-panel--disabled' : '';\n const titleStyleClass = `tn-expansion-panel--title-${this.titleStyle()}`;\n\n return [\n 'tn-expansion-panel',\n elevationClass,\n paddingClass,\n borderedClass,\n backgroundClass,\n expandedClass,\n disabledClass,\n titleStyleClass\n ].filter(Boolean);\n });\n}","<div [ngClass]=\"classes()\">\n <button class=\"tn-expansion-panel__header\"\n [disabled]=\"disabled()\"\n [attr.aria-expanded]=\"effectiveExpanded()\"\n [attr.aria-controls]=\"contentId\"\n [attr.aria-disabled]=\"disabled()\"\n (click)=\"toggle()\">\n @if (title()) {\n <div class=\"tn-expansion-panel__title\">\n {{ title() }}\n </div>\n }\n <ng-content select=\"[slot=title]\" />\n\n <div class=\"tn-expansion-panel__indicator\">\n <svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n <path d=\"m6 9 6 6 6-6\"/>\n </svg>\n </div>\n </button>\n\n <div class=\"tn-expansion-panel__content\"\n [id]=\"contentId\"\n [attr.aria-hidden]=\"!effectiveExpanded()\"\n [@expandCollapse]=\"effectiveExpanded() ? 'expanded' : 'collapsed'\">\n <ng-content />\n </div>\n</div>","import { FocusMonitor, A11yModule } from '@angular/cdk/a11y';\nimport { CommonModule } from '@angular/common';\nimport type { ElementRef, AfterViewInit, OnDestroy} from '@angular/core';\nimport { Component, viewChild, inject, input, output, computed, signal, forwardRef } from '@angular/core';\nimport type { ControlValueAccessor} from '@angular/forms';\nimport { FormsModule, NG_VALUE_ACCESSOR } from '@angular/forms';\n\n@Component({\n selector: 'tn-checkbox',\n standalone: true,\n imports: [CommonModule, FormsModule, A11yModule],\n templateUrl: './checkbox.component.html',\n styleUrl: './checkbox.component.scss',\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => TnCheckboxComponent),\n multi: true\n }\n ]\n})\nexport class TnCheckboxComponent implements AfterViewInit, OnDestroy, ControlValueAccessor {\n checkboxEl = viewChild.required<ElementRef<HTMLInputElement>>('checkboxEl');\n\n label = input<string>('Checkbox');\n hideLabel = input<boolean>(false);\n disabled = input<boolean>(false);\n required = input<boolean>(false);\n indeterminate = input<boolean>(false);\n testId = input<string | undefined>(undefined);\n error = input<string | null>(null);\n checked = input<boolean>(false);\n\n change = output<boolean>();\n\n id = `tn-checkbox-${Math.random().toString(36).substr(2, 9)}`;\n\n // Internal state for CVA\n private internalChecked = signal<boolean>(false);\n\n // CVA disabled state management\n private formDisabled = signal<boolean>(false);\n isDisabled = computed(() => this.disabled() || this.formDisabled());\n\n private focusMonitor = inject(FocusMonitor);\n private onChange = (_: boolean) => {};\n private onTouched = () => {};\n\n ngAfterViewInit() {\n const checkboxEl = this.checkboxEl();\n if (checkboxEl) {\n this.focusMonitor.monitor(checkboxEl)\n .subscribe(() => {\n // Focus monitoring for accessibility\n });\n }\n }\n\n ngOnDestroy() {\n const checkboxEl = this.checkboxEl();\n if (checkboxEl) {\n this.focusMonitor.stopMonitoring(checkboxEl);\n }\n }\n\n // Computed for effective checked state (input or CVA-controlled)\n effectiveChecked = computed(() => this.internalChecked() || this.checked());\n\n // ControlValueAccessor implementation\n writeValue(value: boolean): void {\n this.internalChecked.set(value !== null && value !== undefined ? value : false);\n }\n\n registerOnChange(fn: (value: boolean) => void): void {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n\n setDisabledState(isDisabled: boolean): void {\n this.formDisabled.set(isDisabled);\n }\n\n onCheckboxChange(event: Event): void {\n const target = event.target as HTMLInputElement;\n const checked = target.checked;\n this.internalChecked.set(checked);\n this.onChange(checked);\n this.onTouched();\n this.change.emit(checked);\n }\n\n classes = computed(() => {\n const classes = ['tn-checkbox'];\n\n if (this.isDisabled()) {\n classes.push('tn-checkbox--disabled');\n }\n\n if (this.error()) {\n classes.push('tn-checkbox--error');\n }\n\n if (this.indeterminate()) {\n classes.push('tn-checkbox--indeterminate');\n }\n\n return classes;\n });\n}","<div [ngClass]=\"classes()\">\n <label class=\"tn-checkbox__label\" [for]=\"id\">\n <input\n #checkboxEl\n type=\"checkbox\"\n class=\"tn-checkbox__input\"\n [id]=\"id\"\n [checked]=\"effectiveChecked()\"\n [disabled]=\"isDisabled()\"\n [required]=\"required()\"\n [indeterminate]=\"indeterminate()\"\n [attr.data-testid]=\"testId()\"\n [attr.aria-describedby]=\"error() ? id + '-error' : null\"\n [attr.aria-invalid]=\"error() ? 'true' : null\"\n (change)=\"onCheckboxChange($event)\"\n />\n <span class=\"tn-checkbox__checkmark\"></span>\n @if (!hideLabel()) {\n <span class=\"tn-checkbox__text\">{{ label() }}</span>\n }\n </label>\n\n @if (error()) {\n <div\n class=\"tn-checkbox__error\"\n role=\"alert\"\n aria-live=\"polite\"\n [id]=\"id + '-error'\"\n >\n {{ error() }}\n </div>\n }\n</div>","import { FocusMonitor, A11yModule } from '@angular/cdk/a11y';\nimport { CommonModule } from '@angular/common';\nimport type { ElementRef, AfterViewInit, OnDestroy} from '@angular/core';\nimport { Component, viewChild, inject, input, output, computed, signal, forwardRef } from '@angular/core';\nimport type { ControlValueAccessor} from '@angular/forms';\nimport { FormsModule, NG_VALUE_ACCESSOR } from '@angular/forms';\n\n@Component({\n selector: 'tn-radio',\n standalone: true,\n imports: [CommonModule, FormsModule, A11yModule],\n templateUrl: './radio.component.html',\n styleUrl: './radio.component.scss',\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => TnRadioComponent),\n multi: true\n }\n ]\n})\nexport class TnRadioComponent implements AfterViewInit, OnDestroy, ControlValueAccessor {\n radioEl = viewChild.required<ElementRef<HTMLInputElement>>('radioEl');\n\n label = input<string>('Radio');\n value = input<unknown>('');\n name = input<string | undefined>(undefined);\n disabled = input<boolean>(false);\n required = input<boolean>(false);\n testId = input<string | undefined>(undefined);\n error = input<string | null>(null);\n\n change = output<unknown>();\n\n id = `tn-radio-${Math.random().toString(36).substr(2, 9)}`;\n checked = false;\n\n // CVA disabled state management\n private formDisabled = signal<boolean>(false);\n isDisabled = computed(() => this.disabled() || this.formDisabled());\n\n private focusMonitor = inject(FocusMonitor);\n private onChange = (_: unknown) => {};\n private onTouched = () => {};\n\n ngAfterViewInit() {\n const radioEl = this.radioEl();\n if (radioEl) {\n this.focusMonitor.monitor(radioEl)\n .subscribe(() => {\n // Focus monitoring for accessibility\n });\n }\n }\n\n ngOnDestroy() {\n const radioEl = this.radioEl();\n if (radioEl) {\n this.focusMonitor.stopMonitoring(radioEl);\n }\n }\n\n // ControlValueAccessor implementation\n writeValue(value: unknown): void {\n this.checked = value !== null && value !== undefined && value === this.value();\n }\n\n registerOnChange(fn: (value: unknown) => void): void {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n\n setDisabledState(isDisabled: boolean): void {\n this.formDisabled.set(isDisabled);\n }\n\n onRadioChange(event: Event): void {\n const target = event.target as HTMLInputElement;\n this.checked = target.checked;\n if (target.checked) {\n this.onChange(this.value());\n this.onTouched();\n this.change.emit(this.value());\n }\n }\n\n classes = computed(() => {\n const classes = ['tn-radio'];\n\n if (this.isDisabled()) {\n classes.push('tn-radio--disabled');\n }\n\n if (this.error()) {\n classes.push('tn-radio--error');\n }\n\n return classes;\n });\n}","<div [ngClass]=\"classes()\">\n <label class=\"tn-radio__label\" [for]=\"id\">\n <input\n #radioEl\n type=\"radio\"\n class=\"tn-radio__input\"\n [id]=\"id\"\n [name]=\"name()\"\n [value]=\"value()\"\n [checked]=\"checked\"\n [disabled]=\"isDisabled()\"\n [required]=\"required()\"\n [attr.data-testid]=\"testId()\"\n [attr.aria-describedby]=\"error() ? id + '-error' : null\"\n [attr.aria-invalid]=\"error() ? 'true' : null\"\n (change)=\"onRadioChange($event)\"\n />\n <span class=\"tn-radio__checkmark\"></span>\n <span class=\"tn-radio__text\">{{ label() }}</span>\n </label>\n\n @if (error()) {\n <div\n class=\"tn-radio__error\"\n role=\"alert\"\n aria-live=\"polite\"\n [id]=\"id + '-error'\"\n >\n {{ error() }}\n </div>\n }\n</div>","import { A11yModule } from '@angular/cdk/a11y';\nimport { CommonModule } from '@angular/common';\nimport type { TemplateRef, AfterContentInit} from '@angular/core';\nimport { Component, input, output, ElementRef, inject, contentChild, computed, signal } from '@angular/core';\n\n@Component({\n selector: 'tn-tab',\n standalone: true,\n imports: [CommonModule, A11yModule],\n templateUrl: './tab.component.html',\n styleUrl: './tab.component.scss'\n})\nexport class TnTabComponent implements AfterContentInit {\n label = input<string>('');\n disabled = input<boolean>(false);\n icon = input<string | undefined>(undefined);\n iconTemplate = input<TemplateRef<unknown> | undefined>(undefined);\n testId = input<string | undefined>(undefined);\n\n selected = output<void>();\n\n iconContent = contentChild<TemplateRef<unknown>>('iconContent');\n\n // Internal properties set by parent TnTabsComponent (public signals for parent control)\n index = signal<number>(0);\n isActive = signal<boolean>(false);\n tabsComponent?: { onKeydown: (event: KeyboardEvent, index: number) => void }; // Will be set by parent\n\n elementRef = inject(ElementRef<HTMLElement>);\n\n protected hasIconContent = signal<boolean>(false);\n\n ngAfterContentInit() {\n this.hasIconContent.set(!!this.iconContent());\n }\n\n onClick() {\n if (!this.disabled()) {\n this.selected.emit();\n }\n }\n\n onKeydown(event: KeyboardEvent) {\n if (this.tabsComponent) {\n this.tabsComponent.onKeydown(event, this.index());\n }\n }\n\n classes = computed(() => {\n const classes = ['tn-tab'];\n\n if (this.isActive()) {\n classes.push('tn-tab--active');\n }\n\n if (this.disabled()) {\n classes.push('tn-tab--disabled');\n }\n\n return classes.join(' ');\n });\n\n tabIndex = computed(() => {\n return this.isActive() ? 0 : -1;\n });\n\n hasIcon = computed(() => {\n return !!(this.hasIconContent() || this.iconTemplate() || this.icon());\n });\n}","<button\n role=\"tab\"\n type=\"button\"\n [ngClass]=\"classes()\"\n [attr.data-testid]=\"testId()\"\n [attr.aria-selected]=\"isActive()\"\n [attr.aria-disabled]=\"disabled()\"\n [attr.tabindex]=\"tabIndex()\"\n [disabled]=\"disabled()\"\n (click)=\"onClick()\"\n (keydown)=\"onKeydown($event)\"\n>\n @if (hasIcon()) {\n <span class=\"tn-tab__icon\">\n @if (iconContent()) {\n <ng-container *ngTemplateOutlet=\"iconContent()\" />\n } @else if (iconTemplate()) {\n <ng-container *ngTemplateOutlet=\"iconTemplate()\" />\n } @else {\n <span [innerHTML]=\"icon()\"></span>\n }\n </span>\n }\n <span class=\"tn-tab__label\">\n {{ label() }}\n <ng-content />\n </span>\n</button>","import { A11yModule } from '@angular/cdk/a11y';\nimport { CommonModule } from '@angular/common';\nimport type { TemplateRef} from '@angular/core';\nimport { Component, input, viewChild, ElementRef, inject, computed, signal } from '@angular/core';\n\n@Component({\n selector: 'tn-tab-panel',\n standalone: true,\n imports: [CommonModule, A11yModule],\n templateUrl: './tab-panel.component.html',\n styleUrl: './tab-panel.component.scss'\n})\nexport class TnTabPanelComponent {\n label = input<string>('');\n lazyLoad = input<boolean>(false);\n testId = input<string | undefined>(undefined);\n\n content = viewChild.required<TemplateRef<unknown>>('content');\n\n // Internal properties set by parent TnTabsComponent (public signals for parent control)\n index = signal<number>(0);\n isActive = signal<boolean>(false);\n hasBeenActive = signal<boolean>(false);\n\n elementRef = inject(ElementRef<HTMLElement>);\n\n classes = computed(() => {\n const classes = ['tn-tab-panel'];\n\n if (this.isActive()) {\n classes.push('tn-tab-panel--active');\n }\n\n if (!this.isActive()) {\n classes.push('tn-tab-panel--hidden');\n }\n\n return classes.join(' ');\n });\n\n shouldRender = computed(() => {\n if (!this.lazyLoad()) {\n return true;\n }\n\n // For lazy loading, only render if it's currently active or has been active before\n return this.isActive() || this.hasBeenActive();\n });\n\n onActivate() {\n this.hasBeenActive.set(true);\n }\n}","<div\n role=\"tabpanel\"\n [ngClass]=\"classes()\"\n [attr.data-testid]=\"testId()\"\n [attr.aria-hidden]=\"!isActive()\"\n [attr.aria-labelledby]=\"'tab-' + index()\"\n [attr.tabindex]=\"isActive() ? 0 : -1\"\n>\n @if (shouldRender()) {\n <div class=\"tn-tab-panel__content\">\n <ng-content />\n </div>\n }\n</div>","import { FocusMonitor, A11yModule } from '@angular/cdk/a11y';\nimport { LEFT_ARROW, RIGHT_ARROW, UP_ARROW, DOWN_ARROW, HOME, END, ENTER, SPACE } from '@angular/cdk/keycodes';\nimport { CommonModule } from '@angular/common';\nimport type { AfterContentInit, ElementRef, AfterViewInit, OnDestroy } from '@angular/core';\nimport { Component, contentChildren, input, output, ChangeDetectionStrategy, inject, ChangeDetectorRef, viewChild, signal, computed, effect } from '@angular/core';\nimport { TnTabComponent } from '../tab/tab.component';\nimport { TnTabPanelComponent } from '../tab-panel/tab-panel.component';\n\nexport interface TabChangeEvent {\n index: number;\n tab: TnTabComponent;\n previousIndex: number;\n}\n\n@Component({\n selector: 'tn-tabs',\n standalone: true,\n imports: [CommonModule, A11yModule, TnTabComponent, TnTabPanelComponent],\n templateUrl: './tabs.component.html',\n styleUrl: './tabs.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class TnTabsComponent implements AfterContentInit, AfterViewInit, OnDestroy {\n tabs = contentChildren(TnTabComponent);\n panels = contentChildren(TnTabPanelComponent);\n tabHeader = viewChild.required<ElementRef<HTMLElement>>('tabHeader');\n\n selectedIndex = input<number>(0);\n orientation = input<'horizontal' | 'vertical'>('horizontal');\n highlightPosition = input<'left' | 'right' | 'top' | 'bottom'>('bottom');\n\n selectedIndexChange = output<number>();\n tabChange = output<TabChangeEvent>();\n\n // Internal state for selected index (mutable)\n private internalSelectedIndex = signal<number>(0);\n\n highlightBarLeft = signal<number>(0);\n highlightBarWidth = signal<number>(0);\n highlightBarTop = signal<number>(0);\n highlightBarHeight = signal<number>(0);\n highlightBarVisible = signal<boolean>(false);\n\n private focusMonitor = inject(FocusMonitor);\n private cdr = inject(ChangeDetectorRef);\n\n constructor() {\n // Sync input to internal state\n effect(() => {\n this.internalSelectedIndex.set(this.selectedIndex());\n });\n\n // Reactive child state management - update tabs and panels when selectedIndex changes\n effect(() => {\n const currentIndex = this.internalSelectedIndex();\n\n const tabs = this.tabs();\n if (tabs && tabs.length > 0) {\n tabs.forEach((tab, i) => {\n tab.isActive.set(i === currentIndex);\n });\n }\n\n const panels = this.panels();\n if (panels && panels.length > 0) {\n panels.forEach((panel, i) => {\n panel.isActive.set(i === currentIndex);\n if (i === currentIndex) {\n panel.onActivate();\n }\n });\n }\n\n this.cdr.detectChanges();\n });\n }\n\n ngAfterContentInit() {\n this.initializeTabs();\n this.selectTab(this.internalSelectedIndex());\n\n // Listen for tab changes\n effect(() => {\n // Track tabs signal to react to changes\n const tabs = this.tabs();\n if (tabs.length > 0) {\n this.initializeTabs();\n this.updateHighlightBar();\n }\n });\n }\n\n ngAfterViewInit() {\n // Wait for next tick to ensure DOM is fully rendered\n setTimeout(() => {\n this.updateHighlightBar();\n this.highlightBarVisible.set(true);\n this.cdr.detectChanges();\n }, 0);\n }\n\n\n ngOnDestroy() {\n this.tabs().forEach(tab => {\n if (tab.elementRef) {\n this.focusMonitor.stopMonitoring(tab.elementRef);\n }\n });\n }\n\n private initializeTabs() {\n const currentIndex = this.internalSelectedIndex();\n\n this.tabs().forEach((tab, index) => {\n tab.index.set(index);\n tab.isActive.set(index === currentIndex);\n tab.tabsComponent = this;\n\n // Set up focus monitoring\n if (tab.elementRef) {\n this.focusMonitor.monitor(tab.elementRef);\n }\n\n // Set up click handlers\n tab.selected.subscribe(() => {\n if (!tab.disabled()) {\n this.selectTab(index);\n }\n });\n });\n\n this.panels().forEach((panel, index) => {\n panel.index.set(index);\n panel.isActive.set(index === currentIndex);\n });\n\n // Trigger change detection to update DOM\n this.cdr.detectChanges();\n }\n\n selectTab(index: number) {\n const tabs = this.tabs();\n if (index < 0 || index >= tabs.length) {\n return;\n }\n\n const tab = tabs[index];\n if (tab && tab.disabled()) {\n return;\n }\n\n const previousIndex = this.internalSelectedIndex();\n this.internalSelectedIndex.set(index);\n\n // Effect will update child states automatically\n\n // Update highlight bar\n this.updateHighlightBar();\n\n // Emit events\n this.selectedIndexChange.emit(index);\n if (tab) {\n this.tabChange.emit({\n index,\n tab,\n previousIndex\n });\n }\n }\n\n private updateHighlightBar() {\n const tabHeader = this.tabHeader();\n const tabs = this.tabs();\n if (!tabHeader || !tabs || tabs.length === 0) {\n return;\n }\n\n const activeTab = tabs[this.internalSelectedIndex()];\n if (!activeTab || !activeTab.elementRef) {\n return;\n }\n\n const tabElement = activeTab.elementRef.nativeElement;\n const headerElement = tabHeader.nativeElement;\n\n // Get the position and dimensions of the active tab relative to the header\n const tabRect = tabElement.getBoundingClientRect();\n const headerRect = headerElement.getBoundingClientRect();\n\n if (this.orientation() === 'vertical') {\n // For vertical tabs, animate top position and height\n this.highlightBarTop.set(tabRect.top - headerRect.top);\n this.highlightBarHeight.set(tabRect.height);\n // Position highlight bar based on highlightPosition\n if (this.highlightPosition() === 'left') {\n this.highlightBarLeft.set(tabRect.left - headerRect.left);\n this.highlightBarWidth.set(3);\n } else { // right\n this.highlightBarLeft.set((tabRect.right - headerRect.left) - 3);\n this.highlightBarWidth.set(3);\n }\n } else {\n // For horizontal tabs, animate left position and width\n this.highlightBarLeft.set(tabRect.left - headerRect.left);\n this.highlightBarWidth.set(tabRect.width);\n // Position highlight bar based on highlightPosition\n if (this.highlightPosition() === 'top') {\n this.highlightBarTop.set(tabRect.top - headerRect.top);\n this.highlightBarHeight.set(2);\n } else { // bottom\n this.highlightBarTop.set((tabRect.bottom - headerRect.top) - 2);\n this.highlightBarHeight.set(2);\n }\n }\n\n // Trigger change detection to update the highlight bar position\n this.cdr.detectChanges();\n }\n\n onKeydown(event: KeyboardEvent, currentIndex: number) {\n let targetIndex = currentIndex;\n\n switch (event.keyCode) {\n case LEFT_ARROW:\n if (this.orientation() === 'horizontal') {\n targetIndex = this.getPreviousEnabledTabIndex(currentIndex);\n } else {\n return; // No action for vertical tabs\n }\n break;\n case RIGHT_ARROW:\n if (this.orientation() === 'horizontal') {\n targetIndex = this.getNextEnabledTabIndex(currentIndex);\n } else {\n return; // No action for vertical tabs\n }\n break;\n case UP_ARROW:\n if (this.orientation() === 'vertical') {\n targetIndex = this.getPreviousEnabledTabIndex(currentIndex);\n } else {\n return; // No action for horizontal tabs\n }\n break;\n case DOWN_ARROW:\n if (this.orientation() === 'vertical') {\n targetIndex = this.getNextEnabledTabIndex(currentIndex);\n } else {\n return; // No action for horizontal tabs\n }\n break;\n case HOME:\n targetIndex = this.getFirstEnabledTabIndex();\n break;\n case END:\n targetIndex = this.getLastEnabledTabIndex();\n break;\n case ENTER:\n case SPACE:\n this.selectTab(currentIndex);\n event.preventDefault();\n return;\n default:\n return;\n }\n\n if (targetIndex !== currentIndex) {\n this.focusTab(targetIndex);\n event.preventDefault();\n }\n }\n\n private getPreviousEnabledTabIndex(currentIndex: number): number {\n const tabs = this.tabs();\n for (let i = currentIndex - 1; i >= 0; i--) {\n if (!tabs[i]?.disabled()) {\n return i;\n }\n }\n return this.getLastEnabledTabIndex();\n }\n\n private getNextEnabledTabIndex(currentIndex: number): number {\n const tabs = this.tabs();\n for (let i = currentIndex + 1; i < tabs.length; i++) {\n if (!tabs[i]?.disabled()) {\n return i;\n }\n }\n return this.getFirstEnabledTabIndex();\n }\n\n private getFirstEnabledTabIndex(): number {\n const tabs = this.tabs();\n for (let i = 0; i < tabs.length; i++) {\n if (!tabs[i]?.disabled()) {\n return i;\n }\n }\n return 0;\n }\n\n private getLastEnabledTabIndex(): number {\n const tabs = this.tabs();\n for (let i = tabs.length - 1; i >= 0; i--) {\n if (!tabs[i]?.disabled()) {\n return i;\n }\n }\n return tabs.length - 1;\n }\n\n private focusTab(index: number) {\n const tab = this.tabs()[index];\n if (tab && tab.elementRef) {\n tab.elementRef.nativeElement.focus();\n }\n }\n\n classes = computed(() => {\n const classes = ['tn-tabs'];\n\n if (this.orientation() === 'vertical') {\n classes.push('tn-tabs--vertical');\n } else {\n classes.push('tn-tabs--horizontal');\n }\n\n // Add highlight position class\n classes.push(`tn-tabs--highlight-${this.highlightPosition()}`);\n\n return classes.join(' ');\n });\n}\n","<div role=\"tablist\" [ngClass]=\"classes()\" [attr.aria-orientation]=\"orientation()\">\n <div #tabHeader class=\"tn-tabs__header\">\n <ng-content select=\"tn-tab\" />\n @if (highlightBarVisible()) {\n <div class=\"tn-tabs__highlight-bar\"\n [style.left.px]=\"highlightBarLeft()\"\n [style.width.px]=\"highlightBarWidth()\"\n [style.top.px]=\"highlightBarTop()\"\n [style.height.px]=\"highlightBarHeight()\">\n </div>\n }\n </div>\n\n <div class=\"tn-tabs__content\">\n <ng-content select=\"tn-tab-panel\" />\n </div>\n</div>","\nimport { Component, input, computed } from '@angular/core';\nimport type { PlatformType } from '../enums/modifier-keys.enum';\n\n@Component({\n selector: 'tn-keyboard-shortcut',\n standalone: true,\n imports: [],\n templateUrl: './keyboard-shortcut.component.html',\n styleUrls: ['./keyboard-shortcut.component.scss'],\n})\nexport class TnKeyboardShortcutComponent {\n shortcut = input<string>('');\n platform = input<PlatformType>('auto');\n separator = input<string>('');\n\n displayShortcut = computed(() => {\n return this.formatShortcut(this.shortcut());\n });\n\n private formatShortcut(shortcut: string): string {\n if (!shortcut) {return '';}\n\n const detectedPlatform = this.platform() === 'auto' ? this.detectPlatform() : this.platform();\n \n // Convert Mac-style shortcuts to platform-appropriate format\n if (detectedPlatform === 'windows' || detectedPlatform === 'linux') {\n return this.convertToWindows(shortcut);\n }\n \n // Return Mac format by default\n return shortcut;\n }\n\n private detectPlatform(): 'mac' | 'windows' | 'linux' {\n const userAgent = navigator.userAgent.toLowerCase();\n \n if (userAgent.includes('mac')) {\n return 'mac';\n } else if (userAgent.includes('win')) {\n return 'windows';\n } else if (userAgent.includes('linux')) {\n return 'linux';\n }\n \n return 'mac'; // Default to Mac\n }\n\n private convertToWindows(macShortcut: string): string {\n return macShortcut\n .replace(/⌘/g, 'Ctrl')\n .replace(/⌥/g, 'Alt')\n .replace(/⇧/g, 'Shift')\n .replace(/⌃/g, 'Ctrl');\n }\n\n\n shortcutKeys = computed(() => {\n const displayShortcut = this.displayShortcut();\n if (!displayShortcut) {return [];}\n\n let keys: string[] = [];\n\n // For Mac-style shortcuts without separators\n if (displayShortcut.includes('⌘') || displayShortcut.includes('⌥') || displayShortcut.includes('⇧')) {\n const macSymbols = ['⌘', '⌥', '⇧', '⌃'];\n let currentKey = '';\n\n // Iterate through each character to preserve order\n for (const char of displayShortcut) {\n if (macSymbols.includes(char)) {\n // If we have accumulated characters, add them first\n if (currentKey) {\n keys.push(currentKey);\n currentKey = '';\n }\n // Add the Mac symbol\n keys.push(char);\n } else {\n // Accumulate non-symbol characters\n currentKey += char;\n }\n }\n\n // Add any remaining characters\n if (currentKey) {\n keys.push(currentKey);\n }\n } else {\n // For Windows/Linux style shortcuts with + separators\n keys = displayShortcut.split('+');\n }\n\n return keys.filter(key => key.trim() !== '');\n });\n}","<span class=\"tn-keyboard-shortcut\" [attr.aria-label]=\"'Keyboard shortcut: ' + displayShortcut()\">\n @for (key of shortcutKeys(); track $index; let last = $last) {\n <kbd class=\"tn-key\">{{ key }}</kbd>\n @if (!last) {\n <span class=\"tn-key-separator\">{{ separator() || '+' }}</span>\n }\n }\n</span>","\nimport type { AfterContentInit } from '@angular/core';\nimport { Component, input, computed, signal, contentChild } from '@angular/core';\nimport { NgControl } from '@angular/forms';\n\n@Component({\n selector: 'tn-form-field',\n standalone: true,\n imports: [],\n templateUrl: './form-field.component.html',\n styleUrls: ['./form-field.component.scss']\n})\nexport class TnFormFieldComponent implements AfterContentInit {\n label = input<string>('');\n hint = input<string>('');\n required = input<boolean>(false);\n testId = input<string>('');\n\n control = contentChild(NgControl);\n\n protected hasError = signal<boolean>(false);\n protected errorMessage = signal<string>('');\n\n ngAfterContentInit(): void {\n const control = this.control();\n if (control) {\n // Listen for control status changes\n control.statusChanges?.subscribe(() => {\n this.updateErrorState();\n });\n\n // Initial error state check\n this.updateErrorState();\n }\n }\n\n private updateErrorState(): void {\n const control = this.control();\n if (control) {\n this.hasError.set(!!(control.invalid && (control.dirty || control.touched)));\n this.errorMessage.set(this.getErrorMessage());\n }\n }\n\n private getErrorMessage(): string {\n const control = this.control();\n if (!control?.errors) {return '';}\n\n const errors = control.errors;\n\n // Return the first error message found\n if (errors['required']) {return 'This field is required';}\n if (errors['email']) {return 'Please enter a valid email address';}\n if (errors['minlength']) {return `Minimum length is ${errors['minlength'].requiredLength}`;}\n if (errors['maxlength']) {return `Maximum length is ${errors['maxlength'].requiredLength}`;}\n if (errors['pattern']) {return 'Please enter a valid format';}\n if (errors['min']) {return `Minimum value is ${errors['min'].min}`;}\n if (errors['max']) {return `Maximum value is ${errors['max'].max}`;}\n\n // Return custom error message if available\n return Object.keys(errors)[0] || 'Invalid input';\n }\n\n showError = computed(() => {\n return this.hasError() && !!this.errorMessage();\n });\n\n showHint = computed(() => {\n return !!this.hint() && !this.showError();\n });\n}","<div class=\"tn-form-field\" [attr.data-testid]=\"testId()\">\n <!-- Label -->\n @if (label()) {\n <label class=\"tn-form-field-label\" [class.required]=\"required()\">\n {{ label() }}\n @if (required()) {\n <span class=\"required-asterisk\" aria-label=\"required\">*</span>\n }\n </label>\n }\n\n <!-- Form Control Content -->\n <div class=\"tn-form-field-wrapper\">\n <ng-content />\n </div>\n\n <!-- Hint or Error Message -->\n <div class=\"tn-form-field-subscript\">\n @if (showError()) {\n <div\n class=\"tn-form-field-error\"\n role=\"alert\"\n aria-live=\"polite\">\n {{ errorMessage() }}\n </div>\n }\n @if (showHint()) {\n <div class=\"tn-form-field-hint\">\n {{ hint() }}\n </div>\n }\n </div>\n</div>","\nimport { ElementRef, ChangeDetectorRef, Component, input, output, forwardRef, signal, computed, effect, inject } from '@angular/core';\nimport type { ControlValueAccessor} from '@angular/forms';\nimport { NG_VALUE_ACCESSOR } from '@angular/forms';\n\nexport interface TnSelectOption<T = unknown> {\n value: T;\n label: string;\n disabled?: boolean;\n}\n\nexport interface TnSelectOptionGroup<T = unknown> {\n label: string;\n options: TnSelectOption<T>[];\n disabled?: boolean;\n}\n\n@Component({\n selector: 'tn-select',\n standalone: true,\n imports: [],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => TnSelectComponent),\n multi: true\n }\n ],\n templateUrl: './select.component.html',\n styleUrls: ['./select.component.scss']\n})\nexport class TnSelectComponent<T = unknown> implements ControlValueAccessor {\n options = input<TnSelectOption<T>[]>([]);\n optionGroups = input<TnSelectOptionGroup<T>[]>([]);\n placeholder = input<string>('Select an option');\n disabled = input<boolean>(false);\n testId = input<string>('');\n\n selectionChange = output<T>();\n\n // Internal state signals\n protected isOpen = signal<boolean>(false);\n protected selectedValue = signal<T | null>(null);\n private formDisabled = signal<boolean>(false);\n\n // Computed disabled state (combines input and form state)\n isDisabled = computed(() => this.disabled() || this.formDisabled());\n\n private onChange = (_value: T | null) => {};\n private onTouched = () => {};\n\n private elementRef = inject(ElementRef);\n private cdr = inject(ChangeDetectorRef);\n\n constructor() {\n // Click-outside detection using effect\n effect(() => {\n if (this.isOpen()) {\n const clickListener = (event: Event) => {\n if (!this.elementRef.nativeElement.contains(event.target as Node)) {\n this.closeDropdown();\n }\n };\n\n // Add listener after a small delay to avoid immediate closure\n setTimeout(() => {\n document.addEventListener('click', clickListener);\n }, 0);\n\n // Cleanup function\n return () => {\n document.removeEventListener('click', clickListener);\n };\n }\n return undefined;\n });\n }\n\n // ControlValueAccessor implementation\n writeValue(value: T | null): void {\n this.selectedValue.set(value);\n }\n\n registerOnChange(fn: (value: T | null) => void): void {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n\n setDisabledState(isDisabled: boolean): void {\n this.formDisabled.set(isDisabled);\n }\n\n // Component methods\n toggleDropdown(): void {\n if (this.isDisabled()) {return;}\n this.isOpen.set(!this.isOpen());\n if (!this.isOpen()) {\n this.onTouched();\n }\n }\n\n closeDropdown(): void {\n this.isOpen.set(false);\n this.onTouched();\n }\n\n onOptionClick(option: TnSelectOption<T>): void {\n this.selectOption(option);\n }\n\n selectOption(option: TnSelectOption<T>): void {\n if (option.disabled) {return;}\n\n this.selectedValue.set(option.value);\n this.onChange(option.value);\n this.selectionChange.emit(option.value);\n this.closeDropdown();\n this.cdr.markForCheck(); // Trigger change detection\n }\n\n // Computed properties\n isSelected = computed(() => (option: TnSelectOption<T>): boolean => {\n return this.compareValues(this.selectedValue(), option.value);\n });\n\n getDisplayText = computed(() => {\n const value = this.selectedValue();\n if (value === null || value === undefined) {\n return this.placeholder();\n }\n const option = this.findOptionByValue(value);\n return option ? option.label : value;\n });\n\n private findOptionByValue(value: T | null): TnSelectOption<T> | undefined {\n // Search in regular options first\n const regularOption = this.options().find(opt => this.compareValues(opt.value, value));\n if (regularOption) {return regularOption;}\n\n // Search in option groups\n for (const group of this.optionGroups()) {\n const groupOption = group.options.find(opt => this.compareValues(opt.value, value));\n if (groupOption) {return groupOption;}\n }\n\n return undefined;\n }\n\n hasAnyOptions = computed(() => {\n return this.options().length > 0 || this.optionGroups().length > 0;\n });\n\n private compareValues(a: T | null, b: T | null): boolean {\n if (a === b) {return true;}\n if (typeof a === 'object' && typeof b === 'object' && a !== null && b !== null) {\n return JSON.stringify(a) === JSON.stringify(b);\n }\n return false;\n }\n\n // Keyboard navigation\n onKeydown(event: KeyboardEvent): void {\n switch (event.key) {\n case 'Enter':\n case ' ':\n if (!this.isOpen()) {\n this.toggleDropdown();\n event.preventDefault();\n }\n break;\n case 'Escape':\n if (this.isOpen()) {\n this.closeDropdown();\n event.preventDefault();\n }\n break;\n case 'ArrowDown':\n if (!this.isOpen()) {\n this.toggleDropdown();\n }\n event.preventDefault();\n break;\n }\n }\n}\n","<div class=\"tn-select-container\" [attr.data-testid]=\"testId()\">\n <!-- Select Trigger -->\n <div\n class=\"tn-select-trigger\"\n role=\"combobox\"\n tabindex=\"0\"\n [class.disabled]=\"isDisabled()\"\n [class.open]=\"isOpen()\"\n [attr.aria-expanded]=\"isOpen()\"\n [attr.aria-haspopup]=\"true\"\n [attr.aria-controls]=\"isOpen() ? 'tn-select-dropdown-' + testId() : null\"\n [attr.aria-label]=\"placeholder()\"\n (click)=\"toggleDropdown()\"\n (keydown)=\"onKeydown($event)\">\n\n <!-- Display Text -->\n <span\n class=\"tn-select-text\"\n [class.placeholder]=\"selectedValue() === null || selectedValue() === undefined\">\n {{ getDisplayText() }}\n </span>\n\n <!-- Dropdown Arrow -->\n <div class=\"tn-select-arrow\" [class.open]=\"isOpen()\">\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\">\n <polyline points=\"6,9 12,15 18,9\" />\n </svg>\n </div>\n </div>\n\n <!-- Dropdown Menu -->\n @if (isOpen()) {\n <div\n class=\"tn-select-dropdown\"\n role=\"listbox\"\n [attr.id]=\"'tn-select-dropdown-' + testId()\">\n\n <!-- Options List -->\n <div class=\"tn-select-options\">\n <!-- Regular Options -->\n @for (option of options(); track $index) {\n <div\n class=\"tn-select-option\"\n role=\"option\"\n [attr.tabindex]=\"option.disabled ? null : 0\"\n [class.selected]=\"isSelected()(option)\"\n [class.disabled]=\"option.disabled\"\n [attr.aria-selected]=\"isSelected()(option)\"\n [attr.aria-disabled]=\"option.disabled\"\n (mousedown)=\"$event.preventDefault()\"\n (click)=\"onOptionClick(option)\"\n (keydown.enter)=\"onOptionClick(option)\"\n (keydown.space)=\"onOptionClick(option)\">\n\n {{ option.label }}\n </div>\n }\n\n <!-- Option Groups -->\n @for (group of optionGroups(); track $index; let isFirst = $first) {\n <!-- Group Separator (not shown before first group if we have regular options) -->\n @if (!isFirst || options().length > 0) {\n <div\n class=\"tn-select-separator\"\n role=\"separator\">\n </div>\n }\n\n <!-- Group Label -->\n <div\n class=\"tn-select-group-label\"\n [class.disabled]=\"group.disabled\">\n {{ group.label }}\n </div>\n\n <!-- Group Options -->\n @for (option of group.options; track $index) {\n <div\n class=\"tn-select-option\"\n role=\"option\"\n [attr.tabindex]=\"option.disabled || group.disabled ? null : 0\"\n [class.selected]=\"isSelected()(option)\"\n [class.disabled]=\"option.disabled || group.disabled\"\n [attr.aria-selected]=\"isSelected()(option)\"\n [attr.aria-disabled]=\"option.disabled || group.disabled\"\n (mousedown)=\"$event.preventDefault()\"\n (click)=\"onOptionClick(option)\"\n (keydown.enter)=\"onOptionClick(option)\"\n (keydown.space)=\"onOptionClick(option)\">\n\n {{ option.label }}\n </div>\n }\n }\n\n <!-- No Options Message -->\n @if (!hasAnyOptions()) {\n <div class=\"tn-select-no-options\">\n No options available\n </div>\n }\n </div>\n </div>\n }\n</div>","import type { BaseHarnessFilters } from '@angular/cdk/testing';\nimport { ComponentHarness, HarnessPredicate } from '@angular/cdk/testing';\n\n/**\n * Harness for interacting with tn-icon in tests.\n * Provides filtering by icon name and library for existence checks.\n *\n * @example\n * ```typescript\n * // Check for existence\n * const icon = await loader.getHarness(TnIconHarness);\n *\n * // Find icon by name\n * const folderIcon = await loader.getHarness(\n * TnIconHarness.with({ name: 'folder' })\n * );\n *\n * // Find icon by name and library\n * const mdiIcon = await loader.getHarness(\n * TnIconHarness.with({ name: 'account-circle', library: 'mdi' })\n * );\n *\n * // Check if icon exists\n * const hasIcon = await loader.hasHarness(\n * TnIconHarness.with({ name: 'check' })\n * );\n * ```\n */\nexport class TnIconHarness extends ComponentHarness {\n /**\n * The selector for the host element of a `TnIconComponent` instance.\n */\n static hostSelector = 'tn-icon';\n\n /**\n * Gets a `HarnessPredicate` that can be used to search for an icon\n * with specific attributes.\n *\n * @param options Options for filtering which icon instances are considered a match.\n * @returns A `HarnessPredicate` configured with the given options.\n *\n * @example\n * ```typescript\n * // Find icon by name\n * const icon = await loader.getHarness(\n * TnIconHarness.with({ name: 'home' })\n * );\n *\n * // Find icon by library\n * const customIcon = await loader.getHarness(\n * TnIconHarness.with({ library: 'custom' })\n * );\n *\n * // Find icon with specific size\n * const largeIcon = await loader.getHarness(\n * TnIconHarness.with({ size: 'lg' })\n * );\n * ```\n */\n static with(options: IconHarnessFilters = {}) {\n return new HarnessPredicate(TnIconHarness, options)\n .addOption('name', options.name, async (harness, name) => {\n return (await harness.getName()) === name;\n })\n .addOption('library', options.library, async (harness, library) => {\n return (await harness.getLibrary()) === library;\n })\n .addOption('size', options.size, async (harness, size) => {\n return (await harness.getSize()) === size;\n });\n }\n\n /**\n * Gets the icon name.\n *\n * @returns Promise resolving to the icon name.\n *\n * @example\n * ```typescript\n * const icon = await loader.getHarness(TnIconHarness);\n * const name = await icon.getName();\n * expect(name).toBe('folder');\n * ```\n */\n async getName(): Promise<string | null> {\n const host = await this.host();\n return host.getAttribute('name');\n }\n\n /**\n * Gets the icon library.\n *\n * @returns Promise resolving to the icon library.\n *\n * @example\n * ```typescript\n * const icon = await loader.getHarness(TnIconHarness);\n * const library = await icon.getLibrary();\n * expect(library).toBe('mdi');\n * ```\n */\n async getLibrary(): Promise<string | null> {\n const host = await this.host();\n return host.getAttribute('library');\n }\n\n /**\n * Gets the icon size.\n *\n * @returns Promise resolving to the icon size.\n *\n * @example\n * ```typescript\n * const icon = await loader.getHarness(TnIconHarness);\n * const size = await icon.getSize();\n * expect(size).toBe('lg');\n * ```\n */\n async getSize(): Promise<string | null> {\n const host = await this.host();\n return host.getAttribute('size');\n }\n\n /**\n * Gets the icon color.\n *\n * @returns Promise resolving to the icon color.\n *\n * @example\n * ```typescript\n * const icon = await loader.getHarness(TnIconHarness);\n * const color = await icon.getColor();\n * expect(color).toBe('primary');\n * ```\n */\n async getColor(): Promise<string | null> {\n const host = await this.host();\n return host.getAttribute('color');\n }\n}\n\n/**\n * A set of criteria that can be used to filter a list of `TnIconHarness` instances.\n */\nexport interface IconHarnessFilters extends BaseHarnessFilters {\n /** Filters by icon name. */\n name?: string;\n /** Filters by icon library (material, mdi, custom, lucide). */\n library?: string;\n /** Filters by icon size (xs, sm, md, lg, xl). */\n size?: string;\n}\n","/**\n * Marks an icon name for inclusion in the TrueNAS UI sprite generation.\n *\n * This function serves two purposes:\n * 1. At runtime: Applies library-specific prefixes (e.g., mdi-, app-)\n * 2. At build time: Marker for the scanner to detect icons for sprite inclusion\n *\n * Use this when icon names are computed dynamically or come from variables,\n * to ensure they're included in the sprite at build time.\n *\n * @example\n * // Static icon name - automatically detected from template\n * <tn-icon name=\"folder\"></tn-icon>\n *\n * @example\n * // Dynamic MDI icon\n * const iconName = condition ? tnIconMarker(\"pencil\", \"mdi\") : tnIconMarker(\"delete\", \"mdi\");\n * <tn-icon [name]=\"iconName\"></tn-icon>\n *\n * @example\n * // Dynamic custom icon (consumer's own icon)\n * const logo = tnIconMarker(\"your-logo-name\", \"custom\");\n * <tn-icon [name]=\"logo\"></tn-icon>\n *\n * @example\n * // Array of dynamic icons\n * const actions = [\n * { name: \"Save\", icon: tnIconMarker(\"content-save\", \"mdi\") },\n * { name: \"Cancel\", icon: tnIconMarker(\"close\", \"mdi\") }\n * ];\n *\n * @param iconName - The icon name to mark for sprite inclusion\n * @param library - Optional library type: 'mdi', 'material', or 'custom'\n * @returns The icon name with appropriate prefix applied\n * @public\n */\nexport function tnIconMarker(\n iconName: string,\n library?: 'mdi' | 'material' | 'custom'\n): string {\n // Apply library-specific prefixes\n if (library === 'mdi' && !iconName.startsWith('mdi-')) {\n return `mdi-${iconName}`;\n }\n if (library === 'custom' && !iconName.startsWith('app-')) {\n return `app-${iconName}`;\n }\n if (library === 'material' && !iconName.startsWith('mat-')) {\n return `mat-${iconName}`;\n }\n return iconName;\n}\n\n/**\n * INTERNAL LIBRARY USE ONLY\n *\n * Marks an icon name for inclusion in the sprite generation with library namespace.\n * This function MUST be used by library component code for custom icons.\n *\n * The TypeScript type enforces that the icon name starts with 'tn-' prefix,\n * which reserves this namespace exclusively for library-provided custom icons.\n *\n * @example\n * ```typescript\n * // ✅ Correct - Library component code\n * const icon = libIconMarker('tn-dataset');\n *\n * // ❌ Wrong - Will cause TypeScript error\n * const icon = libIconMarker('dataset');\n * ```\n *\n * @param iconName - The icon name with 'tn-' prefix (enforced by TypeScript)\n * @returns The same icon name (identity function)\n * @internal\n */\nexport function libIconMarker(iconName: `tn-${string}`): string {\n return iconName;\n}\n","import type { Provider } from '@angular/core';\nimport { jest } from '@jest/globals';\nimport { TnIconRegistryService } from './icon-registry.service';\nimport { TnSpriteLoaderService } from './sprite-loader.service';\n\n/**\n * Mock type for TnSpriteLoaderService\n */\nexport interface MockSpriteLoader {\n ensureSpriteLoaded: jest.Mock;\n getIconUrl: jest.Mock;\n getSafeIconUrl: jest.Mock;\n isSpriteLoaded: jest.Mock;\n getSpriteConfig: jest.Mock;\n}\n\n/**\n * Mock type for TnIconRegistryService\n */\nexport interface MockIconRegistry {\n resolveIcon: jest.Mock;\n getSpriteLoader: jest.Mock;\n registerIcon: jest.Mock;\n registerIcons: jest.Mock;\n registerLibrary: jest.Mock;\n}\n\n/**\n * Options for customizing icon testing mocks\n */\nexport interface IconTestingMockOverrides {\n spriteLoader?: Partial<MockSpriteLoader>;\n iconRegistry?: Partial<MockIconRegistry>;\n}\n\n/**\n * Creates default mock implementation of TnSpriteLoaderService.\n * All methods return safe default values.\n */\nfunction createSpriteLoaderMock(overrides?: Partial<MockSpriteLoader>): MockSpriteLoader {\n return {\n ensureSpriteLoaded: jest.fn(() => Promise.resolve(true)),\n getIconUrl: jest.fn(() => null),\n getSafeIconUrl: jest.fn(() => null),\n isSpriteLoaded: jest.fn(() => true),\n getSpriteConfig: jest.fn(() => undefined),\n ...overrides,\n };\n}\n\n/**\n * Creates default mock implementation of TnIconRegistryService.\n * Returns a simple SVG for icon resolution so icons render properly in tests\n * without showing fallback text that could interfere with text content assertions.\n */\nfunction createIconRegistryMock(\n spriteLoader: MockSpriteLoader,\n overrides?: Partial<MockIconRegistry>\n): MockIconRegistry {\n return {\n resolveIcon: jest.fn(() => ({\n source: 'svg' as const,\n content: '<svg><path/></svg>',\n })),\n getSpriteLoader: jest.fn(() => spriteLoader),\n registerIcon: jest.fn(),\n registerIcons: jest.fn(),\n registerLibrary: jest.fn(),\n ...overrides,\n };\n}\n\n/**\n * Testing utilities for TnIcon components.\n *\n * Provides framework-specific mock implementations of icon services to simplify testing\n * components that use TnIconComponent.\n *\n * @example\n * ```typescript\n * // Simple usage - \"it just works\"\n * await TestBed.configureTestingModule({\n * imports: [MyComponent],\n * providers: [\n * TnIconTesting.jest.providers()\n * ]\n * }).compileComponents();\n * ```\n *\n * @example\n * ```typescript\n * // Advanced usage - customize mocks\n * await TestBed.configureTestingModule({\n * imports: [MyComponent],\n * providers: [\n * TnIconTesting.jest.providers({\n * iconRegistry: {\n * resolveIcon: jest.fn(() => ({\n * source: 'sprite',\n * spriteUrl: '#custom-icon'\n * }))\n * }\n * })\n * ]\n * }).compileComponents();\n * ```\n */\nexport const TnIconTesting = {\n /**\n * Jest-specific testing utilities.\n */\n jest: {\n /**\n * Returns Angular providers with mocked icon services.\n * Creates fresh mock instances on each call to prevent test pollution.\n *\n * @param overrides Optional partial mock implementations to customize behavior\n * @returns Array of providers for TestBed\n *\n * @example\n * ```typescript\n * // Default mocks\n * TnIconTesting.jest.providers()\n *\n * // Custom sprite loader behavior\n * TnIconTesting.jest.providers({\n * spriteLoader: {\n * getIconUrl: jest.fn(() => '#custom-icon')\n * }\n * })\n * ```\n */\n providers(overrides?: IconTestingMockOverrides): Provider[] {\n const spriteLoader = createSpriteLoaderMock(overrides?.spriteLoader);\n const iconRegistry = createIconRegistryMock(spriteLoader, overrides?.iconRegistry);\n\n return [\n { provide: TnSpriteLoaderService, useValue: spriteLoader },\n { provide: TnIconRegistryService, useValue: iconRegistry },\n ];\n },\n },\n // Future: Add vitest, jasmine, or other testing framework support here\n} as const;\n","/**\n * Lucide Icons Integration Helper\n * \n * This helper provides easy integration with Lucide icons.\n * Usage:\n * \n * ```typescript\n * import { setupLucideIntegration } from '@truenas/ui-components';\n * import * as LucideIcons from 'lucide';\n * \n * // In your app.module.ts or main.ts\n * setupLucideIntegration(LucideIcons);\n * \n * // Now you can use lucide icons in templates:\n * // <tn-icon name=\"lucide:home\"></tn-icon>\n * // <tn-icon name=\"lucide:user-circle\"></tn-icon>\n * ```\n */\n\nimport { inject } from '@angular/core';\nimport type { IconLibrary } from '../icon-registry.service';\nimport { TnIconRegistryService } from '../icon-registry.service';\n\nexport interface LucideIconOptions {\n size?: number;\n color?: string;\n strokeWidth?: number;\n fill?: string;\n stroke?: string;\n}\n\n/**\n * Set up Lucide icons integration with the icon registry\n * \n * @param lucideIcons - The Lucide icons object (import * as LucideIcons from 'lucide')\n * @param defaultOptions - Default options for all Lucide icons\n * \n * @example\n * ```typescript\n * import * as LucideIcons from 'lucide';\n * import { setupLucideIntegration } from '@truenas/ui-components';\n * \n * setupLucideIntegration(LucideIcons, {\n * size: 24,\n * strokeWidth: 2,\n * color: 'currentColor'\n * });\n * ```\n */\nexport function setupLucideIntegration(\n lucideIcons: Record<string, unknown>,\n defaultOptions: LucideIconOptions = {}\n): void {\n const registry = inject(TnIconRegistryService);\n \n const lucideLibrary: IconLibrary = {\n name: 'lucide',\n resolver: (iconName: string, options?: unknown) => {\n const typedOptions = (options as LucideIconOptions) || {};\n // Convert kebab-case to PascalCase (home-icon -> HomeIcon)\n const pascalCase = iconName\n .split('-')\n .map(part => part.charAt(0).toUpperCase() + part.slice(1))\n .join('');\n\n const iconFunction = lucideIcons[pascalCase];\n\n if (iconFunction && typeof iconFunction === 'function') {\n try {\n // Merge default options with provided options\n const mergedOptions = {\n size: 24,\n color: 'currentColor',\n strokeWidth: 2,\n ...defaultOptions,\n ...typedOptions\n };\n \n // Call the Lucide icon function to get SVG element\n const svgElement = iconFunction(mergedOptions);\n \n if (svgElement && svgElement.outerHTML) {\n return svgElement.outerHTML;\n }\n } catch (error) {\n console.warn(`Failed to render Lucide icon '${iconName}':`, error);\n }\n }\n \n return null;\n },\n defaultOptions\n };\n \n registry.registerLibrary(lucideLibrary);\n}\n\n/**\n * Alternative setup function that allows manual registration\n * Use this if you want more control over which icons are available\n * \n * @example\n * ```typescript\n * import { Home, User, Settings } from 'lucide';\n * import { createLucideLibrary } from '@truenas/ui-components';\n * \n * const lucideLibrary = createLucideLibrary({\n * home: Home,\n * user: User,\n * settings: Settings\n * });\n * \n * // Register manually\n * iconRegistry.registerLibrary(lucideLibrary);\n * ```\n */\nexport function createLucideLibrary(\n icons: Record<string, unknown>,\n defaultOptions: LucideIconOptions = {}\n): IconLibrary {\n return {\n name: 'lucide',\n resolver: (iconName: string, options?: unknown) => {\n const typedOptions = (options as LucideIconOptions) || {};\n const iconFunction = icons[iconName];\n\n if (iconFunction && typeof iconFunction === 'function') {\n try {\n const mergedOptions = {\n size: 24,\n color: 'currentColor',\n strokeWidth: 2,\n ...defaultOptions,\n ...typedOptions\n };\n \n const svgElement = iconFunction(mergedOptions);\n \n if (svgElement && svgElement.outerHTML) {\n return svgElement.outerHTML;\n }\n } catch (error) {\n console.warn(`Failed to render Lucide icon '${iconName}':`, error);\n }\n }\n \n return null;\n },\n defaultOptions\n };\n}\n\n/**\n * Register common Lucide icons individually\n * Useful when you only want specific icons to reduce bundle size\n * \n * @example\n * ```typescript\n * import { Home, User, Settings, Heart, Star } from 'lucide';\n * import { registerLucideIcons } from '@truenas/ui-components';\n * \n * registerLucideIcons({\n * home: Home,\n * user: User,\n * settings: Settings,\n * heart: Heart,\n * star: Star\n * });\n * ```\n */\nexport function registerLucideIcons(icons: Record<string, unknown>): void {\n const registry = inject(TnIconRegistryService);\n \n Object.entries(icons).forEach(([name, iconFunction]) => {\n if (typeof iconFunction === 'function') {\n try {\n const svgElement = iconFunction({\n size: 24,\n color: 'currentColor',\n strokeWidth: 2\n });\n \n if (svgElement && svgElement.outerHTML) {\n registry.registerIcon(`lucide-${name}`, svgElement.outerHTML);\n }\n } catch (error) {\n console.warn(`Failed to register Lucide icon '${name}':`, error);\n }\n }\n });\n}","\nimport { Component, input } from '@angular/core';\n\n@Component({\n selector: 'tn-list',\n standalone: true,\n imports: [],\n templateUrl: './list.component.html',\n styleUrl: './list.component.scss',\n host: {\n 'class': 'tn-list',\n '[class.tn-list--dense]': 'dense()',\n '[class.tn-list--disabled]': 'disabled()',\n 'role': 'list'\n }\n})\nexport class TnListComponent {\n dense = input<boolean>(false);\n disabled = input<boolean>(false);\n}","<ng-content />","\nimport type { AfterContentInit} from '@angular/core';\nimport { ElementRef, Component, input, output, computed, signal, inject } from '@angular/core';\n\n@Component({\n selector: 'tn-list-item',\n standalone: true,\n imports: [],\n templateUrl: './list-item.component.html',\n styleUrl: './list-item.component.scss',\n host: {\n 'class': 'tn-list-item',\n '[class.tn-list-item--disabled]': 'disabled()',\n '[class.tn-list-item--clickable]': 'clickable()',\n '[class.tn-list-item--two-line]': 'hasSecondaryText()',\n '[class.tn-list-item--three-line]': 'hasThirdText()',\n 'role': 'listitem',\n '(click)': 'onClick($event)'\n }\n})\nexport class TnListItemComponent implements AfterContentInit {\n disabled = input<boolean>(false);\n clickable = input<boolean>(false);\n\n itemClick = output<Event>();\n\n protected hasLeadingContent = signal<boolean>(false);\n protected hasSecondaryTextContent = signal<boolean>(false);\n protected hasTrailingContent = signal<boolean>(false);\n protected hasPrimaryTextDirective = signal<boolean>(false);\n\n private elementRef = inject(ElementRef);\n\n ngAfterContentInit(): void {\n this.checkContentProjection();\n }\n\n private checkContentProjection(): void {\n const element = this.elementRef.nativeElement;\n\n // Check for leading content (icons/avatars)\n this.hasLeadingContent.set(!!(\n element.querySelector('[tnListIcon]') ||\n element.querySelector('[tnListAvatar]')\n ));\n\n // Check for secondary text content\n this.hasSecondaryTextContent.set(!!(\n element.querySelector('[tnListItemLine]') ||\n element.querySelector('[tnListItemSecondary]')\n ));\n\n // Check for trailing content\n this.hasTrailingContent.set(!!element.querySelector('[tnListItemTrailing]'));\n\n // Check for primary text directive\n this.hasPrimaryTextDirective.set(!!(\n element.querySelector('[tnListItemTitle]') ||\n element.querySelector('[tnListItemPrimary]')\n ));\n }\n\n hasSecondaryText = computed(() => {\n return this.hasSecondaryTextContent();\n });\n\n hasThirdText = computed(() => {\n // For now, we'll consider third line as having more than one secondary line\n const element = this.elementRef.nativeElement;\n const secondaryElements = element.querySelectorAll('[tnListItemLine], [tnListItemSecondary]');\n return secondaryElements.length > 1;\n });\n\n onClick(event: Event): void {\n if (!this.disabled() && this.clickable()) {\n this.itemClick.emit(event);\n }\n }\n}","<div class=\"tn-list-item__content\">\n <!-- Leading icon/avatar slot -->\n @if (hasLeadingContent()) {\n <div class=\"tn-list-item__leading\">\n <ng-content select=\"[tnListIcon], [tnListAvatar]\" />\n </div>\n }\n\n <!-- Text content -->\n <div class=\"tn-list-item__text\">\n <!-- Primary text -->\n <div class=\"tn-list-item__primary-text\">\n <ng-content select=\"[tnListItemTitle], [tnListItemPrimary]\" />\n @if (!hasPrimaryTextDirective()) {\n <ng-content />\n }\n </div>\n\n <!-- Secondary text -->\n @if (hasSecondaryTextContent()) {\n <div class=\"tn-list-item__secondary-text\">\n <ng-content select=\"[tnListItemLine], [tnListItemSecondary]\" />\n </div>\n }\n </div>\n\n <!-- Trailing content slot -->\n @if (hasTrailingContent()) {\n <div class=\"tn-list-item__trailing\">\n <ng-content select=\"[tnListItemTrailing]\" />\n </div>\n }\n</div>","\nimport { Component, input } from '@angular/core';\n\n@Component({\n selector: 'tn-list-subheader',\n standalone: true,\n imports: [],\n templateUrl: './list-subheader.component.html',\n styleUrl: './list-subheader.component.scss',\n host: {\n 'class': 'tn-list-subheader',\n '[class.tn-list-subheader--inset]': 'inset()',\n 'role': 'heading',\n 'aria-level': '3'\n }\n})\nexport class TnListSubheaderComponent {\n inset = input<boolean>(false);\n}","<ng-content />","import { Directive } from '@angular/core';\n\n@Directive({\n selector: '[tnListIcon]',\n standalone: true,\n host: {\n 'class': 'tn-list-icon'\n }\n})\nexport class TnListIconDirective {}\n\n@Directive({\n selector: '[tnListAvatar]',\n standalone: true,\n host: {\n 'class': 'tn-list-avatar'\n }\n})\nexport class TnListAvatarDirective {}\n\n@Directive({\n selector: '[tnListItemTitle]',\n standalone: true,\n host: {\n 'class': 'tn-list-item-title'\n }\n})\nexport class TnListItemTitleDirective {}\n\n@Directive({\n selector: '[tnListItemLine]',\n standalone: true,\n host: {\n 'class': 'tn-list-item-line'\n }\n})\nexport class TnListItemLineDirective {}\n\n@Directive({\n selector: '[tnListItemPrimary]',\n standalone: true,\n host: {\n 'class': 'tn-list-item-primary'\n }\n})\nexport class TnListItemPrimaryDirective {}\n\n@Directive({\n selector: '[tnListItemSecondary]',\n standalone: true,\n host: {\n 'class': 'tn-list-item-secondary'\n }\n})\nexport class TnListItemSecondaryDirective {}\n\n@Directive({\n selector: '[tnListItemTrailing]',\n standalone: true,\n host: {\n 'class': 'tn-list-item-trailing'\n }\n})\nexport class TnListItemTrailingDirective {}\n\n@Directive({\n selector: 'tn-divider, [tnDivider]',\n standalone: true,\n host: {\n 'class': 'tn-divider',\n 'role': 'separator'\n }\n})\nexport class TnDividerDirective {}","\nimport { Component, input } from '@angular/core';\n\n@Component({\n selector: 'tn-divider',\n standalone: true,\n imports: [],\n templateUrl: './divider.component.html',\n styleUrl: './divider.component.scss',\n host: {\n 'class': 'tn-divider',\n '[class.tn-divider--vertical]': 'vertical()',\n '[class.tn-divider--inset]': 'inset()',\n 'role': 'separator',\n '[attr.aria-orientation]': 'vertical() ? \"vertical\" : \"horizontal\"'\n }\n})\nexport class TnDividerComponent {\n vertical = input<boolean>(false);\n inset = input<boolean>(false);\n}","","\nimport type { AfterContentInit} from '@angular/core';\nimport { ElementRef, ChangeDetectorRef, inject } from '@angular/core';\nimport { Component, input, output, computed, signal, HostListener } from '@angular/core';\nimport { TnCheckboxComponent } from '../checkbox/checkbox.component';\n\n@Component({\n selector: 'tn-list-option',\n standalone: true,\n imports: [TnCheckboxComponent],\n templateUrl: './list-option.component.html',\n styleUrl: './list-option.component.scss',\n host: {\n 'class': 'tn-list-option',\n '[class.tn-list-option--selected]': 'effectiveSelected()',\n '[class.tn-list-option--disabled]': 'effectiveDisabled()',\n 'role': 'option',\n '[attr.aria-selected]': 'effectiveSelected()',\n '[attr.aria-disabled]': 'effectiveDisabled()'\n }\n})\nexport class TnListOptionComponent implements AfterContentInit {\n cdr = inject(ChangeDetectorRef);\n elementRef = inject(ElementRef);\n\n value = input<unknown>(undefined);\n selected = input<boolean>(false);\n disabled = input<boolean>(false);\n color = input<'primary' | 'accent' | 'warn'>('primary');\n\n selectionChange = output<boolean>();\n\n // Reference to parent selection list (set by parent)\n selectionList?: { onOptionSelectionChange: () => void };\n\n // Internal state for tracking selection (for uncontrolled usage)\n // Made public so parent tn-selection-list can control it\n internalSelected = signal<boolean | null>(null);\n internalDisabled = signal<boolean | null>(null);\n internalColor = signal<'primary' | 'accent' | 'warn' | null>(null);\n\n // Effective selected state (prefers internal state if set, otherwise uses input)\n effectiveSelected = computed(() => {\n const internal = this.internalSelected();\n return internal !== null ? internal : this.selected();\n });\n\n effectiveDisabled = computed(() => {\n const internal = this.internalDisabled();\n return internal !== null ? internal : this.disabled();\n });\n\n effectiveColor = computed(() => {\n const internal = this.internalColor();\n return internal !== null ? internal : this.color();\n });\n\n protected hasLeadingContent = signal<boolean>(false);\n protected hasSecondaryTextContent = signal<boolean>(false);\n protected hasPrimaryTextDirective = signal<boolean>(false);\n\n ngAfterContentInit(): void {\n this.checkContentProjection();\n }\n\n private checkContentProjection(): void {\n const element = this.elementRef.nativeElement;\n\n // Check for leading content (icons/avatars)\n this.hasLeadingContent.set(!!(\n element.querySelector('[tnListIcon]') ||\n element.querySelector('[tnListAvatar]')\n ));\n\n // Check for secondary text content\n this.hasSecondaryTextContent.set(!!(\n element.querySelector('[tnListItemLine]') ||\n element.querySelector('[tnListItemSecondary]')\n ));\n\n // Check for primary text directive\n this.hasPrimaryTextDirective.set(!!(\n element.querySelector('[tnListItemTitle]') ||\n element.querySelector('[tnListItemPrimary]')\n ));\n }\n\n @HostListener('click', ['$event'])\n onClick(_event: Event): void {\n if (this.effectiveDisabled()) {\n return;\n }\n\n this.toggle();\n }\n\n @HostListener('keydown.space', ['$event'])\n @HostListener('keydown.enter', ['$event'])\n onKeydown(event: Event): void {\n if (this.effectiveDisabled()) {\n return;\n }\n\n event.preventDefault();\n this.toggle();\n }\n\n toggle(): void {\n if (this.effectiveDisabled()) {\n return;\n }\n\n const newSelected = !this.effectiveSelected();\n this.internalSelected.set(newSelected);\n this.cdr.detectChanges();\n this.selectionChange.emit(newSelected);\n\n // Notify parent selection list\n if (this.selectionList) {\n this.selectionList.onOptionSelectionChange();\n }\n }\n}","<div class=\"tn-list-option__content\">\n <!-- Leading content (icons, avatars) -->\n @if (hasLeadingContent()) {\n <div class=\"tn-list-option__leading\">\n <ng-content select=\"[tnListIcon], [tnListAvatar]\" />\n </div>\n }\n\n <!-- Text content -->\n <div class=\"tn-list-option__text\">\n <div class=\"tn-list-option__primary-text\">\n <ng-content select=\"[tnListItemTitle], [tnListItemPrimary]\" />\n @if (!hasPrimaryTextDirective()) {\n <ng-content />\n }\n </div>\n\n @if (hasSecondaryTextContent()) {\n <div class=\"tn-list-option__secondary-text\">\n <ng-content select=\"[tnListItemLine], [tnListItemSecondary]\" />\n </div>\n }\n </div>\n\n <!-- Checkbox on the right -->\n <div class=\"tn-list-option__checkbox\">\n <tn-checkbox\n tabindex=\"-1\"\n [checked]=\"effectiveSelected()\"\n [disabled]=\"effectiveDisabled()\"\n [hideLabel]=\"true\"\n (click)=\"$event.stopPropagation()\" />\n </div>\n</div>","\nimport { Component, input, output, contentChildren, signal, computed, forwardRef, effect } from '@angular/core';\nimport type { ControlValueAccessor} from '@angular/forms';\nimport { NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { TnListOptionComponent } from '../list-option/list-option.component';\n\nexport interface TnSelectionChange {\n source: TnSelectionListComponent;\n options: TnListOptionComponent[];\n}\n\n@Component({\n selector: 'tn-selection-list',\n standalone: true,\n imports: [],\n templateUrl: './selection-list.component.html',\n styleUrl: './selection-list.component.scss',\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => TnSelectionListComponent),\n multi: true\n }\n ],\n host: {\n 'class': 'tn-selection-list',\n '[class.tn-selection-list--dense]': 'dense()',\n '[class.tn-selection-list--disabled]': 'isDisabled()',\n 'role': 'listbox',\n '[attr.aria-multiselectable]': 'multiple()'\n }\n})\nexport class TnSelectionListComponent implements ControlValueAccessor {\n dense = input<boolean>(false);\n disabled = input<boolean>(false);\n multiple = input<boolean>(true);\n color = input<'primary' | 'accent' | 'warn'>('primary');\n\n selectionChange = output<TnSelectionChange>();\n\n options = contentChildren(TnListOptionComponent, { descendants: true });\n\n private formDisabled = signal<boolean>(false);\n\n // Computed disabled state (combines input and form state)\n isDisabled = computed(() => this.disabled() || this.formDisabled());\n\n private onChange = (_: unknown[]) => {};\n private onTouched = () => {};\n\n constructor() {\n // Effect to update options when they change\n effect(() => {\n const opts = this.options();\n const currentColor = this.color();\n opts.forEach(option => {\n option.selectionList = this;\n option.internalColor.set(currentColor);\n });\n });\n }\n\n // ControlValueAccessor implementation\n writeValue(value: unknown[]): void {\n if (value) {\n const opts = this.options();\n opts.forEach(option => {\n option.internalSelected.set(value.includes(option.value()));\n });\n }\n }\n\n registerOnChange(fn: (value: unknown[]) => void): void {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n\n setDisabledState(isDisabled: boolean): void {\n this.formDisabled.set(isDisabled);\n const opts = this.options();\n opts.forEach(option => {\n option.internalDisabled.set(isDisabled);\n });\n }\n\n onOptionSelectionChange(): void {\n this.onTouched();\n const opts = this.options();\n const selectedValues = opts\n .filter(option => option.effectiveSelected())\n .map(option => option.value());\n\n this.onChange(selectedValues);\n\n this.selectionChange.emit({\n source: this,\n options: opts.filter(option => option.effectiveSelected())\n });\n }\n\n get selectedOptions(): TnListOptionComponent[] {\n const opts = this.options();\n return opts.filter(option => option.effectiveSelected());\n }\n}","<ng-content />","import { Directive, TemplateRef, input, contentChild, inject } from '@angular/core';\n\n@Directive({\n selector: '[tnHeaderCellDef]',\n standalone: true\n})\nexport class TnHeaderCellDefDirective {\n template = inject(TemplateRef<unknown>);\n}\n\n@Directive({\n selector: '[tnCellDef]',\n standalone: true\n})\nexport class TnCellDefDirective {\n template = inject(TemplateRef<unknown>);\n}\n\n@Directive({\n selector: '[tnColumnDef]',\n standalone: true,\n exportAs: 'tnColumnDef'\n})\nexport class TnTableColumnDirective {\n name = input.required<string>({ alias: 'tnColumnDef' });\n\n headerTemplate = contentChild(TnHeaderCellDefDirective, { read: TemplateRef });\n\n cellTemplate = contentChild(TnCellDefDirective, { read: TemplateRef });\n}","import { CommonModule } from '@angular/common';\nimport { ChangeDetectorRef, Component, input, contentChildren, computed, effect, inject } from '@angular/core';\nimport { TnTableColumnDirective } from '../table-column/table-column.directive';\n\nexport interface TnTableDataSource<T = unknown> {\n data?: T[];\n connect?(): T[];\n disconnect?(): void;\n}\n\n@Component({\n selector: 'tn-table',\n standalone: true,\n imports: [CommonModule],\n templateUrl: './table.component.html',\n styleUrl: './table.component.scss',\n host: {\n 'class': 'tn-table'\n }\n})\nexport class TnTableComponent<T = unknown> {\n dataSource = input<TnTableDataSource<T> | T[]>([]);\n displayedColumns = input<string[]>([]);\n\n columnDefs = contentChildren(TnTableColumnDirective);\n\n private columnDefMap = new Map<string, TnTableColumnDirective>();\n\n private cdr = inject(ChangeDetectorRef);\n\n constructor() {\n // Effect to process column defs whenever they change\n effect(() => {\n const columns = this.columnDefs();\n this.processColumnDefs(columns);\n });\n }\n\n private processColumnDefs(columns: readonly TnTableColumnDirective[]): void {\n this.columnDefMap.clear();\n columns.forEach(columnDef => {\n const name = columnDef.name();\n if (name) {\n this.columnDefMap.set(name, columnDef);\n }\n });\n this.cdr.detectChanges();\n }\n\n data = computed(() => {\n const source = this.dataSource();\n if (Array.isArray(source)) {\n return source;\n }\n return source?.data || source?.connect?.() || [];\n });\n\n getColumnDef(columnName: string): TnTableColumnDirective | undefined {\n return this.columnDefMap.get(columnName);\n }\n\n trackByIndex(index: number): number {\n return index;\n }\n\n getCellValue(row: T, column: string): unknown {\n return (row as Record<string, unknown>)[column];\n }\n}","<table class=\"tn-table__table\">\n <!-- Header Row -->\n <thead class=\"tn-table__header\">\n <tr class=\"tn-table__header-row\">\n @for (column of displayedColumns(); track $index) {\n <th\n class=\"tn-table__header-cell\"\n [attr.data-column]=\"column\">\n @if (getColumnDef(column)?.headerTemplate()) {\n <ng-container\n [ngTemplateOutlet]=\"getColumnDef(column)?.headerTemplate() || null\" />\n }\n @if (!getColumnDef(column)?.headerTemplate()) {\n <span>{{ column }}</span>\n }\n </th>\n }\n </tr>\n </thead>\n\n <!-- Data Rows -->\n <tbody class=\"tn-table__body\">\n @for (row of data(); track $index) {\n <tr class=\"tn-table__row\">\n @for (column of displayedColumns(); track $index) {\n <td\n class=\"tn-table__cell\"\n [attr.data-column]=\"column\">\n @if (getColumnDef(column)?.cellTemplate()) {\n <ng-container\n [ngTemplateOutlet]=\"getColumnDef(column)?.cellTemplate() || null\"\n [ngTemplateOutletContext]=\"{ $implicit: row, column: column }\" />\n }\n @if (!getColumnDef(column)?.cellTemplate()) {\n <span>{{ getCellValue(row, column) }}</span>\n }\n </td>\n }\n </tr>\n }\n </tbody>\n</table>","import { DataSource } from '@angular/cdk/collections';\nimport { CdkTree, CdkTreeModule } from '@angular/cdk/tree';\nimport type { FlatTreeControl } from '@angular/cdk/tree';\nimport { ChangeDetectorRef, IterableDiffers, ViewContainerRef, Component, ChangeDetectionStrategy, ViewEncapsulation, inject } from '@angular/core';\nimport type { Observable} from 'rxjs';\nimport { BehaviorSubject, merge } from 'rxjs';\nimport { map } from 'rxjs/operators';\n\n// Re-export CDK Tree types for convenience\nexport { FlatTreeControl } from '@angular/cdk/tree';\nexport { ArrayDataSource } from '@angular/cdk/collections';\n\n/** Flat node with expandable and level information */\nexport interface TnFlatTreeNode<T = unknown> {\n data: T;\n expandable: boolean;\n level: number;\n}\n\n/**\n * Tree flattener to convert normal type of node to node with children & level information.\n */\nexport class TnTreeFlattener<T, F> {\n constructor(\n public transformFunction: (node: T, level: number) => F,\n public getLevel: (node: F) => number,\n public isExpandable: (node: F) => boolean,\n public getChildren: (node: T) => T[] | null | undefined\n ) {}\n\n flattenNodes(structuredData: T[]): F[] {\n const resultNodes: F[] = [];\n structuredData.forEach(node => this._flattenNode(node, 0, resultNodes));\n return resultNodes;\n }\n\n private _flattenNode(node: T, level: number, resultNodes: F[]): void {\n const flatNode = this.transformFunction(node, level);\n resultNodes.push(flatNode);\n\n if (this.isExpandable(flatNode)) {\n const childrenNodes = this.getChildren(node);\n if (childrenNodes) {\n childrenNodes.forEach(child => this._flattenNode(child, level + 1, resultNodes));\n }\n }\n }\n}\n\n/**\n * Data source for flat tree.\n */\nexport class TnTreeFlatDataSource<T, F> extends DataSource<F> {\n private _flattenedData = new BehaviorSubject<F[]>([]);\n private _expandedData = new BehaviorSubject<F[]>([]);\n private _data = new BehaviorSubject<T[]>([]);\n\n constructor(\n private _treeControl: FlatTreeControl<F>,\n private _treeFlattener: TnTreeFlattener<T, F>\n ) {\n super();\n }\n\n get data() { return this._data.value; }\n set data(value: T[]) {\n this._data.next(value);\n this._flattenedData.next(this._treeFlattener.flattenNodes(this.data));\n this._treeControl.dataNodes = this._flattenedData.value;\n }\n\n connect(): Observable<F[]> {\n return merge(\n this._treeControl.expansionModel.changed,\n this._flattenedData\n ).pipe(map(() => {\n this._expandedData.next(this._getExpandedNodesWithLevel());\n return this._expandedData.value;\n }));\n }\n\n disconnect() {}\n\n private _getExpandedNodesWithLevel(): F[] {\n const expandedNodes: F[] = [];\n const flatNodes = this._flattenedData.value;\n\n for (let i = 0; i < flatNodes.length; i++) {\n const node = flatNodes[i];\n expandedNodes.push(node);\n\n if (!this._treeControl.isExpanded(node)) {\n // Skip children if node is not expanded\n const currentLevel = this._treeFlattener.getLevel(node);\n let j = i + 1;\n while (j < flatNodes.length && this._treeFlattener.getLevel(flatNodes[j]) > currentLevel) {\n j++;\n }\n i = j - 1;\n }\n }\n\n return expandedNodes;\n }\n}\n\n@Component({\n selector: 'tn-tree',\n standalone: true,\n imports: [CdkTreeModule],\n exportAs: 'tnTree',\n providers: [\n { provide: CdkTree, useExisting: TnTreeComponent }\n ],\n templateUrl: './tree.component.html',\n styleUrl: './tree.component.scss',\n host: {\n 'class': 'tn-tree',\n 'role': 'tree'\n },\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.Default,\n})\nexport class TnTreeComponent<T, K = T> extends CdkTree<T, K> {\n constructor() {\n super(inject(IterableDiffers), inject(ChangeDetectorRef), inject(ViewContainerRef));\n }\n}","<ng-container cdkTreeNodeOutlet />","import { CdkTree, CdkTreeNode, CDK_TREE_NODE_OUTLET_NODE, CdkTreeModule } from '@angular/cdk/tree';\nimport { ElementRef, ChangeDetectorRef, Component, ChangeDetectionStrategy, ViewEncapsulation, inject } from '@angular/core';\nimport { TnIconComponent } from '../icon/icon.component';\n\n@Component({\n selector: 'tn-tree-node',\n standalone: true,\n imports: [CdkTreeModule, TnIconComponent],\n exportAs: 'tnTreeNode',\n providers: [\n { provide: CdkTreeNode, useExisting: TnTreeNodeComponent }\n ],\n templateUrl: './tree-node.component.html',\n styleUrl: './tree-node.component.scss',\n host: {\n 'class': 'tn-tree-node-wrapper',\n '[attr.aria-level]': 'level + 1',\n '[attr.aria-expanded]': 'isExpandable ? isExpanded : null',\n 'role': 'treeitem'\n },\n encapsulation: ViewEncapsulation.Emulated,\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class TnTreeNodeComponent<T, K = T> extends CdkTreeNode<T, K> {\n constructor() {\n super(\n inject(ElementRef<HTMLElement>),\n inject(CdkTree, { optional: true }),\n inject(CDK_TREE_NODE_OUTLET_NODE, { optional: true }),\n inject(ChangeDetectorRef, { optional: true })\n );\n }\n\n /** The tree node's level in the tree */\n override get level(): number {\n return this._tree?.treeControl?.getLevel ? this._tree.treeControl.getLevel(this.data) : 0;\n }\n\n /** Whether the tree node is expandable */\n override get isExpandable(): boolean {\n return this._tree?.treeControl?.isExpandable ? this._tree.treeControl.isExpandable(this.data) : false;\n }\n\n /** Whether the tree node is expanded */\n override get isExpanded(): boolean {\n return this._tree?.treeControl ? this._tree.treeControl.isExpanded(this.data) : false;\n }\n}","<div class=\"tn-tree-node\"\n cdkTreeNodeToggle\n role=\"treeitem\"\n [class.tn-tree-node--expandable]=\"isExpandable\"\n [attr.aria-level]=\"level + 1\"\n [attr.aria-expanded]=\"isExpandable ? isExpanded : null\"\n [attr.aria-selected]=\"false\"\n [style.cursor]=\"isExpandable ? 'pointer' : 'default'\">\n \n <div class=\"tn-tree-node__content\">\n <!-- Arrow icon for expandable nodes -->\n @if (isExpandable) {\n <div\n class=\"tn-tree-node__toggle\"\n [class.tn-tree-node__toggle--expanded]=\"isExpanded\">\n <tn-icon\n library=\"mdi\"\n size=\"sm\"\n style=\"transition: transform 0.2s ease;\"\n [name]=\"isExpanded ? 'chevron-down' : 'chevron-right'\" />\n </div>\n }\n\n <!-- Spacer for non-expandable nodes -->\n @if (!isExpandable) {\n <div class=\"tn-tree-node__spacer\"></div>\n }\n \n <!-- Node content -->\n <div class=\"tn-tree-node__text\">\n <ng-content />\n </div>\n </div>\n</div>","import { CdkTreeNodeOutlet } from '@angular/cdk/tree';\nimport { Directive } from '@angular/core';\n\n@Directive({\n selector: '[tnTreeNodeOutlet]',\n standalone: true,\n hostDirectives: [{\n directive: CdkTreeNodeOutlet,\n inputs: [],\n outputs: []\n }]\n})\nexport class TnTreeNodeOutletDirective {}","import { CdkTree } from '@angular/cdk/tree';\nimport { CdkNestedTreeNode, CdkTreeNode, CDK_TREE_NODE_OUTLET_NODE, CdkTreeModule } from '@angular/cdk/tree';\nimport { ElementRef, ChangeDetectorRef, Component, ChangeDetectionStrategy, ViewEncapsulation, inject } from '@angular/core';\nimport { TnTreeNodeOutletDirective } from './tree-node-outlet.directive';\nimport { TnIconComponent } from '../icon/icon.component';\n\n@Component({\n selector: 'tn-nested-tree-node',\n standalone: true,\n imports: [CdkTreeModule, TnIconComponent, TnTreeNodeOutletDirective],\n exportAs: 'tnNestedTreeNode',\n providers: [\n { provide: CdkNestedTreeNode, useExisting: TnNestedTreeNodeComponent },\n { provide: CdkTreeNode, useExisting: TnNestedTreeNodeComponent }\n ],\n templateUrl: './nested-tree-node.component.html',\n styleUrl: './nested-tree-node.component.scss',\n host: {\n 'class': 'tn-nested-tree-node-wrapper',\n '[attr.aria-level]': 'level + 1',\n '[attr.aria-expanded]': 'isExpandable ? isExpanded : null',\n 'role': 'treeitem'\n },\n encapsulation: ViewEncapsulation.Emulated,\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class TnNestedTreeNodeComponent<T, K = T> extends CdkNestedTreeNode<T, K> {\n constructor() {\n super(\n inject(ElementRef<HTMLElement>),\n inject(CdkTree, { optional: true }),\n inject(CDK_TREE_NODE_OUTLET_NODE, { optional: true }),\n inject(ChangeDetectorRef, { optional: true })\n );\n }\n\n /** The tree node's level in the tree */\n override get level(): number {\n if (this._tree?.treeControl?.getLevel) {\n // Legacy treeControl approach\n return this._tree.treeControl.getLevel(this.data);\n } else if (this._tree && 'getLevel' in this._tree && typeof (this._tree as { getLevel?: (data: T) => number }).getLevel === 'function') {\n // Modern childrenAccessor approach - use tree's getLevel method\n return (this._tree as { getLevel: (data: T) => number }).getLevel(this.data);\n }\n return 0;\n }\n\n /** Whether the tree node is expandable */\n override get isExpandable(): boolean {\n if (this._tree?.treeControl?.isExpandable) {\n // Legacy treeControl approach\n return this._tree.treeControl.isExpandable(this.data);\n } else if (this._tree && 'childrenAccessor' in this._tree && (this._tree as { childrenAccessor?: (data: T) => T[] | undefined }).childrenAccessor) {\n // Modern childrenAccessor approach\n const childrenAccessor = (this._tree as { childrenAccessor: (data: T) => T[] | undefined }).childrenAccessor;\n const children = childrenAccessor(this.data);\n // Handle both array and observable results\n if (Array.isArray(children)) {\n return children.length > 0;\n }\n return false; // For now, don't handle Observable case\n }\n return false;\n }\n\n /** Whether the tree node is expanded */\n override get isExpanded(): boolean {\n if (this._tree?.treeControl) {\n // Legacy treeControl approach\n return this._tree.treeControl.isExpanded(this.data);\n } else if (this._tree && 'isExpanded' in this._tree && typeof (this._tree as { isExpanded?: (data: T) => boolean }).isExpanded === 'function') {\n // Modern childrenAccessor approach - use tree's isExpanded method\n return (this._tree as { isExpanded: (data: T) => boolean }).isExpanded(this.data);\n }\n return false;\n }\n}\n","<div class=\"tn-nested-tree-node__content\">\n <!-- Toggle button for expandable nodes (provided by component) -->\n @if (isExpandable) {\n <button\n class=\"tn-nested-tree-node__toggle\"\n cdkTreeNodeToggle\n type=\"button\"\n [class.tn-nested-tree-node__toggle--expanded]=\"isExpanded\"\n [attr.aria-label]=\"'Toggle node'\">\n <tn-icon\n library=\"mdi\"\n size=\"sm\"\n style=\"transition: transform 0.2s ease;\"\n [name]=\"isExpanded ? 'chevron-down' : 'chevron-right'\" />\n </button>\n }\n\n <!-- Spacer for non-expandable nodes to maintain alignment -->\n @if (!isExpandable) {\n <div class=\"tn-nested-tree-node__spacer\"></div>\n }\n\n <!-- Consumer content -->\n <ng-content />\n</div>\n\n<!-- Children container -->\n@if (isExpandable) {\n <div class=\"tn-nested-tree-node-container\" role=\"group\" [class.tn-tree-invisible]=\"!isExpanded\">\n <ng-content select=\"[slot=children]\" />\n </div>\n}","export enum ModifierKeys {\n COMMAND = '⌘',\n CMD = '⌘',\n CTRL = 'Ctrl',\n CONTROL = 'Ctrl',\n ALT = '⌥',\n OPTION = '⌥',\n OPT = '⌥',\n SHIFT = '⇧',\n META = '⌘',\n SUPER = '⌘',\n}\n\nexport enum WindowsModifierKeys {\n CTRL = 'Ctrl',\n CONTROL = 'Ctrl',\n ALT = 'Alt',\n SHIFT = 'Shift',\n WIN = 'Win',\n WINDOWS = 'Win',\n}\n\nexport enum LinuxModifierKeys {\n CTRL = 'Ctrl',\n CONTROL = 'Ctrl',\n ALT = 'Alt',\n SHIFT = 'Shift',\n SUPER = 'Super',\n META = 'Meta',\n}\n\nexport type PlatformType = 'mac' | 'windows' | 'linux' | 'auto';","export enum CommonShortcuts {\n // File operations\n NEW = '⌘N',\n OPEN = '⌘O',\n SAVE = '⌘S',\n SAVE_AS = '⇧⌘S',\n PRINT = '⌘P',\n CLOSE = '⌘W',\n QUIT = '⌘Q',\n \n // Edit operations\n UNDO = '⌘Z',\n REDO = '⇧⌘Z',\n CUT = '⌘X',\n COPY = '⌘C',\n PASTE = '⌘V',\n SELECT_ALL = '⌘A',\n \n // Search operations\n FIND = '⌘F',\n FIND_NEXT = '⌘G',\n FIND_PREVIOUS = '⇧⌘G',\n REPLACE = '⌥⌘F',\n \n // View operations\n ZOOM_IN = '⌘=',\n ZOOM_OUT = '⌘-',\n ZOOM_RESET = '⌘0',\n FULL_SCREEN = '⌃⌘F',\n \n // Navigation\n BACK = '⌘[',\n FORWARD = '⌘]',\n RELOAD = '⌘R',\n HOME = '⌘H',\n \n // Window operations\n NEW_WINDOW = '⇧⌘N',\n NEW_TAB = '⌘T',\n CLOSE_TAB = '⌘W',\n MINIMIZE = '⌘M',\n \n // Application\n PREFERENCES = '⌘,',\n HELP = '⌘?',\n ABOUT = '⌘I',\n}\n\nexport enum WindowsShortcuts {\n // File operations\n NEW = 'Ctrl+N',\n OPEN = 'Ctrl+O',\n SAVE = 'Ctrl+S',\n SAVE_AS = 'Ctrl+Shift+S',\n PRINT = 'Ctrl+P',\n CLOSE = 'Ctrl+W',\n QUIT = 'Alt+F4',\n \n // Edit operations\n UNDO = 'Ctrl+Z',\n REDO = 'Ctrl+Y',\n CUT = 'Ctrl+X',\n COPY = 'Ctrl+C',\n PASTE = 'Ctrl+V',\n SELECT_ALL = 'Ctrl+A',\n \n // Search operations\n FIND = 'Ctrl+F',\n FIND_NEXT = 'F3',\n FIND_PREVIOUS = 'Shift+F3',\n REPLACE = 'Ctrl+H',\n \n // View operations\n ZOOM_IN = 'Ctrl+=',\n ZOOM_OUT = 'Ctrl+-',\n ZOOM_RESET = 'Ctrl+0',\n FULL_SCREEN = 'F11',\n \n // Navigation\n BACK = 'Alt+Left',\n FORWARD = 'Alt+Right',\n RELOAD = 'Ctrl+R',\n HOME = 'Alt+Home',\n \n // Window operations\n NEW_WINDOW = 'Ctrl+Shift+N',\n NEW_TAB = 'Ctrl+T',\n CLOSE_TAB = 'Ctrl+W',\n MINIMIZE = 'Win+M',\n \n // Application\n PREFERENCES = 'Ctrl+,',\n HELP = 'F1',\n ABOUT = 'Alt+H+A',\n}\n\nexport enum LinuxShortcuts {\n // File operations\n NEW = 'Ctrl+N',\n OPEN = 'Ctrl+O',\n SAVE = 'Ctrl+S',\n SAVE_AS = 'Ctrl+Shift+S',\n PRINT = 'Ctrl+P',\n CLOSE = 'Ctrl+W',\n QUIT = 'Ctrl+Q',\n \n // Edit operations\n UNDO = 'Ctrl+Z',\n REDO = 'Ctrl+Shift+Z',\n CUT = 'Ctrl+X',\n COPY = 'Ctrl+C',\n PASTE = 'Ctrl+V',\n SELECT_ALL = 'Ctrl+A',\n \n // Search operations\n FIND = 'Ctrl+F',\n FIND_NEXT = 'Ctrl+G',\n FIND_PREVIOUS = 'Ctrl+Shift+G',\n REPLACE = 'Ctrl+H',\n \n // View operations\n ZOOM_IN = 'Ctrl+=',\n ZOOM_OUT = 'Ctrl+-',\n ZOOM_RESET = 'Ctrl+0',\n FULL_SCREEN = 'F11',\n \n // Navigation\n BACK = 'Alt+Left',\n FORWARD = 'Alt+Right',\n RELOAD = 'Ctrl+R',\n HOME = 'Alt+Home',\n \n // Window operations\n NEW_WINDOW = 'Ctrl+Shift+N',\n NEW_TAB = 'Ctrl+T',\n CLOSE_TAB = 'Ctrl+W',\n MINIMIZE = 'Ctrl+H',\n \n // Application\n PREFERENCES = 'Ctrl+,',\n HELP = 'F1',\n ABOUT = 'Ctrl+I',\n}","import type { PlatformType } from '../enums/modifier-keys.enum';\nimport { ModifierKeys, WindowsModifierKeys, LinuxModifierKeys } from '../enums/modifier-keys.enum';\n\nexport class ShortcutBuilder {\n private keysList: string[] = [];\n private targetPlatform: PlatformType = 'mac';\n\n constructor(platform: PlatformType = 'mac') {\n this.targetPlatform = platform;\n }\n\n /**\n * Add Command key (⌘ on Mac, Ctrl on Windows/Linux)\n */\n command(): ShortcutBuilder {\n switch (this.targetPlatform) {\n case 'mac':\n this.keysList.push(ModifierKeys.COMMAND);\n break;\n case 'windows':\n this.keysList.push(WindowsModifierKeys.CTRL);\n break;\n case 'linux':\n this.keysList.push(LinuxModifierKeys.CTRL);\n break;\n default:\n this.keysList.push(ModifierKeys.COMMAND);\n }\n return this;\n }\n\n /**\n * Add Ctrl key\n */\n ctrl(): ShortcutBuilder {\n switch (this.targetPlatform) {\n case 'mac':\n this.keysList.push('⌃');\n break;\n case 'windows':\n this.keysList.push(WindowsModifierKeys.CTRL);\n break;\n case 'linux':\n this.keysList.push(LinuxModifierKeys.CTRL);\n break;\n default:\n this.keysList.push('⌃');\n }\n return this;\n }\n\n /**\n * Add Shift key (⇧ on Mac, Shift on Windows/Linux)\n */\n shift(): ShortcutBuilder {\n switch (this.targetPlatform) {\n case 'mac':\n this.keysList.push(ModifierKeys.SHIFT);\n break;\n case 'windows':\n this.keysList.push(WindowsModifierKeys.SHIFT);\n break;\n case 'linux':\n this.keysList.push(LinuxModifierKeys.SHIFT);\n break;\n default:\n this.keysList.push(ModifierKeys.SHIFT);\n }\n return this;\n }\n\n /**\n * Add Alt/Option key (⌥ on Mac, Alt on Windows/Linux)\n */\n alt(): ShortcutBuilder {\n switch (this.targetPlatform) {\n case 'mac':\n this.keysList.push(ModifierKeys.ALT);\n break;\n case 'windows':\n this.keysList.push(WindowsModifierKeys.ALT);\n break;\n case 'linux':\n this.keysList.push(LinuxModifierKeys.ALT);\n break;\n default:\n this.keysList.push(ModifierKeys.ALT);\n }\n return this;\n }\n\n /**\n * Add Option key (alias for alt on Mac)\n */\n option(): ShortcutBuilder {\n return this.alt();\n }\n\n /**\n * Add Windows/Super key\n */\n windows(): ShortcutBuilder {\n switch (this.targetPlatform) {\n case 'mac':\n this.keysList.push(ModifierKeys.COMMAND);\n break;\n case 'windows':\n this.keysList.push(WindowsModifierKeys.WINDOWS);\n break;\n case 'linux':\n this.keysList.push(LinuxModifierKeys.SUPER);\n break;\n default:\n this.keysList.push(ModifierKeys.COMMAND);\n }\n return this;\n }\n\n /**\n * Add a regular key (letter, number, or special key)\n */\n key(key: string): ShortcutBuilder {\n this.keysList.push(key);\n return this;\n }\n\n /**\n * Add multiple keys at once\n */\n keys(...keys: string[]): ShortcutBuilder {\n this.keysList.push(...keys);\n return this;\n }\n\n /**\n * Reset the builder to start over\n */\n reset(): ShortcutBuilder {\n this.keysList = [];\n return this;\n }\n\n /**\n * Build the final shortcut string\n */\n build(): string {\n if (this.keysList.length === 0) {\n return '';\n }\n\n if (this.targetPlatform === 'mac') {\n // Mac style: no separators between keys\n return this.keysList.join('');\n } else {\n // Windows/Linux style: + separators between keys\n return this.keysList.join('+');\n }\n }\n\n /**\n * Get the current keys array (for debugging)\n */\n getKeys(): string[] {\n return [...this.keysList];\n }\n\n /**\n * Get the current platform\n */\n getPlatform(): PlatformType {\n return this.targetPlatform;\n }\n\n /**\n * Change the target platform\n */\n setPlatform(platform: PlatformType): ShortcutBuilder {\n this.targetPlatform = platform;\n return this;\n }\n}\n\n/**\n * Create a new ShortcutBuilder instance\n */\nexport function createShortcut(platform: PlatformType = 'mac'): ShortcutBuilder {\n return new ShortcutBuilder(platform);\n}\n\n/**\n * Quick builder functions for common patterns\n */\nexport const QuickShortcuts = {\n /**\n * Create a simple Command+Key shortcut\n */\n cmd(key: string, platform: PlatformType = 'mac'): string {\n return createShortcut(platform).command().key(key).build();\n },\n\n /**\n * Create a Shift+Command+Key shortcut\n */\n shiftCmd(key: string, platform: PlatformType = 'mac'): string {\n return createShortcut(platform).shift().command().key(key).build();\n },\n\n /**\n * Create an Alt+Command+Key shortcut\n */\n altCmd(key: string, platform: PlatformType = 'mac'): string {\n return createShortcut(platform).alt().command().key(key).build();\n },\n\n /**\n * Create a Ctrl+Key shortcut\n */\n ctrl(key: string, platform: PlatformType = 'mac'): string {\n return createShortcut(platform).ctrl().key(key).build();\n },\n\n /**\n * Create an Alt+Key shortcut\n */\n alt(key: string, platform: PlatformType = 'mac'): string {\n return createShortcut(platform).alt().key(key).build();\n },\n};"," \nexport const kb = 1000;\nexport const Mb = 1000 ** 2;\nexport const Gb = 1000 ** 3;\nexport const Tb = 1000 ** 4;\nexport const Pb = 1000 ** 5;\nexport const Eb = 1000 ** 6;\nexport const Zb = 1000 ** 7;\nexport const Yb = 1000 ** 8;\n"," \nexport const KiB = 1024;\nexport const MiB = 1024 ** 2;\nexport const GiB = 1024 ** 3;\nexport const TiB = 1024 ** 4;\nexport const PiB = 1024 ** 5;\nexport const EiB = 1024 ** 6;\nexport const ZiB = 1024 ** 7;\nexport const YiB = 1024 ** 8;\n","import {\n Gb, kb, Mb, Tb, Pb, Eb, Zb, Yb,\n} from './bits.constant';\nimport {\n GiB, KiB, MiB, PiB, TiB, EiB, ZiB, YiB,\n} from './bytes.constant';\n\nexport function normalizeFileSize(\n value: number,\n baseUnit: 'b' | 'B' = 'B',\n base: 10 | 2 = 2,\n): [formatted: number, unit: string] {\n return base === 10 ? normalizeFileSizeBase10(value, baseUnit) : normalizeFileSizeBase2(value, baseUnit);\n}\n\nexport function buildNormalizedFileSize(\n value: number,\n baseUnit: 'b' | 'B' = 'B',\n base: 10 | 2 = 2,\n): string {\n const [formatted, unit] = normalizeFileSize(value, baseUnit, base);\n return `${formatted} ${unit}`;\n}\n\nexport function convertStringDiskSizeToBytes(input: string): number | null {\n const sizeRegex = /^(\\d+(\\.\\d+)?)([KMGTP](?:i)?(?:B)?)?$/i;\n const match = input.replace(/\\s+/g, '').match(sizeRegex);\n\n if (!match) {\n return null;\n }\n\n const value = parseFloat(match[1]);\n let unit = match[3]?.toUpperCase() || '';\n\n const units = [\n 'B', 'Gb', 'kb', 'Mb', 'Tb', 'Pb', 'Eb', 'Zb', 'Yb',\n 'GiB', 'KiB', 'MiB', 'PiB', 'TiB', 'EiB', 'ZiB', 'YiB',\n ];\n\n unit = units.find((item) => item.toUpperCase().includes(unit.toUpperCase())) || 'B';\n\n const unitMultipliers: Record<string, number> = {\n B: 1,\n KIB: KiB,\n MIB: MiB,\n GIB: GiB,\n TIB: TiB,\n PIB: PiB,\n EIB: EiB,\n ZIB: ZiB,\n YIB: YiB,\n KB: KiB,\n MB: MiB,\n GB: GiB,\n TB: TiB,\n PB: PiB,\n EB: EiB,\n ZB: ZiB,\n YB: YiB,\n };\n\n return value * (unitMultipliers[unit.toUpperCase()] || 1);\n}\n\nfunction normalizeFileSizeBase2(value: number, baseUnit: 'b' | 'B'): [formatted: number, unit: string] {\n let formatted = value;\n let increment = 1;\n while (formatted >= KiB && increment < YiB) {\n increment *= KiB;\n formatted = value / increment;\n }\n formatted = Math.round((formatted + Number.EPSILON) * 100) / 100;\n switch (increment) {\n case KiB:\n return [formatted, 'Ki' + baseUnit];\n case MiB:\n return [formatted, 'Mi' + baseUnit];\n case GiB:\n return [formatted, 'Gi' + baseUnit];\n case TiB:\n return [formatted, 'Ti' + baseUnit];\n case PiB:\n return [formatted, 'Pi' + baseUnit];\n case EiB:\n return [formatted, 'Ei' + baseUnit];\n case ZiB:\n return [formatted, 'Zi' + baseUnit];\n case YiB:\n return [formatted, 'Yi' + baseUnit];\n default:\n return [formatted, baseUnit];\n }\n}\n\nfunction normalizeFileSizeBase10(value: number, baseUnit: 'b' | 'B'): [formatted: number, unit: string] {\n let formatted = value;\n let increment = 1;\n while (formatted >= kb && increment < Yb) {\n increment *= kb;\n formatted = value / increment;\n }\n formatted = Math.round((formatted + Number.EPSILON) * 100) / 100;\n switch (increment) {\n case kb:\n return [formatted, 'k' + baseUnit];\n case Mb:\n return [formatted, 'M' + baseUnit];\n case Gb:\n return [formatted, 'G' + baseUnit];\n case Tb:\n return [formatted, 'T' + baseUnit];\n case Pb:\n return [formatted, 'P' + baseUnit];\n case Eb:\n return [formatted, 'E' + baseUnit];\n case Zb:\n return [formatted, 'Z' + baseUnit];\n case Yb:\n return [formatted, 'Y' + baseUnit];\n default:\n return [formatted, baseUnit];\n }\n}\n","import type { PipeTransform } from '@angular/core';\nimport { Pipe } from '@angular/core';\nimport { buildNormalizedFileSize } from './file-size.utils';\n\n@Pipe({\n name: 'tnFileSize',\n standalone: true,\n})\nexport class FileSizePipe implements PipeTransform {\n transform(value: number): string {\n return buildNormalizedFileSize(value, 'B', 2);\n }\n}\n","import type { PipeTransform } from '@angular/core';\nimport { Pipe } from '@angular/core';\n\n@Pipe({\n name: 'tnStripMntPrefix',\n standalone: true,\n})\nexport class StripMntPrefixPipe implements PipeTransform {\n transform(path: string | null | undefined): string {\n if (!path) {return '';}\n\n if (path.startsWith('/mnt/')) {\n return path.substring(4); // Remove \"/mnt\" prefix -> \"/mnt/foo\" becomes \"/foo\"\n } else if (path === '/mnt') {\n return '/'; // Show root as just \"/\"\n }\n\n return path;\n }\n}\n","import type { PipeTransform } from '@angular/core';\nimport { Pipe } from '@angular/core';\nimport type { PathSegment } from '../../file-picker/file-picker.interfaces';\n\n@Pipe({\n name: 'tnTruncatePath',\n standalone: true,\n})\nexport class TruncatePathPipe implements PipeTransform {\n transform(path: string): PathSegment[] {\n // At root /mnt, show just \"/\"\n if (!path || path === '/mnt') {\n return [{ name: '/', path: '/mnt' }];\n }\n\n // For subdirectories, show \"..\" (parent) and current directory\n const segments: PathSegment[] = [];\n\n // Calculate parent path\n const lastSlashIndex = path.lastIndexOf('/');\n const parentPath = lastSlashIndex > 0 ? path.substring(0, lastSlashIndex) : '/mnt';\n\n // Get current directory name\n const currentDirName = path.substring(lastSlashIndex + 1);\n\n // Add parent navigation (..) and current directory\n segments.push({ name: '..', path: parentPath });\n segments.push({ name: currentDirName, path: path });\n\n return segments;\n }\n}\n","\nimport { Component, input, ChangeDetectionStrategy, ViewEncapsulation, computed } from '@angular/core';\n\nexport type SpinnerMode = 'determinate' | 'indeterminate';\n\n@Component({\n selector: 'tn-spinner',\n standalone: true,\n imports: [],\n templateUrl: './spinner.component.html',\n styleUrls: ['./spinner.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n host: {\n 'class': 'tn-spinner',\n '[class.tn-spinner-indeterminate]': 'mode() === \"indeterminate\"',\n '[class.tn-spinner-determinate]': 'mode() === \"determinate\"',\n '[attr.aria-valuenow]': 'mode() === \"determinate\" ? value() : null',\n '[attr.aria-valuemin]': 'mode() === \"determinate\" ? 0 : null',\n '[attr.aria-valuemax]': 'mode() === \"determinate\" ? 100 : null',\n 'role': 'progressbar',\n '[attr.aria-label]': 'ariaLabel() || null',\n '[attr.aria-labelledby]': 'ariaLabelledby() || null'\n }\n})\nexport class TnSpinnerComponent {\n mode = input<SpinnerMode>('indeterminate');\n value = input<number>(0);\n diameter = input<number>(40);\n strokeWidth = input<number>(4);\n ariaLabel = input<string | null>(null);\n ariaLabelledby = input<string | null>(null);\n\n radius = computed(() => {\n return (this.diameter() - this.strokeWidth()) / 2;\n });\n\n circumference = computed(() => {\n return 2 * Math.PI * this.radius();\n });\n\n strokeDasharray = computed(() => {\n return `${this.circumference()} ${this.circumference()}`;\n });\n\n strokeDashoffset = computed(() => {\n if (this.mode() === 'indeterminate') {\n return 0;\n }\n const progress = Math.max(0, Math.min(100, this.value()));\n return this.circumference() - (progress / 100) * this.circumference();\n });\n\n viewBox = computed(() => {\n const size = this.diameter();\n return `0 0 ${size} ${size}`;\n });\n}","<svg\n class=\"tn-spinner-svg\"\n [attr.width]=\"diameter()\"\n [attr.height]=\"diameter()\"\n [attr.viewBox]=\"viewBox()\">\n <circle\n class=\"tn-spinner-circle\"\n fill=\"none\"\n [attr.cx]=\"diameter() / 2\"\n [attr.cy]=\"diameter() / 2\"\n [attr.r]=\"radius()\"\n [attr.stroke-width]=\"strokeWidth()\"\n [attr.stroke-dasharray]=\"strokeDasharray()\"\n [attr.stroke-dashoffset]=\"strokeDashoffset()\" />\n</svg>","import type { OnInit, OnDestroy, AfterViewInit} from '@angular/core';\nimport { ElementRef, Component, input, ViewEncapsulation, ChangeDetectionStrategy, inject } from '@angular/core';\n\n@Component({\n selector: 'tn-branded-spinner',\n standalone: true,\n templateUrl: './branded-spinner.component.html',\n styleUrls: ['./branded-spinner.component.scss'], \n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n host: {\n 'class': 'tn-branded-spinner',\n 'role': 'progressbar',\n '[attr.aria-label]': 'ariaLabel() || \"Loading...\"'\n }\n})\nexport class TnBrandedSpinnerComponent implements OnInit, OnDestroy, AfterViewInit {\n ariaLabel = input<string | null>(null);\n\n private paths: SVGPathElement[] = [];\n private animationId: number | null = null;\n private isAnimating = false;\n\n // Animation timing constants from reference implementation\n private readonly duration = 300; // time to draw each individual path\n private readonly delayStep = 500; // delay between starting each path\n private readonly cyclePause = 1200; // pause after all paths are drawn\n private readonly emptyPause = 100; // brief pause with no strokes\n\n private elementRef = inject(ElementRef<HTMLElement>);\n\n ngOnInit(): void {\n this.isAnimating = true;\n }\n\n ngAfterViewInit(): void {\n this.paths = Array.from(this.elementRef.nativeElement.querySelectorAll('path.exploded'));\n this.startProgressLoop();\n }\n\n ngOnDestroy(): void {\n this.isAnimating = false;\n if (this.animationId) {\n cancelAnimationFrame(this.animationId);\n this.animationId = null;\n }\n }\n\n private startProgressLoop(): void {\n if (!this.isAnimating || this.paths.length === 0) {return;}\n\n // Reset all paths to invisible\n this.paths.forEach((path) => {\n // Check if getTotalLength exists (not available in Jest/JSDom)\n const length = typeof path.getTotalLength === 'function' ? path.getTotalLength() : 200;\n path.style.strokeDasharray = length.toString();\n path.style.strokeDashoffset = length.toString();\n path.style.fillOpacity = '0';\n });\n\n this.animateSequence();\n }\n\n private animateSequence(): void {\n if (!this.isAnimating) {return;}\n\n let startTime: number;\n\n const animate = (timestamp: number) => {\n if (!this.isAnimating) {return;}\n\n if (!startTime) {startTime = timestamp;}\n const elapsed = timestamp - startTime;\n\n let allDone = true;\n\n // Animate each path with staggered delays\n this.paths.forEach((path, index) => {\n const delay = index * this.delayStep;\n // Check if getTotalLength exists (not available in Jest/JSDom)\n const length = typeof path.getTotalLength === 'function' ? path.getTotalLength() : 200;\n\n if (elapsed < delay) {\n allDone = false;\n return;\n }\n\n const progress = Math.min((elapsed - delay) / this.duration, 1);\n const offset = this.tween(length, 0, progress);\n path.style.strokeDashoffset = offset.toString();\n\n if (progress < 1) {\n allDone = false;\n }\n });\n\n if (!allDone) {\n this.animationId = requestAnimationFrame(animate);\n } else {\n // All paths drawn, now pause with complete logo\n setTimeout(() => {\n if (this.isAnimating) {\n // Hide all paths briefly\n this.paths.forEach((path) => {\n // Check if getTotalLength exists (not available in Jest/JSDom)\n const length = typeof path.getTotalLength === 'function' ? path.getTotalLength() : 200;\n path.style.strokeDashoffset = length.toString();\n });\n\n // Start next cycle after brief empty pause\n setTimeout(() => {\n if (this.isAnimating) {\n this.startProgressLoop();\n }\n }, this.emptyPause);\n }\n }, this.cyclePause);\n }\n };\n\n this.animationId = requestAnimationFrame(animate);\n }\n\n private tween(from: number, to: number, progress: number): number {\n return from + (to - from) * progress;\n }\n}","<div class=\"tn-branded-spinner-container\">\n <svg \n viewBox=\"0 -7 62 62\" \n preserveAspectRatio=\"xMidYMid meet\" \n xmlns=\"http://www.w3.org/2000/svg\"\n class=\"tn-branded-spinner-logo\">\n \n <!-- EXPLODED LOGO PATHS -->\n <path class=\"exploded center\" fill=\"#AFADAE\" d=\"m41.79 24.13-11.26 6.51-11.28-6.51 11.28-6.51 11.26 6.51Z\" />\n <path class=\"exploded top-left\" fill=\"#35BEEB\" d=\"M27.86 0v13.01l-13.93 8.04-11.28-6.5L27.86 0Z\" />\n <path class=\"exploded bottom-right\" fill=\"#35BEEB\" d=\"M61.03 19.16v13.01L33.19 48.25V35.24l27.84-16.08Z\" />\n <path class=\"exploded bottom-left\" fill=\"#0A95D3\" d=\"M27.86 35.24v13L0 32.17v-13l12.59 7.26s.03.02.05.03l15.23 8.79-.01-.01Z\" />\n <path class=\"exploded top-right\" fill=\"#0A95D3\" d=\"m58.38 14.55-11.27 6.51-13.92-8.05V0l25.19 14.55Z\" />\n </svg>\n</div>","\nimport { Component, input, ChangeDetectionStrategy, computed } from '@angular/core';\n\nexport type ProgressBarMode = 'determinate' | 'indeterminate' | 'buffer';\n\n@Component({\n selector: 'tn-progress-bar',\n standalone: true,\n imports: [],\n templateUrl: './progress-bar.component.html',\n styleUrls: ['./progress-bar.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n 'class': 'tn-progress-bar',\n '[class.tn-progress-bar-determinate]': 'mode() === \"determinate\"',\n '[class.tn-progress-bar-indeterminate]': 'mode() === \"indeterminate\"',\n '[class.tn-progress-bar-buffer]': 'mode() === \"buffer\"',\n 'role': 'progressbar',\n '[attr.aria-valuenow]': 'mode() === \"determinate\" ? value() : null',\n '[attr.aria-valuemin]': 'mode() === \"determinate\" ? 0 : null',\n '[attr.aria-valuemax]': 'mode() === \"determinate\" ? 100 : null',\n '[attr.aria-label]': 'ariaLabel() || null',\n '[attr.aria-labelledby]': 'ariaLabelledby() || null'\n }\n})\nexport class TnProgressBarComponent {\n mode = input<ProgressBarMode>('determinate');\n value = input<number>(0);\n bufferValue = input<number>(0);\n ariaLabel = input<string | null>(null);\n ariaLabelledby = input<string | null>(null);\n\n /**\n * Gets the transform value for the primary progress bar\n */\n primaryTransform = computed(() => {\n if (this.mode() === 'determinate' || this.mode() === 'buffer') {\n const clampedValue = Math.max(0, Math.min(100, this.value()));\n const scale = clampedValue / 100;\n return `scaleX(${scale})`;\n }\n // For indeterminate mode, don't apply inline transform - CSS animation handles it\n if (this.mode() === 'indeterminate') {\n return '';\n }\n return 'scaleX(0)';\n });\n\n /**\n * Gets the positioning and size for the buffer dots animation\n */\n bufferStyles = computed(() => {\n if (this.mode() === 'buffer') {\n const buffer = Math.max(0, Math.min(100, this.bufferValue()));\n\n // Buffer takes up bufferValue% of total width, positioned from right\n return {\n width: `${buffer}%`,\n right: '0px'\n };\n }\n return { width: '0%', right: '0px' };\n });\n\n /**\n * Gets the transform value for the buffer progress bar (deprecated - use bufferStyles)\n */\n bufferTransform = computed(() => {\n return 'scaleX(0)'; // Hide the old buffer bar\n });\n}","<!-- Background/buffer layer -->\n<div class=\"tn-progress-bar-buffer\" aria-hidden=\"true\">\n <!-- Buffer bar hidden in new implementation -->\n <!-- Buffer dots for buffer mode -->\n @if (mode() === 'buffer') {\n <div class=\"tn-progress-bar-buffer-dots\"\n [style.width]=\"bufferStyles().width\"\n [style.right]=\"bufferStyles().right\"></div>\n }\n</div>\n\n<!-- Primary bar -->\n<div class=\"tn-progress-bar-bar tn-progress-bar-primary-bar\" aria-hidden=\"true\">\n <span class=\"tn-progress-bar-bar-inner\"\n [style.transform]=\"primaryTransform()\"></span>\n</div>\n\n<!-- Secondary bar (for indeterminate mode) -->\n@if (mode() === 'indeterminate') {\n <div class=\"tn-progress-bar-bar tn-progress-bar-secondary-bar\" aria-hidden=\"true\">\n <span class=\"tn-progress-bar-bar-inner\"></span>\n </div>\n}\n\n","import type {\n AfterViewInit,\n ElementRef,\n OnDestroy\n} from '@angular/core';\nimport {\n Component,\n input,\n computed,\n viewChild,\n ChangeDetectionStrategy\n} from '@angular/core';\n\n@Component({\n selector: 'tn-particle-progress-bar',\n standalone: true,\n templateUrl: './particle-progress-bar.component.html',\n styleUrls: ['./particle-progress-bar.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n 'class': 'tn-particle-progress-bar'\n }\n})\nexport class TnParticleProgressBarComponent implements AfterViewInit, OnDestroy {\n speed = input<'slow' | 'medium' | 'fast' | 'ludicrous'>('medium');\n color = input<string>('hsla(198, 100%, 42%, 1)');\n height = input<number>(40);\n width = input<number>(600);\n fill = input<number>(300);\n\n canvasRef = viewChild.required<ElementRef<HTMLCanvasElement>>('canvas');\n\n private ctx!: CanvasRenderingContext2D;\n private particles: Array<{\n x: number;\n y: number;\n radius: number;\n speed: number;\n opacity: number;\n color: string;\n }> = [];\n private shades: string[] = [];\n private animationId?: number;\n\n private speedConfig = computed(() => {\n const baseConfig = {\n slow: { speedMin: 0.5, speedMax: 1.5 },\n medium: { speedMin: 1, speedMax: 2.5 },\n fast: { speedMin: 2, speedMax: 4 },\n ludicrous: { speedMin: 4, speedMax: 8 }\n }[this.speed()];\n\n // Calculate dynamic fade rate based on travel distance\n // Particles should fade out over the full travel distance (minus border radius buffer)\n const travelDistance = Math.max(this.fill() - 12, 20); // Distance from x=50 to x=50+fill-12 (avoid border radius), minimum 20px\n const averageSpeed = (baseConfig.speedMin + baseConfig.speedMax) / 2;\n const estimatedFrames = travelDistance / averageSpeed; // Approximate frames to travel the distance\n const fadeRate = 1 / estimatedFrames; // Fade from 1 to 0 over the travel distance\n\n return {\n ...baseConfig,\n fadeRate: Math.max(fadeRate, 0.001) // Minimum fade rate to prevent too slow fading\n };\n });\n\n /**\n * Calculate the gradient offset so the transition only happens in the last 100px\n */\n gradientTransitionStart = computed(() => {\n if (this.fill() <= 100) {\n return 0; // If fill is 100px or less, transition starts immediately\n }\n return ((this.fill() - 100) / this.fill()) * 100; // Transparent until last 100px\n });\n\n /**\n * Get the color for the progress bar (uses the exact same color as input)\n */\n progressBarColor = computed(() => {\n return this.color();\n });\n\n ngAfterViewInit(): void {\n this.ctx = this.canvasRef().nativeElement.getContext('2d')!;\n this.shades = this.generateDarkerShades(this.color(), 4);\n this.animate();\n }\n\n ngOnDestroy(): void {\n if (this.animationId) {\n cancelAnimationFrame(this.animationId);\n }\n }\n\n private animate() {\n this.ctx.clearRect(0, 0, this.width(), this.height());\n\n for (let i = 0; i < this.particles.length; i++) {\n const p = this.particles[i];\n this.ctx.beginPath();\n // If color contains ALPHA placeholder, replace it; otherwise use the color with current opacity\n if (p.color.includes('ALPHA')) {\n this.ctx.fillStyle = p.color.replace('ALPHA', p.opacity.toFixed(2));\n } else {\n // Parse the color and apply current opacity\n const parsed = this.parseHSLA(p.color);\n this.ctx.fillStyle = `hsla(${parsed.h}, ${(parsed.s * 100).toFixed(0)}%, ${(parsed.l * 100).toFixed(0)}%, ${p.opacity.toFixed(2)})`;\n }\n this.ctx.arc(p.x, p.y, p.radius, 0, Math.PI * 2);\n this.ctx.fill();\n\n p.x += p.speed;\n p.opacity -= this.speedConfig().fadeRate;\n\n if (p.x > 50 + this.fill() - 12 || p.opacity <= 0) {\n this.particles.splice(i, 1);\n i--;\n }\n }\n\n for (let j = 0; j < 3; j++) {\n if (Math.random() < 0.8) {this.spawnParticle();}\n }\n\n this.animationId = requestAnimationFrame(() => this.animate());\n }\n\n private spawnParticle() {\n const { speedMin, speedMax } = this.speedConfig();\n const color = this.shades[Math.floor(Math.random() * this.shades.length)];\n const speed = speedMin + Math.random() * (speedMax - speedMin);\n this.particles.push({\n x: 50,\n y: this.height() / 2 + (Math.random() * (this.height() / 2) - this.height() / 4),\n radius: Math.random() * 2 + 1,\n speed,\n opacity: 1,\n color\n });\n }\n\n private parseHSLA(hsla: string): { h: number; s: number; l: number; a: number } {\n const match = hsla.match(/hsla?\\(([\\d.]+),\\s*([\\d.]+)%?,\\s*([\\d.]+)%?(?:,\\s*([\\d.]+))?\\)/i);\n if (!match) {throw new Error('Invalid HSLA color');}\n return {\n h: parseFloat(match[1]),\n s: parseFloat(match[2]) / 100,\n l: parseFloat(match[3]) / 100,\n a: match[4] !== undefined ? parseFloat(match[4]) : 1\n };\n }\n\n /**\n * Convert any color format to HSLA\n */\n private convertToHSLA(color: string): { h: number; s: number; l: number; a: number } {\n // Already HSLA format\n if (color.startsWith('hsla') || color.startsWith('hsl')) {\n return this.parseHSLA(color);\n }\n\n // Create a temporary element to get computed color\n const tempDiv = document.createElement('div');\n tempDiv.style.color = color;\n document.body.appendChild(tempDiv);\n const computedColor = getComputedStyle(tempDiv).color;\n document.body.removeChild(tempDiv);\n\n // Parse RGB/RGBA from computed style\n const rgbaMatch = computedColor.match(/rgba?\\((\\d+),\\s*(\\d+),\\s*(\\d+)(?:,\\s*([\\d.]+))?\\)/);\n if (!rgbaMatch) {\n throw new Error('Invalid color format');\n }\n\n const r = parseInt(rgbaMatch[1]) / 255;\n const g = parseInt(rgbaMatch[2]) / 255;\n const b = parseInt(rgbaMatch[3]) / 255;\n const a = rgbaMatch[4] ? parseFloat(rgbaMatch[4]) : 1;\n\n // Convert RGB to HSL\n const max = Math.max(r, g, b);\n const min = Math.min(r, g, b);\n const diff = max - min;\n const sum = max + min;\n const l = sum / 2;\n\n let h = 0;\n let s = 0;\n\n if (diff !== 0) {\n s = l > 0.5 ? diff / (2 - sum) : diff / sum;\n\n switch (max) {\n case r:\n h = ((g - b) / diff) + (g < b ? 6 : 0);\n break;\n case g:\n h = (b - r) / diff + 2;\n break;\n case b:\n h = (r - g) / diff + 4;\n break;\n }\n h /= 6;\n }\n\n return {\n h: Math.round(h * 360),\n s: Math.round(s * 100) / 100,\n l: Math.round(l * 100) / 100,\n a\n };\n }\n\n /**\n * Generate darker shades of the input color for particle depth effect\n */\n private generateDarkerShades(color: string, count: number): string[] {\n const baseHSLA = this.convertToHSLA(color);\n const shades: string[] = [];\n\n // Include the original color as the brightest shade\n shades.push(`hsla(${baseHSLA.h}, ${(baseHSLA.s * 100).toFixed(0)}%, ${(baseHSLA.l * 100).toFixed(0)}%, ALPHA)`);\n\n // Generate darker shades by reducing lightness\n for (let i = 1; i < count; i++) {\n const darkeningFactor = 0.85 - (i * 0.1); // More conservative darkening: 85%, 75%, 65%\n const newLightness = Math.max(baseHSLA.l * darkeningFactor, Math.max(baseHSLA.l * 0.4, 0.2)); // Limit darkness to 40% of original or 20% minimum\n shades.push(`hsla(${baseHSLA.h}, ${(baseHSLA.s * 100).toFixed(0)}%, ${(newLightness * 100).toFixed(0)}%, ALPHA)`);\n }\n\n return shades;\n }\n\n}\n\n","<svg [attr.width]=\"width()\" [attr.height]=\"height()\">\n <defs>\n <linearGradient id=\"fadeToPrimary\" x1=\"0%\" y1=\"0%\" x2=\"100%\" y2=\"0%\">\n <stop offset=\"0%\" stop-color=\"transparent\" />\n <stop stop-color=\"transparent\" [attr.offset]=\"gradientTransitionStart() + '%'\" />\n <stop offset=\"100%\" [attr.stop-color]=\"progressBarColor()\" />\n </linearGradient>\n </defs>\n\n <!-- Background bar -->\n <rect x=\"50\" fill=\"rgba(0,0,0,0.1)\" [attr.y]=\"height() / 2 - height() / 4\" [attr.width]=\"width() - 100\" [attr.height]=\"height() / 2\" [attr.rx]=\"height() / 4\" />\n\n <!-- Fill bar -->\n <rect\n x=\"50\"\n fill=\"url(#fadeToPrimary)\"\n [attr.y]=\"height() / 2 - height() / 4\"\n [attr.width]=\"fill()\"\n [attr.height]=\"height() / 2\"\n [attr.rx]=\"height() / 4\"\n />\n\n <!-- Particle canvas -->\n <foreignObject x=\"0\" y=\"0\" [attr.width]=\"width()\" [attr.height]=\"height()\">\n <canvas #canvas style=\"pointer-events: none;\" [attr.width]=\"width()\" [attr.height]=\"height()\"></canvas>\n </foreignObject>\n</svg>\n","\nimport { Component, input, output, computed } from '@angular/core';\n\n@Component({\n selector: 'tn-calendar-header',\n standalone: true,\n imports: [],\n templateUrl: './calendar-header.component.html',\n styleUrls: ['./calendar-header.component.scss']\n})\nexport class TnCalendarHeaderComponent {\n currentDate = input<Date>(new Date());\n currentView = input<'month' | 'year'>('month');\n\n monthSelected = output<number>();\n yearSelected = output<number>();\n viewChanged = output<'month' | 'year'>();\n previousClicked = output<void>();\n nextClicked = output<void>();\n\n private months = [\n 'JAN', 'FEB', 'MAR', 'APR', 'MAY', 'JUN',\n 'JUL', 'AUG', 'SEP', 'OCT', 'NOV', 'DEC'\n ];\n\n periodLabelId = `tn-calendar-period-label-${Math.floor(Math.random() * 10000)}`;\n\n periodLabel = computed(() => {\n const date = this.currentDate();\n if (!date) {return '';}\n\n if (this.currentView() === 'month') {\n const month = this.months[date.getMonth()];\n const year = date.getFullYear();\n return `${month} ${year}`;\n } else {\n // For year view, show the year range (24 years like Material)\n const currentYear = date.getFullYear();\n const startYear = Math.floor(currentYear / 24) * 24;\n const endYear = startYear + 23;\n return `${startYear} – ${endYear}`;\n }\n });\n\n previousLabel = computed(() => {\n return this.currentView() === 'month' ? 'Previous month' : 'Previous 24 years';\n });\n\n nextLabel = computed(() => {\n return this.currentView() === 'month' ? 'Next month' : 'Next 24 years';\n });\n\n toggleView(): void {\n const newView = this.currentView() === 'month' ? 'year' : 'month';\n this.viewChanged.emit(newView);\n }\n\n onPreviousClick(): void {\n this.previousClicked.emit();\n }\n\n onNextClick(): void {\n this.nextClicked.emit();\n }\n}","<div class=\"tn-calendar-header\">\n <div class=\"tn-calendar-controls\">\n <!-- Period label (visually hidden for screen readers) -->\n <span aria-live=\"polite\" class=\"cdk-visually-hidden\" [id]=\"periodLabelId\">\n {{ periodLabel() }}\n </span>\n\n <!-- Period button (month/year selector) -->\n <button\n type=\"button\"\n class=\"tn-calendar-period-button\"\n [attr.aria-label]=\"'Choose month and year'\"\n [attr.aria-describedby]=\"periodLabelId\"\n (click)=\"toggleView()\">\n <span [attr.aria-hidden]=\"true\">{{ periodLabel() }}</span>\n <svg viewBox=\"0 0 10 5\" focusable=\"false\" aria-hidden=\"true\" class=\"tn-calendar-arrow\">\n <polygon points=\"0,0 5,5 10,0\" />\n </svg>\n </button>\n\n <!-- Spacer -->\n <div class=\"tn-calendar-spacer\"></div>\n\n <!-- Previous button -->\n <button\n type=\"button\"\n class=\"tn-calendar-previous-button\"\n [attr.aria-label]=\"previousLabel()\"\n (click)=\"onPreviousClick()\">\n <svg viewBox=\"0 0 24 24\" focusable=\"false\" aria-hidden=\"true\">\n <path d=\"M15.41 7.41L14 6l-6 6 6 6 1.41-1.41L10.83 12z\" />\n </svg>\n </button>\n\n <!-- Next button -->\n <button\n type=\"button\"\n class=\"tn-calendar-next-button\"\n [attr.aria-label]=\"nextLabel()\"\n (click)=\"onNextClick()\">\n <svg viewBox=\"0 0 24 24\" focusable=\"false\" aria-hidden=\"true\">\n <path d=\"M10 6L8.59 7.41 13.17 12l-4.58 4.59L10 18l6-6z\" />\n </svg>\n </button>\n </div>\n</div>\n","\nimport { Component, input, output, computed } from '@angular/core';\n\nexport interface CalendarCell {\n value: number;\n date: Date;\n label: string;\n ariaLabel: string;\n enabled: boolean;\n selected: boolean;\n today: boolean;\n compareStart?: boolean;\n compareEnd?: boolean;\n rangeStart?: boolean;\n rangeEnd?: boolean;\n inRange?: boolean;\n}\n\n@Component({\n selector: 'tn-month-view',\n standalone: true,\n imports: [],\n templateUrl: './month-view.component.html',\n styleUrls: ['./month-view.component.scss']\n})\nexport class TnMonthViewComponent {\n activeDate = input<Date>(new Date());\n selected = input<Date | null | undefined>(undefined);\n minDate = input<Date | undefined>(undefined);\n maxDate = input<Date | undefined>(undefined);\n dateFilter = input<((date: Date) => boolean) | undefined>(undefined);\n\n // Range mode inputs\n rangeMode = input<boolean>(false);\n selectedRange = input<{ start: Date | null; end: Date | null; selecting: 'start' | 'end' } | undefined>(undefined);\n\n selectedChange = output<Date>();\n activeDateChange = output<Date>();\n\n readonly weekdays = [\n { long: 'Sunday', short: 'S' },\n { long: 'Monday', short: 'M' },\n { long: 'Tuesday', short: 'T' },\n { long: 'Wednesday', short: 'W' },\n { long: 'Thursday', short: 'T' },\n { long: 'Friday', short: 'F' },\n { long: 'Saturday', short: 'S' },\n ];\n\n // Cell sizing now controlled via CSS custom properties in the SCSS file\n \n\n calendarRows = computed(() => {\n const activeDate = this.activeDate();\n // Track selectedRange signal so computed recalculates when range changes\n this.selectedRange();\n\n if (!activeDate) {return [];}\n \n const year = activeDate.getFullYear();\n const month = activeDate.getMonth();\n const firstDate = new Date(year, month, 1);\n const lastDate = new Date(year, month + 1, 0);\n const startDayOfWeek = firstDate.getDay(); // 0 = Sunday, 1 = Monday, etc.\n \n const rows: CalendarCell[][] = [];\n let currentRow: CalendarCell[] = [];\n \n // Add empty cells for days before month starts\n for (let i = 0; i < startDayOfWeek; i++) {\n currentRow.push(this.createEmptyCell());\n }\n \n // Add all days of the month\n for (let day = 1; day <= lastDate.getDate(); day++) {\n const date = new Date(year, month, day);\n currentRow.push(this.createCell(date, day));\n \n // If we have 7 cells, complete the row\n if (currentRow.length === 7) {\n rows.push(currentRow);\n currentRow = [];\n }\n }\n \n // Fill remaining cells in last row if needed\n if (currentRow.length > 0) {\n while (currentRow.length < 7) {\n currentRow.push(this.createEmptyCell());\n }\n rows.push(currentRow);\n }\n \n return rows;\n });\n\n private createCell(date: Date, value: number): CalendarCell {\n const today = new Date();\n const isToday = this.isSameDate(date, today);\n const isSelected = this.selected() ? this.isSameDate(date, this.selected()!) : false;\n const enabled = this.isDateEnabled(date);\n\n // Range mode calculations\n let rangeStart = false;\n let rangeEnd = false;\n let inRange = false;\n\n const currentRange = this.selectedRange();\n if (this.rangeMode() && currentRange) {\n const { start, end } = currentRange;\n \n if (start && this.isSameDate(date, start)) {\n rangeStart = true;\n }\n if (end && this.isSameDate(date, end)) {\n rangeEnd = true;\n }\n if (start && end && date > start && date < end) {\n inRange = true;\n }\n }\n\n return {\n value,\n date: new Date(date),\n label: date.getDate().toString(),\n ariaLabel: this.formatAriaLabel(date, isSelected, isToday, rangeStart, rangeEnd, inRange),\n enabled,\n selected: isSelected,\n today: isToday,\n rangeStart,\n rangeEnd,\n inRange,\n };\n }\n\n private createEmptyCell(): CalendarCell {\n return {\n value: 0,\n date: new Date(),\n label: '',\n ariaLabel: '',\n enabled: false,\n selected: false,\n today: false,\n };\n }\n\n private isDateEnabled(date: Date): boolean {\n const minDate = this.minDate();\n const maxDate = this.maxDate();\n const dateFilter = this.dateFilter();\n if (minDate && date < minDate) {return false;}\n if (maxDate && date > maxDate) {return false;}\n if (dateFilter && !dateFilter(date)) {return false;}\n return true;\n }\n\n private isSameDate(date1: Date, date2: Date): boolean {\n return date1.getFullYear() === date2.getFullYear() &&\n date1.getMonth() === date2.getMonth() &&\n date1.getDate() === date2.getDate();\n }\n\n private formatAriaLabel(\n date: Date, \n isSelected: boolean, \n isToday: boolean,\n rangeStart?: boolean,\n rangeEnd?: boolean,\n inRange?: boolean\n ): string {\n let label = date.toLocaleDateString('en', { \n weekday: 'long', \n year: 'numeric', \n month: 'long', \n day: 'numeric' \n });\n \n if (isSelected) {label += ' (selected)';}\n if (isToday) {label += ' (today)';}\n if (rangeStart) {label += ' (range start)';}\n if (rangeEnd) {label += ' (range end)';}\n if (inRange) {label += ' (in range)';}\n \n return label;\n }\n\n trackByDate(index: number, cell: CalendarCell): string {\n return cell.date.toISOString();\n }\n\n trackByRow(index: number, row: CalendarCell[]): string {\n return row.map(cell => cell.date.toISOString()).join(',');\n }\n\n onCellClicked(cell: CalendarCell): void {\n if (cell.enabled && cell.value > 0) {\n this.selectedChange.emit(cell.date);\n }\n }\n}","<table role=\"grid\" class=\"tn-calendar-table\">\n <!-- Table header with day names -->\n <thead class=\"tn-calendar-table-header\">\n <tr>\n @for (day of weekdays; track day) {\n <th scope=\"col\">\n <span class=\"cdk-visually-hidden\">{{ day.long }}</span>\n <span aria-hidden=\"true\">{{ day.short }}</span>\n </th>\n }\n </tr>\n </thead>\n\n <!-- Table body with calendar cells -->\n <tbody class=\"tn-calendar-body\">\n <!-- Calendar rows -->\n @for (row of calendarRows(); track trackByRow($index, row); let rowIndex = $index) {\n <tr role=\"row\">\n @for (cell of row; track trackByDate($index, cell); let colIndex = $index) {\n <td\n role=\"gridcell\"\n class=\"tn-calendar-body-cell-container\"\n [attr.data-tn-row]=\"rowIndex\"\n [attr.data-tn-col]=\"colIndex\">\n @if (cell.value > 0) {\n <button\n type=\"button\"\n class=\"tn-calendar-body-cell\"\n [class.tn-calendar-body-selected]=\"cell.selected\"\n [class.tn-calendar-body-today]=\"cell.today\"\n [class.tn-calendar-body-active]=\"cell.selected\"\n [class.tn-calendar-body-range-start]=\"cell.rangeStart\"\n [class.tn-calendar-body-range-end]=\"cell.rangeEnd\"\n [class.tn-calendar-body-in-range]=\"cell.inRange\"\n [disabled]=\"!cell.enabled\"\n [attr.tabindex]=\"cell.selected ? 0 : -1\"\n [attr.aria-label]=\"cell.ariaLabel\"\n [attr.aria-pressed]=\"cell.selected\"\n [attr.aria-current]=\"cell.today ? 'date' : null\"\n (click)=\"onCellClicked(cell)\">\n <span class=\"tn-calendar-body-cell-content tn-focus-indicator\"\n [class.tn-calendar-body-selected]=\"cell.selected\"\n [class.tn-calendar-body-today]=\"cell.today\"\n [class.tn-calendar-body-range-start]=\"cell.rangeStart\"\n [class.tn-calendar-body-range-end]=\"cell.rangeEnd\"\n [class.tn-calendar-body-in-range]=\"cell.inRange\">\n {{ cell.value }}\n </span>\n <span aria-hidden=\"true\" class=\"tn-calendar-body-cell-preview\"></span>\n </button>\n }\n </td>\n }\n </tr>\n }\n </tbody>\n</table>\n","\nimport { Component, input, output, computed } from '@angular/core';\n\nexport interface YearCell {\n value: number;\n year: number;\n label: string;\n ariaLabel: string;\n enabled: boolean;\n selected: boolean;\n today: boolean;\n}\n\n@Component({\n selector: 'tn-multi-year-view',\n standalone: true,\n imports: [],\n templateUrl: './multi-year-view.component.html',\n styleUrls: ['./multi-year-view.component.scss']\n})\nexport class TnMultiYearViewComponent {\n activeDate = input<Date>(new Date());\n selected = input<Date | null | undefined>(undefined);\n minDate = input<Date | undefined>(undefined);\n maxDate = input<Date | undefined>(undefined);\n dateFilter = input<((date: Date) => boolean) | undefined>(undefined);\n\n selectedChange = output<Date>();\n activeDateChange = output<Date>();\n\n readonly cellWidth = 25; // 100/4 for 4 columns\n readonly cellAspectRatio = 7.14286; // Same as Material\n readonly yearsPerRow = 4;\n readonly yearRowCount = 6; // Shows 24 years total (6 rows x 4 columns)\n\n // Calculate the year range to display\n yearRange = computed(() => {\n const activeDate = this.activeDate();\n const currentYear = activeDate.getFullYear();\n\n // Calculate the starting year for a 24-year range\n // We want the active year to be roughly in the middle\n const startYear = Math.floor(currentYear / 24) * 24;\n\n return { start: startYear, end: startYear + 23 };\n });\n\n yearRows = computed(() => {\n const range = this.yearRange();\n const rows: YearCell[][] = [];\n \n for (let row = 0; row < this.yearRowCount; row++) {\n const yearRow: YearCell[] = [];\n \n for (let col = 0; col < this.yearsPerRow; col++) {\n const year = range.start + (row * this.yearsPerRow) + col;\n yearRow.push(this.createYearCell(year));\n }\n \n rows.push(yearRow);\n }\n \n return rows;\n });\n\n private createYearCell(year: number): YearCell {\n const today = new Date();\n const currentYear = today.getFullYear();\n const selectedYear = this.selected()?.getFullYear();\n\n const isToday = year === currentYear;\n const isSelected = year === selectedYear;\n const enabled = this.isYearEnabled(year);\n\n return {\n value: year,\n year: year,\n label: year.toString(),\n ariaLabel: this.formatYearAriaLabel(year, isSelected, isToday),\n enabled,\n selected: isSelected,\n today: isToday,\n };\n }\n\n private isYearEnabled(year: number): boolean {\n const minDate = this.minDate();\n const maxDate = this.maxDate();\n const dateFilter = this.dateFilter();\n if (minDate && year < minDate.getFullYear()) {return false;}\n if (maxDate && year > maxDate.getFullYear()) {return false;}\n\n // If we have a date filter, test January 1st of that year\n if (dateFilter) {\n const testDate = new Date(year, 0, 1);\n if (!dateFilter(testDate)) {return false;}\n }\n\n return true;\n }\n\n private formatYearAriaLabel(year: number, isSelected: boolean, isToday: boolean): string {\n let label = year.toString();\n \n if (isSelected) {label += ' (selected)';}\n if (isToday) {label += ' (current year)';}\n \n return label;\n }\n\n trackByYear(index: number, cell: YearCell): number {\n return cell.year;\n }\n\n trackByRow(index: number, row: YearCell[]): string {\n return row.map(cell => cell.year).join(',');\n }\n\n onYearClicked(cell: YearCell): void {\n if (cell.enabled) {\n // Create a new date with the selected year, keeping current month and day\n const currentDate = this.activeDate();\n const newDate = new Date(cell.year, currentDate.getMonth(), currentDate.getDate());\n this.selectedChange.emit(newDate);\n }\n }\n}","<table role=\"grid\" class=\"tn-calendar-table\">\n <!-- Table body with year cells -->\n <tbody class=\"tn-calendar-body\">\n @for (row of yearRows(); track trackByRow($index, row); let rowIndex = $index) {\n <tr role=\"row\">\n @for (cell of row; track trackByYear($index, cell); let colIndex = $index) {\n <td\n role=\"gridcell\"\n class=\"tn-calendar-body-cell-container\"\n [attr.data-tn-row]=\"rowIndex\"\n [attr.data-tn-col]=\"colIndex\"\n [style.width.%]=\"cellWidth\"\n [style.padding-top.%]=\"cellAspectRatio\"\n [style.padding-bottom.%]=\"cellAspectRatio\">\n <button\n type=\"button\"\n class=\"tn-calendar-body-cell\"\n [class.tn-calendar-body-selected]=\"cell.selected\"\n [class.tn-calendar-body-today]=\"cell.today\"\n [class.tn-calendar-body-active]=\"cell.selected\"\n [disabled]=\"!cell.enabled\"\n [attr.tabindex]=\"cell.selected ? 0 : -1\"\n [attr.aria-label]=\"cell.ariaLabel\"\n [attr.aria-pressed]=\"cell.selected\"\n [attr.aria-current]=\"cell.today ? 'date' : null\"\n (click)=\"onYearClicked(cell)\">\n <span class=\"tn-calendar-body-cell-content tn-focus-indicator\"\n [class.tn-calendar-body-selected]=\"cell.selected\"\n [class.tn-calendar-body-today]=\"cell.today\">\n {{ cell.value }}\n </span>\n <span aria-hidden=\"true\" class=\"tn-calendar-body-cell-preview\"></span>\n </button>\n </td>\n }\n </tr>\n }\n </tbody>\n</table>\n","\nimport type { OnInit } from '@angular/core';\nimport { Component, input, output, signal, effect } from '@angular/core';\nimport { TnCalendarHeaderComponent } from './calendar-header.component';\nimport { TnMonthViewComponent } from './month-view.component';\nimport { TnMultiYearViewComponent } from './multi-year-view.component';\nimport type { DateRange } from '../date-range-input/date-range-input.component';\n\n@Component({\n selector: 'tn-calendar',\n standalone: true,\n imports: [TnCalendarHeaderComponent, TnMonthViewComponent, TnMultiYearViewComponent],\n templateUrl: './calendar.component.html',\n styleUrls: ['./calendar.component.scss']\n})\nexport class TnCalendarComponent implements OnInit {\n startView = input<'month' | 'year'>('month');\n selected = input<Date | null | undefined>(undefined);\n minDate = input<Date | undefined>(undefined);\n maxDate = input<Date | undefined>(undefined);\n dateFilter = input<((date: Date) => boolean) | undefined>(undefined);\n\n // Range mode inputs\n rangeMode = input<boolean>(false);\n selectedRange = input<DateRange | undefined>(undefined);\n\n selectedChange = output<Date>();\n activeDateChange = output<Date>();\n viewChanged = output<'month' | 'year'>();\n\n // Range mode outputs\n selectedRangeChange = output<DateRange>();\n\n currentDate = signal<Date>(new Date());\n currentView = signal<'month' | 'year'>('month');\n \n // Range selection state - this is the authoritative source for calendar display\n rangeState = signal<{\n start: Date | null;\n end: Date | null;\n selecting: 'start' | 'end';\n }>({\n start: null,\n end: null,\n selecting: 'start'\n });\n\n // Track if user has interacted with calendar - once true, ignore external selectedRange\n private userHasInteracted = false;\n\n constructor() {\n // Watch for changes to selectedRange input\n effect(() => {\n // Track signals to re-run effect when they change\n this.selectedRange();\n const rangeMode = this.rangeMode();\n // Only update range state from external selectedRange if user hasn't interacted yet\n if (!this.userHasInteracted && rangeMode) {\n this.initializeRangeState();\n }\n });\n }\n\n ngOnInit(): void {\n this.currentView.set(this.startView());\n\n // Initialize range state if in range mode (this also handles currentDate)\n if (this.rangeMode()) {\n this.initializeRangeState();\n } else {\n const selected = this.selected();\n if (selected) {\n // For single date mode, navigate to the selected date's month\n this.currentDate.set(new Date(selected));\n }\n }\n }\n\n private initializeRangeState(): void {\n if (this.rangeMode()) {\n const selectedRange = this.selectedRange();\n if (selectedRange) {\n this.rangeState.set({\n start: selectedRange.start,\n end: selectedRange.end,\n selecting: selectedRange.start && selectedRange.end ? 'start' :\n selectedRange.start ? 'end' : 'start'\n });\n\n // Navigate to the month of the selected start date, or end date if no start date\n const dateToShow = selectedRange.start || selectedRange.end;\n if (dateToShow) {\n this.currentDate.set(new Date(dateToShow));\n }\n } else {\n // No selected range - initialize empty range state\n this.rangeState.set({\n start: null,\n end: null,\n selecting: 'start'\n });\n }\n }\n }\n\n onMonthSelected(month: number): void {\n const newDate = new Date(this.currentDate());\n newDate.setMonth(month);\n this.currentDate.set(newDate);\n this.currentView.set('month');\n this.viewChanged.emit('month');\n }\n\n onYearSelected(year: number): void {\n const newDate = new Date(this.currentDate());\n newDate.setFullYear(year);\n this.currentDate.set(newDate);\n this.activeDateChange.emit(newDate);\n }\n\n onViewChanged(view: 'month' | 'year'): void {\n this.currentView.set(view);\n this.viewChanged.emit(view);\n }\n\n onPreviousClicked(): void {\n const current = this.currentDate();\n let newDate: Date;\n \n if (this.currentView() === 'month') {\n newDate = new Date(current.getFullYear(), current.getMonth() - 1, 1);\n } else {\n // For year view, navigate by 24-year ranges (like Material)\n newDate = new Date(current.getFullYear() - 24, current.getMonth(), 1);\n }\n \n this.currentDate.set(newDate);\n this.activeDateChange.emit(newDate);\n }\n\n onNextClicked(): void {\n const current = this.currentDate();\n let newDate: Date;\n \n if (this.currentView() === 'month') {\n newDate = new Date(current.getFullYear(), current.getMonth() + 1, 1);\n } else {\n // For year view, navigate by 24-year ranges (like Material)\n newDate = new Date(current.getFullYear() + 24, current.getMonth(), 1);\n }\n \n this.currentDate.set(newDate);\n this.activeDateChange.emit(newDate);\n }\n\n onSelectedChange(date: Date): void {\n if (this.rangeMode()) {\n this.handleRangeSelection(date);\n } else {\n this.selectedChange.emit(date);\n }\n }\n \n private handleRangeSelection(date: Date): void {\n // Mark that user has interacted - calendar is now authoritative\n this.userHasInteracted = true;\n \n const currentRange = this.rangeState();\n \n // If we already have a complete range (both start and end), clear and start fresh\n if (currentRange.start && currentRange.end && currentRange.selecting === 'start') {\n const newRangeState = {\n start: date,\n end: null,\n selecting: 'end' as const\n };\n this.rangeState.set(newRangeState);\n this.selectedRangeChange.emit({ start: date, end: null });\n return;\n }\n \n if (currentRange.selecting === 'start' || !currentRange.start) {\n // First click or selecting start date - clear any previous range immediately\n const newRangeState = {\n start: date,\n end: null,\n selecting: 'end' as const\n };\n this.rangeState.set(newRangeState);\n this.selectedRangeChange.emit({ start: date, end: null });\n } else {\n // Setting end date\n const start = currentRange.start!;\n \n // If second date is earlier than first, treat it as new start date\n if (date < start) {\n const newRangeState = {\n start: date,\n end: null,\n selecting: 'end' as const\n };\n this.rangeState.set(newRangeState);\n this.selectedRangeChange.emit({ start: date, end: null });\n } else {\n // Valid end date - complete the range\n const newRangeState = {\n start: start,\n end: date,\n selecting: 'start' as const\n };\n this.rangeState.set(newRangeState);\n this.selectedRangeChange.emit({ start: start, end: date });\n }\n }\n }\n\n onActiveDateChange(date: Date): void {\n this.currentDate.set(date);\n this.activeDateChange.emit(date);\n }\n\n onYearSelectedFromView(date: Date): void {\n // When a year is selected from the multi-year view, update the current date\n // and switch back to month view\n this.currentDate.set(date);\n this.currentView.set('month');\n this.viewChanged.emit('month');\n this.activeDateChange.emit(date);\n }\n\n /**\n * Reset the calendar to accept external range values - called when calendar reopens\n */\n resetInteractionState(): void {\n this.userHasInteracted = false;\n // Reinitialize range state from selectedRange if provided\n this.initializeRangeState();\n }\n}","<tn-calendar-header\n [currentDate]=\"currentDate()\"\n [currentView]=\"currentView()\"\n (monthSelected)=\"onMonthSelected($event)\"\n (yearSelected)=\"onYearSelected($event)\"\n (viewChanged)=\"onViewChanged($event)\"\n (previousClicked)=\"onPreviousClicked()\"\n (nextClicked)=\"onNextClicked()\" />\n\n<div class=\"tn-calendar-content\" cdkMonitorSubtreeFocus tabindex=\"-1\">\n @if (currentView() === 'month') {\n <tn-month-view\n [activeDate]=\"currentDate()\"\n [selected]=\"selected()\"\n [dateFilter]=\"dateFilter()\"\n [minDate]=\"minDate()\"\n [maxDate]=\"maxDate()\"\n [rangeMode]=\"rangeMode()\"\n [selectedRange]=\"rangeMode() ? rangeState() : undefined\"\n (selectedChange)=\"onSelectedChange($event)\"\n (activeDateChange)=\"onActiveDateChange($event)\" />\n }\n\n <!-- Multi-year view -->\n @if (currentView() === 'year') {\n <tn-multi-year-view\n [activeDate]=\"currentDate()\"\n [selected]=\"selected()\"\n [dateFilter]=\"dateFilter()\"\n [minDate]=\"minDate()\"\n [maxDate]=\"maxDate()\"\n (selectedChange)=\"onYearSelectedFromView($event)\"\n (activeDateChange)=\"onActiveDateChange($event)\" />\n }\n</div>\n","import { A11yModule } from '@angular/cdk/a11y';\nimport type { OverlayRef, ConnectedPosition } from '@angular/cdk/overlay';\nimport { Overlay } from '@angular/cdk/overlay';\nimport { OverlayModule } from '@angular/cdk/overlay';\nimport { TemplatePortal, PortalModule } from '@angular/cdk/portal';\nimport type { ElementRef, OnInit, TemplateRef, OnDestroy } from '@angular/core';\nimport { ViewContainerRef } from '@angular/core';\nimport { Component, input, forwardRef, signal, computed, viewChild, inject } from '@angular/core';\nimport type { ControlValueAccessor} from '@angular/forms';\nimport { NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { Subject } from 'rxjs';\nimport { TnCalendarComponent } from '../calendar/calendar.component';\nimport { TnInputDirective } from '../input/input.directive';\n\n@Component({\n selector: 'tn-date-input',\n standalone: true,\n imports: [TnInputDirective, TnCalendarComponent, OverlayModule, PortalModule, A11yModule],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => TnDateInputComponent),\n multi: true\n }\n ],\n templateUrl: './date-input.component.html',\n styleUrl: './date-input.component.scss',\n host: {\n 'class': 'tn-date-input'\n }\n})\nexport class TnDateInputComponent implements ControlValueAccessor, OnInit, OnDestroy {\n overlay = inject(Overlay);\n viewContainerRef = inject(ViewContainerRef);\n\n disabled = input<boolean>(false);\n placeholder = input<string>('Select date');\n min = input<Date | undefined>(undefined);\n max = input<Date | undefined>(undefined);\n dateFilter = input<((date: Date) => boolean) | undefined>(undefined);\n\n private formDisabled = signal<boolean>(false);\n isDisabled = computed(() => this.disabled() || this.formDisabled());\n\n monthRef = viewChild.required<ElementRef<HTMLInputElement>>('monthInput');\n dayRef = viewChild.required<ElementRef<HTMLInputElement>>('dayInput');\n yearRef = viewChild.required<ElementRef<HTMLInputElement>>('yearInput');\n calendarTemplate = viewChild.required<TemplateRef<unknown>>('calendarTemplate');\n calendar = viewChild.required<TnCalendarComponent>(TnCalendarComponent);\n wrapperEl = viewChild.required<ElementRef<HTMLDivElement>>('wrapper');\n\n private destroy$ = new Subject<void>();\n private overlayRef?: OverlayRef;\n private portal?: TemplatePortal;\n isOpen = signal<boolean>(false);\n\n private onChange = (_value: Date | null) => {};\n private onTouched = () => {};\n\n value = signal<Date | null>(null);\n \n // Individual segment signals\n month = signal<string>('');\n day = signal<string>('');\n year = signal<string>('');\n\n ngOnInit() {\n // Initialize display values\n this.updateDisplayValues();\n }\n\n ngOnDestroy(): void {\n this.destroy$.next();\n this.destroy$.complete();\n this.close();\n }\n\n // ControlValueAccessor implementation\n writeValue(value: Date | null): void {\n this.value.set(value);\n this.updateDisplayValues();\n }\n\n registerOnChange(fn: (value: Date | null) => void): void {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn as () => void;\n }\n\n setDisabledState(isDisabled: boolean): void {\n this.formDisabled.set(isDisabled);\n }\n\n // Segment event handlers\n onSegmentFocus(_segment: 'month' | 'day' | 'year'): void {\n // Focus handling\n }\n\n onSegmentBlur(_segment: 'month' | 'day' | 'year'): void {\n this.onTouched();\n // Only validate and update when we have complete values\n const month = this.monthRef()?.nativeElement?.value || '';\n const day = this.dayRef()?.nativeElement?.value || '';\n const year = this.yearRef()?.nativeElement?.value || '';\n\n // Only try to create a date if all segments have some value\n if (month && day && year && year.length === 4) {\n this.updateDateFromSegments();\n }\n }\n\n onSegmentKeydown(event: KeyboardEvent, segment: 'month' | 'day' | 'year'): void {\n const inp = event.target as HTMLInputElement;\n\n // Handle navigation between segments\n if (event.key === 'ArrowRight') {\n if (inp.selectionStart === inp.value.length) {\n event.preventDefault();\n this.focusNextSegment(segment);\n }\n } else if (event.key === 'ArrowLeft') {\n if (inp.selectionStart === 0) {\n event.preventDefault();\n this.focusPrevSegment(segment);\n }\n } else if (event.key === 'Backspace') {\n if (inp.value === '' || inp.selectionStart === 0) {\n event.preventDefault();\n this.focusPrevSegment(segment);\n }\n }\n }\n\n onDateSelected(date: Date): void {\n this.updateDate(date);\n // Close calendar after single date selection\n this.close();\n }\n\n private updateDate(date: Date | null): void {\n this.value.set(date);\n this.updateDisplayValues();\n this.onChange(date);\n }\n\n private updateDisplayValues(): void {\n const date = this.value();\n \n if (date) {\n const monthVal = (date.getMonth() + 1).toString().padStart(2, '0');\n const dayVal = date.getDate().toString().padStart(2, '0');\n const yearVal = date.getFullYear().toString();\n \n this.month.set(monthVal);\n this.day.set(dayVal);\n this.year.set(yearVal);\n \n // Update input elements\n if (this.monthRef()?.nativeElement) {this.monthRef().nativeElement.value = monthVal;}\n if (this.dayRef()?.nativeElement) {this.dayRef().nativeElement.value = dayVal;}\n if (this.yearRef()?.nativeElement) {this.yearRef().nativeElement.value = yearVal;}\n } else {\n // Clear all values\n this.month.set('');\n this.day.set('');\n this.year.set('');\n\n if (this.monthRef()?.nativeElement) {this.monthRef().nativeElement.value = '';}\n if (this.dayRef()?.nativeElement) {this.dayRef().nativeElement.value = '';}\n if (this.yearRef()?.nativeElement) {this.yearRef().nativeElement.value = '';}\n }\n }\n\n private updateDateFromSegments(): void {\n const month = this.monthRef()?.nativeElement?.value || '';\n const day = this.dayRef()?.nativeElement?.value || '';\n const year = this.yearRef()?.nativeElement?.value || '';\n \n let date: Date | null = null;\n if (month && day && year && year.length === 4) {\n const monthNum = parseInt(month, 10);\n const dayNum = parseInt(day, 10);\n const yearNum = parseInt(year, 10);\n \n if (monthNum >= 1 && monthNum <= 12 && dayNum >= 1 && dayNum <= 31) {\n date = new Date(yearNum, monthNum - 1, dayNum);\n // Validate the date is real\n if (date.getFullYear() !== yearNum || date.getMonth() !== monthNum - 1 || date.getDate() !== dayNum) {\n date = null;\n }\n }\n }\n \n this.updateDate(date);\n }\n \n private focusNextSegment(segment: 'month' | 'day' | 'year'): void {\n if (segment === 'month') {this.dayRef().nativeElement.focus();}\n else if (segment === 'day') {this.yearRef().nativeElement.focus();}\n // Year is the last field\n }\n\n private focusPrevSegment(segment: 'month' | 'day' | 'year'): void {\n if (segment === 'day') {this.monthRef().nativeElement.focus();}\n else if (segment === 'year') {this.dayRef().nativeElement.focus();}\n // Month is the first field\n }\n\n openDatepicker(): void {\n if (this.isOpen()) {return;}\n\n this.createOverlay();\n this.isOpen.set(true);\n\n // Reset calendar interaction state when opening\n const cal = this.calendar();\n if (cal) {\n setTimeout(() => cal.resetInteractionState(), 0);\n }\n }\n\n close(): void {\n if (this.overlayRef) {\n this.overlayRef.dispose();\n this.overlayRef = undefined;\n this.portal = undefined;\n }\n this.isOpen.set(false);\n }\n\n private createOverlay(): void {\n if (this.overlayRef) {return;}\n\n const positions: ConnectedPosition[] = [\n {\n originX: 'start',\n originY: 'bottom',\n overlayX: 'start',\n overlayY: 'top',\n offsetY: 8,\n },\n {\n originX: 'start',\n originY: 'top',\n overlayX: 'start',\n overlayY: 'bottom',\n offsetY: -8,\n },\n {\n originX: 'end',\n originY: 'bottom',\n overlayX: 'end',\n overlayY: 'top',\n offsetY: 8,\n },\n {\n originX: 'end',\n originY: 'top',\n overlayX: 'end',\n overlayY: 'bottom',\n offsetY: -8,\n },\n ];\n\n const positionStrategy = this.overlay\n .position()\n .flexibleConnectedTo(this.wrapperEl())\n .withPositions(positions)\n .withPush(false);\n\n this.overlayRef = this.overlay.create({\n positionStrategy,\n scrollStrategy: this.overlay.scrollStrategies.reposition(),\n hasBackdrop: true,\n backdropClass: 'cdk-overlay-transparent-backdrop',\n panelClass: 'tn-datepicker-overlay'\n });\n\n // Close datepicker when backdrop is clicked\n this.overlayRef.backdropClick().subscribe(() => {\n this.close();\n });\n\n this.portal = new TemplatePortal(this.calendarTemplate(), this.viewContainerRef);\n this.overlayRef.attach(this.portal);\n }\n}","<div class=\"tn-date-input-container\">\n <div #wrapper ixInput class=\"tn-date-input-wrapper\" style=\"padding-right: 40px;\">\n <!-- Date segments MM/DD/YYYY -->\n <div class=\"tn-date-segment-group\">\n <input\n #monthInput\n type=\"text\"\n class=\"tn-date-segment tn-date-segment-month\"\n placeholder=\"MM\"\n maxlength=\"2\"\n [disabled]=\"isDisabled()\"\n (focus)=\"onSegmentFocus('month')\"\n (blur)=\"onSegmentBlur('month')\"\n (keydown)=\"onSegmentKeydown($event, 'month')\">\n <span class=\"tn-date-segment-separator\">/</span>\n <input\n #dayInput\n type=\"text\"\n class=\"tn-date-segment tn-date-segment-day\"\n placeholder=\"DD\"\n maxlength=\"2\"\n [disabled]=\"isDisabled()\"\n (focus)=\"onSegmentFocus('day')\"\n (blur)=\"onSegmentBlur('day')\"\n (keydown)=\"onSegmentKeydown($event, 'day')\">\n <span class=\"tn-date-segment-separator\">/</span>\n <input\n #yearInput\n type=\"text\"\n class=\"tn-date-segment tn-date-segment-year\"\n placeholder=\"YYYY\"\n maxlength=\"4\"\n [disabled]=\"isDisabled()\"\n (focus)=\"onSegmentFocus('year')\"\n (blur)=\"onSegmentBlur('year')\"\n (keydown)=\"onSegmentKeydown($event, 'year')\">\n </div>\n\n <button\n type=\"button\"\n class=\"tn-date-input-toggle\"\n aria-label=\"Open calendar\"\n [disabled]=\"isDisabled()\"\n (click)=\"openDatepicker()\">\n <span aria-hidden=\"true\">📅</span>\n </button>\n </div>\n\n <ng-template #calendarTemplate>\n <tn-calendar\n class=\"tn-calendar\"\n [startView]=\"'month'\"\n [rangeMode]=\"false\"\n [selected]=\"value()\"\n (selectedChange)=\"onDateSelected($event)\" />\n </ng-template>\n</div>\n","import { A11yModule } from '@angular/cdk/a11y';\nimport { Overlay, type OverlayRef, type ConnectedPosition } from '@angular/cdk/overlay';\nimport { OverlayModule } from '@angular/cdk/overlay';\nimport { TemplatePortal, PortalModule } from '@angular/cdk/portal';\nimport type { OnInit, TemplateRef, OnDestroy , ElementRef} from '@angular/core';\nimport { Component, input, forwardRef, signal, computed, viewChild, ViewContainerRef, inject } from '@angular/core';\nimport type { ControlValueAccessor} from '@angular/forms';\nimport { NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { Subject } from 'rxjs';\nimport { TnCalendarComponent } from '../calendar/calendar.component';\nimport { TnInputDirective } from '../input/input.directive';\n\nexport interface DateRange {\n start: Date | null;\n end: Date | null;\n}\n\n@Component({\n selector: 'tn-date-range-input',\n standalone: true,\n imports: [TnInputDirective, TnCalendarComponent, OverlayModule, PortalModule, A11yModule],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => TnDateRangeInputComponent),\n multi: true\n }\n ],\n templateUrl: './date-range-input.component.html',\n styleUrl: './date-range-input.component.scss',\n host: {\n 'class': 'tn-date-range-input'\n }\n})\nexport class TnDateRangeInputComponent implements ControlValueAccessor, OnInit, OnDestroy {\n disabled = input<boolean>(false);\n placeholder = input<string>('Select date range');\n\n private formDisabled = signal<boolean>(false);\n isDisabled = computed(() => this.disabled() || this.formDisabled());\n\n startMonthRef = viewChild.required<ElementRef<HTMLInputElement>>('startMonthInput');\n startDayRef = viewChild.required<ElementRef<HTMLInputElement>>('startDayInput');\n startYearRef = viewChild.required<ElementRef<HTMLInputElement>>('startYearInput');\n endMonthRef = viewChild.required<ElementRef<HTMLInputElement>>('endMonthInput');\n endDayRef = viewChild.required<ElementRef<HTMLInputElement>>('endDayInput');\n endYearRef = viewChild.required<ElementRef<HTMLInputElement>>('endYearInput');\n calendarTemplate = viewChild.required<TemplateRef<unknown>>('calendarTemplate');\n calendar = viewChild.required<TnCalendarComponent>(TnCalendarComponent);\n wrapperEl = viewChild.required<ElementRef<HTMLDivElement>>('wrapper');\n\n private destroy$ = new Subject<void>();\n private overlayRef?: OverlayRef;\n private portal?: TemplatePortal;\n isOpen = signal<boolean>(false);\n\n private onChange = (_value: DateRange) => {};\n private onTouched = () => {};\n\n value = signal<DateRange>({ start: null, end: null });\n \n // Individual segment signals\n startMonth = signal<string>('');\n startDay = signal<string>('');\n startYear = signal<string>('');\n endMonth = signal<string>('');\n endDay = signal<string>('');\n endYear = signal<string>('');\n \n private currentFocus: 'start' | 'end' = 'start';\n // Always provide current range to calendar for initial display\n initialRange = computed(() => {\n return this.value();\n });\n\n private overlay = inject(Overlay);\n private viewContainerRef = inject(ViewContainerRef);\n\n ngOnInit() {\n // Initialize display values\n this.updateDisplayValues();\n }\n\n ngOnDestroy(): void {\n this.destroy$.next();\n this.destroy$.complete();\n this.close();\n }\n\n // ControlValueAccessor implementation\n writeValue(value: DateRange): void {\n this.value.set(value || { start: null, end: null });\n this.updateDisplayValues();\n }\n\n registerOnChange(fn: (value: DateRange) => void): void {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n\n setDisabledState(isDisabled: boolean): void {\n this.formDisabled.set(isDisabled);\n }\n\n // Segment event handlers\n onSegmentFocus(range: 'start' | 'end', _segment: 'month' | 'day' | 'year'): void {\n this.currentFocus = range;\n }\n\n onSegmentBlur(range: 'start' | 'end', _segment: 'month' | 'day' | 'year'): void {\n this.onTouched();\n // Only validate and update when we have complete values, don't clear partial entries\n const month = range === 'start' ? (this.startMonthRef()?.nativeElement?.value || '') : (this.endMonthRef()?.nativeElement?.value || '');\n const day = range === 'start' ? (this.startDayRef()?.nativeElement?.value || '') : (this.endDayRef()?.nativeElement?.value || '');\n const year = range === 'start' ? (this.startYearRef()?.nativeElement?.value || '') : (this.endYearRef()?.nativeElement?.value || '');\n \n // Only try to create a date if all segments have some value\n if (month && day && year && year.length === 4) {\n this.updateDateFromSegments(range);\n }\n }\n\n\n onSegmentKeydown(event: KeyboardEvent, range: 'start' | 'end', segment: 'month' | 'day' | 'year'): void {\n const inp = event.target as HTMLInputElement;\n \n // Only handle navigation - don't interfere with typing\n if (event.key === 'ArrowRight') {\n if (inp.selectionStart === inp.value.length) {\n event.preventDefault();\n this.focusNextSegment(range, segment);\n }\n } else if (event.key === 'ArrowLeft') {\n if (inp.selectionStart === 0) {\n event.preventDefault();\n this.focusPrevSegment(range, segment);\n }\n } else if (event.key === 'Backspace') {\n if (inp.value === '' || inp.selectionStart === 0) {\n event.preventDefault();\n this.focusPrevSegment(range, segment);\n }\n }\n }\n\n onRangeSelected(range: DateRange): void {\n this.updateRange(range);\n \n // Handle input field updates and clearing\n if (range.start && !range.end) {\n // Start date selected - clear end date input fields immediately\n if (this.endMonthRef()?.nativeElement) {this.endMonthRef().nativeElement.value = '';}\n if (this.endDayRef()?.nativeElement) {this.endDayRef().nativeElement.value = '';}\n if (this.endYearRef()?.nativeElement) {this.endYearRef().nativeElement.value = '';}\n \n // Focus end month for next selection\n setTimeout(() => this.endMonthRef()?.nativeElement?.focus(), 0);\n } else if (range.start && range.end) {\n // Both dates selected - close calendar\n this.close();\n }\n }\n\n private updateRange(range: DateRange): void {\n this.value.set(range);\n this.updateDisplayValues();\n this.onChange(range);\n }\n\n private updateDisplayValues(): void {\n const range = this.value();\n \n // Update start date segments - only when we have valid dates from calendar\n if (range.start) {\n const monthVal = (range.start.getMonth() + 1).toString().padStart(2, '0');\n const dayVal = range.start.getDate().toString().padStart(2, '0');\n const yearVal = range.start.getFullYear().toString();\n \n this.startMonth.set(monthVal);\n this.startDay.set(dayVal);\n this.startYear.set(yearVal);\n \n // Only update input elements if they're empty or this is from calendar selection\n if (this.startMonthRef()?.nativeElement) {this.startMonthRef().nativeElement.value = monthVal;}\n if (this.startDayRef()?.nativeElement) {this.startDayRef().nativeElement.value = dayVal;}\n if (this.startYearRef()?.nativeElement) {this.startYearRef().nativeElement.value = yearVal;}\n }\n \n // Update end date segments - only when we have valid dates from calendar \n if (range.end) {\n const monthVal = (range.end.getMonth() + 1).toString().padStart(2, '0');\n const dayVal = range.end.getDate().toString().padStart(2, '0');\n const yearVal = range.end.getFullYear().toString();\n \n this.endMonth.set(monthVal);\n this.endDay.set(dayVal);\n this.endYear.set(yearVal);\n \n // Only update input elements if they're empty or this is from calendar selection\n if (this.endMonthRef()?.nativeElement) {this.endMonthRef().nativeElement.value = monthVal;}\n if (this.endDayRef()?.nativeElement) {this.endDayRef().nativeElement.value = dayVal;}\n if (this.endYearRef()?.nativeElement) {this.endYearRef().nativeElement.value = yearVal;}\n }\n }\n \n private setSegmentValue(range: 'start' | 'end', segment: 'month' | 'day' | 'year', value: string): void {\n if (range === 'start') {\n if (segment === 'month') {this.startMonth.set(value);}\n else if (segment === 'day') {this.startDay.set(value);}\n else if (segment === 'year') {this.startYear.set(value);}\n } else {\n if (segment === 'month') {this.endMonth.set(value);}\n else if (segment === 'day') {this.endDay.set(value);}\n else if (segment === 'year') {this.endYear.set(value);}\n }\n }\n \n private updateDateFromSegments(range: 'start' | 'end'): void {\n let month: string, day: string, year: string;\n \n if (range === 'start') {\n month = this.startMonthRef()?.nativeElement?.value || '';\n day = this.startDayRef()?.nativeElement?.value || '';\n year = this.startYearRef()?.nativeElement?.value || '';\n } else {\n month = this.endMonthRef()?.nativeElement?.value || '';\n day = this.endDayRef()?.nativeElement?.value || '';\n year = this.endYearRef()?.nativeElement?.value || '';\n }\n \n let date: Date | null = null;\n if (month && day && year && year.length === 4) {\n const monthNum = parseInt(month, 10);\n const dayNum = parseInt(day, 10);\n const yearNum = parseInt(year, 10);\n \n if (monthNum >= 1 && monthNum <= 12 && dayNum >= 1 && dayNum <= 31) {\n date = new Date(yearNum, monthNum - 1, dayNum);\n // Validate the date is real (handles Feb 30, etc.)\n if (date.getFullYear() !== yearNum || date.getMonth() !== monthNum - 1 || date.getDate() !== dayNum) {\n date = null;\n }\n }\n }\n \n const currentValue = this.value();\n if (range === 'start') {\n this.updateRange({ start: date, end: currentValue.end });\n } else {\n this.updateRange({ start: currentValue.start, end: date });\n }\n }\n \n private focusNextSegment(range: 'start' | 'end', segment: 'month' | 'day' | 'year'): void {\n if (range === 'start') {\n if (segment === 'month') {this.startDayRef().nativeElement.focus();}\n else if (segment === 'day') {this.startYearRef().nativeElement.focus();}\n else if (segment === 'year') {this.endMonthRef().nativeElement.focus();}\n } else {\n if (segment === 'month') {this.endDayRef().nativeElement.focus();}\n else if (segment === 'day') {this.endYearRef().nativeElement.focus();}\n // End year is the last field - could focus calendar button or just stay\n }\n }\n \n private focusPrevSegment(range: 'start' | 'end', segment: 'month' | 'day' | 'year'): void {\n if (range === 'start') {\n // Start month is the first field - nowhere to go back\n if (segment === 'day') {this.startMonthRef().nativeElement.focus();}\n else if (segment === 'year') {this.startDayRef().nativeElement.focus();}\n } else {\n if (segment === 'month') {this.startYearRef().nativeElement.focus();}\n else if (segment === 'day') {this.endMonthRef().nativeElement.focus();}\n else if (segment === 'year') {this.endDayRef().nativeElement.focus();}\n }\n }\n\n openDatepicker(): void {\n if (this.isOpen()) {return;}\n\n this.createOverlay();\n this.isOpen.set(true);\n\n // Reset calendar interaction state when opening\n const cal = this.calendar();\n if (cal) {\n setTimeout(() => cal.resetInteractionState(), 0);\n }\n }\n\n close(): void {\n if (this.overlayRef) {\n this.overlayRef.dispose();\n this.overlayRef = undefined;\n this.portal = undefined;\n }\n this.isOpen.set(false);\n }\n\n private createOverlay(): void {\n if (this.overlayRef) {return;}\n\n const positions: ConnectedPosition[] = [\n {\n originX: 'start',\n originY: 'bottom',\n overlayX: 'start',\n overlayY: 'top',\n offsetY: 8,\n },\n {\n originX: 'start',\n originY: 'top',\n overlayX: 'start',\n overlayY: 'bottom',\n offsetY: -8,\n },\n {\n originX: 'end',\n originY: 'bottom',\n overlayX: 'end',\n overlayY: 'top',\n offsetY: 8,\n },\n {\n originX: 'end',\n originY: 'top',\n overlayX: 'end',\n overlayY: 'bottom',\n offsetY: -8,\n },\n ];\n\n const positionStrategy = this.overlay\n .position()\n .flexibleConnectedTo(this.wrapperEl())\n .withPositions(positions)\n .withPush(false);\n\n this.overlayRef = this.overlay.create({\n positionStrategy,\n scrollStrategy: this.overlay.scrollStrategies.reposition(),\n hasBackdrop: true,\n backdropClass: 'cdk-overlay-transparent-backdrop',\n panelClass: 'tn-datepicker-overlay'\n });\n\n // Close datepicker when backdrop is clicked\n this.overlayRef.backdropClick().subscribe(() => {\n this.close();\n });\n\n this.portal = new TemplatePortal(this.calendarTemplate(), this.viewContainerRef);\n this.overlayRef.attach(this.portal);\n }\n}","<div class=\"tn-date-range-container\">\n <div #wrapper ixInput class=\"tn-date-range-wrapper\" style=\"padding-right: 40px;\">\n <!-- Start date segments -->\n <div class=\"tn-date-segment-group\">\n <input\n #startMonthInput\n type=\"text\"\n class=\"tn-date-segment tn-date-segment-month\"\n placeholder=\"MM\"\n maxlength=\"2\"\n [disabled]=\"isDisabled()\"\n (focus)=\"onSegmentFocus('start', 'month')\"\n (blur)=\"onSegmentBlur('start', 'month')\"\n (keydown)=\"onSegmentKeydown($event, 'start', 'month')\">\n <span class=\"tn-date-segment-separator\">/</span>\n <input\n #startDayInput\n type=\"text\"\n class=\"tn-date-segment tn-date-segment-day\"\n placeholder=\"DD\"\n maxlength=\"2\"\n [disabled]=\"isDisabled()\"\n (focus)=\"onSegmentFocus('start', 'day')\"\n (blur)=\"onSegmentBlur('start', 'day')\"\n (keydown)=\"onSegmentKeydown($event, 'start', 'day')\">\n <span class=\"tn-date-segment-separator\">/</span>\n <input\n #startYearInput\n type=\"text\"\n class=\"tn-date-segment tn-date-segment-year\"\n placeholder=\"YYYY\"\n maxlength=\"4\"\n [disabled]=\"isDisabled()\"\n (focus)=\"onSegmentFocus('start', 'year')\"\n (blur)=\"onSegmentBlur('start', 'year')\"\n (keydown)=\"onSegmentKeydown($event, 'start', 'year')\">\n </div>\n\n <span class=\"tn-date-range-separator\">–</span>\n\n <!-- End date segments -->\n <div class=\"tn-date-segment-group\">\n <input\n #endMonthInput\n type=\"text\"\n class=\"tn-date-segment tn-date-segment-month\"\n placeholder=\"MM\"\n maxlength=\"2\"\n [disabled]=\"isDisabled()\"\n (focus)=\"onSegmentFocus('end', 'month')\"\n (blur)=\"onSegmentBlur('end', 'month')\"\n (keydown)=\"onSegmentKeydown($event, 'end', 'month')\">\n <span class=\"tn-date-segment-separator\">/</span>\n <input\n #endDayInput\n type=\"text\"\n class=\"tn-date-segment tn-date-segment-day\"\n placeholder=\"DD\"\n maxlength=\"2\"\n [disabled]=\"isDisabled()\"\n (focus)=\"onSegmentFocus('end', 'day')\"\n (blur)=\"onSegmentBlur('end', 'day')\"\n (keydown)=\"onSegmentKeydown($event, 'end', 'day')\">\n <span class=\"tn-date-segment-separator\">/</span>\n <input\n #endYearInput\n type=\"text\"\n class=\"tn-date-segment tn-date-segment-year\"\n placeholder=\"YYYY\"\n maxlength=\"4\"\n [disabled]=\"isDisabled()\"\n (focus)=\"onSegmentFocus('end', 'year')\"\n (blur)=\"onSegmentBlur('end', 'year')\"\n (keydown)=\"onSegmentKeydown($event, 'end', 'year')\">\n </div>\n\n <button\n type=\"button\"\n class=\"tn-date-range-toggle\"\n aria-label=\"Open calendar\"\n [disabled]=\"isDisabled()\"\n (click)=\"openDatepicker()\">\n <span aria-hidden=\"true\">📅</span>\n </button>\n </div>\n\n <ng-template #calendarTemplate>\n <tn-calendar\n class=\"tn-calendar\"\n [startView]=\"'month'\"\n [rangeMode]=\"true\"\n [selectedRange]=\"initialRange()\"\n (selectedRangeChange)=\"onRangeSelected($event)\" />\n </ng-template>\n</div>\n","\nimport { Component, input, signal, forwardRef, computed } from '@angular/core';\nimport type { ControlValueAccessor} from '@angular/forms';\nimport { NG_VALUE_ACCESSOR, FormsModule } from '@angular/forms';\nimport type { TnSelectOption } from '../select/select.component';\nimport { TnSelectComponent } from '../select/select.component';\n\n@Component({\n selector: 'tn-time-input',\n standalone: true,\n imports: [FormsModule, TnSelectComponent],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => TnTimeInputComponent),\n multi: true\n }\n ],\n templateUrl: './time-input.component.html',\n styleUrl: './time-input.component.scss',\n host: {\n 'class': 'tn-time-input'\n }\n})\nexport class TnTimeInputComponent implements ControlValueAccessor {\n disabled = input<boolean>(false);\n format = input<'12h' | '24h'>('12h');\n granularity = input<'15m' | '30m' | '1h'>('15m');\n placeholder = input<string>('Pick a time');\n testId = input<string>('');\n\n private formDisabled = signal<boolean>(false);\n isDisabled = computed(() => this.disabled() || this.formDisabled());\n\n private step = computed((): number => {\n switch (this.granularity()) {\n case '15m': return 15;\n case '30m': return 30;\n case '1h': return 60;\n default: return 15;\n }\n });\n\n private onChange = (_value: string) => {};\n private onTouched = () => {};\n\n _value: string | null = null;\n \n // Generate time options for tn-select\n timeSelectOptions = computed((): TnSelectOption<string>[] => {\n const options: TnSelectOption<string>[] = [];\n const totalMinutes = 24 * 60; // Total minutes in a day\n\n for (let minutes = 0; minutes < totalMinutes; minutes += this.step()) {\n const hours = Math.floor(minutes / 60);\n const mins = minutes % 60;\n\n if (this.format() === '24h') {\n const timeStr = `${hours.toString().padStart(2, '0')}:${mins.toString().padStart(2, '0')}`;\n options.push({ value: timeStr, label: timeStr });\n } else {\n const displayHour = hours === 0 ? 12 : hours > 12 ? hours - 12 : hours;\n const ampm = hours < 12 ? 'AM' : 'PM';\n const timeStr = `${displayHour}:${mins.toString().padStart(2, '0')} ${ampm}`;\n options.push({ value: timeStr, label: timeStr });\n }\n }\n\n return options;\n });\n\n\n // ControlValueAccessor implementation\n writeValue(value: string): void {\n this._value = value || null;\n }\n\n registerOnChange(fn: (value: string) => void): void {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n\n setDisabledState(isDisabled: boolean): void {\n this.formDisabled.set(isDisabled);\n }\n\n // Event handlers\n onSelectionChange(value: string): void {\n this._value = value;\n this.onChange(value);\n this.onTouched();\n }\n}","<tn-select\n [options]=\"timeSelectOptions()\"\n [placeholder]=\"placeholder()\"\n [disabled]=\"isDisabled()\"\n [testId]=\"testId()\"\n [ngModel]=\"_value\"\n (selectionChange)=\"onSelectionChange($event)\" />\n","import type { OnInit, OnDestroy} from '@angular/core';\nimport { ElementRef, Directive, forwardRef, signal, inject } from '@angular/core';\nimport type { ControlValueAccessor} from '@angular/forms';\nimport { NG_VALUE_ACCESSOR } from '@angular/forms';\n\n@Directive({\n selector: 'input[tnSliderThumb]',\n standalone: true,\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => TnSliderThumbDirective),\n multi: true\n }\n ],\n host: {\n 'type': 'range',\n 'class': 'tn-slider-thumb',\n '[disabled]': 'slider?.isDisabled()',\n '[attr.min]': 'slider?.min()',\n '[attr.max]': 'slider?.max()',\n '[attr.step]': 'slider?.step()',\n '[value]': 'slider?.value()',\n '(input)': 'onInput($event)',\n '(change)': 'onChange($event)',\n '(blur)': 'onTouched()',\n '(mousedown)': 'onMouseDown($event)',\n '(touchstart)': 'onTouchStart($event)'\n }\n})\nexport class TnSliderThumbDirective implements ControlValueAccessor, OnInit, OnDestroy {\n disabled = signal<boolean>(false);\n\n slider?: {\n isDisabled: () => boolean;\n min: () => number;\n max: () => number;\n step: () => number;\n value: () => number;\n updateValue: (value: number) => void;\n getSliderRect: () => DOMRect;\n }; // Will be set by parent slider component\n\n onTouched = () => {};\n\n private onChangeCallback = (_value: number) => {};\n private isDragging = false;\n\n private elementRef = inject(ElementRef<HTMLInputElement>);\n\n ngOnInit() {\n // Make the native input visually hidden but still accessible\n const input = this.elementRef.nativeElement;\n input.style.opacity = '0';\n input.style.position = 'absolute';\n input.style.width = '100%';\n input.style.height = '100%';\n input.style.margin = '0';\n input.style.padding = '0';\n input.style.cursor = 'pointer';\n input.style.zIndex = '2';\n }\n\n ngOnDestroy() {\n this.cleanup();\n }\n\n // ControlValueAccessor implementation\n writeValue(value: number): void {\n if (this.elementRef.nativeElement) {\n this.elementRef.nativeElement.value = value?.toString() || '0';\n }\n }\n\n registerOnChange(fn: (value: number) => void): void {\n this.onChangeCallback = fn;\n }\n\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n\n setDisabledState(isDisabled: boolean): void {\n this.disabled.set(isDisabled);\n if (this.elementRef.nativeElement) {\n this.elementRef.nativeElement.disabled = isDisabled;\n }\n }\n\n onInput(event: Event): void {\n const input = event.target as HTMLInputElement;\n const value = parseFloat(input.value);\n \n if (this.slider) {\n this.slider.updateValue(value);\n }\n this.onChangeCallback(value);\n }\n\n onChange(_event: Event): void {\n this.onTouched();\n }\n\n onMouseDown(event: MouseEvent): void {\n if (this.disabled()) {return;}\n this.isDragging = true;\n this.addGlobalListeners();\n event.stopPropagation(); // Prevent track click\n }\n\n onTouchStart(event: TouchEvent): void {\n if (this.disabled()) {return;}\n this.isDragging = true;\n this.addGlobalListeners();\n event.stopPropagation(); // Prevent track click\n }\n\n private addGlobalListeners(): void {\n document.addEventListener('mousemove', this.onGlobalMouseMove);\n document.addEventListener('mouseup', this.onGlobalMouseUp);\n document.addEventListener('touchmove', this.onGlobalTouchMove, { passive: false });\n document.addEventListener('touchend', this.onGlobalTouchEnd);\n }\n\n private removeGlobalListeners(): void {\n document.removeEventListener('mousemove', this.onGlobalMouseMove);\n document.removeEventListener('mouseup', this.onGlobalMouseUp);\n document.removeEventListener('touchmove', this.onGlobalTouchMove);\n document.removeEventListener('touchend', this.onGlobalTouchEnd);\n }\n\n private onGlobalMouseMove = (event: MouseEvent): void => {\n if (!this.isDragging || this.disabled()) {return;}\n event.preventDefault();\n this.updateValueFromPosition(event.clientX);\n };\n\n private onGlobalMouseUp = (): void => {\n if (this.isDragging) {\n this.isDragging = false;\n this.onTouched();\n this.removeGlobalListeners();\n }\n };\n\n private onGlobalTouchMove = (event: TouchEvent): void => {\n if (!this.isDragging || this.disabled()) {return;}\n event.preventDefault();\n const touch = event.touches[0];\n this.updateValueFromPosition(touch.clientX);\n };\n\n private onGlobalTouchEnd = (): void => {\n if (this.isDragging) {\n this.isDragging = false;\n this.onTouched();\n this.removeGlobalListeners();\n }\n };\n\n private updateValueFromPosition(clientX: number): void {\n if (!this.slider) {return;}\n\n const rect = this.slider.getSliderRect();\n const percentage = Math.max(0, Math.min(1, (clientX - rect.left) / rect.width));\n const minVal = this.slider.min();\n const maxVal = this.slider.max();\n const newValue = minVal + (percentage * (maxVal - minVal));\n\n this.slider.updateValue(newValue);\n }\n\n private cleanup(): void {\n this.removeGlobalListeners();\n }\n}","import { A11yModule } from '@angular/cdk/a11y';\nimport type { ElementRef, OnDestroy, AfterViewInit} from '@angular/core';\nimport { Component, contentChild, input, forwardRef, signal, computed, viewChild, effect } from '@angular/core';\nimport type { ControlValueAccessor} from '@angular/forms';\nimport { NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { TnSliderThumbDirective } from './slider-thumb.directive';\n\nexport type LabelType = 'none' | 'handle' | 'track' | 'both';\n\n@Component({\n selector: 'tn-slider',\n standalone: true,\n imports: [A11yModule],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => TnSliderComponent),\n multi: true\n }\n ],\n templateUrl: './slider.component.html',\n styleUrl: './slider.component.scss',\n host: {\n 'class': 'tn-slider',\n '[attr.aria-disabled]': 'isDisabled()'\n }\n})\nexport class TnSliderComponent implements ControlValueAccessor, OnDestroy, AfterViewInit {\n min = input<number>(0);\n max = input<number>(100);\n step = input<number>(1);\n disabled = input<boolean>(false);\n labelPrefix = input<string>('');\n labelSuffix = input<string>('');\n labelType = input<LabelType>('none');\n\n thumbDirective = contentChild.required(TnSliderThumbDirective);\n sliderContainer = viewChild.required<ElementRef<HTMLDivElement>>('sliderContainer');\n thumbVisual = viewChild.required<ElementRef<HTMLDivElement>>('thumbVisual');\n\n private onChange = (_value: number) => {};\n private onTouched = () => {};\n\n value = signal<number>(0);\n private _showLabel = signal<boolean>(false);\n private _labelVisible = signal<boolean>(false);\n private formDisabled = signal<boolean>(false);\n\n // Computed disabled state (combines input and form state)\n isDisabled = computed(() => this.disabled() || this.formDisabled());\n\n // Computed percentage for track fill\n fillPercentage = computed(() => {\n const range = this.max() - this.min();\n if (range === 0) {return 0;}\n return ((this.value() - this.min()) / range) * 100;\n });\n\n // Computed scale for track fill (0 to 1)\n fillScale = computed(() => {\n return this.fillPercentage() / 100;\n });\n\n // Computed position for thumb (in pixels from left)\n thumbPosition = computed(() => {\n const containerWidth = this.sliderContainer()?.nativeElement?.offsetWidth || 0;\n const percentage = this.fillPercentage();\n // Center the thumb (20px width, so -10px offset)\n return (containerWidth * percentage / 100) - 10;\n });\n\n // Public signals for label management\n showLabel = this._showLabel.asReadonly();\n labelVisible = this._labelVisible.asReadonly();\n\n constructor() {\n // Effect to handle labelType changes\n effect(() => {\n const currentLabelType = this.labelType();\n if (currentLabelType !== 'none') {\n this.enableLabel();\n // Set up interaction listeners for handle type after view init\n if (this.sliderContainer() && (currentLabelType === 'handle' || currentLabelType === 'both')) {\n this.setupHandleInteractionListeners();\n }\n } else {\n // Disable label and clean up listeners\n this._showLabel.set(false);\n this.cleanupHandleInteractionListeners();\n }\n });\n }\n\n ngAfterViewInit() {\n // Initialize thumb directive if present\n const thumbDirective = this.thumbDirective();\n if (thumbDirective) {\n thumbDirective.slider = this;\n }\n this.updateThumbPosition();\n\n // Set up handle interaction listeners if labelType is handle or both\n const currentLabelType = this.labelType();\n if ((currentLabelType === 'handle' || currentLabelType === 'both') && this._showLabel()) {\n this.setupHandleInteractionListeners();\n }\n }\n\n ngOnDestroy() {\n this.cleanupHandleInteractionListeners();\n }\n\n // ControlValueAccessor implementation\n writeValue(value: number): void {\n if (value !== null && value !== undefined) {\n this.value.set(this.clampValue(value));\n }\n }\n\n registerOnChange(fn: (value: number) => void): void {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n\n setDisabledState(isDisabled: boolean): void {\n this.formDisabled.set(isDisabled);\n }\n\n // Public methods for thumb directive and label management\n updateValue(newValue: number): void {\n const clampedValue = this.clampValue(newValue);\n this.value.set(clampedValue);\n this.onChange(clampedValue);\n this.updateThumbPosition();\n }\n\n enableLabel(): void {\n this._showLabel.set(true);\n }\n\n showThumbLabel(): void {\n this._labelVisible.set(true);\n }\n\n hideThumbLabel(): void {\n this._labelVisible.set(false);\n }\n\n getSliderRect(): DOMRect {\n return this.sliderContainer().nativeElement.getBoundingClientRect();\n }\n\n onTrackClick(event: MouseEvent | TouchEvent): void {\n if (this.isDisabled()) {return;}\n\n event.preventDefault();\n const rect = this.getSliderRect();\n const clientX = event instanceof MouseEvent ? event.clientX : event.touches[0].clientX;\n const percentage = (clientX - rect.left) / rect.width;\n const minVal = this.min();\n const maxVal = this.max();\n const newValue = minVal + (percentage * (maxVal - minVal));\n\n this.updateValue(newValue);\n this.onTouched();\n }\n\n private updateThumbPosition(): void {\n // Thumb position is now handled by computed signal and template binding\n // No manual DOM manipulation needed\n }\n\n private clampValue(value: number): number {\n const minVal = this.min();\n const maxVal = this.max();\n const stepVal = this.step();\n\n // Clamp to min/max\n let clampedValue = Math.max(minVal, Math.min(maxVal, value));\n\n // Snap to step\n if (stepVal > 0) {\n const steps = Math.round((clampedValue - minVal) / stepVal);\n clampedValue = minVal + (steps * stepVal);\n }\n\n return clampedValue;\n }\n\n // Handle interaction listeners for tooltip-style labels\n private setupHandleInteractionListeners(): void {\n const sliderContainer = this.sliderContainer();\n if (sliderContainer) {\n const containerEl = sliderContainer.nativeElement;\n const thumbInput = containerEl.querySelector('input[tnSliderThumb]');\n\n containerEl.addEventListener('mousedown', this.onInteractionStart);\n containerEl.addEventListener('touchstart', this.onInteractionStart);\n\n if (thumbInput) {\n thumbInput.addEventListener('mousedown', this.onInteractionStart);\n thumbInput.addEventListener('touchstart', this.onInteractionStart);\n }\n\n document.addEventListener('mouseup', this.onInteractionEnd);\n document.addEventListener('touchend', this.onInteractionEnd);\n }\n }\n\n private cleanupHandleInteractionListeners(): void {\n const sliderContainer = this.sliderContainer();\n if (sliderContainer) {\n const containerEl = sliderContainer.nativeElement;\n const thumbInput = containerEl.querySelector('input[tnSliderThumb]');\n\n containerEl.removeEventListener('mousedown', this.onInteractionStart);\n containerEl.removeEventListener('touchstart', this.onInteractionStart);\n\n if (thumbInput) {\n thumbInput.removeEventListener('mousedown', this.onInteractionStart);\n thumbInput.removeEventListener('touchstart', this.onInteractionStart);\n }\n\n document.removeEventListener('mouseup', this.onInteractionEnd);\n document.removeEventListener('touchend', this.onInteractionEnd);\n }\n }\n\n private onInteractionStart = (): void => {\n const currentLabelType = this.labelType();\n if (currentLabelType === 'handle' || currentLabelType === 'both') {\n this.showThumbLabel();\n }\n }\n\n private onInteractionEnd = (): void => {\n const currentLabelType = this.labelType();\n if (currentLabelType === 'handle' || currentLabelType === 'both') {\n this.hideThumbLabel();\n }\n }\n}","<div\n #sliderContainer\n class=\"tn-slider-container\"\n [attr.aria-disabled]=\"isDisabled()\"\n [attr.data-disabled]=\"isDisabled()\"\n (mousedown)=\"onTrackClick($event)\"\n (touchstart)=\"onTrackClick($event)\">\n\n <div class=\"tn-slider-track\">\n <div class=\"tn-slider-track-inactive\"></div>\n <div class=\"tn-slider-track-active\">\n <div\n class=\"tn-slider-track-active-fill\"\n [style.transform]=\"'scaleX(' + fillScale() + ')'\">\n </div>\n </div>\n @if ((labelType() === 'track' || labelType() === 'both') && showLabel()) {\n <div class=\"tn-slider-track-label\">\n {{ labelPrefix() }}{{ value() }}{{ labelSuffix() }}\n </div>\n }\n </div>\n\n <div\n #thumbVisual\n class=\"tn-slider-thumb-visual\"\n [style.transform]=\"'translateX(' + thumbPosition() + 'px)'\">\n <div class=\"tn-slider-thumb-knob\"></div>\n @if ((labelType() === 'handle' || labelType() === 'both') && showLabel()) {\n <div\n class=\"tn-slider-thumb-label\"\n [class.visible]=\"labelVisible()\">\n {{ labelPrefix() }}{{ value() }}{{ labelSuffix() }}\n </div>\n }\n </div>\n\n <ng-content />\n</div>\n","import type {\n OnDestroy,\n OnInit} from '@angular/core';\nimport {\n Directive,\n input,\n ElementRef,\n inject\n} from '@angular/core';\nimport { TnSliderComponent } from './slider.component';\n\n@Directive({\n selector: 'tn-slider[tnSliderWithLabel]',\n standalone: true\n})\nexport class TnSliderWithLabelDirective implements OnInit, OnDestroy {\n enabled = input<boolean | string>(true, { alias: 'tnSliderWithLabel' });\n\n private _elementRef = inject(ElementRef<HTMLElement>);\n private _slider = inject(TnSliderComponent, { host: true });\n\n ngOnInit() {\n const enabled = this.enabled();\n const isEnabled = enabled === true || enabled === '' || enabled === 'true';\n\n if (!isEnabled) {\n return;\n }\n\n // Enable the label in the slider component\n this._slider.enableLabel();\n\n // Only set up event listeners for handle type labels (tooltip behavior)\n const currentLabelType = this._slider.labelType();\n if (currentLabelType === 'handle' || currentLabelType === 'both') {\n this._setupInteractionListeners();\n }\n }\n\n private _setupInteractionListeners(): void {\n const sliderContainer = this._elementRef.nativeElement.querySelector('.tn-slider-container');\n const thumbInput = this._elementRef.nativeElement.querySelector('input[tnSliderThumb]');\n \n if (sliderContainer) {\n sliderContainer.addEventListener('mousedown', this._onInteractionStart);\n sliderContainer.addEventListener('touchstart', this._onInteractionStart);\n }\n \n if (thumbInput) {\n thumbInput.addEventListener('mousedown', this._onInteractionStart);\n thumbInput.addEventListener('touchstart', this._onInteractionStart);\n }\n \n document.addEventListener('mouseup', this._onInteractionEnd);\n document.addEventListener('touchend', this._onInteractionEnd);\n }\n\n ngOnDestroy() {\n this._cleanup();\n }\n\n\n private _onInteractionStart = (_event: Event): void => {\n this._slider.showThumbLabel();\n }\n\n private _onInteractionEnd = (): void => {\n this._slider.hideThumbLabel();\n }\n\n private _cleanup(): void {\n // Only clean up interaction listeners if they were set up for handle type\n const currentLabelType = this._slider.labelType();\n if (currentLabelType === 'handle' || currentLabelType === 'both') {\n const sliderContainer = this._elementRef.nativeElement.querySelector('.tn-slider-container');\n const thumbInput = this._elementRef.nativeElement.querySelector('input[tnSliderThumb]');\n\n if (sliderContainer) {\n sliderContainer.removeEventListener('mousedown', this._onInteractionStart);\n sliderContainer.removeEventListener('touchstart', this._onInteractionStart);\n }\n\n if (thumbInput) {\n thumbInput.removeEventListener('mousedown', this._onInteractionStart);\n thumbInput.removeEventListener('touchstart', this._onInteractionStart);\n }\n\n document.removeEventListener('mouseup', this._onInteractionEnd);\n document.removeEventListener('touchend', this._onInteractionEnd);\n }\n }\n}","import { A11yModule } from '@angular/cdk/a11y';\nimport { ChangeDetectorRef } from '@angular/core';\nimport { Component, input, output, signal, computed, forwardRef, ChangeDetectionStrategy, ViewEncapsulation, inject } from '@angular/core';\nimport type { ControlValueAccessor} from '@angular/forms';\nimport { NG_VALUE_ACCESSOR } from '@angular/forms';\nimport type { TnButtonToggleGroupComponent } from './button-toggle-group.component';\n\n@Component({\n selector: 'tn-button-toggle',\n standalone: true,\n imports: [A11yModule],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => TnButtonToggleComponent),\n multi: true\n }\n ],\n templateUrl: './button-toggle.component.html',\n styleUrl: './button-toggle.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n host: {\n 'class': 'tn-button-toggle',\n '[attr.id]': 'id()',\n '[class.tn-button-toggle--checked]': 'checked()',\n '[class.tn-button-toggle--disabled]': 'isDisabled()',\n '[class.tn-button-toggle--standalone]': '!buttonToggleGroup',\n '(focus)': 'onFocus()'\n }\n})\nexport class TnButtonToggleComponent implements ControlValueAccessor {\n cdr = inject(ChangeDetectorRef);\n\n private static _uniqueIdCounter = 0;\n\n id = input<string>(`tn-button-toggle-${TnButtonToggleComponent._uniqueIdCounter++}`);\n value = input<unknown>(undefined);\n disabled = input<boolean>(false);\n checked = signal<boolean>(false);\n ariaLabel = input<string>('');\n ariaLabelledby = input<string>('');\n\n change = output<{ source: TnButtonToggleComponent; value: unknown }>();\n\n buttonId = computed(() => this.id() + '-button');\n buttonToggleGroup?: TnButtonToggleGroupComponent;\n\n private formDisabled = signal<boolean>(false);\n\n // Computed disabled state (combines input and form state)\n isDisabled = computed(() => this.disabled() || this.formDisabled());\n\n private onChange = (_value: boolean) => {};\n private onTouched = () => {};\n\n // ControlValueAccessor implementation\n writeValue(value: boolean): void {\n this.checked.set(!!value);\n }\n\n registerOnChange(fn: (value: boolean) => void): void {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n\n setDisabledState(isDisabled: boolean): void {\n this.formDisabled.set(isDisabled);\n }\n\n toggle(): void {\n if (this.isDisabled()) {\n return;\n }\n\n // If part of a group, let the group handle the state\n if (this.buttonToggleGroup) {\n this.buttonToggleGroup._onButtonToggleClick(this);\n } else {\n // Standalone toggle - handle its own state\n const newValue = !this.checked();\n this.checked.set(newValue);\n this.onChange(newValue);\n this.onTouched();\n\n this.change.emit({\n source: this,\n value: this.value() || newValue\n });\n }\n }\n\n onFocus(): void {\n this.onTouched();\n }\n\n // Method for group to mark this toggle as checked\n _markForCheck(): void {\n this.checked.set(true);\n this.cdr.markForCheck();\n }\n\n // Method for group to mark this toggle as unchecked\n _markForUncheck(): void {\n this.checked.set(false);\n this.cdr.markForCheck();\n }\n}","<button\n type=\"button\"\n class=\"tn-button-toggle__button\"\n [class.tn-button-toggle__button--checked]=\"checked()\"\n [disabled]=\"isDisabled()\"\n [attr.aria-pressed]=\"checked()\"\n [attr.aria-label]=\"ariaLabel() || null\"\n [attr.aria-labelledby]=\"ariaLabelledby()\"\n [attr.id]=\"buttonId()\"\n (click)=\"toggle()\">\n <span class=\"tn-button-toggle__label\">\n @if (checked()) {\n <span class=\"tn-button-toggle__check\">✓</span>\n }\n <ng-content />\n </span>\n</button>\n","import { A11yModule } from '@angular/cdk/a11y';\nimport { Component, contentChildren, input, output, signal, computed, forwardRef, ChangeDetectionStrategy, ViewEncapsulation, effect } from '@angular/core';\nimport type { ControlValueAccessor} from '@angular/forms';\nimport { NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { TnButtonToggleComponent } from './button-toggle.component';\n\nexport type TnButtonToggleType = 'checkbox' | 'radio';\n\n@Component({\n selector: 'tn-button-toggle-group',\n standalone: true,\n imports: [A11yModule],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => TnButtonToggleGroupComponent),\n multi: true\n }\n ],\n templateUrl: './button-toggle-group.component.html',\n styleUrl: './button-toggle-group.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n host: {\n 'class': 'tn-button-toggle-group'\n }\n})\nexport class TnButtonToggleGroupComponent implements ControlValueAccessor {\n buttonToggles = contentChildren(TnButtonToggleComponent, { descendants: true });\n\n multiple = input<boolean>(false);\n disabled = input<boolean>(false);\n name = input<string>('');\n ariaLabel = input<string>('');\n ariaLabelledby = input<string>('');\n\n change = output<{ source: TnButtonToggleComponent; value: unknown }>();\n\n private selectedValue = signal<unknown>(null);\n private selectedValues = signal<unknown[]>([]);\n private formDisabled = signal<boolean>(false);\n\n // Computed disabled state (combines input and form state)\n isDisabled = computed(() => this.disabled() || this.formDisabled());\n\n private onChange = (_value: unknown) => {};\n private onTouched = () => {};\n\n constructor() {\n // Effect to update button toggles when content children change\n effect(() => {\n const toggles = this.buttonToggles();\n toggles.forEach(toggle => {\n toggle.buttonToggleGroup = this;\n });\n });\n }\n\n // ControlValueAccessor implementation\n writeValue(value: unknown): void {\n if (this.multiple()) {\n this.selectedValues.set(Array.isArray(value) ? value : []);\n this.updateTogglesFromValues();\n } else {\n this.selectedValue.set(value);\n this.updateTogglesFromValue();\n }\n }\n\n registerOnChange(fn: (value: unknown) => void): void {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n\n setDisabledState(isDisabled: boolean): void {\n this.formDisabled.set(isDisabled);\n const toggles = this.buttonToggles();\n toggles.forEach(toggle => {\n toggle.setDisabledState(isDisabled);\n });\n }\n\n _onButtonToggleClick(clickedToggle: TnButtonToggleComponent): void {\n if (this.isDisabled() || clickedToggle.isDisabled()) {\n return;\n }\n\n if (this.multiple()) {\n this.handleMultipleSelection(clickedToggle);\n } else {\n this.handleSingleSelection(clickedToggle);\n }\n\n this.onTouched();\n this.change.emit({\n source: clickedToggle,\n value: this.multiple() ? this.selectedValues() : this.selectedValue()\n });\n }\n\n private handleSingleSelection(clickedToggle: TnButtonToggleComponent): void {\n // In radio mode, clicking the same toggle deselects it\n if (this.selectedValue() === clickedToggle.value) {\n this.selectedValue.set(null);\n clickedToggle._markForUncheck();\n } else {\n // Deselect all others\n const toggles = this.buttonToggles();\n toggles.forEach(toggle => {\n if (toggle !== clickedToggle) {\n toggle._markForUncheck();\n }\n });\n\n this.selectedValue.set(clickedToggle.value);\n clickedToggle._markForCheck();\n }\n\n this.onChange(this.selectedValue());\n }\n\n private handleMultipleSelection(clickedToggle: TnButtonToggleComponent): void {\n const currentValues = [...this.selectedValues()];\n const index = currentValues.indexOf(clickedToggle.value);\n\n if (index > -1) {\n // Remove from selection\n currentValues.splice(index, 1);\n clickedToggle._markForUncheck();\n } else {\n // Add to selection\n currentValues.push(clickedToggle.value);\n clickedToggle._markForCheck();\n }\n\n this.selectedValues.set(currentValues);\n this.onChange([...currentValues]);\n }\n\n private updateTogglesFromValue(): void {\n const toggles = this.buttonToggles();\n const value = this.selectedValue();\n\n toggles.forEach(toggle => {\n if (toggle.value === value) {\n toggle._markForCheck();\n } else {\n toggle._markForUncheck();\n }\n });\n }\n\n private updateTogglesFromValues(): void {\n const toggles = this.buttonToggles();\n const values = this.selectedValues();\n\n toggles.forEach(toggle => {\n if (values.includes(toggle.value)) {\n toggle._markForCheck();\n } else {\n toggle._markForUncheck();\n }\n });\n }\n}","<div class=\"tn-button-toggle-group\"\n [attr.role]=\"multiple() ? 'group' : 'radiogroup'\"\n [attr.aria-label]=\"ariaLabel()\"\n [attr.aria-labelledby]=\"ariaLabelledby()\">\n <ng-content />\n</div>\n","\nimport { Component, input, ChangeDetectionStrategy } from '@angular/core';\n\n@Component({\n selector: 'tn-tooltip',\n standalone: true,\n imports: [],\n templateUrl: './tooltip.component.html',\n styleUrl: './tooltip.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n 'class': 'tn-tooltip-component'\n }\n})\nexport class TnTooltipComponent {\n message = input('');\n id = input('');\n}","<div\n class=\"tn-tooltip\"\n role=\"tooltip\"\n [id]=\"id()\"\n [attr.aria-hidden]=\"false\">\n {{ message() }}\n</div>\n","/* eslint-disable @angular-eslint/no-input-rename */\n// Input aliasing is intentional for directive API consistency (e.g., ixTooltip, ixTooltipPosition)\n// This follows the standard Angular pattern used by Material and other directive-based components\nimport {\n Overlay,\n type OverlayRef,\n type ConnectedPosition,\n OverlayPositionBuilder\n} from '@angular/cdk/overlay';\nimport { ComponentPortal } from '@angular/cdk/portal';\nimport type {\n OnDestroy,\n OnInit,\n ComponentRef\n} from '@angular/core';\nimport {\n Directive,\n input,\n HostListener,\n ElementRef,\n ViewContainerRef,\n inject\n} from '@angular/core';\nimport { TnTooltipComponent } from './tooltip.component';\n\nexport type TooltipPosition = 'above' | 'below' | 'left' | 'right' | 'before' | 'after';\n\n@Directive({\n selector: '[tnTooltip]',\n standalone: true,\n host: {\n '[attr.aria-describedby]': '_ariaDescribedBy',\n }\n})\nexport class TnTooltipDirective implements OnInit, OnDestroy {\n message = input<string>('', { alias: 'tnTooltip' });\n position = input<TooltipPosition>('above', { alias: 'tnTooltipPosition' });\n disabled = input<boolean>(false, { alias: 'tnTooltipDisabled' });\n showDelay = input<number>(0, { alias: 'tnTooltipShowDelay' });\n hideDelay = input<number>(0, { alias: 'tnTooltipHideDelay' });\n tooltipClass = input<string>('', { alias: 'tnTooltipClass' });\n\n private _overlayRef: OverlayRef | null = null;\n private _tooltipInstance: ComponentRef<TnTooltipComponent> | null = null;\n private _showTimeout: ReturnType<typeof setTimeout> | null = null;\n private _hideTimeout: ReturnType<typeof setTimeout> | null = null;\n private _isTooltipVisible = false;\n protected _ariaDescribedBy: string | null = null;\n\n private _overlay = inject(Overlay);\n private _elementRef = inject(ElementRef<HTMLElement>);\n private _viewContainerRef = inject(ViewContainerRef);\n private _overlayPositionBuilder = inject(OverlayPositionBuilder);\n\n ngOnInit() {\n // Generate unique ID for aria-describedby\n this._ariaDescribedBy = `tn-tooltip-${Math.random().toString(36).substr(2, 9)}`;\n }\n\n ngOnDestroy() {\n this._clearTimeouts();\n this.hide(0);\n \n if (this._overlayRef) {\n this._overlayRef.dispose();\n this._overlayRef = null;\n }\n }\n\n @HostListener('mouseenter')\n _onMouseEnter(): void {\n if (!this.disabled() && this.message()) {\n this.show(this.showDelay());\n }\n }\n\n @HostListener('mouseleave')\n _onMouseLeave(): void {\n this.hide(this.hideDelay());\n }\n\n @HostListener('focus')\n _onFocus(): void {\n if (!this.disabled() && this.message()) {\n this.show(this.showDelay());\n }\n }\n\n @HostListener('blur')\n _onBlur(): void {\n this.hide(this.hideDelay());\n }\n\n @HostListener('keydown', ['$event'])\n _onKeydown(event: KeyboardEvent): void {\n if (event.key === 'Escape' && this._isTooltipVisible) {\n this.hide(0);\n }\n }\n\n /** Shows the tooltip */\n show(delay: number = 0): void {\n if (this.disabled() || !this.message() || this._isTooltipVisible) {\n return;\n }\n\n this._clearTimeouts();\n\n this._showTimeout = setTimeout(() => {\n if (!this._overlayRef) {\n this._createOverlay();\n }\n\n this._attachTooltip();\n }, delay);\n }\n\n /** Hides the tooltip */\n hide(delay: number = 0): void {\n this._clearTimeouts();\n\n this._hideTimeout = setTimeout(() => {\n if (this._tooltipInstance) {\n this._tooltipInstance.destroy();\n this._tooltipInstance = null;\n this._isTooltipVisible = false;\n }\n }, delay);\n }\n\n /** Toggle the tooltip visibility */\n toggle(): void {\n this._isTooltipVisible ? this.hide() : this.show();\n }\n\n private _createOverlay(): void {\n const positions = this._getPositions();\n\n const positionStrategy = this._overlayPositionBuilder\n .flexibleConnectedTo(this._elementRef)\n .withPositions(positions)\n .withFlexibleDimensions(false)\n .withViewportMargin(8)\n .withScrollableContainers([]);\n\n this._overlayRef = this._overlay.create({\n positionStrategy,\n scrollStrategy: this._overlay.scrollStrategies.reposition({ scrollThrottle: 20 }),\n panelClass: ['tn-tooltip-panel', `tn-tooltip-panel-${this.position()}`, this.tooltipClass()].filter(Boolean),\n });\n }\n\n private _attachTooltip(): void {\n if (!this._overlayRef) {\n return;\n }\n\n if (!this._tooltipInstance) {\n const portal = new ComponentPortal(TnTooltipComponent, this._viewContainerRef);\n this._tooltipInstance = this._overlayRef.attach(portal);\n this._tooltipInstance.setInput('message', this.message());\n this._tooltipInstance.setInput('id', this._ariaDescribedBy!);\n this._isTooltipVisible = true;\n }\n }\n\n private _getPositions(): ConnectedPosition[] {\n switch (this.position()) {\n case 'above':\n return [\n { originX: 'center', originY: 'top', overlayX: 'center', overlayY: 'bottom', offsetY: -12 },\n { originX: 'center', originY: 'bottom', overlayX: 'center', overlayY: 'top', offsetY: 12 },\n ];\n case 'below':\n return [\n { originX: 'center', originY: 'bottom', overlayX: 'center', overlayY: 'top', offsetY: 12 },\n { originX: 'center', originY: 'top', overlayX: 'center', overlayY: 'bottom', offsetY: -12 },\n ];\n case 'left':\n case 'before':\n return [\n { originX: 'start', originY: 'center', overlayX: 'end', overlayY: 'center', offsetX: -12 },\n { originX: 'end', originY: 'center', overlayX: 'start', overlayY: 'center', offsetX: 12 },\n ];\n case 'right':\n case 'after':\n return [\n { originX: 'end', originY: 'center', overlayX: 'start', overlayY: 'center', offsetX: 12 },\n { originX: 'start', originY: 'center', overlayX: 'end', overlayY: 'center', offsetX: -12 },\n ];\n default:\n return [\n { originX: 'center', originY: 'bottom', overlayX: 'center', overlayY: 'top', offsetY: 12 },\n ];\n }\n }\n\n private _clearTimeouts(): void {\n if (this._showTimeout) {\n clearTimeout(this._showTimeout);\n this._showTimeout = null;\n }\n if (this._hideTimeout) {\n clearTimeout(this._hideTimeout);\n this._hideTimeout = null;\n }\n }\n}","import type { DialogConfig, DialogRef } from '@angular/cdk/dialog';\nimport { Dialog } from '@angular/cdk/dialog';\nimport type { ComponentType } from '@angular/cdk/portal';\nimport type { TemplateRef } from '@angular/core';\nimport { Injectable, inject } from '@angular/core';\nimport type { Observable } from 'rxjs';\n\nexport type TnDialogOpenTarget<C> = ComponentType<C> | TemplateRef<unknown>;\n\nexport interface TnDialogDefaults {\n panelClass?: string | string[];\n maxWidth?: string;\n maxHeight?: string;\n width?: string;\n height?: string;\n disableClose?: boolean;\n role?: 'dialog' | 'alertdialog';\n fullscreen?: boolean;\n}\n\nconst defaults: TnDialogDefaults = {\n panelClass: ['tn-dialog-panel'],\n maxWidth: '90vw',\n maxHeight: '90vh',\n role: 'dialog',\n};\n\n@Injectable({ providedIn: 'root' })\nexport class TnDialog {\n private dialog = inject(Dialog);\n\n /**\n * Open a dialog with the given component or template.\n * Applies default configuration for panel class, max dimensions, and focus behavior.\n */\n open<C, D = unknown, R = unknown>(\n target: ComponentType<C> | TemplateRef<C>,\n config?: DialogConfig<D, DialogRef<R, C>>\n ): DialogRef<R, C> {\n const merged = {\n ...defaults,\n ...config,\n panelClass: [\n ...(defaults.panelClass as string[]),\n ...(Array.isArray(config?.panelClass) ? config.panelClass : config?.panelClass ? [config.panelClass] : [])\n ],\n autoFocus: config?.autoFocus ?? true,\n restoreFocus: config?.restoreFocus ?? true,\n };\n\n return this.dialog.open(target, merged);\n }\n\n /**\n * Open a fullscreen dialog that takes over the entire viewport.\n * Automatically applies fullscreen styling and dimensions.\n */\n openFullscreen<C, D = unknown, R = unknown>(\n target: ComponentType<C> | TemplateRef<C>,\n config?: DialogConfig<D, DialogRef<R, C>>\n ): DialogRef<R, C> {\n const merged = {\n ...defaults,\n ...config,\n maxWidth: '100vw',\n maxHeight: '100vh',\n width: '100vw',\n height: '100vh',\n panelClass: [\n ...(defaults.panelClass as string[]),\n ...(Array.isArray(config?.panelClass) ? config.panelClass : config?.panelClass ? [config.panelClass] : []),\n 'tn-dialog--fullscreen'\n ],\n autoFocus: config?.autoFocus ?? true,\n restoreFocus: config?.restoreFocus ?? true,\n };\n\n return this.dialog.open(target, merged);\n }\n\n /**\n * Open a confirmation dialog with customizable title, message, and button labels.\n * Returns a promise that resolves to an Observable of the user's choice.\n */\n confirm(opts: {\n title: string;\n message?: string;\n confirmText?: string;\n cancelText?: string;\n destructive?: boolean;\n }): Promise<Observable<boolean | undefined>> {\n // Import the confirm dialog component dynamically to avoid circular dependencies\n return import('./confirm-dialog.component').then(m => {\n const dialogRef = this.open(\n m.TnConfirmDialogComponent,\n {\n data: opts,\n role: 'alertdialog',\n disableClose: true,\n panelClass: [opts.destructive ? 'tn-dialog--destructive' : ''].filter(Boolean),\n }\n );\n return dialogRef.closed as Observable<boolean | undefined>;\n });\n }\n}","import { DialogRef, DIALOG_DATA } from '@angular/cdk/dialog';\nimport { DOCUMENT } from '@angular/common';\nimport { Component, input, signal, inject } from '@angular/core';\nimport type { OnInit} from '@angular/core';\n\n@Component({\n selector: 'tn-dialog-shell',\n templateUrl: './dialog-shell.component.html',\n standalone: true,\n imports: [],\n host: {\n 'class': 'tn-dialog-shell'\n }\n})\nexport class TnDialogShellComponent implements OnInit {\n title = input<string>('');\n showFullscreenButton = input<boolean>(false);\n\n isFullscreen = signal<boolean>(false);\n private originalStyles: { [key: string]: string } = {};\n\n private ref = inject(DialogRef);\n private document = inject(DOCUMENT);\n private data = inject(DIALOG_DATA, { optional: true });\n\n ngOnInit() {\n // Check if dialog was opened in fullscreen mode by looking for existing fullscreen class\n setTimeout(() => {\n const dialogPanel = this.document.querySelector('.tn-dialog-panel');\n if (dialogPanel?.classList.contains('tn-dialog--fullscreen')) {\n this.isFullscreen.set(true);\n }\n });\n }\n\n close(result?: unknown): void {\n this.ref.close(result);\n }\n \n toggleFullscreen() {\n if (this.isFullscreen()) {\n this.exitFullscreen();\n } else {\n this.enterFullscreen();\n }\n }\n\n private enterFullscreen() {\n const dialogPanel = this.document.querySelector('.tn-dialog-panel') as HTMLElement;\n\n if (dialogPanel) {\n // Store original styles\n this.originalStyles = {\n panelMaxWidth: dialogPanel.style.maxWidth,\n panelMaxHeight: dialogPanel.style.maxHeight,\n panelWidth: dialogPanel.style.width,\n panelHeight: dialogPanel.style.height,\n panelBorderRadius: dialogPanel.style.borderRadius\n };\n\n // Apply fullscreen styles\n dialogPanel.style.maxWidth = '100vw';\n dialogPanel.style.maxHeight = '100vh';\n dialogPanel.style.width = '100vw';\n dialogPanel.style.height = '100vh';\n dialogPanel.style.borderRadius = '0';\n\n // Add fullscreen class\n dialogPanel.classList.add('tn-dialog--fullscreen');\n\n this.isFullscreen.set(true);\n }\n }\n\n private exitFullscreen() {\n const dialogPanel = this.document.querySelector('.tn-dialog-panel') as HTMLElement;\n\n if (dialogPanel) {\n // Restore original styles\n dialogPanel.style.maxWidth = this.originalStyles['panelMaxWidth'] || '90vw';\n dialogPanel.style.maxHeight = this.originalStyles['panelMaxHeight'] || '90vh';\n dialogPanel.style.width = this.originalStyles['panelWidth'] || '';\n dialogPanel.style.height = this.originalStyles['panelHeight'] || '';\n dialogPanel.style.borderRadius = this.originalStyles['panelBorderRadius'] || '8px';\n\n // Remove fullscreen class\n dialogPanel.classList.remove('tn-dialog--fullscreen');\n\n this.isFullscreen.set(false);\n }\n }\n}","<header class=\"tn-dialog__header\">\n <h2 class=\"tn-dialog__title\">{{ title() }}</h2>\n @if (showFullscreenButton()) {\n <button\n type=\"button\"\n class=\"tn-dialog__fullscreen\"\n tabindex=\"-1\"\n [attr.aria-label]=\"isFullscreen() ? 'Exit fullscreen' : 'Enter fullscreen'\"\n (click)=\"toggleFullscreen()\">\n <span class=\"tn-dialog__fullscreen-icon\">{{ isFullscreen() ? '⤓' : '⤢' }}</span>\n </button>\n }\n <button type=\"button\" class=\"tn-dialog__close\" tabindex=\"-1\" aria-label=\"Close dialog\" (click)=\"close()\">✕</button>\n</header>\n\n<section class=\"tn-dialog__content\" cdkDialogContent>\n <ng-content />\n</section>\n\n<footer class=\"tn-dialog__actions\" cdkDialogActions>\n <ng-content select=\"[tnDialogAction]\" />\n</footer>\n","import { DialogRef} from '@angular/cdk/dialog';\nimport { DIALOG_DATA } from '@angular/cdk/dialog';\nimport { Component, inject } from '@angular/core';\nimport { TnDialogShellComponent } from './dialog-shell.component';\nimport { TnButtonComponent } from '../button/button.component';\n\nexport interface TnConfirmDialogData {\n title: string;\n message?: string;\n confirmText?: string;\n cancelText?: string;\n destructive?: boolean;\n}\n\n@Component({\n selector: 'tn-confirm-dialog',\n templateUrl: './confirm-dialog.component.html',\n standalone: true,\n imports: [TnDialogShellComponent, TnButtonComponent],\n host: {\n 'class': 'tn-dialog-shell',\n '[class.tn-dialog--destructive]': 'data.destructive'\n }\n})\nexport class TnConfirmDialogComponent {\n ref = inject(DialogRef<boolean>);\n data = inject<TnConfirmDialogData>(DIALOG_DATA);\n}","<tn-dialog-shell [title]=\"data.title\">\n <p style=\"padding: var(--content-padding);\">{{ data.message }}</p>\n <div tnDialogAction>\n <tn-button\n type=\"button\"\n variant=\"outline\"\n [label]=\"data.cancelText || 'Cancel'\"\n (click)=\"ref.close(false)\" />\n <tn-button\n type=\"button\"\n [color]=\"data.destructive ? 'warn' : 'primary'\"\n [label]=\"data.confirmText || 'OK'\"\n (click)=\"ref.close(true)\" />\n </div>\n</tn-dialog-shell>\n","import type { TemplateRef} from '@angular/core';\nimport { Component, input, viewChild } from '@angular/core';\n\n@Component({\n selector: 'tn-step',\n template: `\n <ng-template #content>\n <ng-content />\n </ng-template>\n `,\n standalone: true\n})\nexport class TnStepComponent {\n label = input<string>('');\n icon = input<string | undefined>(undefined);\n optional = input<boolean>(false);\n completed = input<boolean>(false);\n hasError = input<boolean>(false);\n data = input<unknown>(null);\n\n content = viewChild.required<TemplateRef<unknown>>('content');\n}","import { trigger, style, transition, animate } from '@angular/animations';\nimport { CommonModule } from '@angular/common';\nimport { ChangeDetectorRef, Component, input, output, contentChildren, computed, effect, model, inject } from '@angular/core';\nimport { TnStepComponent } from './step.component';\n\n@Component({\n selector: 'tn-stepper',\n templateUrl: './stepper.component.html',\n styleUrls: ['./stepper.component.scss'],\n standalone: true,\n imports: [CommonModule],\n animations: [\n trigger('stepTransition', [\n transition(':enter', [\n style({ opacity: 0, transform: 'translateX(50px)' }),\n animate('300ms ease-in-out', style({ opacity: 1, transform: 'translateX(0)' }))\n ])\n ])\n ],\n host: {\n '(window:resize)': 'onWindowResize($event)'\n }\n})\nexport class TnStepperComponent {\n orientation = input<'horizontal' | 'vertical' | 'auto'>('horizontal');\n linear = input<boolean>(false);\n selectedIndex = model<number>(0);\n\n selectionChange = output<{ selectedIndex: number; previouslySelectedIndex: number }>();\n completed = output<Array<{ label: string; completed: boolean; data: unknown }>>();\n\n steps = contentChildren(TnStepComponent, { descendants: true });\n\n private cdr = inject(ChangeDetectorRef);\n\n constructor() {\n // Effect to check if all steps are completed\n effect(() => {\n // Trigger on any step completion change\n const stepsArray = this.steps();\n const allCompleted = stepsArray.every(step => step.completed());\n if (allCompleted && stepsArray.length > 0) {\n this.completed.emit(this._getStepData());\n }\n });\n }\n\n onWindowResize(_event: Event) {\n this.cdr.detectChanges();\n }\n\n private _getStepData(): Array<{ label: string; completed: boolean; data: unknown }> {\n return this.steps().map(step => ({\n label: step.label(),\n completed: step.completed(),\n data: step.data()\n }));\n }\n\n isWideScreen = computed(() => {\n // Note: This will only update on window resize due to ChangeDetectorRef trigger\n return window.innerWidth > 768;\n });\n\n selectStep(index: number): void {\n if (!this.linear() || this.canSelectStep(index)) {\n const previousIndex = this.selectedIndex();\n this.selectedIndex.set(index);\n this.selectionChange.emit({\n selectedIndex: index,\n previouslySelectedIndex: previousIndex\n });\n }\n }\n\n canSelectStep(index: number): boolean {\n if (!this.linear()) {return true;}\n\n // In linear mode, can only select completed steps or the next step\n const stepsArray = this.steps();\n for (let i = 0; i < index; i++) {\n if (!stepsArray[i]?.completed()) {\n return false;\n }\n }\n return true;\n }\n\n next(): void {\n const stepsLength = this.steps().length;\n if (this.selectedIndex() < stepsLength - 1) {\n this.selectStep(this.selectedIndex() + 1);\n }\n }\n\n previous(): void {\n if (this.selectedIndex() > 0) {\n this.selectStep(this.selectedIndex() - 1);\n }\n }\n\n _trackByStepIndex(index: number): number {\n return index;\n }\n}","<div class=\"tn-stepper\"\n [class.tn-stepper--horizontal]=\"orientation() === 'horizontal' || (orientation() === 'auto' && isWideScreen())\"\n [class.tn-stepper--vertical]=\"orientation() === 'vertical' || (orientation() === 'auto' && !isWideScreen())\">\n\n <!-- Step Headers -->\n <div class=\"tn-stepper__header\">\n @for (step of steps(); track $index; let i = $index) {\n <div class=\"tn-stepper__step-header\"\n tabindex=\"0\"\n role=\"button\"\n [class.tn-stepper__step-header--active]=\"selectedIndex() === i\"\n [class.tn-stepper__step-header--completed]=\"step.completed()\"\n [class.tn-stepper__step-header--error]=\"step.hasError()\"\n [class.tn-stepper__step-header--optional]=\"step.optional()\"\n (click)=\"selectStep(i)\"\n (keydown.enter)=\"selectStep(i)\"\n (keydown.space)=\"selectStep(i)\">\n\n <!-- Step Number/Icon -->\n <div class=\"tn-stepper__step-indicator\">\n @if (step.completed() && !step.hasError()) {\n <span class=\"tn-stepper__step-check\">✓</span>\n }\n @if (step.hasError()) {\n <span class=\"tn-stepper__step-error\">!</span>\n }\n @if (!step.completed() && !step.hasError()) {\n @if (step.icon()) {\n <span class=\"tn-stepper__step-icon\">{{ step.icon() }}</span>\n } @else {\n <span class=\"tn-stepper__step-number\">{{ i + 1 }}</span>\n }\n }\n </div>\n\n <!-- Step Label -->\n <div class=\"tn-stepper__step-label\">\n <div class=\"tn-stepper__step-title\">{{ step.label() }}</div>\n @if (step.optional()) {\n <span class=\"tn-stepper__step-subtitle\">Optional</span>\n }\n </div>\n </div>\n\n <!-- Connector Line (except for last step) -->\n @if (i < steps().length - 1) {\n <div class=\"tn-stepper__connector\"></div>\n }\n }\n </div>\n\n <!-- Step Content -->\n <div class=\"tn-stepper__content\">\n @for (step of steps(); track $index; let i = $index) {\n @if (selectedIndex() === i) {\n <div class=\"tn-stepper__step-content\"\n [@stepTransition]=\"selectedIndex()\">\n <ng-container *ngTemplateOutlet=\"step.content()\" />\n </div>\n }\n }\n </div>\n</div>","/**\n * Auto-generated from SVG files - DO NOT EDIT MANUALLY\n * \n * To regenerate this file, run:\n * npm run generate-icons\n * \n * Generated: 2025-12-31T21:56:45.992Z\n * Source: projects/truenas-ui/src/assets/icons\n */\n\n/* eslint-disable */\n\nexport const TRUENAS_ICONS: Record<string, string> = {\n 'tn-dataset': `<svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M6 8C5.72 8 5.48 7.9 5.29 7.71C5.1 7.52 5 7.28 5 7C5 6.72 5.1 6.48 5.29 6.29C5.48 6.1 5.72 6 6 6H18C18.28 6 18.52 6.1 18.71 6.29C18.9 6.48 19 6.72 19 7C19 7.28 18.9 7.52 18.71 7.71C18.52 7.9 18.28 8 18 8H6ZM8 5C7.72 5 7.48 4.9 7.29 4.71C7.1 4.52 7 4.28 7 4C7 3.72 7.1 3.48 7.29 3.29C7.48 3.1 7.72 3 8 3H16C16.28 3 16.52 3.1 16.71 3.29C16.9 3.48 17 3.72 17 4C17 4.28 16.9 4.52 16.71 4.71C16.52 4.9 16.28 5 16 5H8ZM3 9L5 21H19L21 9H3ZM14.71 15.1C14.52 15.29 14.28 15.39 14 15.39H10C9.72 15.39 9.48 15.29 9.29 15.1C9.1 14.91 9 14.67 9 14.39C9 14.11 9.1 13.87 9.29 13.68C9.48 13.49 9.72 13.39 10 13.39H14C14.28 13.39 14.52 13.49 14.71 13.68C14.9 13.87 15 14.11 15 14.39C15 14.67 14.9 14.91 14.71 15.1Z\" fill=\"currentColor\"/>\n</svg>`\n};\n\n/**\n * Register all TrueNAS custom icons with the icon registry\n * @param iconRegistry The IxIconRegistryService instance\n */\nexport function registerTruenasIcons(iconRegistry: any): void {\n Object.entries(TRUENAS_ICONS).forEach(([name, svg]) => {\n iconRegistry.registerIcon(name, svg);\n });\n}\n","import { A11yModule } from '@angular/cdk/a11y';\nimport { ScrollingModule } from '@angular/cdk/scrolling';\nimport type { OnInit, AfterViewInit, AfterViewChecked} from '@angular/core';\nimport { Component, computed, input, output, inject } from '@angular/core';\nimport {\n mdiFolder,\n mdiFile,\n mdiDatabase,\n mdiHarddisk,\n mdiFolderNetwork,\n mdiFolderPlus,\n mdiLoading,\n mdiLock,\n mdiFolderOpen,\n mdiAlertCircle\n} from '@mdi/js';\nimport type { FileSystemItem, CreateFolderEvent, FilePickerMode } from './file-picker.interfaces';\nimport { TnButtonComponent } from '../button/button.component';\nimport { registerTruenasIcons } from '../custom-icons/generated-icons';\nimport { TnIconRegistryService } from '../icon/icon-registry.service';\nimport { TnIconComponent } from '../icon/icon.component';\nimport { FileSizePipe } from '../pipes/file-size/file-size.pipe';\nimport { TruncatePathPipe } from '../pipes/truncate-path/truncate-path.pipe';\nimport { TnTableComponent } from '../table/table.component';\nimport { TnTableColumnDirective, TnHeaderCellDefDirective, TnCellDefDirective } from '../table-column/table-column.directive';\n\n@Component({\n selector: 'tn-file-picker-popup',\n standalone: true,\n imports: [\n TnIconComponent,\n TnButtonComponent,\n TnTableComponent,\n TnTableColumnDirective,\n TnHeaderCellDefDirective,\n TnCellDefDirective,\n ScrollingModule,\n A11yModule,\n FileSizePipe,\n TruncatePathPipe\n],\n templateUrl: './file-picker-popup.component.html',\n styleUrl: './file-picker-popup.component.scss',\n host: {\n 'class': 'tn-file-picker-popup'\n }\n})\nexport class TnFilePickerPopupComponent implements OnInit, AfterViewInit, AfterViewChecked {\n mode = input<FilePickerMode>('any');\n multiSelect = input<boolean>(false);\n allowCreate = input<boolean>(true);\n allowDatasetCreate = input<boolean>(false);\n allowZvolCreate = input<boolean>(false);\n currentPath = input<string>('/mnt');\n fileItems = input<FileSystemItem[]>([]);\n selectedItems = input<string[]>([]);\n loading = input<boolean>(false);\n creationLoading = input<boolean>(false);\n fileExtensions = input<string[] | undefined>(undefined);\n\n private iconRegistry = inject(TnIconRegistryService);\n\n constructor() {\n // Register TrueNAS custom icons\n registerTruenasIcons(this.iconRegistry);\n\n // Register MDI icons used by this component\n this.registerMdiIcons();\n }\n\n /**\n * Register MDI icon library with all icons used by the file picker component\n * This makes the component self-contained with zero configuration required\n */\n private registerMdiIcons(): void {\n const mdiIcons: Record<string, string> = {\n 'folder': mdiFolder,\n 'file': mdiFile,\n 'database': mdiDatabase,\n 'harddisk': mdiHarddisk,\n 'folder-network': mdiFolderNetwork,\n 'folder-plus': mdiFolderPlus,\n 'loading': mdiLoading,\n 'lock': mdiLock,\n 'folder-open': mdiFolderOpen,\n 'alert-circle': mdiAlertCircle\n };\n\n // Register MDI library with resolver for file picker icons\n this.iconRegistry.registerLibrary({\n name: 'mdi',\n resolver: (iconName: string) => {\n const pathData = mdiIcons[iconName];\n if (!pathData) {\n return null;\n }\n return `<svg viewBox=\"0 0 24 24\"><path fill=\"currentColor\" d=\"${pathData}\"/></svg>`;\n }\n });\n }\n\n ngOnInit() {\n }\n\n ngAfterViewInit() {\n }\n\n ngAfterViewChecked(): void {\n // Auto-focus and select text in input when it appears\n const inp = document.querySelector('[data-autofocus=\"true\"]') as HTMLInputElement;\n if (inp && inp !== document.activeElement) {\n setTimeout(() => {\n inp.focus();\n inp.select();\n }, 0);\n }\n }\n\n itemClick = output<FileSystemItem>();\n itemDoubleClick = output<FileSystemItem>();\n pathNavigate = output<string>();\n createFolder = output<CreateFolderEvent>();\n clearSelection = output<void>();\n close = output<void>();\n submit = output<void>();\n cancel = output<void>();\n submitFolderName = output<{ name: string; tempId: string }>();\n cancelFolderCreation = output<string>();\n\n // Table configuration\n displayedColumns = ['select', 'name', 'size', 'modified'];\n\n // Computed values\n filteredFileItems = computed(() => {\n const items = this.fileItems();\n const extensions = this.fileExtensions();\n const mode = this.mode();\n\n return items.map(item => {\n let shouldDisable = false;\n\n // Check if item matches mode\n if (mode !== 'any') {\n const matchesMode =\n (mode === 'file' && item.type === 'file') ||\n (mode === 'folder' && item.type === 'folder') ||\n (mode === 'dataset' && item.type === 'dataset') ||\n (mode === 'zvol' && item.type === 'zvol');\n\n shouldDisable = !matchesMode;\n }\n\n // Check file extension filter (only applies to files)\n if (extensions && extensions.length > 0 && item.type === 'file') {\n const matchesExtension = extensions.some(ext =>\n item.name.toLowerCase().endsWith(ext.toLowerCase())\n );\n shouldDisable = shouldDisable || !matchesExtension;\n }\n\n // Don't override existing disabled state from backend\n return { ...item, disabled: item.disabled || shouldDisable };\n });\n });\n\n onItemClick(item: FileSystemItem): void {\n if (item.isCreating) {return;} // Don't allow selection during creation\n this.itemClick.emit(item);\n }\n\n onItemDoubleClick(item: FileSystemItem): void {\n if (item.isCreating) {return;} // Don't allow navigation during creation\n this.itemDoubleClick.emit(item);\n }\n\n navigateToPath(path: string): void {\n // Check if any item is in creation mode\n const hasCreatingItem = this.fileItems().some(item => item.isCreating);\n if (hasCreatingItem) {\n console.warn('Cannot navigate while creating a folder');\n return;\n }\n this.pathNavigate.emit(path);\n }\n\n onCreateFolder(): void {\n this.createFolder.emit({\n parentPath: this.currentPath(),\n folderName: 'New Folder'\n });\n }\n\n onClearSelection(): void {\n this.clearSelection.emit();\n }\n\n onSubmit(): void {\n this.submit.emit();\n }\n\n onCancel(): void {\n this.cancel.emit();\n }\n\n onFolderNameSubmit(event: Event, item: FileSystemItem): void {\n const inp = event.target as HTMLInputElement;\n const name = inp.value.trim();\n\n if (item.tempId) {\n // Even if empty, let parent component handle validation\n this.submitFolderName.emit({ name, tempId: item.tempId });\n }\n }\n\n onFolderNameCancel(item: FileSystemItem): void {\n if (item.tempId) {\n this.cancelFolderCreation.emit(item.tempId);\n }\n }\n\n onFolderNameInputBlur(event: Event, item: FileSystemItem): void {\n // Auto-submit on blur (don't close picker, parent handles submission)\n const inp = event.target as HTMLInputElement;\n if (item.tempId) {\n this.submitFolderName.emit({\n name: inp.value.trim(),\n tempId: item.tempId\n });\n }\n }\n\n onFolderNameKeyDown(event: KeyboardEvent, item: FileSystemItem): void {\n if (event.key === 'Enter') {\n event.preventDefault();\n this.onFolderNameSubmit(event, item);\n } else if (event.key === 'Escape') {\n event.preventDefault();\n this.onFolderNameCancel(item);\n }\n }\n\n isCreateDisabled(): boolean {\n return this.fileItems().some(item => item.isCreating) || this.creationLoading();\n }\n\n // Utility methods\n isNavigatable(item: FileSystemItem): boolean {\n return ['folder', 'dataset', 'mountpoint'].includes(item.type);\n }\n\n getItemIcon(item: FileSystemItem): string {\n if (item.icon) {return item.icon;}\n\n switch (item.type) {\n case 'folder': return 'folder';\n case 'dataset': return 'tn-dataset';\n case 'zvol': return 'database';\n case 'mountpoint': return 'folder-network';\n case 'file': return this.getFileIcon(item.name);\n default: return 'file';\n }\n }\n\n getFileIcon(filename: string): string {\n const ext = filename.split('.').pop()?.toLowerCase();\n switch (ext) {\n case 'txt': case 'log': case 'md': case 'readme': return 'file';\n case 'pdf': return 'file';\n case 'jpg': case 'jpeg': case 'png': case 'gif': case 'svg': case 'webp': return 'file';\n case 'mp4': case 'avi': case 'mov': case 'mkv': case 'webm': return 'file';\n case 'mp3': case 'wav': case 'flac': case 'ogg': case 'aac': return 'file';\n case 'zip': case 'tar': case 'gz': case 'rar': case '7z': return 'file';\n case 'js': case 'ts': case 'html': case 'css': case 'py': case 'java': case 'cpp': case 'c': return 'file';\n case 'json': case 'xml': case 'yaml': case 'yml': case 'toml': return 'file';\n case 'iso': case 'img': case 'dmg': return 'harddisk';\n default: return 'file';\n }\n }\n\n /**\n * Get the library type for the icon\n * @param item FileSystemItem\n * @returns 'custom' for TrueNAS custom icons, 'mdi' for Material Design Icons\n */\n getItemIconLibrary(item: FileSystemItem): 'mdi' | 'custom' {\n // Use custom library for dataset icon\n if (item.type === 'dataset') {\n return 'custom';\n }\n // Use mdi for all other icons\n return 'mdi';\n }\n\n getZfsBadge(item: FileSystemItem): string {\n switch (item.type) {\n case 'dataset': return 'DS';\n case 'zvol': return 'ZV';\n case 'mountpoint': return 'MP';\n default: return '';\n }\n }\n\n isZfsObject(item: FileSystemItem): boolean {\n return ['dataset', 'zvol', 'mountpoint'].includes(item.type);\n }\n\n isSelected(item: FileSystemItem): boolean {\n return this.selectedItems().includes(item.path);\n }\n\n getRowClass = (row: FileSystemItem): string | string[] => {\n const classes: string[] = [];\n\n if (this.isSelected(row) && !row.disabled) {\n classes.push('selected');\n }\n\n if (row.disabled) {\n classes.push('disabled');\n }\n\n return classes;\n }\n\n getFileInfo(item: FileSystemItem): string {\n const parts: string[] = [];\n \n if (item.size !== undefined) {\n parts.push(this.formatFileSize(item.size));\n }\n \n if (item.modified) {\n parts.push(item.modified.toLocaleDateString());\n }\n \n return parts.join(' • ');\n }\n\n formatFileSize(bytes: number): string {\n if (bytes === 0) {return '0 B';}\n \n const k = 1024;\n const sizes = ['B', 'KB', 'MB', 'GB', 'TB'];\n const i = Math.floor(Math.log(bytes) / Math.log(k));\n \n return parseFloat((bytes / Math.pow(k, i)).toFixed(1)) + ' ' + sizes[i];\n }\n\n getTypeDisplayName(type: string): string {\n switch (type) {\n case 'file': return 'File';\n case 'folder': return 'Folder';\n case 'dataset': return 'Dataset';\n case 'zvol': return 'Zvol';\n case 'mountpoint': return 'Mount Point';\n default: return type;\n }\n }\n\n formatDate(date: Date): string {\n const now = new Date();\n const today = new Date(now.getFullYear(), now.getMonth(), now.getDate());\n const itemDate = new Date(date.getFullYear(), date.getMonth(), date.getDate());\n \n const timePart = date.toLocaleTimeString([], { \n hour: 'numeric', \n minute: '2-digit',\n hour12: true \n });\n \n // Check if it's today\n if (itemDate.getTime() === today.getTime()) {\n return `Today ${timePart}`;\n }\n \n // Check if it's yesterday\n const yesterday = new Date(today);\n yesterday.setDate(yesterday.getDate() - 1);\n if (itemDate.getTime() === yesterday.getTime()) {\n return `Yesterday ${timePart}`;\n }\n \n // Check if it's this year\n if (date.getFullYear() === now.getFullYear()) {\n return `${(date.getMonth() + 1).toString().padStart(2, '0')}/${date.getDate().toString().padStart(2, '0')} ${timePart}`;\n }\n \n // Different year - include year\n return `${(date.getMonth() + 1).toString().padStart(2, '0')}/${date.getDate().toString().padStart(2, '0')}/${date.getFullYear()} ${timePart}`;\n }\n\n}","<!-- Header with breadcrumb navigation -->\n<div class=\"tn-file-picker-header\">\n <nav class=\"tn-file-picker-breadcrumb\" aria-label=\"File path\">\n @for (segment of currentPath() | tnTruncatePath; track $index; let last = $last) {\n <button\n class=\"breadcrumb-segment\"\n [class.current]=\"last\"\n [class.parent-nav]=\"segment.name === '..'\"\n [disabled]=\"last\"\n (click)=\"navigateToPath(segment.path)\">\n {{ segment.name }}\n </button>\n }\n </nav>\n\n <div class=\"tn-file-picker-actions\">\n @if (allowCreate()) {\n <tn-button\n variant=\"outline\"\n label=\"New Folder\"\n [disabled]=\"isCreateDisabled()\"\n (onClick)=\"onCreateFolder()\" />\n }\n </div>\n</div>\n\n<!-- Loading indicator -->\n@if (loading()) {\n <div class=\"tn-file-picker-loading\">\n <tn-icon name=\"loading\" library=\"mdi\" />\n <span>Loading...</span>\n </div>\n}\n\n<!-- File table -->\n@if (!loading()) {\n <div class=\"tn-file-picker-content\">\n <tn-table\n [dataSource]=\"filteredFileItems()\"\n [displayedColumns]=\"multiSelect() ? displayedColumns : displayedColumns.slice(1)\">\n\n <!-- Selection column -->\n @if (multiSelect()) {\n <ng-container tnColumnDef=\"select\">\n <ng-template tnHeaderCellDef>\n <!-- Select all checkbox -->\n </ng-template>\n <ng-template let-item tnCellDef>\n <input \n type=\"checkbox\" \n [checked]=\"isSelected(item)\"\n [disabled]=\"!!item.disabled\"\n (click)=\"$event.stopPropagation()\"\n (change)=\"onItemClick(item)\">\n </ng-template>\n </ng-container>\n }\n\n <!-- Name column -->\n <ng-container tnColumnDef=\"name\">\n <ng-template tnHeaderCellDef>Name</ng-template>\n <ng-template let-item tnCellDef>\n\n <!-- NORMAL MODE: Display name -->\n @if (!item.isCreating) {\n <div\n class=\"file-name-cell\"\n [class.disabled]=\"!!item.disabled\"\n [class.zfs-object]=\"isZfsObject(item)\"\n [attr.tabindex]=\"item.disabled ? null : 0\"\n [attr.role]=\"'button'\"\n (click)=\"onItemClick(item)\"\n (dblclick)=\"onItemDoubleClick(item)\"\n (keydown.enter)=\"onItemDoubleClick(item)\"\n (keydown.space)=\"onItemClick(item)\">\n <tn-icon\n [name]=\"getItemIcon(item)\"\n [library]=\"getItemIconLibrary(item)\"\n [class]=\"'file-icon file-icon-' + item.type\" />\n <span class=\"file-name\">{{ item.name }}</span>\n\n <!-- ZFS badge -->\n @if (isZfsObject(item)) {\n <span\n [class]=\"'zfs-badge zfs-badge-' + item.type\">\n {{ getZfsBadge(item) }}\n </span>\n }\n\n <!-- Permission indicator -->\n @if (item.permissions === 'none') {\n <tn-icon\n name=\"lock\"\n library=\"mdi\"\n class=\"permission-icon\" />\n }\n </div>\n }\n\n <!-- EDIT MODE: Inline name input with error display -->\n @if (item.isCreating) {\n <div class=\"file-name-cell-wrapper\">\n <div class=\"file-name-cell editing\" [class.has-error]=\"!!item.creationError\">\n <tn-icon\n name=\"folder\"\n library=\"mdi\"\n class=\"file-icon file-icon-folder\" />\n <input\n #folderNameInput\n type=\"text\"\n role=\"textbox\"\n aria-label=\"Folder name\"\n class=\"folder-name-input\"\n spellcheck=\"false\"\n autocomplete=\"off\"\n [class.error]=\"!!item.creationError\"\n [value]=\"item.name\"\n [disabled]=\"creationLoading()\"\n [attr.data-autofocus]=\"true\"\n (keydown)=\"onFolderNameKeyDown($event, item)\"\n (blur)=\"onFolderNameInputBlur($event, item)\">\n\n <!-- Loading indicator during submission -->\n @if (creationLoading()) {\n <tn-icon\n name=\"loading\"\n library=\"mdi\"\n class=\"creation-loading-icon\" />\n }\n </div>\n\n <!-- Inline error message -->\n @if (item.creationError) {\n <div class=\"folder-creation-error\">\n <tn-icon name=\"alert-circle\" library=\"mdi\" class=\"error-icon\" />\n <span class=\"error-text\">{{ item.creationError }}</span>\n </div>\n }\n </div>\n }\n\n </ng-template>\n </ng-container>\n\n <!-- Size column -->\n <ng-container tnColumnDef=\"size\">\n <ng-template tnHeaderCellDef>Size</ng-template>\n <ng-template let-item tnCellDef>\n @if (item.size !== undefined) {\n <span>{{ item.size | tnFileSize }}</span>\n }\n @if (item.size === undefined && item.type === 'folder') {\n <span class=\"folder-indicator\">--</span>\n }\n </ng-template>\n </ng-container>\n\n <!-- Modified column -->\n <ng-container tnColumnDef=\"modified\">\n <ng-template tnHeaderCellDef>Modified</ng-template>\n <ng-template let-item tnCellDef>\n @if (item.modified) {\n <span>{{ formatDate(item.modified) }}</span>\n }\n </ng-template>\n </ng-container>\n\n\n </tn-table>\n\n <!-- Empty state -->\n @if (filteredFileItems().length === 0) {\n <div class=\"empty-state\">\n <tn-icon name=\"folder-open\" library=\"mdi\" />\n <p>No items found</p>\n </div>\n }\n </div>\n}\n\n<!-- Footer -->\n@if (!loading()) {\n <div class=\"tn-file-picker-footer\">\n @if (selectedItems().length > 0) {\n <span class=\"selection-count\">\n {{ selectedItems().length }} item{{ selectedItems().length !== 1 ? 's' : '' }} selected\n </span>\n }\n @if (selectedItems().length === 0) {\n <span class=\"selection-count\">\n No items selected\n </span>\n }\n <div class=\"footer-actions\">\n <tn-button\n label=\"Select\"\n [disabled]=\"selectedItems().length === 0\"\n (onClick)=\"onSubmit()\" />\n </div>\n </div>\n}","import { A11yModule } from '@angular/cdk/a11y';\nimport { type ConnectedPosition, Overlay, type OverlayRef } from '@angular/cdk/overlay';\nimport { OverlayModule } from '@angular/cdk/overlay';\nimport { PortalModule, TemplatePortal } from '@angular/cdk/portal';\nimport type { OnDestroy, OnInit} from '@angular/core';\nimport { ElementRef, type TemplateRef, ViewContainerRef, Component, computed, forwardRef, input, output, signal, viewChild, inject } from '@angular/core';\nimport type { ControlValueAccessor} from '@angular/forms';\nimport { NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { Subject } from 'rxjs';\nimport { TnFilePickerPopupComponent } from './file-picker-popup.component';\nimport type { CreateFolderEvent, FilePickerCallbacks, FilePickerError, FilePickerMode, FileSystemItem } from './file-picker.interfaces';\nimport { TnIconComponent } from '../icon/icon.component';\nimport { TnInputDirective } from '../input/input.directive';\nimport { StripMntPrefixPipe } from '../pipes/strip-mnt-prefix/strip-mnt-prefix.pipe';\n\n@Component({\n selector: 'tn-file-picker',\n standalone: true,\n imports: [\n TnInputDirective,\n TnIconComponent,\n TnFilePickerPopupComponent,\n OverlayModule,\n PortalModule,\n A11yModule,\n StripMntPrefixPipe\n],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => TnFilePickerComponent),\n multi: true\n }\n ],\n templateUrl: './file-picker.component.html',\n styleUrl: './file-picker.component.scss',\n host: {\n 'class': 'tn-file-picker',\n '[class.error]': 'hasError()'\n }\n})\nexport class TnFilePickerComponent implements ControlValueAccessor, OnInit, OnDestroy {\n mode = input<FilePickerMode>('any');\n multiSelect = input<boolean>(false);\n allowCreate = input<boolean>(true);\n allowDatasetCreate = input<boolean>(false);\n allowZvolCreate = input<boolean>(false);\n allowManualInput = input<boolean>(true);\n placeholder = input<string>('Select file or folder');\n disabled = input<boolean>(false);\n startPath = input<string>('/mnt');\n rootPath = input<string | undefined>(undefined);\n fileExtensions = input<string[] | undefined>(undefined);\n callbacks = input<FilePickerCallbacks | undefined>(undefined);\n\n selectionChange = output<string | string[]>();\n pathChange = output<string>();\n createFolder = output<CreateFolderEvent>();\n error = output<FilePickerError>();\n\n wrapperEl = viewChild.required<ElementRef<HTMLDivElement>>('wrapper');\n filePickerTemplate = viewChild.required<TemplateRef<unknown>>('filePickerTemplate');\n\n private destroy$ = new Subject<void>();\n private overlayRef?: OverlayRef;\n private portal?: TemplatePortal;\n\n // Component state\n isOpen = signal<boolean>(false);\n selectedPath = signal<string>('');\n currentPath = signal<string>('');\n fileItems = signal<FileSystemItem[]>([]);\n selectedItems = signal<string[]>([]);\n loading = signal<boolean>(false);\n hasError = signal<boolean>(false);\n creatingItemTempId = signal<string | null>(null);\n creationLoading = signal<boolean>(false);\n private formDisabled = signal<boolean>(false);\n\n // Computed disabled state (combines input and form state)\n isDisabled = computed(() => this.disabled() || this.formDisabled());\n\n // ControlValueAccessor implementation\n private onChange = (_value: string | string[]) => {};\n private onTouched = () => {};\n\n private overlay = inject(Overlay);\n private elementRef = inject(ElementRef);\n private viewContainerRef = inject(ViewContainerRef);\n\n ngOnInit(): void {\n this.currentPath.set(this.startPath());\n this.selectedPath.set(this.multiSelect() ? '' : '');\n }\n\n ngOnDestroy(): void {\n this.destroy$.next();\n this.destroy$.complete();\n this.close();\n }\n\n // ControlValueAccessor implementation\n writeValue(value: string | string[]): void {\n if (this.multiSelect()) {\n this.selectedItems.set(Array.isArray(value) ? value : value ? [value] : []);\n // For multi-select, show full paths separated by commas\n this.selectedPath.set(this.selectedItems().join(', '));\n } else {\n // Store the full path internally\n this.selectedPath.set(typeof value === 'string' ? value : '');\n this.selectedItems.set(value ? [typeof value === 'string' ? value : value[0]] : []);\n }\n }\n\n registerOnChange(fn: (value: string | string[]) => void): void {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n\n setDisabledState(isDisabled: boolean): void {\n this.formDisabled.set(isDisabled);\n }\n\n // Event handlers\n onPathInput(event: Event): void {\n const target = event.target as HTMLInputElement;\n const inputValue = target.value;\n\n if (this.allowManualInput()) {\n // Convert display path to full path with /mnt prefix\n const fullPath = this.toFullPath(inputValue);\n\n const cb = this.callbacks();\n if (cb?.validatePath) {\n cb.validatePath(fullPath).then(isValid => {\n if (isValid) {\n this.updateSelection(fullPath);\n } else {\n this.emitError('validation', `Invalid path: ${inputValue}`, fullPath);\n }\n }).catch(err => {\n this.emitError('validation', err.message || 'Path validation failed', fullPath);\n });\n } else {\n this.updateSelection(fullPath);\n }\n }\n\n this.onTouched();\n }\n\n openFilePicker(): void {\n if (this.isOpen() || this.isDisabled()) {return;}\n\n this.createOverlay();\n this.isOpen.set(true);\n void this.loadDirectory(this.currentPath());\n }\n\n close(): void {\n if (this.overlayRef) {\n this.overlayRef.dispose();\n this.overlayRef = undefined;\n this.portal = undefined;\n }\n this.isOpen.set(false);\n }\n\n // File browser methods\n onItemClick(item: FileSystemItem): void {\n if (item.disabled || item.isCreating || this.creatingItemTempId()) {return;}\n\n if (this.multiSelect()) {\n const selected = this.selectedItems();\n const index = selected.indexOf(item.path);\n\n if (index >= 0) {\n selected.splice(index, 1);\n } else {\n selected.push(item.path);\n }\n\n this.selectedItems.set([...selected]);\n } else {\n // Single select - just update selection state, don't apply yet\n this.selectedItems.set([item.path]);\n }\n }\n\n onItemDoubleClick(item: FileSystemItem): void {\n if (item.isCreating || this.creatingItemTempId()) {return;}\n\n // Define navigatable types\n const isNavigatable = ['folder', 'dataset', 'mountpoint'].includes(item.type);\n\n // Allow navigation even if disabled, as long as it's a navigatable type\n if (isNavigatable) {\n this.navigateToPath(item.path);\n } else if (!item.disabled) {\n // Double-click on selectable item submits immediately\n this.selectedItems.set([item.path]);\n this.onSubmit();\n }\n }\n\n onSubmit(): void {\n // Apply the selection and close the popup\n const selected = this.selectedItems();\n\n if (selected.length === 0) {return;}\n\n // Clear any existing error state\n this.hasError.set(false);\n\n if (this.multiSelect()) {\n this.selectedPath.set(selected.join(', '));\n this.onChange(selected);\n this.selectionChange.emit(selected);\n } else {\n const path = selected[0];\n this.selectedPath.set(path);\n this.onChange(path);\n this.selectionChange.emit(path);\n }\n\n this.close();\n }\n\n onCancel(): void {\n // Close without applying selection\n this.close();\n }\n\n navigateToPath(path: string): void {\n // Prevent navigation if currently creating a folder\n if (this.creatingItemTempId()) {\n console.warn('Cannot navigate while creating a folder');\n return;\n }\n void this.loadDirectory(path);\n }\n\n onCreateFolder(): void {\n // Prevent multiple simultaneous creations\n if (this.creatingItemTempId()) {\n console.warn('Already creating a folder');\n return;\n }\n\n // Generate temporary ID\n const tempId = `temp-${Date.now()}`;\n\n // Create pending item\n const pendingFolder: FileSystemItem = {\n path: `${this.currentPath()}/__pending__/${tempId}`,\n name: 'New Folder',\n type: 'folder',\n isCreating: true,\n tempId: tempId,\n modified: new Date()\n };\n\n // Add to top of file list\n const currentItems = this.fileItems();\n this.fileItems.set([pendingFolder, ...currentItems]);\n this.creatingItemTempId.set(tempId);\n\n // Still emit event for parent components\n this.createFolder.emit({\n parentPath: this.currentPath(),\n folderName: 'New Folder'\n });\n }\n\n onClearSelection(): void {\n this.selectedItems.set([]);\n this.selectedPath.set('');\n this.onChange(this.multiSelect() ? [] : '');\n this.selectionChange.emit(this.multiSelect() ? [] : '');\n }\n\n async onSubmitFolderName(name: string, tempId: string): Promise<void> {\n // Validate folder name\n const validation = this.validateFolderName(name);\n if (!validation.valid) {\n // Update the item with error message\n this.updateCreatingItemError(tempId, validation.error!);\n return;\n }\n\n const cb = this.callbacks();\n if (!cb?.createFolder) {\n this.updateCreatingItemError(tempId, 'Create folder callback not provided');\n return;\n }\n\n // Clear any previous errors\n this.updateCreatingItemError(tempId, undefined);\n this.creationLoading.set(true);\n\n try {\n // Call the callback with parent path and user-entered name\n await cb.createFolder(\n this.currentPath(),\n name.trim()\n );\n\n // Remove pending item\n this.removePendingItem(tempId);\n this.creatingItemTempId.set(null);\n\n // Reload directory to show the newly created folder\n await this.loadDirectory(this.currentPath());\n\n } catch (err: unknown) {\n console.error('Failed to create folder:', err);\n\n // Show error inline, keep input editable for retry\n const errorMessage = err instanceof Error ? err.message : 'Failed to create folder';\n this.updateCreatingItemError(tempId, errorMessage);\n this.emitError('creation', errorMessage, this.currentPath());\n\n } finally {\n this.creationLoading.set(false);\n }\n }\n\n onCancelFolderCreation(tempId: string): void {\n this.removePendingItem(tempId);\n this.creatingItemTempId.set(null);\n this.creationLoading.set(false);\n }\n\n private removePendingItem(tempId: string): void {\n const items = this.fileItems().filter(item => item.tempId !== tempId);\n this.fileItems.set(items);\n }\n\n private updateCreatingItemError(tempId: string, error: string | undefined): void {\n const items = this.fileItems().map(item => {\n if (item.tempId === tempId) {\n return { ...item, creationError: error };\n }\n return item;\n });\n this.fileItems.set(items);\n }\n\n private validateFolderName(name: string): { valid: boolean; error?: string } {\n const trimmed = name.trim();\n\n if (!trimmed) {\n return { valid: false, error: 'Folder name cannot be empty' };\n }\n\n if (trimmed.length > 255) {\n return { valid: false, error: 'Folder name too long (max 255 characters)' };\n }\n\n // Check for invalid characters (common across file systems)\n const invalidChars = /[<>:\"|?*\\x00-\\x1f]/;\n if (invalidChars.test(trimmed)) {\n return { valid: false, error: 'Invalid characters in folder name' };\n }\n\n // Disallow folder names that are just dots\n if (/^\\.+$/.test(trimmed)) {\n return { valid: false, error: 'Invalid folder name' };\n }\n\n // Check for duplicate names in current directory\n const existingNames = this.fileItems()\n .filter(item => !item.isCreating)\n .map(item => item.name.toLowerCase());\n\n if (existingNames.includes(trimmed.toLowerCase())) {\n return { valid: false, error: 'A folder with this name already exists' };\n }\n\n return { valid: true };\n }\n\n private async loadDirectory(path: string): Promise<void> {\n const cb = this.callbacks();\n if (!cb?.getChildren) {\n // Default mock data for development\n this.fileItems.set(this.getMockFileItems(path));\n this.currentPath.set(path);\n this.pathChange.emit(path);\n return;\n }\n\n this.loading.set(true);\n\n try {\n const items = await cb.getChildren(path);\n this.fileItems.set(items || []);\n this.currentPath.set(path);\n this.pathChange.emit(path);\n } catch (err: unknown) {\n console.error('❌ Error loading directory:', err);\n this.emitError('navigation', err instanceof Error ? err.message : 'Failed to load directory', path);\n } finally {\n this.loading.set(false);\n }\n }\n\n private getMockFileItems(path: string): FileSystemItem[] {\n // Mock data for development\n return [\n {\n path: `${path}/Documents`,\n name: 'Documents',\n type: 'folder',\n modified: new Date()\n },\n {\n path: `${path}/Downloads`,\n name: 'Downloads',\n type: 'folder',\n modified: new Date()\n },\n {\n path: `${path}/dataset1`,\n name: 'dataset1',\n type: 'dataset',\n modified: new Date()\n },\n {\n path: `${path}/example.txt`,\n name: 'example.txt',\n type: 'file',\n size: 1024,\n modified: new Date()\n }\n ];\n }\n\n private updateSelection(path: string): void {\n // Clear any existing error state since popup selections are valid\n this.hasError.set(false);\n\n if (this.multiSelect()) {\n const selected = [path];\n this.selectedItems.set(selected);\n this.selectedPath.set(selected.join(', '));\n this.onChange(selected);\n } else {\n this.selectedPath.set(path);\n this.selectedItems.set([path]);\n this.onChange(path);\n }\n\n this.selectionChange.emit(this.multiSelect() ? this.selectedItems() : path);\n }\n\n private updateSelectionFromItems(): void {\n // Clear any existing error state since popup selections are valid\n this.hasError.set(false);\n\n const selected = this.selectedItems();\n this.selectedPath.set(selected.join(', '));\n this.onChange(this.multiSelect() ? selected : selected[0] || '');\n this.selectionChange.emit(this.multiSelect() ? selected : selected[0] || '');\n }\n\n private toFullPath(displayPath: string): string {\n if (!displayPath) {return '/mnt';}\n if (displayPath === '/') {return '/mnt';}\n if (displayPath.startsWith('/')) {return '/mnt' + displayPath;}\n return '/mnt/' + displayPath;\n }\n\n private emitError(type: FilePickerError['type'], message: string, path?: string): void {\n this.hasError.set(true);\n this.error.emit({ type, message, path });\n // Error persists until cleared by valid input or selection\n }\n\n private createOverlay(): void {\n if (this.overlayRef) {return;}\n\n const positions: ConnectedPosition[] = [\n {\n originX: 'start',\n originY: 'bottom',\n overlayX: 'start',\n overlayY: 'top',\n offsetY: 8,\n },\n {\n originX: 'start',\n originY: 'top',\n overlayX: 'start',\n overlayY: 'bottom',\n offsetY: -8,\n },\n {\n originX: 'end',\n originY: 'bottom',\n overlayX: 'end',\n overlayY: 'top',\n offsetY: 8,\n },\n {\n originX: 'end',\n originY: 'top',\n overlayX: 'end',\n overlayY: 'bottom',\n offsetY: -8,\n },\n ];\n\n const positionStrategy = this.overlay\n .position()\n .flexibleConnectedTo(this.wrapperEl())\n .withPositions(positions)\n .withFlexibleDimensions(false)\n .withPush(false);\n\n this.overlayRef = this.overlay.create({\n positionStrategy,\n scrollStrategy: this.overlay.scrollStrategies.reposition(),\n hasBackdrop: true,\n backdropClass: 'cdk-overlay-transparent-backdrop',\n panelClass: 'tn-file-picker-overlay'\n });\n\n this.overlayRef.backdropClick().subscribe(() => {\n this.close();\n });\n\n this.portal = new TemplatePortal(this.filePickerTemplate(), this.viewContainerRef);\n this.overlayRef.attach(this.portal);\n }\n\n}\n","<div class=\"tn-file-picker-container\">\n <div #wrapper ixInput class=\"tn-file-picker-wrapper\" style=\"padding-right: 40px;\">\n <input\n type=\"text\"\n class=\"tn-file-picker-input\"\n [class.error]=\"hasError()\"\n [value]=\"selectedPath() | tnStripMntPrefix\"\n [placeholder]=\"placeholder()\"\n [readonly]=\"!allowManualInput()\"\n [disabled]=\"isDisabled()\"\n (input)=\"onPathInput($event)\">\n\n <button\n type=\"button\"\n class=\"tn-file-picker-toggle\"\n aria-label=\"Open file picker\"\n [disabled]=\"isDisabled()\"\n (click)=\"openFilePicker()\">\n <tn-icon name=\"folder\" library=\"mdi\" />\n </button>\n </div>\n \n <ng-template #filePickerTemplate>\n <tn-file-picker-popup\n class=\"tn-file-picker-popup\"\n [mode]=\"mode()\"\n [multiSelect]=\"multiSelect()\"\n [allowCreate]=\"allowCreate()\"\n [allowDatasetCreate]=\"allowDatasetCreate()\"\n [allowZvolCreate]=\"allowZvolCreate()\"\n [currentPath]=\"currentPath()\"\n [fileItems]=\"fileItems()\"\n [selectedItems]=\"selectedItems()\"\n [loading]=\"loading()\"\n [creationLoading]=\"creationLoading()\"\n [fileExtensions]=\"fileExtensions()\"\n (itemClick)=\"onItemClick($event)\"\n (itemDoubleClick)=\"onItemDoubleClick($event)\"\n (pathNavigate)=\"navigateToPath($event)\"\n (createFolder)=\"onCreateFolder()\"\n (submitFolderName)=\"onSubmitFolderName($event.name, $event.tempId)\"\n (cancelFolderCreation)=\"onCancelFolderCreation($event)\"\n (clearSelection)=\"onClearSelection()\"\n (submit)=\"onSubmit()\"\n (cancel)=\"onCancel()\"\n (close)=\"close()\" />\n </ng-template>\n</div>","import { Injectable } from '@angular/core';\nimport { CommonShortcuts, WindowsShortcuts, LinuxShortcuts } from '../enums/common-shortcuts.enum';\nimport type { PlatformType } from '../enums/modifier-keys.enum';\n\nexport interface KeyCombination {\n ctrlKey: boolean;\n altKey: boolean;\n shiftKey: boolean;\n metaKey: boolean;\n key: string;\n}\n\nexport interface ShortcutHandler {\n id: string;\n combination: KeyCombination;\n callback: () => void;\n context?: string;\n enabled: boolean;\n}\n\n@Injectable({\n providedIn: 'root'\n})\nexport class TnKeyboardShortcutService {\n private shortcuts = new Map<string, ShortcutHandler>();\n private globalEnabled = true;\n\n /**\n * Register a keyboard shortcut\n */\n registerShortcut(\n id: string,\n shortcut: string,\n callback: () => void,\n context?: string\n ): void {\n const combination = this.parseShortcut(shortcut);\n \n this.shortcuts.set(id, {\n id,\n combination,\n callback,\n context,\n enabled: true\n });\n }\n\n /**\n * Unregister a keyboard shortcut\n */\n unregisterShortcut(id: string): void {\n this.shortcuts.delete(id);\n }\n\n /**\n * Unregister all shortcuts for a given context\n */\n unregisterContext(context: string): void {\n for (const [id, handler] of this.shortcuts) {\n if (handler.context === context) {\n this.shortcuts.delete(id);\n }\n }\n }\n\n /**\n * Enable/disable a specific shortcut\n */\n setShortcutEnabled(id: string, enabled: boolean): void {\n const handler = this.shortcuts.get(id);\n if (handler) {\n handler.enabled = enabled;\n }\n }\n\n /**\n * Enable/disable all shortcuts globally\n */\n setGlobalEnabled(enabled: boolean): void {\n this.globalEnabled = enabled;\n }\n\n /**\n * Check if shortcuts are globally enabled\n */\n isGlobalEnabled(): boolean {\n return this.globalEnabled;\n }\n\n /**\n * Handle keyboard events\n */\n handleKeyboardEvent(event: KeyboardEvent): boolean {\n if (!this.globalEnabled) {\n return false;\n }\n\n const combination: KeyCombination = {\n ctrlKey: event.ctrlKey,\n altKey: event.altKey,\n shiftKey: event.shiftKey,\n metaKey: event.metaKey,\n key: event.key\n };\n\n for (const handler of this.shortcuts.values()) {\n if (handler.enabled && this.matchesCombination(combination, handler.combination)) {\n event.preventDefault();\n event.stopPropagation();\n handler.callback();\n return true;\n }\n }\n\n return false;\n }\n\n /**\n * Parse a shortcut string into a KeyCombination\n */\n parseShortcut(shortcut: string): KeyCombination {\n const combination: KeyCombination = {\n ctrlKey: false,\n altKey: false,\n shiftKey: false,\n metaKey: false,\n key: ''\n };\n\n // Handle Mac-style shortcuts\n if (shortcut.includes('⌘')) {\n combination.metaKey = true;\n shortcut = shortcut.replace(/⌘/g, '');\n }\n \n if (shortcut.includes('⌃')) {\n combination.ctrlKey = true;\n shortcut = shortcut.replace(/⌃/g, '');\n }\n \n if (shortcut.includes('⌥')) {\n combination.altKey = true;\n shortcut = shortcut.replace(/⌥/g, '');\n }\n \n if (shortcut.includes('⇧')) {\n combination.shiftKey = true;\n shortcut = shortcut.replace(/⇧/g, '');\n }\n\n // Handle Windows/Linux-style shortcuts\n const parts = shortcut.split('+').map(part => part.trim());\n \n for (const part of parts) {\n const lowerPart = part.toLowerCase();\n \n if (lowerPart === 'ctrl' || lowerPart === 'control') {\n combination.ctrlKey = true;\n } else if (lowerPart === 'alt') {\n combination.altKey = true;\n } else if (lowerPart === 'shift') {\n combination.shiftKey = true;\n } else if (lowerPart === 'meta' || lowerPart === 'cmd' || lowerPart === 'win') {\n combination.metaKey = true;\n } else if (part.length > 0) {\n combination.key = part;\n }\n }\n\n return combination;\n }\n\n /**\n * Check if two key combinations match\n */\n private matchesCombination(actual: KeyCombination, expected: KeyCombination): boolean {\n return actual.ctrlKey === expected.ctrlKey &&\n actual.altKey === expected.altKey &&\n actual.shiftKey === expected.shiftKey &&\n actual.metaKey === expected.metaKey &&\n actual.key.toLowerCase() === expected.key.toLowerCase();\n }\n\n /**\n * Get the current platform\n */\n getCurrentPlatform(): PlatformType {\n const userAgent = navigator.userAgent.toLowerCase();\n \n if (userAgent.includes('mac')) {\n return 'mac';\n } else if (userAgent.includes('win')) {\n return 'windows';\n } else if (userAgent.includes('linux')) {\n return 'linux';\n }\n \n return 'mac';\n }\n\n /**\n * Format a shortcut for display on the current platform\n */\n formatShortcutForPlatform(shortcut: string, platform?: PlatformType): string {\n const targetPlatform = platform || this.getCurrentPlatform();\n \n if (targetPlatform === 'windows') {\n return this.convertToWindowsDisplay(shortcut);\n } else if (targetPlatform === 'linux') {\n return this.convertToLinuxDisplay(shortcut);\n }\n \n return shortcut; // Return Mac format by default\n }\n\n /**\n * Convert Mac-style shortcut to Windows display format\n */\n private convertToWindowsDisplay(macShortcut: string): string {\n return macShortcut\n .replace(/⌘/g, 'Ctrl')\n .replace(/⌥/g, 'Alt')\n .replace(/⇧/g, 'Shift')\n .replace(/⌃/g, 'Ctrl')\n .replace(/([a-zA-Z])([A-Z])/g, '$1+$2')\n .replace(/([a-zA-Z])([a-z])/g, '$1+$2');\n }\n\n /**\n * Convert Mac-style shortcut to Linux display format\n */\n private convertToLinuxDisplay(macShortcut: string): string {\n return macShortcut\n .replace(/⌘/g, 'Ctrl')\n .replace(/⌥/g, 'Alt')\n .replace(/⇧/g, 'Shift')\n .replace(/⌃/g, 'Ctrl')\n .replace(/([a-zA-Z])([A-Z])/g, '$1+$2')\n .replace(/([a-zA-Z])([a-z])/g, '$1+$2');\n }\n\n /**\n * Get platform-specific shortcut enum\n */\n getPlatformShortcuts(platform?: PlatformType): typeof CommonShortcuts | typeof WindowsShortcuts | typeof LinuxShortcuts {\n const targetPlatform = platform || this.getCurrentPlatform();\n \n switch (targetPlatform) {\n case 'windows':\n return WindowsShortcuts;\n case 'linux':\n return LinuxShortcuts;\n default:\n return CommonShortcuts;\n }\n }\n\n /**\n * Get all registered shortcuts\n */\n getAllShortcuts(): ShortcutHandler[] {\n return Array.from(this.shortcuts.values());\n }\n\n /**\n * Get shortcuts for a specific context\n */\n getShortcutsForContext(context: string): ShortcutHandler[] {\n return Array.from(this.shortcuts.values()).filter(handler => handler.context === context);\n }\n\n /**\n * Clear all shortcuts\n */\n clearAllShortcuts(): void {\n this.shortcuts.clear();\n }\n}","/**\n * Enum of available theme names.\n * Use these constants instead of hardcoded strings.\n *\n * @example\n * ```typescript\n * themeService.setTheme(TnTheme.Dracula);\n * ```\n */\nexport enum TnTheme {\n Dark = 'tn-dark',\n Blue = 'tn-blue',\n Dracula = 'tn-dracula',\n Nord = 'tn-nord',\n Paper = 'tn-paper',\n SolarizedDark = 'tn-solarized-dark',\n Midnight = 'tn-midnight',\n HighContrast = 'tn-high-contrast',\n}\n\n/**\n * Represents a theme definition/configuration.\n */\nexport interface TnThemeDefinition {\n /** Unique identifier/name for the theme (from TnTheme enum) */\n name: TnTheme;\n\n /** Human-readable display name */\n label: string;\n\n /** CSS class name to apply to document root */\n className: string;\n\n /** Optional description of the theme */\n description?: string;\n}\n","import type { TnThemeDefinition } from './theme.interface';\nimport { TnTheme } from './theme.interface';\n\n/**\n * Default theme used when no theme is set\n */\nexport const DEFAULT_THEME = TnTheme.Dark;\n\n/**\n * localStorage key for storing the current theme name\n */\nexport const THEME_STORAGE_KEY = 'tn-theme';\n\n/**\n * All available theme definitions in the TrueNAS UI Components library.\n * These themes correspond to CSS classes defined in themes.css\n */\nexport const TN_THEME_DEFINITIONS: readonly TnThemeDefinition[] = [\n {\n name: TnTheme.Dark,\n label: 'TN Dark',\n className: 'tn-dark',\n description: 'TrueNAS default dark theme',\n },\n {\n name: TnTheme.Blue,\n label: 'TN Blue',\n className: 'tn-blue',\n description: 'Official TrueNAS colors on light background',\n },\n {\n name: TnTheme.Dracula,\n label: 'Dracula',\n className: 'tn-dracula',\n description: 'Popular Dracula color scheme',\n },\n {\n name: TnTheme.Nord,\n label: 'Nord',\n className: 'tn-nord',\n description: 'Nord color palette inspired theme',\n },\n {\n name: TnTheme.Paper,\n label: 'Paper',\n className: 'tn-paper',\n description: 'FreeNAS 11.2 legacy theme',\n },\n {\n name: TnTheme.SolarizedDark,\n label: 'Solarized Dark',\n className: 'tn-solarized-dark',\n description: 'Solarized dark color scheme',\n },\n {\n name: TnTheme.Midnight,\n label: 'Midnight',\n className: 'tn-midnight',\n description: 'Dark theme with blues and greys',\n },\n {\n name: TnTheme.HighContrast,\n label: 'High Contrast',\n className: 'tn-high-contrast',\n description: 'High contrast theme for accessibility',\n },\n] as const;\n\n/**\n * Map of theme enum values to theme definition objects for quick lookup\n */\nexport const THEME_MAP = new Map<TnTheme, TnThemeDefinition>(\n TN_THEME_DEFINITIONS.map((theme) => [theme.name, theme])\n);\n","import { isPlatformBrowser } from '@angular/common';\nimport { Injectable, signal, computed, effect, PLATFORM_ID, inject } from '@angular/core';\nimport {\n TN_THEME_DEFINITIONS,\n THEME_MAP,\n DEFAULT_THEME,\n THEME_STORAGE_KEY,\n} from './theme.constants';\nimport type { TnThemeDefinition } from './theme.interface';\nimport { TnTheme } from './theme.interface';\n\n/**\n * Service for managing themes in the TrueNAS UI Components library.\n *\n * Features:\n * - Signal-based reactive theme state\n * - LocalStorage persistence (key: 'tn-theme')\n * - Automatic CSS class application to document root\n * - SSR-safe (checks for browser platform)\n *\n * @example\n * ```typescript\n * import { Component, inject, effect } from '@angular/core';\n * import { TnThemeService, TnTheme } from '@truenas/ui-components';\n *\n * @Component({...})\n * export class MyComponent {\n * private themeService = inject(TnThemeService);\n *\n * constructor() {\n * // Get available theme definitions\n * const themes = this.themeService.availableThemes;\n *\n * // Get current theme (signal)\n * const currentTheme = this.themeService.currentTheme();\n *\n * // Set theme using enum (recommended)\n * this.themeService.setTheme(TnTheme.Blue);\n *\n * // React to theme changes\n * effect(() => {\n * console.log('Theme changed to:', this.themeService.currentTheme()?.label);\n * });\n * }\n * }\n * ```\n */\n@Injectable({\n providedIn: 'root',\n})\nexport class TnThemeService {\n private readonly platformId = inject(PLATFORM_ID);\n private readonly isBrowser = isPlatformBrowser(this.platformId);\n\n /**\n * Internal signal holding the current theme enum value\n */\n private readonly currentThemeSignal = signal<TnTheme>(DEFAULT_THEME);\n\n /**\n * Computed signal that returns the full theme definition for the current theme\n */\n readonly currentTheme = computed<TnThemeDefinition | undefined>(() => {\n const theme = this.currentThemeSignal();\n return THEME_MAP.get(theme);\n });\n\n /**\n * Computed signal that returns the current theme's CSS class name\n */\n readonly currentThemeClass = computed<string>(() => {\n return this.currentTheme()?.className ?? TnTheme.Dark;\n });\n\n /**\n * All available theme definitions in the library (readonly array)\n */\n readonly availableThemes: readonly TnThemeDefinition[] = TN_THEME_DEFINITIONS;\n\n constructor() {\n // Initialize theme from localStorage or default\n this.initializeTheme();\n\n // Effect to apply theme CSS class to document root whenever theme changes\n effect(() => {\n if (this.isBrowser) {\n this.applyThemeToDOM(this.currentThemeClass());\n }\n });\n\n // Effect to persist theme to localStorage whenever it changes\n effect(() => {\n if (this.isBrowser) {\n const theme = this.currentTheme();\n if (theme) {\n this.persistThemeToStorage(theme);\n }\n }\n });\n }\n\n /**\n * Set the current theme.\n * Updates the signal, which triggers effects to apply CSS and save to localStorage.\n *\n * @param theme - The theme to set (use TnTheme enum)\n * @returns true if theme was found and set, false otherwise\n *\n * @example\n * ```typescript\n * themeService.setTheme(TnTheme.Dracula);\n * ```\n */\n setTheme(theme: TnTheme): boolean {\n const themeDefinition = THEME_MAP.get(theme);\n if (themeDefinition) {\n this.currentThemeSignal.set(theme);\n return true;\n }\n console.warn(`[TnThemeService] Theme \"${theme}\" not found. Available themes:`, Array.from(THEME_MAP.keys()));\n return false;\n }\n\n /**\n * Get the current theme enum value (reactive signal value)\n */\n getCurrentTheme(): TnTheme {\n return this.currentThemeSignal();\n }\n\n /**\n * Reset theme to default\n */\n resetToDefault(): void {\n this.setTheme(DEFAULT_THEME);\n }\n\n /**\n * Check if a theme exists\n */\n hasTheme(theme: TnTheme): boolean {\n return THEME_MAP.has(theme);\n }\n\n /**\n * Initialize theme from localStorage or use default\n */\n private initializeTheme(): void {\n if (!this.isBrowser) {\n return;\n }\n\n try {\n const storedTheme = localStorage.getItem(THEME_STORAGE_KEY) as TnTheme;\n if (storedTheme && this.hasTheme(storedTheme)) {\n this.currentThemeSignal.set(storedTheme);\n } else {\n // If no valid stored theme, use default\n this.currentThemeSignal.set(DEFAULT_THEME);\n }\n } catch (error) {\n console.error('[TnThemeService] Error reading from localStorage:', error);\n this.currentThemeSignal.set(DEFAULT_THEME);\n }\n }\n\n /**\n * Apply theme CSS class to document root.\n * Removes all other theme classes first to avoid conflicts.\n *\n * @param themeClass - CSS class name to apply (e.g., 'tn-dark')\n */\n private applyThemeToDOM(themeClass: string): void {\n if (!this.isBrowser) {\n return;\n }\n\n try {\n const root = document.documentElement;\n\n // Remove all existing theme classes\n TN_THEME_DEFINITIONS.forEach((theme) => {\n root.classList.remove(theme.className);\n });\n\n // Add the new theme class\n root.classList.add(themeClass);\n } catch (error) {\n console.error('[TnThemeService] Error applying theme to DOM:', error);\n }\n }\n\n /**\n * Persist theme to localStorage.\n * Colors are applied automatically via CSS classes from themes.css.\n *\n * @param theme - Theme definition to persist\n */\n private persistThemeToStorage(theme: TnThemeDefinition): void {\n if (!this.isBrowser) {\n return;\n }\n\n try {\n localStorage.setItem(THEME_STORAGE_KEY, theme.name);\n } catch (error) {\n console.error('[TnThemeService] Error writing to localStorage:', error);\n }\n }\n}\n","/*\n * Public API Surface of truenas-ui\n */\n\nexport * from './lib/disk-icon/disk-icon.component';\nexport * from './lib/banner/banner.component';\nexport * from './lib/banner/banner.harness';\nexport * from './lib/button/button.component';\nexport * from './lib/button/button.harness';\nexport * from './lib/icon-button/icon-button.component';\nexport * from './lib/input/input.component';\nexport * from './lib/input/input.directive';\nexport * from './lib/chip/chip.component';\nexport * from './lib/card';\nexport * from './lib/expansion-panel/expansion-panel.component';\nexport * from './lib/checkbox/checkbox.component';\nexport * from './lib/radio/radio.component';\nexport * from './lib/slide-toggle/slide-toggle.component';\nexport * from './lib/tabs/tabs.component';\nexport * from './lib/tab/tab.component';\nexport * from './lib/tab-panel/tab-panel.component';\nexport * from './lib/menu';\nexport * from './lib/keyboard-shortcut/keyboard-shortcut.component';\nexport * from './lib/form-field/form-field.component';\nexport * from './lib/select/select.component';\nexport * from './lib/icon/icon.component';\nexport * from './lib/icon/icon.harness';\nexport * from './lib/icon/icon-registry.service';\nexport * from './lib/icon/sprite-loader.service';\nexport * from './lib/icon/icon-marker';\nexport * from './lib/icon/icon-testing';\nexport * from './lib/icon/integrations/lucide.integration';\nexport * from './lib/list/list.component';\nexport * from './lib/list-item/list-item.component';\nexport * from './lib/list-subheader/list-subheader.component';\nexport * from './lib/list-directives/list-directives';\nexport * from './lib/divider/divider.component';\nexport * from './lib/selection-list/selection-list.component';\nexport * from './lib/list-option/list-option.component';\nexport * from './lib/table/table.component';\nexport * from './lib/table-column/table-column.directive';\nexport { TnTreeComponent, FlatTreeControl, TnTreeFlatDataSource, TnTreeFlattener, TnFlatTreeNode } from './lib/tree/tree.component';\nexport { TnTreeNodeComponent } from './lib/tree/tree-node.component';\nexport { TnNestedTreeNodeComponent } from './lib/tree/nested-tree-node.component';\nexport { TnTreeNodeOutletDirective } from './lib/tree/tree-node-outlet.directive';\nexport * from './lib/enums/disk-type.enum';\nexport * from './lib/enums/input-type.enum';\nexport * from './lib/enums/modifier-keys.enum';\nexport * from './lib/enums/common-shortcuts.enum';\nexport * from './lib/utils/shortcut-builder';\nexport * from './lib/pipes/file-size/file-size.pipe';\nexport * from './lib/pipes/strip-mnt-prefix/strip-mnt-prefix.pipe';\nexport * from './lib/pipes/truncate-path/truncate-path.pipe';\nexport * from './lib/spinner/spinner.component';\nexport * from './lib/spinner/branded-spinner.component';\nexport * from './lib/progress-bar/progress-bar.component';\nexport * from './lib/progress-bar/particle-progress-bar.component';\nexport * from './lib/calendar/calendar.component';\nexport * from './lib/calendar/calendar-header.component';\nexport * from './lib/calendar/month-view.component';\nexport * from './lib/calendar/multi-year-view.component';\nexport * from './lib/date-range-input/date-input.component';\nexport * from './lib/date-range-input/date-range-input.component';\nexport * from './lib/date-range-input/time-input.component';\nexport * from './lib/slider/slider.component';\nexport * from './lib/slider/slider-thumb.directive';\nexport * from './lib/slider/slider-with-label.directive';\nexport * from './lib/button-toggle';\nexport * from './lib/tooltip/tooltip.directive';\nexport * from './lib/tooltip/tooltip.component';\nexport * from './lib/dialog';\nexport * from './lib/stepper';\nexport * from './lib/file-picker';\nexport * from './lib/services/keyboard-shortcut.service';\nexport * from './lib/theme/theme.service';\nexport * from './lib/theme/theme.interface';\nexport * from './lib/theme/theme.constants';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i2.TnSpriteLoaderService","i1"],"mappings":"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"}