@akcelik/strct 0.5.12 → 0.5.14

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":"akcelik-strct.mjs","sources":["../../../projects/strct/src/lib/theme/theme.service.ts","../../../projects/strct/src/lib/icon/icon.ts","../../../projects/strct/src/lib/theme/theme-switcher.ts","../../../projects/strct/src/lib/overlay/overlay.ts","../../../projects/strct/src/lib/layout/layout.ts","../../../projects/strct/src/lib/layout/nav.ts","../../../projects/strct/src/lib/layout/login.ts","../../../projects/strct/src/lib/button/button.ts","../../../projects/strct/src/lib/badge/badge.ts","../../../projects/strct/src/lib/tag/tag.ts","../../../projects/strct/src/lib/avatar/avatar.ts","../../../projects/strct/src/lib/progress/progress.ts","../../../projects/strct/src/lib/spinner/spinner.ts","../../../projects/strct/src/lib/skeleton/skeleton.ts","../../../projects/strct/src/lib/speed-dial/speed-dial.ts","../../../projects/strct/src/lib/card/card.ts","../../../projects/strct/src/lib/accordion/accordion.ts","../../../projects/strct/src/lib/tabs/tabs.ts","../../../projects/strct/src/lib/context-menu/menu.ts","../../../projects/strct/src/lib/tree/tree.ts","../../../projects/strct/src/lib/modal/modal.ts","../../../projects/strct/src/lib/dropdown/dropdown.ts","../../../projects/strct/src/lib/context-menu/context-menu.ts","../../../projects/strct/src/lib/context-menu/submenu.ts","../../../projects/strct/src/lib/wizard/wizard.ts","../../../projects/strct/src/lib/divider/divider.ts","../../../projects/strct/src/lib/breadcrumb/breadcrumb.ts","../../../projects/strct/src/lib/pagination/pagination.ts","../../../projects/strct/src/lib/forms/field.ts","../../../projects/strct/src/lib/forms/input.ts","../../../projects/strct/src/lib/forms/checkbox.ts","../../../projects/strct/src/lib/forms/toggle.ts","../../../projects/strct/src/lib/forms/radio.ts","../../../projects/strct/src/lib/forms/range.ts","../../../projects/strct/src/lib/forms/password.ts","../../../projects/strct/src/lib/forms/file.ts","../../../projects/strct/src/lib/rating/rating.ts","../../../projects/strct/src/lib/chips/chips.ts","../../../projects/strct/src/lib/input-otp/input-otp.ts","../../../projects/strct/src/lib/knob/knob.ts","../../../projects/strct/src/lib/input-mask/input-mask.ts","../../../projects/strct/src/lib/combobox/combobox.ts","../../../projects/strct/src/lib/datepicker/datepicker.ts","../../../projects/strct/src/lib/color-picker/color-picker.ts","../../../projects/strct/src/lib/cascade-select/cascade-select.ts","../../../projects/strct/src/lib/table/table.ts","../../../projects/strct/src/lib/datagrid/datagrid.ts","../../../projects/strct/src/lib/timeline/timeline.ts","../../../projects/strct/src/lib/stack/stack.ts","../../../projects/strct/src/lib/charts/sparkline.ts","../../../projects/strct/src/lib/charts/chart.ts","../../../projects/strct/src/lib/charts/donut.ts","../../../projects/strct/src/lib/charts/gauge.ts","../../../projects/strct/src/lib/alert/alert.ts","../../../projects/strct/src/lib/tooltip/tooltip.ts","../../../projects/strct/src/lib/signpost/signpost.ts","../../../projects/strct/src/lib/toast/toast.ts","../../../projects/strct/src/public-api.ts","../../../projects/strct/src/akcelik-strct.ts"],"sourcesContent":["import { DOCUMENT, Injectable, computed, inject, signal } from '@angular/core';\n\n/** Available color palettes. */\nexport type StrctPalette = 'arctic' | 'ember' | 'sage';\n/** Light or dark mode. */\nexport type StrctMode = 'dark' | 'light';\n\n/** Metadata for a color palette. */\nexport interface StrctPaletteInfo {\n id: StrctPalette;\n /** Human label, shown in switchers. */\n label: string;\n /** Swatch color used by the palette dot. */\n swatch: string;\n}\n\n/** All palettes the token system ships with, in display order. */\nexport const STRCT_PALETTES: readonly StrctPaletteInfo[] = [\n { id: 'arctic', label: 'Arctic Steel', swatch: '#5a7ea3' },\n { id: 'ember', label: 'Warm Ember', swatch: '#96724e' },\n { id: 'sage', label: 'Forest Sage', swatch: '#4e8a68' },\n];\n\nconst PALETTE_KEY = 'strct-palette';\nconst MODE_KEY = 'strct-theme';\n\n/**\n * Owns the active palette + light/dark mode. Writes `data-palette` and\n * `data-theme` onto the document root (which the token layer keys off) and\n * persists the choice to localStorage. Inject it anywhere and read the signals\n * or call the setters.\n */\n@Injectable({ providedIn: 'root' })\nexport class StrctThemeService {\n private readonly doc = inject(DOCUMENT);\n\n private readonly _palette = signal<StrctPalette>('arctic');\n private readonly _mode = signal<StrctMode>('dark');\n\n readonly palette = this._palette.asReadonly();\n readonly mode = this._mode.asReadonly();\n readonly palettes = STRCT_PALETTES;\n readonly isDark = computed(() => this._mode() === 'dark');\n\n constructor() {\n const root = this.doc.documentElement;\n const storedPalette = this.read(PALETTE_KEY) as StrctPalette | null;\n const storedMode = this.read(MODE_KEY) as StrctMode | null;\n\n // Fall back to whatever the host page already declared, then to defaults.\n const palette =\n storedPalette ?? (root.getAttribute('data-palette') as StrctPalette | null) ?? 'arctic';\n const mode = storedMode ?? (root.getAttribute('data-theme') as StrctMode | null) ?? 'dark';\n\n this.setPalette(palette);\n this.setMode(mode);\n }\n\n setPalette(palette: StrctPalette): void {\n this._palette.set(palette);\n this.doc.documentElement.setAttribute('data-palette', palette);\n this.write(PALETTE_KEY, palette);\n }\n\n setMode(mode: StrctMode): void {\n this._mode.set(mode);\n this.doc.documentElement.setAttribute('data-theme', mode);\n this.write(MODE_KEY, mode);\n }\n\n toggleMode(): void {\n this.setMode(this._mode() === 'dark' ? 'light' : 'dark');\n }\n\n private read(key: string): string | null {\n try {\n return this.doc.defaultView?.localStorage.getItem(key) ?? null;\n } catch {\n return null;\n }\n }\n\n private write(key: string, value: string): void {\n try {\n this.doc.defaultView?.localStorage.setItem(key, value);\n } catch {\n // Storage unavailable (private mode / SSR) — choice is session-only.\n }\n }\n}\n","import {\n Component,\n ChangeDetectionStrategy,\n ViewEncapsulation,\n computed,\n input,\n} from '@angular/core';\nimport { DomSanitizer, SafeHtml } from '@angular/platform-browser';\nimport { inject } from '@angular/core';\n\n/**\n * Inner markup (path/shape contents) for each icon, drawn on a 0 0 16 16\n * viewBox with `currentColor` stroke. Keep strokes at 1.3–1.5 for crispness.\n *\n * The set is intentionally datacenter-flavoured (hosts, clusters, switches,\n * storage, VMs …). Object state — running / stopped / maintenance — is layered\n * on with the `badge` input rather than a separate icon per state.\n */\nexport const STRCT_ICONS: Record<string, string> = {\n // ── General UI ───────────────────────────────────────────────\n hexagon: '<path d=\"M8 1.6l5.5 3.2v6.4L8 14.4 2.5 11.2V4.8L8 1.6z\"/>',\n chevronRight: '<path d=\"M6 3.5L10.5 8 6 12.5\"/>',\n chevronLeft: '<path d=\"M10 3.5L5.5 8 10 12.5\"/>',\n chevronDoubleRight: '<path d=\"M3.5 3.5L8 8l-4.5 4.5M8.5 3.5L13 8l-4.5 4.5\"/>',\n chevronDown: '<path d=\"M3.5 6L8 10.5 12.5 6\"/>',\n compass: '<circle cx=\"8\" cy=\"8\" r=\"6\"/><path d=\"M10.6 5.4l-1.5 3.7-3.7 1.5 1.5-3.7 3.7-1.5z\"/>',\n close: '<path d=\"M4 4l8 8M12 4l-8 8\"/>',\n check: '<path d=\"M3.5 8.5l3 3 6-7\"/>',\n menu: '<path d=\"M3 4.5h10M3 8h10M3 11.5h10\"/>',\n dots: '<circle cx=\"8\" cy=\"3.5\" r=\"1.1\" fill=\"currentColor\" stroke=\"none\"/><circle cx=\"8\" cy=\"8\" r=\"1.1\" fill=\"currentColor\" stroke=\"none\"/><circle cx=\"8\" cy=\"12.5\" r=\"1.1\" fill=\"currentColor\" stroke=\"none\"/>',\n search: '<circle cx=\"7\" cy=\"7\" r=\"4\"/><path d=\"M10 10l3.5 3.5\"/>',\n calendar:\n '<rect x=\"2.5\" y=\"3.5\" width=\"11\" height=\"10\" rx=\"1.5\"/><path d=\"M2.5 6.5h11M5.5 2v3M10.5 2v3\"/>',\n eye: '<path d=\"M1.5 8S4 3.5 8 3.5 14.5 8 14.5 8 12 12.5 8 12.5 1.5 8 1.5 8z\"/><circle cx=\"8\" cy=\"8\" r=\"2\"/>',\n upload: '<path d=\"M8 10.5V3M5 5.8L8 2.8l3 3M3 12.8h10\"/>',\n download: '<path d=\"M8 2.5V10M5 7.2L8 10.2l3-3M3 12.8h10\"/>',\n droplet: '<path d=\"M8 2.4S12 6.6 12 9.4a4 4 0 01-8 0c0-2.8 4-7 4-7z\"/>',\n sortAsc: '<path d=\"M8 3.5v9M5 6.5L8 3.5l3 3\"/>',\n sortDesc: '<path d=\"M8 12.5v-9M5 9.5l3 3 3-3\"/>',\n sortNone: '<path d=\"M5.5 6.5L8 4l2.5 2.5M5.5 9.5L8 12l2.5-2.5\"/>',\n sun: '<circle cx=\"8\" cy=\"8\" r=\"3.2\"/><path d=\"M8 1.5v1.5M8 13v1.5M1.5 8H3M13 8h1.5M3.8 3.8l1 1M11.2 11.2l1 1M3.8 12.2l1-1M11.2 4.8l1-1\"/>',\n moon: '<path d=\"M13 9a5 5 0 01-6-6 5.5 5.5 0 106 6z\"/>',\n info: '<circle cx=\"8\" cy=\"8\" r=\"6\"/><path d=\"M8 7.2v3.6M8 5.2v.2\"/>',\n warning: '<path d=\"M8 2.5l6 11H2l6-11z\"/><path d=\"M8 6.8v3M8 11.6v.2\"/>',\n critical: '<circle cx=\"8\" cy=\"8\" r=\"6\"/><path d=\"M8 5v3.6M8 10.8v.2\"/>',\n success: '<circle cx=\"8\" cy=\"8\" r=\"6\"/><path d=\"M5.2 8.2l2 2 3.6-4\"/>',\n bell: '<path d=\"M8 2.6a3.4 3.4 0 00-3.4 3.4c0 2.9-1.1 3.9-1.1 3.9h9s-1.1-1-1.1-3.9A3.4 3.4 0 008 2.6z\"/><path d=\"M6.8 12.8a1.3 1.3 0 002.4 0\"/>',\n heart:\n '<path d=\"M8 13.3S2.7 10 2.7 6.3A2.6 2.6 0 018 4.9a2.6 2.6 0 015.3 1.4C13.3 10 8 13.3 8 13.3z\"/>',\n layers:\n '<path d=\"M8 2l5.5 3-5.5 3-5.5-3L8 2z\"/><path d=\"M2.5 8L8 11l5.5-3\"/><path d=\"M2.5 11L8 14l5.5-3\"/>',\n grid: '<rect x=\"2\" y=\"2.5\" width=\"5\" height=\"5\" rx=\"1\"/><rect x=\"9\" y=\"2.5\" width=\"5\" height=\"5\" rx=\"1\"/><rect x=\"2\" y=\"9\" width=\"5\" height=\"5\" rx=\"1\"/><rect x=\"9\" y=\"9\" width=\"5\" height=\"5\" rx=\"1\"/>',\n form: '<rect x=\"2.5\" y=\"2.5\" width=\"11\" height=\"11\" rx=\"1.5\"/><path d=\"M5 6h6M5 8.5h6M5 11h3.5\"/>',\n chart: '<path d=\"M2.5 13V3M2.5 13H13\"/><path d=\"M5 10l2.3-2.3 2 1.4L12.5 5.5\"/>',\n bars: '<path d=\"M2.5 13V3M2.5 13H13\"/><rect x=\"4.3\" y=\"8.5\" width=\"1.8\" height=\"2.5\"/><rect x=\"7.4\" y=\"6.5\" width=\"1.8\" height=\"4.5\"/><rect x=\"10.5\" y=\"4.5\" width=\"1.8\" height=\"6.5\"/>',\n sidebar:\n '<rect x=\"2\" y=\"3\" width=\"12\" height=\"10\" rx=\"1.5\"/><line x1=\"6.2\" y1=\"3\" x2=\"6.2\" y2=\"13\"/>',\n palette:\n '<path d=\"M8 2.2a5.8 5.8 0 100 11.6c.9 0 1.4-.7 1.4-1.4 0-.9-.8-1.2-.8-1.9 0-.5.4-.9 1-.9h1A3.2 3.2 0 0013.8 6 5.9 5.9 0 008 2.2z\"/><circle cx=\"5.4\" cy=\"6.6\" r=\".7\" fill=\"currentColor\" stroke=\"none\"/><circle cx=\"8\" cy=\"5.2\" r=\".7\" fill=\"currentColor\" stroke=\"none\"/><circle cx=\"10.4\" cy=\"6.6\" r=\".7\" fill=\"currentColor\" stroke=\"none\"/>',\n gauge:\n '<path d=\"M2.6 11.5a6 6 0 1110.8 0\"/><path d=\"M8 8.5l2.6-2.2\"/><circle cx=\"8\" cy=\"8.6\" r=\".7\" fill=\"currentColor\" stroke=\"none\"/>',\n copy: '<rect x=\"5\" y=\"5\" width=\"8\" height=\"8\" rx=\"1.4\"/><path d=\"M11 5V3.9A1.4 1.4 0 0 0 9.6 2.5H3.9A1.4 1.4 0 0 0 2.5 3.9v5.7A1.4 1.4 0 0 0 3.9 11H5\"/>',\n code: '<path d=\"M5.5 5L2.5 8l3 3M10.5 5l3 3-3 3M9 3.5l-2 9\"/>',\n book: '<path d=\"M3 3.2h6a1.5 1.5 0 0 1 1.5 1.5v8.1H4.5A1.5 1.5 0 0 1 3 11.3z\"/><path d=\"M13 3.2H9.5A1.5 1.5 0 0 0 8 4.7v8.1h5z\"/>',\n terminal:\n '<rect x=\"2\" y=\"3\" width=\"12\" height=\"10\" rx=\"1.5\"/><path d=\"M4.8 6.5L7 8.2 4.8 9.9M8.2 10.2h3\"/>',\n folder:\n '<path d=\"M2 4.6a1 1 0 0 1 1-1h3.1l1.3 1.6H13a1 1 0 0 1 1 1V12a1 1 0 0 1-1 1H3a1 1 0 0 1-1-1z\"/>',\n template:\n '<path d=\"M4.3 2.5h4.6l3.1 3.1V13a.5.5 0 0 1-.5.5H4.3a.5.5 0 0 1-.5-.5V3a.5.5 0 0 1 .5-.5z\"/><path d=\"M8.7 2.6v3.1h3.1\"/><path d=\"M5.8 9h4.2M5.8 11h2.6\"/>',\n tag: '<path d=\"M2.6 7.7V3.2a.6.6 0 0 1 .6-.6h4.5l5.6 5.6a1 1 0 0 1 0 1.4l-3.5 3.5a1 1 0 0 1-1.4 0z\"/><circle cx=\"5.4\" cy=\"5.4\" r=\".9\" fill=\"currentColor\" stroke=\"none\"/>',\n\n // ── Actions ──────────────────────────────────────────────────\n plus: '<path d=\"M8 3v10M3 8h10\"/>',\n minus: '<path d=\"M3 8h10\"/>',\n pencil: '<path d=\"M11.5 2.5l2 2-8.5 8.5-3 .5.5-3z\"/>',\n trash: '<path d=\"M2.5 4.5h11M5.5 4.5v8.5a1 1 0 001 1h3a1 1 0 001-1V4.5M6.5 3h3\"/>',\n refresh: '<path d=\"M13.5 7.5a5.5 5.5 0 11-2-5.2\"/><path d=\"M13.5 2.5v3.5H10\"/>',\n filter: '<path d=\"M2 3.5h12l-4.5 5.5v4.5h-3V9z\"/>',\n settings:\n '<path d=\"M8 5.5a2.5 2.5 0 100 5 2.5 2.5 0 000-5z\"/><path d=\"M7.2 1.5h1.6l.3 1.8c.4.1.8.3 1.2.5l1.5-1.1 1.1 1.1-1.1 1.5c.2.4.4.8.5 1.2l1.8.3v1.6l-1.8.3c-.1.4-.3.8-.5 1.2l1.1 1.5-1.1 1.1-1.5-1.1c-.4.2-.8.4-1.2.5l-.3 1.8H7.2l-.3-1.8a5.4 5.4 0 01-1.2-.5l-1.5 1.1-1.1-1.1 1.1-1.5a5.4 5.4 0 01-.5-1.2l-1.8-.3V7.2l1.8-.3c.1-.4.3-.8.5-1.2L2.7 4.2l1.1-1.1 1.5 1.1c.4-.2.8-.4 1.2-.5z\"/>',\n user: '<path d=\"M8 8a2.5 2.5 0 100-5A2.5 2.5 0 008 8z\"/><path d=\"M3 14.5c0-2.8 2.2-5 5-5s5 2.2 5 5\"/>',\n logout: '<path d=\"M10 3.5h2a1 1 0 011 1v7a1 1 0 01-1 1h-2M6.5 5.5L3.5 8l3 3M3.5 8h6.5\"/>',\n undo: '<path d=\"M4.5 5.5L2 8l2.5 2.5M2.5 8h7a3 3 0 013 3v.5\"/>',\n redo: '<path d=\"M11.5 5.5L14 8l-2.5 2.5M13.5 8h-7a3 3 0 00-3 3v.5\"/>',\n arrowUp: '<path d=\"M8 13V3M3.5 6.5L8 2l4.5 4.5\"/>',\n arrowDown: '<path d=\"M8 3v10M3.5 9.5L8 14l4.5-4.5\"/>',\n arrowLeft: '<path d=\"M13 8H3M6.5 3.5L2 8l4.5 4.5\"/>',\n arrowRight: '<path d=\"M3 8h10M9.5 3.5L14 8l-4.5 4.5\"/>',\n externalLink:\n '<path d=\"M9 2.5h4.5V7M13.5 2.5L8.5 7.5M11.5 9v3.5a1 1 0 01-1 1h-7a1 1 0 01-1-1v-7a1 1 0 011-1H7\"/>',\n\n // ── Datacenter / infrastructure ─────────────────────────────\n datacenter:\n '<rect x=\"2.5\" y=\"2.5\" width=\"11\" height=\"11\" rx=\"1\"/><path d=\"M5 5h6M5 7.3h6M5 9.6h3.5\"/><circle cx=\"11\" cy=\"9.7\" r=\".5\" fill=\"currentColor\" stroke=\"none\"/>',\n rack: '<rect x=\"3.5\" y=\"2\" width=\"9\" height=\"12\" rx=\"1\"/><path d=\"M3.5 5.2h9M3.5 8.4h9M3.5 11.6h9\"/><circle cx=\"5.4\" cy=\"3.6\" r=\".4\" fill=\"currentColor\" stroke=\"none\"/><circle cx=\"5.4\" cy=\"6.8\" r=\".4\" fill=\"currentColor\" stroke=\"none\"/><circle cx=\"5.4\" cy=\"10\" r=\".4\" fill=\"currentColor\" stroke=\"none\"/>',\n cluster:\n '<rect x=\"2\" y=\"2.5\" width=\"5\" height=\"5\" rx=\"1\"/><rect x=\"9\" y=\"2.5\" width=\"5\" height=\"5\" rx=\"1\"/><rect x=\"5.5\" y=\"9\" width=\"5\" height=\"5\" rx=\"1\"/><path d=\"M4.5 7.5l2.5 1.5M11.5 7.5L9 9\"/>',\n host: '<rect x=\"2.5\" y=\"3\" width=\"11\" height=\"4.2\" rx=\"1\"/><rect x=\"2.5\" y=\"8.8\" width=\"11\" height=\"4.2\" rx=\"1\"/><circle cx=\"4.7\" cy=\"5.1\" r=\".55\" fill=\"currentColor\" stroke=\"none\"/><circle cx=\"4.7\" cy=\"10.9\" r=\".55\" fill=\"currentColor\" stroke=\"none\"/><path d=\"M7 5.1h4M7 10.9h4\"/>',\n vm: '<rect x=\"2\" y=\"3\" width=\"12\" height=\"8\" rx=\"1\"/><path d=\"M6 14h4M8 11v3\"/>',\n switch:\n '<rect x=\"2\" y=\"5.5\" width=\"12\" height=\"5\" rx=\"1\"/><path d=\"M4.5 5.5V3.8M7 5.5V3.8M9 5.5V3.8M11.5 5.5V3.8M4.5 10.5v1.7M7 10.5v1.7M9 10.5v1.7M11.5 10.5v1.7\"/>',\n storage:\n '<ellipse cx=\"8\" cy=\"3.6\" rx=\"5\" ry=\"2\"/><path d=\"M3 3.6v8.8c0 1.1 2.2 2 5 2s5-.9 5-2V3.6\"/><path d=\"M3 8c0 1.1 2.2 2 5 2s5-.9 5-2\"/>',\n network:\n '<circle cx=\"8\" cy=\"3.4\" r=\"1.7\"/><circle cx=\"3.6\" cy=\"12.4\" r=\"1.7\"/><circle cx=\"12.4\" cy=\"12.4\" r=\"1.7\"/><path d=\"M8 5.1v2.6M7 8.8l-2.4 2M9 8.8l2.4 2\"/>',\n cpu: '<rect x=\"4.5\" y=\"4.5\" width=\"7\" height=\"7\" rx=\"1\"/><rect x=\"6.6\" y=\"6.6\" width=\"2.8\" height=\"2.8\" rx=\".5\"/><path d=\"M6.5 2.6v1.9M9.5 2.6v1.9M6.5 11.5v1.9M9.5 11.5v1.9M2.6 6.5h1.9M2.6 9.5h1.9M11.5 6.5h1.9M11.5 9.5h1.9\"/>',\n memory:\n '<rect x=\"2\" y=\"5\" width=\"12\" height=\"6\" rx=\"1\"/><path d=\"M4.5 11v1.6M7 11v1.6M9 11v1.6M11.5 11v1.6M5 7.2h6\"/>',\n disk: '<circle cx=\"8\" cy=\"8\" r=\"5.6\"/><circle cx=\"8\" cy=\"8\" r=\"1.3\"/><path d=\"M8 2.4v2.3\"/>',\n port: '<rect x=\"3\" y=\"5\" width=\"10\" height=\"6\" rx=\"1\"/><path d=\"M6.5 5V3.6h3V5M5 11v1.6M11 11v1.6\"/>',\n power: '<path d=\"M8 2.4v5\"/><path d=\"M5.2 4.6a5 5 0 105.6 0\"/>',\n // Network Adapter Card (NIC) — PCIe card with an RJ45 (square) port.\n nic: '<rect x=\"2.3\" y=\"3.4\" width=\"11.4\" height=\"6.4\" rx=\"1\"/><rect x=\"3.9\" y=\"5.1\" width=\"3.2\" height=\"3\" rx=\".4\"/><path d=\"M8.6 6.1h3.4M8.6 7.9h3.4M5 9.8v2.6M11 9.8v2.6\"/>',\n // Host Bus Adapter (HBA) — PCIe card with optical/SFP (round) ports.\n hba: '<rect x=\"2.3\" y=\"3.4\" width=\"11.4\" height=\"6.4\" rx=\"1\"/><circle cx=\"5.1\" cy=\"6.6\" r=\"1.2\"/><circle cx=\"8.1\" cy=\"6.6\" r=\"1.2\"/><path d=\"M10.6 5.6h1.6M10.6 7.6h1.6M5 9.8v2.6M11 9.8v2.6\"/>',\n // RJ45 ethernet port (switch / server) — keyed jack with contact pins.\n ethernet:\n '<rect x=\"2.5\" y=\"4\" width=\"11\" height=\"7.4\" rx=\"1\"/><path d=\"M6 4V2.6h4V4\"/><path d=\"M5.3 7.6v2M7.1 7.6v2M8.9 7.6v2M10.7 7.6v2\"/>',\n // Resource pool — a proportional allocation (pie with two radii).\n resourcePool: '<circle cx=\"8\" cy=\"8\" r=\"5.6\"/><path d=\"M8 8V2.4M8 8l4.9 2.7\"/>',\n // Port group — a grouped set of switch ports under a shared rail.\n portGroup:\n '<path d=\"M1.8 4.4h12.4\"/><rect x=\"2.2\" y=\"6.2\" width=\"3.4\" height=\"4\" rx=\".5\"/><rect x=\"6.3\" y=\"6.2\" width=\"3.4\" height=\"4\" rx=\".5\"/><rect x=\"10.4\" y=\"6.2\" width=\"3.4\" height=\"4\" rx=\".5\"/><path d=\"M3.9 10.2v1.6M8 10.2v1.6M12.1 10.2v1.6\"/>',\n\n // ── Modern infrastructure ────────────────────────────────────\n pod: '<path d=\"M3 4.5c0-1.1 2.2-2 5-2s5 .9 5 2v7c0 1.1-2.2 2-5 2s-5-.9-5-2z\"/><path d=\"M3 4.5c0 1.1 2.2 2 5 2s5-.9 5-2\"/>',\n deployment:\n '<rect x=\"2.5\" y=\"2.5\" width=\"11\" height=\"4.5\" rx=\"1\"/><rect x=\"2.5\" y=\"9\" width=\"11\" height=\"4.5\" rx=\"1\"/><path d=\"M11.5 5.5l2.5-1.5v4l-2.5-1.5\"/>',\n service:\n '<circle cx=\"4.5\" cy=\"8\" r=\"2\"/><circle cx=\"11.5\" cy=\"4.5\" r=\"2\"/><circle cx=\"11.5\" cy=\"11.5\" r=\"2\"/><path d=\"M6.2 6.8l3.3-1.3M6.2 9.2l3.3 1.3\"/>',\n node: '<rect x=\"2.5\" y=\"4\" width=\"11\" height=\"8\" rx=\"1\"/><path d=\"M5 7h6M5 10h3\"/><circle cx=\"11\" cy=\"10\" r=\".7\" fill=\"currentColor\" stroke=\"none\"/>',\n ingress: '<path d=\"M1.5 4.5h10M1.5 8h8M1.5 11.5h10\"/><path d=\"M10.5 6.5l3 1.5-3 1.5\"/>',\n cloud: '<path d=\"M11.5 10.5a2.5 2.5 0 00-1.5-4.5 2.8 2.8 0 00-5.2.3A2.5 2.5 0 004 10.5z\"/>',\n container:\n '<rect x=\"2.5\" y=\"2.5\" width=\"11\" height=\"11\" rx=\"1.5\"/><path d=\"M2.5 5.5h11M5.5 5.5V3M8 5.5V3M10.5 5.5V3\"/>',\n firewall: '<path d=\"M1.5 4h13v8h-13z\"/><path d=\"M1.5 6.5h13M5 6.5V12M8 4V12M11 6.5V12\"/>',\n shield: '<path d=\"M8 2.3l5.2 1.9v3.3c0 3.1-2.3 5.1-5.2 6.4C5.1 12.6 2.8 10.6 2.8 7.5V4.2z\"/>',\n certificate:\n '<path d=\"M3 2.5h10v9H3z\"/><path d=\"M3 5.5h10M6 8h4\"/><circle cx=\"8\" cy=\"11\" r=\".6\" fill=\"currentColor\" stroke=\"none\"/><path d=\"M12 3.5l2 1.5-2 1.5V3.5z\"/>',\n key: '<circle cx=\"5\" cy=\"9\" r=\"2.8\"/><path d=\"M6.9 7.1l5.6-5.6M11 4.5h2.5V7\"/>',\n metrics: '<path d=\"M2.5 13V3M2.5 13H13\"/><path d=\"M4.5 10l2.5-4 2 2 3-5\"/>',\n logs: '<path d=\"M3 4.5h10M3 7h10M3 9.5h7M3 12h4\"/>',\n trace:\n '<circle cx=\"3.5\" cy=\"5.5\" r=\"1.2\"/><circle cx=\"8\" cy=\"11\" r=\"1.2\"/><circle cx=\"12.5\" cy=\"5.5\" r=\"1.2\"/><path d=\"M4.5 6.3l2.5 3.4M9 9.2l2.5-3.4\"/>',\n\n // ── Accessibility (original glyphs for generic concepts) ─────\n universalAccess:\n '<circle cx=\"8\" cy=\"8\" r=\"6\"/><circle cx=\"8\" cy=\"4.9\" r=\".9\" fill=\"currentColor\" stroke=\"none\"/><path d=\"M4.9 6.3c2 .8 4.2 .8 6.2 0M8 6.4v3.1M6.3 11.9 8 9.4l1.7 2.5\"/>',\n wheelchair:\n '<circle cx=\"6.5\" cy=\"3.1\" r=\"1.3\"/><path d=\"M6.5 4.5v3.3h3.1l1.7 3.4\"/><circle cx=\"6.7\" cy=\"11.3\" r=\"2.6\"/><path d=\"M9.3 11.3h2.1l-.5 1.6\"/>',\n hearing:\n '<path d=\"M5 6.2a3 3 0 0 1 6 0c0 2.2-2.2 2.6-2.2 4.7A1.8 1.8 0 0 1 5 10.8\"/><path d=\"M8.6 13.1a2.2 2.2 0 0 0 2.1-2.2\"/>',\n lowVision:\n '<path d=\"M1.8 8S4.2 4 8 4s6.2 4 6.2 4\"/><circle cx=\"8\" cy=\"8.3\" r=\"2.1\"/><path d=\"M2.6 10.8 4 9.4M13.4 10.8 12 9.4\"/>',\n braille:\n '<circle cx=\"5\" cy=\"4.5\" r=\".85\" fill=\"currentColor\" stroke=\"none\"/><circle cx=\"5\" cy=\"8\" r=\".85\" fill=\"currentColor\" stroke=\"none\"/><circle cx=\"5\" cy=\"11.5\" r=\".85\" fill=\"currentColor\" stroke=\"none\"/><circle cx=\"9\" cy=\"4.5\" r=\".85\" fill=\"currentColor\" stroke=\"none\"/><circle cx=\"9\" cy=\"8\" r=\".85\" fill=\"currentColor\" stroke=\"none\"/><circle cx=\"11.2\" cy=\"6\" r=\".85\" fill=\"currentColor\" stroke=\"none\"/>',\n signLanguage:\n '<path d=\"M5.6 9.4V5a1 1 0 0 1 2 0M7.6 8V4.3a1 1 0 0 1 2 0V8M9.6 8V5.3a1 1 0 0 1 2 0v4.2c0 2.1-1.7 3.7-3.8 3.7-1.2 0-2.3-.5-3.1-1.5L4.1 11.5a1 1 0 0 1 1.5-1.3z\"/>',\n\n // ── Alert (original glyphs) ─────────────────────────────────\n siren: '<path d=\"M3.5 13h9M5 13V8a3 3 0 0 1 6 0v5M8 2.4V4M3.6 4.6l1 .9M12.4 4.6l-1 .9\"/>',\n alarm:\n '<circle cx=\"8\" cy=\"9\" r=\"4.4\"/><path d=\"M8 6.6V9l1.7 1M5 2.6 3.1 4.3M11 2.6l1.9 1.7M8 4.6V3\"/>',\n megaphone: '<path d=\"M3 7.3v1.6l7 3V4.3zM10 5.7 12.5 4.2v7.6L10 10.3M4 9.6l.9 3.1h1.6l-.7-2.9\"/>',\n flag: '<path d=\"M4 13.5V3M4 3.6h7.4L9.8 6.2l1.6 2.6H4\"/>',\n shieldAlert:\n '<path d=\"M8 2.3l5.2 1.9v3.3c0 3.1-2.3 5.1-5.2 6.4C5.1 12.6 2.8 10.6 2.8 7.5V4.2z\"/><path d=\"M8 5.5v3.1M8 10.6v.2\"/>',\n\n // ── State / action (also usable as badges via the icon `badge` input) ─\n running: '<path d=\"M5.5 4l6 4-6 4z\"/>',\n stopped: '<rect x=\"4.5\" y=\"4.5\" width=\"7\" height=\"7\" rx=\"1\"/>',\n paused:\n '<rect x=\"5.2\" y=\"4\" width=\"2\" height=\"8\" rx=\".5\"/><rect x=\"8.8\" y=\"4\" width=\"2\" height=\"8\" rx=\".5\"/>',\n maintenance:\n '<path d=\"M10.8 3.2a2.7 2.7 0 00-3.5 3.4l-4.2 4.2L4.6 12.7l4.2-4.2a2.7 2.7 0 003.4-3.5L10.5 6.7 9.3 6.4 9 5.2z\"/>',\n sync: '<path d=\"M12.5 7a4.5 4.5 0 00-8-2.5M3.5 9a4.5 4.5 0 008 2.5\"/><path d=\"M12.5 3v2.5H10M3.5 13v-2.5H6\"/>',\n snapshot:\n '<rect x=\"2.5\" y=\"4.5\" width=\"11\" height=\"8\" rx=\"1.5\"/><circle cx=\"8\" cy=\"8.5\" r=\"2.3\"/><path d=\"M6 4.5l1-1.5h2l1 1.5\"/>',\n lock: '<rect x=\"3.5\" y=\"7\" width=\"9\" height=\"6\" rx=\"1.5\"/><path d=\"M5.5 7V5.4a2.5 2.5 0 015 0V7\"/>',\n\n // ── Generic vendor marks (abstract glyphs, NOT real trademarked logos) ─\n vendorVmware:\n '<rect x=\"2.5\" y=\"6.5\" width=\"3\" height=\"3.4\" rx=\".5\"/><rect x=\"6.5\" y=\"6.5\" width=\"3\" height=\"3.4\" rx=\".5\"/><rect x=\"10.5\" y=\"6.5\" width=\"3\" height=\"3.4\" rx=\".5\"/>',\n vendorCisco: '<path d=\"M2.5 10.5V7.5M5.5 10.5V5M8 10.5V3.5M10.5 10.5V5M13.5 10.5V7.5\"/>',\n vendorHpe: '<rect x=\"2.5\" y=\"5\" width=\"11\" height=\"6\" rx=\"1\"/><path d=\"M5.5 5v6\"/>',\n vendorDell: '<circle cx=\"8\" cy=\"8\" r=\"5.6\"/><path d=\"M5.4 8h3.4M5.4 6.6h2.6M5.4 9.4h2.6\"/>',\n vendorKaytus: '<path d=\"M5 3v10M5 8l4.5-4.5M5 8l4.5 5\"/>',\n};\n\n// Composite \"off\" variants — re-use base glyph + diagonal slash.\nSTRCT_ICONS['eyeOff'] = `${STRCT_ICONS['eye']}<path d=\"M2.5 2.5l11 11\"/>`;\nSTRCT_ICONS['bellOff'] = `${STRCT_ICONS['bell']}<path d=\"M2.6 2.6l10.8 10.8\"/>`;\n\n/** Icon names grouped for galleries / documentation. */\nexport const STRCT_ICON_GROUPS: { label: string; names: string[] }[] = [\n {\n label: 'General',\n names: [\n 'hexagon',\n 'search',\n 'menu',\n 'dots',\n 'close',\n 'check',\n 'calendar',\n 'eye',\n 'eyeOff',\n 'upload',\n 'download',\n 'sun',\n 'moon',\n 'bell',\n 'heart',\n 'layers',\n 'grid',\n 'form',\n 'chart',\n 'bars',\n 'gauge',\n 'palette',\n 'sidebar',\n 'compass',\n 'copy',\n 'code',\n 'book',\n 'terminal',\n 'folder',\n 'template',\n 'tag',\n ],\n },\n {\n label: 'Actions',\n names: [\n 'plus',\n 'minus',\n 'pencil',\n 'trash',\n 'refresh',\n 'filter',\n 'settings',\n 'user',\n 'logout',\n 'undo',\n 'redo',\n 'arrowUp',\n 'arrowDown',\n 'arrowLeft',\n 'arrowRight',\n 'externalLink',\n ],\n },\n {\n label: 'Status',\n names: ['info', 'success', 'warning', 'critical', 'sync', 'lock', 'snapshot'],\n },\n {\n label: 'Alert',\n names: ['bell', 'bellOff', 'siren', 'alarm', 'megaphone', 'flag', 'shieldAlert', 'warning'],\n },\n {\n label: 'Accessibility',\n names: ['universalAccess', 'wheelchair', 'hearing', 'lowVision', 'braille', 'signLanguage'],\n },\n {\n label: 'Datacenter',\n names: [\n 'datacenter',\n 'rack',\n 'cluster',\n 'host',\n 'vm',\n 'switch',\n 'storage',\n 'network',\n 'cpu',\n 'memory',\n 'disk',\n 'port',\n 'nic',\n 'hba',\n 'ethernet',\n 'power',\n 'resourcePool',\n 'portGroup',\n ],\n },\n {\n label: 'Infrastructure',\n names: [\n 'pod',\n 'deployment',\n 'service',\n 'node',\n 'ingress',\n 'cloud',\n 'container',\n 'firewall',\n 'shield',\n 'certificate',\n 'key',\n 'metrics',\n 'logs',\n 'trace',\n ],\n },\n {\n label: 'Object state',\n names: ['running', 'stopped', 'paused', 'maintenance'],\n },\n {\n label: 'Vendor (generic)',\n names: ['vendorVmware', 'vendorCisco', 'vendorHpe', 'vendorDell', 'vendorKaytus'],\n },\n];\n\n/**\n * Full-SVG icons that keep their own viewBox and colors (no stroke wrapper).\n * Use this for brand / vendor logos you have the rights to ship — register the\n * official asset's markup yourself; the library does not bundle any logos.\n */\nexport const STRCT_RAW_ICONS: Record<string, string> = {};\n\n/**\n * Register an icon at runtime.\n * registerStrctIcon('mything', '<path d=\"…\"/>'); // stroke glyph\n * registerStrctIcon('vendorDell', '<svg viewBox=\"…\">…</svg>', { raw: true });\n */\nexport function registerStrctIcon(\n name: string,\n content: string,\n options: { raw?: boolean } = {},\n): void {\n if (options.raw) {\n STRCT_RAW_ICONS[name] = content;\n } else {\n STRCT_ICONS[name] = content;\n }\n}\n\n/** Icon status dot variants. */\nexport type StrctIconBadge = 'none' | 'success' | 'warning' | 'critical' | 'off' | 'info';\n\n/**\n * Inline stroke icon. `<strct-icon name=\"host\" badge=\"success\" />` renders the host\n * glyph with a green status dot (a \"running host\"). Unknown names render\n * nothing rather than throwing.\n */\n@Component({\n selector: 'strct-icon',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n template: `@if (isRaw()) {\n <span\n class=\"strct-icon__raw\"\n [style.width.px]=\"size()\"\n [style.height.px]=\"size()\"\n [innerHTML]=\"rawSvg()\"\n ></span>\n } @else {\n <svg\n viewBox=\"0 0 16 16\"\n fill=\"none\"\n stroke=\"currentColor\"\n [attr.stroke-width]=\"strokeWidth()\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n [style.width.px]=\"size()\"\n [style.height.px]=\"size()\"\n [innerHTML]=\"svg()\"\n role=\"img\"\n [attr.aria-label]=\"ariaLabel() || null\"\n [attr.aria-hidden]=\"ariaLabel() ? null : 'true'\"\n ></svg>\n }\n @if (badge() !== 'none') {\n <span class=\"strct-icon__badge strct-icon__badge--{{ badge() }}\"></span>\n }`,\n host: { class: 'strct-icon' },\n styles: [\n `\n .strct-icon {\n position: relative;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n line-height: 0;\n }\n .strct-icon__raw {\n display: inline-flex;\n }\n .strct-icon__raw > svg {\n width: 100%;\n height: 100%;\n display: block;\n }\n .strct-icon__badge {\n position: absolute;\n right: -1px;\n bottom: -1px;\n width: 38%;\n height: 38%;\n min-width: 6px;\n min-height: 6px;\n max-width: 9px;\n max-height: 9px;\n border-radius: 50%;\n box-shadow: 0 0 0 1.5px var(--bg-1);\n }\n .strct-icon__badge--success {\n background: var(--success);\n }\n .strct-icon__badge--warning {\n background: var(--warning);\n }\n .strct-icon__badge--critical {\n background: var(--critical);\n }\n .strct-icon__badge--off {\n background: var(--t3);\n }\n .strct-icon__badge--info {\n background: var(--acc);\n }\n `,\n ],\n})\nexport class StrctIcon {\n private readonly sanitizer = inject(DomSanitizer);\n\n /** Icon name from the STRCT_ICONS registry. */\n readonly name = input.required<string>();\n /** Icon size in pixels. */\n readonly size = input(16);\n /** Stroke width for outline icons. */\n readonly strokeWidth = input(1.4);\n /** Optional status dot overlaid on the glyph (object state). */\n readonly badge = input<StrctIconBadge>('none');\n /** Accessible label for the icon. When empty the icon is hidden from assistive tech. */\n readonly ariaLabel = input<string>('');\n\n /** True when the named icon is a full-SVG (raw) icon registered by the app. */\n protected readonly isRaw = computed(() =>\n Object.prototype.hasOwnProperty.call(STRCT_RAW_ICONS, this.name()),\n );\n\n protected readonly svg = computed<SafeHtml>(() =>\n this.sanitizer.bypassSecurityTrustHtml(STRCT_ICONS[this.name()] ?? ''),\n );\n protected readonly rawSvg = computed<SafeHtml>(() =>\n this.sanitizer.bypassSecurityTrustHtml(STRCT_RAW_ICONS[this.name()] ?? ''),\n );\n}\n","import { ChangeDetectionStrategy, Component, ViewEncapsulation, inject } from '@angular/core';\nimport { StrctIcon } from '../icon/icon';\nimport { StrctThemeService } from './theme.service';\n\n/** Palette dots + light/dark pill, wired to {@link StrctThemeService}. */\n@Component({\n selector: 'strct-theme-switcher',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n imports: [StrctIcon],\n template: `\n <div class=\"strct-ts__pal\">\n @for (p of theme.palettes; track p.id) {\n <button\n type=\"button\"\n class=\"strct-ts__dot\"\n [class.strct-ts__dot--on]=\"theme.palette() === p.id\"\n [title]=\"p.label\"\n [attr.aria-label]=\"p.label\"\n [attr.aria-pressed]=\"theme.palette() === p.id\"\n (click)=\"theme.setPalette(p.id)\"\n >\n <span class=\"strct-ts__inner\" [style.background]=\"p.swatch\"></span>\n </button>\n }\n </div>\n <div class=\"strct-ts__pill\">\n <button\n type=\"button\"\n class=\"strct-ts__pbtn\"\n [class.strct-ts__pbtn--on]=\"!theme.isDark()\"\n title=\"Light\"\n aria-label=\"Light theme\"\n (click)=\"theme.setMode('light')\"\n >\n <strct-icon name=\"sun\" [size]=\"15\" [strokeWidth]=\"1.5\" />\n </button>\n <button\n type=\"button\"\n class=\"strct-ts__pbtn\"\n [class.strct-ts__pbtn--on]=\"theme.isDark()\"\n title=\"Dark\"\n aria-label=\"Dark theme\"\n (click)=\"theme.setMode('dark')\"\n >\n <strct-icon name=\"moon\" [size]=\"15\" [strokeWidth]=\"1.5\" />\n </button>\n </div>\n `,\n host: { class: 'strct-ts' },\n styles: [\n `\n .strct-ts { display: inline-flex; align-items: center; gap: 14px; }\n .strct-ts__pal { display: inline-flex; gap: 7px; }\n .strct-ts__dot {\n display: inline-flex; align-items: center; justify-content: center;\n width: 18px; height: 18px; border-radius: 50%; padding: 0; cursor: pointer;\n background: transparent; border: 1.5px solid rgba(255,255,255,.35);\n transition: transform .15s ease, border-color .15s ease;\n }\n .strct-ts__dot:hover { transform: scale(1.12); }\n .strct-ts__inner { width: 11px; height: 11px; border-radius: 50%; display: block; }\n .strct-ts__dot--on { border-color: #fff; box-shadow: 0 0 0 2px rgba(255,255,255,.25); }\n\n .strct-ts__pill {\n display: inline-flex; padding: 2px; gap: 2px; border-radius: 7px;\n background: rgba(255,255,255,.10);\n }\n .strct-ts__pbtn {\n display: inline-flex; align-items: center; justify-content: center;\n width: 26px; height: 22px; border: 0; border-radius: 5px; cursor: pointer;\n background: transparent; color: rgba(255,255,255,.6);\n transition: background .14s ease, color .14s ease;\n }\n .strct-ts__pbtn--on { background: rgba(255,255,255,.18); color: #fff; }\n `,\n ],\n})\nexport class StrctThemeSwitcher {\n protected readonly theme = inject(StrctThemeService);\n}\n","import {\n Directive,\n ElementRef,\n NgZone,\n OnDestroy,\n afterNextRender,\n inject,\n input,\n} from '@angular/core';\n\n/** Overlay positioning strategies. */\nexport type StrctOverlayPlacement =\n | 'bottom-start'\n | 'bottom-end'\n | 'top-start'\n | 'top-end'\n | 'right'\n | 'left';\n\n/**\n * Positions an overlay panel with `position: fixed` relative to an anchor\n * element, so it escapes ancestor `overflow: hidden/scroll` clipping.\n * Repositions on scroll/resize and flips vertically near the viewport edge.\n *\n * <button #trigger>…</button>\n * <div class=\"menu\" [strctOverlay]=\"trigger\" strctOverlayPlacement=\"bottom-end\">…</div>\n *\n * Note: like any fixed-positioned element, the panel is positioned relative to\n * a transformed/filtered ancestor if one exists (a CSS containing-block rule).\n * Avoid wrapping a trigger in `transform`/`filter` if you need viewport-anchored\n * overlays. (The tooltip sidesteps this by rendering into `<body>`.)\n */\n@Directive({ selector: '[strctOverlay]' })\nexport class StrctOverlay implements OnDestroy {\n private readonly el = inject(ElementRef<HTMLElement>).nativeElement as HTMLElement;\n private readonly zone = inject(NgZone);\n\n /** Anchor element for positioning. */\n readonly anchor = input.required<HTMLElement>({ alias: 'strctOverlay' });\n /** Preferred placement relative to the anchor. */\n readonly placement = input<StrctOverlayPlacement>('bottom-start', {\n alias: 'strctOverlayPlacement',\n });\n /** Match the panel width to the anchor (combobox / date / cascade fields). */\n readonly matchWidth = input(false, { alias: 'strctOverlayMatchWidth' });\n /** Gap between anchor and panel in pixels. */\n readonly gap = input(5, { alias: 'strctOverlayGap' });\n\n private readonly onScrollResize = () => this.position();\n private bound = false;\n\n constructor() {\n const s = this.el.style;\n s.position = 'fixed';\n s.top = '0';\n s.left = '0';\n s.right = 'auto';\n s.bottom = 'auto';\n s.margin = '0';\n afterNextRender(() => {\n this.position();\n this.zone.runOutsideAngular(() => {\n window.addEventListener('scroll', this.onScrollResize, true);\n window.addEventListener('resize', this.onScrollResize);\n this.bound = true;\n });\n });\n }\n\n /** Recompute and apply the fixed coordinates. */\n position(): void {\n const anchor = this.anchor();\n if (!anchor) return;\n const a = anchor.getBoundingClientRect();\n const el = this.el;\n if (this.matchWidth()) el.style.width = `${a.width}px`;\n\n const w = el.offsetWidth;\n const h = el.offsetHeight;\n const vw = window.innerWidth;\n const vh = window.innerHeight;\n const gap = this.gap();\n const p = this.placement();\n const margin = 4;\n\n let top: number;\n let left: number;\n\n if (p === 'right') {\n left = a.right + gap;\n // Flip to the left of the anchor if it would overflow the right edge.\n if (left + w > vw - margin && a.left - gap - w > margin) left = a.left - gap - w;\n top = a.top;\n } else if (p === 'left') {\n left = a.left - gap - w;\n // Flip to the right of the anchor if it would overflow the left edge.\n if (left < margin && a.right + gap + w < vw - margin) left = a.right + gap;\n top = a.top;\n } else {\n const below = p.startsWith('bottom');\n top = below ? a.bottom + gap : a.top - gap - h;\n if (below && top + h > vh - margin && a.top - gap - h > margin) {\n top = a.top - gap - h;\n } else if (!below && top < margin && a.bottom + gap + h < vh - margin) {\n top = a.bottom + gap;\n }\n left = p.endsWith('end') ? a.right - w : a.left;\n }\n\n left = Math.max(margin, Math.min(left, vw - w - margin));\n top = Math.max(margin, Math.min(top, vh - h - margin));\n\n el.style.left = `${Math.round(left)}px`;\n el.style.top = `${Math.round(top)}px`;\n }\n\n ngOnDestroy(): void {\n if (this.bound) {\n window.removeEventListener('scroll', this.onScrollResize, true);\n window.removeEventListener('resize', this.onScrollResize);\n }\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n ViewEncapsulation,\n inject,\n signal,\n} from '@angular/core';\nimport { StrctIcon } from '../icon/icon';\n\n/** Shared layout state between shell parts. */\nexport class StrctShellService {\n readonly mobileNavOpen = signal(false);\n}\n\n/**\n * Application frame: a full-viewport grid of header / body / footer rows.\n * <strct-shell>\n * <strct-header>…</strct-header>\n * <div strctShellMain>… sidebar + content …</div>\n * <strct-footer>…</strct-footer>\n * </strct-shell>\n */\n@Component({\n selector: 'strct-shell',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n providers: [StrctShellService],\n template: `\n <ng-content select=\"strct-header\" />\n <div class=\"strct-shell__main\"><ng-content /></div>\n <ng-content select=\"strct-footer\" />\n `,\n host: { class: 'strct-shell' },\n styles: [\n `\n .strct-shell {\n display: grid;\n grid-template-rows: auto 1fr auto;\n height: 100vh;\n overflow: hidden;\n background: var(--bg-2);\n }\n .strct-shell__main {\n display: flex;\n min-height: 0;\n overflow: hidden;\n }\n `,\n ],\n})\nexport class StrctShell {}\n\n/** Top application bar. Holds brand on the left and actions on the right. */\n@Component({\n selector: 'strct-header',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n imports: [StrctIcon],\n template: `\n <button\n type=\"button\"\n class=\"strct-header__drawer-toggle\"\n aria-label=\"Toggle navigation\"\n (click)=\"shell.mobileNavOpen.update((v) => !v)\"\n >\n <strct-icon name=\"menu\" [size]=\"18\" />\n </button>\n <ng-content />\n `,\n host: { class: 'strct-header' },\n styles: [\n `\n .strct-header {\n display: flex;\n align-items: center;\n gap: 14px;\n height: 56px;\n padding: 0 18px;\n background: var(--hdr);\n border-bottom: 1px solid var(--b2);\n color: rgba(255, 255, 255, 0.92);\n }\n .strct-header__drawer-toggle {\n display: none;\n align-items: center;\n justify-content: center;\n padding: 4px;\n border: 0;\n border-radius: 5px;\n background: transparent;\n color: rgba(255, 255, 255, 0.85);\n cursor: pointer;\n }\n .strct-header__drawer-toggle:hover {\n background: rgba(255, 255, 255, 0.12);\n color: #fff;\n }\n @media (max-width: 768px) {\n .strct-header__drawer-toggle {\n display: inline-flex;\n }\n }\n `,\n ],\n})\nexport class StrctHeader {\n protected readonly shell = inject(StrctShellService);\n}\n\n/** Bottom status bar. */\n@Component({\n selector: 'strct-footer',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n template: `<ng-content />`,\n host: { class: 'strct-footer' },\n styles: [\n `\n .strct-footer {\n display: flex;\n align-items: center;\n gap: 12px;\n height: 32px;\n padding: 0 16px;\n background: var(--bg-1);\n border-top: 1px solid var(--b2);\n font-size: 12px;\n color: var(--t2);\n }\n `,\n ],\n})\nexport class StrctFooter {}\n","import {\n ChangeDetectionStrategy,\n Component,\n ViewEncapsulation,\n input,\n inject,\n} from '@angular/core';\nimport { StrctShellService } from './layout';\n\n/** Scrollable left sidebar surface. Holds the icon nav and/or a tree. */\n@Component({\n selector: 'strct-vertical-nav',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n template: `\n @if (shell.mobileNavOpen()) {\n <div\n class=\"strct-vnav__backdrop\"\n tabindex=\"0\"\n role=\"button\"\n aria-label=\"Close navigation\"\n (click)=\"shell.mobileNavOpen.set(false)\"\n (keydown.enter)=\"shell.mobileNavOpen.set(false)\"\n (keydown.space)=\"shell.mobileNavOpen.set(false)\"\n ></div>\n }\n <ng-content />\n `,\n host: {\n class: 'strct-vnav',\n '[class.strct-vnav--open]': 'shell.mobileNavOpen()',\n },\n styles: [\n `\n .strct-vnav {\n display: flex;\n flex-direction: column;\n width: 264px;\n flex-shrink: 0;\n background: var(--bg-1);\n border-right: 1px solid var(--b2);\n overflow: hidden;\n }\n @media (max-width: 768px) {\n .strct-vnav {\n position: fixed;\n top: 0;\n left: 0;\n bottom: 0;\n z-index: 300;\n transform: translateX(-100%);\n transition: transform 0.2s ease;\n }\n .strct-vnav--open {\n transform: translateX(0);\n }\n .strct-vnav__backdrop {\n position: fixed;\n inset: 0;\n z-index: 299;\n background: rgba(0, 0, 0, 0.5);\n animation: strct-vnav-backdrop-in 0.2s ease;\n }\n }\n @media (min-width: 769px) {\n .strct-vnav__backdrop {\n display: none;\n }\n }\n @keyframes strct-vnav-backdrop-in {\n from {\n opacity: 0;\n }\n }\n `,\n ],\n})\nexport class StrctVerticalNav {\n protected readonly shell = inject(StrctShellService);\n}\n\n/** Horizontal strip of icon tabs (e.g. section switcher at the top of a sidebar). */\n@Component({\n selector: 'strct-nav',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n template: `<ng-content />`,\n host: { class: 'strct-nav' },\n styles: [\n `\n .strct-nav {\n display: flex;\n align-items: center;\n gap: 4px;\n padding: 8px 10px;\n border-bottom: 1px solid var(--b1);\n }\n `,\n ],\n})\nexport class StrctNav {}\n\n/** A single icon tab inside `<strct-nav>`. */\n@Component({\n selector: 'strct-nav-item',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n template: `<ng-content />`,\n host: {\n class: 'strct-nav-item',\n role: 'button',\n tabindex: '0',\n '[class.strct-nav-item--active]': 'active()',\n '[attr.title]': 'label() || null',\n '[attr.aria-label]': 'label() || null',\n '[attr.aria-pressed]': 'active()',\n },\n styles: [\n `\n .strct-nav-item {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 34px;\n height: 34px;\n border-radius: 7px;\n cursor: pointer;\n color: var(--t2);\n transition:\n background 0.14s ease,\n color 0.14s ease;\n }\n .strct-nav-item:hover {\n background: var(--bg-3);\n color: var(--t1);\n }\n .strct-nav-item--active {\n background: var(--acc-m);\n color: var(--acc);\n }\n .strct-nav-item:focus-visible {\n outline: 2px solid var(--acc50);\n outline-offset: 1px;\n }\n `,\n ],\n})\nexport class StrctNavItem {\n /** Whether the item is active / selected. */\n readonly active = input(false);\n /** Label text. */\n readonly label = input('');\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n ViewEncapsulation,\n booleanAttribute,\n input,\n} from '@angular/core';\n\n/**\n * Authentication layout. Two modes:\n * - default: a single centered column (drop a card + form inside).\n * - `split`: a two-panel card — a decorative accent aside (`[strctLoginAside]`)\n * on the left and the form (default content) on the right.\n *\n * <strct-login split>\n * <div strctLoginAside>… brand + welcome …</div>\n * <form strctLoginMain>… inputs + button …</form>\n * </strct-login>\n */\n@Component({\n selector: 'strct-login',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n template: `\n @if (split()) {\n <div class=\"strct-login__card\" [style.max-width.px]=\"maxWidth()\">\n <aside class=\"strct-login__aside\">\n <div class=\"strct-login__aside-inner\">\n <ng-content select=\"[strctLoginAside]\" />\n </div>\n </aside>\n <div class=\"strct-login__main\"><ng-content select=\"[strctLoginMain]\" /></div>\n </div>\n } @else {\n <div class=\"strct-login__inner\" [style.max-width.px]=\"maxWidth()\"><ng-content /></div>\n }\n `,\n host: { class: 'strct-login' },\n styles: [\n `\n .strct-login {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 100%;\n min-height: 100%;\n padding: 32px;\n }\n .strct-login__inner {\n width: 100%;\n }\n\n /* Split card */\n .strct-login__card {\n display: grid;\n grid-template-columns: 1.05fr 1fr;\n width: 100%;\n overflow: hidden;\n }\n .strct-login__main {\n padding: 40px 38px;\n display: flex;\n flex-direction: column;\n justify-content: center;\n }\n\n /* Aside — stripped of background images/colors and borders. */\n .strct-login__aside {\n position: relative;\n overflow: hidden;\n min-height: 420px;\n }\n .strct-login__aside::before,\n .strct-login__aside::after {\n display: none;\n }\n .strct-login__aside-inner {\n position: relative;\n z-index: 1;\n height: 100%;\n display: flex;\n flex-direction: column;\n justify-content: space-between;\n padding: 34px 36px;\n }\n\n @media (max-width: 720px) {\n .strct-login__card {\n grid-template-columns: 1fr;\n }\n .strct-login__aside {\n min-height: 220px;\n }\n .strct-login__main {\n padding: 30px 26px;\n }\n }\n `,\n ],\n})\nexport class StrctLogin {\n /** Maximum width in pixels. */\n readonly maxWidth = input(880);\n /** Enable two-panel split layout. */\n readonly split = input(false, { transform: booleanAttribute });\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n ViewEncapsulation,\n booleanAttribute,\n input,\n} from '@angular/core';\n\n/** Button visual variants. */\nexport type StrctButtonVariant = 'primary' | 'critical' | 'outline' | 'flat' | 'neutral';\n/** Button size variants. */\nexport type StrctButtonSize = 'md' | 'sm' | 'mini';\n\n/**\n * Styles a native `<button>` / `<a>` so it stays fully accessible and form-aware.\n *\n * Buttons are restrained by default: outlined / ghost surfaces with color used\n * only as a subtle border + text accent. Add `solid` for a rare filled call to\n * action.\n * <button strct-button variant=\"primary\">Save</button>\n * <button strct-button variant=\"primary\" solid>Deploy</button>\n * <a strct-button variant=\"flat\" size=\"sm\" href=\"...\">Cancel</a>\n */\n@Component({\n selector: 'button[strct-button], a[strct-button]',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n template: `<ng-content />`,\n host: {\n class: 'strct-btn',\n '[class.strct-btn--primary]': \"variant() === 'primary'\",\n '[class.strct-btn--critical]': \"variant() === 'critical'\",\n '[class.strct-btn--outline]': \"variant() === 'outline'\",\n '[class.strct-btn--flat]': \"variant() === 'flat'\",\n '[class.strct-btn--solid]': 'solid()',\n '[class.strct-btn--sm]': \"size() === 'sm'\",\n '[class.strct-btn--mini]': \"size() === 'mini'\",\n '[class.strct-btn--block]': 'block()',\n '[class.strct-btn--icon]': 'iconOnly()',\n },\n styles: [\n `\n /* Base: neutral, outlined, no fill. */\n .strct-btn {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n gap: var(--space-1);\n font-family: var(--font);\n font-size: 13px;\n font-weight: 500;\n line-height: 1;\n padding: var(--space-2) var(--space-4);\n border-radius: var(--radius-md);\n cursor: pointer;\n user-select: none;\n color: var(--t1);\n background: transparent;\n border: 1px solid var(--b3);\n transition:\n background 0.14s ease,\n border-color 0.14s ease,\n color 0.14s ease,\n opacity 0.14s ease;\n text-decoration: none;\n white-space: nowrap;\n }\n .strct-btn:hover {\n background: var(--bg-3);\n text-decoration: none;\n }\n .strct-btn:active {\n background: var(--bg-a);\n }\n .strct-btn:disabled,\n .strct-btn[aria-disabled='true'] {\n opacity: 0.45;\n cursor: not-allowed;\n }\n\n /* Emphasis via accent border + text only — not a colored fill. */\n .strct-btn--primary {\n border-color: var(--acc50);\n color: var(--acc);\n }\n .strct-btn--primary:hover {\n background: var(--acc-m);\n border-color: var(--acc);\n }\n\n .strct-btn--critical {\n border-color: var(--critical);\n color: var(--critical);\n }\n .strct-btn--critical:hover {\n background: var(--critical-bg);\n }\n\n /* Neutral outline (explicit). */\n .strct-btn--outline {\n border-color: var(--b3);\n color: var(--t1);\n }\n .strct-btn--outline:hover {\n background: var(--bg-3);\n }\n\n /* Borderless text button. */\n .strct-btn--flat {\n border-color: transparent;\n color: var(--t2);\n }\n .strct-btn--flat:hover {\n background: var(--bg-3);\n color: var(--t1);\n }\n\n /* Opt-in filled call to action. */\n .strct-btn--solid {\n background: var(--bg-3);\n border-color: transparent;\n color: var(--t1);\n }\n .strct-btn--solid:hover {\n background: var(--bg-h);\n }\n .strct-btn--solid.strct-btn--primary {\n background: var(--acc);\n color: #fff;\n }\n .strct-btn--solid.strct-btn--primary:hover {\n background: var(--acc);\n filter: brightness(1.08);\n }\n .strct-btn--solid.strct-btn--critical {\n background: var(--critical);\n color: #fff;\n }\n .strct-btn--solid.strct-btn--critical:hover {\n background: var(--critical);\n filter: brightness(1.08);\n }\n\n .strct-btn--sm {\n padding: var(--space-1) var(--space-3);\n font-size: 12px;\n border-radius: var(--radius-sm);\n }\n .strct-btn--mini {\n padding: 2px var(--space-2);\n font-size: 11px;\n border-radius: var(--radius-sm);\n }\n .strct-btn--block {\n display: flex;\n width: 100%;\n }\n\n /* Square icon-only button. */\n .strct-btn--icon {\n padding: var(--space-2);\n }\n .strct-btn--icon.strct-btn--sm {\n padding: var(--space-1);\n }\n .strct-btn--icon.strct-btn--mini {\n padding: 3px;\n }\n `,\n ],\n})\nexport class StrctButton {\n /** Visual variant. */\n readonly variant = input<StrctButtonVariant>('neutral');\n /** Size variant. */\n readonly size = input<StrctButtonSize>('md');\n /** Opt in to a filled surface (use sparingly, for the primary action). */\n readonly solid = input(false, { transform: booleanAttribute });\n /** Expand to full width. */\n readonly block = input(false, { transform: booleanAttribute });\n /** Square padding for a single-icon button. */\n readonly iconOnly = input(false, { transform: booleanAttribute });\n}\n\n/** Segments adjacent buttons into a single joined control. */\n@Component({\n selector: 'strct-button-group',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n template: `<ng-content />`,\n host: { class: 'strct-btn-group', role: 'group' },\n styles: [\n `\n .strct-btn-group {\n display: inline-flex;\n }\n .strct-btn-group > .strct-btn {\n border-radius: 0;\n }\n .strct-btn-group > .strct-btn:not(:first-child) {\n margin-left: -1px;\n }\n .strct-btn-group > .strct-btn:first-child {\n border-top-left-radius: var(--radius-md);\n border-bottom-left-radius: var(--radius-md);\n }\n .strct-btn-group > .strct-btn:last-child {\n border-top-right-radius: var(--radius-md);\n border-bottom-right-radius: var(--radius-md);\n }\n .strct-btn-group > .strct-btn:hover,\n .strct-btn-group > .strct-btn:focus-visible {\n position: relative;\n z-index: 1;\n }\n `,\n ],\n})\nexport class StrctButtonGroup {}\n","import {\n ChangeDetectionStrategy,\n Component,\n ViewEncapsulation,\n booleanAttribute,\n input,\n} from '@angular/core';\n\n/** Badge color variants. */\nexport type StrctBadgeStatus = 'neutral' | 'accent' | 'success' | 'warning' | 'critical';\n\n/** Small inline status pill: `<strct-badge status=\"success\">Active</strct-badge>`. */\n@Component({\n selector: 'strct-badge',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n template: `<ng-content />`,\n host: {\n class: 'strct-badge',\n '[class.strct-badge--accent]': \"status() === 'accent'\",\n '[class.strct-badge--success]': \"status() === 'success'\",\n '[class.strct-badge--warninging]': \"status() === 'warning'\",\n '[class.strct-badge--critical]': \"status() === 'critical'\",\n '[class.strct-badge--solid]': 'solid()',\n },\n styles: [\n `\n /* Restrained: outlined on a neutral surface, color carried by text + a thin border. */\n .strct-badge {\n display: inline-flex;\n align-items: center;\n gap: 4px;\n font-size: 11px;\n font-weight: 600;\n line-height: 1;\n letter-spacing: 0.2px;\n padding: 3px 7px 3px 9px;\n border-radius: var(--radius-sm);\n white-space: nowrap;\n color: var(--t2);\n background: transparent;\n border: 1px solid var(--b3);\n /* Thicker left rail gives badges a distinct \"tag\" identity vs. buttons. */\n border-left-width: 3px;\n }\n .strct-badge--accent {\n color: var(--acc);\n border-color: var(--acc30);\n }\n .strct-badge--success {\n color: var(--success);\n border-color: var(--success);\n }\n .strct-badge--warninging {\n color: var(--warning);\n border-color: var(--warning);\n }\n .strct-badge--critical {\n color: var(--critical);\n border-color: var(--critical);\n }\n\n /* Opt-in filled badge — uniform edges (no left rail). */\n .strct-badge--solid {\n color: var(--t1);\n background: var(--bg-a);\n border-color: transparent;\n border-left-width: 1px;\n padding-left: 7px;\n }\n .strct-badge--solid.strct-badge--accent {\n background: var(--acc);\n color: #fff;\n }\n .strct-badge--solid.strct-badge--success {\n background: var(--success);\n color: #fff;\n }\n .strct-badge--solid.strct-badge--warninging {\n background: var(--warning);\n color: #fff;\n }\n .strct-badge--solid.strct-badge--critical {\n background: var(--critical);\n color: #fff;\n }\n `,\n ],\n})\nexport class StrctBadge {\n /** Visual status color. */\n readonly status = input<StrctBadgeStatus>('neutral');\n /** Opt-in filled style instead of the default outlined style. */\n readonly solid = input(false, { transform: booleanAttribute });\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n ViewEncapsulation,\n booleanAttribute,\n input,\n output,\n} from '@angular/core';\nimport { StrctIcon } from '../icon/icon';\n\n/** Tag color variants. */\nexport type StrctTagStatus = 'neutral' | 'accent' | 'success' | 'warning' | 'critical';\n\n/**\n * Compact, optionally removable chip.\n * <strct-tag status=\"accent\" removable (removed)=\"drop()\">Frontend</strct-tag>\n */\n@Component({\n selector: 'strct-tag',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n imports: [StrctIcon],\n template: `\n <span class=\"strct-tag__text\"><ng-content /></span>\n @if (removable()) {\n <button type=\"button\" class=\"strct-tag__remove\" aria-label=\"Remove\" (click)=\"removed.emit()\">\n <strct-icon name=\"close\" [size]=\"11\" [strokeWidth]=\"1.6\" />\n </button>\n }\n `,\n host: {\n class: 'strct-tag',\n '[class.strct-tag--accent]': \"status() === 'accent'\",\n '[class.strct-tag--success]': \"status() === 'success'\",\n '[class.strct-tag--warning]': \"status() === 'warning'\",\n '[class.strct-tag--critical]': \"status() === 'critical'\",\n },\n styles: [\n `\n .strct-tag {\n display: inline-flex;\n align-items: center;\n gap: 5px;\n padding: 3px 4px 3px 9px;\n border-radius: 4px;\n font-size: 12px;\n font-weight: 500;\n color: var(--t1);\n background: var(--bg-3);\n border: 1px solid var(--b2);\n }\n .strct-tag:not(:has(.strct-tag__remove)) {\n padding-right: 9px;\n }\n .strct-tag--accent {\n color: var(--acc);\n border-color: var(--acc30);\n background: var(--acc-s);\n }\n .strct-tag--success {\n color: var(--success);\n border-color: var(--success);\n background: transparent;\n }\n .strct-tag--warning {\n color: var(--warning);\n border-color: var(--warning);\n background: transparent;\n }\n .strct-tag--critical {\n color: var(--critical);\n border-color: var(--critical);\n background: transparent;\n }\n .strct-tag__remove {\n display: inline-flex;\n padding: 2px;\n border: 0;\n border-radius: 3px;\n background: transparent;\n color: currentColor;\n opacity: 0.65;\n cursor: pointer;\n }\n .strct-tag__remove:hover {\n opacity: 1;\n background: var(--dn);\n }\n `,\n ],\n})\nexport class StrctTag {\n /** Visual status color. */\n readonly status = input<StrctTagStatus>('neutral');\n /** Show a remove button. */\n readonly removable = input(false, { transform: booleanAttribute });\n /** Emitted when the user clicks the remove button. */\n readonly removed = output<void>();\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n ViewEncapsulation,\n computed,\n input,\n} from '@angular/core';\n\n/** Avatar size variants. */\nexport type StrctAvatarSize = 'sm' | 'md' | 'lg';\n/** Avatar presence status variants. */\nexport type StrctAvatarStatus = 'none' | 'online' | 'busy' | 'offline';\n\n/**\n * Circular avatar: an image when `src` is set, otherwise initials from `name`.\n * <strct-avatar name=\"Ada Lovelace\" status=\"online\" />\n */\n@Component({\n selector: 'strct-avatar',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n template: `\n @if (src()) {\n <img class=\"strct-av__img\" [src]=\"src()\" [alt]=\"name()\" />\n } @else {\n <span class=\"strct-av__initials\">{{ initials() }}</span>\n }\n @if (status() !== 'none') {\n <span class=\"strct-av__status\"></span>\n }\n `,\n host: {\n class: 'strct-av',\n '[class.strct-av--sm]': \"size() === 'sm'\",\n '[class.strct-av--lg]': \"size() === 'lg'\",\n '[class.strct-av--online]': \"status() === 'online'\",\n '[class.strct-av--busy]': \"status() === 'busy'\",\n '[class.strct-av--offline]': \"status() === 'offline'\",\n '[attr.title]': 'name() || null',\n },\n styles: [\n `\n .strct-av {\n position: relative;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 36px;\n height: 36px;\n border-radius: 50%;\n flex-shrink: 0;\n background: var(--bg-3);\n color: var(--t1);\n overflow: visible;\n font-size: 13px;\n font-weight: 600;\n user-select: none;\n border: 1px solid var(--b2);\n }\n .strct-av--sm {\n width: 26px;\n height: 26px;\n font-size: 11px;\n }\n .strct-av--lg {\n width: 48px;\n height: 48px;\n font-size: 17px;\n }\n .strct-av__img {\n width: 100%;\n height: 100%;\n border-radius: 50%;\n object-fit: cover;\n }\n .strct-av__initials {\n line-height: 1;\n }\n .strct-av__status {\n position: absolute;\n right: -1px;\n bottom: -1px;\n width: 30%;\n height: 30%;\n min-width: 8px;\n min-height: 8px;\n border-radius: 50%;\n border: 2px solid var(--bg-1);\n background: var(--t3);\n }\n .strct-av--online .strct-av__status {\n background: var(--success);\n }\n .strct-av--busy .strct-av__status {\n background: var(--critical);\n }\n .strct-av--offline .strct-av__status {\n background: var(--t3);\n }\n `,\n ],\n})\nexport class StrctAvatar {\n /** Image URL. */\n readonly src = input('');\n /** Display name (used for initials when src is absent). */\n readonly name = input('');\n /** Size variant. */\n readonly size = input<StrctAvatarSize>('md');\n /** Visual status color. */\n readonly status = input<StrctAvatarStatus>('none');\n\n protected readonly initials = computed(() => {\n const parts = this.name().trim().split(/\\s+/).filter(Boolean);\n if (!parts.length) return '?';\n if (parts.length === 1) return parts[0].slice(0, 2).toUpperCase();\n return (parts[0][0] + parts[parts.length - 1][0]).toUpperCase();\n });\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n ViewEncapsulation,\n computed,\n input,\n} from '@angular/core';\n\n/** Progress bar color variants. */\nexport type StrctProgressStatus = 'accent' | 'success' | 'warning' | 'critical';\n\n/** Horizontal value/usage bar. `<strct-progress [value]=\"72\" status=\"warning\" />`. */\n@Component({\n selector: 'strct-progress',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n template: `\n <div\n class=\"strct-progress__track\"\n role=\"progressbar\"\n [attr.aria-valuenow]=\"clamped()\"\n aria-valuemin=\"0\"\n aria-valuemax=\"100\"\n >\n <div class=\"strct-progress__fill\" [style.width.%]=\"clamped()\"></div>\n </div>\n `,\n host: {\n class: 'strct-progress',\n '[class.strct-progress--success]': \"status() === 'success'\",\n '[class.strct-progress--warning]': \"status() === 'warning'\",\n '[class.strct-progress--critical]': \"status() === 'critical'\",\n },\n styles: [\n `\n .strct-progress {\n display: block;\n }\n .strct-progress__track {\n height: 6px;\n border-radius: 4px;\n background: var(--bg-3);\n overflow: hidden;\n }\n .strct-progress__fill {\n height: 100%;\n border-radius: 4px;\n background: var(--acc);\n transition: width 0.3s ease;\n }\n .strct-progress--success .strct-progress__fill {\n background: var(--success);\n }\n .strct-progress--warning .strct-progress__fill {\n background: var(--warning);\n }\n .strct-progress--critical .strct-progress__fill {\n background: var(--critical);\n }\n `,\n ],\n})\nexport class StrctProgress {\n /** Current value. */\n readonly value = input(0);\n /** Visual status color. */\n readonly status = input<StrctProgressStatus>('accent');\n\n protected readonly clamped = computed(() => Math.max(0, Math.min(100, this.value())));\n}\n","import { ChangeDetectionStrategy, Component, ViewEncapsulation, input } from '@angular/core';\n\n/** Spinner size variants. */\nexport type StrctSpinnerSize = 'sm' | 'md' | 'lg';\n\n/** Indeterminate loading ring. `<strct-spinner size=\"sm\" />`. */\n@Component({\n selector: 'strct-spinner',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n template: '',\n host: {\n class: 'strct-spinner',\n role: 'progressbar',\n 'aria-label': 'Loading',\n '[class.strct-spinner--sm]': \"size() === 'sm'\",\n '[class.strct-spinner--lg]': \"size() === 'lg'\",\n },\n styles: [\n `\n .strct-spinner {\n display: inline-block;\n width: 22px;\n height: 22px;\n border: 2.5px solid var(--b3);\n border-top-color: var(--acc);\n border-radius: 50%;\n animation: strct-spin 0.7s linear infinite;\n }\n .strct-spinner--sm {\n width: 14px;\n height: 14px;\n border-width: 2px;\n }\n .strct-spinner--lg {\n width: 34px;\n height: 34px;\n border-width: 3px;\n }\n @keyframes strct-spin {\n to {\n transform: rotate(360deg);\n }\n }\n @media (prefers-reduced-motion: reduce) {\n .strct-spinner {\n animation-duration: 1.6s;\n }\n }\n `,\n ],\n})\nexport class StrctSpinner {\n /** Size variant. */\n readonly size = input<StrctSpinnerSize>('md');\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n ViewEncapsulation,\n booleanAttribute,\n input,\n} from '@angular/core';\n\n/**\n * Shimmering loading placeholder.\n * <strct-skeleton width=\"60%\" height=\"14px\" />\n * <strct-skeleton circle width=\"40px\" height=\"40px\" />\n */\n@Component({\n selector: 'strct-skeleton',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n template: '',\n host: {\n class: 'strct-skel',\n role: 'presentation',\n 'aria-hidden': 'true',\n '[class.strct-skel--circle]': 'circle()',\n '[style.width]': 'width()',\n '[style.height]': 'height()',\n },\n styles: [\n `\n .strct-skel {\n display: block;\n border-radius: 5px;\n background: linear-gradient(90deg, var(--bg-3) 25%, var(--bg-h) 37%, var(--bg-3) 63%);\n background-size: 400% 100%;\n animation: strct-skel-shimmer 1.4s ease infinite;\n }\n .strct-skel--circle {\n border-radius: 50%;\n }\n @keyframes strct-skel-shimmer {\n 0% {\n background-position: 100% 50%;\n }\n 100% {\n background-position: 0 50%;\n }\n }\n @media (prefers-reduced-motion: reduce) {\n .strct-skel {\n animation: none;\n }\n }\n `,\n ],\n})\nexport class StrctSkeleton {\n /** Width (CSS length). */\n readonly width = input('100%');\n /** Height in pixels. */\n readonly height = input('14px');\n /** Circle. */\n readonly circle = input(false, { transform: booleanAttribute });\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n ViewEncapsulation,\n ElementRef,\n HostListener,\n inject,\n input,\n signal,\n} from '@angular/core';\nimport { StrctIcon } from '../icon/icon';\n\n/** Direction the speed-dial actions expand. */\nexport type StrctSpeedDialDirection = 'up' | 'down' | 'left' | 'right';\n\n/**\n * Floating action button that fans out to reveal actions. Project icon buttons\n * (optionally with `strctTooltip`) as the actions.\n * <strct-speed-dial icon=\"ellipsis\" direction=\"up\">\n * <button strct-button iconOnly strctTooltip=\"Snapshot\"><strct-icon name=\"snapshot\" /></button>\n * <button strct-button iconOnly strctTooltip=\"Restart\"><strct-icon name=\"sync\" /></button>\n * </strct-speed-dial>\n */\n@Component({\n selector: 'strct-speed-dial',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n imports: [StrctIcon],\n template: `\n <div class=\"strct-sd\" [class]=\"'strct-sd--' + direction()\">\n @if (open()) {\n <div class=\"strct-sd__actions\"><ng-content /></div>\n }\n <button\n type=\"button\"\n class=\"strct-sd__fab\"\n [class.strct-sd__fab--open]=\"open()\"\n [attr.aria-expanded]=\"open()\"\n aria-haspopup=\"menu\"\n (click)=\"toggle()\"\n >\n <strct-icon [name]=\"icon()\" [size]=\"18\" [strokeWidth]=\"1.5\" />\n </button>\n </div>\n `,\n host: { class: 'strct-sd-host' },\n styles: [\n `\n .strct-sd-host {\n display: inline-block;\n }\n .strct-sd {\n position: relative;\n display: inline-flex;\n }\n .strct-sd__fab {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 44px;\n height: 44px;\n border-radius: 50%;\n cursor: pointer;\n color: #fff;\n background: var(--acc);\n border: 0;\n box-shadow: var(--shh);\n transition:\n filter 0.14s ease,\n transform 0.16s ease;\n }\n .strct-sd__fab:hover {\n filter: brightness(1.08);\n }\n .strct-sd__fab--open {\n transform: rotate(45deg);\n }\n .strct-sd__actions {\n position: absolute;\n display: flex;\n gap: 10px;\n z-index: 10;\n animation: strct-sd-in 0.14s ease;\n }\n /* The projected icon buttons get a round, raised look. */\n .strct-sd__actions .strct-btn {\n border-radius: 50%;\n box-shadow: var(--sh);\n background: var(--bg-1);\n }\n .strct-sd--up .strct-sd__actions {\n flex-direction: column;\n bottom: calc(100% + 12px);\n left: 50%;\n transform: translateX(-50%);\n }\n .strct-sd--down .strct-sd__actions {\n flex-direction: column;\n top: calc(100% + 12px);\n left: 50%;\n transform: translateX(-50%);\n }\n .strct-sd--left .strct-sd__actions {\n flex-direction: row;\n right: calc(100% + 12px);\n top: 50%;\n transform: translateY(-50%);\n }\n .strct-sd--right .strct-sd__actions {\n flex-direction: row;\n left: calc(100% + 12px);\n top: 50%;\n transform: translateY(-50%);\n }\n @keyframes strct-sd-in {\n from {\n opacity: 0;\n }\n }\n `,\n ],\n})\nexport class StrctSpeedDial {\n private readonly host = inject(ElementRef<HTMLElement>);\n /** Icon name. */\n readonly icon = input('ellipsis');\n /** Direction the actions fan out. */\n readonly direction = input<StrctSpeedDialDirection>('up');\n readonly open = signal(false);\n\n toggle(): void {\n this.open.update((v) => !v);\n }\n\n @HostListener('document:click', ['$event'])\n protected onDocClick(event: MouseEvent): void {\n if (this.open() && !this.host.nativeElement.contains(event.target as Node)) {\n this.open.set(false);\n }\n }\n\n @HostListener('document:keydown.escape')\n protected onEscape(): void {\n this.open.set(false);\n }\n}\n","import { ChangeDetectionStrategy, Component } from '@angular/core';\n\n/**\n * Surface container. Compose with the header / block / footer pieces:\n * <strct-card>\n * <strct-card-header>Title</strct-card-header>\n * <strct-card-block>...</strct-card-block>\n * <strct-card-footer><button strct-button>OK</button></strct-card-footer>\n * </strct-card>\n */\n@Component({\n selector: 'strct-card',\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `<ng-content />`,\n styles: [\n `\n :host {\n display: block;\n background: var(--bg-1);\n border: 1px solid var(--b2);\n border-radius: var(--radius-lg);\n box-shadow: var(--sh);\n overflow: hidden;\n }\n `,\n ],\n})\nexport class StrctCard {}\n\n/** Header section of a {@link StrctCard}. */\n@Component({\n selector: 'strct-card-header',\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `<ng-content />`,\n styles: [\n `\n :host {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: var(--space-2);\n padding: var(--space-3) var(--space-4);\n border-bottom: 1px solid var(--b1);\n font-size: 13px;\n font-weight: 600;\n color: var(--t1);\n }\n `,\n ],\n})\nexport class StrctCardHeader {}\n\n/** Body section of a {@link StrctCard}. */\n@Component({\n selector: 'strct-card-block',\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `<ng-content />`,\n styles: [\n `\n :host {\n display: block;\n padding: var(--space-4);\n color: var(--t2);\n font-size: 13px;\n }\n `,\n ],\n})\nexport class StrctCardBlock {}\n\n/** Footer section of a {@link StrctCard}. */\n@Component({\n selector: 'strct-card-footer',\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `<ng-content />`,\n styles: [\n `\n :host {\n display: flex;\n align-items: center;\n justify-content: flex-end;\n gap: var(--space-2);\n padding: var(--space-3) var(--space-4);\n border-top: 1px solid var(--b1);\n background: var(--bg-2);\n }\n `,\n ],\n})\nexport class StrctCardFooter {}\n","import { ChangeDetectionStrategy, Component, ViewEncapsulation, input, model } from '@angular/core';\nimport { StrctIcon } from '../icon/icon';\n\n/** Vertical container for `<strct-accordion-panel>` items. */\n@Component({\n selector: 'strct-accordion',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n template: `<ng-content />`,\n host: { class: 'strct-accordion' },\n styles: [\n `\n .strct-accordion {\n display: flex;\n flex-direction: column;\n gap: 6px;\n }\n `,\n ],\n})\nexport class StrctAccordion {}\n\n/** Collapsible panel with a header. `expanded` is two-way bindable. */\n@Component({\n selector: 'strct-accordion-panel',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n imports: [StrctIcon],\n template: `\n <button\n type=\"button\"\n class=\"strct-acc__head\"\n [attr.aria-expanded]=\"expanded()\"\n (click)=\"toggle()\"\n >\n <span class=\"strct-acc__chevron\" [class.strct-acc__chevron--open]=\"expanded()\">\n <strct-icon name=\"chevronRight\" [size]=\"13\" [strokeWidth]=\"1.7\" />\n </span>\n <span class=\"strct-acc__title\">{{ heading() }}</span>\n </button>\n @if (expanded()) {\n <div class=\"strct-acc__body\"><ng-content /></div>\n }\n `,\n host: { class: 'strct-acc' },\n styles: [\n `\n .strct-acc {\n display: block;\n background: var(--bg-1);\n border: 1px solid var(--b2);\n border-radius: 7px;\n overflow: hidden;\n }\n .strct-acc__head {\n display: flex;\n align-items: center;\n gap: 9px;\n width: 100%;\n padding: 11px 14px;\n border: 0;\n background: transparent;\n cursor: pointer;\n font-family: var(--font);\n font-size: 13px;\n font-weight: 500;\n color: var(--t1);\n text-align: left;\n }\n .strct-acc__head:hover {\n background: var(--bg-3);\n }\n .strct-acc__chevron {\n display: inline-flex;\n color: var(--t3);\n transition: transform 0.16s ease;\n }\n .strct-acc__chevron--open {\n transform: rotate(90deg);\n color: var(--acc);\n }\n .strct-acc__title {\n flex: 1;\n }\n .strct-acc__body {\n padding: 4px 14px 14px 32px;\n color: var(--t2);\n font-size: 13px;\n border-top: 1px solid var(--b1);\n }\n `,\n ],\n})\nexport class StrctAccordionPanel {\n /** Panel heading. */\n readonly heading = input.required<string>();\n /** Whether the panel is open (two-way). */\n readonly expanded = model(false);\n\n toggle(): void {\n this.expanded.update((v) => !v);\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n ViewEncapsulation,\n booleanAttribute,\n contentChildren,\n effect,\n input,\n signal,\n} from '@angular/core';\n\n/** A single tab. Place inside `<strct-tabs>`; `label` names its button. */\n@Component({\n selector: 'strct-tab',\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `@if (active()) {\n <ng-content />\n }`,\n host: { class: 'strct-tab', role: 'tabpanel', '[hidden]': '!active()' },\n})\nexport class StrctTab {\n /** Label text. */\n readonly label = input.required<string>();\n /** Static disable flag. */\n readonly disabled = input(false, { transform: booleanAttribute });\n private readonly _active = signal(false);\n readonly active = this._active.asReadonly();\n\n /** @internal called by the parent tab group */\n setActive(value: boolean): void {\n this._active.set(value);\n }\n}\n\n/** Tab group. Wraps `<strct-tab>` children and renders the tab bar. */\n@Component({\n selector: 'strct-tabs',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n template: `\n <div\n class=\"strct-tabs__bar\"\n role=\"tablist\"\n tabindex=\"0\"\n #bar\n (keydown)=\"onKeydown($event, bar)\"\n >\n @for (tab of tabs(); track tab; let i = $index) {\n <button\n type=\"button\"\n role=\"tab\"\n class=\"strct-tabs__btn\"\n [class.strct-tabs__btn--active]=\"i === selectedIndex()\"\n [attr.aria-selected]=\"i === selectedIndex()\"\n [attr.tabindex]=\"i === selectedIndex() ? 0 : -1\"\n [disabled]=\"tab.disabled()\"\n (click)=\"select(i)\"\n >\n {{ tab.label() }}\n </button>\n }\n </div>\n <div class=\"strct-tabs__panels\"><ng-content /></div>\n `,\n host: { class: 'strct-tabs' },\n styles: [\n `\n .strct-tabs {\n display: block;\n }\n .strct-tabs__bar {\n display: flex;\n gap: 2px;\n border-bottom: 1px solid var(--b2);\n overflow-x: auto;\n white-space: nowrap;\n scrollbar-width: none;\n }\n .strct-tabs__btn {\n appearance: none;\n background: transparent;\n border: 0;\n cursor: pointer;\n font-family: var(--font);\n font-size: 13px;\n font-weight: 500;\n color: var(--t2);\n padding: 9px 14px;\n border-bottom: 2px solid transparent;\n margin-bottom: -1px;\n transition:\n color 0.14s ease,\n border-color 0.14s ease;\n }\n .strct-tabs__btn:hover {\n color: var(--t1);\n }\n .strct-tabs__btn--active {\n color: var(--acc);\n border-bottom-color: var(--acc);\n }\n .strct-tabs__btn:disabled {\n color: var(--t4);\n cursor: not-allowed;\n }\n .strct-tabs__panels {\n padding-top: 16px;\n }\n `,\n ],\n})\nexport class StrctTabs {\n readonly tabs = contentChildren(StrctTab);\n readonly selectedIndex = signal(0);\n\n constructor() {\n // Keep each child panel's visibility in sync with the selected index.\n effect(() => {\n const idx = this.selectedIndex();\n this.tabs().forEach((tab, i) => tab.setActive(i === idx));\n });\n }\n\n select(index: number): void {\n if (!this.tabs()[index]?.disabled()) this.selectedIndex.set(index);\n }\n\n onKeydown(event: KeyboardEvent, bar: HTMLElement): void {\n const key = event.key;\n if (!['ArrowRight', 'ArrowLeft', 'Home', 'End'].includes(key)) return;\n event.preventDefault();\n const count = this.tabs().length;\n if (!count) return;\n let idx = this.selectedIndex();\n if (key === 'Home') {\n idx = 0;\n while (idx < count && this.tabs()[idx].disabled()) idx++;\n } else if (key === 'End') {\n idx = count - 1;\n while (idx >= 0 && this.tabs()[idx].disabled()) idx--;\n } else {\n const step = key === 'ArrowRight' ? 1 : -1;\n for (let n = 0; n < count; n++) {\n idx = (idx + step + count) % count;\n if (!this.tabs()[idx].disabled()) break;\n }\n }\n if (idx < 0 || idx >= count || this.tabs()[idx]?.disabled()) return;\n this.selectedIndex.set(idx);\n const buttons = bar.querySelectorAll<HTMLElement>('button.strct-tabs__btn');\n buttons[idx]?.focus();\n }\n}\n","import { DOCUMENT } from '@angular/common';\nimport {\n ApplicationRef,\n ChangeDetectionStrategy,\n Component,\n ComponentRef,\n Directive,\n ElementRef,\n EnvironmentInjector,\n HostListener,\n NgZone,\n OnDestroy,\n ViewEncapsulation,\n afterNextRender,\n booleanAttribute,\n computed,\n createComponent,\n inject,\n input,\n output,\n signal,\n} from '@angular/core';\nimport { StrctIcon } from '../icon/icon';\n\n/** A single entry in a data-driven menu. */\nexport interface StrctMenuItem {\n /** Entry text. Optional — omit it for a `divider`, where a label is meaningless. */\n label?: string;\n icon?: string;\n /** Destructive styling. */\n critical?: boolean;\n disabled?: boolean;\n /** Render a separator instead of an entry (label is ignored). */\n divider?: boolean;\n /** Nested submenu. */\n children?: StrctMenuItem[];\n /** Invoked on selection, with the trigger's `strctContextMenuData`. */\n action?: (data?: unknown) => void;\n /** Arbitrary payload. */\n data?: unknown;\n}\n\n/**\n * Floating menu panel — portaled into `<body>` (so it escapes overflow /\n * transform clipping), positioned by its real measured size, with full keyboard\n * navigation and recursive submenus. Usually created by `[strctContextMenu]`,\n * but can be embedded directly with `submenu`.\n */\n@Component({\n selector: 'strct-menu-panel',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n imports: [StrctIcon],\n template: `\n <div class=\"strct-menu\" role=\"menu\" tabindex=\"-1\" (keydown)=\"onKeydown($event)\">\n @for (item of items(); track $index; let i = $index) {\n @if (item.divider) {\n <div class=\"strct-menu__sep\" role=\"separator\"></div>\n } @else {\n <div class=\"strct-menu__wrap\" (mouseenter)=\"onHover(i)\" (mouseleave)=\"onLeave(i)\">\n <button\n type=\"button\"\n class=\"strct-menu__item\"\n [attr.data-idx]=\"i\"\n [class.strct-menu__item--critical]=\"item.critical\"\n [class.strct-menu__item--active]=\"i === activeIndex()\"\n [disabled]=\"item.disabled\"\n role=\"menuitem\"\n [attr.aria-haspopup]=\"item.children?.length ? 'menu' : null\"\n [attr.aria-expanded]=\"item.children?.length ? openSubIndex() === i : null\"\n [attr.tabindex]=\"i === activeIndex() ? 0 : -1\"\n (click)=\"onItemClick(item, i, $event)\"\n >\n @if (item.icon) {\n <strct-icon\n class=\"strct-menu__icon\"\n [name]=\"item.icon\"\n [size]=\"14\"\n [strokeWidth]=\"1.3\"\n />\n } @else {\n <span class=\"strct-menu__icon-spacer\" aria-hidden=\"true\"></span>\n }\n <span class=\"strct-menu__label\">{{ item.label }}</span>\n @if (item.children?.length) {\n <strct-icon\n class=\"strct-menu__arrow\"\n name=\"chevronRight\"\n [size]=\"12\"\n [strokeWidth]=\"1.6\"\n />\n }\n </button>\n @if (openSubIndex() === i && item.children?.length) {\n <strct-menu-panel\n submenu\n class=\"strct-menu__subpanel\"\n [class.strct-menu__subpanel--flip]=\"flipLeft()\"\n [items]=\"item.children!\"\n [data]=\"data()\"\n (select)=\"select.emit($event)\"\n (close)=\"close.emit()\"\n (back)=\"closeSub(); focusItem(i)\"\n />\n }\n </div>\n }\n }\n </div>\n `,\n host: {\n class: 'strct-menu-host',\n '[style.position]': \"submenu() ? null : 'fixed'\",\n '[style.left.px]': 'submenu() ? null : posX()',\n '[style.top.px]': 'submenu() ? null : posY()',\n '[style.zIndex]': 'submenu() ? null : 1100',\n },\n styles: [\n `\n .strct-menu-host {\n display: block;\n }\n .strct-menu {\n min-width: 180px;\n padding: 4px;\n background: var(--bg-1);\n border: 1px solid var(--b2);\n border-radius: 7px;\n box-shadow: var(--shh);\n animation: strct-menu-in 0.1s ease;\n }\n .strct-menu:focus {\n outline: none;\n }\n .strct-menu__wrap {\n position: relative;\n }\n .strct-menu__item {\n display: flex;\n align-items: center;\n gap: 8px;\n width: 100%;\n padding: 7px 8px 7px 10px;\n border: 0;\n border-radius: 5px;\n cursor: pointer;\n background: transparent;\n color: var(--t1);\n font-size: 13px;\n font-family: var(--font);\n text-align: left;\n }\n .strct-menu__item:hover:not(:disabled),\n .strct-menu__item--active:not(:disabled) {\n background: var(--bg-3);\n }\n .strct-menu__item:focus-visible {\n outline: none;\n background: var(--bg-3);\n }\n .strct-menu__item--critical {\n color: var(--critical);\n }\n .strct-menu__item--critical:hover:not(:disabled),\n .strct-menu__item--critical.strct-menu__item--active:not(:disabled) {\n background: var(--critical-bg);\n }\n .strct-menu__item:disabled {\n opacity: 0.45;\n cursor: not-allowed;\n }\n .strct-menu__icon {\n color: var(--t2);\n flex-shrink: 0;\n }\n .strct-menu__item--critical .strct-menu__icon {\n color: var(--critical);\n }\n .strct-menu__icon-spacer {\n width: 14px;\n flex-shrink: 0;\n }\n .strct-menu__label {\n flex: 1;\n white-space: nowrap;\n }\n .strct-menu__arrow {\n color: var(--t3);\n flex-shrink: 0;\n }\n .strct-menu__sep {\n height: 1px;\n margin: 4px 6px;\n background: var(--b1);\n }\n\n .strct-menu__subpanel {\n position: absolute;\n top: -5px;\n left: 100%;\n margin-left: 2px;\n z-index: 1;\n }\n .strct-menu__subpanel--flip {\n left: auto;\n right: 100%;\n margin-left: 0;\n margin-right: 2px;\n }\n @keyframes strct-menu-in {\n from {\n opacity: 0;\n transform: scale(0.97);\n }\n }\n `,\n ],\n})\nexport class StrctMenuPanel {\n private readonly host: ElementRef<HTMLElement> = inject(ElementRef);\n\n /** Menu items to display. */\n readonly items = input.required<StrctMenuItem[]>();\n /** Arbitrary payload passed to item actions. */\n readonly data = input<unknown>(undefined);\n /** Horizontal position in pixels. */\n readonly x = input(0);\n /** Vertical position in pixels. */\n readonly y = input(0);\n /** Render as a nested submenu panel. */\n readonly submenu = input(false, { transform: booleanAttribute });\n\n /** Emitted when an item is selected. */\n readonly select = output<StrctMenuItem>();\n /** Emitted when the menu requests closing. */\n readonly close = output<void>();\n /** ArrowLeft inside a submenu — asks the parent to close it. */\n readonly back = output<void>();\n\n protected readonly posX = signal(0);\n protected readonly posY = signal(0);\n protected readonly flipLeft = signal(false);\n protected readonly activeIndex = signal(0);\n protected readonly openSubIndex = signal<number | null>(null);\n\n private readonly navIndices = computed(() =>\n this.items()\n .map((it, i) => (it.divider ? -1 : i))\n .filter((i) => i >= 0),\n );\n\n constructor() {\n this.posX.set(this.x());\n this.posY.set(this.y());\n afterNextRender(() => {\n this.activeIndex.set(this.navIndices()[0] ?? 0);\n if (!this.submenu()) this.clampToViewport();\n this.focusItem(this.activeIndex());\n });\n }\n\n private clampToViewport(): void {\n const host = this.host.nativeElement;\n const w = host.offsetWidth;\n const h = host.offsetHeight;\n const vw = window.innerWidth;\n const vh = window.innerHeight;\n const m = 6;\n let nx = this.x();\n let ny = this.y();\n if (nx + w > vw - m) nx = Math.max(m, Math.min(this.x() - w, vw - w - m));\n if (ny + h > vh - m) ny = Math.max(m, vh - h - m);\n this.posX.set(nx);\n this.posY.set(ny);\n // Submenus of a panel near the right edge open to the left.\n this.flipLeft.set(nx + w > vw - 220);\n }\n\n protected focusItem(i: number): void {\n this.activeIndex.set(i);\n this.host.nativeElement\n .querySelector<HTMLElement>(`.strct-menu__item[data-idx=\"${i}\"]`)\n ?.focus();\n }\n\n private move(dir: 1 | -1): void {\n const nav = this.navIndices();\n if (!nav.length) return;\n const pos = nav.indexOf(this.activeIndex());\n const next = nav[(pos + dir + nav.length) % nav.length];\n this.openSubIndex.set(null);\n this.focusItem(next);\n }\n\n protected onHover(i: number): void {\n this.activeIndex.set(i);\n const it = this.items()[i];\n this.openSubIndex.set(it?.children?.length ? i : null);\n }\n\n protected onLeave(i: number): void {\n if (this.openSubIndex() === i) this.openSubIndex.set(null);\n }\n\n protected onItemClick(item: StrctMenuItem, i: number, event: Event): void {\n event.stopPropagation();\n if (item.disabled) return;\n if (item.children?.length) {\n this.openSubIndex.set(this.openSubIndex() === i ? null : i);\n this.focusItem(i);\n } else {\n this.select.emit(item);\n }\n }\n\n protected closeSub(): void {\n this.openSubIndex.set(null);\n }\n\n protected onKeydown(event: KeyboardEvent): void {\n const key = event.key;\n const item = this.items()[this.activeIndex()];\n switch (key) {\n case 'ArrowDown':\n event.preventDefault();\n event.stopPropagation();\n this.move(1);\n break;\n case 'ArrowUp':\n event.preventDefault();\n event.stopPropagation();\n this.move(-1);\n break;\n case 'Home':\n event.preventDefault();\n event.stopPropagation();\n this.focusItem(this.navIndices()[0] ?? 0);\n break;\n case 'End':\n event.preventDefault();\n event.stopPropagation();\n this.focusItem(this.navIndices().at(-1) ?? 0);\n break;\n case 'ArrowRight':\n if (item?.children?.length) {\n event.preventDefault();\n event.stopPropagation();\n this.openSubIndex.set(this.activeIndex());\n }\n break;\n case 'ArrowLeft':\n event.preventDefault();\n event.stopPropagation();\n if (this.openSubIndex() != null) this.closeSub();\n else if (this.submenu()) this.back.emit();\n break;\n case 'Enter':\n case ' ':\n event.preventDefault();\n event.stopPropagation();\n if (item && !item.disabled) {\n if (item.children?.length) this.openSubIndex.set(this.activeIndex());\n else this.select.emit(item);\n }\n break;\n case 'Escape':\n event.preventDefault();\n event.stopPropagation();\n this.close.emit();\n break;\n }\n }\n}\n\n/**\n * Right-click (context) menu driven by a data array. Attach to any trigger; the\n * menu portals into `<body>` and runs each item's `action` on selection.\n * <div [strctContextMenu]=\"menuFor(host)\" [strctContextMenuData]=\"host\"\n * (menuSelect)=\"onPick($event)\">…</div>\n */\n@Directive({ selector: '[strctContextMenu]' })\nexport class StrctContextMenuTrigger implements OnDestroy {\n private readonly appRef = inject(ApplicationRef);\n private readonly envInjector = inject(EnvironmentInjector);\n private readonly zone = inject(NgZone);\n private readonly doc = inject(DOCUMENT);\n\n /** Menu items to display. */\n readonly items = input.required<StrctMenuItem[]>({ alias: 'strctContextMenu' });\n /** Arbitrary payload passed to item actions. */\n readonly data = input<unknown>(undefined, { alias: 'strctContextMenuData' });\n /** Emitted when a menu item is selected. */\n readonly menuSelect = output<StrctMenuItem>();\n\n private ref: ComponentRef<StrctMenuPanel> | null = null;\n private readonly onClose = () => this.zone.run(() => this.closeMenu());\n\n @HostListener('contextmenu', ['$event'])\n protected onContextMenu(event: MouseEvent): void {\n if (!this.items()?.length) return;\n event.preventDefault();\n this.openAt(event.clientX, event.clientY);\n }\n\n private openAt(x: number, y: number): void {\n this.closeMenu();\n const ref = createComponent(StrctMenuPanel, { environmentInjector: this.envInjector });\n ref.setInput('items', this.items());\n ref.setInput('data', this.data());\n ref.setInput('x', x);\n ref.setInput('y', y);\n ref.instance.select.subscribe((item) => {\n item.action?.(this.data());\n this.menuSelect.emit(item);\n this.closeMenu();\n });\n ref.instance.close.subscribe(() => this.closeMenu());\n\n this.appRef.attachView(ref.hostView);\n this.doc.body.appendChild(ref.location.nativeElement);\n this.ref = ref;\n\n // Defer global listeners so the opening right-click doesn't immediately close.\n setTimeout(() => {\n this.zone.runOutsideAngular(() => {\n this.doc.addEventListener('mousedown', this.onOutside, true);\n window.addEventListener('scroll', this.onClose, true);\n window.addEventListener('resize', this.onClose);\n });\n });\n }\n\n private readonly onOutside = (event: Event) => {\n if (this.ref && !this.ref.location.nativeElement.contains(event.target as Node)) {\n this.onClose();\n }\n };\n\n private closeMenu(): void {\n if (!this.ref) return;\n this.doc.removeEventListener('mousedown', this.onOutside, true);\n window.removeEventListener('scroll', this.onClose, true);\n window.removeEventListener('resize', this.onClose);\n this.appRef.detachView(this.ref.hostView);\n this.ref.destroy();\n this.ref = null;\n }\n\n ngOnDestroy(): void {\n this.closeMenu();\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n ViewEncapsulation,\n computed,\n contentChildren,\n input,\n model,\n output,\n signal,\n} from '@angular/core';\nimport { StrctIcon, StrctIconBadge } from '../icon/icon';\nimport { StrctContextMenuTrigger, StrctMenuItem } from '../context-menu/menu';\n\n/** A node in the data-driven tree (`<strct-tree [nodes]=\"...\">`). */\nexport interface StrctTreeNodeData {\n label: string;\n /** Optional leading icon name. */\n icon?: string;\n /** Status dot on the icon (running / maintenance / off …). */\n badge?: StrctIconBadge;\n /** Highlight as the selected node. */\n active?: boolean;\n /** Initial expanded state. */\n expanded?: boolean;\n children?: StrctTreeNodeData[];\n /** Arbitrary payload returned with (nodeActivated). */\n data?: unknown;\n}\n\n/** Per-node menu resolver for the data-driven tree — returns the items for one node. */\nexport type StrctTreeNodeMenuFn = (node: StrctTreeNodeData) => StrctMenuItem[];\n\n/** Payload of (nodeMenuSelect). */\nexport interface StrctTreeMenuEvent {\n node: StrctTreeNodeData;\n item: StrctMenuItem;\n}\n\n/**\n * Tree node. Two modes:\n * - **Content:** nest `<strct-tree-node>` children manually.\n * - **Data:** pass a `[node]` object that recurses over its `children` —\n * used internally by `<strct-tree [nodes]>`.\n *\n * <strct-tree-node label=\"Group\" icon=\"layers\" badge=\"success\" [(expanded)]=\"open\">\n * <strct-tree-node label=\"Leaf\" icon=\"vm\" [active]=\"true\" />\n * </strct-tree-node>\n */\n@Component({\n selector: 'strct-tree-node',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n imports: [StrctIcon, StrctContextMenuTrigger],\n template: `\n <div\n class=\"strct-tnode__row\"\n [class.strct-tnode__row--active]=\"displayActive()\"\n role=\"treeitem\"\n tabindex=\"0\"\n [attr.aria-selected]=\"displayActive()\"\n [attr.aria-expanded]=\"hasChildren() ? isOpen() : null\"\n [strctContextMenu]=\"menuItems()\"\n [strctContextMenuData]=\"node()\"\n (menuSelect)=\"onMenuSelect($event)\"\n (click)=\"onActivate()\"\n (keydown.enter)=\"onActivate()\"\n (keydown.space)=\"onActivate()\"\n >\n @if (hasChildren()) {\n <span\n class=\"strct-tnode__chevron\"\n [class.strct-tnode__chevron--open]=\"isOpen()\"\n role=\"button\"\n tabindex=\"0\"\n (click)=\"$event.stopPropagation(); toggle()\"\n (keydown.enter)=\"$event.stopPropagation(); toggle()\"\n (keydown.space)=\"$event.stopPropagation(); toggle()\"\n >\n <strct-icon name=\"chevronRight\" [size]=\"12\" [strokeWidth]=\"1.7\" />\n </span>\n } @else {\n <span class=\"strct-tnode__spacer\"></span>\n }\n @if (displayIcon()) {\n <strct-icon\n class=\"strct-tnode__icon\"\n [name]=\"displayIcon()!\"\n [size]=\"14\"\n [strokeWidth]=\"1.3\"\n [badge]=\"displayBadge()\"\n />\n }\n <span class=\"strct-tnode__label\">{{ displayLabel() }}</span>\n <ng-content select=\"[strctTreeTrailing]\" />\n </div>\n @if (hasChildren() && isOpen()) {\n <div class=\"strct-tnode__children\" role=\"group\">\n @if (node()) {\n @for (child of node()!.children ?? []; track $index) {\n <strct-tree-node\n [node]=\"child\"\n [nodeMenu]=\"nodeMenu()\"\n (nodeActivated)=\"nodeActivated.emit($event)\"\n (nodeMenuSelect)=\"nodeMenuSelect.emit($event)\"\n />\n }\n } @else {\n <ng-content />\n }\n </div>\n }\n `,\n host: { class: 'strct-tnode' },\n styles: [\n `\n .strct-tnode {\n display: block;\n }\n .strct-tnode__row {\n display: flex;\n align-items: center;\n gap: 7px;\n padding: 7px 10px;\n border-radius: 5px;\n cursor: pointer;\n font-size: 13px;\n color: var(--t1);\n user-select: none;\n }\n .strct-tnode__row:hover {\n background: var(--bg-3);\n }\n .strct-tnode__row--active {\n background: var(--acc-m);\n color: var(--acc);\n font-weight: 500;\n }\n .strct-tnode__row--active .strct-tnode__icon,\n .strct-tnode__row--active .strct-tnode__chevron {\n color: var(--acc);\n }\n .strct-tnode__chevron {\n display: inline-flex;\n color: var(--t3);\n transition: transform 0.15s ease;\n width: 14px;\n justify-content: center;\n }\n .strct-tnode__chevron--open {\n transform: rotate(90deg);\n }\n .strct-tnode__spacer {\n width: 14px;\n flex-shrink: 0;\n }\n .strct-tnode__icon {\n color: var(--t2);\n flex-shrink: 0;\n }\n .strct-tnode__label {\n flex: 1;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n }\n .strct-tnode__children {\n margin-left: 16px;\n }\n `,\n ],\n})\nexport class StrctTreeNode {\n /** Data-driven node; when set, label/icon/children come from it. */\n readonly node = input<StrctTreeNodeData | null>(null);\n /** Label text. */\n readonly label = input('');\n /** Icon name. */\n readonly icon = input<string | undefined>(undefined);\n /** Status dot variant. */\n readonly badge = input<StrctIconBadge>('none');\n /** Whether the item is active / selected. */\n readonly active = input(false);\n /** Whether the panel is open (two-way). */\n readonly expanded = model(false);\n /** Per-node menu resolver (data mode); bubbles down the recursion. */\n readonly nodeMenu = input<StrctTreeNodeMenuFn | null>(null);\n /** Content-mode click. */\n readonly activated = output<void>();\n /** Data-mode click — carries the activated node (bubbles to the tree). */\n readonly nodeActivated = output<StrctTreeNodeData>();\n /** Data-mode right-click menu selection (bubbles to the tree). */\n readonly nodeMenuSelect = output<StrctTreeMenuEvent>();\n\n /** Right-click menu items for this node ([] when no resolver / not data mode). */\n protected readonly menuItems = computed<StrctMenuItem[]>(() => {\n const fn = this.nodeMenu();\n const n = this.node();\n return fn && n ? fn(n) : [];\n });\n\n private readonly childNodes = contentChildren(StrctTreeNode);\n /** Data-mode expansion (seeded from node.expanded on first toggle). */\n private readonly dataExpanded = signal<boolean | null>(null);\n\n protected readonly displayLabel = computed(() => this.node()?.label ?? this.label());\n protected readonly displayIcon = computed(() => this.node()?.icon ?? this.icon());\n protected readonly displayBadge = computed<StrctIconBadge>(\n () => this.node()?.badge ?? this.badge(),\n );\n protected readonly displayActive = computed(() => this.node()?.active ?? this.active());\n\n protected readonly hasChildren = computed(() => {\n const n = this.node();\n return n ? (n.children?.length ?? 0) > 0 : this.childNodes().length > 0;\n });\n\n protected readonly isOpen = computed(() => {\n if (this.node()) return this.dataExpanded() ?? this.node()!.expanded ?? false;\n return this.expanded();\n });\n\n toggle(): void {\n if (this.node()) {\n this.dataExpanded.set(!this.isOpen());\n } else {\n this.expanded.update((v) => !v);\n }\n }\n\n protected onActivate(): void {\n const n = this.node();\n if (n) this.nodeActivated.emit(n);\n else this.activated.emit();\n }\n\n protected onMenuSelect(item: StrctMenuItem): void {\n const n = this.node();\n if (n) this.nodeMenuSelect.emit({ node: n, item });\n }\n}\n\n/**\n * Root container for a tree. Either project `<strct-tree-node>` children, or\n * pass `[nodes]` for a fully data-driven, self-recursing tree:\n * <strct-tree [nodes]=\"roots\" (nodeActivated)=\"select($event)\" />\n */\n@Component({\n selector: 'strct-tree',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n imports: [StrctTreeNode],\n template: `\n @if (nodes(); as ns) {\n @for (n of ns; track $index) {\n <strct-tree-node\n [node]=\"n\"\n [nodeMenu]=\"nodeMenu()\"\n (nodeActivated)=\"nodeActivated.emit($event)\"\n (nodeMenuSelect)=\"nodeMenuSelect.emit($event)\"\n />\n }\n } @else {\n <ng-content />\n }\n `,\n host: { class: 'strct-tree', role: 'tree' },\n styles: [\n `\n .strct-tree {\n display: block;\n }\n `,\n ],\n})\nexport class StrctTree {\n /** Data-driven node list; when set, projected content is ignored. */\n readonly nodes = input<StrctTreeNodeData[] | null>(null);\n /** Per-node right-click menu resolver. */\n readonly nodeMenu = input<StrctTreeNodeMenuFn | null>(null);\n /** Emitted when any data-driven node is clicked. */\n readonly nodeActivated = output<StrctTreeNodeData>();\n /** Emitted when a data-driven node's right-click menu item is chosen. */\n readonly nodeMenuSelect = output<StrctTreeMenuEvent>();\n}\n","import {\n DOCUMENT,\n ChangeDetectionStrategy,\n Component,\n DestroyRef,\n ElementRef,\n booleanAttribute,\n effect,\n inject,\n input,\n model,\n output,\n} from '@angular/core';\nimport { StrctIcon } from '../icon/icon';\n\n/** Modal width presets. */\nexport type StrctModalSize = 'sm' | 'md' | 'lg';\n\nlet modalCounter = 0;\n\n// Body scroll-lock shared across any number of simultaneously open modals.\nlet scrollLockCount = 0;\nlet savedBodyOverflow = '';\nfunction lockBodyScroll(doc: Document): void {\n if (scrollLockCount === 0) {\n savedBodyOverflow = doc.body.style.overflow;\n doc.body.style.overflow = 'hidden';\n }\n scrollLockCount++;\n}\nfunction unlockBodyScroll(doc: Document): void {\n scrollLockCount = Math.max(0, scrollLockCount - 1);\n if (scrollLockCount === 0) doc.body.style.overflow = savedBodyOverflow;\n}\n\n/**\n * Overlay dialog with two-way `open`:\n * <strct-modal [(open)]=\"show\" title=\"Confirm\">\n * Body…\n * <ng-container strctModalFooter>\n * <button strct-button (click)=\"show = false\">Cancel</button>\n * </ng-container>\n * </strct-modal>\n */\n@Component({\n selector: 'strct-modal',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [StrctIcon],\n template: `\n @if (open()) {\n <div\n class=\"strct-modal__overlay\"\n role=\"button\"\n tabindex=\"0\"\n (click)=\"onBackdrop()\"\n (keydown.enter)=\"onBackdrop()\"\n (keydown.space)=\"onBackdrop()\"\n >\n <div\n #dialog\n class=\"strct-modal__dialog\"\n [class.strct-modal__dialog--sm]=\"size() === 'sm'\"\n [class.strct-modal__dialog--lg]=\"size() === 'lg'\"\n role=\"dialog\"\n aria-modal=\"true\"\n [attr.aria-labelledby]=\"title() ? titleId : null\"\n tabindex=\"-1\"\n (click)=\"$event.stopPropagation()\"\n (keydown.tab)=\"onTab($event)\"\n (keydown.shift.tab)=\"onTab($event)\"\n >\n <div class=\"strct-modal__head\">\n <span class=\"strct-modal__title\" [id]=\"titleId\">{{ title() }}</span>\n <button type=\"button\" class=\"strct-modal__close\" aria-label=\"Close\" (click)=\"close()\">\n <strct-icon name=\"close\" [size]=\"14\" />\n </button>\n </div>\n <div class=\"strct-modal__body\"><ng-content /></div>\n @if (!hideFooter()) {\n <div class=\"strct-modal__foot\"><ng-content select=\"[strctModalFooter]\" /></div>\n }\n </div>\n </div>\n }\n `,\n host: {\n '(document:keydown.escape)': 'onEscape()',\n },\n styles: [\n `\n .strct-modal__overlay {\n position: fixed;\n inset: 0;\n z-index: 1000;\n display: flex;\n align-items: center;\n justify-content: center;\n padding: var(--space-5);\n background: rgba(0, 0, 0, 0.5);\n backdrop-filter: blur(2px);\n animation: strct-modal-fade 0.12s ease;\n }\n @media (max-width: 768px) {\n .strct-modal__overlay {\n padding: var(--space-3);\n }\n }\n .strct-modal__dialog {\n width: 100%;\n max-width: min(460px, calc(100vw - 32px));\n max-height: calc(100vh - 48px);\n display: flex;\n flex-direction: column;\n background: var(--bg-1);\n border: 1px solid var(--b2);\n border-radius: var(--radius-xl);\n box-shadow: var(--shadow-elevated);\n overflow: hidden;\n animation: strct-modal-rise 0.14s ease;\n }\n .strct-modal__dialog--sm {\n max-width: min(360px, calc(100vw - 32px));\n }\n .strct-modal__dialog--lg {\n max-width: min(720px, calc(100vw - 32px));\n }\n .strct-modal__head {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: var(--space-3);\n padding: var(--space-3) var(--space-4);\n border-bottom: 1px solid var(--b1);\n }\n .strct-modal__title {\n font-size: 14px;\n font-weight: 600;\n color: var(--t1);\n }\n .strct-modal__close {\n display: inline-flex;\n padding: 4px;\n border: 0;\n border-radius: 5px;\n background: transparent;\n color: var(--t3);\n cursor: pointer;\n }\n .strct-modal__close:hover {\n color: var(--t1);\n background: var(--bg-3);\n }\n .strct-modal__body {\n padding: var(--space-4);\n overflow-y: auto;\n color: var(--t2);\n font-size: 13px;\n }\n .strct-modal__foot {\n display: flex;\n align-items: center;\n justify-content: flex-end;\n gap: var(--space-2);\n padding: var(--space-3) var(--space-4);\n border-top: 1px solid var(--b1);\n background: var(--bg-2);\n }\n @keyframes strct-modal-fade {\n from {\n opacity: 0;\n }\n }\n @keyframes strct-modal-rise {\n from {\n opacity: 0;\n transform: translateY(8px) scale(0.98);\n }\n }\n `,\n ],\n})\nexport class StrctModal {\n private readonly elementRef = inject(ElementRef<HTMLElement>);\n private readonly doc = inject(DOCUMENT);\n\n /** Whether the panel is open (two-way). */\n readonly open = model(false);\n /** Dialog title. */\n readonly title = input('');\n /** Size variant. */\n readonly size = input<StrctModalSize>('md');\n /** Hide the footer slot. */\n readonly hideFooter = input(false, { transform: booleanAttribute });\n /** Allow closing via backdrop click / Escape. */\n readonly dismissible = input(true, { transform: booleanAttribute });\n /** Emitted when the alert is dismissed. */\n readonly closed = output<void>();\n\n protected readonly titleId = `strct-modal-${++modalCounter}`;\n /** Element that had focus before the dialog opened, restored on close. */\n private previousActive: HTMLElement | null = null;\n /** Whether this instance currently holds a scroll lock. */\n private locked = false;\n\n constructor() {\n effect(() => {\n const open = this.open();\n if (open && !this.locked) {\n this.locked = true;\n lockBodyScroll(this.doc);\n this.previousActive = this.doc.activeElement as HTMLElement | null;\n // Move focus into the dialog once it has rendered.\n setTimeout(() => this.focusInitial());\n } else if (!open && this.locked) {\n this.locked = false;\n unlockBodyScroll(this.doc);\n if (this.previousActive) {\n this.previousActive.focus?.();\n this.previousActive = null;\n }\n }\n });\n\n // Release the lock if the modal is destroyed while still open.\n inject(DestroyRef).onDestroy(() => {\n if (this.locked) {\n this.locked = false;\n unlockBodyScroll(this.doc);\n }\n });\n }\n\n close(): void {\n this.open.set(false);\n this.closed.emit();\n }\n\n protected onBackdrop(): void {\n if (this.dismissible()) this.close();\n }\n\n protected onEscape(): void {\n if (this.open() && this.dismissible()) this.close();\n }\n\n /** Wrap Tab focus within the dialog. */\n protected onTab(event: Event): void {\n const e = event as KeyboardEvent;\n const items = this.focusable();\n if (!items.length) {\n e.preventDefault();\n return;\n }\n const first = items[0];\n const last = items[items.length - 1];\n const active = this.doc.activeElement;\n if (e.shiftKey && (active === first || !this.dialog()?.contains(active))) {\n e.preventDefault();\n last.focus();\n } else if (!e.shiftKey && active === last) {\n e.preventDefault();\n first.focus();\n }\n }\n\n private dialog(): HTMLElement | null {\n return this.elementRef.nativeElement.querySelector('.strct-modal__dialog');\n }\n\n private focusable(): HTMLElement[] {\n const dialog = this.dialog();\n if (!dialog) return [];\n return Array.from(\n dialog.querySelectorAll<HTMLElement>(\n 'a[href],button:not([disabled]),input:not([disabled]),select:not([disabled]),textarea:not([disabled]),[tabindex]:not([tabindex=\"-1\"])',\n ),\n ).filter((el) => el.offsetParent !== null || el === this.doc.activeElement);\n }\n\n private focusInitial(): void {\n const items = this.focusable();\n (items[0] ?? this.dialog())?.focus();\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n ViewEncapsulation,\n ElementRef,\n HostListener,\n booleanAttribute,\n inject,\n input,\n signal,\n} from '@angular/core';\nimport { StrctOverlay } from '../overlay/overlay';\n\n/**\n * Click-to-open menu:\n * <strct-dropdown align=\"end\">\n * <button strct-button strctDropdownTrigger>Actions</button>\n * <strct-dropdown-item>Rename</strct-dropdown-item>\n * <strct-dropdown-item critical>Delete</strct-dropdown-item>\n * </strct-dropdown>\n */\n@Component({\n selector: 'strct-dropdown',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n imports: [StrctOverlay],\n template: `\n <div\n #trigger\n class=\"strct-dd__trigger\"\n role=\"button\"\n tabindex=\"0\"\n (click)=\"toggle()\"\n (keydown.enter)=\"toggle()\"\n (keydown.space)=\"toggle()\"\n >\n <ng-content select=\"[strctDropdownTrigger]\" />\n </div>\n @if (open()) {\n <div\n class=\"strct-dd__menu\"\n [strctOverlay]=\"trigger\"\n [strctOverlayPlacement]=\"align() === 'end' ? 'bottom-end' : 'bottom-start'\"\n role=\"menu\"\n tabindex=\"0\"\n (click)=\"close()\"\n (keydown.enter)=\"close()\"\n (keydown.space)=\"close()\"\n >\n <ng-content />\n </div>\n }\n `,\n host: { class: 'strct-dd' },\n styles: [\n `\n .strct-dd {\n position: relative;\n display: inline-block;\n }\n .strct-dd__trigger {\n display: inline-flex;\n }\n .strct-dd__menu {\n position: absolute;\n top: calc(100% + 4px);\n left: 0;\n z-index: 200;\n min-width: 170px;\n max-width: calc(100vw - 24px);\n padding: 4px;\n background: var(--bg-1);\n border: 1px solid var(--b2);\n border-radius: 7px;\n box-shadow: var(--shh);\n animation: strct-dd-in 0.1s ease;\n }\n .strct-dd__menu--end {\n left: auto;\n right: 0;\n }\n @keyframes strct-dd-in {\n from {\n opacity: 0;\n transform: translateY(-4px);\n }\n }\n `,\n ],\n})\nexport class StrctDropdown {\n private readonly host = inject(ElementRef<HTMLElement>);\n /** Horizontal alignment of the menu. */\n readonly align = input<'start' | 'end'>('start');\n readonly open = signal(false);\n\n toggle(): void {\n this.open.update((v) => !v);\n }\n\n close(): void {\n this.open.set(false);\n }\n\n @HostListener('document:click', ['$event'])\n protected onDocClick(event: MouseEvent): void {\n if (this.open() && !this.host.nativeElement.contains(event.target as Node)) {\n this.close();\n }\n }\n\n @HostListener('document:keydown.escape')\n protected onEscape(): void {\n this.close();\n }\n}\n\n/** A selectable row inside a `<strct-dropdown>`. */\n@Component({\n selector: 'strct-dropdown-item',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n template: `<ng-content />`,\n host: {\n class: 'strct-dd__item',\n role: 'menuitem',\n '[class.strct-dd__item--critical]': 'critical()',\n '[attr.aria-disabled]': 'disabled() || null',\n },\n styles: [\n `\n .strct-dd__item {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 7px 10px;\n border-radius: 5px;\n cursor: pointer;\n font-size: 13px;\n color: var(--t1);\n }\n .strct-dd__item:hover {\n background: var(--bg-3);\n }\n .strct-dd__item--critical {\n color: var(--critical);\n }\n .strct-dd__item--critical:hover {\n background: var(--critical-bg);\n }\n .strct-dd__item[aria-disabled='true'] {\n color: var(--t4);\n pointer-events: none;\n }\n `,\n ],\n})\nexport class StrctDropdownItem {\n /** Danger. */\n readonly critical = input(false, { transform: booleanAttribute });\n /** Static disable flag. */\n readonly disabled = input(false, { transform: booleanAttribute });\n}\n\n/** Thin separator between groups of menu items. */\n@Component({\n selector: 'strct-dropdown-divider',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n template: '',\n host: { class: 'strct-dd__divider', role: 'separator' },\n styles: [\n `\n .strct-dd__divider {\n display: block;\n height: 1px;\n margin: 4px 6px;\n background: var(--b2);\n }\n `,\n ],\n})\nexport class StrctDropdownDivider {}\n","import {\n ChangeDetectionStrategy,\n Component,\n ViewEncapsulation,\n HostListener,\n signal,\n} from '@angular/core';\n\n/**\n * Right-click (context) menu. Wraps a trigger area and shows a menu at the\n * cursor. Reuse `strct-dropdown-item` for the entries:\n * <strct-context-menu>\n * <div>Right-click here</div>\n * <ng-container strctContextMenuItems>\n * <strct-dropdown-item>Open</strct-dropdown-item>\n * <strct-dropdown-item critical>Delete</strct-dropdown-item>\n * </ng-container>\n * </strct-context-menu>\n */\n@Component({\n selector: 'strct-context-menu',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n template: `\n <div class=\"strct-ctx__trigger\" (contextmenu)=\"onContextMenu($event)\">\n <ng-content />\n </div>\n @if (open()) {\n <div\n class=\"strct-ctx__menu\"\n role=\"menu\"\n tabindex=\"0\"\n [style.left.px]=\"x()\"\n [style.top.px]=\"y()\"\n (click)=\"close()\"\n (contextmenu)=\"$event.preventDefault(); close()\"\n (keydown.enter)=\"close()\"\n (keydown.space)=\"close()\"\n >\n <ng-content select=\"[strctContextMenuItems]\" />\n </div>\n }\n `,\n host: { class: 'strct-ctx' },\n styles: [\n `\n .strct-ctx {\n display: block;\n }\n .strct-ctx__menu {\n position: fixed;\n z-index: 1100;\n min-width: 180px;\n padding: 4px;\n background: var(--bg-1);\n border: 1px solid var(--b2);\n border-radius: 7px;\n box-shadow: var(--shh);\n animation: strct-ctx-in 0.1s ease;\n }\n @keyframes strct-ctx-in {\n from {\n opacity: 0;\n transform: scale(0.97);\n }\n }\n `,\n ],\n})\nexport class StrctContextMenu {\n readonly open = signal(false);\n readonly x = signal(0);\n readonly y = signal(0);\n\n /** Approximate menu box used to keep it inside the viewport. */\n private static readonly MENU_W = 190;\n private static readonly MENU_H = 240;\n\n onContextMenu(event: MouseEvent): void {\n event.preventDefault();\n const vw = window.innerWidth;\n const vh = window.innerHeight;\n this.x.set(Math.min(event.clientX, vw - StrctContextMenu.MENU_W));\n this.y.set(Math.min(event.clientY, vh - StrctContextMenu.MENU_H));\n this.open.set(true);\n }\n\n close(): void {\n this.open.set(false);\n }\n\n @HostListener('document:click')\n protected onDocClick(): void {\n if (this.open()) this.close();\n }\n\n @HostListener('document:keydown.escape')\n protected onEscape(): void {\n this.close();\n }\n\n @HostListener('window:resize')\n protected onResize(): void {\n this.close();\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n ViewEncapsulation,\n inject,\n input,\n signal,\n} from '@angular/core';\nimport { StrctIcon } from '../icon/icon';\n\n/**\n * A nested fly-out inside a `strct-context-menu` or `strct-dropdown`. Opens on\n * hover, click/tap, or the keyboard (Enter / Space / →), and flips to the left\n * near the right edge of the viewport. Reuse `strct-dropdown-item` for entries.\n * <strct-submenu label=\"Power\">\n * <strct-dropdown-item>Power on</strct-dropdown-item>\n * <strct-dropdown-item>Power off</strct-dropdown-item>\n * </strct-submenu>\n */\n@Component({\n selector: 'strct-submenu',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n imports: [StrctIcon],\n template: `\n <div class=\"strct-submenu\" (mouseenter)=\"setOpen(true)\" (mouseleave)=\"open.set(false)\">\n <div\n class=\"strct-submenu__trigger\"\n role=\"menuitem\"\n tabindex=\"0\"\n aria-haspopup=\"menu\"\n [attr.aria-expanded]=\"open()\"\n (click)=\"$event.stopPropagation(); setOpen(!open())\"\n (keydown.enter)=\"$event.preventDefault(); $event.stopPropagation(); setOpen(true)\"\n (keydown.space)=\"$event.preventDefault(); $event.stopPropagation(); setOpen(true)\"\n (keydown.arrowright)=\"$event.preventDefault(); $event.stopPropagation(); setOpen(true)\"\n (keydown.arrowleft)=\"$event.stopPropagation(); open.set(false)\"\n (keydown.escape)=\"$event.stopPropagation(); open.set(false)\"\n >\n @if (icon()) {\n <strct-icon class=\"strct-submenu__icon\" [name]=\"icon()\" [size]=\"14\" [strokeWidth]=\"1.3\" />\n } @else {\n <span class=\"strct-submenu__icon-spacer\" aria-hidden=\"true\"></span>\n }\n <span class=\"strct-submenu__label\"\n >{{ label() }}<ng-content select=\"[strctSubmenuLabel]\"\n /></span>\n <strct-icon\n class=\"strct-submenu__arrow\"\n name=\"chevronRight\"\n [size]=\"12\"\n [strokeWidth]=\"1.6\"\n />\n </div>\n @if (open()) {\n <div class=\"strct-submenu__panel\" [class.strct-submenu__panel--flip]=\"flip()\" role=\"menu\">\n <ng-content />\n </div>\n }\n </div>\n `,\n host: { class: 'strct-submenu-host' },\n styles: [\n `\n .strct-submenu {\n position: relative;\n }\n .strct-submenu__trigger {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 7px 8px 7px 10px;\n border-radius: 5px;\n cursor: default;\n font-size: 13px;\n color: var(--t1);\n }\n .strct-submenu__trigger:hover {\n background: var(--bg-3);\n }\n .strct-submenu__trigger:focus-visible {\n outline: none;\n background: var(--bg-3);\n }\n .strct-submenu__icon {\n color: var(--t2);\n flex-shrink: 0;\n }\n .strct-submenu__icon-spacer {\n width: 14px;\n flex-shrink: 0;\n }\n .strct-submenu__label {\n flex: 1;\n display: inline-flex;\n align-items: center;\n gap: 8px;\n }\n .strct-submenu__arrow {\n color: var(--t3);\n }\n .strct-submenu__panel {\n position: absolute;\n top: -5px;\n left: 100%;\n z-index: 1;\n min-width: 170px;\n margin-left: 2px;\n padding: 4px;\n background: var(--bg-1);\n border: 1px solid var(--b2);\n border-radius: 7px;\n box-shadow: var(--shh);\n animation: strct-submenu-in 0.1s ease;\n }\n .strct-submenu__panel--flip {\n left: auto;\n right: 100%;\n margin-left: 0;\n margin-right: 2px;\n }\n @keyframes strct-submenu-in {\n from {\n opacity: 0;\n transform: translateX(-4px);\n }\n }\n `,\n ],\n})\nexport class StrctSubmenu {\n private readonly host: ElementRef<HTMLElement> = inject(ElementRef);\n\n /** Label text. */\n readonly label = input('');\n /** Optional leading icon; when omitted the icon column is still reserved so\n * the label stays aligned with sibling items that do have icons. */\n readonly icon = input('');\n readonly open = signal(false);\n /** Open to the left when the fly-out would overflow the right edge. */\n protected readonly flip = signal(false);\n\n protected setOpen(value: boolean): void {\n if (value) {\n const rect = this.host.nativeElement.getBoundingClientRect();\n this.flip.set(rect.right + 190 > window.innerWidth);\n }\n this.open.set(value);\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n ViewEncapsulation,\n booleanAttribute,\n computed,\n contentChildren,\n effect,\n input,\n output,\n signal,\n} from '@angular/core';\nimport { StrctButton } from '../button/button';\n\n/** A single wizard step. `label` names it in the step header. */\n@Component({\n selector: 'strct-step',\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `@if (active()) {\n <ng-content />\n }`,\n host: { class: 'strct-step', '[hidden]': '!active()' },\n})\nexport class StrctStep {\n /** Label text. */\n readonly label = input.required<string>();\n /** When false, the wizard's Next / Finish is disabled on this step. */\n readonly canAdvance = input(true, { transform: booleanAttribute });\n private readonly _active = signal(false);\n readonly active = this._active.asReadonly();\n\n /** @internal */\n setActive(value: boolean): void {\n this._active.set(value);\n }\n}\n\n/** Multi-step flow with a numbered header and Back / Next / Finish controls. */\n@Component({\n selector: 'strct-wizard',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n imports: [StrctButton],\n template: `\n <div class=\"strct-wiz__steps\">\n @for (step of steps(); track step; let i = $index; let last = $last) {\n <div\n class=\"strct-wiz__step\"\n [class.strct-wiz__step--active]=\"i === current()\"\n [class.strct-wiz__step--done]=\"i < current()\"\n >\n <span class=\"strct-wiz__dot\">{{ i + 1 }}</span>\n <span class=\"strct-wiz__label\">{{ step.label() }}</span>\n </div>\n @if (!last) {\n <span class=\"strct-wiz__sep\"></span>\n }\n }\n </div>\n\n <div class=\"strct-wiz__content\"><ng-content /></div>\n\n <div class=\"strct-wiz__foot\">\n @if (cancelable()) {\n <button strct-button variant=\"flat\" class=\"strct-wiz__cancel\" (click)=\"cancelled.emit()\">\n Cancel\n </button>\n }\n <button strct-button variant=\"flat\" [disabled]=\"current() === 0\" (click)=\"back()\">\n Back\n </button>\n @if (isLast()) {\n <button\n strct-button\n variant=\"primary\"\n [disabled]=\"submitting() || !canAdvance()\"\n (click)=\"finish()\"\n >\n {{ submitting() ? 'Submitting…' : finishLabel() }}\n </button>\n } @else {\n <button strct-button variant=\"primary\" [disabled]=\"!canAdvance()\" (click)=\"next()\">\n Next\n </button>\n }\n </div>\n `,\n host: { class: 'strct-wiz' },\n styles: [\n `\n .strct-wiz {\n display: block;\n }\n .strct-wiz__steps {\n display: flex;\n align-items: center;\n gap: 6px;\n }\n .strct-wiz__step {\n display: flex;\n align-items: center;\n gap: 8px;\n }\n .strct-wiz__dot {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 22px;\n height: 22px;\n border-radius: 50%;\n font-size: 11px;\n font-weight: 600;\n color: var(--t2);\n background: var(--bg-3);\n border: 1px solid var(--b2);\n }\n .strct-wiz__label {\n font-size: 12px;\n color: var(--t2);\n }\n .strct-wiz__step--active .strct-wiz__dot {\n background: var(--acc-m);\n color: var(--acc);\n border-color: var(--acc);\n }\n .strct-wiz__step--active .strct-wiz__label {\n color: var(--t1);\n font-weight: 600;\n }\n .strct-wiz__step--done .strct-wiz__dot {\n background: var(--acc-m);\n color: var(--acc);\n border-color: var(--acc30);\n }\n .strct-wiz__sep {\n flex: 1;\n height: 1px;\n background: var(--b2);\n min-width: 18px;\n }\n .strct-wiz__content {\n margin: 18px 0;\n padding: 16px;\n min-height: 80px;\n background: var(--bg-1);\n border: 1px solid var(--b2);\n border-radius: 8px;\n color: var(--t2);\n font-size: 13px;\n }\n .strct-wiz__foot {\n display: flex;\n justify-content: flex-end;\n gap: 8px;\n }\n .strct-wiz__cancel {\n margin-right: auto;\n }\n `,\n ],\n})\nexport class StrctWizard {\n readonly steps = contentChildren(StrctStep);\n readonly current = signal(0);\n /** Label for the final-step button (default \"Finish\"). */\n readonly finishLabel = input('Finish');\n /** Disable Finish and show a busy label while an async submit is in flight. */\n readonly submitting = input(false, { transform: booleanAttribute });\n /** Show a Cancel button on the left. */\n readonly cancelable = input(false, { transform: booleanAttribute });\n /** Emitted when the user clicks Finish. */\n readonly finished = output<void>();\n /** Emitted when the user clicks Cancel. */\n readonly cancelled = output<void>();\n /** Emits the new step index after a Back / Next move. */\n readonly stepChange = output<number>();\n\n protected readonly isLast = computed(() => this.current() >= this.steps().length - 1);\n /** Whether the current step permits advancing (its `canAdvance`). */\n protected readonly canAdvance = computed(\n () => this.steps()[this.current()]?.canAdvance() ?? true,\n );\n\n constructor() {\n effect(() => {\n const idx = this.current();\n this.steps().forEach((step, i) => step.setActive(i === idx));\n });\n }\n\n next(): void {\n if (!this.isLast() && this.canAdvance()) {\n this.current.update((i) => i + 1);\n this.stepChange.emit(this.current());\n }\n }\n\n back(): void {\n if (this.current() > 0) {\n this.current.update((i) => i - 1);\n this.stepChange.emit(this.current());\n }\n }\n\n finish(): void {\n if (this.canAdvance() && !this.submitting()) this.finished.emit();\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n ViewEncapsulation,\n booleanAttribute,\n input,\n} from '@angular/core';\n\n/**\n * Separator rule. Horizontal by default; pass `vertical` for an inline rule.\n * Projected content becomes a centered label on a horizontal divider.\n * <strct-divider>OR</strct-divider>\n * <strct-divider vertical />\n */\n@Component({\n selector: 'strct-divider',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n template: `<span class=\"strct-divider__label\"><ng-content /></span>`,\n host: {\n class: 'strct-divider',\n role: 'separator',\n '[class.strct-divider--vertical]': 'vertical()',\n '[attr.aria-orientation]': \"vertical() ? 'vertical' : 'horizontal'\",\n },\n styles: [\n `\n .strct-divider {\n display: flex;\n align-items: center;\n gap: 12px;\n width: 100%;\n color: var(--t3);\n font-size: 11px;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n }\n .strct-divider::before,\n .strct-divider::after {\n content: '';\n flex: 1;\n height: 1px;\n background: var(--b2);\n }\n .strct-divider__label:empty {\n display: none;\n }\n .strct-divider:has(.strct-divider__label:empty) {\n gap: 0;\n }\n\n .strct-divider--vertical {\n display: inline-block;\n width: 1px;\n min-height: 1em;\n height: auto;\n align-self: stretch;\n background: var(--b2);\n margin: 0 2px;\n }\n .strct-divider--vertical::before,\n .strct-divider--vertical::after {\n content: none;\n }\n .strct-divider--vertical .strct-divider__label {\n display: none;\n }\n `,\n ],\n})\nexport class StrctDivider {\n /** Render as a vertical rule. */\n readonly vertical = input(false, { transform: booleanAttribute });\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n ViewEncapsulation,\n booleanAttribute,\n input,\n} from '@angular/core';\n\n/** Breadcrumb trail container. Wraps `<strct-breadcrumb-item>` children. */\n@Component({\n selector: 'strct-breadcrumb',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n template: `<ng-content />`,\n host: { class: 'strct-bc', role: 'navigation', 'aria-label': 'Breadcrumb' },\n styles: [\n `\n .strct-bc {\n display: flex;\n align-items: center;\n flex-wrap: wrap;\n gap: 2px;\n font-size: 13px;\n }\n .strct-bc__item:not(:last-child)::after {\n content: '/';\n margin: 0 8px;\n color: var(--t3);\n font-weight: 400;\n }\n `,\n ],\n})\nexport class StrctBreadcrumb {}\n\n/** One crumb. Mark the final one `current`. */\n@Component({\n selector: 'strct-breadcrumb-item',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n template: `<ng-content />`,\n host: {\n class: 'strct-bc__item',\n '[class.strct-bc__item--current]': 'current()',\n '[attr.aria-current]': \"current() ? 'page' : null\",\n },\n styles: [\n `\n .strct-bc__item {\n display: inline-flex;\n align-items: center;\n color: var(--t2);\n }\n .strct-bc__item a {\n color: var(--t2);\n text-decoration: none;\n }\n .strct-bc__item a:hover {\n color: var(--acc);\n text-decoration: none;\n }\n .strct-bc__item--current {\n color: var(--t1);\n font-weight: 600;\n }\n `,\n ],\n})\nexport class StrctBreadcrumbItem {\n /** Mark as the current page. */\n readonly current = input(false, { transform: booleanAttribute });\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n ViewEncapsulation,\n computed,\n input,\n model,\n} from '@angular/core';\nimport { StrctIcon } from '../icon/icon';\n\ntype PageToken = number | 'dots';\n\n/**\n * Page navigator with first/last + a windowed range and ellipsis gaps.\n * <strct-pagination [total]=\"240\" [pageSize]=\"20\" [(page)]=\"page\" />\n */\n@Component({\n selector: 'strct-pagination',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n imports: [StrctIcon],\n template: `\n <button\n type=\"button\"\n class=\"strct-pg__btn strct-pg__nav\"\n [disabled]=\"page() <= 1\"\n aria-label=\"Previous page\"\n (click)=\"go(page() - 1)\"\n >\n <strct-icon name=\"chevronLeft\" [size]=\"13\" [strokeWidth]=\"1.7\" />\n </button>\n\n @for (token of pages(); track $index) {\n @if (token === 'dots') {\n <span class=\"strct-pg__dots\"><strct-icon name=\"ellipsis\" [size]=\"14\" /></span>\n } @else {\n <button\n type=\"button\"\n class=\"strct-pg__btn\"\n [class.strct-pg__btn--active]=\"token === page()\"\n [attr.aria-current]=\"token === page() ? 'page' : null\"\n (click)=\"go(token)\"\n >\n {{ token }}\n </button>\n }\n }\n\n <button\n type=\"button\"\n class=\"strct-pg__btn strct-pg__nav\"\n [disabled]=\"page() >= pageCount()\"\n aria-label=\"Next page\"\n (click)=\"go(page() + 1)\"\n >\n <strct-icon name=\"chevronRight\" [size]=\"13\" [strokeWidth]=\"1.7\" />\n </button>\n `,\n host: { class: 'strct-pg', role: 'navigation', 'aria-label': 'Pagination' },\n styles: [\n `\n .strct-pg {\n display: inline-flex;\n align-items: center;\n gap: 4px;\n font-size: 12px;\n color: var(--t2);\n }\n .strct-pg__btn {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n min-width: 30px;\n height: 30px;\n padding: 0 7px;\n border-radius: 6px;\n font-family: var(--font);\n font-size: 12px;\n cursor: pointer;\n color: var(--t2);\n background: transparent;\n border: 1px solid transparent;\n transition:\n background 0.14s ease,\n border-color 0.14s ease,\n color 0.14s ease;\n }\n .strct-pg__btn:hover {\n background: var(--bg-3);\n }\n .strct-pg__btn--active {\n color: var(--acc);\n border-color: var(--acc30);\n background: var(--acc-m);\n }\n .strct-pg__btn:disabled {\n color: var(--t4);\n cursor: not-allowed;\n background: transparent;\n }\n .strct-pg__nav {\n color: var(--t2);\n }\n .strct-pg__dots {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n min-width: 24px;\n height: 30px;\n color: var(--t3);\n }\n `,\n ],\n})\nexport class StrctPagination {\n /** Total number of items. */\n readonly total = input.required<number>();\n /** Rows per page (0 disables paging). */\n readonly pageSize = input(10);\n /** Current page (two-way). */\n readonly page = model(1);\n\n readonly pageCount = computed(() =>\n Math.max(1, Math.ceil(this.total() / Math.max(1, this.pageSize()))),\n );\n\n protected readonly pages = computed<PageToken[]>(() => {\n const count = this.pageCount();\n const current = this.page();\n if (count <= 7) {\n return Array.from({ length: count }, (_, i) => i + 1);\n }\n const tokens: PageToken[] = [1];\n const start = Math.max(2, current - 1);\n const end = Math.min(count - 1, current + 1);\n if (start > 2) tokens.push('dots');\n for (let p = start; p <= end; p++) tokens.push(p);\n if (end < count - 1) tokens.push('dots');\n tokens.push(count);\n return tokens;\n });\n\n go(target: number): void {\n const clamped = Math.max(1, Math.min(this.pageCount(), target));\n if (clamped !== this.page()) this.page.set(clamped);\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n ViewEncapsulation,\n afterNextRender,\n booleanAttribute,\n computed,\n effect,\n inject,\n input,\n signal,\n} from '@angular/core';\n\nlet fieldCounter = 0;\n\n/**\n * Form-field wrapper: a label (with optional required marker), the projected\n * control, and a hint or error message. It auto-links the control via\n * `aria-describedby` and sets `aria-invalid` when an error is present.\n *\n * <strct-field label=\"Email\" required hint=\"We never share it.\" [error]=\"emailError()\">\n * <input strctInput type=\"email\" [(ngModel)]=\"email\" />\n * </strct-field>\n */\n@Component({\n selector: 'strct-field',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n template: `\n @if (label()) {\n <label class=\"strct-field__label\" [attr.for]=\"controlId() || null\">\n {{ label() }}\n @if (required()) {\n <span class=\"strct-field__req\" aria-hidden=\"true\">*</span>\n }\n </label>\n }\n <div class=\"strct-field__control\"><ng-content /></div>\n @if (errorText()) {\n <div class=\"strct-field__msg strct-field__msg--error\" [id]=\"errorId\" role=\"alert\">\n {{ errorText() }}\n </div>\n } @else if (hint()) {\n <div class=\"strct-field__msg strct-field__msg--hint\" [id]=\"hintId\">{{ hint() }}</div>\n }\n `,\n host: {\n class: 'strct-field',\n '[class.strct-field--invalid]': '!!errorText()',\n },\n styles: [\n `\n .strct-field {\n display: flex;\n flex-direction: column;\n gap: 6px;\n }\n .strct-field__label {\n font-size: 12px;\n font-weight: 600;\n color: var(--t2);\n }\n .strct-field__req {\n color: var(--critical);\n margin-left: 2px;\n }\n .strct-field__control {\n display: flex;\n flex-direction: column;\n }\n .strct-field__msg {\n font-size: 12px;\n line-height: 1.4;\n }\n .strct-field__msg--hint {\n color: var(--t3);\n }\n .strct-field__msg--error {\n color: var(--critical);\n }\n `,\n ],\n})\nexport class StrctField {\n /** Label text. */\n readonly label = input('');\n /** Show a required marker on the label. */\n readonly required = input(false, { transform: booleanAttribute });\n /** Helper text shown below the field. */\n readonly hint = input('');\n /** Error message (string or first-of array); falsy clears the error state. */\n readonly error = input<string | string[] | null | undefined>(null);\n\n private readonly host: ElementRef<HTMLElement> = inject(ElementRef);\n private readonly n = ++fieldCounter;\n protected readonly hintId = `strct-field-hint-${this.n}`;\n protected readonly errorId = `strct-field-err-${this.n}`;\n protected readonly controlId = signal('');\n\n protected readonly errorText = computed(() => {\n const e = this.error();\n return (Array.isArray(e) ? e[0] : e) ?? '';\n });\n\n constructor() {\n afterNextRender(() => this.link());\n // Keep aria in sync as the error / hint change.\n effect(() => {\n this.errorText();\n this.hint();\n this.applyAria();\n });\n }\n\n private control(): HTMLElement | null {\n return this.host.nativeElement.querySelector<HTMLElement>(\n 'input, select, textarea, [strctInput], [strctField]',\n );\n }\n\n private link(): void {\n const el = this.control();\n if (!el) return;\n if (!el.id) el.id = `strct-field-ctrl-${this.n}`;\n this.controlId.set(el.id);\n this.applyAria();\n }\n\n private applyAria(): void {\n const el = this.control();\n if (!el) return;\n const describedBy = this.errorText() ? this.errorId : this.hint() ? this.hintId : '';\n if (describedBy) el.setAttribute('aria-describedby', describedBy);\n else el.removeAttribute('aria-describedby');\n if (this.errorText()) el.setAttribute('aria-invalid', 'true');\n else el.removeAttribute('aria-invalid');\n }\n}\n","import { Directive } from '@angular/core';\n\n/**\n * Applies the shared `.strct-control` look to a native input / textarea / select.\n * <input strctInput placeholder=\"Name\" />\n * <select strctInput>…</select>\n * The visual definition lives in `strct/styles/_forms.scss` (shipped via the\n * theme entry point), so this directive only attaches the class.\n */\n@Directive({\n selector: 'input[strctInput], textarea[strctInput], select[strctInput]',\n host: { class: 'strct-control' },\n})\nexport class StrctInput {}\n","import {\n ChangeDetectionStrategy,\n Component,\n booleanAttribute,\n effect,\n forwardRef,\n input,\n model,\n} from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { StrctIcon } from '../icon/icon';\n\n/** Checkbox with custom box. Works with `[(ngModel)]` / reactive forms. */\n@Component({\n selector: 'strct-checkbox',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [StrctIcon],\n providers: [\n { provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => StrctCheckbox), multi: true },\n ],\n template: `\n <label class=\"strct-cb\" [class.strct-cb--disabled]=\"isDisabled()\">\n <input\n type=\"checkbox\"\n class=\"strct-cb__native\"\n [checked]=\"checked()\"\n [disabled]=\"isDisabled()\"\n [indeterminate]=\"indeterminate()\"\n [attr.aria-label]=\"ariaLabel()\"\n (change)=\"onToggle($event)\"\n (blur)=\"onTouched()\"\n />\n <span class=\"strct-cb__box\">\n <strct-icon name=\"check\" [size]=\"11\" [strokeWidth]=\"2\" />\n </span>\n <span class=\"strct-cb__label\"><ng-content /></span>\n </label>\n `,\n styles: [\n `\n .strct-cb {\n display: inline-flex;\n align-items: center;\n gap: 8px;\n cursor: pointer;\n font-size: 13px;\n color: var(--t1);\n user-select: none;\n }\n .strct-cb--disabled {\n opacity: 0.5;\n cursor: not-allowed;\n }\n .strct-cb__native {\n position: absolute;\n opacity: 0;\n width: 0;\n height: 0;\n }\n .strct-cb__box {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 17px;\n height: 17px;\n border-radius: 4px;\n flex-shrink: 0;\n background: var(--bg-2);\n border: 1px solid var(--b3);\n color: transparent;\n transition:\n background 0.14s ease,\n border-color 0.14s ease;\n }\n .strct-cb__native:checked + .strct-cb__box {\n background: var(--acc);\n border-color: transparent;\n color: #fff;\n }\n .strct-cb__native:focus-visible + .strct-cb__box {\n box-shadow: 0 0 0 3px var(--acc18);\n }\n `,\n ],\n})\nexport class StrctCheckbox implements ControlValueAccessor {\n readonly checked = model(false);\n readonly isDisabled = model(false);\n /** Static disable; forms' setDisabledState also drives the disabled state. */\n readonly disabled = input(false, { transform: booleanAttribute });\n /** Tri-state visual indicator for a parent / intermediate state. */\n readonly indeterminate = input(false, { transform: booleanAttribute });\n /** Accessible label for the checkbox (used when no text label is present). */\n readonly ariaLabel = input<string | null>(null);\n\n private onChange: (value: boolean) => void = () => {};\n protected onTouched: () => void = () => {};\n\n constructor() {\n effect(() => this.isDisabled.set(this.disabled()));\n }\n\n onToggle(event: Event): void {\n const value = (event.target as HTMLInputElement).checked;\n this.checked.set(value);\n this.onChange(value);\n }\n\n writeValue(value: boolean): void {\n this.checked.set(!!value);\n }\n registerOnChange(fn: (value: boolean) => void): void {\n this.onChange = fn;\n }\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n setDisabledState(isDisabled: boolean): void {\n this.isDisabled.set(isDisabled);\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n booleanAttribute,\n effect,\n forwardRef,\n input,\n signal,\n} from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\n\n/** On/off switch. Works with `[(ngModel)]` / reactive forms. */\n@Component({\n selector: 'strct-toggle',\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [\n { provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => StrctToggle), multi: true },\n ],\n template: `\n <label class=\"strct-tg\" [class.strct-tg--disabled]=\"isDisabled()\">\n <input\n type=\"checkbox\"\n class=\"strct-tg__native\"\n role=\"switch\"\n [checked]=\"checked()\"\n [disabled]=\"isDisabled()\"\n (change)=\"onToggle($event)\"\n (blur)=\"onTouched()\"\n />\n <span class=\"strct-tg__track\"><span class=\"strct-tg__thumb\"></span></span>\n <span class=\"strct-tg__label\"><ng-content /></span>\n </label>\n `,\n styles: [\n `\n .strct-tg {\n display: inline-flex; align-items: center; gap: 9px; cursor: pointer;\n font-size: 13px; color: var(--t1); user-select: none;\n }\n .strct-tg--disabled { opacity: .5; cursor: not-allowed; }\n .strct-tg__native { position: absolute; opacity: 0; width: 0; height: 0; }\n .strct-tg__track {\n position: relative; width: 34px; height: 19px; border-radius: 11px; flex-shrink: 0;\n background: var(--bg-3); border: 1px solid var(--b3);\n transition: background .16s ease, border-color .16s ease;\n }\n .strct-tg__thumb {\n position: absolute; top: 2px; left: 2px; width: 13px; height: 13px; border-radius: 50%;\n background: var(--t2); transition: transform .16s ease, background .16s ease;\n }\n .strct-tg__native:checked + .strct-tg__track {\n background: var(--acc); border-color: transparent;\n }\n .strct-tg__native:checked + .strct-tg__track .strct-tg__thumb {\n transform: translateX(15px); background: #fff;\n }\n .strct-tg__native:focus-visible + .strct-tg__track { box-shadow: 0 0 0 3px var(--acc18); }\n `,\n ],\n})\nexport class StrctToggle implements ControlValueAccessor {\n readonly checked = signal(false);\n readonly isDisabled = signal(false);\n /** Static disable; forms' setDisabledState also drives the disabled state. */\n readonly disabled = input(false, { transform: booleanAttribute });\n\n private onChange: (value: boolean) => void = () => {};\n protected onTouched: () => void = () => {};\n\n constructor() {\n effect(() => this.isDisabled.set(this.disabled()));\n }\n\n onToggle(event: Event): void {\n const value = (event.target as HTMLInputElement).checked;\n this.checked.set(value);\n this.onChange(value);\n }\n\n writeValue(value: boolean): void {\n this.checked.set(!!value);\n }\n registerOnChange(fn: (value: boolean) => void): void {\n this.onChange = fn;\n }\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n setDisabledState(isDisabled: boolean): void {\n this.isDisabled.set(isDisabled);\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n ViewEncapsulation,\n booleanAttribute,\n forwardRef,\n inject,\n input,\n signal,\n} from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\n\nlet groupCounter = 0;\n\n/**\n * Radio group (the form control). Wrap `<strct-radio>` items:\n * <strct-radio-group [(ngModel)]=\"size\">\n * <strct-radio [value]=\"'sm'\">Small</strct-radio>\n * <strct-radio [value]=\"'lg'\">Large</strct-radio>\n * </strct-radio-group>\n */\n@Component({\n selector: 'strct-radio-group',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n providers: [\n { provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => StrctRadioGroup), multi: true },\n ],\n template: `<ng-content />`,\n host: { class: 'strct-radio-group', role: 'radiogroup' },\n styles: [\n `\n .strct-radio-group {\n display: flex;\n flex-direction: column;\n gap: 9px;\n }\n `,\n ],\n})\nexport class StrctRadioGroup implements ControlValueAccessor {\n readonly name = `strct-radio-${++groupCounter}`;\n readonly value = signal<unknown>(null);\n readonly isDisabled = signal(false);\n\n private onChange: (value: unknown) => void = () => {};\n private onTouched: () => void = () => {};\n\n select(value: unknown): void {\n this.value.set(value);\n this.onChange(value);\n this.onTouched();\n }\n\n writeValue(value: unknown): void {\n this.value.set(value);\n }\n registerOnChange(fn: (value: unknown) => void): void {\n this.onChange = fn;\n }\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n setDisabledState(isDisabled: boolean): void {\n this.isDisabled.set(isDisabled);\n }\n}\n\n/** One option inside a `<strct-radio-group>`. */\n@Component({\n selector: 'strct-radio',\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <label class=\"strct-rb\" [class.strct-rb--disabled]=\"disabled() || group.isDisabled()\">\n <input\n type=\"radio\"\n class=\"strct-rb__native\"\n [name]=\"group.name\"\n [checked]=\"group.value() === value()\"\n [disabled]=\"disabled() || group.isDisabled()\"\n (change)=\"group.select(value())\"\n />\n <span class=\"strct-rb__dot\"></span>\n <span class=\"strct-rb__label\"><ng-content /></span>\n </label>\n `,\n styles: [\n `\n .strct-rb {\n display: inline-flex;\n align-items: center;\n gap: 8px;\n cursor: pointer;\n font-size: 13px;\n color: var(--t1);\n user-select: none;\n }\n .strct-rb--disabled {\n opacity: 0.5;\n cursor: not-allowed;\n }\n .strct-rb__native {\n position: absolute;\n opacity: 0;\n width: 0;\n height: 0;\n }\n .strct-rb__dot {\n position: relative;\n width: 17px;\n height: 17px;\n border-radius: 50%;\n flex-shrink: 0;\n background: var(--bg-2);\n border: 1px solid var(--b3);\n transition: border-color 0.14s ease;\n }\n .strct-rb__dot::after {\n content: '';\n position: absolute;\n inset: 0;\n margin: auto;\n width: 7px;\n height: 7px;\n border-radius: 50%;\n background: var(--acc);\n transform: scale(0);\n transition: transform 0.14s ease;\n }\n .strct-rb__native:checked + .strct-rb__dot {\n border-color: var(--acc);\n }\n .strct-rb__native:checked + .strct-rb__dot::after {\n transform: scale(1);\n }\n .strct-rb__native:focus-visible + .strct-rb__dot {\n box-shadow: 0 0 0 3px var(--acc18);\n }\n `,\n ],\n})\nexport class StrctRadio {\n /** Current value. */\n readonly value = input.required<unknown>();\n /** Static disable flag. */\n readonly disabled = input(false, { transform: booleanAttribute });\n protected readonly group = inject(StrctRadioGroup);\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n ViewEncapsulation,\n booleanAttribute,\n computed,\n effect,\n forwardRef,\n input,\n signal,\n} from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\n\n/**\n * Slider built on a native range input — fully accessible, CVA-compatible.\n * <strct-range [min]=\"0\" [max]=\"100\" [(ngModel)]=\"volume\" showValue />\n */\n@Component({\n selector: 'strct-range',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n providers: [\n { provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => StrctRange), multi: true },\n ],\n template: `\n <input\n type=\"range\"\n class=\"strct-range__input\"\n [min]=\"min()\"\n [max]=\"max()\"\n [step]=\"step()\"\n [value]=\"value()\"\n [disabled]=\"isDisabled()\"\n [style.--strct-range-fill.%]=\"fillPercent()\"\n (input)=\"onInput($event)\"\n (blur)=\"onTouched()\"\n />\n @if (showValue()) {\n <span class=\"strct-range__value\">{{ value() }}</span>\n }\n `,\n styles: [\n `\n .strct-range {\n display: inline-flex;\n align-items: center;\n gap: 10px;\n width: 100%;\n max-width: 280px;\n }\n .strct-range__input {\n flex: 1;\n appearance: none;\n height: 5px;\n border-radius: 3px;\n cursor: pointer;\n background: linear-gradient(\n to right,\n var(--acc) 0 var(--strct-range-fill, 0%),\n var(--bg-3) var(--strct-range-fill, 0%) 100%\n );\n }\n .strct-range__input:disabled {\n opacity: 0.5;\n cursor: not-allowed;\n }\n .strct-range__input::-webkit-slider-thumb {\n appearance: none;\n width: 15px;\n height: 15px;\n border-radius: 50%;\n background: var(--acc);\n border: 2px solid var(--bg-1);\n box-shadow: var(--sh);\n }\n .strct-range__input::-moz-range-thumb {\n width: 15px;\n height: 15px;\n border-radius: 50%;\n background: var(--acc);\n border: 2px solid var(--bg-1);\n box-shadow: var(--sh);\n }\n .strct-range__input:focus-visible {\n outline: none;\n }\n .strct-range__input:focus-visible::-webkit-slider-thumb {\n box-shadow: 0 0 0 3px var(--acc18);\n }\n .strct-range__value {\n min-width: 30px;\n text-align: right;\n font-size: 12px;\n font-family: var(--mono);\n color: var(--t2);\n }\n `,\n ],\n})\nexport class StrctRange implements ControlValueAccessor {\n /** Minimum allowed value. */\n readonly min = input(0);\n /** Maximum allowed value or top of the value axis. */\n readonly max = input(100);\n /** Step increment. */\n readonly step = input(1);\n /** Display the current numeric value. */\n readonly showValue = input(false, { transform: booleanAttribute });\n /** Static disable flag. */\n readonly disabled = input(false, { transform: booleanAttribute });\n\n readonly value = signal(0);\n readonly isDisabled = signal(false);\n\n protected readonly fillPercent = computed(() => {\n const span = this.max() - this.min();\n return span <= 0 ? 0 : ((this.value() - this.min()) / span) * 100;\n });\n\n private onChange: (value: number) => void = () => {};\n protected onTouched: () => void = () => {};\n\n constructor() {\n effect(() => this.isDisabled.set(this.disabled()));\n }\n\n onInput(event: Event): void {\n const value = Number((event.target as HTMLInputElement).value);\n this.value.set(value);\n this.onChange(value);\n }\n\n writeValue(value: number): void {\n this.value.set(Number(value) || 0);\n }\n registerOnChange(fn: (value: number) => void): void {\n this.onChange = fn;\n }\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n setDisabledState(isDisabled: boolean): void {\n this.isDisabled.set(isDisabled);\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n ViewEncapsulation,\n booleanAttribute,\n computed,\n forwardRef,\n input,\n signal,\n} from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { StrctIcon } from '../icon/icon';\n\nconst LEVELS = [\n { label: 'Weak', color: 'var(--critical)' },\n { label: 'Weak', color: 'var(--critical)' },\n { label: 'Fair', color: 'var(--warning)' },\n { label: 'Good', color: 'var(--acc)' },\n { label: 'Strong', color: 'var(--success)' },\n];\n\n/**\n * Password input with a reveal toggle and an optional strength meter. CVA-compatible.\n * <strct-password [(ngModel)]=\"pw\" meter />\n */\n@Component({\n selector: 'strct-password',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n imports: [StrctIcon],\n providers: [\n { provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => StrctPassword), multi: true },\n ],\n template: `\n <div class=\"strct-pw__field\">\n <input\n class=\"strct-control strct-pw__input\"\n [type]=\"revealed() ? 'text' : 'password'\"\n [placeholder]=\"placeholder()\"\n [value]=\"value()\"\n [disabled]=\"isDisabled()\"\n autocomplete=\"off\"\n (input)=\"onInput($event)\"\n (blur)=\"onTouched()\"\n />\n <button\n type=\"button\"\n class=\"strct-pw__toggle\"\n [attr.aria-label]=\"revealed() ? 'Hide password' : 'Show password'\"\n [disabled]=\"isDisabled()\"\n (click)=\"revealed.set(!revealed())\"\n >\n <strct-icon [name]=\"revealed() ? 'eyeOff' : 'eye'\" [size]=\"15\" [strokeWidth]=\"1.3\" />\n </button>\n </div>\n @if (meter() && value()) {\n <div class=\"strct-pw__meter\">\n <div class=\"strct-pw__bars\">\n @for (i of [0, 1, 2, 3]; track i) {\n <span\n class=\"strct-pw__bar\"\n [style.background]=\"i < score() ? level().color : 'var(--bg-3)'\"\n ></span>\n }\n </div>\n <span class=\"strct-pw__label\" [style.color]=\"level().color\">{{ level().label }}</span>\n </div>\n }\n `,\n host: { class: 'strct-pw' },\n styles: [\n `\n .strct-pw {\n display: block;\n width: 100%;\n max-width: 280px;\n }\n .strct-pw__field {\n position: relative;\n }\n .strct-pw__input {\n padding-right: 38px;\n }\n .strct-pw__toggle {\n position: absolute;\n right: 4px;\n top: 50%;\n transform: translateY(-50%);\n display: inline-flex;\n padding: 5px;\n border: 0;\n border-radius: 5px;\n background: transparent;\n color: var(--t2);\n cursor: pointer;\n }\n .strct-pw__toggle:hover {\n color: var(--acc);\n background: var(--bg-3);\n }\n .strct-pw__meter {\n display: flex;\n align-items: center;\n gap: 9px;\n margin-top: 7px;\n }\n .strct-pw__bars {\n display: flex;\n gap: 3px;\n flex: 1;\n }\n .strct-pw__bar {\n flex: 1;\n height: 3px;\n border-radius: 2px;\n transition: background 0.2s ease;\n }\n .strct-pw__label {\n font-size: 11px;\n font-weight: 600;\n min-width: 42px;\n text-align: right;\n }\n `,\n ],\n})\nexport class StrctPassword implements ControlValueAccessor {\n /** Placeholder text when empty. */\n readonly placeholder = input('');\n /** Show a strength meter. */\n readonly meter = input(false, { transform: booleanAttribute });\n /** Static disable flag. */\n readonly disabled = input(false, { transform: booleanAttribute });\n\n readonly value = signal('');\n readonly revealed = signal(false);\n readonly isDisabled = signal(false);\n\n protected readonly score = computed(() => {\n const v = this.value();\n if (!v) return 0;\n let s = 0;\n if (v.length >= 8) s++;\n if (/[a-z]/.test(v) && /[A-Z]/.test(v)) s++;\n if (/\\d/.test(v)) s++;\n if (/[^A-Za-z0-9]/.test(v)) s++;\n return s;\n });\n protected readonly level = computed(() => LEVELS[this.score()]);\n\n private onChange: (value: string) => void = () => {};\n protected onTouched: () => void = () => {};\n\n onInput(event: Event): void {\n const v = (event.target as HTMLInputElement).value;\n this.value.set(v);\n this.onChange(v);\n }\n\n writeValue(value: string): void {\n this.value.set(value || '');\n }\n registerOnChange(fn: (value: string) => void): void {\n this.onChange = fn;\n }\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n setDisabledState(isDisabled: boolean): void {\n this.isDisabled.set(isDisabled);\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n ViewEncapsulation,\n booleanAttribute,\n forwardRef,\n input,\n signal,\n} from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { StrctIcon } from '../icon/icon';\n\n/**\n * Drag-and-drop file picker. CVA value is a `File[]`.\n * <strct-file [(ngModel)]=\"files\" multiple accept=\"image/*\" />\n */\n@Component({\n selector: 'strct-file',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n imports: [StrctIcon],\n providers: [\n { provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => StrctFile), multi: true },\n ],\n template: `\n <div\n class=\"strct-file__zone\"\n [class.strct-file__zone--drag]=\"dragging()\"\n [class.strct-file__zone--disabled]=\"isDisabled()\"\n role=\"button\"\n tabindex=\"0\"\n (click)=\"!isDisabled() && input.click()\"\n (keydown.enter)=\"!isDisabled() && input.click()\"\n (dragover)=\"onDragOver($event)\"\n (dragleave)=\"dragging.set(false)\"\n (drop)=\"onDrop($event)\"\n >\n <strct-icon name=\"upload\" [size]=\"20\" />\n <div class=\"strct-file__prompt\">\n <strong>Drag files here</strong> or <span class=\"strct-file__browse\">browse</span>\n </div>\n <input\n #input\n type=\"file\"\n class=\"strct-file__native\"\n [multiple]=\"multiple()\"\n [accept]=\"accept()\"\n [disabled]=\"isDisabled()\"\n (change)=\"onSelect($event)\"\n (blur)=\"onTouched()\"\n />\n </div>\n\n @if (files().length) {\n <ul class=\"strct-file__list\">\n @for (file of files(); track file.name + file.size) {\n <li class=\"strct-file__file\">\n <span class=\"strct-file__name\">{{ file.name }}</span>\n <span class=\"strct-file__size\">{{ humanSize(file.size) }}</span>\n <button\n type=\"button\"\n class=\"strct-file__remove\"\n aria-label=\"Remove\"\n (click)=\"remove(file)\"\n >\n <strct-icon name=\"close\" [size]=\"12\" />\n </button>\n </li>\n }\n </ul>\n }\n `,\n host: { class: 'strct-file' },\n styles: [\n `\n .strct-file {\n display: block;\n width: 100%;\n max-width: 360px;\n }\n .strct-file__zone {\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: 8px;\n padding: 22px 16px;\n text-align: center;\n cursor: pointer;\n color: var(--t2);\n background: var(--bg-2);\n border: 1px dashed var(--b3);\n border-radius: 8px;\n transition:\n border-color 0.14s ease,\n background 0.14s ease,\n color 0.14s ease;\n }\n .strct-file__zone:hover {\n border-color: var(--acc30);\n color: var(--t1);\n }\n .strct-file__zone strct-icon {\n color: var(--t3);\n }\n .strct-file__zone--drag {\n border-color: var(--acc);\n background: var(--acc-m);\n color: var(--t1);\n }\n .strct-file__zone--drag strct-icon {\n color: var(--acc);\n }\n .strct-file__zone--disabled {\n opacity: 0.5;\n cursor: not-allowed;\n }\n .strct-file__prompt {\n font-size: 13px;\n }\n .strct-file__browse {\n color: var(--acc);\n }\n .strct-file__native {\n display: none;\n }\n .strct-file__list {\n list-style: none;\n margin: 10px 0 0;\n padding: 0;\n display: flex;\n flex-direction: column;\n gap: 6px;\n }\n .strct-file__file {\n display: flex;\n align-items: center;\n gap: 10px;\n padding: 7px 10px;\n font-size: 13px;\n background: var(--bg-1);\n border: 1px solid var(--b2);\n border-radius: 6px;\n }\n .strct-file__name {\n flex: 1;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n color: var(--t1);\n }\n .strct-file__size {\n font-size: 11px;\n color: var(--t3);\n font-family: var(--mono);\n }\n .strct-file__remove {\n display: inline-flex;\n padding: 3px;\n border: 0;\n border-radius: 4px;\n background: transparent;\n color: var(--t3);\n cursor: pointer;\n }\n .strct-file__remove:hover {\n color: var(--critical);\n background: var(--critical-bg);\n }\n `,\n ],\n})\nexport class StrctFile implements ControlValueAccessor {\n /** Multiple. */\n readonly multiple = input(false, { transform: booleanAttribute });\n /** Accept. */\n readonly accept = input('');\n /** Static disable flag. */\n readonly disabled = input(false, { transform: booleanAttribute });\n\n readonly files = signal<File[]>([]);\n readonly dragging = signal(false);\n readonly isDisabled = signal(false);\n\n private onChange: (value: File[]) => void = () => {};\n protected onTouched: () => void = () => {};\n\n onSelect(event: Event): void {\n const list = (event.target as HTMLInputElement).files;\n if (list) this.setFiles(Array.from(list));\n }\n\n onDragOver(event: DragEvent): void {\n if (this.isDisabled()) return;\n event.preventDefault();\n this.dragging.set(true);\n }\n\n onDrop(event: DragEvent): void {\n if (this.isDisabled()) return;\n event.preventDefault();\n this.dragging.set(false);\n const dropped = event.dataTransfer?.files;\n if (dropped?.length) this.setFiles(Array.from(dropped));\n }\n\n remove(file: File): void {\n this.setFiles(this.files().filter((f) => f !== file));\n }\n\n protected humanSize(bytes: number): string {\n if (bytes < 1024) return `${bytes} B`;\n if (bytes < 1024 * 1024) return `${(bytes / 1024).toFixed(1)} KB`;\n return `${(bytes / 1024 / 1024).toFixed(1)} MB`;\n }\n\n private setFiles(incoming: File[]): void {\n const next = this.multiple() ? incoming : incoming.slice(0, 1);\n this.files.set(next);\n this.onChange(next);\n this.onTouched();\n }\n\n writeValue(value: File[]): void {\n this.files.set(Array.isArray(value) ? value : []);\n }\n registerOnChange(fn: (value: File[]) => void): void {\n this.onChange = fn;\n }\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n setDisabledState(isDisabled: boolean): void {\n this.isDisabled.set(isDisabled);\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n ViewEncapsulation,\n booleanAttribute,\n forwardRef,\n input,\n signal,\n} from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\n\n/** Star rating input. CVA value is the selected count (0–max). */\n@Component({\n selector: 'strct-rating',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n providers: [\n { provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => StrctRating), multi: true },\n ],\n template: `\n <div\n class=\"strct-rating\"\n role=\"slider\"\n [attr.aria-valuemin]=\"0\"\n [attr.aria-valuemax]=\"max()\"\n [attr.aria-valuenow]=\"value()\"\n >\n @for (star of stars(); track star) {\n <button\n type=\"button\"\n class=\"strct-rating__star\"\n [class.strct-rating__star--on]=\"star <= (hover() || value())\"\n [disabled]=\"readonly() || isDisabled()\"\n [attr.aria-label]=\"star + ' of ' + max()\"\n (mouseenter)=\"hover.set(star)\"\n (mouseleave)=\"hover.set(0)\"\n (click)=\"pick(star)\"\n >\n <svg viewBox=\"0 0 16 16\" [style.width.px]=\"size()\" [style.height.px]=\"size()\">\n <path\n d=\"M8 1.5l1.9 4 4.4.5-3.3 3 .9 4.3L8 11.2 4.1 13.3l.9-4.3-3.3-3 4.4-.5z\"\n [attr.fill]=\"star <= (hover() || value()) ? 'currentColor' : 'none'\"\n stroke=\"currentColor\"\n stroke-width=\"1.1\"\n stroke-linejoin=\"round\"\n />\n </svg>\n </button>\n }\n </div>\n `,\n styles: [\n `\n .strct-rating {\n display: inline-flex;\n gap: 3px;\n }\n .strct-rating__star {\n display: inline-flex;\n padding: 1px;\n border: 0;\n background: transparent;\n cursor: pointer;\n color: var(--t4);\n transition:\n color 0.12s ease,\n transform 0.1s ease;\n }\n .strct-rating__star:hover:not(:disabled) {\n transform: scale(1.12);\n }\n .strct-rating__star--on {\n color: var(--warning);\n }\n .strct-rating__star:disabled {\n cursor: default;\n }\n `,\n ],\n})\nexport class StrctRating implements ControlValueAccessor {\n /** Maximum allowed value or top of the value axis. */\n readonly max = input(5);\n /** Size variant. */\n readonly size = input(18);\n /** Prevent user interaction. */\n readonly readonly = input(false, { transform: booleanAttribute });\n\n readonly value = signal(0);\n readonly hover = signal(0);\n readonly isDisabled = signal(false);\n\n protected stars(): number[] {\n return Array.from({ length: this.max() }, (_, i) => i + 1);\n }\n\n private onChange: (value: number) => void = () => {};\n private onTouched: () => void = () => {};\n\n pick(star: number): void {\n if (this.readonly() || this.isDisabled()) return;\n const next = this.value() === star ? 0 : star; // click the current star to clear\n this.value.set(next);\n this.onChange(next);\n this.onTouched();\n }\n\n writeValue(value: number): void {\n this.value.set(Number(value) || 0);\n }\n registerOnChange(fn: (value: number) => void): void {\n this.onChange = fn;\n }\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n setDisabledState(isDisabled: boolean): void {\n this.isDisabled.set(isDisabled);\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n ViewEncapsulation,\n forwardRef,\n input,\n signal,\n} from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { StrctTag } from '../tag/tag';\n\n/**\n * Tag input — type a word and press Enter to add a chip; Backspace on an empty\n * field removes the last. CVA value is `string[]`.\n * <strct-chips [(ngModel)]=\"labels\" placeholder=\"Add a tag…\" />\n */\n@Component({\n selector: 'strct-chips',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n imports: [StrctTag],\n providers: [\n { provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => StrctChips), multi: true },\n ],\n template: `\n <div\n class=\"strct-chips\"\n role=\"button\"\n tabindex=\"0\"\n (click)=\"input.focus()\"\n (keydown.enter)=\"input.focus()\"\n (keydown.space)=\"input.focus()\"\n >\n @for (chip of value(); track chip) {\n <strct-tag status=\"accent\" removable (removed)=\"remove(chip)\">{{ chip }}</strct-tag>\n }\n <input\n #input\n type=\"text\"\n class=\"strct-chips__input\"\n [value]=\"draft()\"\n [placeholder]=\"value().length ? '' : placeholder()\"\n [disabled]=\"isDisabled()\"\n (input)=\"draft.set($any($event.target).value)\"\n (keydown)=\"onKeydown($event)\"\n (blur)=\"commitDraft(); onTouched()\"\n />\n </div>\n `,\n styles: [\n `\n .strct-chips {\n display: flex;\n flex-wrap: wrap;\n align-items: center;\n gap: 6px;\n width: 100%;\n max-width: 360px;\n min-height: 38px;\n padding: 5px 8px;\n background: var(--bg-2);\n border: 1px solid var(--b2);\n border-radius: 6px;\n cursor: text;\n transition:\n border-color 0.14s ease,\n box-shadow 0.14s ease;\n }\n .strct-chips:focus-within {\n border-color: var(--acc50);\n box-shadow: 0 0 0 3px var(--acc18);\n background: var(--bg-1);\n }\n .strct-chips__input {\n flex: 1;\n min-width: 80px;\n border: 0;\n outline: none;\n background: transparent;\n font-family: var(--font);\n font-size: 13px;\n color: var(--t1);\n padding: 3px 2px;\n }\n .strct-chips__input::placeholder {\n color: var(--t3);\n }\n `,\n ],\n})\nexport class StrctChips implements ControlValueAccessor {\n /** Placeholder text when empty. */\n readonly placeholder = input('');\n /** Allow duplicate tags. */\n readonly allowDuplicates = input(false);\n\n readonly value = signal<string[]>([]);\n readonly draft = signal('');\n readonly isDisabled = signal(false);\n\n private onChange: (value: string[]) => void = () => {};\n protected onTouched: () => void = () => {};\n\n onKeydown(event: KeyboardEvent): void {\n if (event.key === 'Enter' || event.key === ',') {\n event.preventDefault();\n this.commitDraft();\n } else if (event.key === 'Backspace' && !this.draft() && this.value().length) {\n this.value.update((v) => v.slice(0, -1));\n this.emit();\n }\n }\n\n protected commitDraft(): void {\n const tag = this.draft().trim();\n if (!tag) return;\n if (this.allowDuplicates() || !this.value().includes(tag)) {\n this.value.update((v) => [...v, tag]);\n this.emit();\n }\n this.draft.set('');\n }\n\n remove(chip: string): void {\n this.value.update((v) => v.filter((c) => c !== chip));\n this.emit();\n }\n\n private emit(): void {\n this.onChange(this.value());\n }\n\n writeValue(value: string[]): void {\n this.value.set(Array.isArray(value) ? [...value] : []);\n }\n registerOnChange(fn: (value: string[]) => void): void {\n this.onChange = fn;\n }\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n setDisabledState(isDisabled: boolean): void {\n this.isDisabled.set(isDisabled);\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n ViewEncapsulation,\n ElementRef,\n computed,\n forwardRef,\n inject,\n input,\n signal,\n} from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\n\n/**\n * One-time-password input — a row of single-character boxes with auto-advance,\n * backspace and paste. CVA value is the concatenated string.\n * <strct-input-otp [length]=\"6\" [(ngModel)]=\"code\" />\n */\n@Component({\n selector: 'strct-input-otp',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n providers: [\n { provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => StrctInputOtp), multi: true },\n ],\n template: `\n <div class=\"strct-otp\">\n @for (i of indices(); track i) {\n <input\n class=\"strct-otp__box\"\n [type]=\"masked() ? 'password' : 'text'\"\n inputmode=\"numeric\"\n autocomplete=\"one-time-code\"\n maxlength=\"1\"\n [value]=\"slots()[i] || ''\"\n [disabled]=\"isDisabled()\"\n (input)=\"onInput(i, $event)\"\n (keydown)=\"onKeydown(i, $event)\"\n (paste)=\"onPaste($event)\"\n (focus)=\"$any($event.target).select()\"\n />\n }\n </div>\n `,\n styles: [\n `\n .strct-otp {\n display: inline-flex;\n gap: 8px;\n }\n .strct-otp__box {\n width: 40px;\n height: 46px;\n text-align: center;\n font-family: var(--mono);\n font-size: 18px;\n color: var(--t1);\n background: var(--bg-2);\n border: 1px solid var(--b2);\n border-radius: 8px;\n transition:\n border-color 0.14s ease,\n box-shadow 0.14s ease,\n background 0.14s ease;\n }\n .strct-otp__box:focus {\n outline: none;\n border-color: var(--acc50);\n box-shadow: 0 0 0 3px var(--acc18);\n background: var(--bg-1);\n }\n .strct-otp__box:disabled {\n opacity: 0.5;\n }\n `,\n ],\n})\nexport class StrctInputOtp implements ControlValueAccessor {\n private readonly host = inject(ElementRef<HTMLElement>);\n /** Number of OTP boxes. */\n readonly length = input(6);\n /** Mask each box as a password dot. */\n readonly masked = input(false);\n\n readonly slots = signal<string[]>([]);\n readonly isDisabled = signal(false);\n\n protected readonly indices = computed(() => Array.from({ length: this.length() }, (_, i) => i));\n\n private onChange: (value: string) => void = () => {};\n private onTouched: () => void = () => {};\n\n onInput(i: number, event: Event): void {\n const ch = (event.target as HTMLInputElement).value.slice(-1);\n this.setSlot(i, ch);\n if (ch) this.focusBox(i + 1);\n this.emit();\n }\n\n onKeydown(i: number, event: KeyboardEvent): void {\n if (event.key === 'Backspace') {\n if (!this.slots()[i]) {\n event.preventDefault();\n this.setSlot(i - 1, '');\n this.focusBox(i - 1);\n this.emit();\n }\n } else if (event.key === 'ArrowLeft') {\n this.focusBox(i - 1);\n } else if (event.key === 'ArrowRight') {\n this.focusBox(i + 1);\n }\n }\n\n onPaste(event: ClipboardEvent): void {\n event.preventDefault();\n const text = (event.clipboardData?.getData('text') ?? '').replace(/\\s/g, '');\n if (!text) return;\n const next = Array.from({ length: this.length() }, (_, i) => text[i] ?? '');\n this.slots.set(next);\n this.focusBox(Math.min(text.length, this.length() - 1));\n this.emit();\n this.onTouched();\n }\n\n private setSlot(i: number, ch: string): void {\n if (i < 0 || i >= this.length()) return;\n const next = [...this.slots()];\n while (next.length < this.length()) next.push('');\n next[i] = ch;\n this.slots.set(next);\n }\n\n private focusBox(i: number): void {\n const el = this.host.nativeElement as HTMLElement;\n const boxes = el.querySelectorAll('.strct-otp__box');\n (boxes[i] as HTMLInputElement | undefined)?.focus();\n }\n\n private emit(): void {\n this.onChange(this.slots().join(''));\n this.onTouched();\n }\n\n writeValue(value: string): void {\n const v = value ?? '';\n this.slots.set(Array.from({ length: this.length() }, (_, i) => v[i] ?? ''));\n }\n registerOnChange(fn: (value: string) => void): void {\n this.onChange = fn;\n }\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n setDisabledState(isDisabled: boolean): void {\n this.isDisabled.set(isDisabled);\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n ViewEncapsulation,\n computed,\n forwardRef,\n inject,\n input,\n signal,\n ElementRef,\n HostListener,\n} from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\n\n/** Knob accent color variants. */\nexport type StrctKnobStatus = 'accent' | 'success' | 'warning' | 'critical';\n\nconst COLOR: Record<StrctKnobStatus, string> = {\n accent: 'var(--acc)',\n success: 'var(--success)',\n warning: 'var(--warning)',\n critical: 'var(--critical)',\n};\n\n/**\n * Rotary dial input. Drag (up/down), arrow keys, Home/End or the wheel change\n * the value. CVA-compatible.\n * <strct-knob [min]=\"0\" [max]=\"100\" [(ngModel)]=\"fanSpeed\" label=\"Fan\" />\n */\n@Component({\n selector: 'strct-knob',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n providers: [\n { provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => StrctKnob), multi: true },\n ],\n template: `\n <div\n class=\"strct-knob\"\n [style.width.px]=\"size()\"\n [style.height.px]=\"size()\"\n role=\"slider\"\n tabindex=\"0\"\n [attr.aria-valuemin]=\"min()\"\n [attr.aria-valuemax]=\"max()\"\n [attr.aria-valuenow]=\"value()\"\n [attr.aria-disabled]=\"isDisabled() || null\"\n (pointerdown)=\"onPointerDown($event)\"\n >\n <svg [attr.viewBox]=\"'0 0 ' + size() + ' ' + size()\">\n <g [attr.transform]=\"'rotate(135 ' + half() + ' ' + half() + ')'\">\n <circle\n class=\"strct-knob__track\"\n [attr.cx]=\"half()\"\n [attr.cy]=\"half()\"\n [attr.r]=\"radius()\"\n fill=\"none\"\n [attr.stroke-width]=\"thickness()\"\n stroke-linecap=\"round\"\n [attr.stroke-dasharray]=\"trackDash()\"\n />\n <circle\n class=\"strct-knob__value\"\n [attr.cx]=\"half()\"\n [attr.cy]=\"half()\"\n [attr.r]=\"radius()\"\n fill=\"none\"\n [attr.stroke]=\"color()\"\n [attr.stroke-width]=\"thickness()\"\n stroke-linecap=\"round\"\n [attr.stroke-dasharray]=\"valueDash()\"\n />\n </g>\n <g [attr.transform]=\"'rotate(' + pointerAngle() + ' ' + half() + ' ' + half() + ')'\">\n <line\n class=\"strct-knob__pointer\"\n [attr.x1]=\"half()\"\n [attr.y1]=\"half()\"\n [attr.x2]=\"half()\"\n [attr.y2]=\"thickness() + 3\"\n [attr.stroke]=\"color()\"\n stroke-width=\"2.5\"\n stroke-linecap=\"round\"\n />\n </g>\n </svg>\n <div class=\"strct-knob__center\">\n <div class=\"strct-knob__num\">{{ value() }}</div>\n @if (label()) {\n <div class=\"strct-knob__label\">{{ label() }}</div>\n }\n </div>\n </div>\n `,\n styles: [\n `\n .strct-knob {\n position: relative;\n display: inline-flex;\n cursor: ns-resize;\n user-select: none;\n touch-action: none;\n outline: none;\n }\n .strct-knob:focus-visible {\n border-radius: 50%;\n box-shadow: 0 0 0 3px var(--acc18);\n }\n .strct-knob[aria-disabled='true'] {\n opacity: 0.5;\n cursor: not-allowed;\n }\n .strct-knob__track {\n stroke: var(--bg-3);\n }\n .strct-knob__value {\n transition: stroke-dasharray 0.05s linear;\n }\n .strct-knob__center {\n position: absolute;\n inset: 0;\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n pointer-events: none;\n }\n .strct-knob__num {\n font-size: 18px;\n font-weight: 600;\n color: var(--t1);\n line-height: 1;\n }\n .strct-knob__label {\n font-size: 11px;\n color: var(--t2);\n margin-top: 3px;\n }\n `,\n ],\n})\nexport class StrctKnob implements ControlValueAccessor {\n private readonly elementRef = inject(ElementRef<HTMLElement>);\n\n /** Minimum allowed value. */\n readonly min = input(0);\n /** Maximum allowed value or top of the value axis. */\n readonly max = input(100);\n /** Step increment. */\n readonly step = input(1);\n /** Size variant. */\n readonly size = input(96);\n /** Stroke thickness in pixels. */\n readonly thickness = input(9);\n /** Visual status color. */\n readonly status = input<StrctKnobStatus>('accent');\n /** Label text. */\n readonly label = input('');\n\n readonly value = signal(0);\n readonly isDisabled = signal(false);\n\n protected readonly half = computed(() => this.size() / 2);\n protected readonly radius = computed(() => (this.size() - this.thickness()) / 2 - 2);\n protected readonly color = computed(() => COLOR[this.status()]);\n\n private readonly fraction = computed(() => {\n const span = this.max() - this.min();\n return span <= 0 ? 0 : (this.value() - this.min()) / span;\n });\n private readonly circumference = computed(() => 2 * Math.PI * this.radius());\n\n protected readonly trackDash = computed(() => {\n const c = this.circumference();\n return `${0.75 * c} ${c}`;\n });\n protected readonly valueDash = computed(() => {\n const c = this.circumference();\n return `${this.fraction() * 0.75 * c} ${c}`;\n });\n /** Pointer rotation: -135° (start, lower-left) to +135° (end, lower-right). */\n protected readonly pointerAngle = computed(() => -135 + this.fraction() * 270);\n\n private onChange: (value: number) => void = () => {};\n private onTouched: () => void = () => {};\n\n private dragStartY = 0;\n private dragStartValue = 0;\n private readonly onMove = (e: PointerEvent) => {\n const span = this.max() - this.min();\n const delta = (this.dragStartY - e.clientY) / 150; // 150px ≈ full range\n this.setValue(this.dragStartValue + delta * span);\n };\n private readonly onUp = () => {\n window.removeEventListener('pointermove', this.onMove);\n window.removeEventListener('pointerup', this.onUp);\n this.onTouched();\n };\n\n protected onPointerDown(event: PointerEvent): void {\n if (this.isDisabled()) return;\n event.preventDefault();\n (this.elementRef.nativeElement.firstElementChild as HTMLElement)?.focus?.();\n this.dragStartY = event.clientY;\n this.dragStartValue = this.value();\n window.addEventListener('pointermove', this.onMove);\n window.addEventListener('pointerup', this.onUp);\n }\n\n @HostListener('keydown', ['$event'])\n protected onKeydown(event: KeyboardEvent): void {\n if (this.isDisabled()) return;\n const s = this.step();\n let handled = true;\n switch (event.key) {\n case 'ArrowUp':\n case 'ArrowRight':\n this.setValue(this.value() + s);\n break;\n case 'ArrowDown':\n case 'ArrowLeft':\n this.setValue(this.value() - s);\n break;\n case 'Home':\n this.setValue(this.min());\n break;\n case 'End':\n this.setValue(this.max());\n break;\n default:\n handled = false;\n }\n if (handled) {\n event.preventDefault();\n this.onTouched();\n }\n }\n\n @HostListener('wheel', ['$event'])\n protected onWheel(event: WheelEvent): void {\n if (this.isDisabled()) return;\n event.preventDefault();\n this.setValue(this.value() + (event.deltaY < 0 ? this.step() : -this.step()));\n this.onTouched();\n }\n\n private setValue(raw: number): void {\n const step = this.step();\n const snapped = Math.round(raw / step) * step;\n const clamped = Math.max(this.min(), Math.min(this.max(), snapped));\n if (clamped !== this.value()) {\n this.value.set(clamped);\n this.onChange(clamped);\n }\n }\n\n writeValue(value: number): void {\n this.value.set(Math.max(this.min(), Math.min(this.max(), Number(value) || 0)));\n }\n registerOnChange(fn: (value: number) => void): void {\n this.onChange = fn;\n }\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n setDisabledState(isDisabled: boolean): void {\n this.isDisabled.set(isDisabled);\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n ViewEncapsulation,\n booleanAttribute,\n forwardRef,\n input,\n signal,\n} from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\n\n/** Ready-made masks for common datacenter / form fields. */\nexport const STRCT_MASKS = {\n phoneTr: '(999) 999 99 99',\n nationalIdTr: '99999999999',\n creditCard: '9999 9999 9999 9999',\n /** MAC address — 6 hex octets, e.g. 00:1B:44:11:3A:B7 */\n mac: 'HH:HH:HH:HH:HH:HH',\n /** Fibre-channel WWPN — 8 hex octets, e.g. 20:00:00:25:B5:1A:00:0F */\n wwpn: 'HH:HH:HH:HH:HH:HH:HH:HH',\n} as const;\n\n/**\n * Masked text input. Mask tokens: `9` = digit, `A` = letter, `H` = hex digit,\n * `*` = alphanumeric; every other character is a literal. CVA value is the\n * formatted string.\n * <strct-input-mask mask=\"(999) 999 99 99\" [(ngModel)]=\"phone\" />\n * <strct-input-mask mask=\"HH:HH:HH:HH:HH:HH\" uppercase [(ngModel)]=\"mac\" />\n */\n@Component({\n selector: 'strct-input-mask',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n providers: [\n { provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => StrctInputMask), multi: true },\n ],\n template: `\n <input\n class=\"strct-control strct-mask__input\"\n type=\"text\"\n inputmode=\"text\"\n [placeholder]=\"placeholder() || mask()\"\n [value]=\"display()\"\n [disabled]=\"isDisabled()\"\n (input)=\"onInput($event)\"\n (blur)=\"onTouched()\"\n />\n `,\n styles: [\n `\n .strct-input-mask,\n .strct-mask__input {\n display: block;\n width: 100%;\n max-width: 280px;\n }\n `,\n ],\n})\nexport class StrctInputMask implements ControlValueAccessor {\n /** Mask pattern (9=digit, A=letter, H=hex, *=alnum). */\n readonly mask = input.required<string>();\n /** Placeholder text when empty. */\n readonly placeholder = input('');\n /** Upper-case entered letters (handy for hex MAC / WWPN). */\n readonly uppercase = input(false, { transform: booleanAttribute });\n\n readonly display = signal('');\n readonly isDisabled = signal(false);\n\n private onChange: (value: string) => void = () => {};\n protected onTouched: () => void = () => {};\n\n onInput(event: Event): void {\n const el = event.target as HTMLInputElement;\n const formatted = this.format(el.value);\n this.display.set(formatted);\n // keep the field text in sync (covers rejected characters)\n el.value = formatted;\n this.onChange(formatted);\n }\n\n private isToken(c: string): boolean {\n return c === '9' || c === 'A' || c === 'H' || c === '*';\n }\n\n private matches(ch: string, token: string): boolean {\n if (token === '9') return /[0-9]/.test(ch);\n if (token === 'A') return /[a-zA-Z]/.test(ch);\n if (token === 'H') return /[0-9a-fA-F]/.test(ch);\n return /[0-9a-zA-Z]/.test(ch); // '*'\n }\n\n private format(raw: string): string {\n const mask = this.mask();\n // Pull out only the data characters (drop literals / rejected input).\n const data: string[] = [];\n for (const ch of raw) {\n if (/[0-9a-zA-Z]/.test(ch)) data.push(ch);\n }\n let out = '';\n let di = 0;\n for (let mi = 0; mi < mask.length && di < data.length; ) {\n const m = mask[mi];\n if (this.isToken(m)) {\n if (this.matches(data[di], m)) {\n out += this.uppercase() ? data[di].toUpperCase() : data[di];\n mi++;\n di++;\n } else {\n di++; // skip a data char that doesn't fit this token\n }\n } else {\n out += m; // literal\n mi++;\n }\n }\n return out;\n }\n\n writeValue(value: string): void {\n this.display.set(this.format(value ?? ''));\n }\n registerOnChange(fn: (value: string) => void): void {\n this.onChange = fn;\n }\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n setDisabledState(isDisabled: boolean): void {\n this.isDisabled.set(isDisabled);\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n ViewEncapsulation,\n ElementRef,\n HostListener,\n booleanAttribute,\n computed,\n forwardRef,\n inject,\n input,\n signal,\n} from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { StrctIcon } from '../icon/icon';\nimport { StrctOverlay } from '../overlay/overlay';\n\n/** One option in a combobox or similar list. */\nexport interface StrctOption {\n value: unknown;\n label: string;\n}\n\nlet comboboxCounter = 0;\n\n/**\n * Filterable single-select (autocomplete). CVA-compatible, fully keyboard\n * driven (↑/↓ to move, Enter to pick, Esc to close).\n * <strct-combobox [options]=\"opts\" [(ngModel)]=\"selected\" placeholder=\"Pick…\" />\n */\n@Component({\n selector: 'strct-combobox',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n imports: [StrctIcon, StrctOverlay],\n providers: [\n { provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => StrctCombobox), multi: true },\n ],\n template: `\n <div #field class=\"strct-cbx__field\">\n <input\n #input\n type=\"text\"\n class=\"strct-control strct-cbx__input\"\n role=\"combobox\"\n autocomplete=\"off\"\n [attr.aria-expanded]=\"open()\"\n [attr.aria-controls]=\"listId\"\n [attr.aria-activedescendant]=\"\n open() && filtered().length ? listId + '-' + activeIndex() : null\n \"\n [placeholder]=\"placeholder()\"\n [value]=\"query()\"\n [disabled]=\"isDisabled()\"\n (focus)=\"openList()\"\n (input)=\"onType($event)\"\n (keydown)=\"onKeydown($event)\"\n (blur)=\"onTouched()\"\n />\n <strct-icon class=\"strct-cbx__caret\" name=\"chevronDown\" [size]=\"14\" />\n </div>\n @if (open()) {\n <div\n class=\"strct-cbx__menu\"\n role=\"listbox\"\n [id]=\"listId\"\n [strctOverlay]=\"field\"\n strctOverlayPlacement=\"bottom-start\"\n [strctOverlayMatchWidth]=\"true\"\n >\n @if (loading()) {\n <div class=\"strct-cbx__skeleton\">\n <div class=\"strct-cbx__skeleton-block\"></div>\n </div>\n } @else {\n @for (opt of filtered(); track opt.value; let i = $index) {\n <div\n class=\"strct-cbx__opt\"\n [id]=\"listId + '-' + i\"\n [class.strct-cbx__opt--active]=\"opt.value === value()\"\n [class.strct-cbx__opt--highlight]=\"i === activeIndex()\"\n role=\"option\"\n [attr.aria-selected]=\"opt.value === value()\"\n (mousedown)=\"select(opt, $event)\"\n (mousemove)=\"activeIndex.set(i)\"\n >\n {{ opt.label }}\n </div>\n } @empty {\n <div class=\"strct-cbx__empty\">No matches</div>\n }\n }\n </div>\n }\n `,\n host: { class: 'strct-cbx' },\n styles: [\n `\n /* Full width of its container by default — no artificial cap. */\n .strct-cbx {\n position: relative;\n display: block;\n width: 100%;\n }\n .strct-cbx__field {\n position: relative;\n }\n .strct-cbx__input {\n padding-right: 30px;\n }\n .strct-cbx__caret {\n position: absolute;\n right: 9px;\n top: 50%;\n transform: translateY(-50%);\n color: var(--t3);\n pointer-events: none;\n }\n /* Positioned by StrctOverlay (position: fixed, set inline) — only the\n surface styling lives here. */\n .strct-cbx__menu {\n z-index: 200;\n max-height: 220px;\n overflow-y: auto;\n padding: 4px;\n background: var(--bg-1);\n border: 1px solid var(--b2);\n border-radius: 7px;\n box-shadow: var(--shh);\n }\n .strct-cbx__opt {\n padding: 7px 10px;\n border-radius: 5px;\n cursor: pointer;\n font-size: 13px;\n color: var(--t1);\n }\n .strct-cbx__opt--highlight {\n background: var(--bg-3);\n }\n .strct-cbx__opt--active {\n color: var(--acc);\n }\n .strct-cbx__opt--active.strct-cbx__opt--highlight {\n background: var(--acc-m);\n }\n @keyframes strct-skeleton-pulse {\n 0%,\n 100% {\n opacity: 0.4;\n }\n 50% {\n opacity: 0.7;\n }\n }\n .strct-cbx__skeleton {\n padding: 9px 10px;\n }\n .strct-cbx__skeleton-block {\n height: 12px;\n background: var(--bg-3);\n border-radius: var(--radius-sm);\n animation: strct-skeleton-pulse 1.4s ease infinite;\n }\n .strct-cbx__empty {\n padding: 9px 10px;\n font-size: 13px;\n color: var(--t3);\n }\n `,\n ],\n})\nexport class StrctCombobox implements ControlValueAccessor {\n private readonly host = inject(ElementRef<HTMLElement>);\n protected readonly listId = `strct-cbx-${++comboboxCounter}`;\n\n /** Available options. */\n readonly options = input<StrctOption[]>([]);\n /** Placeholder text when empty. */\n readonly placeholder = input('');\n /** Show a skeleton placeholder while options are loading. */\n readonly loading = input(false, { transform: booleanAttribute });\n\n readonly query = signal('');\n readonly value = signal<unknown>(null);\n readonly open = signal(false);\n readonly activeIndex = signal(0);\n readonly isDisabled = signal(false);\n /** True while the user is typing a filter that hasn't been committed yet. */\n private readonly dirty = signal(false);\n\n protected readonly filtered = computed(() => {\n const q = this.dirty() ? this.query().toLowerCase().trim() : '';\n if (!q) return this.options();\n return this.options().filter((o) => o.label.toLowerCase().includes(q));\n });\n\n private onChange: (value: unknown) => void = () => {};\n protected onTouched: () => void = () => {};\n\n openList(): void {\n if (this.isDisabled()) return;\n this.open.set(true);\n this.activeIndex.set(this.indexOfValue());\n }\n\n onType(event: Event): void {\n this.dirty.set(true);\n this.query.set((event.target as HTMLInputElement).value);\n this.open.set(true);\n this.activeIndex.set(0);\n }\n\n onKeydown(event: KeyboardEvent): void {\n switch (event.key) {\n case 'ArrowDown':\n event.preventDefault();\n if (!this.open()) return this.openList();\n this.move(1);\n break;\n case 'ArrowUp':\n event.preventDefault();\n this.move(-1);\n break;\n case 'Enter': {\n if (!this.open()) return;\n event.preventDefault();\n const opt = this.filtered()[this.activeIndex()];\n if (opt) this.commit(opt);\n break;\n }\n case 'Escape':\n if (this.open()) {\n event.preventDefault();\n this.close();\n }\n break;\n }\n }\n\n private move(delta: number): void {\n const len = this.filtered().length;\n if (!len) return;\n this.activeIndex.set((this.activeIndex() + delta + len) % len);\n }\n\n select(opt: StrctOption, event: Event): void {\n event.preventDefault(); // keep focus, avoid blur reordering\n this.commit(opt);\n }\n\n private commit(opt: StrctOption): void {\n this.value.set(opt.value);\n this.query.set(opt.label);\n this.dirty.set(false);\n this.open.set(false);\n this.onChange(opt.value);\n this.onTouched();\n }\n\n @HostListener('document:click', ['$event'])\n protected onDocClick(event: MouseEvent): void {\n if (this.open() && !this.host.nativeElement.contains(event.target as Node)) {\n this.close();\n }\n }\n\n private close(): void {\n this.open.set(false);\n this.dirty.set(false);\n this.syncQueryToValue();\n }\n\n private indexOfValue(): number {\n const idx = this.filtered().findIndex((o) => o.value === this.value());\n return idx < 0 ? 0 : idx;\n }\n\n private syncQueryToValue(): void {\n const match = this.options().find((o) => o.value === this.value());\n this.query.set(match?.label ?? '');\n }\n\n writeValue(value: unknown): void {\n this.value.set(value);\n this.syncQueryToValue();\n }\n registerOnChange(fn: (value: unknown) => void): void {\n this.onChange = fn;\n }\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n setDisabledState(isDisabled: boolean): void {\n this.isDisabled.set(isDisabled);\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n ViewEncapsulation,\n ElementRef,\n HostListener,\n computed,\n forwardRef,\n inject,\n input,\n signal,\n} from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { StrctIcon } from '../icon/icon';\nimport { StrctOverlay } from '../overlay/overlay';\n\ninterface DayCell {\n day: number;\n iso: string;\n inMonth: boolean;\n}\n\nconst MONTHS = [\n 'January',\n 'February',\n 'March',\n 'April',\n 'May',\n 'June',\n 'July',\n 'August',\n 'September',\n 'October',\n 'November',\n 'December',\n];\nconst DOW = ['Su', 'Mo', 'Tu', 'We', 'Th', 'Fr', 'Sa'];\nconst pad = (n: number) => String(n).padStart(2, '0');\nconst toIso = (y: number, m: number, d: number) => `${y}-${pad(m + 1)}-${pad(d)}`;\n\n/**\n * Calendar date picker. Value is an ISO `yyyy-mm-dd` string. CVA-compatible.\n * <strct-datepicker [(ngModel)]=\"date\" />\n */\n@Component({\n selector: 'strct-datepicker',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n imports: [StrctIcon, StrctOverlay],\n providers: [\n { provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => StrctDatepicker), multi: true },\n ],\n template: `\n <div #field class=\"strct-dp__field\">\n <input\n type=\"text\"\n class=\"strct-control strct-dp__input\"\n readonly\n [value]=\"displayLabel()\"\n [placeholder]=\"placeholder()\"\n [disabled]=\"isDisabled()\"\n (click)=\"toggle()\"\n (keydown)=\"onKeydown($event)\"\n />\n <button\n type=\"button\"\n class=\"strct-dp__icon\"\n aria-label=\"Open calendar\"\n [disabled]=\"isDisabled()\"\n (click)=\"toggle()\"\n >\n <strct-icon name=\"calendar\" [size]=\"15\" />\n </button>\n </div>\n\n @if (open()) {\n <div\n class=\"strct-dp__panel\"\n role=\"dialog\"\n [strctOverlay]=\"field\"\n strctOverlayPlacement=\"bottom-start\"\n >\n <div class=\"strct-dp__head\">\n <button\n type=\"button\"\n class=\"strct-dp__nav\"\n aria-label=\"Previous month\"\n (click)=\"shiftMonth(-1)\"\n >\n <strct-icon name=\"chevronLeft\" [size]=\"14\" [strokeWidth]=\"1.7\" />\n </button>\n <span class=\"strct-dp__title\">{{ monthLabel() }}</span>\n <button\n type=\"button\"\n class=\"strct-dp__nav\"\n aria-label=\"Next month\"\n (click)=\"shiftMonth(1)\"\n >\n <strct-icon name=\"chevronRight\" [size]=\"14\" [strokeWidth]=\"1.7\" />\n </button>\n </div>\n <div class=\"strct-dp__dow\">\n @for (d of dow; track d) {\n <span>{{ d }}</span>\n }\n </div>\n <div class=\"strct-dp__grid\">\n @for (cell of cells(); track cell.iso) {\n <button\n type=\"button\"\n class=\"strct-dp__day\"\n [class.strct-dp__day--muted]=\"!cell.inMonth\"\n [class.strct-dp__day--today]=\"cell.iso === today\"\n [class.strct-dp__day--focused]=\"cell.iso === focusedIso()\"\n [class.strct-dp__day--selected]=\"cell.iso === value()\"\n (click)=\"pick(cell.iso)\"\n >\n {{ cell.day }}\n </button>\n }\n </div>\n </div>\n }\n `,\n host: { class: 'strct-dp' },\n styles: [\n `\n .strct-dp {\n position: relative;\n display: inline-block;\n width: 100%;\n max-width: 240px;\n }\n .strct-dp__field {\n position: relative;\n }\n .strct-dp__input {\n padding-right: 36px;\n cursor: pointer;\n }\n .strct-dp__icon {\n position: absolute;\n right: 4px;\n top: 50%;\n transform: translateY(-50%);\n display: inline-flex;\n padding: 5px;\n border: 0;\n border-radius: 5px;\n background: transparent;\n color: var(--t2);\n cursor: pointer;\n }\n .strct-dp__icon:hover {\n color: var(--acc);\n background: var(--bg-3);\n }\n .strct-dp__panel {\n position: absolute;\n top: calc(100% + 5px);\n left: 0;\n z-index: 250;\n width: 250px;\n padding: 10px;\n background: var(--bg-1);\n border: 1px solid var(--b2);\n border-radius: 9px;\n box-shadow: var(--shh);\n }\n .strct-dp__head {\n display: flex;\n align-items: center;\n justify-content: space-between;\n margin-bottom: 8px;\n }\n .strct-dp__title {\n font-size: 13px;\n font-weight: 600;\n color: var(--t1);\n }\n .strct-dp__nav {\n display: inline-flex;\n padding: 5px;\n border: 0;\n border-radius: 5px;\n background: transparent;\n color: var(--t2);\n cursor: pointer;\n }\n .strct-dp__nav:hover {\n color: var(--t1);\n background: var(--bg-3);\n }\n .strct-dp__dow {\n display: grid;\n grid-template-columns: repeat(7, 1fr);\n margin-bottom: 4px;\n }\n .strct-dp__dow span {\n text-align: center;\n font-size: 10px;\n font-weight: 600;\n color: var(--t3);\n padding: 4px 0;\n }\n .strct-dp__grid {\n display: grid;\n grid-template-columns: repeat(7, 1fr);\n gap: 2px;\n }\n .strct-dp__day {\n aspect-ratio: 1;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n border: 0;\n border-radius: 6px;\n background: transparent;\n cursor: pointer;\n font-family: var(--font);\n font-size: 12px;\n color: var(--t1);\n }\n .strct-dp__day:hover {\n background: var(--bg-3);\n }\n .strct-dp__day--muted {\n color: var(--t3);\n }\n .strct-dp__day--today {\n box-shadow: inset 0 0 0 1px var(--acc30);\n }\n .strct-dp__day--focused {\n box-shadow: inset 0 0 0 2px var(--acc);\n }\n .strct-dp__day--selected {\n background: var(--acc);\n color: #fff;\n }\n .strct-dp__day--selected:hover {\n background: var(--acc);\n }\n `,\n ],\n})\nexport class StrctDatepicker implements ControlValueAccessor {\n private readonly host = inject(ElementRef<HTMLElement>);\n\n /** Placeholder text when empty. */\n readonly placeholder = input('Select a date');\n protected readonly dow = DOW;\n\n readonly value = signal('');\n readonly open = signal(false);\n readonly isDisabled = signal(false);\n /** Keyboard cursor within the open calendar. */\n readonly focusedIso = signal('');\n private readonly view = signal(this.startOfMonth(new Date()));\n\n protected get today(): string {\n const d = new Date();\n return toIso(d.getFullYear(), d.getMonth(), d.getDate());\n }\n\n protected readonly monthLabel = computed(() => {\n const v = this.view();\n return `${MONTHS[v.m]} ${v.y}`;\n });\n\n protected readonly displayLabel = computed(() => {\n const iso = this.value();\n if (!iso) return '';\n const [y, m, d] = iso.split('-').map(Number);\n return `${MONTHS[m - 1].slice(0, 3)} ${d}, ${y}`;\n });\n\n protected readonly cells = computed<DayCell[]>(() => {\n const { y, m } = this.view();\n const firstDow = new Date(y, m, 1).getDay();\n const start = new Date(y, m, 1 - firstDow);\n return Array.from({ length: 42 }, (_, i) => {\n const d = new Date(start.getFullYear(), start.getMonth(), start.getDate() + i);\n return {\n day: d.getDate(),\n iso: toIso(d.getFullYear(), d.getMonth(), d.getDate()),\n inMonth: d.getMonth() === m,\n };\n });\n });\n\n private onChange: (value: string) => void = () => {};\n private onTouched: () => void = () => {};\n\n toggle(): void {\n if (this.isDisabled()) return;\n const next = !this.open();\n this.open.set(next);\n if (next) this.syncFocus();\n }\n\n shiftMonth(delta: number): void {\n const { y, m } = this.view();\n this.view.set(this.startOfMonth(new Date(y, m + delta, 1)));\n }\n\n pick(iso: string): void {\n this.value.set(iso);\n this.focusedIso.set(iso);\n const [y, m] = iso.split('-').map(Number);\n this.view.set({ y, m: m - 1 });\n this.open.set(false);\n this.onChange(iso);\n this.onTouched();\n }\n\n onKeydown(event: KeyboardEvent): void {\n if (this.isDisabled()) return;\n if (!this.open()) {\n if (event.key === 'ArrowDown' || event.key === 'Enter' || event.key === ' ') {\n event.preventDefault();\n this.toggle();\n }\n return;\n }\n switch (event.key) {\n case 'ArrowLeft':\n event.preventDefault();\n this.shiftFocus(-1);\n break;\n case 'ArrowRight':\n event.preventDefault();\n this.shiftFocus(1);\n break;\n case 'ArrowUp':\n event.preventDefault();\n this.shiftFocus(-7);\n break;\n case 'ArrowDown':\n event.preventDefault();\n this.shiftFocus(7);\n break;\n case 'PageUp':\n event.preventDefault();\n this.shiftFocus(0, -1);\n break;\n case 'PageDown':\n event.preventDefault();\n this.shiftFocus(0, 1);\n break;\n case 'Enter':\n case ' ':\n event.preventDefault();\n if (this.focusedIso()) this.pick(this.focusedIso());\n break;\n case 'Escape':\n event.preventDefault();\n this.open.set(false);\n break;\n }\n }\n\n private syncFocus(): void {\n const base = this.value() || this.today;\n this.focusedIso.set(base);\n const [y, m] = base.split('-').map(Number);\n this.view.set({ y, m: m - 1 });\n }\n\n private shiftFocus(days: number, months = 0): void {\n const [y, m, d] = (this.focusedIso() || this.today).split('-').map(Number);\n const next = new Date(y, m - 1 + months, d + days);\n this.focusedIso.set(toIso(next.getFullYear(), next.getMonth(), next.getDate()));\n this.view.set({ y: next.getFullYear(), m: next.getMonth() });\n }\n\n @HostListener('document:click', ['$event'])\n protected onDocClick(event: MouseEvent): void {\n if (this.open() && !this.host.nativeElement.contains(event.target as Node)) {\n this.open.set(false);\n }\n }\n\n @HostListener('document:keydown.escape')\n protected onEscape(): void {\n this.open.set(false);\n }\n\n private startOfMonth(date: Date): { y: number; m: number } {\n return { y: date.getFullYear(), m: date.getMonth() };\n }\n\n writeValue(value: string): void {\n this.value.set(value || '');\n if (value) {\n const [y, m] = value.split('-').map(Number);\n if (y && m) this.view.set({ y, m: m - 1 });\n }\n }\n registerOnChange(fn: (value: string) => void): void {\n this.onChange = fn;\n }\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n setDisabledState(isDisabled: boolean): void {\n this.isDisabled.set(isDisabled);\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n ViewEncapsulation,\n ElementRef,\n HostListener,\n forwardRef,\n inject,\n input,\n signal,\n} from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { StrctOverlay } from '../overlay/overlay';\n\nconst DEFAULT_SWATCHES = [\n '#7b9ec8',\n '#5a7ea3',\n '#7da87e',\n '#5e8a60',\n '#bfae6a',\n '#9a8a3e',\n '#b87872',\n '#a0635c',\n '#96724e',\n '#c49a6c',\n '#8d7bc8',\n '#5a5a64',\n];\n\nconst HEX = /^#([0-9a-f]{6})$/i;\n\n/**\n * Swatch-based color picker with a hex field. CVA value is a `#rrggbb` string.\n * <strct-color-picker [(ngModel)]=\"color\" />\n */\n@Component({\n selector: 'strct-color-picker',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n imports: [StrctOverlay],\n providers: [\n { provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => StrctColorPicker), multi: true },\n ],\n template: `\n <button\n #trigger\n type=\"button\"\n class=\"strct-cp__trigger\"\n [disabled]=\"isDisabled()\"\n [attr.aria-expanded]=\"open()\"\n (click)=\"toggle()\"\n >\n <span class=\"strct-cp__swatch\" [style.background]=\"value() || 'transparent'\"></span>\n <span class=\"strct-cp__value\">{{ value() || 'Pick a color' }}</span>\n </button>\n\n @if (open()) {\n <div\n class=\"strct-cp__panel\"\n role=\"dialog\"\n [strctOverlay]=\"trigger\"\n strctOverlayPlacement=\"bottom-start\"\n >\n <div class=\"strct-cp__grid\">\n @for (color of swatches(); track color) {\n <button\n type=\"button\"\n class=\"strct-cp__chip\"\n [class.strct-cp__chip--active]=\"eq(color)\"\n [style.background]=\"color\"\n [attr.aria-label]=\"color\"\n (click)=\"pick(color)\"\n ></button>\n }\n </div>\n <input\n class=\"strct-control strct-cp__hex\"\n spellcheck=\"false\"\n placeholder=\"#000000\"\n [value]=\"draft()\"\n (input)=\"onHex($event)\"\n />\n </div>\n }\n `,\n host: { class: 'strct-cp' },\n styles: [\n `\n .strct-cp {\n position: relative;\n display: inline-block;\n }\n .strct-cp__trigger {\n display: inline-flex;\n align-items: center;\n gap: 9px;\n padding: 6px 11px 6px 7px;\n border-radius: 6px;\n cursor: pointer;\n font-family: var(--font);\n font-size: 13px;\n color: var(--t1);\n background: var(--bg-2);\n border: 1px solid var(--b2);\n }\n .strct-cp__trigger:hover {\n border-color: var(--b3);\n }\n .strct-cp__swatch {\n width: 20px;\n height: 20px;\n border-radius: 5px;\n flex-shrink: 0;\n border: 1px solid var(--b3);\n background-clip: padding-box;\n }\n .strct-cp__value {\n font-family: var(--mono);\n font-size: 12px;\n }\n .strct-cp__panel {\n position: absolute;\n top: calc(100% + 5px);\n left: 0;\n z-index: 250;\n width: 196px;\n padding: 10px;\n background: var(--bg-1);\n border: 1px solid var(--b2);\n border-radius: 9px;\n box-shadow: var(--shh);\n }\n .strct-cp__grid {\n display: grid;\n grid-template-columns: repeat(6, 1fr);\n gap: 6px;\n margin-bottom: 9px;\n }\n .strct-cp__chip {\n aspect-ratio: 1;\n border-radius: 5px;\n cursor: pointer;\n padding: 0;\n border: 1px solid var(--b2);\n background-clip: padding-box;\n transition: transform 0.12s ease;\n }\n .strct-cp__chip:hover {\n transform: scale(1.1);\n }\n .strct-cp__chip--active {\n box-shadow:\n 0 0 0 2px var(--bg-1),\n 0 0 0 4px var(--acc);\n }\n .strct-cp__hex {\n font-family: var(--mono);\n font-size: 12px;\n text-transform: lowercase;\n }\n `,\n ],\n})\nexport class StrctColorPicker implements ControlValueAccessor {\n private readonly host = inject(ElementRef<HTMLElement>);\n /** Custom palette swatches. */\n readonly swatches = input<string[]>(DEFAULT_SWATCHES);\n\n readonly value = signal('');\n readonly draft = signal('');\n readonly open = signal(false);\n readonly isDisabled = signal(false);\n\n private onChange: (value: string) => void = () => {};\n private onTouched: () => void = () => {};\n\n toggle(): void {\n if (this.isDisabled()) return;\n this.draft.set(this.value());\n this.open.update((v) => !v);\n }\n\n protected eq(color: string): boolean {\n return color.toLowerCase() === this.value().toLowerCase();\n }\n\n pick(color: string): void {\n this.commit(color);\n this.open.set(false);\n }\n\n onHex(event: Event): void {\n const raw = (event.target as HTMLInputElement).value.trim();\n this.draft.set(raw);\n if (HEX.test(raw)) this.commit(raw.toLowerCase());\n }\n\n private commit(color: string): void {\n this.value.set(color);\n this.draft.set(color);\n this.onChange(color);\n this.onTouched();\n }\n\n @HostListener('document:click', ['$event'])\n protected onDocClick(event: MouseEvent): void {\n if (this.open() && !this.host.nativeElement.contains(event.target as Node)) {\n this.open.set(false);\n }\n }\n\n @HostListener('document:keydown.escape')\n protected onEscape(): void {\n this.open.set(false);\n }\n\n writeValue(value: string): void {\n this.value.set(value || '');\n this.draft.set(value || '');\n }\n registerOnChange(fn: (value: string) => void): void {\n this.onChange = fn;\n }\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n setDisabledState(isDisabled: boolean): void {\n this.isDisabled.set(isDisabled);\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n ViewEncapsulation,\n ElementRef,\n HostListener,\n computed,\n forwardRef,\n inject,\n input,\n signal,\n} from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { StrctIcon } from '../icon/icon';\nimport { StrctOverlay } from '../overlay/overlay';\n\n/** One option in a cascade select. */\nexport interface StrctCascadeOption {\n label: string;\n value?: unknown;\n children?: StrctCascadeOption[];\n}\n\n/** DI token the nodes use to talk back to the host control (avoids a circular type). */\nexport abstract class StrctCascadeHost {\n abstract pick(value: unknown): void;\n abstract isSelected(value: unknown): boolean;\n}\n\n/**\n * One row in the cascade. Leaf rows select on click; group rows reveal a\n * fly-out of their children on hover. Recurses to any depth.\n */\n@Component({\n selector: 'strct-cascade-node',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n imports: [StrctIcon, forwardRef(() => StrctCascadeNode)],\n template: `\n <div\n class=\"strct-csn\"\n [class.strct-csn--selected]=\"isLeafSelected()\"\n role=\"menuitem\"\n tabindex=\"0\"\n (mouseenter)=\"hasChildren() && open.set(true)\"\n (mouseleave)=\"open.set(false)\"\n (click)=\"onClick($event)\"\n (keydown.enter)=\"onClick($event)\"\n (keydown.space)=\"onClick($event)\"\n >\n <span class=\"strct-csn__label\">{{ option().label }}</span>\n @if (hasChildren()) {\n <strct-icon class=\"strct-csn__arrow\" name=\"chevronRight\" [size]=\"12\" [strokeWidth]=\"1.6\" />\n }\n @if (hasChildren() && open()) {\n <div class=\"strct-csn__flyout\" role=\"menu\">\n @for (child of option().children; track child) {\n <strct-cascade-node [option]=\"child\" />\n }\n </div>\n }\n </div>\n `,\n styles: [\n `\n .strct-csn {\n position: relative;\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 7px 8px 7px 10px;\n border-radius: 5px;\n cursor: pointer;\n font-size: 13px;\n color: var(--t1);\n }\n .strct-csn:hover {\n background: var(--bg-3);\n }\n .strct-csn--selected {\n color: var(--acc);\n background: var(--acc-m);\n }\n .strct-csn__label {\n flex: 1;\n white-space: nowrap;\n }\n .strct-csn__arrow {\n color: var(--t3);\n }\n .strct-csn__flyout {\n position: absolute;\n top: -5px;\n left: 100%;\n z-index: 1;\n min-width: 160px;\n margin-left: 2px;\n padding: 4px;\n background: var(--bg-1);\n border: 1px solid var(--b2);\n border-radius: 7px;\n box-shadow: var(--shh);\n }\n `,\n ],\n})\nexport class StrctCascadeNode {\n private readonly host = inject(StrctCascadeHost);\n /** Option. */\n readonly option = input.required<StrctCascadeOption>();\n readonly open = signal(false);\n\n protected readonly hasChildren = computed(() => !!this.option().children?.length);\n protected readonly isLeafSelected = computed(\n () => !this.hasChildren() && this.host.isSelected(this.option().value),\n );\n\n protected onClick(event: Event): void {\n if (this.hasChildren()) {\n event.stopPropagation(); // group rows only expand\n } else {\n this.host.pick(this.option().value);\n }\n }\n}\n\n/**\n * Hierarchical single-select — pick a leaf from nested groups (e.g. a port\n * group under a virtual switch). CVA-compatible.\n * <strct-cascade-select [options]=\"switches\" [(ngModel)]=\"portGroup\" />\n */\n@Component({\n selector: 'strct-cascade-select',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n imports: [StrctCascadeNode, StrctIcon, StrctOverlay],\n providers: [\n { provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => StrctCascadeSelect), multi: true },\n { provide: StrctCascadeHost, useExisting: forwardRef(() => StrctCascadeSelect) },\n ],\n template: `\n <button\n #trigger\n type=\"button\"\n class=\"strct-cs__trigger\"\n [attr.aria-expanded]=\"open()\"\n [disabled]=\"isDisabled()\"\n (click)=\"toggle()\"\n >\n <span class=\"strct-cs__value\" [class.strct-cs__value--empty]=\"!selectedLabel()\">\n {{ selectedLabel() || placeholder() }}\n </span>\n <strct-icon class=\"strct-cs__caret\" name=\"chevronDown\" [size]=\"14\" />\n </button>\n @if (open()) {\n <div\n class=\"strct-cs__panel\"\n role=\"menu\"\n [strctOverlay]=\"trigger\"\n strctOverlayPlacement=\"bottom-start\"\n >\n @for (opt of options(); track opt) {\n <strct-cascade-node [option]=\"opt\" />\n }\n </div>\n }\n `,\n host: { class: 'strct-cs' },\n styles: [\n `\n .strct-cs {\n position: relative;\n display: inline-block;\n width: 100%;\n max-width: 280px;\n }\n .strct-cs__trigger {\n display: flex;\n align-items: center;\n gap: 8px;\n width: 100%;\n padding: 7px 10px;\n border-radius: 6px;\n cursor: pointer;\n font-family: var(--font);\n font-size: 13px;\n color: var(--t1);\n background: var(--bg-2);\n border: 1px solid var(--b2);\n text-align: left;\n }\n .strct-cs__trigger:hover {\n border-color: var(--b3);\n }\n .strct-cs__value {\n flex: 1;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n }\n .strct-cs__value--empty {\n color: var(--t3);\n }\n .strct-cs__caret {\n color: var(--t3);\n }\n .strct-cs__panel {\n position: absolute;\n top: calc(100% + 4px);\n left: 0;\n z-index: 200;\n min-width: 180px;\n padding: 4px;\n background: var(--bg-1);\n border: 1px solid var(--b2);\n border-radius: 7px;\n box-shadow: var(--shh);\n }\n `,\n ],\n})\nexport class StrctCascadeSelect extends StrctCascadeHost implements ControlValueAccessor {\n private readonly elementRef = inject(ElementRef<HTMLElement>);\n\n /** Available options. */\n readonly options = input<StrctCascadeOption[]>([]);\n /** Placeholder text when empty. */\n readonly placeholder = input('Select…');\n\n readonly value = signal<unknown>(null);\n readonly open = signal(false);\n readonly isDisabled = signal(false);\n\n protected readonly selectedLabel = computed(() => this.findLabel(this.options(), this.value()));\n\n private onChange: (value: unknown) => void = () => {};\n private onTouched: () => void = () => {};\n\n toggle(): void {\n if (!this.isDisabled()) this.open.update((v) => !v);\n }\n\n override pick(value: unknown): void {\n this.value.set(value);\n this.open.set(false);\n this.onChange(value);\n this.onTouched();\n }\n\n override isSelected(value: unknown): boolean {\n return value !== undefined && value === this.value();\n }\n\n private findLabel(opts: StrctCascadeOption[], value: unknown): string {\n for (const o of opts) {\n if (o.value !== undefined && o.value === value) return o.label;\n if (o.children) {\n const found = this.findLabel(o.children, value);\n if (found) return found;\n }\n }\n return '';\n }\n\n @HostListener('document:click', ['$event'])\n protected onDocClick(event: MouseEvent): void {\n if (this.open() && !this.elementRef.nativeElement.contains(event.target as Node)) {\n this.open.set(false);\n }\n }\n\n @HostListener('document:keydown.escape')\n protected onEscape(): void {\n this.open.set(false);\n }\n\n writeValue(value: unknown): void {\n this.value.set(value);\n }\n registerOnChange(fn: (value: unknown) => void): void {\n this.onChange = fn;\n }\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n setDisabledState(isDisabled: boolean): void {\n this.isDisabled.set(isDisabled);\n }\n}\n","import { NgTemplateOutlet } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n Directive,\n TemplateRef,\n booleanAttribute,\n computed,\n contentChildren,\n inject,\n input,\n} from '@angular/core';\n\n/** Column definition for the table. */\nexport interface StrctColumn {\n key: string;\n label: string;\n align?: 'start' | 'center' | 'end';\n width?: string;\n}\n\n/** Shorthand for a record-shaped table/datagrid row. */\nexport type StrctRow = Record<string, unknown>;\n\n/** Context passed to a per-column cell template. */\nexport interface StrctCellContext {\n /** The row object. */\n $implicit: StrctRow;\n /** The raw value for this column (`row[column.key]`). */\n value: unknown;\n /** The column definition. */\n column: StrctColumn;\n}\n\n/**\n * Per-column cell template for `strct-table` / `strct-datagrid`. The column key\n * is the directive value; the row, value and column are the template context:\n *\n * <ng-template strctCell=\"status\" let-row let-value=\"value\">\n * <strct-badge [status]=\"row['success'] ? 'success' : 'critical'\">{{ value }}</strct-badge>\n * </ng-template>\n */\n@Directive({ selector: '[strctCell]' })\nexport class StrctCellDef {\n /** Key. */\n readonly key = input.required<string>({ alias: 'strctCell' });\n readonly template = inject<TemplateRef<StrctCellContext>>(TemplateRef);\n}\n\n/**\n * Declarative data table. Cells render `row[col.key]` as text by default; supply\n * a `*strctCell` template per column for custom content.\n * <strct-table [columns]=\"cols\" [rows]=\"data\" hover />\n */\n@Component({\n selector: 'strct-table',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [NgTemplateOutlet],\n template: `\n <table class=\"strct-table\">\n <thead>\n <tr>\n @for (col of columns(); track col.key) {\n <th [style.text-align]=\"col.align ?? 'start'\" [style.width]=\"col.width\">\n {{ col.label }}\n </th>\n }\n </tr>\n </thead>\n <tbody>\n @if (loading()) {\n @for (_ of [1, 2, 3]; track $index) {\n <tr class=\"strct-table__skeleton-row\">\n @for (col of columns(); track col.key) {\n <td [style.text-align]=\"col.align ?? 'start'\">\n <div class=\"strct-table__skeleton-block\"></div>\n </td>\n }\n </tr>\n }\n } @else {\n @for (row of rows(); track $index) {\n <tr>\n @for (col of columns(); track col.key) {\n <td [style.text-align]=\"col.align ?? 'start'\">\n @if (cellTemplate(col.key); as tpl) {\n <ng-container\n [ngTemplateOutlet]=\"tpl\"\n [ngTemplateOutletContext]=\"{\n $implicit: row,\n value: row[col.key],\n column: col,\n }\"\n />\n } @else {\n {{ row[col.key] }}\n }\n </td>\n }\n </tr>\n } @empty {\n <tr>\n <td class=\"strct-table__empty\" [attr.colspan]=\"columns().length\">\n {{ emptyText() }}\n </td>\n </tr>\n }\n }\n </tbody>\n </table>\n `,\n host: {\n class: 'strct-table-host',\n '[class.strct-table-host--striped]': 'striped()',\n '[class.strct-table-host--hover]': 'hover()',\n },\n styles: [\n `\n .strct-table-host {\n display: block;\n overflow-x: auto;\n }\n .strct-table {\n width: 100%;\n border-collapse: collapse;\n font-size: 13px;\n border: 1px solid var(--b2);\n border-radius: 8px;\n overflow: hidden;\n }\n .strct-table th,\n .strct-table td {\n padding: 9px 13px;\n text-align: left;\n border-bottom: 1px solid var(--b1);\n }\n .strct-table th {\n font-size: 11px;\n font-weight: 600;\n text-transform: uppercase;\n letter-spacing: 0.4px;\n color: var(--t2);\n background: var(--bg-2);\n }\n .strct-table td {\n color: var(--t1);\n }\n .strct-table tbody tr:last-child td {\n border-bottom: 0;\n }\n .strct-table-host--striped tbody tr:nth-child(even) td {\n background: var(--bg-2);\n }\n .strct-table-host--hover tbody tr:hover td {\n background: var(--acc-s);\n }\n @keyframes strct-skeleton-pulse {\n 0%,\n 100% {\n opacity: 0.4;\n }\n 50% {\n opacity: 0.7;\n }\n }\n .strct-table__skeleton-block {\n height: 12px;\n background: var(--bg-3);\n border-radius: var(--radius-sm);\n animation: strct-skeleton-pulse 1.4s ease infinite;\n }\n .strct-table__skeleton-row td {\n border-bottom: 1px solid var(--b1);\n }\n .strct-table__empty {\n text-align: center;\n color: var(--t3);\n padding: 22px;\n }\n `,\n ],\n})\nexport class StrctTable {\n /** Column definitions. */\n readonly columns = input.required<StrctColumn[]>();\n /** Data rows. */\n readonly rows = input.required<StrctRow[]>();\n /** Enable zebra-striping. */\n readonly striped = input(false, { transform: booleanAttribute });\n /** Highlight rows on hover. */\n readonly hover = input(false, { transform: booleanAttribute });\n /** Message shown when there are no rows. */\n readonly emptyText = input('No data');\n /** Show skeleton rows while data is loading. */\n readonly loading = input(false, { transform: booleanAttribute });\n\n private readonly cellDefs = contentChildren(StrctCellDef);\n private readonly cellMap = computed(() => {\n const m = new Map<string, TemplateRef<StrctCellContext>>();\n for (const d of this.cellDefs()) m.set(d.key(), d.template);\n return m;\n });\n\n protected cellTemplate(key: string): TemplateRef<StrctCellContext> | null {\n return this.cellMap().get(key) ?? null;\n }\n}\n","import { NgTemplateOutlet } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n Directive,\n TemplateRef,\n ViewEncapsulation,\n booleanAttribute,\n computed,\n contentChild,\n contentChildren,\n effect,\n inject,\n input,\n output,\n signal,\n} from '@angular/core';\nimport { StrctIcon } from '../icon/icon';\nimport { StrctPagination } from '../pagination/pagination';\nimport { StrctCheckbox } from '../forms/checkbox';\nimport { StrctButton } from '../button/button';\nimport { StrctCellContext, StrctCellDef, StrctRow } from '../table/table';\n\n/** Resolves a stable identity for a row: a property key, or a function. */\nexport type StrctRowId = string | ((row: StrctRow) => unknown);\n\n/** Column definition for the datagrid. */\nexport interface StrctDatagridColumn {\n key: string;\n label: string;\n sortable?: boolean;\n align?: 'start' | 'center' | 'end';\n width?: string;\n /** Allow the user to resize this column by dragging its right edge.\n * Defaults to the global {@link StrctDatagrid#resizable} setting. */\n resizable?: boolean;\n}\n\ntype SortDir = 'asc' | 'desc';\n\n/**\n * Marks the expandable-row detail template. The row is the template's implicit\n * context: `<ng-template strctRowDetail let-row> … {{ row['name'] }} … </ng-template>`.\n */\n@Directive({ selector: '[strctRowDetail]' })\nexport class StrctRowDetailDef {\n readonly template = inject(TemplateRef);\n}\n\n/** Marks the persistent action-bar (toolbar) content shown above the grid. */\n@Directive({ selector: '[strctDatagridActionBar]' })\nexport class StrctDatagridActionBar {}\n\n/**\n * Interactive data table: sortable columns, row selection, expandable detail\n * rows, a batch action bar and built-in paging.\n * <strct-datagrid [columns]=\"cols\" [rows]=\"data\" selectable expandable [pageSize]=\"10\">\n * <button strct-button strctDatagridActions size=\"sm\">Migrate</button>\n * <ng-template strctRowDetail let-row> … </ng-template>\n * </strct-datagrid>\n */\n@Component({\n selector: 'strct-datagrid',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n imports: [StrctIcon, StrctPagination, NgTemplateOutlet, StrctCheckbox, StrctButton],\n template: `\n @if (actionBarDef()) {\n <div class=\"strct-dg__toolbar\"><ng-content select=\"[strctDatagridActionBar]\" /></div>\n }\n\n <div class=\"strct-dg__layout\" [class.strct-dg__layout--paned]=\"paneOpen()\">\n <div class=\"strct-dg__scroll\">\n <table class=\"strct-dg\">\n <thead>\n <tr>\n @if (canDetail()) {\n <th class=\"strct-dg__expandcol\"></th>\n }\n @if (canExpand()) {\n <th class=\"strct-dg__expandcol\"></th>\n }\n @if (selectable()) {\n <th class=\"strct-dg__sel\">\n <strct-checkbox\n ariaLabel=\"Select all rows on this page\"\n [checked]=\"allPageSelected()\"\n [indeterminate]=\"somePageSelected()\"\n (checkedChange)=\"toggleAll()\"\n />\n </th>\n }\n @for (col of visibleColumns(); track col.key) {\n <th\n [style.text-align]=\"col.align ?? 'start'\"\n [style.width]=\"colWidth(col.key) ?? col.width ?? null\"\n [class.strct-dg__th--sortable]=\"col.sortable\"\n [attr.tabindex]=\"col.sortable ? 0 : null\"\n [attr.aria-sort]=\"col.sortable ? ariaSort(col.key) : null\"\n (click)=\"col.sortable && sortBy(col.key)\"\n (keydown.enter)=\"col.sortable && sortBy(col.key)\"\n (keydown.space)=\"col.sortable && onHeaderSpace($event, col.key)\"\n >\n <span class=\"strct-dg__hd\">\n {{ col.label }}\n @if (col.sortable) {\n <strct-icon\n class=\"strct-dg__sorticon\"\n [name]=\"sortIcon(col.key)\"\n [size]=\"13\"\n />\n }\n </span>\n @if (resizable() && col.resizable !== false) {\n <div\n class=\"strct-dg__resize\"\n (mousedown)=\"onResizeStart($event, col.key)\"\n ></div>\n }\n </th>\n }\n </tr>\n </thead>\n <tbody>\n @if (loading()) {\n @for (_ of [1, 2, 3, 4, 5]; track $index) {\n <tr class=\"strct-dg__skeleton-row\">\n @if (canDetail()) {\n <td class=\"strct-dg__expandcell\"></td>\n }\n @if (canExpand()) {\n <td class=\"strct-dg__expandcell\"></td>\n }\n @if (selectable()) {\n <td class=\"strct-dg__sel\"></td>\n }\n @for (col of visibleColumns(); track col.key) {\n <td [style.text-align]=\"col.align ?? 'start'\">\n <div class=\"strct-dg__skeleton-block\"></div>\n </td>\n }\n </tr>\n }\n } @else {\n @for (row of paged(); track rowKey(row)) {\n <tr\n [class.strct-dg__row--selected]=\"isSelected(row)\"\n [class.strct-dg__row--active]=\"paneOpen() && row === activeRow()\"\n >\n @if (canDetail()) {\n <td class=\"strct-dg__expandcell\">\n <button\n type=\"button\"\n class=\"strct-dg__detailbtn\"\n [class.strct-dg__detailbtn--active]=\"row === activeRow()\"\n [attr.aria-expanded]=\"row === activeRow()\"\n aria-label=\"Open detail\"\n (click)=\"openDetail(row)\"\n >\n <strct-icon name=\"chevronDoubleRight\" [size]=\"13\" [strokeWidth]=\"1.6\" />\n </button>\n </td>\n }\n @if (canExpand()) {\n <td class=\"strct-dg__expandcell\">\n <button\n type=\"button\"\n class=\"strct-dg__expandbtn\"\n [class.strct-dg__expandbtn--open]=\"isExpanded(row)\"\n [attr.aria-expanded]=\"isExpanded(row)\"\n aria-label=\"Toggle detail\"\n (click)=\"toggleExpand(row)\"\n >\n <strct-icon name=\"chevronRight\" [size]=\"12\" [strokeWidth]=\"1.7\" />\n </button>\n </td>\n }\n @if (selectable()) {\n <td class=\"strct-dg__sel\">\n <strct-checkbox\n ariaLabel=\"Select row\"\n [checked]=\"isSelected(row)\"\n (checkedChange)=\"toggleRow(row)\"\n />\n </td>\n }\n @for (col of visibleColumns(); track col.key) {\n <td [style.text-align]=\"col.align ?? 'start'\">\n @if (cellTemplate(col.key); as tpl) {\n <ng-container\n [ngTemplateOutlet]=\"tpl\"\n [ngTemplateOutletContext]=\"{\n $implicit: row,\n value: row[col.key],\n column: col,\n }\"\n />\n } @else {\n {{ row[col.key] }}\n }\n </td>\n }\n </tr>\n @if (canExpand() && isExpanded(row)) {\n <tr class=\"strct-dg__detailrow\">\n <td [attr.colspan]=\"colspan()\">\n <div class=\"strct-dg__detail\">\n <ng-container\n [ngTemplateOutlet]=\"detailDef()!.template\"\n [ngTemplateOutletContext]=\"{ $implicit: row }\"\n />\n </div>\n </td>\n </tr>\n }\n } @empty {\n <tr>\n <td class=\"strct-dg__empty\" [attr.colspan]=\"colspan()\">{{ emptyText() }}</td>\n </tr>\n }\n }\n </tbody>\n </table>\n </div>\n\n @if (paneOpen()) {\n <aside class=\"strct-dg__pane\">\n <div class=\"strct-dg__pane-head\">\n <span class=\"strct-dg__pane-title\">{{ activeRow()![columns()[0].key] }}</span>\n <button\n type=\"button\"\n class=\"strct-dg__pane-close\"\n aria-label=\"Close detail\"\n (click)=\"closePane()\"\n >\n <strct-icon name=\"close\" [size]=\"13\" />\n </button>\n </div>\n <div class=\"strct-dg__pane-body\">\n <ng-container\n [ngTemplateOutlet]=\"detailDef()!.template\"\n [ngTemplateOutletContext]=\"{ $implicit: activeRow() }\"\n />\n </div>\n </aside>\n }\n </div>\n\n @if (pageSize() > 0 && !loading()) {\n <div class=\"strct-dg__foot\">\n <div class=\"strct-dg__foot-left\">\n @if (columnChooser()) {\n <div class=\"strct-dg__chooser\">\n <button\n strct-button\n size=\"sm\"\n [class.is-open]=\"chooserOpen()\"\n aria-label=\"Choose columns\"\n (click)=\"chooserOpen.set(!chooserOpen())\"\n >\n <strct-icon name=\"settings\" [size]=\"14\" />\n </button>\n @if (chooserOpen()) {\n <div class=\"strct-dg__chooser-menu\">\n @for (col of columns(); track col.key) {\n <div class=\"strct-dg__chooser-item\">\n <strct-checkbox\n [checked]=\"!hiddenColumns().has(col.key)\"\n (checkedChange)=\"toggleColumn(col.key, $event)\"\n />\n <span>{{ col.label }}</span>\n </div>\n }\n </div>\n }\n </div>\n }\n <span class=\"strct-dg__count\">\n {{ sorted().length }} {{ sorted().length === 1 ? 'row' : 'rows' }}\n @if (selectedCount()) {\n <span class=\"strct-dg__count-sep\">|</span>\n <span class=\"strct-dg__count-sel\">{{ selectedCount() }} selected</span>\n }\n </span>\n </div>\n <div class=\"strct-dg__foot-right\">\n <strct-pagination [total]=\"sorted().length\" [pageSize]=\"pageSize()\" [(page)]=\"page\" />\n </div>\n </div>\n }\n `,\n host: {\n class: 'strct-dg-host',\n '[class.strct-dg-host--compact]': 'compact()',\n },\n styles: [\n `\n .strct-dg-host {\n display: block;\n }\n .strct-dg__scroll {\n flex: 1 1 auto;\n min-width: 0;\n overflow-x: auto;\n -webkit-overflow-scrolling: touch;\n }\n .strct-dg {\n width: 100%;\n border-collapse: collapse;\n font-size: 13px;\n border: 1px solid var(--b2);\n border-radius: 8px;\n overflow: hidden;\n box-shadow: var(--shadow-rest);\n background: var(--bg-2);\n }\n .strct-dg th,\n .strct-dg td {\n padding: 9px 13px;\n text-align: left;\n border-bottom: 1px solid var(--b1);\n }\n .strct-dg tbody td {\n background: var(--bg-1);\n }\n /* In dark mode, body cells should read slightly lighter than the header\n * so the grid feels like a raised surface rather than a recessed pit. */\n [data-theme='dark'] .strct-dg tbody td {\n background: var(--bg-3);\n }\n .strct-dg-host--compact .strct-dg th,\n .strct-dg-host--compact .strct-dg td {\n padding: 5px 11px;\n }\n .strct-dg th {\n position: relative;\n font-size: 11px;\n font-weight: 600;\n text-transform: uppercase;\n letter-spacing: 0.4px;\n color: var(--t2);\n background: var(--bg-2);\n white-space: nowrap;\n user-select: none;\n }\n .strct-dg__th--sortable {\n cursor: pointer;\n }\n .strct-dg__th--sortable:hover {\n color: var(--t1);\n }\n .strct-dg__th--sortable:focus-visible {\n outline: 2px solid var(--acc50);\n outline-offset: -2px;\n }\n .strct-dg__hd {\n display: inline-flex;\n align-items: center;\n gap: 5px;\n }\n .strct-dg__sorticon {\n color: var(--t3);\n }\n .strct-dg__th--sortable:hover .strct-dg__sorticon {\n color: var(--acc);\n }\n .strct-dg__resize {\n position: absolute;\n right: 0;\n top: 0;\n bottom: 0;\n width: 4px;\n cursor: col-resize;\n background: transparent;\n z-index: 2;\n }\n .strct-dg__resize:hover {\n background: var(--acc);\n }\n .strct-dg td {\n color: var(--t1);\n }\n .strct-dg tbody tr:last-child td {\n border-bottom: 0;\n }\n .strct-dg tbody tr:not(.strct-dg__detailrow):hover td {\n background: var(--acc-s);\n }\n .strct-dg__row--selected td {\n background: var(--acc-m);\n }\n .strct-dg__sel {\n width: 1%;\n white-space: nowrap;\n }\n .strct-dg__sel input {\n accent-color: var(--acc);\n width: 15px;\n height: 15px;\n cursor: pointer;\n }\n\n .strct-dg__expandcol,\n .strct-dg__expandcell {\n width: 1%;\n white-space: nowrap;\n }\n .strct-dg__expandbtn {\n display: inline-flex;\n padding: 3px;\n border: 0;\n border-radius: 4px;\n background: transparent;\n color: var(--t3);\n cursor: pointer;\n transition:\n transform 0.15s ease,\n color 0.15s ease;\n }\n .strct-dg__expandbtn:hover {\n color: var(--t1);\n background: var(--bg-3);\n }\n .strct-dg__expandbtn--open {\n transform: rotate(90deg);\n color: var(--acc);\n }\n .strct-dg__detailbtn {\n display: inline-flex;\n padding: 3px;\n border: 0;\n border-radius: 4px;\n background: transparent;\n color: var(--t3);\n cursor: pointer;\n transition:\n color 0.14s ease,\n background 0.14s ease;\n }\n .strct-dg__detailbtn:hover {\n color: var(--acc);\n background: var(--bg-3);\n }\n .strct-dg__detailbtn--active {\n color: var(--acc);\n background: var(--acc-m);\n }\n .strct-dg__detailrow td {\n background: var(--bg-2);\n padding: 0;\n }\n .strct-dg__detail {\n padding: 14px 16px;\n font-size: 13px;\n color: var(--t2);\n }\n\n /* Detail pane: grid collapses to one column, content opens beside it. */\n .strct-dg__layout {\n display: flex;\n align-items: flex-start;\n min-width: 0;\n }\n .strct-dg__layout--paned {\n gap: 0;\n }\n .strct-dg__layout--paned .strct-dg__scroll {\n flex: 0 0 auto;\n width: 260px;\n min-width: 260px;\n max-width: 260px;\n }\n .strct-dg__layout--paned .strct-dg {\n width: 260px;\n min-width: 260px;\n max-width: 260px;\n flex-shrink: 0;\n border-top-right-radius: 0;\n border-bottom-right-radius: 0;\n }\n .strct-dg__row--clickable {\n cursor: pointer;\n }\n .strct-dg__row--active td {\n background: var(--acc-m);\n }\n /* Caret on the active row that points toward the open detail pane. */\n .strct-dg__layout--paned .strct-dg__row--active td:last-child {\n position: relative;\n padding-right: 26px;\n }\n .strct-dg__layout--paned .strct-dg__row--active td:last-child::after {\n content: '';\n position: absolute;\n right: 11px;\n top: 50%;\n width: 6px;\n height: 6px;\n border-top: 1.6px solid var(--acc);\n border-right: 1.6px solid var(--acc);\n transform: translateY(-50%) rotate(45deg);\n }\n .strct-dg__pane {\n flex: 1;\n min-width: 0;\n align-self: stretch;\n background: var(--bg-1);\n border: 1px solid var(--b2);\n border-left: 2px solid var(--acc);\n border-radius: 8px;\n border-top-left-radius: 0;\n border-bottom-left-radius: 0;\n overflow: hidden;\n animation: strct-dg-pane-in 0.14s ease;\n }\n .strct-dg__pane-head {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: 10px;\n padding: 11px 14px;\n border-bottom: 1px solid var(--b1);\n font-size: 13px;\n font-weight: 600;\n color: var(--t1);\n }\n .strct-dg__pane-close {\n display: inline-flex;\n padding: 3px;\n border: 0;\n border-radius: 4px;\n background: transparent;\n color: var(--t3);\n cursor: pointer;\n }\n .strct-dg__pane-close:hover {\n color: var(--t1);\n background: var(--bg-3);\n }\n .strct-dg__pane-body {\n padding: 14px 16px;\n font-size: 13px;\n color: var(--t2);\n }\n @keyframes strct-dg-pane-in {\n from {\n opacity: 0;\n transform: translateX(8px);\n }\n }\n\n @keyframes strct-skeleton-pulse {\n 0%,\n 100% {\n opacity: 0.4;\n }\n 50% {\n opacity: 0.7;\n }\n }\n .strct-dg__skeleton-block {\n height: 12px;\n background: var(--bg-3);\n border-radius: var(--radius-sm);\n animation: strct-skeleton-pulse 1.4s ease infinite;\n }\n .strct-dg__skeleton-row td {\n border-bottom: 1px solid var(--b1);\n }\n .strct-dg__empty {\n text-align: center;\n color: var(--t3);\n padding: 22px;\n }\n /* Persistent action bar (toolbar) above the grid — always visible. */\n .strct-dg__toolbar {\n display: flex;\n align-items: center;\n gap: 8px;\n flex-wrap: wrap;\n padding: 8px 0;\n margin-bottom: 8px;\n border-bottom: 1px solid var(--b1);\n }\n\n .strct-dg__foot {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: 12px;\n margin-top: 12px;\n flex-wrap: wrap;\n }\n .strct-dg__foot-left {\n display: flex;\n align-items: center;\n gap: 12px;\n }\n .strct-dg__foot-right {\n display: flex;\n align-items: center;\n gap: 12px;\n }\n .strct-dg__chooser {\n position: relative;\n }\n .strct-dg__chooser-menu {\n position: absolute;\n bottom: calc(100% + 6px);\n left: 0;\n z-index: 10;\n min-width: 180px;\n background: var(--bg-1);\n border: 1px solid var(--b2);\n border-radius: 8px;\n box-shadow: var(--shadow-pop);\n padding: 6px;\n display: flex;\n flex-direction: column;\n gap: 2px;\n }\n .strct-dg__chooser-menu--right {\n left: auto;\n right: 0;\n }\n .strct-dg__chooser-item {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 5px 8px;\n border-radius: 6px;\n cursor: pointer;\n font-size: 12px;\n color: var(--t1);\n transition: background 0.1s ease;\n user-select: none;\n }\n .strct-dg__chooser-item:hover {\n background: var(--bg-3);\n }\n .strct-dg__count {\n font-size: 12px;\n color: var(--t2);\n }\n .strct-dg__count-sep {\n margin: 0 8px;\n color: var(--b2);\n }\n .strct-dg__count-sel {\n color: var(--acc);\n }\n `,\n ],\n})\nexport class StrctDatagrid {\n /** Column definitions. */\n readonly columns = input.required<StrctDatagridColumn[]>();\n /** Data rows. */\n readonly rows = input.required<StrctRow[]>();\n /** Rows per page (0 disables paging). */\n readonly pageSize = input(0);\n /** Enable row selection. */\n readonly selectable = input(false, { transform: booleanAttribute });\n /** Expand a row in place to reveal its detail template below it. */\n readonly expandable = input(false, { transform: booleanAttribute });\n /** Collapse the grid to a single column and open a side detail pane for the\n * clicked row (distinct from {@link expandable}). */\n readonly detailPane = input(false, { transform: booleanAttribute });\n /** Compact density mode. */\n readonly compact = input(false, { transform: booleanAttribute });\n /** Message shown when there are no rows. */\n readonly emptyText = input('No data');\n /** Show skeleton rows while data is loading. */\n readonly loading = input(false, { transform: booleanAttribute });\n /** Enable column resizing by dragging column headers. */\n readonly resizable = input(false, { transform: booleanAttribute });\n /** Show a column-chooser dropdown in the footer. */\n readonly columnChooser = input(false, { transform: booleanAttribute });\n /**\n * Stable row identity (property key or function). Set this for live-refreshing\n * data so selection, expansion and the active detail row survive re-fetches\n * that replace the row objects. Defaults to object identity.\n */\n readonly rowId = input<StrctRowId | null>(null);\n /** Emitted when the selection changes. */\n readonly selectionChange = output<StrctRow[]>();\n\n protected readonly detailDef = contentChild(StrctRowDetailDef);\n protected readonly actionBarDef = contentChild(StrctDatagridActionBar);\n private readonly cellDefs = contentChildren(StrctCellDef);\n private readonly cellMap = computed(() => {\n const m = new Map<string, TemplateRef<StrctCellContext>>();\n for (const d of this.cellDefs()) m.set(d.key(), d.template);\n return m;\n });\n\n readonly page = signal(1);\n private readonly sort = signal<{ key: string | null; dir: SortDir }>({ key: null, dir: 'asc' });\n /** Selection / expansion are tracked by row id (see {@link rowId}). */\n private readonly selected = signal<Set<unknown>>(new Set());\n protected readonly selectedCount = computed(() => this.selected().size);\n private readonly expandedRows = signal<Set<unknown>>(new Set());\n private readonly columnWidths = signal<Map<string, number>>(new Map());\n protected readonly hiddenColumns = signal<Set<string>>(new Set());\n protected readonly chooserOpen = signal(false);\n private resizeState: { key: string; startX: number; startWidth: number } | null = null;\n private readonly onMove = (e: MouseEvent) => this.onResizeMove(e);\n private readonly onUp = () => this.onResizeEnd();\n\n colWidth(key: string): string | null {\n const px = this.columnWidths().get(key);\n return px != null ? `${px}px` : null;\n }\n\n onResizeStart(e: MouseEvent, key: string) {\n e.preventDefault();\n const th = (e.target as HTMLElement).closest('th');\n if (!th) return;\n this.resizeState = { key, startX: e.clientX, startWidth: th.offsetWidth };\n document.addEventListener('mousemove', this.onMove);\n document.addEventListener('mouseup', this.onUp);\n }\n\n private onResizeMove(e: MouseEvent) {\n if (!this.resizeState) return;\n const diff = e.clientX - this.resizeState.startX;\n const newWidth = Math.max(40, this.resizeState.startWidth + diff);\n this.columnWidths.update((m) => {\n const next = new Map(m);\n next.set(this.resizeState!.key, newWidth);\n return next;\n });\n }\n\n private onResizeEnd() {\n this.resizeState = null;\n document.removeEventListener('mousemove', this.onMove);\n document.removeEventListener('mouseup', this.onUp);\n }\n\n private readonly activeId = signal<unknown>(null);\n protected readonly activeRow = computed(() => {\n const id = this.activeId();\n if (id == null) return null;\n return this.rows().find((r) => this.idOf(r) === id) ?? null;\n });\n\n protected readonly canExpand = computed(\n () => this.expandable() && !this.detailPane() && !!this.detailDef(),\n );\n protected readonly canDetail = computed(() => this.detailPane() && !!this.detailDef());\n protected readonly paneOpen = computed(\n () => this.detailPane() && !!this.detailDef() && !!this.activeRow(),\n );\n /** Only the first column is shown while the detail pane is open. */\n protected readonly visibleColumns = computed(() => {\n if (this.paneOpen()) return this.columns().slice(0, 1);\n const hidden = this.hiddenColumns();\n return this.columns().filter((c) => !hidden.has(c.key));\n });\n\n protected readonly sorted = computed(() => {\n const { key, dir } = this.sort();\n const data = [...this.rows()];\n if (!key) return data;\n const sign = dir === 'asc' ? 1 : -1;\n return data.sort((a, b) => sign * this.compare(a[key], b[key]));\n });\n\n protected readonly paged = computed(() => {\n const size = this.pageSize();\n if (size <= 0) return this.sorted();\n const start = (this.page() - 1) * size;\n return this.sorted().slice(start, start + size);\n });\n\n protected readonly allPageSelected = computed(() => {\n const rows = this.paged();\n return rows.length > 0 && rows.every((r) => this.selected().has(this.idOf(r)));\n });\n protected readonly somePageSelected = computed(\n () => !this.allPageSelected() && this.paged().some((r) => this.selected().has(this.idOf(r))),\n );\n\n /** Resolve a row's stable identity (defaults to the row object itself). */\n private idOf(row: StrctRow): unknown {\n const id = this.rowId();\n if (id == null) return row;\n return typeof id === 'function' ? id(row) : row[id];\n }\n\n protected rowKey(row: StrctRow): unknown {\n return this.idOf(row);\n }\n\n protected cellTemplate(key: string): TemplateRef<StrctCellContext> | null {\n return this.cellMap().get(key) ?? null;\n }\n\n constructor() {\n // Keep the page in range when the data set shrinks.\n effect(() => {\n const size = this.pageSize();\n if (size <= 0) return;\n const pageCount = Math.max(1, Math.ceil(this.sorted().length / size));\n if (this.page() > pageCount) this.page.set(pageCount);\n });\n }\n\n protected colspan(): number {\n return (\n this.visibleColumns().length +\n (this.selectable() ? 1 : 0) +\n (this.canExpand() ? 1 : 0) +\n (this.canDetail() ? 1 : 0)\n );\n }\n\n /** Toggle the detail pane for a row (triggered by its » button, not the row,\n * so row cells remain selectable for copy). */\n openDetail(row: StrctRow): void {\n const id = this.idOf(row);\n this.activeId.set(this.activeId() === id ? null : id);\n }\n\n closePane(): void {\n this.activeId.set(null);\n }\n\n sortBy(key: string): void {\n const current = this.sort();\n if (current.key !== key) {\n this.sort.set({ key, dir: 'asc' });\n } else if (current.dir === 'asc') {\n this.sort.set({ key, dir: 'desc' });\n } else {\n this.sort.set({ key: null, dir: 'asc' });\n }\n }\n\n protected sortIcon(key: string): string {\n const { key: k, dir } = this.sort();\n if (k !== key) return 'sortNone';\n return dir === 'asc' ? 'sortAsc' : 'sortDesc';\n }\n\n protected ariaSort(key: string): 'ascending' | 'descending' | 'none' {\n const { key: k, dir } = this.sort();\n if (k !== key) return 'none';\n return dir === 'asc' ? 'ascending' : 'descending';\n }\n\n protected onHeaderSpace(event: Event, key: string): void {\n event.preventDefault(); // stop page scroll\n this.sortBy(key);\n }\n\n toggleColumn(key: string, visible: boolean): void {\n this.hiddenColumns.update((set) => {\n const next = new Set(set);\n if (visible) next.delete(key);\n else next.add(key);\n return next;\n });\n }\n\n protected isSelected(row: StrctRow): boolean {\n return this.selected().has(this.idOf(row));\n }\n\n protected isExpanded(row: StrctRow): boolean {\n return this.expandedRows().has(this.idOf(row));\n }\n\n toggleExpand(row: StrctRow): void {\n const id = this.idOf(row);\n const next = new Set(this.expandedRows());\n if (next.has(id)) {\n next.delete(id);\n } else {\n next.add(id);\n }\n this.expandedRows.set(next);\n }\n\n toggleRow(row: StrctRow): void {\n const id = this.idOf(row);\n const next = new Set(this.selected());\n if (next.has(id)) {\n next.delete(id);\n } else {\n next.add(id);\n }\n this.commitSelection(next);\n }\n\n toggleAll(): void {\n const next = new Set(this.selected());\n const rows = this.paged();\n if (this.allPageSelected()) {\n rows.forEach((r) => next.delete(this.idOf(r)));\n } else {\n rows.forEach((r) => next.add(this.idOf(r)));\n }\n this.commitSelection(next);\n }\n\n clearSelection(): void {\n this.commitSelection(new Set());\n }\n\n /** Emit the current row objects whose id is selected (resolved against the\n * latest data, so consumers always get fresh references). */\n private commitSelection(next: Set<unknown>): void {\n this.selected.set(next);\n this.selectionChange.emit(this.rows().filter((r) => next.has(this.idOf(r))));\n }\n\n private compare(a: unknown, b: unknown): number {\n if (typeof a === 'number' && typeof b === 'number') return a - b;\n return String(a ?? '').localeCompare(String(b ?? ''), undefined, { numeric: true });\n }\n}\n","import { ChangeDetectionStrategy, Component, ViewEncapsulation, input } from '@angular/core';\n\n/** Timeline node state colors. */\nexport type StrctTimelineState = 'default' | 'current' | 'success' | 'warning' | 'critical';\n\n/** Vertical timeline container. Wraps `<strct-timeline-item>` children. */\n@Component({\n selector: 'strct-timeline',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n template: `<ng-content />`,\n host: { class: 'strct-tl' },\n styles: [\n `\n .strct-tl {\n display: flex;\n flex-direction: column;\n }\n `,\n ],\n})\nexport class StrctTimeline {}\n\n/** A timeline entry: a node on the rail plus a title and projected body. */\n@Component({\n selector: 'strct-timeline-item',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n template: `\n <div class=\"strct-tli__rail\">\n <span class=\"strct-tli__node\"></span>\n <span class=\"strct-tli__line\"></span>\n </div>\n <div class=\"strct-tli__content\">\n <div class=\"strct-tli__title\">{{ title() }}</div>\n <div class=\"strct-tli__body\"><ng-content /></div>\n </div>\n `,\n host: {\n class: 'strct-tli',\n '[class.strct-tli--current]': \"state() === 'current'\",\n '[class.strct-tli--success]': \"state() === 'success'\",\n '[class.strct-tli--warning]': \"state() === 'warning'\",\n '[class.strct-tli--critical]': \"state() === 'critical'\",\n },\n styles: [\n `\n .strct-tli {\n display: flex;\n gap: 12px;\n }\n .strct-tli__rail {\n display: flex;\n flex-direction: column;\n align-items: center;\n }\n .strct-tli__node {\n width: 11px;\n height: 11px;\n border-radius: 50%;\n margin-top: 3px;\n flex-shrink: 0;\n background: var(--bg-1);\n border: 2px solid var(--b3);\n }\n .strct-tli__line {\n flex: 1;\n width: 2px;\n background: var(--b2);\n margin: 4px 0;\n }\n .strct-tli:last-child .strct-tli__line {\n display: none;\n }\n .strct-tli__content {\n padding-bottom: 18px;\n }\n .strct-tli__title {\n font-size: 13px;\n font-weight: 600;\n color: var(--t1);\n }\n .strct-tli__body {\n margin-top: 3px;\n font-size: 13px;\n color: var(--t2);\n }\n\n .strct-tli--current .strct-tli__node {\n border-color: var(--acc);\n background: var(--acc-m);\n box-shadow: 0 0 0 3px var(--acc18);\n }\n .strct-tli--success .strct-tli__node {\n border-color: var(--success);\n background: var(--success);\n }\n .strct-tli--warning .strct-tli__node {\n border-color: var(--warning);\n background: var(--warning);\n }\n .strct-tli--critical .strct-tli__node {\n border-color: var(--critical);\n background: var(--critical);\n }\n `,\n ],\n})\nexport class StrctTimelineItem {\n /** Dialog title. */\n readonly title = input.required<string>();\n /** State. */\n readonly state = input<StrctTimelineState>('default');\n}\n","import { ChangeDetectionStrategy, Component, ViewEncapsulation, input } from '@angular/core';\n\n/** Key/value definition list. Wraps `<strct-stack-item>` rows. */\n@Component({\n selector: 'strct-stack',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n template: `<ng-content />`,\n host: { class: 'strct-stack' },\n styles: [\n `\n .strct-stack {\n display: block;\n border: 1px solid var(--b2);\n border-radius: 8px;\n overflow: hidden;\n }\n `,\n ],\n})\nexport class StrctStack {}\n\n/** A label + value row. The value is projected content. */\n@Component({\n selector: 'strct-stack-item',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n template: `\n <span class=\"strct-stack__label\">{{ label() }}</span>\n <span class=\"strct-stack__value\"><ng-content /></span>\n `,\n host: { class: 'strct-stack__item' },\n styles: [\n `\n .strct-stack__item {\n display: grid;\n grid-template-columns: minmax(120px, 34%) 1fr;\n gap: 12px;\n padding: 10px 14px;\n border-bottom: 1px solid var(--b1);\n font-size: 13px;\n }\n .strct-stack__item:last-child {\n border-bottom: 0;\n }\n .strct-stack__item:nth-child(even) {\n background: var(--bg-2);\n }\n .strct-stack__label {\n color: var(--t2);\n }\n .strct-stack__value {\n color: var(--t1);\n }\n `,\n ],\n})\nexport class StrctStackItem {\n /** Label text. */\n readonly label = input.required<string>();\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n ViewEncapsulation,\n booleanAttribute,\n computed,\n input,\n} from '@angular/core';\n\n/** Chart / gauge / sparkline status colors. */\nexport type StrctChartStatus = 'accent' | 'success' | 'warning' | 'critical';\n\nconst STROKE: Record<StrctChartStatus, string> = {\n accent: 'var(--acc)',\n success: 'var(--success)',\n warning: 'var(--warning)',\n critical: 'var(--critical)',\n};\n\n/**\n * Tiny inline trend line. `<strct-sparkline [data]=\"[3,5,4,8,6,9]\" area />`.\n */\n@Component({\n selector: 'strct-sparkline',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n template: `\n <svg\n class=\"strct-spark__svg\"\n viewBox=\"0 0 100 30\"\n preserveAspectRatio=\"none\"\n [style.width.px]=\"width()\"\n [style.height.px]=\"height()\"\n >\n @if (area()) {\n <polygon class=\"strct-spark__area\" [attr.points]=\"areaPoints()\" [attr.fill]=\"color()\" />\n }\n <polyline\n class=\"strct-spark__line\"\n fill=\"none\"\n [attr.points]=\"linePoints()\"\n [attr.stroke]=\"color()\"\n />\n </svg>\n `,\n host: { class: 'strct-spark' },\n styles: [\n `\n .strct-spark {\n display: inline-block;\n line-height: 0;\n }\n .strct-spark__line {\n stroke-width: 1.6;\n vector-effect: non-scaling-stroke;\n stroke-linejoin: round;\n stroke-linecap: round;\n }\n .strct-spark__area {\n opacity: 0.14;\n }\n `,\n ],\n})\nexport class StrctSparkline {\n /** Data array. */\n readonly data = input.required<number[]>();\n /** Visual status color. */\n readonly status = input<StrctChartStatus>('accent');\n /** Fill the area under the line. */\n readonly area = input(false, { transform: booleanAttribute });\n /** Width (CSS length). */\n readonly width = input(100);\n /** Height in pixels. */\n readonly height = input(30);\n\n protected readonly color = computed(() => STROKE[this.status()]);\n\n private readonly points = computed(() => {\n const d = this.data();\n if (!d.length) return [] as { x: number; y: number }[];\n const min = Math.min(...d);\n const max = Math.max(...d);\n const span = max - min || 1;\n const stepX = d.length > 1 ? 100 / (d.length - 1) : 0;\n return d.map((v, i) => ({ x: i * stepX, y: 29 - ((v - min) / span) * 28 }));\n });\n\n protected readonly linePoints = computed(() =>\n this.points()\n .map((p) => `${p.x},${p.y}`)\n .join(' '),\n );\n\n protected readonly areaPoints = computed(() => {\n const pts = this.points();\n if (!pts.length) return '';\n return `0,30 ${pts.map((p) => `${p.x},${p.y}`).join(' ')} 100,30`;\n });\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n ViewEncapsulation,\n computed,\n input,\n} from '@angular/core';\nimport { StrctChartStatus } from './sparkline';\n\n/** Chart rendering types (line, area, bar). */\nexport type StrctChartType = 'line' | 'area' | 'bar';\n\nconst COLOR: Record<StrctChartStatus, string> = {\n accent: 'var(--acc)',\n success: 'var(--success)',\n warning: 'var(--warning)',\n critical: 'var(--critical)',\n};\n\nconst VB_W = 320;\nconst PAD = { l: 6, r: 6, t: 10, b: 10 };\n\n/**\n * Single-series chart (line / area / bar). Dependency-free SVG, token-coloured.\n * <strct-chart [data]=\"cpu\" type=\"area\" [labels]=\"hours\" status=\"warning\" />\n */\n@Component({\n selector: 'strct-chart',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n template: `\n <svg\n class=\"strct-chart__svg\"\n [attr.viewBox]=\"'0 0 ' + vbW + ' ' + height()\"\n preserveAspectRatio=\"none\"\n [style.height.px]=\"height()\"\n >\n @for (g of gridY(); track g) {\n <line\n class=\"strct-chart__grid\"\n [attr.x1]=\"pad.l\"\n [attr.x2]=\"vbW - pad.r\"\n [attr.y1]=\"g\"\n [attr.y2]=\"g\"\n />\n }\n\n @if (type() === 'bar') {\n @for (b of bars(); track $index) {\n <rect\n class=\"strct-chart__bar\"\n [attr.x]=\"b.x\"\n [attr.y]=\"b.y\"\n [attr.width]=\"b.w\"\n [attr.height]=\"b.h\"\n [attr.fill]=\"color()\"\n />\n }\n } @else {\n @if (type() === 'area') {\n <polygon class=\"strct-chart__area\" [attr.points]=\"areaPoints()\" [attr.fill]=\"color()\" />\n }\n <polyline\n class=\"strct-chart__line\"\n fill=\"none\"\n [attr.points]=\"linePoints()\"\n [attr.stroke]=\"color()\"\n />\n @for (p of points(); track $index) {\n <circle\n class=\"strct-chart__dot\"\n [attr.cx]=\"p.x\"\n [attr.cy]=\"p.y\"\n r=\"2\"\n [attr.fill]=\"color()\"\n />\n }\n }\n </svg>\n\n @if (labels().length) {\n <div class=\"strct-chart__labels\">\n @for (l of labels(); track $index) {\n <span>{{ l }}</span>\n }\n </div>\n }\n `,\n host: { class: 'strct-chart' },\n styles: [\n `\n .strct-chart {\n display: block;\n }\n .strct-chart__svg {\n width: 100%;\n display: block;\n }\n .strct-chart__grid {\n stroke: var(--b1);\n stroke-width: 1;\n vector-effect: non-scaling-stroke;\n }\n .strct-chart__line {\n stroke-width: 2;\n vector-effect: non-scaling-stroke;\n stroke-linejoin: round;\n stroke-linecap: round;\n }\n .strct-chart__area {\n opacity: 0.13;\n }\n .strct-chart__dot {\n stroke: var(--bg-1);\n stroke-width: 1.5;\n }\n .strct-chart__bar {\n rx: 1.5;\n }\n .strct-chart__labels {\n display: flex;\n justify-content: space-between;\n margin-top: 6px;\n font-size: 10px;\n color: var(--t3);\n }\n `,\n ],\n})\nexport class StrctChart {\n /** Data array. */\n readonly data = input.required<number[]>();\n /** Visual type / variant. */\n readonly type = input<StrctChartType>('line');\n /** X-axis labels. */\n readonly labels = input<string[]>([]);\n /** Visual status color. */\n readonly status = input<StrctChartStatus>('accent');\n /** Height in pixels. */\n readonly height = input(160);\n /** Override the top of the value axis (defaults to the data max + headroom). */\n readonly max = input<number | null>(null);\n\n protected readonly vbW = VB_W;\n protected readonly pad = PAD;\n protected readonly color = computed(() => COLOR[this.status()]);\n\n private readonly maxValue = computed(() => {\n const explicit = this.max();\n if (explicit != null) return explicit || 1;\n const m = Math.max(0, ...this.data());\n return m === 0 ? 1 : m * 1.1;\n });\n\n private chartH(): number {\n return this.height() - PAD.t - PAD.b;\n }\n\n protected readonly points = computed(() => {\n const d = this.data();\n const chartW = VB_W - PAD.l - PAD.r;\n const max = this.maxValue();\n const stepX = d.length > 1 ? chartW / (d.length - 1) : 0;\n return d.map((v, i) => ({\n x: PAD.l + i * stepX,\n y: PAD.t + (1 - Math.max(0, v) / max) * this.chartH(),\n }));\n });\n\n protected readonly linePoints = computed(() =>\n this.points()\n .map((p) => `${p.x},${p.y}`)\n .join(' '),\n );\n\n protected readonly areaPoints = computed(() => {\n const pts = this.points();\n if (!pts.length) return '';\n const base = this.height() - PAD.b;\n return `${PAD.l},${base} ${pts.map((p) => `${p.x},${p.y}`).join(' ')} ${VB_W - PAD.r},${base}`;\n });\n\n protected readonly bars = computed(() => {\n const d = this.data();\n const chartW = VB_W - PAD.l - PAD.r;\n const max = this.maxValue();\n const base = this.height() - PAD.b;\n const slot = d.length ? chartW / d.length : chartW;\n const w = slot * 0.6;\n return d.map((v, i) => {\n const h = (Math.max(0, v) / max) * this.chartH();\n return { x: PAD.l + i * slot + (slot - w) / 2, y: base - h, w, h };\n });\n });\n\n protected readonly gridY = computed(() => {\n const top = PAD.t;\n const bottom = this.height() - PAD.b;\n return [top, (top + bottom) / 2, bottom];\n });\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n ViewEncapsulation,\n computed,\n input,\n} from '@angular/core';\n\n/** A single weighted slice of a donut chart. */\nexport interface StrctDonutSegment {\n value: number;\n label?: string;\n color?: string;\n}\n\nconst PALETTE = [\n 'var(--acc)',\n 'var(--success)',\n 'var(--warning)',\n 'var(--critical)',\n 'var(--acc50)',\n 'var(--t3)',\n];\n\n/**\n * Donut / ring chart from weighted segments.\n * <strct-donut [segments]=\"[{value:6,label:'Running'},{value:2,label:'Off'}]\"\n * centerValue=\"8\" centerLabel=\"VMs\" />\n */\n@Component({\n selector: 'strct-donut',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n template: `\n <div class=\"strct-donut__wrap\" [style.width.px]=\"size()\" [style.height.px]=\"size()\">\n <svg\n [attr.viewBox]=\"'0 0 ' + size() + ' ' + size()\"\n [style.width.px]=\"size()\"\n [style.height.px]=\"size()\"\n >\n <g [attr.transform]=\"'rotate(-90 ' + half() + ' ' + half() + ')'\">\n <circle\n class=\"strct-donut__track\"\n [attr.cx]=\"half()\"\n [attr.cy]=\"half()\"\n [attr.r]=\"radius()\"\n fill=\"none\"\n [attr.stroke-width]=\"thickness()\"\n />\n @for (arc of arcs(); track $index) {\n <circle\n [attr.cx]=\"half()\"\n [attr.cy]=\"half()\"\n [attr.r]=\"radius()\"\n fill=\"none\"\n [attr.stroke]=\"arc.color\"\n [attr.stroke-width]=\"thickness()\"\n [attr.stroke-dasharray]=\"arc.len + ' ' + (circumference() - arc.len)\"\n [attr.stroke-dashoffset]=\"-arc.offset\"\n />\n }\n </g>\n </svg>\n @if (centerValue() || centerLabel()) {\n <div class=\"strct-donut__center\">\n <div class=\"strct-donut__value\">{{ centerValue() }}</div>\n <div class=\"strct-donut__label\">{{ centerLabel() }}</div>\n </div>\n }\n </div>\n `,\n host: { class: 'strct-donut' },\n styles: [\n `\n .strct-donut {\n display: inline-block;\n }\n .strct-donut__wrap {\n position: relative;\n }\n .strct-donut__track {\n stroke: var(--bg-3);\n }\n .strct-donut__center {\n position: absolute;\n inset: 0;\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n pointer-events: none;\n }\n .strct-donut__value {\n font-size: 20px;\n font-weight: 600;\n color: var(--t1);\n line-height: 1;\n }\n .strct-donut__label {\n font-size: 11px;\n color: var(--t2);\n margin-top: 2px;\n }\n `,\n ],\n})\nexport class StrctDonut {\n /** Weighted segments. */\n readonly segments = input.required<StrctDonutSegment[]>();\n /** Size variant. */\n readonly size = input(120);\n /** Stroke thickness in pixels. */\n readonly thickness = input(14);\n /** Value shown in the donut center. */\n readonly centerValue = input<string | number>('');\n /** Label shown in the donut center. */\n readonly centerLabel = input('');\n\n protected readonly half = computed(() => this.size() / 2);\n protected readonly radius = computed(() => (this.size() - this.thickness()) / 2);\n protected readonly circumference = computed(() => 2 * Math.PI * this.radius());\n\n protected readonly arcs = computed(() => {\n const segs = this.segments();\n const total = segs.reduce((s, x) => s + Math.max(0, x.value), 0) || 1;\n const c = this.circumference();\n let offset = 0;\n return segs.map((seg, i) => {\n const len = (Math.max(0, seg.value) / total) * c;\n const arc = { color: seg.color ?? PALETTE[i % PALETTE.length], len, offset };\n offset += len;\n return arc;\n });\n });\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n ViewEncapsulation,\n computed,\n input,\n} from '@angular/core';\nimport { StrctChartStatus } from './sparkline';\n\nconst COLOR: Record<StrctChartStatus, string> = {\n accent: 'var(--acc)',\n success: 'var(--success)',\n warning: 'var(--warning)',\n critical: 'var(--critical)',\n};\n\n/**\n * 270° radial gauge for a 0–100 value (CPU, memory, capacity …).\n * <strct-gauge [value]=\"72\" status=\"warning\" label=\"CPU\" />\n */\n@Component({\n selector: 'strct-gauge',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n template: `\n <div class=\"strct-gauge__wrap\" [style.width.px]=\"size()\" [style.height.px]=\"size()\">\n <svg\n [attr.viewBox]=\"'0 0 ' + size() + ' ' + size()\"\n [style.width.px]=\"size()\"\n [style.height.px]=\"size()\"\n >\n <g [attr.transform]=\"'rotate(135 ' + half() + ' ' + half() + ')'\">\n <circle\n class=\"strct-gauge__track\"\n [attr.cx]=\"half()\"\n [attr.cy]=\"half()\"\n [attr.r]=\"radius()\"\n fill=\"none\"\n [attr.stroke-width]=\"thickness()\"\n stroke-linecap=\"round\"\n [attr.stroke-dasharray]=\"trackDash()\"\n />\n <circle\n class=\"strct-gauge__value\"\n [attr.cx]=\"half()\"\n [attr.cy]=\"half()\"\n [attr.r]=\"radius()\"\n fill=\"none\"\n [attr.stroke]=\"color()\"\n [attr.stroke-width]=\"thickness()\"\n stroke-linecap=\"round\"\n [attr.stroke-dasharray]=\"valueDash()\"\n />\n </g>\n </svg>\n <div class=\"strct-gauge__center\">\n <div class=\"strct-gauge__num\">{{ clamped() }}<span class=\"strct-gauge__pct\">%</span></div>\n @if (label()) {\n <div class=\"strct-gauge__label\">{{ label() }}</div>\n }\n </div>\n </div>\n `,\n host: { class: 'strct-gauge' },\n styles: [\n `\n .strct-gauge {\n display: inline-block;\n }\n .strct-gauge__wrap {\n position: relative;\n }\n .strct-gauge__track {\n stroke: var(--bg-3);\n }\n .strct-gauge__value {\n transition: stroke-dasharray 0.4s ease;\n }\n .strct-gauge__center {\n position: absolute;\n inset: 0;\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n pointer-events: none;\n }\n .strct-gauge__num {\n font-size: 22px;\n font-weight: 600;\n color: var(--t1);\n line-height: 1;\n }\n .strct-gauge__pct {\n font-size: 12px;\n color: var(--t2);\n margin-left: 1px;\n }\n .strct-gauge__label {\n font-size: 11px;\n color: var(--t2);\n margin-top: 3px;\n }\n `,\n ],\n})\nexport class StrctGauge {\n /** Current value. */\n readonly value = input(0);\n /** Visual status color. */\n readonly status = input<StrctChartStatus>('accent');\n /** Label text. */\n readonly label = input('');\n /** Size variant. */\n readonly size = input(120);\n /** Stroke thickness in pixels. */\n readonly thickness = input(12);\n\n protected readonly clamped = computed(() => Math.round(Math.max(0, Math.min(100, this.value()))));\n protected readonly half = computed(() => this.size() / 2);\n protected readonly radius = computed(() => (this.size() - this.thickness()) / 2);\n protected readonly color = computed(() => COLOR[this.status()]);\n\n private readonly circumference = computed(() => 2 * Math.PI * this.radius());\n\n protected readonly trackDash = computed(() => {\n const c = this.circumference();\n return `${0.75 * c} ${c}`;\n });\n\n protected readonly valueDash = computed(() => {\n const c = this.circumference();\n return `${(this.clamped() / 100) * 0.75 * c} ${c}`;\n });\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n ViewEncapsulation,\n booleanAttribute,\n computed,\n input,\n output,\n} from '@angular/core';\nimport { StrctIcon } from '../icon/icon';\n\n/** Alert visual types. */\nexport type StrctAlertType = 'info' | 'success' | 'warning' | 'critical';\n\n/** Inline contextual banner. `<strct-alert type=\"warning\">…</strct-alert>`. */\n@Component({\n selector: 'strct-alert',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n imports: [StrctIcon],\n template: `\n <strct-icon [name]=\"icon()\" [size]=\"15\" />\n <div class=\"strct-alert__body\"><ng-content /></div>\n @if (closable()) {\n <button type=\"button\" class=\"strct-alert__close\" aria-label=\"Dismiss\" (click)=\"closed.emit()\">\n <strct-icon name=\"close\" [size]=\"13\" />\n </button>\n }\n `,\n host: {\n class: 'strct-alert',\n role: 'status',\n '[class.strct-alert--success]': \"type() === 'success'\",\n '[class.strct-alert--warning]': \"type() === 'warning'\",\n '[class.strct-alert--critical]': \"type() === 'critical'\",\n },\n styles: [\n `\n /* Restrained: neutral surface with a colored left rail + colored icon,\n instead of a fully tinted background. */\n .strct-alert {\n display: flex;\n align-items: flex-start;\n gap: var(--space-2);\n padding: var(--space-2) var(--space-3);\n border-radius: var(--radius-lg);\n font-size: 13px;\n color: var(--t1);\n background: var(--bg-1);\n border: 1px solid var(--b2);\n border-left: 3px solid var(--acc);\n }\n .strct-alert strct-icon {\n color: var(--acc);\n margin-top: 1px;\n flex-shrink: 0;\n }\n .strct-alert__body {\n flex: 1;\n color: var(--t1);\n }\n .strct-alert__close {\n flex-shrink: 0;\n display: inline-flex;\n padding: 2px;\n margin: -2px -2px 0 0;\n border: 0;\n background: transparent;\n color: var(--t3);\n cursor: pointer;\n border-radius: 4px;\n }\n .strct-alert__close:hover {\n color: var(--t1);\n background: var(--bg-3);\n }\n\n .strct-alert--success {\n border-left-color: var(--success);\n }\n .strct-alert--success strct-icon {\n color: var(--success);\n }\n .strct-alert--warning {\n border-left-color: var(--warning);\n }\n .strct-alert--warning strct-icon {\n color: var(--warning);\n }\n .strct-alert--critical {\n border-left-color: var(--critical);\n }\n .strct-alert--critical strct-icon {\n color: var(--critical);\n }\n `,\n ],\n})\nexport class StrctAlert {\n /** Visual type / variant. */\n readonly type = input<StrctAlertType>('info');\n /** Show a dismiss button. */\n readonly closable = input(false, { transform: booleanAttribute });\n /** Emitted when the alert is dismissed. */\n readonly closed = output<void>();\n\n protected readonly icon = computed(() => {\n switch (this.type()) {\n case 'success':\n return 'success';\n case 'warning':\n return 'warning';\n case 'critical':\n return 'critical';\n default:\n return 'info';\n }\n });\n}\n","import {\n DOCUMENT,\n Directive,\n ElementRef,\n HostListener,\n Renderer2,\n inject,\n input,\n} from '@angular/core';\n\n/** Tooltip placement relative to the host element. */\nexport type StrctTooltipPosition = 'top' | 'bottom' | 'left' | 'right';\n\n/**\n * Lightweight hover/focus tooltip. Renders a fixed-positioned bubble so it is\n * never clipped by an ancestor's `overflow`.\n * <button strct-button strctTooltip=\"More info\">?</button>\n */\n@Directive({ selector: '[strctTooltip]' })\nexport class StrctTooltip {\n private readonly host = inject(ElementRef<HTMLElement>);\n private readonly renderer = inject(Renderer2);\n private readonly doc = inject(DOCUMENT);\n private bubble: HTMLElement | null = null;\n\n /** Tooltip text. */\n readonly strctTooltip = input.required<string>();\n /** Tooltip placement relative to the host. */\n readonly tooltipPosition = input<StrctTooltipPosition>('top');\n\n @HostListener('mouseenter')\n @HostListener('focus')\n protected show(): void {\n const text = this.strctTooltip();\n if (!text || this.bubble) return;\n\n const el = this.renderer.createElement('span') as HTMLElement;\n this.renderer.appendChild(el, this.renderer.createText(text));\n const s = el.style;\n s.position = 'fixed';\n s.zIndex = '1300';\n s.pointerEvents = 'none';\n s.whiteSpace = 'nowrap';\n s.padding = '5px 8px';\n s.fontSize = '11px';\n s.fontWeight = '500';\n s.lineHeight = '1';\n s.color = 'var(--t1)';\n s.background = 'var(--bg-0)';\n s.border = '1px solid var(--b3)';\n s.borderRadius = '5px';\n s.boxShadow = 'var(--shh)';\n s.top = '0';\n s.left = '0';\n s.visibility = 'hidden';\n\n // Append to <body> so the fixed bubble can't be trapped by a transformed\n // ancestor's containing block (e.g. a translated speed-dial / animation).\n this.renderer.appendChild(this.doc.body, el);\n this.bubble = el;\n this.place(el);\n }\n\n @HostListener('mouseleave')\n @HostListener('blur')\n protected hide(): void {\n if (this.bubble) {\n this.renderer.removeChild(this.doc.body, this.bubble);\n this.bubble = null;\n }\n }\n\n private place(el: HTMLElement): void {\n const a = this.host.nativeElement.getBoundingClientRect();\n const w = el.offsetWidth;\n const h = el.offsetHeight;\n const gap = 7;\n let top: number;\n let left: number;\n\n switch (this.tooltipPosition()) {\n case 'bottom':\n top = a.bottom + gap;\n left = a.left + a.width / 2 - w / 2;\n break;\n case 'left':\n left = a.left - gap - w;\n top = a.top + a.height / 2 - h / 2;\n break;\n case 'right':\n left = a.right + gap;\n top = a.top + a.height / 2 - h / 2;\n break;\n default:\n top = a.top - gap - h;\n left = a.left + a.width / 2 - w / 2;\n }\n\n const m = 4;\n left = Math.max(m, Math.min(left, window.innerWidth - w - m));\n top = Math.max(m, Math.min(top, window.innerHeight - h - m));\n el.style.left = `${Math.round(left)}px`;\n el.style.top = `${Math.round(top)}px`;\n el.style.visibility = 'visible';\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n ViewEncapsulation,\n ElementRef,\n HostListener,\n inject,\n input,\n signal,\n} from '@angular/core';\nimport { StrctOverlay, StrctOverlayPlacement } from '../overlay/overlay';\n\n/** Signpost popover placement. */\nexport type StrctSignpostPosition = 'top' | 'bottom' | 'left' | 'right';\n\n/**\n * A click-triggered popover with an arrow, for contextual help / detail.\n * <strct-signpost position=\"right\">\n * <button strct-button size=\"sm\" strctSignpostTrigger>?</button>\n * <h4>Title</h4>\n * <p>Any projected content…</p>\n * </strct-signpost>\n */\n@Component({\n selector: 'strct-signpost',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n imports: [StrctOverlay],\n template: `\n <div\n #trigger\n class=\"strct-sp__trigger\"\n role=\"button\"\n tabindex=\"0\"\n (click)=\"toggle()\"\n (keydown.enter)=\"toggle()\"\n (keydown.space)=\"toggle()\"\n >\n <ng-content select=\"[strctSignpostTrigger]\" />\n </div>\n @if (open()) {\n <div\n class=\"strct-sp__panel\"\n [class]=\"'strct-sp__panel--' + position()\"\n role=\"dialog\"\n [strctOverlay]=\"trigger\"\n [strctOverlayPlacement]=\"overlayPlacement()\"\n >\n <ng-content />\n </div>\n }\n `,\n host: { class: 'strct-sp' },\n styles: [\n `\n .strct-sp {\n position: relative;\n display: inline-block;\n }\n .strct-sp__trigger {\n display: inline-flex;\n }\n .strct-sp__panel {\n position: absolute;\n z-index: 300;\n width: max-content;\n max-width: 280px;\n padding: 12px 14px;\n font-size: 13px;\n color: var(--t1);\n background: var(--bg-1);\n border: 1px solid var(--b2);\n border-radius: 8px;\n box-shadow: var(--shh);\n animation: strct-sp-in 0.11s ease;\n }\n .strct-sp__panel h4 {\n margin: 0 0 6px;\n font-size: 13px;\n font-weight: 600;\n }\n .strct-sp__panel p {\n margin: 0;\n color: var(--t2);\n }\n .strct-sp__panel::before {\n content: '';\n position: absolute;\n width: 9px;\n height: 9px;\n background: var(--bg-1);\n border: 1px solid var(--b2);\n border-right: 0;\n border-bottom: 0;\n }\n .strct-sp__panel--bottom {\n top: calc(100% + 9px);\n left: 0;\n }\n .strct-sp__panel--bottom::before {\n top: -5px;\n left: 16px;\n transform: rotate(45deg);\n }\n .strct-sp__panel--top {\n bottom: calc(100% + 9px);\n left: 0;\n }\n .strct-sp__panel--top::before {\n bottom: -5px;\n left: 16px;\n transform: rotate(225deg);\n }\n .strct-sp__panel--right {\n left: calc(100% + 9px);\n top: 0;\n }\n .strct-sp__panel--right::before {\n left: -5px;\n top: 14px;\n transform: rotate(-45deg);\n }\n .strct-sp__panel--left {\n right: calc(100% + 9px);\n top: 0;\n }\n .strct-sp__panel--left::before {\n right: -5px;\n top: 14px;\n transform: rotate(135deg);\n }\n @keyframes strct-sp-in {\n from {\n opacity: 0;\n transform: scale(0.97);\n }\n }\n `,\n ],\n})\nexport class StrctSignpost {\n private readonly host = inject(ElementRef<HTMLElement>);\n /** Popover placement relative to the trigger. */\n readonly position = input<StrctSignpostPosition>('bottom');\n readonly open = signal(false);\n\n toggle(): void {\n this.open.update((v) => !v);\n }\n close(): void {\n this.open.set(false);\n }\n\n protected overlayPlacement(): StrctOverlayPlacement {\n switch (this.position()) {\n case 'top':\n return 'top-start';\n case 'right':\n return 'right';\n case 'left':\n return 'left';\n default:\n return 'bottom-start';\n }\n }\n\n @HostListener('document:click', ['$event'])\n protected onDocClick(event: MouseEvent): void {\n if (this.open() && !this.host.nativeElement.contains(event.target as Node)) {\n this.close();\n }\n }\n\n @HostListener('document:keydown.escape')\n protected onEscape(): void {\n this.close();\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n Injectable,\n ViewEncapsulation,\n inject,\n signal,\n} from '@angular/core';\nimport { StrctIcon } from '../icon/icon';\n\n/** Toast visual types. */\nexport type StrctToastType = 'info' | 'success' | 'warning' | 'critical';\n\n/** A single toast notification. */\nexport interface StrctToast {\n id: number;\n type: StrctToastType;\n message: string;\n /** Auto-dismiss after this many ms; 0 keeps it until dismissed. */\n duration: number;\n}\n\n/** Options passed when creating a toast. */\nexport interface StrctToastOptions {\n type?: StrctToastType;\n duration?: number;\n}\n\n/**\n * Queues transient notifications. Render `<strct-toast-outlet />` once near the\n * app root, then call from anywhere:\n * inject(StrctToastService).success('Saved');\n */\n@Injectable({ providedIn: 'root' })\nexport class StrctToastService {\n private counter = 0;\n private readonly _toasts = signal<StrctToast[]>([]);\n readonly toasts = this._toasts.asReadonly();\n\n show(message: string, options: StrctToastOptions = {}): number {\n const id = ++this.counter;\n const duration = options.duration ?? 4000;\n this._toasts.update((list) => [\n ...list,\n { id, type: options.type ?? 'info', message, duration },\n ]);\n if (duration > 0) {\n setTimeout(() => this.dismiss(id), duration);\n }\n return id;\n }\n\n info(message: string, duration?: number) {\n return this.show(message, { type: 'info', duration });\n }\n success(message: string, duration?: number) {\n return this.show(message, { type: 'success', duration });\n }\n warning(message: string, duration?: number) {\n return this.show(message, { type: 'warning', duration });\n }\n critical(message: string, duration?: number) {\n return this.show(message, { type: 'critical', duration });\n }\n\n dismiss(id: number): void {\n this._toasts.update((list) => list.filter((t) => t.id !== id));\n }\n\n clear(): void {\n this._toasts.set([]);\n }\n}\n\nconst TOAST_ICON: Record<StrctToastType, string> = {\n info: 'info',\n success: 'success',\n warning: 'warning',\n critical: 'critical',\n};\n\n/** Renders the toast stack. Place once, typically just inside the app shell. */\n@Component({\n selector: 'strct-toast-outlet',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n imports: [StrctIcon],\n template: `\n <div class=\"strct-toasts\" role=\"region\" aria-label=\"Notifications\" aria-live=\"polite\">\n @for (toast of service.toasts(); track toast.id) {\n <div\n class=\"strct-toast\"\n [class.strct-toast--success]=\"toast.type === 'success'\"\n [class.strct-toast--warning]=\"toast.type === 'warning'\"\n [class.strct-toast--critical]=\"toast.type === 'critical'\"\n >\n <strct-icon [name]=\"icon(toast.type)\" [size]=\"15\" />\n <span class=\"strct-toast__msg\">{{ toast.message }}</span>\n <button\n type=\"button\"\n class=\"strct-toast__close\"\n aria-label=\"Dismiss\"\n (click)=\"service.dismiss(toast.id)\"\n >\n <strct-icon name=\"close\" [size]=\"13\" />\n </button>\n </div>\n }\n </div>\n `,\n styles: [\n `\n .strct-toasts {\n position: fixed;\n top: var(--space-4);\n right: var(--space-4);\n z-index: 1200;\n display: flex;\n flex-direction: column;\n gap: var(--space-2);\n max-width: 360px;\n pointer-events: none;\n }\n .strct-toast {\n pointer-events: auto;\n display: flex;\n align-items: flex-start;\n gap: var(--space-2);\n padding: var(--space-3);\n font-size: 13px;\n color: var(--t1);\n background: var(--bg-1);\n border: 1px solid var(--b2);\n border-left: 3px solid var(--acc);\n border-radius: var(--radius-lg);\n box-shadow: var(--shadow-floating);\n animation: strct-toast-in 0.16s ease;\n }\n .strct-toast strct-icon {\n color: var(--acc);\n margin-top: 1px;\n flex-shrink: 0;\n }\n .strct-toast__msg {\n flex: 1;\n }\n .strct-toast__close {\n flex-shrink: 0;\n display: inline-flex;\n padding: 2px;\n margin: -2px -2px 0 0;\n border: 0;\n background: transparent;\n color: var(--t3);\n cursor: pointer;\n border-radius: 4px;\n }\n .strct-toast__close:hover {\n color: var(--t1);\n background: var(--bg-3);\n }\n .strct-toast--success {\n border-left-color: var(--success);\n }\n .strct-toast--success strct-icon {\n color: var(--success);\n }\n .strct-toast--warning {\n border-left-color: var(--warning);\n }\n .strct-toast--warning strct-icon {\n color: var(--warning);\n }\n .strct-toast--critical {\n border-left-color: var(--critical);\n }\n .strct-toast--critical strct-icon {\n color: var(--critical);\n }\n @keyframes strct-toast-in {\n from {\n opacity: 0;\n transform: translateX(16px);\n }\n }\n `,\n ],\n})\nexport class StrctToastOutlet {\n protected readonly service = inject(StrctToastService);\n protected icon(type: StrctToastType): string {\n return TOAST_ICON[type];\n }\n}\n","/**\n * Public API surface of the strct UI library.\n */\n\n// Theme\nexport * from './lib/theme/theme.service';\nexport * from './lib/theme/theme-switcher';\n\n// Foundations\nexport * from './lib/icon/icon';\nexport * from './lib/overlay/overlay';\n\n// Layout\nexport * from './lib/layout/layout';\nexport * from './lib/layout/nav';\nexport * from './lib/layout/login';\n\n// Buttons & indicators\nexport * from './lib/button/button';\nexport * from './lib/badge/badge';\nexport * from './lib/tag/tag';\nexport * from './lib/avatar/avatar';\nexport * from './lib/progress/progress';\nexport * from './lib/spinner/spinner';\nexport * from './lib/skeleton/skeleton';\nexport * from './lib/speed-dial/speed-dial';\n\n// Surfaces & disclosure\nexport * from './lib/card/card';\nexport * from './lib/accordion/accordion';\nexport * from './lib/tabs/tabs';\nexport * from './lib/tree/tree';\nexport * from './lib/modal/modal';\nexport * from './lib/dropdown/dropdown';\nexport * from './lib/context-menu/context-menu';\nexport * from './lib/context-menu/submenu';\nexport * from './lib/context-menu/menu';\nexport * from './lib/wizard/wizard';\nexport * from './lib/divider/divider';\n\n// Navigation\nexport * from './lib/breadcrumb/breadcrumb';\nexport * from './lib/pagination/pagination';\n\n// Forms\nexport * from './lib/forms/field';\nexport * from './lib/forms/input';\nexport * from './lib/forms/checkbox';\nexport * from './lib/forms/toggle';\nexport * from './lib/forms/radio';\nexport * from './lib/forms/range';\nexport * from './lib/forms/password';\nexport * from './lib/forms/file';\nexport * from './lib/rating/rating';\nexport * from './lib/chips/chips';\nexport * from './lib/input-otp/input-otp';\nexport * from './lib/knob/knob';\nexport * from './lib/input-mask/input-mask';\nexport * from './lib/combobox/combobox';\nexport * from './lib/datepicker/datepicker';\nexport * from './lib/color-picker/color-picker';\nexport * from './lib/cascade-select/cascade-select';\n\n// Data\nexport * from './lib/table/table';\nexport * from './lib/datagrid/datagrid';\nexport * from './lib/timeline/timeline';\nexport * from './lib/stack/stack';\n\n// Charts\nexport * from './lib/charts/sparkline';\nexport * from './lib/charts/chart';\nexport * from './lib/charts/donut';\nexport * from './lib/charts/gauge';\n\n// Feedback\nexport * from './lib/alert/alert';\nexport * from './lib/tooltip/tooltip';\nexport * from './lib/signpost/signpost';\nexport * from './lib/toast/toast';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["DOCUMENT","COLOR"],"mappings":"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"}
1
+ {"version":3,"file":"akcelik-strct.mjs","sources":["../../../projects/strct/src/lib/theme/theme.service.ts","../../../projects/strct/src/lib/icon/icon.ts","../../../projects/strct/src/lib/theme/theme-switcher.ts","../../../projects/strct/src/lib/overlay/overlay.ts","../../../projects/strct/src/lib/layout/layout.ts","../../../projects/strct/src/lib/layout/nav.ts","../../../projects/strct/src/lib/layout/login.ts","../../../projects/strct/src/lib/button/button.ts","../../../projects/strct/src/lib/badge/badge.ts","../../../projects/strct/src/lib/tag/tag.ts","../../../projects/strct/src/lib/avatar/avatar.ts","../../../projects/strct/src/lib/progress/progress.ts","../../../projects/strct/src/lib/spinner/spinner.ts","../../../projects/strct/src/lib/skeleton/skeleton.ts","../../../projects/strct/src/lib/speed-dial/speed-dial.ts","../../../projects/strct/src/lib/card/card.ts","../../../projects/strct/src/lib/accordion/accordion.ts","../../../projects/strct/src/lib/tabs/tabs.ts","../../../projects/strct/src/lib/context-menu/menu.ts","../../../projects/strct/src/lib/tree/tree.ts","../../../projects/strct/src/lib/modal/modal.ts","../../../projects/strct/src/lib/dropdown/dropdown.ts","../../../projects/strct/src/lib/context-menu/context-menu.ts","../../../projects/strct/src/lib/context-menu/submenu.ts","../../../projects/strct/src/lib/wizard/wizard.ts","../../../projects/strct/src/lib/divider/divider.ts","../../../projects/strct/src/lib/breadcrumb/breadcrumb.ts","../../../projects/strct/src/lib/pagination/pagination.ts","../../../projects/strct/src/lib/forms/field.ts","../../../projects/strct/src/lib/forms/input.ts","../../../projects/strct/src/lib/forms/checkbox.ts","../../../projects/strct/src/lib/forms/toggle.ts","../../../projects/strct/src/lib/forms/radio.ts","../../../projects/strct/src/lib/forms/range.ts","../../../projects/strct/src/lib/forms/password.ts","../../../projects/strct/src/lib/forms/file.ts","../../../projects/strct/src/lib/rating/rating.ts","../../../projects/strct/src/lib/chips/chips.ts","../../../projects/strct/src/lib/input-otp/input-otp.ts","../../../projects/strct/src/lib/knob/knob.ts","../../../projects/strct/src/lib/input-mask/input-mask.ts","../../../projects/strct/src/lib/combobox/combobox.ts","../../../projects/strct/src/lib/datepicker/datepicker.ts","../../../projects/strct/src/lib/color-picker/color-picker.ts","../../../projects/strct/src/lib/cascade-select/cascade-select.ts","../../../projects/strct/src/lib/table/table.ts","../../../projects/strct/src/lib/datagrid/datagrid.ts","../../../projects/strct/src/lib/timeline/timeline.ts","../../../projects/strct/src/lib/stack/stack.ts","../../../projects/strct/src/lib/charts/sparkline.ts","../../../projects/strct/src/lib/charts/chart.ts","../../../projects/strct/src/lib/charts/donut.ts","../../../projects/strct/src/lib/charts/gauge.ts","../../../projects/strct/src/lib/alert/alert.ts","../../../projects/strct/src/lib/tooltip/tooltip.ts","../../../projects/strct/src/lib/signpost/signpost.ts","../../../projects/strct/src/lib/toast/toast.ts","../../../projects/strct/src/public-api.ts","../../../projects/strct/src/akcelik-strct.ts"],"sourcesContent":["import { DOCUMENT, Injectable, computed, inject, signal } from '@angular/core';\n\n/** Available color palettes. */\nexport type StrctPalette = 'arctic' | 'ember' | 'sage';\n/** Light or dark mode. */\nexport type StrctMode = 'dark' | 'light';\n\n/** Metadata for a color palette. */\nexport interface StrctPaletteInfo {\n id: StrctPalette;\n /** Human label, shown in switchers. */\n label: string;\n /** Swatch color used by the palette dot. */\n swatch: string;\n}\n\n/** All palettes the token system ships with, in display order. */\nexport const STRCT_PALETTES: readonly StrctPaletteInfo[] = [\n { id: 'arctic', label: 'Arctic Steel', swatch: '#5a7ea3' },\n { id: 'ember', label: 'Warm Ember', swatch: '#96724e' },\n { id: 'sage', label: 'Forest Sage', swatch: '#4e8a68' },\n];\n\nconst PALETTE_KEY = 'strct-palette';\nconst MODE_KEY = 'strct-theme';\n\n/**\n * Owns the active palette + light/dark mode. Writes `data-palette` and\n * `data-theme` onto the document root (which the token layer keys off) and\n * persists the choice to localStorage. Inject it anywhere and read the signals\n * or call the setters.\n */\n@Injectable({ providedIn: 'root' })\nexport class StrctThemeService {\n private readonly doc = inject(DOCUMENT);\n\n private readonly _palette = signal<StrctPalette>('arctic');\n private readonly _mode = signal<StrctMode>('dark');\n\n readonly palette = this._palette.asReadonly();\n readonly mode = this._mode.asReadonly();\n readonly palettes = STRCT_PALETTES;\n readonly isDark = computed(() => this._mode() === 'dark');\n\n constructor() {\n const root = this.doc.documentElement;\n const storedPalette = this.read(PALETTE_KEY) as StrctPalette | null;\n const storedMode = this.read(MODE_KEY) as StrctMode | null;\n\n // Fall back to whatever the host page already declared, then to defaults.\n const palette =\n storedPalette ?? (root.getAttribute('data-palette') as StrctPalette | null) ?? 'arctic';\n const mode = storedMode ?? (root.getAttribute('data-theme') as StrctMode | null) ?? 'dark';\n\n this.setPalette(palette);\n this.setMode(mode);\n }\n\n setPalette(palette: StrctPalette): void {\n this._palette.set(palette);\n this.doc.documentElement.setAttribute('data-palette', palette);\n this.write(PALETTE_KEY, palette);\n }\n\n setMode(mode: StrctMode): void {\n this._mode.set(mode);\n this.doc.documentElement.setAttribute('data-theme', mode);\n this.write(MODE_KEY, mode);\n }\n\n toggleMode(): void {\n this.setMode(this._mode() === 'dark' ? 'light' : 'dark');\n }\n\n private read(key: string): string | null {\n try {\n return this.doc.defaultView?.localStorage.getItem(key) ?? null;\n } catch {\n return null;\n }\n }\n\n private write(key: string, value: string): void {\n try {\n this.doc.defaultView?.localStorage.setItem(key, value);\n } catch {\n // Storage unavailable (private mode / SSR) — choice is session-only.\n }\n }\n}\n","import {\n Component,\n ChangeDetectionStrategy,\n ViewEncapsulation,\n computed,\n input,\n} from '@angular/core';\nimport { DomSanitizer, SafeHtml } from '@angular/platform-browser';\nimport { inject } from '@angular/core';\n\n/**\n * Inner markup (path/shape contents) for each icon, drawn on a 0 0 16 16\n * viewBox with `currentColor` stroke. Keep strokes at 1.3–1.5 for crispness.\n *\n * The set is intentionally datacenter-flavoured (hosts, clusters, switches,\n * storage, VMs …). Object state — running / stopped / maintenance — is layered\n * on with the `badge` input rather than a separate icon per state.\n */\nexport const STRCT_ICONS: Record<string, string> = {\n // ── General UI ───────────────────────────────────────────────\n hexagon: '<path d=\"M8 1.6l5.5 3.2v6.4L8 14.4 2.5 11.2V4.8L8 1.6z\"/>',\n chevronRight: '<path d=\"M6 3.5L10.5 8 6 12.5\"/>',\n chevronLeft: '<path d=\"M10 3.5L5.5 8 10 12.5\"/>',\n chevronDoubleRight: '<path d=\"M3.5 3.5L8 8l-4.5 4.5M8.5 3.5L13 8l-4.5 4.5\"/>',\n chevronDown: '<path d=\"M3.5 6L8 10.5 12.5 6\"/>',\n compass: '<circle cx=\"8\" cy=\"8\" r=\"6\"/><path d=\"M10.6 5.4l-1.5 3.7-3.7 1.5 1.5-3.7 3.7-1.5z\"/>',\n close: '<path d=\"M4 4l8 8M12 4l-8 8\"/>',\n check: '<path d=\"M3.5 8.5l3 3 6-7\"/>',\n menu: '<path d=\"M3 4.5h10M3 8h10M3 11.5h10\"/>',\n dots: '<circle cx=\"8\" cy=\"3.5\" r=\"1.1\" fill=\"currentColor\" stroke=\"none\"/><circle cx=\"8\" cy=\"8\" r=\"1.1\" fill=\"currentColor\" stroke=\"none\"/><circle cx=\"8\" cy=\"12.5\" r=\"1.1\" fill=\"currentColor\" stroke=\"none\"/>',\n search: '<circle cx=\"7\" cy=\"7\" r=\"4\"/><path d=\"M10 10l3.5 3.5\"/>',\n calendar:\n '<rect x=\"2.5\" y=\"3.5\" width=\"11\" height=\"10\" rx=\"1.5\"/><path d=\"M2.5 6.5h11M5.5 2v3M10.5 2v3\"/>',\n eye: '<path d=\"M1.5 8S4 3.5 8 3.5 14.5 8 14.5 8 12 12.5 8 12.5 1.5 8 1.5 8z\"/><circle cx=\"8\" cy=\"8\" r=\"2\"/>',\n upload: '<path d=\"M8 10.5V3M5 5.8L8 2.8l3 3M3 12.8h10\"/>',\n download: '<path d=\"M8 2.5V10M5 7.2L8 10.2l3-3M3 12.8h10\"/>',\n droplet: '<path d=\"M8 2.4S12 6.6 12 9.4a4 4 0 01-8 0c0-2.8 4-7 4-7z\"/>',\n sortAsc: '<path d=\"M8 3.5v9M5 6.5L8 3.5l3 3\"/>',\n sortDesc: '<path d=\"M8 12.5v-9M5 9.5l3 3 3-3\"/>',\n sortNone: '<path d=\"M5.5 6.5L8 4l2.5 2.5M5.5 9.5L8 12l2.5-2.5\"/>',\n sun: '<circle cx=\"8\" cy=\"8\" r=\"3.2\"/><path d=\"M8 1.5v1.5M8 13v1.5M1.5 8H3M13 8h1.5M3.8 3.8l1 1M11.2 11.2l1 1M3.8 12.2l1-1M11.2 4.8l1-1\"/>',\n moon: '<path d=\"M13 9a5 5 0 01-6-6 5.5 5.5 0 106 6z\"/>',\n info: '<circle cx=\"8\" cy=\"8\" r=\"6\"/><path d=\"M8 7.2v3.6M8 5.2v.2\"/>',\n warning: '<path d=\"M8 2.5l6 11H2l6-11z\"/><path d=\"M8 6.8v3M8 11.6v.2\"/>',\n critical: '<circle cx=\"8\" cy=\"8\" r=\"6\"/><path d=\"M8 5v3.6M8 10.8v.2\"/>',\n success: '<circle cx=\"8\" cy=\"8\" r=\"6\"/><path d=\"M5.2 8.2l2 2 3.6-4\"/>',\n bell: '<path d=\"M8 2.6a3.4 3.4 0 00-3.4 3.4c0 2.9-1.1 3.9-1.1 3.9h9s-1.1-1-1.1-3.9A3.4 3.4 0 008 2.6z\"/><path d=\"M6.8 12.8a1.3 1.3 0 002.4 0\"/>',\n heart:\n '<path d=\"M8 13.3S2.7 10 2.7 6.3A2.6 2.6 0 018 4.9a2.6 2.6 0 015.3 1.4C13.3 10 8 13.3 8 13.3z\"/>',\n layers:\n '<path d=\"M8 2l5.5 3-5.5 3-5.5-3L8 2z\"/><path d=\"M2.5 8L8 11l5.5-3\"/><path d=\"M2.5 11L8 14l5.5-3\"/>',\n grid: '<rect x=\"2\" y=\"2.5\" width=\"5\" height=\"5\" rx=\"1\"/><rect x=\"9\" y=\"2.5\" width=\"5\" height=\"5\" rx=\"1\"/><rect x=\"2\" y=\"9\" width=\"5\" height=\"5\" rx=\"1\"/><rect x=\"9\" y=\"9\" width=\"5\" height=\"5\" rx=\"1\"/>',\n form: '<rect x=\"2.5\" y=\"2.5\" width=\"11\" height=\"11\" rx=\"1.5\"/><path d=\"M5 6h6M5 8.5h6M5 11h3.5\"/>',\n chart: '<path d=\"M2.5 13V3M2.5 13H13\"/><path d=\"M5 10l2.3-2.3 2 1.4L12.5 5.5\"/>',\n bars: '<path d=\"M2.5 13V3M2.5 13H13\"/><rect x=\"4.3\" y=\"8.5\" width=\"1.8\" height=\"2.5\"/><rect x=\"7.4\" y=\"6.5\" width=\"1.8\" height=\"4.5\"/><rect x=\"10.5\" y=\"4.5\" width=\"1.8\" height=\"6.5\"/>',\n sidebar:\n '<rect x=\"2\" y=\"3\" width=\"12\" height=\"10\" rx=\"1.5\"/><line x1=\"6.2\" y1=\"3\" x2=\"6.2\" y2=\"13\"/>',\n palette:\n '<path d=\"M8 2.2a5.8 5.8 0 100 11.6c.9 0 1.4-.7 1.4-1.4 0-.9-.8-1.2-.8-1.9 0-.5.4-.9 1-.9h1A3.2 3.2 0 0013.8 6 5.9 5.9 0 008 2.2z\"/><circle cx=\"5.4\" cy=\"6.6\" r=\".7\" fill=\"currentColor\" stroke=\"none\"/><circle cx=\"8\" cy=\"5.2\" r=\".7\" fill=\"currentColor\" stroke=\"none\"/><circle cx=\"10.4\" cy=\"6.6\" r=\".7\" fill=\"currentColor\" stroke=\"none\"/>',\n gauge:\n '<path d=\"M2.6 11.5a6 6 0 1110.8 0\"/><path d=\"M8 8.5l2.6-2.2\"/><circle cx=\"8\" cy=\"8.6\" r=\".7\" fill=\"currentColor\" stroke=\"none\"/>',\n copy: '<rect x=\"5\" y=\"5\" width=\"8\" height=\"8\" rx=\"1.4\"/><path d=\"M11 5V3.9A1.4 1.4 0 0 0 9.6 2.5H3.9A1.4 1.4 0 0 0 2.5 3.9v5.7A1.4 1.4 0 0 0 3.9 11H5\"/>',\n code: '<path d=\"M5.5 5L2.5 8l3 3M10.5 5l3 3-3 3M9 3.5l-2 9\"/>',\n book: '<path d=\"M3 3.2h6a1.5 1.5 0 0 1 1.5 1.5v8.1H4.5A1.5 1.5 0 0 1 3 11.3z\"/><path d=\"M13 3.2H9.5A1.5 1.5 0 0 0 8 4.7v8.1h5z\"/>',\n terminal:\n '<rect x=\"2\" y=\"3\" width=\"12\" height=\"10\" rx=\"1.5\"/><path d=\"M4.8 6.5L7 8.2 4.8 9.9M8.2 10.2h3\"/>',\n folder:\n '<path d=\"M2 4.6a1 1 0 0 1 1-1h3.1l1.3 1.6H13a1 1 0 0 1 1 1V12a1 1 0 0 1-1 1H3a1 1 0 0 1-1-1z\"/>',\n template:\n '<path d=\"M4.3 2.5h4.6l3.1 3.1V13a.5.5 0 0 1-.5.5H4.3a.5.5 0 0 1-.5-.5V3a.5.5 0 0 1 .5-.5z\"/><path d=\"M8.7 2.6v3.1h3.1\"/><path d=\"M5.8 9h4.2M5.8 11h2.6\"/>',\n tag: '<path d=\"M2.6 7.7V3.2a.6.6 0 0 1 .6-.6h4.5l5.6 5.6a1 1 0 0 1 0 1.4l-3.5 3.5a1 1 0 0 1-1.4 0z\"/><circle cx=\"5.4\" cy=\"5.4\" r=\".9\" fill=\"currentColor\" stroke=\"none\"/>',\n\n // ── Actions ──────────────────────────────────────────────────\n plus: '<path d=\"M8 3v10M3 8h10\"/>',\n minus: '<path d=\"M3 8h10\"/>',\n pencil: '<path d=\"M11.5 2.5l2 2-8.5 8.5-3 .5.5-3z\"/>',\n trash: '<path d=\"M2.5 4.5h11M5.5 4.5v8.5a1 1 0 001 1h3a1 1 0 001-1V4.5M6.5 3h3\"/>',\n refresh: '<path d=\"M13.5 7.5a5.5 5.5 0 11-2-5.2\"/><path d=\"M13.5 2.5v3.5H10\"/>',\n filter: '<path d=\"M2 3.5h12l-4.5 5.5v4.5h-3V9z\"/>',\n settings:\n '<path d=\"M8 5.5a2.5 2.5 0 100 5 2.5 2.5 0 000-5z\"/><path d=\"M7.2 1.5h1.6l.3 1.8c.4.1.8.3 1.2.5l1.5-1.1 1.1 1.1-1.1 1.5c.2.4.4.8.5 1.2l1.8.3v1.6l-1.8.3c-.1.4-.3.8-.5 1.2l1.1 1.5-1.1 1.1-1.5-1.1c-.4.2-.8.4-1.2.5l-.3 1.8H7.2l-.3-1.8a5.4 5.4 0 01-1.2-.5l-1.5 1.1-1.1-1.1 1.1-1.5a5.4 5.4 0 01-.5-1.2l-1.8-.3V7.2l1.8-.3c.1-.4.3-.8.5-1.2L2.7 4.2l1.1-1.1 1.5 1.1c.4-.2.8-.4 1.2-.5z\"/>',\n user: '<path d=\"M8 8a2.5 2.5 0 100-5A2.5 2.5 0 008 8z\"/><path d=\"M3 14.5c0-2.8 2.2-5 5-5s5 2.2 5 5\"/>',\n logout: '<path d=\"M10 3.5h2a1 1 0 011 1v7a1 1 0 01-1 1h-2M6.5 5.5L3.5 8l3 3M3.5 8h6.5\"/>',\n undo: '<path d=\"M4.5 5.5L2 8l2.5 2.5M2.5 8h7a3 3 0 013 3v.5\"/>',\n redo: '<path d=\"M11.5 5.5L14 8l-2.5 2.5M13.5 8h-7a3 3 0 00-3 3v.5\"/>',\n arrowUp: '<path d=\"M8 13V3M3.5 6.5L8 2l4.5 4.5\"/>',\n arrowDown: '<path d=\"M8 3v10M3.5 9.5L8 14l4.5-4.5\"/>',\n arrowLeft: '<path d=\"M13 8H3M6.5 3.5L2 8l4.5 4.5\"/>',\n arrowRight: '<path d=\"M3 8h10M9.5 3.5L14 8l-4.5 4.5\"/>',\n externalLink:\n '<path d=\"M9 2.5h4.5V7M13.5 2.5L8.5 7.5M11.5 9v3.5a1 1 0 01-1 1h-7a1 1 0 01-1-1v-7a1 1 0 011-1H7\"/>',\n\n // ── Datacenter / infrastructure ─────────────────────────────\n datacenter:\n '<rect x=\"2.5\" y=\"2.5\" width=\"11\" height=\"11\" rx=\"1\"/><path d=\"M5 5h6M5 7.3h6M5 9.6h3.5\"/><circle cx=\"11\" cy=\"9.7\" r=\".5\" fill=\"currentColor\" stroke=\"none\"/>',\n rack: '<rect x=\"3.5\" y=\"2\" width=\"9\" height=\"12\" rx=\"1\"/><path d=\"M3.5 5.2h9M3.5 8.4h9M3.5 11.6h9\"/><circle cx=\"5.4\" cy=\"3.6\" r=\".4\" fill=\"currentColor\" stroke=\"none\"/><circle cx=\"5.4\" cy=\"6.8\" r=\".4\" fill=\"currentColor\" stroke=\"none\"/><circle cx=\"5.4\" cy=\"10\" r=\".4\" fill=\"currentColor\" stroke=\"none\"/>',\n cluster:\n '<rect x=\"2\" y=\"2.5\" width=\"5\" height=\"5\" rx=\"1\"/><rect x=\"9\" y=\"2.5\" width=\"5\" height=\"5\" rx=\"1\"/><rect x=\"5.5\" y=\"9\" width=\"5\" height=\"5\" rx=\"1\"/><path d=\"M4.5 7.5l2.5 1.5M11.5 7.5L9 9\"/>',\n host: '<rect x=\"2.5\" y=\"3\" width=\"11\" height=\"4.2\" rx=\"1\"/><rect x=\"2.5\" y=\"8.8\" width=\"11\" height=\"4.2\" rx=\"1\"/><circle cx=\"4.7\" cy=\"5.1\" r=\".55\" fill=\"currentColor\" stroke=\"none\"/><circle cx=\"4.7\" cy=\"10.9\" r=\".55\" fill=\"currentColor\" stroke=\"none\"/><path d=\"M7 5.1h4M7 10.9h4\"/>',\n vm: '<rect x=\"2\" y=\"3\" width=\"12\" height=\"8\" rx=\"1\"/><path d=\"M6 14h4M8 11v3\"/>',\n switch:\n '<rect x=\"2\" y=\"5.5\" width=\"12\" height=\"5\" rx=\"1\"/><path d=\"M4.5 5.5V3.8M7 5.5V3.8M9 5.5V3.8M11.5 5.5V3.8M4.5 10.5v1.7M7 10.5v1.7M9 10.5v1.7M11.5 10.5v1.7\"/>',\n storage:\n '<ellipse cx=\"8\" cy=\"3.6\" rx=\"5\" ry=\"2\"/><path d=\"M3 3.6v8.8c0 1.1 2.2 2 5 2s5-.9 5-2V3.6\"/><path d=\"M3 8c0 1.1 2.2 2 5 2s5-.9 5-2\"/>',\n network:\n '<circle cx=\"8\" cy=\"3.4\" r=\"1.7\"/><circle cx=\"3.6\" cy=\"12.4\" r=\"1.7\"/><circle cx=\"12.4\" cy=\"12.4\" r=\"1.7\"/><path d=\"M8 5.1v2.6M7 8.8l-2.4 2M9 8.8l2.4 2\"/>',\n cpu: '<rect x=\"4.5\" y=\"4.5\" width=\"7\" height=\"7\" rx=\"1\"/><rect x=\"6.6\" y=\"6.6\" width=\"2.8\" height=\"2.8\" rx=\".5\"/><path d=\"M6.5 2.6v1.9M9.5 2.6v1.9M6.5 11.5v1.9M9.5 11.5v1.9M2.6 6.5h1.9M2.6 9.5h1.9M11.5 6.5h1.9M11.5 9.5h1.9\"/>',\n memory:\n '<rect x=\"2\" y=\"5\" width=\"12\" height=\"6\" rx=\"1\"/><path d=\"M4.5 11v1.6M7 11v1.6M9 11v1.6M11.5 11v1.6M5 7.2h6\"/>',\n disk: '<circle cx=\"8\" cy=\"8\" r=\"5.6\"/><circle cx=\"8\" cy=\"8\" r=\"1.3\"/><path d=\"M8 2.4v2.3\"/>',\n port: '<rect x=\"3\" y=\"5\" width=\"10\" height=\"6\" rx=\"1\"/><path d=\"M6.5 5V3.6h3V5M5 11v1.6M11 11v1.6\"/>',\n power: '<path d=\"M8 2.4v5\"/><path d=\"M5.2 4.6a5 5 0 105.6 0\"/>',\n // Network Adapter Card (NIC) — PCIe card with an RJ45 (square) port.\n nic: '<rect x=\"2.3\" y=\"3.4\" width=\"11.4\" height=\"6.4\" rx=\"1\"/><rect x=\"3.9\" y=\"5.1\" width=\"3.2\" height=\"3\" rx=\".4\"/><path d=\"M8.6 6.1h3.4M8.6 7.9h3.4M5 9.8v2.6M11 9.8v2.6\"/>',\n // Host Bus Adapter (HBA) — PCIe card with optical/SFP (round) ports.\n hba: '<rect x=\"2.3\" y=\"3.4\" width=\"11.4\" height=\"6.4\" rx=\"1\"/><circle cx=\"5.1\" cy=\"6.6\" r=\"1.2\"/><circle cx=\"8.1\" cy=\"6.6\" r=\"1.2\"/><path d=\"M10.6 5.6h1.6M10.6 7.6h1.6M5 9.8v2.6M11 9.8v2.6\"/>',\n // RJ45 ethernet port (switch / server) — keyed jack with contact pins.\n ethernet:\n '<rect x=\"2.5\" y=\"4\" width=\"11\" height=\"7.4\" rx=\"1\"/><path d=\"M6 4V2.6h4V4\"/><path d=\"M5.3 7.6v2M7.1 7.6v2M8.9 7.6v2M10.7 7.6v2\"/>',\n // Resource pool — a proportional allocation (pie with two radii).\n resourcePool: '<circle cx=\"8\" cy=\"8\" r=\"5.6\"/><path d=\"M8 8V2.4M8 8l4.9 2.7\"/>',\n // Port group — a grouped set of switch ports under a shared rail.\n portGroup:\n '<path d=\"M1.8 4.4h12.4\"/><rect x=\"2.2\" y=\"6.2\" width=\"3.4\" height=\"4\" rx=\".5\"/><rect x=\"6.3\" y=\"6.2\" width=\"3.4\" height=\"4\" rx=\".5\"/><rect x=\"10.4\" y=\"6.2\" width=\"3.4\" height=\"4\" rx=\".5\"/><path d=\"M3.9 10.2v1.6M8 10.2v1.6M12.1 10.2v1.6\"/>',\n\n // ── Modern infrastructure ────────────────────────────────────\n pod: '<path d=\"M3 4.5c0-1.1 2.2-2 5-2s5 .9 5 2v7c0 1.1-2.2 2-5 2s-5-.9-5-2z\"/><path d=\"M3 4.5c0 1.1 2.2 2 5 2s5-.9 5-2\"/>',\n deployment:\n '<rect x=\"2.5\" y=\"2.5\" width=\"11\" height=\"4.5\" rx=\"1\"/><rect x=\"2.5\" y=\"9\" width=\"11\" height=\"4.5\" rx=\"1\"/><path d=\"M11.5 5.5l2.5-1.5v4l-2.5-1.5\"/>',\n service:\n '<circle cx=\"4.5\" cy=\"8\" r=\"2\"/><circle cx=\"11.5\" cy=\"4.5\" r=\"2\"/><circle cx=\"11.5\" cy=\"11.5\" r=\"2\"/><path d=\"M6.2 6.8l3.3-1.3M6.2 9.2l3.3 1.3\"/>',\n node: '<rect x=\"2.5\" y=\"4\" width=\"11\" height=\"8\" rx=\"1\"/><path d=\"M5 7h6M5 10h3\"/><circle cx=\"11\" cy=\"10\" r=\".7\" fill=\"currentColor\" stroke=\"none\"/>',\n ingress: '<path d=\"M1.5 4.5h10M1.5 8h8M1.5 11.5h10\"/><path d=\"M10.5 6.5l3 1.5-3 1.5\"/>',\n cloud: '<path d=\"M11.5 10.5a2.5 2.5 0 00-1.5-4.5 2.8 2.8 0 00-5.2.3A2.5 2.5 0 004 10.5z\"/>',\n container:\n '<rect x=\"2.5\" y=\"2.5\" width=\"11\" height=\"11\" rx=\"1.5\"/><path d=\"M2.5 5.5h11M5.5 5.5V3M8 5.5V3M10.5 5.5V3\"/>',\n firewall: '<path d=\"M1.5 4h13v8h-13z\"/><path d=\"M1.5 6.5h13M5 6.5V12M8 4V12M11 6.5V12\"/>',\n shield: '<path d=\"M8 2.3l5.2 1.9v3.3c0 3.1-2.3 5.1-5.2 6.4C5.1 12.6 2.8 10.6 2.8 7.5V4.2z\"/>',\n certificate:\n '<path d=\"M3 2.5h10v9H3z\"/><path d=\"M3 5.5h10M6 8h4\"/><circle cx=\"8\" cy=\"11\" r=\".6\" fill=\"currentColor\" stroke=\"none\"/><path d=\"M12 3.5l2 1.5-2 1.5V3.5z\"/>',\n key: '<circle cx=\"5\" cy=\"9\" r=\"2.8\"/><path d=\"M6.9 7.1l5.6-5.6M11 4.5h2.5V7\"/>',\n metrics: '<path d=\"M2.5 13V3M2.5 13H13\"/><path d=\"M4.5 10l2.5-4 2 2 3-5\"/>',\n logs: '<path d=\"M3 4.5h10M3 7h10M3 9.5h7M3 12h4\"/>',\n trace:\n '<circle cx=\"3.5\" cy=\"5.5\" r=\"1.2\"/><circle cx=\"8\" cy=\"11\" r=\"1.2\"/><circle cx=\"12.5\" cy=\"5.5\" r=\"1.2\"/><path d=\"M4.5 6.3l2.5 3.4M9 9.2l2.5-3.4\"/>',\n\n // ── Accessibility (original glyphs for generic concepts) ─────\n universalAccess:\n '<circle cx=\"8\" cy=\"8\" r=\"6\"/><circle cx=\"8\" cy=\"4.9\" r=\".9\" fill=\"currentColor\" stroke=\"none\"/><path d=\"M4.9 6.3c2 .8 4.2 .8 6.2 0M8 6.4v3.1M6.3 11.9 8 9.4l1.7 2.5\"/>',\n wheelchair:\n '<circle cx=\"6.5\" cy=\"3.1\" r=\"1.3\"/><path d=\"M6.5 4.5v3.3h3.1l1.7 3.4\"/><circle cx=\"6.7\" cy=\"11.3\" r=\"2.6\"/><path d=\"M9.3 11.3h2.1l-.5 1.6\"/>',\n hearing:\n '<path d=\"M5 6.2a3 3 0 0 1 6 0c0 2.2-2.2 2.6-2.2 4.7A1.8 1.8 0 0 1 5 10.8\"/><path d=\"M8.6 13.1a2.2 2.2 0 0 0 2.1-2.2\"/>',\n lowVision:\n '<path d=\"M1.8 8S4.2 4 8 4s6.2 4 6.2 4\"/><circle cx=\"8\" cy=\"8.3\" r=\"2.1\"/><path d=\"M2.6 10.8 4 9.4M13.4 10.8 12 9.4\"/>',\n braille:\n '<circle cx=\"5\" cy=\"4.5\" r=\".85\" fill=\"currentColor\" stroke=\"none\"/><circle cx=\"5\" cy=\"8\" r=\".85\" fill=\"currentColor\" stroke=\"none\"/><circle cx=\"5\" cy=\"11.5\" r=\".85\" fill=\"currentColor\" stroke=\"none\"/><circle cx=\"9\" cy=\"4.5\" r=\".85\" fill=\"currentColor\" stroke=\"none\"/><circle cx=\"9\" cy=\"8\" r=\".85\" fill=\"currentColor\" stroke=\"none\"/><circle cx=\"11.2\" cy=\"6\" r=\".85\" fill=\"currentColor\" stroke=\"none\"/>',\n signLanguage:\n '<path d=\"M5.6 9.4V5a1 1 0 0 1 2 0M7.6 8V4.3a1 1 0 0 1 2 0V8M9.6 8V5.3a1 1 0 0 1 2 0v4.2c0 2.1-1.7 3.7-3.8 3.7-1.2 0-2.3-.5-3.1-1.5L4.1 11.5a1 1 0 0 1 1.5-1.3z\"/>',\n\n // ── Alert (original glyphs) ─────────────────────────────────\n siren: '<path d=\"M3.5 13h9M5 13V8a3 3 0 0 1 6 0v5M8 2.4V4M3.6 4.6l1 .9M12.4 4.6l-1 .9\"/>',\n alarm:\n '<circle cx=\"8\" cy=\"9\" r=\"4.4\"/><path d=\"M8 6.6V9l1.7 1M5 2.6 3.1 4.3M11 2.6l1.9 1.7M8 4.6V3\"/>',\n megaphone: '<path d=\"M3 7.3v1.6l7 3V4.3zM10 5.7 12.5 4.2v7.6L10 10.3M4 9.6l.9 3.1h1.6l-.7-2.9\"/>',\n flag: '<path d=\"M4 13.5V3M4 3.6h7.4L9.8 6.2l1.6 2.6H4\"/>',\n shieldAlert:\n '<path d=\"M8 2.3l5.2 1.9v3.3c0 3.1-2.3 5.1-5.2 6.4C5.1 12.6 2.8 10.6 2.8 7.5V4.2z\"/><path d=\"M8 5.5v3.1M8 10.6v.2\"/>',\n\n // ── State / action (also usable as badges via the icon `badge` input) ─\n running: '<path d=\"M5.5 4l6 4-6 4z\"/>',\n stopped: '<rect x=\"4.5\" y=\"4.5\" width=\"7\" height=\"7\" rx=\"1\"/>',\n paused:\n '<rect x=\"5.2\" y=\"4\" width=\"2\" height=\"8\" rx=\".5\"/><rect x=\"8.8\" y=\"4\" width=\"2\" height=\"8\" rx=\".5\"/>',\n maintenance:\n '<path d=\"M10.8 3.2a2.7 2.7 0 00-3.5 3.4l-4.2 4.2L4.6 12.7l4.2-4.2a2.7 2.7 0 003.4-3.5L10.5 6.7 9.3 6.4 9 5.2z\"/>',\n sync: '<path d=\"M12.5 7a4.5 4.5 0 00-8-2.5M3.5 9a4.5 4.5 0 008 2.5\"/><path d=\"M12.5 3v2.5H10M3.5 13v-2.5H6\"/>',\n snapshot:\n '<rect x=\"2.5\" y=\"4.5\" width=\"11\" height=\"8\" rx=\"1.5\"/><circle cx=\"8\" cy=\"8.5\" r=\"2.3\"/><path d=\"M6 4.5l1-1.5h2l1 1.5\"/>',\n lock: '<rect x=\"3.5\" y=\"7\" width=\"9\" height=\"6\" rx=\"1.5\"/><path d=\"M5.5 7V5.4a2.5 2.5 0 015 0V7\"/>',\n\n // ── Generic vendor marks (abstract glyphs, NOT real trademarked logos) ─\n vendorVmware:\n '<rect x=\"2.5\" y=\"6.5\" width=\"3\" height=\"3.4\" rx=\".5\"/><rect x=\"6.5\" y=\"6.5\" width=\"3\" height=\"3.4\" rx=\".5\"/><rect x=\"10.5\" y=\"6.5\" width=\"3\" height=\"3.4\" rx=\".5\"/>',\n vendorCisco: '<path d=\"M2.5 10.5V7.5M5.5 10.5V5M8 10.5V3.5M10.5 10.5V5M13.5 10.5V7.5\"/>',\n vendorHpe: '<rect x=\"2.5\" y=\"5\" width=\"11\" height=\"6\" rx=\"1\"/><path d=\"M5.5 5v6\"/>',\n vendorDell: '<circle cx=\"8\" cy=\"8\" r=\"5.6\"/><path d=\"M5.4 8h3.4M5.4 6.6h2.6M5.4 9.4h2.6\"/>',\n vendorKaytus: '<path d=\"M5 3v10M5 8l4.5-4.5M5 8l4.5 5\"/>',\n};\n\n// Composite \"off\" variants — re-use base glyph + diagonal slash.\nSTRCT_ICONS['eyeOff'] = `${STRCT_ICONS['eye']}<path d=\"M2.5 2.5l11 11\"/>`;\nSTRCT_ICONS['bellOff'] = `${STRCT_ICONS['bell']}<path d=\"M2.6 2.6l10.8 10.8\"/>`;\n\n/** Icon names grouped for galleries / documentation. */\nexport const STRCT_ICON_GROUPS: { label: string; names: string[] }[] = [\n {\n label: 'General',\n names: [\n 'hexagon',\n 'search',\n 'menu',\n 'dots',\n 'close',\n 'check',\n 'calendar',\n 'eye',\n 'eyeOff',\n 'upload',\n 'download',\n 'sun',\n 'moon',\n 'bell',\n 'heart',\n 'layers',\n 'grid',\n 'form',\n 'chart',\n 'bars',\n 'gauge',\n 'palette',\n 'sidebar',\n 'compass',\n 'copy',\n 'code',\n 'book',\n 'terminal',\n 'folder',\n 'template',\n 'tag',\n ],\n },\n {\n label: 'Actions',\n names: [\n 'plus',\n 'minus',\n 'pencil',\n 'trash',\n 'refresh',\n 'filter',\n 'settings',\n 'user',\n 'logout',\n 'undo',\n 'redo',\n 'arrowUp',\n 'arrowDown',\n 'arrowLeft',\n 'arrowRight',\n 'externalLink',\n ],\n },\n {\n label: 'Status',\n names: ['info', 'success', 'warning', 'critical', 'sync', 'lock', 'snapshot'],\n },\n {\n label: 'Alert',\n names: ['bell', 'bellOff', 'siren', 'alarm', 'megaphone', 'flag', 'shieldAlert', 'warning'],\n },\n {\n label: 'Accessibility',\n names: ['universalAccess', 'wheelchair', 'hearing', 'lowVision', 'braille', 'signLanguage'],\n },\n {\n label: 'Datacenter',\n names: [\n 'datacenter',\n 'rack',\n 'cluster',\n 'host',\n 'vm',\n 'switch',\n 'storage',\n 'network',\n 'cpu',\n 'memory',\n 'disk',\n 'port',\n 'nic',\n 'hba',\n 'ethernet',\n 'power',\n 'resourcePool',\n 'portGroup',\n ],\n },\n {\n label: 'Infrastructure',\n names: [\n 'pod',\n 'deployment',\n 'service',\n 'node',\n 'ingress',\n 'cloud',\n 'container',\n 'firewall',\n 'shield',\n 'certificate',\n 'key',\n 'metrics',\n 'logs',\n 'trace',\n ],\n },\n {\n label: 'Object state',\n names: ['running', 'stopped', 'paused', 'maintenance'],\n },\n {\n label: 'Vendor (generic)',\n names: ['vendorVmware', 'vendorCisco', 'vendorHpe', 'vendorDell', 'vendorKaytus'],\n },\n];\n\n/**\n * Full-SVG icons that keep their own viewBox and colors (no stroke wrapper).\n * Use this for brand / vendor logos you have the rights to ship — register the\n * official asset's markup yourself; the library does not bundle any logos.\n */\nexport const STRCT_RAW_ICONS: Record<string, string> = {};\n\n/**\n * Register an icon at runtime.\n * registerStrctIcon('mything', '<path d=\"…\"/>'); // stroke glyph\n * registerStrctIcon('vendorDell', '<svg viewBox=\"…\">…</svg>', { raw: true });\n */\nexport function registerStrctIcon(\n name: string,\n content: string,\n options: { raw?: boolean } = {},\n): void {\n if (options.raw) {\n STRCT_RAW_ICONS[name] = content;\n } else {\n STRCT_ICONS[name] = content;\n }\n}\n\n/** Icon status dot variants. */\nexport type StrctIconBadge = 'none' | 'success' | 'warning' | 'critical' | 'off' | 'info';\n\n/**\n * Inline stroke icon. `<strct-icon name=\"host\" badge=\"success\" />` renders the host\n * glyph with a green status dot (a \"running host\"). Unknown names render\n * nothing rather than throwing.\n */\n@Component({\n selector: 'strct-icon',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n template: `@if (isRaw()) {\n <span\n class=\"strct-icon__raw\"\n [style.width.px]=\"size()\"\n [style.height.px]=\"size()\"\n [innerHTML]=\"rawSvg()\"\n ></span>\n } @else {\n <svg\n viewBox=\"0 0 16 16\"\n fill=\"none\"\n stroke=\"currentColor\"\n [attr.stroke-width]=\"strokeWidth()\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n [style.width.px]=\"size()\"\n [style.height.px]=\"size()\"\n [innerHTML]=\"svg()\"\n role=\"img\"\n [attr.aria-label]=\"ariaLabel() || null\"\n [attr.aria-hidden]=\"ariaLabel() ? null : 'true'\"\n ></svg>\n }\n @if (badge() !== 'none') {\n <span class=\"strct-icon__badge strct-icon__badge--{{ badge() }}\"></span>\n }`,\n host: { class: 'strct-icon' },\n styles: [\n `\n .strct-icon {\n position: relative;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n line-height: 0;\n }\n .strct-icon__raw {\n display: inline-flex;\n }\n .strct-icon__raw > svg {\n width: 100%;\n height: 100%;\n display: block;\n }\n .strct-icon__badge {\n position: absolute;\n right: -1px;\n bottom: -1px;\n width: 38%;\n height: 38%;\n min-width: 6px;\n min-height: 6px;\n max-width: 9px;\n max-height: 9px;\n border-radius: 50%;\n box-shadow: 0 0 0 1.5px var(--bg-1);\n }\n .strct-icon__badge--success {\n background: var(--success);\n }\n .strct-icon__badge--warning {\n background: var(--warning);\n }\n .strct-icon__badge--critical {\n background: var(--critical);\n }\n .strct-icon__badge--off {\n background: var(--t3);\n }\n .strct-icon__badge--info {\n background: var(--acc);\n }\n `,\n ],\n})\nexport class StrctIcon {\n private readonly sanitizer = inject(DomSanitizer);\n\n /** Icon name from the STRCT_ICONS registry. */\n readonly name = input.required<string>();\n /** Icon size in pixels. */\n readonly size = input(16);\n /** Stroke width for outline icons. */\n readonly strokeWidth = input(1.4);\n /** Optional status dot overlaid on the glyph (object state). */\n readonly badge = input<StrctIconBadge>('none');\n /** Accessible label for the icon. When empty the icon is hidden from assistive tech. */\n readonly ariaLabel = input<string>('');\n\n /** True when the named icon is a full-SVG (raw) icon registered by the app. */\n protected readonly isRaw = computed(() =>\n Object.prototype.hasOwnProperty.call(STRCT_RAW_ICONS, this.name()),\n );\n\n protected readonly svg = computed<SafeHtml>(() =>\n this.sanitizer.bypassSecurityTrustHtml(STRCT_ICONS[this.name()] ?? ''),\n );\n protected readonly rawSvg = computed<SafeHtml>(() =>\n this.sanitizer.bypassSecurityTrustHtml(STRCT_RAW_ICONS[this.name()] ?? ''),\n );\n}\n","import { ChangeDetectionStrategy, Component, ViewEncapsulation, inject } from '@angular/core';\nimport { StrctIcon } from '../icon/icon';\nimport { StrctThemeService } from './theme.service';\n\n/** Palette dots + light/dark pill, wired to {@link StrctThemeService}. */\n@Component({\n selector: 'strct-theme-switcher',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n imports: [StrctIcon],\n template: `\n <div class=\"strct-ts__pal\">\n @for (p of theme.palettes; track p.id) {\n <button\n type=\"button\"\n class=\"strct-ts__dot\"\n [class.strct-ts__dot--on]=\"theme.palette() === p.id\"\n [title]=\"p.label\"\n [attr.aria-label]=\"p.label\"\n [attr.aria-pressed]=\"theme.palette() === p.id\"\n (click)=\"theme.setPalette(p.id)\"\n >\n <span class=\"strct-ts__inner\" [style.background]=\"p.swatch\"></span>\n </button>\n }\n </div>\n <div class=\"strct-ts__pill\">\n <button\n type=\"button\"\n class=\"strct-ts__pbtn\"\n [class.strct-ts__pbtn--on]=\"!theme.isDark()\"\n title=\"Light\"\n aria-label=\"Light theme\"\n (click)=\"theme.setMode('light')\"\n >\n <strct-icon name=\"sun\" [size]=\"15\" [strokeWidth]=\"1.5\" />\n </button>\n <button\n type=\"button\"\n class=\"strct-ts__pbtn\"\n [class.strct-ts__pbtn--on]=\"theme.isDark()\"\n title=\"Dark\"\n aria-label=\"Dark theme\"\n (click)=\"theme.setMode('dark')\"\n >\n <strct-icon name=\"moon\" [size]=\"15\" [strokeWidth]=\"1.5\" />\n </button>\n </div>\n `,\n host: { class: 'strct-ts' },\n styles: [\n `\n .strct-ts { display: inline-flex; align-items: center; gap: 14px; }\n .strct-ts__pal { display: inline-flex; gap: 7px; }\n .strct-ts__dot {\n display: inline-flex; align-items: center; justify-content: center;\n width: 18px; height: 18px; border-radius: 50%; padding: 0; cursor: pointer;\n background: transparent; border: 1.5px solid rgba(255,255,255,.35);\n transition: transform .15s ease, border-color .15s ease;\n }\n .strct-ts__dot:hover { transform: scale(1.12); }\n .strct-ts__inner { width: 11px; height: 11px; border-radius: 50%; display: block; }\n .strct-ts__dot--on { border-color: #fff; box-shadow: 0 0 0 2px rgba(255,255,255,.25); }\n\n .strct-ts__pill {\n display: inline-flex; padding: 2px; gap: 2px; border-radius: 7px;\n background: rgba(255,255,255,.10);\n }\n .strct-ts__pbtn {\n display: inline-flex; align-items: center; justify-content: center;\n width: 26px; height: 22px; border: 0; border-radius: 5px; cursor: pointer;\n background: transparent; color: rgba(255,255,255,.6);\n transition: background .14s ease, color .14s ease;\n }\n .strct-ts__pbtn--on { background: rgba(255,255,255,.18); color: #fff; }\n `,\n ],\n})\nexport class StrctThemeSwitcher {\n protected readonly theme = inject(StrctThemeService);\n}\n","import {\n Directive,\n ElementRef,\n NgZone,\n OnDestroy,\n afterNextRender,\n inject,\n input,\n} from '@angular/core';\n\n/** Overlay positioning strategies. */\nexport type StrctOverlayPlacement =\n | 'bottom-start'\n | 'bottom-end'\n | 'top-start'\n | 'top-end'\n | 'right'\n | 'left';\n\n/**\n * Positions an overlay panel with `position: fixed` relative to an anchor\n * element, so it escapes ancestor `overflow: hidden/scroll` clipping.\n * Repositions on scroll/resize and flips vertically near the viewport edge.\n *\n * <button #trigger>…</button>\n * <div class=\"menu\" [strctOverlay]=\"trigger\" strctOverlayPlacement=\"bottom-end\">…</div>\n *\n * Note: like any fixed-positioned element, the panel is positioned relative to\n * a transformed/filtered ancestor if one exists (a CSS containing-block rule).\n * Avoid wrapping a trigger in `transform`/`filter` if you need viewport-anchored\n * overlays. (The tooltip sidesteps this by rendering into `<body>`.)\n */\n@Directive({ selector: '[strctOverlay]' })\nexport class StrctOverlay implements OnDestroy {\n private readonly el = inject(ElementRef<HTMLElement>).nativeElement as HTMLElement;\n private readonly zone = inject(NgZone);\n\n /** Anchor element for positioning. */\n readonly anchor = input.required<HTMLElement>({ alias: 'strctOverlay' });\n /** Preferred placement relative to the anchor. */\n readonly placement = input<StrctOverlayPlacement>('bottom-start', {\n alias: 'strctOverlayPlacement',\n });\n /** Match the panel width to the anchor (combobox / date / cascade fields). */\n readonly matchWidth = input(false, { alias: 'strctOverlayMatchWidth' });\n /** Gap between anchor and panel in pixels. */\n readonly gap = input(5, { alias: 'strctOverlayGap' });\n\n private readonly onScrollResize = () => this.position();\n private bound = false;\n\n constructor() {\n const s = this.el.style;\n s.position = 'fixed';\n s.top = '0';\n s.left = '0';\n s.right = 'auto';\n s.bottom = 'auto';\n s.margin = '0';\n afterNextRender(() => {\n this.position();\n this.zone.runOutsideAngular(() => {\n window.addEventListener('scroll', this.onScrollResize, true);\n window.addEventListener('resize', this.onScrollResize);\n this.bound = true;\n });\n });\n }\n\n /** Recompute and apply the fixed coordinates. */\n position(): void {\n const anchor = this.anchor();\n if (!anchor) return;\n const a = anchor.getBoundingClientRect();\n const el = this.el;\n if (this.matchWidth()) el.style.width = `${a.width}px`;\n\n const w = el.offsetWidth;\n const h = el.offsetHeight;\n const vw = window.innerWidth;\n const vh = window.innerHeight;\n const gap = this.gap();\n const p = this.placement();\n const margin = 4;\n\n let top: number;\n let left: number;\n\n if (p === 'right') {\n left = a.right + gap;\n // Flip to the left of the anchor if it would overflow the right edge.\n if (left + w > vw - margin && a.left - gap - w > margin) left = a.left - gap - w;\n top = a.top;\n } else if (p === 'left') {\n left = a.left - gap - w;\n // Flip to the right of the anchor if it would overflow the left edge.\n if (left < margin && a.right + gap + w < vw - margin) left = a.right + gap;\n top = a.top;\n } else {\n const below = p.startsWith('bottom');\n top = below ? a.bottom + gap : a.top - gap - h;\n if (below && top + h > vh - margin && a.top - gap - h > margin) {\n top = a.top - gap - h;\n } else if (!below && top < margin && a.bottom + gap + h < vh - margin) {\n top = a.bottom + gap;\n }\n left = p.endsWith('end') ? a.right - w : a.left;\n }\n\n left = Math.max(margin, Math.min(left, vw - w - margin));\n top = Math.max(margin, Math.min(top, vh - h - margin));\n\n el.style.left = `${Math.round(left)}px`;\n el.style.top = `${Math.round(top)}px`;\n }\n\n ngOnDestroy(): void {\n if (this.bound) {\n window.removeEventListener('scroll', this.onScrollResize, true);\n window.removeEventListener('resize', this.onScrollResize);\n }\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n ViewEncapsulation,\n inject,\n signal,\n} from '@angular/core';\nimport { StrctIcon } from '../icon/icon';\n\n/** Shared layout state between shell parts. */\nexport class StrctShellService {\n readonly mobileNavOpen = signal(false);\n}\n\n/**\n * Application frame: a full-viewport grid of header / body / footer rows.\n * <strct-shell>\n * <strct-header>…</strct-header>\n * <div strctShellMain>… sidebar + content …</div>\n * <strct-footer>…</strct-footer>\n * </strct-shell>\n */\n@Component({\n selector: 'strct-shell',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n providers: [StrctShellService],\n template: `\n <ng-content select=\"strct-header\" />\n <div class=\"strct-shell__main\"><ng-content /></div>\n <ng-content select=\"strct-footer\" />\n `,\n host: { class: 'strct-shell' },\n styles: [\n `\n .strct-shell {\n display: grid;\n grid-template-rows: auto 1fr auto;\n height: 100vh;\n overflow: hidden;\n background: var(--bg-2);\n }\n .strct-shell__main {\n display: flex;\n min-height: 0;\n overflow: hidden;\n }\n `,\n ],\n})\nexport class StrctShell {}\n\n/** Top application bar. Holds brand on the left and actions on the right. */\n@Component({\n selector: 'strct-header',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n imports: [StrctIcon],\n template: `\n <button\n type=\"button\"\n class=\"strct-header__drawer-toggle\"\n aria-label=\"Toggle navigation\"\n (click)=\"shell.mobileNavOpen.update((v) => !v)\"\n >\n <strct-icon name=\"menu\" [size]=\"18\" />\n </button>\n <ng-content />\n `,\n host: { class: 'strct-header' },\n styles: [\n `\n .strct-header {\n display: flex;\n align-items: center;\n gap: 14px;\n height: 56px;\n padding: 0 18px;\n background: var(--hdr);\n border-bottom: 1px solid var(--b2);\n color: rgba(255, 255, 255, 0.92);\n }\n .strct-header__drawer-toggle {\n display: none;\n align-items: center;\n justify-content: center;\n padding: 4px;\n border: 0;\n border-radius: 5px;\n background: transparent;\n color: rgba(255, 255, 255, 0.85);\n cursor: pointer;\n }\n .strct-header__drawer-toggle:hover {\n background: rgba(255, 255, 255, 0.12);\n color: #fff;\n }\n @media (max-width: 768px) {\n .strct-header__drawer-toggle {\n display: inline-flex;\n }\n }\n `,\n ],\n})\nexport class StrctHeader {\n protected readonly shell = inject(StrctShellService);\n}\n\n/** Bottom status bar. */\n@Component({\n selector: 'strct-footer',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n template: `<ng-content />`,\n host: { class: 'strct-footer' },\n styles: [\n `\n .strct-footer {\n display: flex;\n align-items: center;\n gap: 12px;\n height: 32px;\n padding: 0 16px;\n background: var(--bg-1);\n border-top: 1px solid var(--b2);\n font-size: 12px;\n color: var(--t2);\n }\n `,\n ],\n})\nexport class StrctFooter {}\n","import {\n ChangeDetectionStrategy,\n Component,\n ViewEncapsulation,\n input,\n inject,\n} from '@angular/core';\nimport { StrctShellService } from './layout';\n\n/** Scrollable left sidebar surface. Holds the icon nav and/or a tree. */\n@Component({\n selector: 'strct-vertical-nav',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n template: `\n @if (shell.mobileNavOpen()) {\n <div\n class=\"strct-vnav__backdrop\"\n tabindex=\"0\"\n role=\"button\"\n aria-label=\"Close navigation\"\n (click)=\"shell.mobileNavOpen.set(false)\"\n (keydown.enter)=\"shell.mobileNavOpen.set(false)\"\n (keydown.space)=\"shell.mobileNavOpen.set(false)\"\n ></div>\n }\n <ng-content />\n `,\n host: {\n class: 'strct-vnav',\n '[class.strct-vnav--open]': 'shell.mobileNavOpen()',\n },\n styles: [\n `\n .strct-vnav {\n display: flex;\n flex-direction: column;\n width: 264px;\n flex-shrink: 0;\n background: var(--bg-1);\n border-right: 1px solid var(--b2);\n overflow: hidden;\n }\n @media (max-width: 768px) {\n .strct-vnav {\n position: fixed;\n top: 0;\n left: 0;\n bottom: 0;\n z-index: 300;\n transform: translateX(-100%);\n transition: transform 0.2s ease;\n }\n .strct-vnav--open {\n transform: translateX(0);\n }\n .strct-vnav__backdrop {\n position: fixed;\n inset: 0;\n z-index: 299;\n background: rgba(0, 0, 0, 0.5);\n animation: strct-vnav-backdrop-in 0.2s ease;\n }\n }\n @media (min-width: 769px) {\n .strct-vnav__backdrop {\n display: none;\n }\n }\n @keyframes strct-vnav-backdrop-in {\n from {\n opacity: 0;\n }\n }\n `,\n ],\n})\nexport class StrctVerticalNav {\n protected readonly shell = inject(StrctShellService);\n}\n\n/** Horizontal strip of icon tabs (e.g. section switcher at the top of a sidebar). */\n@Component({\n selector: 'strct-nav',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n template: `<ng-content />`,\n host: { class: 'strct-nav' },\n styles: [\n `\n .strct-nav {\n display: flex;\n align-items: center;\n gap: 4px;\n padding: 8px 10px;\n border-bottom: 1px solid var(--b1);\n }\n `,\n ],\n})\nexport class StrctNav {}\n\n/** A single icon tab inside `<strct-nav>`. */\n@Component({\n selector: 'strct-nav-item',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n template: `<ng-content />`,\n host: {\n class: 'strct-nav-item',\n role: 'button',\n tabindex: '0',\n '[class.strct-nav-item--active]': 'active()',\n '[attr.title]': 'label() || null',\n '[attr.aria-label]': 'label() || null',\n '[attr.aria-pressed]': 'active()',\n },\n styles: [\n `\n .strct-nav-item {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 34px;\n height: 34px;\n border-radius: 7px;\n cursor: pointer;\n color: var(--t2);\n transition:\n background 0.14s ease,\n color 0.14s ease;\n }\n .strct-nav-item:hover {\n background: var(--bg-3);\n color: var(--t1);\n }\n .strct-nav-item--active {\n background: var(--acc-m);\n color: var(--acc);\n }\n .strct-nav-item:focus-visible {\n outline: 2px solid var(--acc50);\n outline-offset: 1px;\n }\n `,\n ],\n})\nexport class StrctNavItem {\n /** Whether the item is active / selected. */\n readonly active = input(false);\n /** Label text. */\n readonly label = input('');\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n ViewEncapsulation,\n booleanAttribute,\n input,\n} from '@angular/core';\n\n/**\n * Authentication layout. Two modes:\n * - default: a single centered column (drop a card + form inside).\n * - `split`: a two-panel card — a decorative accent aside (`[strctLoginAside]`)\n * on the left and the form (default content) on the right.\n *\n * <strct-login split>\n * <div strctLoginAside>… brand + welcome …</div>\n * <form strctLoginMain>… inputs + button …</form>\n * </strct-login>\n */\n@Component({\n selector: 'strct-login',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n template: `\n @if (split()) {\n <div class=\"strct-login__card\" [style.max-width.px]=\"maxWidth()\">\n <aside class=\"strct-login__aside\">\n <div class=\"strct-login__aside-inner\">\n <ng-content select=\"[strctLoginAside]\" />\n </div>\n </aside>\n <div class=\"strct-login__main\"><ng-content select=\"[strctLoginMain]\" /></div>\n </div>\n } @else {\n <div class=\"strct-login__inner\" [style.max-width.px]=\"maxWidth()\"><ng-content /></div>\n }\n `,\n host: { class: 'strct-login' },\n styles: [\n `\n .strct-login {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 100%;\n min-height: 100%;\n padding: 32px;\n }\n .strct-login__inner {\n width: 100%;\n }\n\n /* Split card */\n .strct-login__card {\n display: grid;\n grid-template-columns: 1.05fr 1fr;\n width: 100%;\n overflow: hidden;\n }\n .strct-login__main {\n padding: 40px 38px;\n display: flex;\n flex-direction: column;\n justify-content: center;\n }\n\n /* Aside — stripped of background images/colors and borders. */\n .strct-login__aside {\n position: relative;\n overflow: hidden;\n min-height: 420px;\n color: #111827;\n border-right: 1px solid var(--b2);\n }\n .strct-login__aside::before,\n .strct-login__aside::after {\n display: none;\n }\n .strct-login__aside-inner {\n position: relative;\n z-index: 1;\n height: 100%;\n display: flex;\n flex-direction: column;\n justify-content: space-between;\n padding: 34px 36px;\n }\n\n @media (max-width: 720px) {\n .strct-login__card {\n grid-template-columns: 1fr;\n }\n .strct-login__aside {\n min-height: 220px;\n }\n .strct-login__main {\n padding: 30px 26px;\n }\n }\n `,\n ],\n})\nexport class StrctLogin {\n /** Maximum width in pixels. */\n readonly maxWidth = input(880);\n /** Enable two-panel split layout. */\n readonly split = input(false, { transform: booleanAttribute });\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n ViewEncapsulation,\n booleanAttribute,\n input,\n} from '@angular/core';\n\n/** Button visual variants. */\nexport type StrctButtonVariant = 'primary' | 'critical' | 'outline' | 'flat' | 'neutral';\n/** Button size variants. */\nexport type StrctButtonSize = 'md' | 'sm' | 'mini';\n\n/**\n * Styles a native `<button>` / `<a>` so it stays fully accessible and form-aware.\n *\n * Buttons are restrained by default: outlined / ghost surfaces with color used\n * only as a subtle border + text accent. Add `solid` for a rare filled call to\n * action.\n * <button strct-button variant=\"primary\">Save</button>\n * <button strct-button variant=\"primary\" solid>Deploy</button>\n * <a strct-button variant=\"flat\" size=\"sm\" href=\"...\">Cancel</a>\n */\n@Component({\n selector: 'button[strct-button], a[strct-button]',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n template: `<ng-content />`,\n host: {\n class: 'strct-btn',\n '[class.strct-btn--primary]': \"variant() === 'primary'\",\n '[class.strct-btn--critical]': \"variant() === 'critical'\",\n '[class.strct-btn--outline]': \"variant() === 'outline'\",\n '[class.strct-btn--flat]': \"variant() === 'flat'\",\n '[class.strct-btn--solid]': 'solid()',\n '[class.strct-btn--sm]': \"size() === 'sm'\",\n '[class.strct-btn--mini]': \"size() === 'mini'\",\n '[class.strct-btn--block]': 'block()',\n '[class.strct-btn--icon]': 'iconOnly()',\n },\n styles: [\n `\n /* Base: neutral, outlined, no fill. */\n .strct-btn {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n gap: var(--space-1);\n font-family: var(--font);\n font-size: 13px;\n font-weight: 500;\n line-height: 1;\n padding: var(--space-2) var(--space-4);\n border-radius: var(--radius-md);\n cursor: pointer;\n user-select: none;\n color: var(--t1);\n background: transparent;\n border: 1px solid var(--b3);\n transition:\n background 0.14s ease,\n border-color 0.14s ease,\n color 0.14s ease,\n opacity 0.14s ease;\n text-decoration: none;\n white-space: nowrap;\n }\n .strct-btn:hover {\n background: var(--bg-3);\n text-decoration: none;\n }\n .strct-btn:active {\n background: var(--bg-a);\n }\n .strct-btn:disabled,\n .strct-btn[aria-disabled='true'] {\n opacity: 0.45;\n cursor: not-allowed;\n }\n\n /* Emphasis via accent border + text only — not a colored fill. */\n .strct-btn--primary {\n border-color: var(--acc50);\n color: var(--acc);\n }\n .strct-btn--primary:hover {\n background: var(--acc-m);\n border-color: var(--acc);\n }\n\n .strct-btn--critical {\n border-color: var(--critical);\n color: var(--critical);\n }\n .strct-btn--critical:hover {\n background: var(--critical-bg);\n }\n\n /* Neutral outline (explicit). */\n .strct-btn--outline {\n border-color: var(--b3);\n color: var(--t1);\n }\n .strct-btn--outline:hover {\n background: var(--bg-3);\n }\n\n /* Borderless text button. */\n .strct-btn--flat {\n border-color: transparent;\n color: var(--t2);\n }\n .strct-btn--flat:hover {\n background: var(--bg-3);\n color: var(--t1);\n }\n\n /* Opt-in filled call to action. */\n .strct-btn--solid {\n background: var(--bg-3);\n border-color: transparent;\n color: var(--t1);\n }\n .strct-btn--solid:hover {\n background: var(--bg-h);\n }\n .strct-btn--solid.strct-btn--primary {\n background: var(--acc);\n color: #fff;\n }\n .strct-btn--solid.strct-btn--primary:hover {\n background: var(--acc);\n filter: brightness(1.08);\n }\n .strct-btn--solid.strct-btn--critical {\n background: var(--critical);\n color: #fff;\n }\n .strct-btn--solid.strct-btn--critical:hover {\n background: var(--critical);\n filter: brightness(1.08);\n }\n\n .strct-btn--sm {\n padding: var(--space-1) var(--space-3);\n font-size: 12px;\n border-radius: var(--radius-sm);\n }\n .strct-btn--mini {\n padding: 2px var(--space-2);\n font-size: 11px;\n border-radius: var(--radius-sm);\n }\n .strct-btn--block {\n display: flex;\n width: 100%;\n }\n\n /* Square icon-only button. */\n .strct-btn--icon {\n padding: var(--space-2);\n }\n .strct-btn--icon.strct-btn--sm {\n padding: var(--space-1);\n }\n .strct-btn--icon.strct-btn--mini {\n padding: 3px;\n }\n `,\n ],\n})\nexport class StrctButton {\n /** Visual variant. */\n readonly variant = input<StrctButtonVariant>('neutral');\n /** Size variant. */\n readonly size = input<StrctButtonSize>('md');\n /** Opt in to a filled surface (use sparingly, for the primary action). */\n readonly solid = input(false, { transform: booleanAttribute });\n /** Expand to full width. */\n readonly block = input(false, { transform: booleanAttribute });\n /** Square padding for a single-icon button. */\n readonly iconOnly = input(false, { transform: booleanAttribute });\n}\n\n/** Segments adjacent buttons into a single joined control. */\n@Component({\n selector: 'strct-button-group',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n template: `<ng-content />`,\n host: { class: 'strct-btn-group', role: 'group' },\n styles: [\n `\n .strct-btn-group {\n display: inline-flex;\n }\n .strct-btn-group > .strct-btn {\n border-radius: 0;\n }\n .strct-btn-group > .strct-btn:not(:first-child) {\n margin-left: -1px;\n }\n .strct-btn-group > .strct-btn:first-child {\n border-top-left-radius: var(--radius-md);\n border-bottom-left-radius: var(--radius-md);\n }\n .strct-btn-group > .strct-btn:last-child {\n border-top-right-radius: var(--radius-md);\n border-bottom-right-radius: var(--radius-md);\n }\n .strct-btn-group > .strct-btn:hover,\n .strct-btn-group > .strct-btn:focus-visible {\n position: relative;\n z-index: 1;\n }\n `,\n ],\n})\nexport class StrctButtonGroup {}\n","import {\n ChangeDetectionStrategy,\n Component,\n ViewEncapsulation,\n booleanAttribute,\n input,\n} from '@angular/core';\n\n/** Badge color variants. */\nexport type StrctBadgeStatus = 'neutral' | 'accent' | 'success' | 'warning' | 'critical';\n\n/** Small inline status pill: `<strct-badge status=\"success\">Active</strct-badge>`. */\n@Component({\n selector: 'strct-badge',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n template: `<ng-content />`,\n host: {\n class: 'strct-badge',\n '[class.strct-badge--accent]': \"status() === 'accent'\",\n '[class.strct-badge--success]': \"status() === 'success'\",\n '[class.strct-badge--warninging]': \"status() === 'warning'\",\n '[class.strct-badge--critical]': \"status() === 'critical'\",\n '[class.strct-badge--solid]': 'solid()',\n },\n styles: [\n `\n /* Restrained: outlined on a neutral surface, color carried by text + a thin border. */\n .strct-badge {\n display: inline-flex;\n align-items: center;\n gap: 4px;\n font-size: 11px;\n font-weight: 600;\n line-height: 1;\n letter-spacing: 0.2px;\n padding: 3px 7px 3px 9px;\n border-radius: var(--radius-sm);\n white-space: nowrap;\n color: var(--t2);\n background: transparent;\n border: 1px solid var(--b3);\n /* Thicker left rail gives badges a distinct \"tag\" identity vs. buttons. */\n border-left-width: 3px;\n }\n .strct-badge--accent {\n color: var(--acc);\n border-color: var(--acc30);\n }\n .strct-badge--success {\n color: var(--success);\n border-color: var(--success);\n }\n .strct-badge--warninging {\n color: var(--warning);\n border-color: var(--warning);\n }\n .strct-badge--critical {\n color: var(--critical);\n border-color: var(--critical);\n }\n\n /* Opt-in filled badge — uniform edges (no left rail). */\n .strct-badge--solid {\n color: var(--t1);\n background: var(--bg-a);\n border-color: transparent;\n border-left-width: 1px;\n padding-left: 7px;\n }\n .strct-badge--solid.strct-badge--accent {\n background: var(--acc);\n color: #fff;\n }\n .strct-badge--solid.strct-badge--success {\n background: var(--success);\n color: #fff;\n }\n .strct-badge--solid.strct-badge--warninging {\n background: var(--warning);\n color: #fff;\n }\n .strct-badge--solid.strct-badge--critical {\n background: var(--critical);\n color: #fff;\n }\n `,\n ],\n})\nexport class StrctBadge {\n /** Visual status color. */\n readonly status = input<StrctBadgeStatus>('neutral');\n /** Opt-in filled style instead of the default outlined style. */\n readonly solid = input(false, { transform: booleanAttribute });\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n ViewEncapsulation,\n booleanAttribute,\n input,\n output,\n} from '@angular/core';\nimport { StrctIcon } from '../icon/icon';\n\n/** Tag color variants. */\nexport type StrctTagStatus = 'neutral' | 'accent' | 'success' | 'warning' | 'critical';\n\n/**\n * Compact, optionally removable chip.\n * <strct-tag status=\"accent\" removable (removed)=\"drop()\">Frontend</strct-tag>\n */\n@Component({\n selector: 'strct-tag',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n imports: [StrctIcon],\n template: `\n <span class=\"strct-tag__text\"><ng-content /></span>\n @if (removable()) {\n <button type=\"button\" class=\"strct-tag__remove\" aria-label=\"Remove\" (click)=\"removed.emit()\">\n <strct-icon name=\"close\" [size]=\"11\" [strokeWidth]=\"1.6\" />\n </button>\n }\n `,\n host: {\n class: 'strct-tag',\n '[class.strct-tag--accent]': \"status() === 'accent'\",\n '[class.strct-tag--success]': \"status() === 'success'\",\n '[class.strct-tag--warning]': \"status() === 'warning'\",\n '[class.strct-tag--critical]': \"status() === 'critical'\",\n },\n styles: [\n `\n .strct-tag {\n display: inline-flex;\n align-items: center;\n gap: 5px;\n padding: 3px 4px 3px 9px;\n border-radius: 4px;\n font-size: 12px;\n font-weight: 500;\n color: var(--t1);\n background: var(--bg-3);\n border: 1px solid var(--b2);\n }\n .strct-tag:not(:has(.strct-tag__remove)) {\n padding-right: 9px;\n }\n .strct-tag--accent {\n color: var(--acc);\n border-color: var(--acc30);\n background: var(--acc-s);\n }\n .strct-tag--success {\n color: var(--success);\n border-color: var(--success);\n background: transparent;\n }\n .strct-tag--warning {\n color: var(--warning);\n border-color: var(--warning);\n background: transparent;\n }\n .strct-tag--critical {\n color: var(--critical);\n border-color: var(--critical);\n background: transparent;\n }\n .strct-tag__remove {\n display: inline-flex;\n padding: 2px;\n border: 0;\n border-radius: 3px;\n background: transparent;\n color: currentColor;\n opacity: 0.65;\n cursor: pointer;\n }\n .strct-tag__remove:hover {\n opacity: 1;\n background: var(--dn);\n }\n `,\n ],\n})\nexport class StrctTag {\n /** Visual status color. */\n readonly status = input<StrctTagStatus>('neutral');\n /** Show a remove button. */\n readonly removable = input(false, { transform: booleanAttribute });\n /** Emitted when the user clicks the remove button. */\n readonly removed = output<void>();\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n ViewEncapsulation,\n computed,\n input,\n} from '@angular/core';\n\n/** Avatar size variants. */\nexport type StrctAvatarSize = 'sm' | 'md' | 'lg';\n/** Avatar presence status variants. */\nexport type StrctAvatarStatus = 'none' | 'online' | 'busy' | 'offline';\n\n/**\n * Circular avatar: an image when `src` is set, otherwise initials from `name`.\n * <strct-avatar name=\"Ada Lovelace\" status=\"online\" />\n */\n@Component({\n selector: 'strct-avatar',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n template: `\n @if (src()) {\n <img class=\"strct-av__img\" [src]=\"src()\" [alt]=\"name()\" />\n } @else {\n <span class=\"strct-av__initials\">{{ initials() }}</span>\n }\n @if (status() !== 'none') {\n <span class=\"strct-av__status\"></span>\n }\n `,\n host: {\n class: 'strct-av',\n '[class.strct-av--sm]': \"size() === 'sm'\",\n '[class.strct-av--lg]': \"size() === 'lg'\",\n '[class.strct-av--online]': \"status() === 'online'\",\n '[class.strct-av--busy]': \"status() === 'busy'\",\n '[class.strct-av--offline]': \"status() === 'offline'\",\n '[attr.title]': 'name() || null',\n },\n styles: [\n `\n .strct-av {\n position: relative;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 36px;\n height: 36px;\n border-radius: 50%;\n flex-shrink: 0;\n background: var(--bg-3);\n color: var(--t1);\n overflow: visible;\n font-size: 13px;\n font-weight: 600;\n user-select: none;\n border: 1px solid var(--b2);\n }\n .strct-av--sm {\n width: 26px;\n height: 26px;\n font-size: 11px;\n }\n .strct-av--lg {\n width: 48px;\n height: 48px;\n font-size: 17px;\n }\n .strct-av__img {\n width: 100%;\n height: 100%;\n border-radius: 50%;\n object-fit: cover;\n }\n .strct-av__initials {\n line-height: 1;\n }\n .strct-av__status {\n position: absolute;\n right: -1px;\n bottom: -1px;\n width: 30%;\n height: 30%;\n min-width: 8px;\n min-height: 8px;\n border-radius: 50%;\n border: 2px solid var(--bg-1);\n background: var(--t3);\n }\n .strct-av--online .strct-av__status {\n background: var(--success);\n }\n .strct-av--busy .strct-av__status {\n background: var(--critical);\n }\n .strct-av--offline .strct-av__status {\n background: var(--t3);\n }\n `,\n ],\n})\nexport class StrctAvatar {\n /** Image URL. */\n readonly src = input('');\n /** Display name (used for initials when src is absent). */\n readonly name = input('');\n /** Size variant. */\n readonly size = input<StrctAvatarSize>('md');\n /** Visual status color. */\n readonly status = input<StrctAvatarStatus>('none');\n\n protected readonly initials = computed(() => {\n const parts = this.name().trim().split(/\\s+/).filter(Boolean);\n if (!parts.length) return '?';\n if (parts.length === 1) return parts[0].slice(0, 2).toUpperCase();\n return (parts[0][0] + parts[parts.length - 1][0]).toUpperCase();\n });\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n ViewEncapsulation,\n computed,\n input,\n} from '@angular/core';\n\n/** Progress bar color variants. */\nexport type StrctProgressStatus = 'accent' | 'success' | 'warning' | 'critical';\n\n/** Horizontal value/usage bar. `<strct-progress [value]=\"72\" status=\"warning\" />`. */\n@Component({\n selector: 'strct-progress',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n template: `\n <div\n class=\"strct-progress__track\"\n role=\"progressbar\"\n [attr.aria-valuenow]=\"clamped()\"\n aria-valuemin=\"0\"\n aria-valuemax=\"100\"\n >\n <div class=\"strct-progress__fill\" [style.width.%]=\"clamped()\"></div>\n </div>\n `,\n host: {\n class: 'strct-progress',\n '[class.strct-progress--success]': \"status() === 'success'\",\n '[class.strct-progress--warning]': \"status() === 'warning'\",\n '[class.strct-progress--critical]': \"status() === 'critical'\",\n },\n styles: [\n `\n .strct-progress {\n display: block;\n }\n .strct-progress__track {\n height: 6px;\n border-radius: 4px;\n background: var(--bg-3);\n overflow: hidden;\n }\n .strct-progress__fill {\n height: 100%;\n border-radius: 4px;\n background: var(--acc);\n transition: width 0.3s ease;\n }\n .strct-progress--success .strct-progress__fill {\n background: var(--success);\n }\n .strct-progress--warning .strct-progress__fill {\n background: var(--warning);\n }\n .strct-progress--critical .strct-progress__fill {\n background: var(--critical);\n }\n `,\n ],\n})\nexport class StrctProgress {\n /** Current value. */\n readonly value = input(0);\n /** Visual status color. */\n readonly status = input<StrctProgressStatus>('accent');\n\n protected readonly clamped = computed(() => Math.max(0, Math.min(100, this.value())));\n}\n","import { ChangeDetectionStrategy, Component, ViewEncapsulation, input } from '@angular/core';\n\n/** Spinner size variants. */\nexport type StrctSpinnerSize = 'sm' | 'md' | 'lg';\n\n/** Indeterminate loading ring. `<strct-spinner size=\"sm\" />`. */\n@Component({\n selector: 'strct-spinner',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n template: '',\n host: {\n class: 'strct-spinner',\n role: 'progressbar',\n 'aria-label': 'Loading',\n '[class.strct-spinner--sm]': \"size() === 'sm'\",\n '[class.strct-spinner--lg]': \"size() === 'lg'\",\n },\n styles: [\n `\n .strct-spinner {\n display: inline-block;\n width: 22px;\n height: 22px;\n border: 2.5px solid var(--b3);\n border-top-color: var(--acc);\n border-radius: 50%;\n animation: strct-spin 0.7s linear infinite;\n }\n .strct-spinner--sm {\n width: 14px;\n height: 14px;\n border-width: 2px;\n }\n .strct-spinner--lg {\n width: 34px;\n height: 34px;\n border-width: 3px;\n }\n @keyframes strct-spin {\n to {\n transform: rotate(360deg);\n }\n }\n @media (prefers-reduced-motion: reduce) {\n .strct-spinner {\n animation-duration: 1.6s;\n }\n }\n `,\n ],\n})\nexport class StrctSpinner {\n /** Size variant. */\n readonly size = input<StrctSpinnerSize>('md');\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n ViewEncapsulation,\n booleanAttribute,\n input,\n} from '@angular/core';\n\n/**\n * Shimmering loading placeholder.\n * <strct-skeleton width=\"60%\" height=\"14px\" />\n * <strct-skeleton circle width=\"40px\" height=\"40px\" />\n */\n@Component({\n selector: 'strct-skeleton',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n template: '',\n host: {\n class: 'strct-skel',\n role: 'presentation',\n 'aria-hidden': 'true',\n '[class.strct-skel--circle]': 'circle()',\n '[style.width]': 'width()',\n '[style.height]': 'height()',\n },\n styles: [\n `\n .strct-skel {\n display: block;\n border-radius: 5px;\n background: linear-gradient(90deg, var(--bg-3) 25%, var(--bg-h) 37%, var(--bg-3) 63%);\n background-size: 400% 100%;\n animation: strct-skel-shimmer 1.4s ease infinite;\n }\n .strct-skel--circle {\n border-radius: 50%;\n }\n @keyframes strct-skel-shimmer {\n 0% {\n background-position: 100% 50%;\n }\n 100% {\n background-position: 0 50%;\n }\n }\n @media (prefers-reduced-motion: reduce) {\n .strct-skel {\n animation: none;\n }\n }\n `,\n ],\n})\nexport class StrctSkeleton {\n /** Width (CSS length). */\n readonly width = input('100%');\n /** Height in pixels. */\n readonly height = input('14px');\n /** Circle. */\n readonly circle = input(false, { transform: booleanAttribute });\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n ViewEncapsulation,\n ElementRef,\n HostListener,\n inject,\n input,\n signal,\n} from '@angular/core';\nimport { StrctIcon } from '../icon/icon';\n\n/** Direction the speed-dial actions expand. */\nexport type StrctSpeedDialDirection = 'up' | 'down' | 'left' | 'right';\n\n/**\n * Floating action button that fans out to reveal actions. Project icon buttons\n * (optionally with `strctTooltip`) as the actions.\n * <strct-speed-dial icon=\"ellipsis\" direction=\"up\">\n * <button strct-button iconOnly strctTooltip=\"Snapshot\"><strct-icon name=\"snapshot\" /></button>\n * <button strct-button iconOnly strctTooltip=\"Restart\"><strct-icon name=\"sync\" /></button>\n * </strct-speed-dial>\n */\n@Component({\n selector: 'strct-speed-dial',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n imports: [StrctIcon],\n template: `\n <div class=\"strct-sd\" [class]=\"'strct-sd--' + direction()\">\n @if (open()) {\n <div class=\"strct-sd__actions\"><ng-content /></div>\n }\n <button\n type=\"button\"\n class=\"strct-sd__fab\"\n [class.strct-sd__fab--open]=\"open()\"\n [attr.aria-expanded]=\"open()\"\n aria-haspopup=\"menu\"\n (click)=\"toggle()\"\n >\n <strct-icon [name]=\"icon()\" [size]=\"18\" [strokeWidth]=\"1.5\" />\n </button>\n </div>\n `,\n host: { class: 'strct-sd-host' },\n styles: [\n `\n .strct-sd-host {\n display: inline-block;\n }\n .strct-sd {\n position: relative;\n display: inline-flex;\n }\n .strct-sd__fab {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 44px;\n height: 44px;\n border-radius: 50%;\n cursor: pointer;\n color: #fff;\n background: var(--acc);\n border: 0;\n box-shadow: var(--shh);\n transition:\n filter 0.14s ease,\n transform 0.16s ease;\n }\n .strct-sd__fab:hover {\n filter: brightness(1.08);\n }\n .strct-sd__fab--open {\n transform: rotate(45deg);\n }\n .strct-sd__actions {\n position: absolute;\n display: flex;\n gap: 10px;\n z-index: 10;\n animation: strct-sd-in 0.14s ease;\n }\n /* The projected icon buttons get a round, raised look. */\n .strct-sd__actions .strct-btn {\n border-radius: 50%;\n box-shadow: var(--sh);\n background: var(--bg-1);\n }\n .strct-sd--up .strct-sd__actions {\n flex-direction: column;\n bottom: calc(100% + 12px);\n left: 50%;\n transform: translateX(-50%);\n }\n .strct-sd--down .strct-sd__actions {\n flex-direction: column;\n top: calc(100% + 12px);\n left: 50%;\n transform: translateX(-50%);\n }\n .strct-sd--left .strct-sd__actions {\n flex-direction: row;\n right: calc(100% + 12px);\n top: 50%;\n transform: translateY(-50%);\n }\n .strct-sd--right .strct-sd__actions {\n flex-direction: row;\n left: calc(100% + 12px);\n top: 50%;\n transform: translateY(-50%);\n }\n @keyframes strct-sd-in {\n from {\n opacity: 0;\n }\n }\n `,\n ],\n})\nexport class StrctSpeedDial {\n private readonly host = inject(ElementRef<HTMLElement>);\n /** Icon name. */\n readonly icon = input('ellipsis');\n /** Direction the actions fan out. */\n readonly direction = input<StrctSpeedDialDirection>('up');\n readonly open = signal(false);\n\n toggle(): void {\n this.open.update((v) => !v);\n }\n\n @HostListener('document:click', ['$event'])\n protected onDocClick(event: MouseEvent): void {\n if (this.open() && !this.host.nativeElement.contains(event.target as Node)) {\n this.open.set(false);\n }\n }\n\n @HostListener('document:keydown.escape')\n protected onEscape(): void {\n this.open.set(false);\n }\n}\n","import { ChangeDetectionStrategy, Component } from '@angular/core';\n\n/**\n * Surface container. Compose with the header / block / footer pieces:\n * <strct-card>\n * <strct-card-header>Title</strct-card-header>\n * <strct-card-block>...</strct-card-block>\n * <strct-card-footer><button strct-button>OK</button></strct-card-footer>\n * </strct-card>\n */\n@Component({\n selector: 'strct-card',\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `<ng-content />`,\n styles: [\n `\n :host {\n display: block;\n background: var(--bg-1);\n border: 1px solid var(--b2);\n border-radius: var(--radius-lg);\n box-shadow: var(--sh);\n overflow: hidden;\n }\n `,\n ],\n})\nexport class StrctCard {}\n\n/** Header section of a {@link StrctCard}. */\n@Component({\n selector: 'strct-card-header',\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `<ng-content />`,\n styles: [\n `\n :host {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: var(--space-2);\n padding: var(--space-3) var(--space-4);\n border-bottom: 1px solid var(--b1);\n font-size: 13px;\n font-weight: 600;\n color: var(--t1);\n }\n `,\n ],\n})\nexport class StrctCardHeader {}\n\n/** Body section of a {@link StrctCard}. */\n@Component({\n selector: 'strct-card-block',\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `<ng-content />`,\n styles: [\n `\n :host {\n display: block;\n padding: var(--space-4);\n color: var(--t2);\n font-size: 13px;\n }\n `,\n ],\n})\nexport class StrctCardBlock {}\n\n/** Footer section of a {@link StrctCard}. */\n@Component({\n selector: 'strct-card-footer',\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `<ng-content />`,\n styles: [\n `\n :host {\n display: flex;\n align-items: center;\n justify-content: flex-end;\n gap: var(--space-2);\n padding: var(--space-3) var(--space-4);\n border-top: 1px solid var(--b1);\n background: var(--bg-2);\n }\n `,\n ],\n})\nexport class StrctCardFooter {}\n","import { ChangeDetectionStrategy, Component, ViewEncapsulation, input, model } from '@angular/core';\nimport { StrctIcon } from '../icon/icon';\n\n/** Vertical container for `<strct-accordion-panel>` items. */\n@Component({\n selector: 'strct-accordion',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n template: `<ng-content />`,\n host: { class: 'strct-accordion' },\n styles: [\n `\n .strct-accordion {\n display: flex;\n flex-direction: column;\n gap: 6px;\n }\n `,\n ],\n})\nexport class StrctAccordion {}\n\n/** Collapsible panel with a header. `expanded` is two-way bindable. */\n@Component({\n selector: 'strct-accordion-panel',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n imports: [StrctIcon],\n template: `\n <button\n type=\"button\"\n class=\"strct-acc__head\"\n [attr.aria-expanded]=\"expanded()\"\n (click)=\"toggle()\"\n >\n <span class=\"strct-acc__chevron\" [class.strct-acc__chevron--open]=\"expanded()\">\n <strct-icon name=\"chevronRight\" [size]=\"13\" [strokeWidth]=\"1.7\" />\n </span>\n <span class=\"strct-acc__title\">{{ heading() }}</span>\n </button>\n @if (expanded()) {\n <div class=\"strct-acc__body\"><ng-content /></div>\n }\n `,\n host: { class: 'strct-acc' },\n styles: [\n `\n .strct-acc {\n display: block;\n background: var(--bg-1);\n border: 1px solid var(--b2);\n border-radius: 7px;\n overflow: hidden;\n }\n .strct-acc__head {\n display: flex;\n align-items: center;\n gap: 9px;\n width: 100%;\n padding: 11px 14px;\n border: 0;\n background: transparent;\n cursor: pointer;\n font-family: var(--font);\n font-size: 13px;\n font-weight: 500;\n color: var(--t1);\n text-align: left;\n }\n .strct-acc__head:hover {\n background: var(--bg-3);\n }\n .strct-acc__chevron {\n display: inline-flex;\n color: var(--t3);\n transition: transform 0.16s ease;\n }\n .strct-acc__chevron--open {\n transform: rotate(90deg);\n color: var(--acc);\n }\n .strct-acc__title {\n flex: 1;\n }\n .strct-acc__body {\n padding: 4px 14px 14px 32px;\n color: var(--t2);\n font-size: 13px;\n border-top: 1px solid var(--b1);\n }\n `,\n ],\n})\nexport class StrctAccordionPanel {\n /** Panel heading. */\n readonly heading = input.required<string>();\n /** Whether the panel is open (two-way). */\n readonly expanded = model(false);\n\n toggle(): void {\n this.expanded.update((v) => !v);\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n ViewEncapsulation,\n booleanAttribute,\n contentChildren,\n effect,\n input,\n signal,\n} from '@angular/core';\n\n/** A single tab. Place inside `<strct-tabs>`; `label` names its button. */\n@Component({\n selector: 'strct-tab',\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `@if (active()) {\n <ng-content />\n }`,\n host: { class: 'strct-tab', role: 'tabpanel', '[hidden]': '!active()' },\n})\nexport class StrctTab {\n /** Label text. */\n readonly label = input.required<string>();\n /** Static disable flag. */\n readonly disabled = input(false, { transform: booleanAttribute });\n private readonly _active = signal(false);\n readonly active = this._active.asReadonly();\n\n /** @internal called by the parent tab group */\n setActive(value: boolean): void {\n this._active.set(value);\n }\n}\n\n/** Tab group. Wraps `<strct-tab>` children and renders the tab bar. */\n@Component({\n selector: 'strct-tabs',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n template: `\n <div\n class=\"strct-tabs__bar\"\n role=\"tablist\"\n tabindex=\"0\"\n #bar\n (keydown)=\"onKeydown($event, bar)\"\n >\n @for (tab of tabs(); track tab; let i = $index) {\n <button\n type=\"button\"\n role=\"tab\"\n class=\"strct-tabs__btn\"\n [class.strct-tabs__btn--active]=\"i === selectedIndex()\"\n [attr.aria-selected]=\"i === selectedIndex()\"\n [attr.tabindex]=\"i === selectedIndex() ? 0 : -1\"\n [disabled]=\"tab.disabled()\"\n (click)=\"select(i)\"\n >\n {{ tab.label() }}\n </button>\n }\n </div>\n <div class=\"strct-tabs__panels\"><ng-content /></div>\n `,\n host: { class: 'strct-tabs' },\n styles: [\n `\n .strct-tabs {\n display: block;\n }\n .strct-tabs__bar {\n display: flex;\n gap: 2px;\n border-bottom: 1px solid var(--b2);\n overflow-x: auto;\n white-space: nowrap;\n scrollbar-width: none;\n }\n .strct-tabs__btn {\n appearance: none;\n background: transparent;\n border: 0;\n cursor: pointer;\n font-family: var(--font);\n font-size: 13px;\n font-weight: 500;\n color: var(--t2);\n padding: 9px 14px;\n border-bottom: 2px solid transparent;\n margin-bottom: -1px;\n transition:\n color 0.14s ease,\n border-color 0.14s ease;\n }\n .strct-tabs__btn:hover {\n color: var(--t1);\n }\n .strct-tabs__btn--active {\n color: var(--acc);\n border-bottom-color: var(--acc);\n }\n .strct-tabs__btn:disabled {\n color: var(--t4);\n cursor: not-allowed;\n }\n .strct-tabs__panels {\n padding-top: 16px;\n }\n `,\n ],\n})\nexport class StrctTabs {\n readonly tabs = contentChildren(StrctTab);\n readonly selectedIndex = signal(0);\n\n constructor() {\n // Keep each child panel's visibility in sync with the selected index.\n effect(() => {\n const idx = this.selectedIndex();\n this.tabs().forEach((tab, i) => tab.setActive(i === idx));\n });\n }\n\n select(index: number): void {\n if (!this.tabs()[index]?.disabled()) this.selectedIndex.set(index);\n }\n\n onKeydown(event: KeyboardEvent, bar: HTMLElement): void {\n const key = event.key;\n if (!['ArrowRight', 'ArrowLeft', 'Home', 'End'].includes(key)) return;\n event.preventDefault();\n const count = this.tabs().length;\n if (!count) return;\n let idx = this.selectedIndex();\n if (key === 'Home') {\n idx = 0;\n while (idx < count && this.tabs()[idx].disabled()) idx++;\n } else if (key === 'End') {\n idx = count - 1;\n while (idx >= 0 && this.tabs()[idx].disabled()) idx--;\n } else {\n const step = key === 'ArrowRight' ? 1 : -1;\n for (let n = 0; n < count; n++) {\n idx = (idx + step + count) % count;\n if (!this.tabs()[idx].disabled()) break;\n }\n }\n if (idx < 0 || idx >= count || this.tabs()[idx]?.disabled()) return;\n this.selectedIndex.set(idx);\n const buttons = bar.querySelectorAll<HTMLElement>('button.strct-tabs__btn');\n buttons[idx]?.focus();\n }\n}\n","import { DOCUMENT } from '@angular/common';\nimport {\n ApplicationRef,\n ChangeDetectionStrategy,\n Component,\n ComponentRef,\n Directive,\n ElementRef,\n EnvironmentInjector,\n HostListener,\n NgZone,\n OnDestroy,\n ViewEncapsulation,\n afterNextRender,\n booleanAttribute,\n computed,\n createComponent,\n inject,\n input,\n output,\n signal,\n} from '@angular/core';\nimport { StrctIcon } from '../icon/icon';\n\n/** A single entry in a data-driven menu. */\nexport interface StrctMenuItem {\n /** Entry text. Optional — omit it for a `divider`, where a label is meaningless. */\n label?: string;\n icon?: string;\n /** Destructive styling. */\n critical?: boolean;\n disabled?: boolean;\n /** Render a separator instead of an entry (label is ignored). */\n divider?: boolean;\n /** Nested submenu. */\n children?: StrctMenuItem[];\n /** Invoked on selection, with the trigger's `strctContextMenuData`. */\n action?: (data?: unknown) => void;\n /** Arbitrary payload. */\n data?: unknown;\n}\n\n/**\n * Floating menu panel — portaled into `<body>` (so it escapes overflow /\n * transform clipping), positioned by its real measured size, with full keyboard\n * navigation and recursive submenus. Usually created by `[strctContextMenu]`,\n * but can be embedded directly with `submenu`.\n */\n@Component({\n selector: 'strct-menu-panel',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n imports: [StrctIcon],\n template: `\n <div class=\"strct-menu\" role=\"menu\" tabindex=\"-1\" (keydown)=\"onKeydown($event)\">\n @for (item of items(); track $index; let i = $index) {\n @if (item.divider) {\n <div class=\"strct-menu__sep\" role=\"separator\"></div>\n } @else {\n <div class=\"strct-menu__wrap\" (mouseenter)=\"onHover(i)\" (mouseleave)=\"onLeave(i)\">\n <button\n type=\"button\"\n class=\"strct-menu__item\"\n [attr.data-idx]=\"i\"\n [class.strct-menu__item--critical]=\"item.critical\"\n [class.strct-menu__item--active]=\"i === activeIndex()\"\n [disabled]=\"item.disabled\"\n role=\"menuitem\"\n [attr.aria-haspopup]=\"item.children?.length ? 'menu' : null\"\n [attr.aria-expanded]=\"item.children?.length ? openSubIndex() === i : null\"\n [attr.tabindex]=\"i === activeIndex() ? 0 : -1\"\n (click)=\"onItemClick(item, i, $event)\"\n >\n @if (item.icon) {\n <strct-icon\n class=\"strct-menu__icon\"\n [name]=\"item.icon\"\n [size]=\"14\"\n [strokeWidth]=\"1.3\"\n />\n } @else {\n <span class=\"strct-menu__icon-spacer\" aria-hidden=\"true\"></span>\n }\n <span class=\"strct-menu__label\">{{ item.label }}</span>\n @if (item.children?.length) {\n <strct-icon\n class=\"strct-menu__arrow\"\n name=\"chevronRight\"\n [size]=\"12\"\n [strokeWidth]=\"1.6\"\n />\n }\n </button>\n @if (openSubIndex() === i && item.children?.length) {\n <strct-menu-panel\n submenu\n class=\"strct-menu__subpanel\"\n [class.strct-menu__subpanel--flip]=\"flipLeft()\"\n [items]=\"item.children!\"\n [data]=\"data()\"\n (select)=\"select.emit($event)\"\n (close)=\"close.emit()\"\n (back)=\"closeSub(); focusItem(i)\"\n />\n }\n </div>\n }\n }\n </div>\n `,\n host: {\n class: 'strct-menu-host',\n '[style.position]': \"submenu() ? null : 'fixed'\",\n '[style.left.px]': 'submenu() ? null : posX()',\n '[style.top.px]': 'submenu() ? null : posY()',\n '[style.zIndex]': 'submenu() ? null : 1100',\n },\n styles: [\n `\n .strct-menu-host {\n display: block;\n }\n .strct-menu {\n min-width: 180px;\n padding: 4px;\n background: var(--bg-1);\n border: 1px solid var(--b2);\n border-radius: 7px;\n box-shadow: var(--shh);\n animation: strct-menu-in 0.1s ease;\n }\n .strct-menu:focus {\n outline: none;\n }\n .strct-menu__wrap {\n position: relative;\n }\n .strct-menu__item {\n display: flex;\n align-items: center;\n gap: 8px;\n width: 100%;\n padding: 7px 8px 7px 10px;\n border: 0;\n border-radius: 5px;\n cursor: pointer;\n background: transparent;\n color: var(--t1);\n font-size: 13px;\n font-family: var(--font);\n text-align: left;\n }\n .strct-menu__item:hover:not(:disabled),\n .strct-menu__item--active:not(:disabled) {\n background: var(--bg-3);\n }\n .strct-menu__item:focus-visible {\n outline: none;\n background: var(--bg-3);\n }\n .strct-menu__item--critical {\n color: var(--critical);\n }\n .strct-menu__item--critical:hover:not(:disabled),\n .strct-menu__item--critical.strct-menu__item--active:not(:disabled) {\n background: var(--critical-bg);\n }\n .strct-menu__item:disabled {\n opacity: 0.45;\n cursor: not-allowed;\n }\n .strct-menu__icon {\n color: var(--t2);\n flex-shrink: 0;\n }\n .strct-menu__item--critical .strct-menu__icon {\n color: var(--critical);\n }\n .strct-menu__icon-spacer {\n width: 14px;\n flex-shrink: 0;\n }\n .strct-menu__label {\n flex: 1;\n white-space: nowrap;\n }\n .strct-menu__arrow {\n color: var(--t3);\n flex-shrink: 0;\n }\n .strct-menu__sep {\n height: 1px;\n margin: 4px 6px;\n background: var(--b1);\n }\n\n .strct-menu__subpanel {\n position: absolute;\n top: -5px;\n left: 100%;\n margin-left: 2px;\n z-index: 1;\n }\n .strct-menu__subpanel--flip {\n left: auto;\n right: 100%;\n margin-left: 0;\n margin-right: 2px;\n }\n @keyframes strct-menu-in {\n from {\n opacity: 0;\n transform: scale(0.97);\n }\n }\n `,\n ],\n})\nexport class StrctMenuPanel {\n private readonly host: ElementRef<HTMLElement> = inject(ElementRef);\n\n /** Menu items to display. */\n readonly items = input.required<StrctMenuItem[]>();\n /** Arbitrary payload passed to item actions. */\n readonly data = input<unknown>(undefined);\n /** Horizontal position in pixels. */\n readonly x = input(0);\n /** Vertical position in pixels. */\n readonly y = input(0);\n /** Render as a nested submenu panel. */\n readonly submenu = input(false, { transform: booleanAttribute });\n\n /** Emitted when an item is selected. */\n readonly select = output<StrctMenuItem>();\n /** Emitted when the menu requests closing. */\n readonly close = output<void>();\n /** ArrowLeft inside a submenu — asks the parent to close it. */\n readonly back = output<void>();\n\n protected readonly posX = signal(0);\n protected readonly posY = signal(0);\n protected readonly flipLeft = signal(false);\n protected readonly activeIndex = signal(0);\n protected readonly openSubIndex = signal<number | null>(null);\n\n private readonly navIndices = computed(() =>\n this.items()\n .map((it, i) => (it.divider ? -1 : i))\n .filter((i) => i >= 0),\n );\n\n constructor() {\n this.posX.set(this.x());\n this.posY.set(this.y());\n afterNextRender(() => {\n this.activeIndex.set(this.navIndices()[0] ?? 0);\n if (!this.submenu()) this.clampToViewport();\n this.focusItem(this.activeIndex());\n });\n }\n\n private clampToViewport(): void {\n const host = this.host.nativeElement;\n const w = host.offsetWidth;\n const h = host.offsetHeight;\n const vw = window.innerWidth;\n const vh = window.innerHeight;\n const m = 6;\n let nx = this.x();\n let ny = this.y();\n if (nx + w > vw - m) nx = Math.max(m, Math.min(this.x() - w, vw - w - m));\n if (ny + h > vh - m) ny = Math.max(m, vh - h - m);\n this.posX.set(nx);\n this.posY.set(ny);\n // Submenus of a panel near the right edge open to the left.\n this.flipLeft.set(nx + w > vw - 220);\n }\n\n protected focusItem(i: number): void {\n this.activeIndex.set(i);\n this.host.nativeElement\n .querySelector<HTMLElement>(`.strct-menu__item[data-idx=\"${i}\"]`)\n ?.focus();\n }\n\n private move(dir: 1 | -1): void {\n const nav = this.navIndices();\n if (!nav.length) return;\n const pos = nav.indexOf(this.activeIndex());\n const next = nav[(pos + dir + nav.length) % nav.length];\n this.openSubIndex.set(null);\n this.focusItem(next);\n }\n\n protected onHover(i: number): void {\n this.activeIndex.set(i);\n const it = this.items()[i];\n this.openSubIndex.set(it?.children?.length ? i : null);\n }\n\n protected onLeave(i: number): void {\n if (this.openSubIndex() === i) this.openSubIndex.set(null);\n }\n\n protected onItemClick(item: StrctMenuItem, i: number, event: Event): void {\n event.stopPropagation();\n if (item.disabled) return;\n if (item.children?.length) {\n this.openSubIndex.set(this.openSubIndex() === i ? null : i);\n this.focusItem(i);\n } else {\n this.select.emit(item);\n }\n }\n\n protected closeSub(): void {\n this.openSubIndex.set(null);\n }\n\n protected onKeydown(event: KeyboardEvent): void {\n const key = event.key;\n const item = this.items()[this.activeIndex()];\n switch (key) {\n case 'ArrowDown':\n event.preventDefault();\n event.stopPropagation();\n this.move(1);\n break;\n case 'ArrowUp':\n event.preventDefault();\n event.stopPropagation();\n this.move(-1);\n break;\n case 'Home':\n event.preventDefault();\n event.stopPropagation();\n this.focusItem(this.navIndices()[0] ?? 0);\n break;\n case 'End':\n event.preventDefault();\n event.stopPropagation();\n this.focusItem(this.navIndices().at(-1) ?? 0);\n break;\n case 'ArrowRight':\n if (item?.children?.length) {\n event.preventDefault();\n event.stopPropagation();\n this.openSubIndex.set(this.activeIndex());\n }\n break;\n case 'ArrowLeft':\n event.preventDefault();\n event.stopPropagation();\n if (this.openSubIndex() != null) this.closeSub();\n else if (this.submenu()) this.back.emit();\n break;\n case 'Enter':\n case ' ':\n event.preventDefault();\n event.stopPropagation();\n if (item && !item.disabled) {\n if (item.children?.length) this.openSubIndex.set(this.activeIndex());\n else this.select.emit(item);\n }\n break;\n case 'Escape':\n event.preventDefault();\n event.stopPropagation();\n this.close.emit();\n break;\n }\n }\n}\n\n/**\n * Right-click (context) menu driven by a data array. Attach to any trigger; the\n * menu portals into `<body>` and runs each item's `action` on selection.\n * <div [strctContextMenu]=\"menuFor(host)\" [strctContextMenuData]=\"host\"\n * (menuSelect)=\"onPick($event)\">…</div>\n */\n@Directive({ selector: '[strctContextMenu]' })\nexport class StrctContextMenuTrigger implements OnDestroy {\n private readonly appRef = inject(ApplicationRef);\n private readonly envInjector = inject(EnvironmentInjector);\n private readonly zone = inject(NgZone);\n private readonly doc = inject(DOCUMENT);\n\n /** Menu items to display. */\n readonly items = input.required<StrctMenuItem[]>({ alias: 'strctContextMenu' });\n /** Arbitrary payload passed to item actions. */\n readonly data = input<unknown>(undefined, { alias: 'strctContextMenuData' });\n /** Emitted when a menu item is selected. */\n readonly menuSelect = output<StrctMenuItem>();\n\n private ref: ComponentRef<StrctMenuPanel> | null = null;\n private readonly onClose = () => this.zone.run(() => this.closeMenu());\n\n @HostListener('contextmenu', ['$event'])\n protected onContextMenu(event: MouseEvent): void {\n if (!this.items()?.length) return;\n event.preventDefault();\n this.openAt(event.clientX, event.clientY);\n }\n\n private openAt(x: number, y: number): void {\n this.closeMenu();\n const ref = createComponent(StrctMenuPanel, { environmentInjector: this.envInjector });\n ref.setInput('items', this.items());\n ref.setInput('data', this.data());\n ref.setInput('x', x);\n ref.setInput('y', y);\n ref.instance.select.subscribe((item) => {\n item.action?.(this.data());\n this.menuSelect.emit(item);\n this.closeMenu();\n });\n ref.instance.close.subscribe(() => this.closeMenu());\n\n this.appRef.attachView(ref.hostView);\n this.doc.body.appendChild(ref.location.nativeElement);\n this.ref = ref;\n\n // Defer global listeners so the opening right-click doesn't immediately close.\n setTimeout(() => {\n this.zone.runOutsideAngular(() => {\n this.doc.addEventListener('mousedown', this.onOutside, true);\n window.addEventListener('scroll', this.onClose, true);\n window.addEventListener('resize', this.onClose);\n });\n });\n }\n\n private readonly onOutside = (event: Event) => {\n if (this.ref && !this.ref.location.nativeElement.contains(event.target as Node)) {\n this.onClose();\n }\n };\n\n private closeMenu(): void {\n if (!this.ref) return;\n this.doc.removeEventListener('mousedown', this.onOutside, true);\n window.removeEventListener('scroll', this.onClose, true);\n window.removeEventListener('resize', this.onClose);\n this.appRef.detachView(this.ref.hostView);\n this.ref.destroy();\n this.ref = null;\n }\n\n ngOnDestroy(): void {\n this.closeMenu();\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n ViewEncapsulation,\n computed,\n contentChildren,\n input,\n model,\n output,\n signal,\n} from '@angular/core';\nimport { StrctIcon, StrctIconBadge } from '../icon/icon';\nimport { StrctContextMenuTrigger, StrctMenuItem } from '../context-menu/menu';\n\n/** A node in the data-driven tree (`<strct-tree [nodes]=\"...\">`). */\nexport interface StrctTreeNodeData {\n label: string;\n /** Optional leading icon name. */\n icon?: string;\n /** Status dot on the icon (running / maintenance / off …). */\n badge?: StrctIconBadge;\n /** Highlight as the selected node. */\n active?: boolean;\n /** Initial expanded state. */\n expanded?: boolean;\n children?: StrctTreeNodeData[];\n /** Arbitrary payload returned with (nodeActivated). */\n data?: unknown;\n}\n\n/** Per-node menu resolver for the data-driven tree — returns the items for one node. */\nexport type StrctTreeNodeMenuFn = (node: StrctTreeNodeData) => StrctMenuItem[];\n\n/** Payload of (nodeMenuSelect). */\nexport interface StrctTreeMenuEvent {\n node: StrctTreeNodeData;\n item: StrctMenuItem;\n}\n\n/**\n * Tree node. Two modes:\n * - **Content:** nest `<strct-tree-node>` children manually.\n * - **Data:** pass a `[node]` object that recurses over its `children` —\n * used internally by `<strct-tree [nodes]>`.\n *\n * <strct-tree-node label=\"Group\" icon=\"layers\" badge=\"success\" [(expanded)]=\"open\">\n * <strct-tree-node label=\"Leaf\" icon=\"vm\" [active]=\"true\" />\n * </strct-tree-node>\n */\n@Component({\n selector: 'strct-tree-node',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n imports: [StrctIcon, StrctContextMenuTrigger],\n template: `\n <div\n class=\"strct-tnode__row\"\n [class.strct-tnode__row--active]=\"displayActive()\"\n role=\"treeitem\"\n tabindex=\"0\"\n [attr.aria-selected]=\"displayActive()\"\n [attr.aria-expanded]=\"hasChildren() ? isOpen() : null\"\n [strctContextMenu]=\"menuItems()\"\n [strctContextMenuData]=\"node()\"\n (menuSelect)=\"onMenuSelect($event)\"\n (click)=\"onActivate()\"\n (keydown.enter)=\"onActivate()\"\n (keydown.space)=\"onActivate()\"\n >\n @if (hasChildren()) {\n <span\n class=\"strct-tnode__chevron\"\n [class.strct-tnode__chevron--open]=\"isOpen()\"\n role=\"button\"\n tabindex=\"0\"\n (click)=\"$event.stopPropagation(); toggle()\"\n (keydown.enter)=\"$event.stopPropagation(); toggle()\"\n (keydown.space)=\"$event.stopPropagation(); toggle()\"\n >\n <strct-icon name=\"chevronRight\" [size]=\"12\" [strokeWidth]=\"1.7\" />\n </span>\n } @else {\n <span class=\"strct-tnode__spacer\"></span>\n }\n @if (displayIcon()) {\n <strct-icon\n class=\"strct-tnode__icon\"\n [name]=\"displayIcon()!\"\n [size]=\"14\"\n [strokeWidth]=\"1.3\"\n [badge]=\"displayBadge()\"\n />\n }\n <span class=\"strct-tnode__label\">{{ displayLabel() }}</span>\n <ng-content select=\"[strctTreeTrailing]\" />\n </div>\n @if (hasChildren() && isOpen()) {\n <div class=\"strct-tnode__children\" role=\"group\">\n @if (node()) {\n @for (child of node()!.children ?? []; track $index) {\n <strct-tree-node\n [node]=\"child\"\n [nodeMenu]=\"nodeMenu()\"\n (nodeActivated)=\"nodeActivated.emit($event)\"\n (nodeMenuSelect)=\"nodeMenuSelect.emit($event)\"\n />\n }\n } @else {\n <ng-content />\n }\n </div>\n }\n `,\n host: { class: 'strct-tnode' },\n styles: [\n `\n .strct-tnode {\n display: block;\n }\n .strct-tnode__row {\n display: flex;\n align-items: center;\n gap: 7px;\n padding: 7px 10px;\n border-radius: 5px;\n cursor: pointer;\n font-size: 13px;\n color: var(--t1);\n user-select: none;\n }\n .strct-tnode__row:hover {\n background: var(--bg-3);\n }\n .strct-tnode__row--active {\n background: var(--acc-m);\n color: var(--acc);\n font-weight: 500;\n }\n .strct-tnode__row--active .strct-tnode__icon,\n .strct-tnode__row--active .strct-tnode__chevron {\n color: var(--acc);\n }\n .strct-tnode__chevron {\n display: inline-flex;\n color: var(--t3);\n transition: transform 0.15s ease;\n width: 14px;\n justify-content: center;\n }\n .strct-tnode__chevron--open {\n transform: rotate(90deg);\n }\n .strct-tnode__spacer {\n width: 14px;\n flex-shrink: 0;\n }\n .strct-tnode__icon {\n color: var(--t2);\n flex-shrink: 0;\n }\n .strct-tnode__label {\n flex: 1;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n }\n .strct-tnode__children {\n margin-left: 16px;\n }\n `,\n ],\n})\nexport class StrctTreeNode {\n /** Data-driven node; when set, label/icon/children come from it. */\n readonly node = input<StrctTreeNodeData | null>(null);\n /** Label text. */\n readonly label = input('');\n /** Icon name. */\n readonly icon = input<string | undefined>(undefined);\n /** Status dot variant. */\n readonly badge = input<StrctIconBadge>('none');\n /** Whether the item is active / selected. */\n readonly active = input(false);\n /** Whether the panel is open (two-way). */\n readonly expanded = model(false);\n /** Per-node menu resolver (data mode); bubbles down the recursion. */\n readonly nodeMenu = input<StrctTreeNodeMenuFn | null>(null);\n /** Content-mode click. */\n readonly activated = output<void>();\n /** Data-mode click — carries the activated node (bubbles to the tree). */\n readonly nodeActivated = output<StrctTreeNodeData>();\n /** Data-mode right-click menu selection (bubbles to the tree). */\n readonly nodeMenuSelect = output<StrctTreeMenuEvent>();\n\n /** Right-click menu items for this node ([] when no resolver / not data mode). */\n protected readonly menuItems = computed<StrctMenuItem[]>(() => {\n const fn = this.nodeMenu();\n const n = this.node();\n return fn && n ? fn(n) : [];\n });\n\n private readonly childNodes = contentChildren(StrctTreeNode);\n /** Data-mode expansion (seeded from node.expanded on first toggle). */\n private readonly dataExpanded = signal<boolean | null>(null);\n\n protected readonly displayLabel = computed(() => this.node()?.label ?? this.label());\n protected readonly displayIcon = computed(() => this.node()?.icon ?? this.icon());\n protected readonly displayBadge = computed<StrctIconBadge>(\n () => this.node()?.badge ?? this.badge(),\n );\n protected readonly displayActive = computed(() => this.node()?.active ?? this.active());\n\n protected readonly hasChildren = computed(() => {\n const n = this.node();\n return n ? (n.children?.length ?? 0) > 0 : this.childNodes().length > 0;\n });\n\n protected readonly isOpen = computed(() => {\n if (this.node()) return this.dataExpanded() ?? this.node()!.expanded ?? false;\n return this.expanded();\n });\n\n toggle(): void {\n if (this.node()) {\n this.dataExpanded.set(!this.isOpen());\n } else {\n this.expanded.update((v) => !v);\n }\n }\n\n protected onActivate(): void {\n const n = this.node();\n if (n) this.nodeActivated.emit(n);\n else this.activated.emit();\n }\n\n protected onMenuSelect(item: StrctMenuItem): void {\n const n = this.node();\n if (n) this.nodeMenuSelect.emit({ node: n, item });\n }\n}\n\n/**\n * Root container for a tree. Either project `<strct-tree-node>` children, or\n * pass `[nodes]` for a fully data-driven, self-recursing tree:\n * <strct-tree [nodes]=\"roots\" (nodeActivated)=\"select($event)\" />\n */\n@Component({\n selector: 'strct-tree',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n imports: [StrctTreeNode],\n template: `\n @if (nodes(); as ns) {\n @for (n of ns; track $index) {\n <strct-tree-node\n [node]=\"n\"\n [nodeMenu]=\"nodeMenu()\"\n (nodeActivated)=\"nodeActivated.emit($event)\"\n (nodeMenuSelect)=\"nodeMenuSelect.emit($event)\"\n />\n }\n } @else {\n <ng-content />\n }\n `,\n host: { class: 'strct-tree', role: 'tree' },\n styles: [\n `\n .strct-tree {\n display: block;\n }\n `,\n ],\n})\nexport class StrctTree {\n /** Data-driven node list; when set, projected content is ignored. */\n readonly nodes = input<StrctTreeNodeData[] | null>(null);\n /** Per-node right-click menu resolver. */\n readonly nodeMenu = input<StrctTreeNodeMenuFn | null>(null);\n /** Emitted when any data-driven node is clicked. */\n readonly nodeActivated = output<StrctTreeNodeData>();\n /** Emitted when a data-driven node's right-click menu item is chosen. */\n readonly nodeMenuSelect = output<StrctTreeMenuEvent>();\n}\n","import {\n DOCUMENT,\n ChangeDetectionStrategy,\n Component,\n DestroyRef,\n ElementRef,\n booleanAttribute,\n effect,\n inject,\n input,\n model,\n output,\n} from '@angular/core';\nimport { StrctIcon } from '../icon/icon';\n\n/** Modal width presets. */\nexport type StrctModalSize = 'sm' | 'md' | 'lg';\n\nlet modalCounter = 0;\n\n// Body scroll-lock shared across any number of simultaneously open modals.\nlet scrollLockCount = 0;\nlet savedBodyOverflow = '';\nfunction lockBodyScroll(doc: Document): void {\n if (scrollLockCount === 0) {\n savedBodyOverflow = doc.body.style.overflow;\n doc.body.style.overflow = 'hidden';\n }\n scrollLockCount++;\n}\nfunction unlockBodyScroll(doc: Document): void {\n scrollLockCount = Math.max(0, scrollLockCount - 1);\n if (scrollLockCount === 0) doc.body.style.overflow = savedBodyOverflow;\n}\n\n/**\n * Overlay dialog with two-way `open`:\n * <strct-modal [(open)]=\"show\" title=\"Confirm\">\n * Body…\n * <ng-container strctModalFooter>\n * <button strct-button (click)=\"show = false\">Cancel</button>\n * </ng-container>\n * </strct-modal>\n */\n@Component({\n selector: 'strct-modal',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [StrctIcon],\n template: `\n @if (open()) {\n <div\n class=\"strct-modal__overlay\"\n role=\"button\"\n tabindex=\"0\"\n (click)=\"onBackdrop()\"\n (keydown.enter)=\"onBackdrop()\"\n (keydown.space)=\"onBackdrop()\"\n >\n <div\n #dialog\n class=\"strct-modal__dialog\"\n [class.strct-modal__dialog--sm]=\"size() === 'sm'\"\n [class.strct-modal__dialog--lg]=\"size() === 'lg'\"\n role=\"dialog\"\n aria-modal=\"true\"\n [attr.aria-labelledby]=\"title() ? titleId : null\"\n tabindex=\"-1\"\n (click)=\"$event.stopPropagation()\"\n (keydown.tab)=\"onTab($event)\"\n (keydown.shift.tab)=\"onTab($event)\"\n >\n <div class=\"strct-modal__head\">\n <span class=\"strct-modal__title\" [id]=\"titleId\">{{ title() }}</span>\n <button type=\"button\" class=\"strct-modal__close\" aria-label=\"Close\" (click)=\"close()\">\n <strct-icon name=\"close\" [size]=\"14\" />\n </button>\n </div>\n <div class=\"strct-modal__body\"><ng-content /></div>\n @if (!hideFooter()) {\n <div class=\"strct-modal__foot\"><ng-content select=\"[strctModalFooter]\" /></div>\n }\n </div>\n </div>\n }\n `,\n host: {\n '(document:keydown.escape)': 'onEscape()',\n },\n styles: [\n `\n .strct-modal__overlay {\n position: fixed;\n inset: 0;\n z-index: 1000;\n display: flex;\n align-items: center;\n justify-content: center;\n padding: var(--space-5);\n background: rgba(0, 0, 0, 0.5);\n backdrop-filter: blur(2px);\n animation: strct-modal-fade 0.12s ease;\n }\n @media (max-width: 768px) {\n .strct-modal__overlay {\n padding: var(--space-3);\n }\n }\n .strct-modal__dialog {\n width: 100%;\n max-width: min(460px, calc(100vw - 32px));\n max-height: calc(100vh - 48px);\n display: flex;\n flex-direction: column;\n background: var(--bg-1);\n border: 1px solid var(--b2);\n border-radius: var(--radius-xl);\n box-shadow: var(--shadow-elevated);\n overflow: hidden;\n animation: strct-modal-rise 0.14s ease;\n }\n .strct-modal__dialog--sm {\n max-width: min(360px, calc(100vw - 32px));\n }\n .strct-modal__dialog--lg {\n max-width: min(720px, calc(100vw - 32px));\n }\n .strct-modal__head {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: var(--space-3);\n padding: var(--space-3) var(--space-4);\n border-bottom: 1px solid var(--b1);\n }\n .strct-modal__title {\n font-size: 14px;\n font-weight: 600;\n color: var(--t1);\n }\n .strct-modal__close {\n display: inline-flex;\n padding: 4px;\n border: 0;\n border-radius: 5px;\n background: transparent;\n color: var(--t3);\n cursor: pointer;\n }\n .strct-modal__close:hover {\n color: var(--t1);\n background: var(--bg-3);\n }\n .strct-modal__body {\n padding: var(--space-4);\n overflow-y: auto;\n color: var(--t2);\n font-size: 13px;\n }\n .strct-modal__foot {\n display: flex;\n align-items: center;\n justify-content: flex-end;\n gap: var(--space-2);\n padding: var(--space-3) var(--space-4);\n border-top: 1px solid var(--b1);\n background: var(--bg-2);\n }\n @keyframes strct-modal-fade {\n from {\n opacity: 0;\n }\n }\n @keyframes strct-modal-rise {\n from {\n opacity: 0;\n transform: translateY(8px) scale(0.98);\n }\n }\n `,\n ],\n})\nexport class StrctModal {\n private readonly elementRef = inject(ElementRef<HTMLElement>);\n private readonly doc = inject(DOCUMENT);\n\n /** Whether the panel is open (two-way). */\n readonly open = model(false);\n /** Dialog title. */\n readonly title = input('');\n /** Size variant. */\n readonly size = input<StrctModalSize>('md');\n /** Hide the footer slot. */\n readonly hideFooter = input(false, { transform: booleanAttribute });\n /** Allow closing via backdrop click / Escape. */\n readonly dismissible = input(true, { transform: booleanAttribute });\n /** Emitted when the alert is dismissed. */\n readonly closed = output<void>();\n\n protected readonly titleId = `strct-modal-${++modalCounter}`;\n /** Element that had focus before the dialog opened, restored on close. */\n private previousActive: HTMLElement | null = null;\n /** Whether this instance currently holds a scroll lock. */\n private locked = false;\n\n constructor() {\n effect(() => {\n const open = this.open();\n if (open && !this.locked) {\n this.locked = true;\n lockBodyScroll(this.doc);\n this.previousActive = this.doc.activeElement as HTMLElement | null;\n // Move focus into the dialog once it has rendered.\n setTimeout(() => this.focusInitial());\n } else if (!open && this.locked) {\n this.locked = false;\n unlockBodyScroll(this.doc);\n if (this.previousActive) {\n this.previousActive.focus?.();\n this.previousActive = null;\n }\n }\n });\n\n // Release the lock if the modal is destroyed while still open.\n inject(DestroyRef).onDestroy(() => {\n if (this.locked) {\n this.locked = false;\n unlockBodyScroll(this.doc);\n }\n });\n }\n\n close(): void {\n this.open.set(false);\n this.closed.emit();\n }\n\n protected onBackdrop(): void {\n if (this.dismissible()) this.close();\n }\n\n protected onEscape(): void {\n if (this.open() && this.dismissible()) this.close();\n }\n\n /** Wrap Tab focus within the dialog. */\n protected onTab(event: Event): void {\n const e = event as KeyboardEvent;\n const items = this.focusable();\n if (!items.length) {\n e.preventDefault();\n return;\n }\n const first = items[0];\n const last = items[items.length - 1];\n const active = this.doc.activeElement;\n if (e.shiftKey && (active === first || !this.dialog()?.contains(active))) {\n e.preventDefault();\n last.focus();\n } else if (!e.shiftKey && active === last) {\n e.preventDefault();\n first.focus();\n }\n }\n\n private dialog(): HTMLElement | null {\n return this.elementRef.nativeElement.querySelector('.strct-modal__dialog');\n }\n\n private focusable(): HTMLElement[] {\n const dialog = this.dialog();\n if (!dialog) return [];\n return Array.from(\n dialog.querySelectorAll<HTMLElement>(\n 'a[href],button:not([disabled]),input:not([disabled]),select:not([disabled]),textarea:not([disabled]),[tabindex]:not([tabindex=\"-1\"])',\n ),\n ).filter((el) => el.offsetParent !== null || el === this.doc.activeElement);\n }\n\n private focusInitial(): void {\n const items = this.focusable();\n (items[0] ?? this.dialog())?.focus();\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n ViewEncapsulation,\n ElementRef,\n HostListener,\n booleanAttribute,\n inject,\n input,\n signal,\n} from '@angular/core';\nimport { StrctOverlay } from '../overlay/overlay';\n\n/**\n * Click-to-open menu:\n * <strct-dropdown align=\"end\">\n * <button strct-button strctDropdownTrigger>Actions</button>\n * <strct-dropdown-item>Rename</strct-dropdown-item>\n * <strct-dropdown-item critical>Delete</strct-dropdown-item>\n * </strct-dropdown>\n */\n@Component({\n selector: 'strct-dropdown',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n imports: [StrctOverlay],\n template: `\n <div\n #trigger\n class=\"strct-dd__trigger\"\n role=\"button\"\n tabindex=\"0\"\n (click)=\"toggle()\"\n (keydown.enter)=\"toggle()\"\n (keydown.space)=\"toggle()\"\n >\n <ng-content select=\"[strctDropdownTrigger]\" />\n </div>\n @if (open()) {\n <div\n class=\"strct-dd__menu\"\n [strctOverlay]=\"trigger\"\n [strctOverlayPlacement]=\"align() === 'end' ? 'bottom-end' : 'bottom-start'\"\n role=\"menu\"\n tabindex=\"0\"\n (click)=\"close()\"\n (keydown.enter)=\"close()\"\n (keydown.space)=\"close()\"\n >\n <ng-content />\n </div>\n }\n `,\n host: { class: 'strct-dd' },\n styles: [\n `\n .strct-dd {\n position: relative;\n display: inline-block;\n }\n .strct-dd__trigger {\n display: inline-flex;\n }\n .strct-dd__menu {\n position: absolute;\n top: calc(100% + 4px);\n left: 0;\n z-index: 200;\n min-width: 170px;\n max-width: calc(100vw - 24px);\n padding: 4px;\n background: var(--bg-1);\n border: 1px solid var(--b2);\n border-radius: 7px;\n box-shadow: var(--shh);\n animation: strct-dd-in 0.1s ease;\n }\n .strct-dd__menu--end {\n left: auto;\n right: 0;\n }\n @keyframes strct-dd-in {\n from {\n opacity: 0;\n transform: translateY(-4px);\n }\n }\n `,\n ],\n})\nexport class StrctDropdown {\n private readonly host = inject(ElementRef<HTMLElement>);\n /** Horizontal alignment of the menu. */\n readonly align = input<'start' | 'end'>('start');\n readonly open = signal(false);\n\n toggle(): void {\n this.open.update((v) => !v);\n }\n\n close(): void {\n this.open.set(false);\n }\n\n @HostListener('document:click', ['$event'])\n protected onDocClick(event: MouseEvent): void {\n if (this.open() && !this.host.nativeElement.contains(event.target as Node)) {\n this.close();\n }\n }\n\n @HostListener('document:keydown.escape')\n protected onEscape(): void {\n this.close();\n }\n}\n\n/** A selectable row inside a `<strct-dropdown>`. */\n@Component({\n selector: 'strct-dropdown-item',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n template: `<ng-content />`,\n host: {\n class: 'strct-dd__item',\n role: 'menuitem',\n '[class.strct-dd__item--critical]': 'critical()',\n '[attr.aria-disabled]': 'disabled() || null',\n },\n styles: [\n `\n .strct-dd__item {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 7px 10px;\n border-radius: 5px;\n cursor: pointer;\n font-size: 13px;\n color: var(--t1);\n }\n .strct-dd__item:hover {\n background: var(--bg-3);\n }\n .strct-dd__item--critical {\n color: var(--critical);\n }\n .strct-dd__item--critical:hover {\n background: var(--critical-bg);\n }\n .strct-dd__item[aria-disabled='true'] {\n color: var(--t4);\n pointer-events: none;\n }\n `,\n ],\n})\nexport class StrctDropdownItem {\n /** Danger. */\n readonly critical = input(false, { transform: booleanAttribute });\n /** Static disable flag. */\n readonly disabled = input(false, { transform: booleanAttribute });\n}\n\n/** Thin separator between groups of menu items. */\n@Component({\n selector: 'strct-dropdown-divider',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n template: '',\n host: { class: 'strct-dd__divider', role: 'separator' },\n styles: [\n `\n .strct-dd__divider {\n display: block;\n height: 1px;\n margin: 4px 6px;\n background: var(--b2);\n }\n `,\n ],\n})\nexport class StrctDropdownDivider {}\n","import {\n ChangeDetectionStrategy,\n Component,\n ViewEncapsulation,\n HostListener,\n signal,\n} from '@angular/core';\n\n/**\n * Right-click (context) menu. Wraps a trigger area and shows a menu at the\n * cursor. Reuse `strct-dropdown-item` for the entries:\n * <strct-context-menu>\n * <div>Right-click here</div>\n * <ng-container strctContextMenuItems>\n * <strct-dropdown-item>Open</strct-dropdown-item>\n * <strct-dropdown-item critical>Delete</strct-dropdown-item>\n * </ng-container>\n * </strct-context-menu>\n */\n@Component({\n selector: 'strct-context-menu',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n template: `\n <div class=\"strct-ctx__trigger\" (contextmenu)=\"onContextMenu($event)\">\n <ng-content />\n </div>\n @if (open()) {\n <div\n class=\"strct-ctx__menu\"\n role=\"menu\"\n tabindex=\"0\"\n [style.left.px]=\"x()\"\n [style.top.px]=\"y()\"\n (click)=\"close()\"\n (contextmenu)=\"$event.preventDefault(); close()\"\n (keydown.enter)=\"close()\"\n (keydown.space)=\"close()\"\n >\n <ng-content select=\"[strctContextMenuItems]\" />\n </div>\n }\n `,\n host: { class: 'strct-ctx' },\n styles: [\n `\n .strct-ctx {\n display: block;\n }\n .strct-ctx__menu {\n position: fixed;\n z-index: 1100;\n min-width: 180px;\n padding: 4px;\n background: var(--bg-1);\n border: 1px solid var(--b2);\n border-radius: 7px;\n box-shadow: var(--shh);\n animation: strct-ctx-in 0.1s ease;\n }\n @keyframes strct-ctx-in {\n from {\n opacity: 0;\n transform: scale(0.97);\n }\n }\n `,\n ],\n})\nexport class StrctContextMenu {\n readonly open = signal(false);\n readonly x = signal(0);\n readonly y = signal(0);\n\n /** Approximate menu box used to keep it inside the viewport. */\n private static readonly MENU_W = 190;\n private static readonly MENU_H = 240;\n\n onContextMenu(event: MouseEvent): void {\n event.preventDefault();\n const vw = window.innerWidth;\n const vh = window.innerHeight;\n this.x.set(Math.min(event.clientX, vw - StrctContextMenu.MENU_W));\n this.y.set(Math.min(event.clientY, vh - StrctContextMenu.MENU_H));\n this.open.set(true);\n }\n\n close(): void {\n this.open.set(false);\n }\n\n @HostListener('document:click')\n protected onDocClick(): void {\n if (this.open()) this.close();\n }\n\n @HostListener('document:keydown.escape')\n protected onEscape(): void {\n this.close();\n }\n\n @HostListener('window:resize')\n protected onResize(): void {\n this.close();\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n ViewEncapsulation,\n inject,\n input,\n signal,\n} from '@angular/core';\nimport { StrctIcon } from '../icon/icon';\n\n/**\n * A nested fly-out inside a `strct-context-menu` or `strct-dropdown`. Opens on\n * hover, click/tap, or the keyboard (Enter / Space / →), and flips to the left\n * near the right edge of the viewport. Reuse `strct-dropdown-item` for entries.\n * <strct-submenu label=\"Power\">\n * <strct-dropdown-item>Power on</strct-dropdown-item>\n * <strct-dropdown-item>Power off</strct-dropdown-item>\n * </strct-submenu>\n */\n@Component({\n selector: 'strct-submenu',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n imports: [StrctIcon],\n template: `\n <div class=\"strct-submenu\" (mouseenter)=\"setOpen(true)\" (mouseleave)=\"open.set(false)\">\n <div\n class=\"strct-submenu__trigger\"\n role=\"menuitem\"\n tabindex=\"0\"\n aria-haspopup=\"menu\"\n [attr.aria-expanded]=\"open()\"\n (click)=\"$event.stopPropagation(); setOpen(!open())\"\n (keydown.enter)=\"$event.preventDefault(); $event.stopPropagation(); setOpen(true)\"\n (keydown.space)=\"$event.preventDefault(); $event.stopPropagation(); setOpen(true)\"\n (keydown.arrowright)=\"$event.preventDefault(); $event.stopPropagation(); setOpen(true)\"\n (keydown.arrowleft)=\"$event.stopPropagation(); open.set(false)\"\n (keydown.escape)=\"$event.stopPropagation(); open.set(false)\"\n >\n @if (icon()) {\n <strct-icon class=\"strct-submenu__icon\" [name]=\"icon()\" [size]=\"14\" [strokeWidth]=\"1.3\" />\n } @else {\n <span class=\"strct-submenu__icon-spacer\" aria-hidden=\"true\"></span>\n }\n <span class=\"strct-submenu__label\"\n >{{ label() }}<ng-content select=\"[strctSubmenuLabel]\"\n /></span>\n <strct-icon\n class=\"strct-submenu__arrow\"\n name=\"chevronRight\"\n [size]=\"12\"\n [strokeWidth]=\"1.6\"\n />\n </div>\n @if (open()) {\n <div class=\"strct-submenu__panel\" [class.strct-submenu__panel--flip]=\"flip()\" role=\"menu\">\n <ng-content />\n </div>\n }\n </div>\n `,\n host: { class: 'strct-submenu-host' },\n styles: [\n `\n .strct-submenu {\n position: relative;\n }\n .strct-submenu__trigger {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 7px 8px 7px 10px;\n border-radius: 5px;\n cursor: default;\n font-size: 13px;\n color: var(--t1);\n }\n .strct-submenu__trigger:hover {\n background: var(--bg-3);\n }\n .strct-submenu__trigger:focus-visible {\n outline: none;\n background: var(--bg-3);\n }\n .strct-submenu__icon {\n color: var(--t2);\n flex-shrink: 0;\n }\n .strct-submenu__icon-spacer {\n width: 14px;\n flex-shrink: 0;\n }\n .strct-submenu__label {\n flex: 1;\n display: inline-flex;\n align-items: center;\n gap: 8px;\n }\n .strct-submenu__arrow {\n color: var(--t3);\n }\n .strct-submenu__panel {\n position: absolute;\n top: -5px;\n left: 100%;\n z-index: 1;\n min-width: 170px;\n margin-left: 2px;\n padding: 4px;\n background: var(--bg-1);\n border: 1px solid var(--b2);\n border-radius: 7px;\n box-shadow: var(--shh);\n animation: strct-submenu-in 0.1s ease;\n }\n .strct-submenu__panel--flip {\n left: auto;\n right: 100%;\n margin-left: 0;\n margin-right: 2px;\n }\n @keyframes strct-submenu-in {\n from {\n opacity: 0;\n transform: translateX(-4px);\n }\n }\n `,\n ],\n})\nexport class StrctSubmenu {\n private readonly host: ElementRef<HTMLElement> = inject(ElementRef);\n\n /** Label text. */\n readonly label = input('');\n /** Optional leading icon; when omitted the icon column is still reserved so\n * the label stays aligned with sibling items that do have icons. */\n readonly icon = input('');\n readonly open = signal(false);\n /** Open to the left when the fly-out would overflow the right edge. */\n protected readonly flip = signal(false);\n\n protected setOpen(value: boolean): void {\n if (value) {\n const rect = this.host.nativeElement.getBoundingClientRect();\n this.flip.set(rect.right + 190 > window.innerWidth);\n }\n this.open.set(value);\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n ViewEncapsulation,\n booleanAttribute,\n computed,\n contentChildren,\n effect,\n input,\n output,\n signal,\n} from '@angular/core';\nimport { StrctButton } from '../button/button';\n\n/** A single wizard step. `label` names it in the step header. */\n@Component({\n selector: 'strct-step',\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `@if (active()) {\n <ng-content />\n }`,\n host: { class: 'strct-step', '[hidden]': '!active()' },\n})\nexport class StrctStep {\n /** Label text. */\n readonly label = input.required<string>();\n /** When false, the wizard's Next / Finish is disabled on this step. */\n readonly canAdvance = input(true, { transform: booleanAttribute });\n private readonly _active = signal(false);\n readonly active = this._active.asReadonly();\n\n /** @internal */\n setActive(value: boolean): void {\n this._active.set(value);\n }\n}\n\n/** Multi-step flow with a numbered header and Back / Next / Finish controls. */\n@Component({\n selector: 'strct-wizard',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n imports: [StrctButton],\n template: `\n <div class=\"strct-wiz__steps\">\n @for (step of steps(); track step; let i = $index; let last = $last) {\n <div\n class=\"strct-wiz__step\"\n [class.strct-wiz__step--active]=\"i === current()\"\n [class.strct-wiz__step--done]=\"i < current()\"\n >\n <span class=\"strct-wiz__dot\">{{ i + 1 }}</span>\n <span class=\"strct-wiz__label\">{{ step.label() }}</span>\n </div>\n @if (!last) {\n <span class=\"strct-wiz__sep\"></span>\n }\n }\n </div>\n\n <div class=\"strct-wiz__content\"><ng-content /></div>\n\n <div class=\"strct-wiz__foot\">\n @if (cancelable()) {\n <button strct-button variant=\"flat\" class=\"strct-wiz__cancel\" (click)=\"cancelled.emit()\">\n Cancel\n </button>\n }\n <button strct-button variant=\"flat\" [disabled]=\"current() === 0\" (click)=\"back()\">\n Back\n </button>\n @if (isLast()) {\n <button\n strct-button\n variant=\"primary\"\n [disabled]=\"submitting() || !canAdvance()\"\n (click)=\"finish()\"\n >\n {{ submitting() ? 'Submitting…' : finishLabel() }}\n </button>\n } @else {\n <button strct-button variant=\"primary\" [disabled]=\"!canAdvance()\" (click)=\"next()\">\n Next\n </button>\n }\n </div>\n `,\n host: { class: 'strct-wiz' },\n styles: [\n `\n .strct-wiz {\n display: block;\n }\n .strct-wiz__steps {\n display: flex;\n align-items: center;\n gap: 6px;\n }\n .strct-wiz__step {\n display: flex;\n align-items: center;\n gap: 8px;\n }\n .strct-wiz__dot {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 22px;\n height: 22px;\n border-radius: 50%;\n font-size: 11px;\n font-weight: 600;\n color: var(--t2);\n background: var(--bg-3);\n border: 1px solid var(--b2);\n }\n .strct-wiz__label {\n font-size: 12px;\n color: var(--t2);\n }\n .strct-wiz__step--active .strct-wiz__dot {\n background: var(--acc-m);\n color: var(--acc);\n border-color: var(--acc);\n }\n .strct-wiz__step--active .strct-wiz__label {\n color: var(--t1);\n font-weight: 600;\n }\n .strct-wiz__step--done .strct-wiz__dot {\n background: var(--acc-m);\n color: var(--acc);\n border-color: var(--acc30);\n }\n .strct-wiz__sep {\n flex: 1;\n height: 1px;\n background: var(--b2);\n min-width: 18px;\n }\n .strct-wiz__content {\n margin: 18px 0;\n padding: 16px;\n min-height: 80px;\n background: var(--bg-1);\n border: 1px solid var(--b2);\n border-radius: 8px;\n color: var(--t2);\n font-size: 13px;\n }\n .strct-wiz__foot {\n display: flex;\n justify-content: flex-end;\n gap: 8px;\n }\n .strct-wiz__cancel {\n margin-right: auto;\n }\n `,\n ],\n})\nexport class StrctWizard {\n readonly steps = contentChildren(StrctStep);\n readonly current = signal(0);\n /** Label for the final-step button (default \"Finish\"). */\n readonly finishLabel = input('Finish');\n /** Disable Finish and show a busy label while an async submit is in flight. */\n readonly submitting = input(false, { transform: booleanAttribute });\n /** Show a Cancel button on the left. */\n readonly cancelable = input(false, { transform: booleanAttribute });\n /** Emitted when the user clicks Finish. */\n readonly finished = output<void>();\n /** Emitted when the user clicks Cancel. */\n readonly cancelled = output<void>();\n /** Emits the new step index after a Back / Next move. */\n readonly stepChange = output<number>();\n\n protected readonly isLast = computed(() => this.current() >= this.steps().length - 1);\n /** Whether the current step permits advancing (its `canAdvance`). */\n protected readonly canAdvance = computed(\n () => this.steps()[this.current()]?.canAdvance() ?? true,\n );\n\n constructor() {\n effect(() => {\n const idx = this.current();\n this.steps().forEach((step, i) => step.setActive(i === idx));\n });\n }\n\n next(): void {\n if (!this.isLast() && this.canAdvance()) {\n this.current.update((i) => i + 1);\n this.stepChange.emit(this.current());\n }\n }\n\n back(): void {\n if (this.current() > 0) {\n this.current.update((i) => i - 1);\n this.stepChange.emit(this.current());\n }\n }\n\n finish(): void {\n if (this.canAdvance() && !this.submitting()) this.finished.emit();\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n ViewEncapsulation,\n booleanAttribute,\n input,\n} from '@angular/core';\n\n/**\n * Separator rule. Horizontal by default; pass `vertical` for an inline rule.\n * Projected content becomes a centered label on a horizontal divider.\n * <strct-divider>OR</strct-divider>\n * <strct-divider vertical />\n */\n@Component({\n selector: 'strct-divider',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n template: `<span class=\"strct-divider__label\"><ng-content /></span>`,\n host: {\n class: 'strct-divider',\n role: 'separator',\n '[class.strct-divider--vertical]': 'vertical()',\n '[attr.aria-orientation]': \"vertical() ? 'vertical' : 'horizontal'\",\n },\n styles: [\n `\n .strct-divider {\n display: flex;\n align-items: center;\n gap: 12px;\n width: 100%;\n color: var(--t3);\n font-size: 11px;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n }\n .strct-divider::before,\n .strct-divider::after {\n content: '';\n flex: 1;\n height: 1px;\n background: var(--b2);\n }\n .strct-divider__label:empty {\n display: none;\n }\n .strct-divider:has(.strct-divider__label:empty) {\n gap: 0;\n }\n\n .strct-divider--vertical {\n display: inline-block;\n width: 1px;\n min-height: 1em;\n height: auto;\n align-self: stretch;\n background: var(--b2);\n margin: 0 2px;\n }\n .strct-divider--vertical::before,\n .strct-divider--vertical::after {\n content: none;\n }\n .strct-divider--vertical .strct-divider__label {\n display: none;\n }\n `,\n ],\n})\nexport class StrctDivider {\n /** Render as a vertical rule. */\n readonly vertical = input(false, { transform: booleanAttribute });\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n ViewEncapsulation,\n booleanAttribute,\n input,\n} from '@angular/core';\n\n/** Breadcrumb trail container. Wraps `<strct-breadcrumb-item>` children. */\n@Component({\n selector: 'strct-breadcrumb',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n template: `<ng-content />`,\n host: { class: 'strct-bc', role: 'navigation', 'aria-label': 'Breadcrumb' },\n styles: [\n `\n .strct-bc {\n display: flex;\n align-items: center;\n flex-wrap: wrap;\n gap: 2px;\n font-size: 13px;\n }\n .strct-bc__item:not(:last-child)::after {\n content: '/';\n margin: 0 8px;\n color: var(--t3);\n font-weight: 400;\n }\n `,\n ],\n})\nexport class StrctBreadcrumb {}\n\n/** One crumb. Mark the final one `current`. */\n@Component({\n selector: 'strct-breadcrumb-item',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n template: `<ng-content />`,\n host: {\n class: 'strct-bc__item',\n '[class.strct-bc__item--current]': 'current()',\n '[attr.aria-current]': \"current() ? 'page' : null\",\n },\n styles: [\n `\n .strct-bc__item {\n display: inline-flex;\n align-items: center;\n color: var(--t2);\n }\n .strct-bc__item a {\n color: var(--t2);\n text-decoration: none;\n }\n .strct-bc__item a:hover {\n color: var(--acc);\n text-decoration: none;\n }\n .strct-bc__item--current {\n color: var(--t1);\n font-weight: 600;\n }\n `,\n ],\n})\nexport class StrctBreadcrumbItem {\n /** Mark as the current page. */\n readonly current = input(false, { transform: booleanAttribute });\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n ViewEncapsulation,\n computed,\n input,\n model,\n} from '@angular/core';\nimport { StrctIcon } from '../icon/icon';\n\ntype PageToken = number | 'dots';\n\n/**\n * Page navigator with first/last + a windowed range and ellipsis gaps.\n * <strct-pagination [total]=\"240\" [pageSize]=\"20\" [(page)]=\"page\" />\n */\n@Component({\n selector: 'strct-pagination',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n imports: [StrctIcon],\n template: `\n <button\n type=\"button\"\n class=\"strct-pg__btn strct-pg__nav\"\n [disabled]=\"page() <= 1\"\n aria-label=\"Previous page\"\n (click)=\"go(page() - 1)\"\n >\n <strct-icon name=\"chevronLeft\" [size]=\"13\" [strokeWidth]=\"1.7\" />\n </button>\n\n @for (token of pages(); track $index) {\n @if (token === 'dots') {\n <span class=\"strct-pg__dots\"><strct-icon name=\"ellipsis\" [size]=\"14\" /></span>\n } @else {\n <button\n type=\"button\"\n class=\"strct-pg__btn\"\n [class.strct-pg__btn--active]=\"token === page()\"\n [attr.aria-current]=\"token === page() ? 'page' : null\"\n (click)=\"go(token)\"\n >\n {{ token }}\n </button>\n }\n }\n\n <button\n type=\"button\"\n class=\"strct-pg__btn strct-pg__nav\"\n [disabled]=\"page() >= pageCount()\"\n aria-label=\"Next page\"\n (click)=\"go(page() + 1)\"\n >\n <strct-icon name=\"chevronRight\" [size]=\"13\" [strokeWidth]=\"1.7\" />\n </button>\n `,\n host: { class: 'strct-pg', role: 'navigation', 'aria-label': 'Pagination' },\n styles: [\n `\n .strct-pg {\n display: inline-flex;\n align-items: center;\n gap: 4px;\n font-size: 12px;\n color: var(--t2);\n }\n .strct-pg__btn {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n min-width: 30px;\n height: 30px;\n padding: 0 7px;\n border-radius: 6px;\n font-family: var(--font);\n font-size: 12px;\n cursor: pointer;\n color: var(--t2);\n background: transparent;\n border: 1px solid transparent;\n transition:\n background 0.14s ease,\n border-color 0.14s ease,\n color 0.14s ease;\n }\n .strct-pg__btn:hover {\n background: var(--bg-3);\n }\n .strct-pg__btn--active {\n color: var(--acc);\n border-color: var(--acc30);\n background: var(--acc-m);\n }\n .strct-pg__btn:disabled {\n color: var(--t4);\n cursor: not-allowed;\n background: transparent;\n }\n .strct-pg__nav {\n color: var(--t2);\n }\n .strct-pg__dots {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n min-width: 24px;\n height: 30px;\n color: var(--t3);\n }\n `,\n ],\n})\nexport class StrctPagination {\n /** Total number of items. */\n readonly total = input.required<number>();\n /** Rows per page (0 disables paging). */\n readonly pageSize = input(10);\n /** Current page (two-way). */\n readonly page = model(1);\n\n readonly pageCount = computed(() =>\n Math.max(1, Math.ceil(this.total() / Math.max(1, this.pageSize()))),\n );\n\n protected readonly pages = computed<PageToken[]>(() => {\n const count = this.pageCount();\n const current = this.page();\n if (count <= 7) {\n return Array.from({ length: count }, (_, i) => i + 1);\n }\n const tokens: PageToken[] = [1];\n const start = Math.max(2, current - 1);\n const end = Math.min(count - 1, current + 1);\n if (start > 2) tokens.push('dots');\n for (let p = start; p <= end; p++) tokens.push(p);\n if (end < count - 1) tokens.push('dots');\n tokens.push(count);\n return tokens;\n });\n\n go(target: number): void {\n const clamped = Math.max(1, Math.min(this.pageCount(), target));\n if (clamped !== this.page()) this.page.set(clamped);\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n ViewEncapsulation,\n afterNextRender,\n booleanAttribute,\n computed,\n effect,\n inject,\n input,\n signal,\n} from '@angular/core';\n\nlet fieldCounter = 0;\n\n/**\n * Form-field wrapper: a label (with optional required marker), the projected\n * control, and a hint or error message. It auto-links the control via\n * `aria-describedby` and sets `aria-invalid` when an error is present.\n *\n * <strct-field label=\"Email\" required hint=\"We never share it.\" [error]=\"emailError()\">\n * <input strctInput type=\"email\" [(ngModel)]=\"email\" />\n * </strct-field>\n */\n@Component({\n selector: 'strct-field',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n template: `\n @if (label()) {\n <label class=\"strct-field__label\" [attr.for]=\"controlId() || null\">\n {{ label() }}\n @if (required()) {\n <span class=\"strct-field__req\" aria-hidden=\"true\">*</span>\n }\n </label>\n }\n <div class=\"strct-field__control\"><ng-content /></div>\n @if (errorText()) {\n <div class=\"strct-field__msg strct-field__msg--error\" [id]=\"errorId\" role=\"alert\">\n {{ errorText() }}\n </div>\n } @else if (hint()) {\n <div class=\"strct-field__msg strct-field__msg--hint\" [id]=\"hintId\">{{ hint() }}</div>\n }\n `,\n host: {\n class: 'strct-field',\n '[class.strct-field--invalid]': '!!errorText()',\n },\n styles: [\n `\n .strct-field {\n display: flex;\n flex-direction: column;\n gap: 6px;\n }\n .strct-field__label {\n font-size: 12px;\n font-weight: 600;\n color: var(--t2);\n }\n .strct-field__req {\n color: var(--critical);\n margin-left: 2px;\n }\n .strct-field__control {\n display: flex;\n flex-direction: column;\n }\n .strct-field__msg {\n font-size: 12px;\n line-height: 1.4;\n }\n .strct-field__msg--hint {\n color: var(--t3);\n }\n .strct-field__msg--error {\n color: var(--critical);\n }\n `,\n ],\n})\nexport class StrctField {\n /** Label text. */\n readonly label = input('');\n /** Show a required marker on the label. */\n readonly required = input(false, { transform: booleanAttribute });\n /** Helper text shown below the field. */\n readonly hint = input('');\n /** Error message (string or first-of array); falsy clears the error state. */\n readonly error = input<string | string[] | null | undefined>(null);\n\n private readonly host: ElementRef<HTMLElement> = inject(ElementRef);\n private readonly n = ++fieldCounter;\n protected readonly hintId = `strct-field-hint-${this.n}`;\n protected readonly errorId = `strct-field-err-${this.n}`;\n protected readonly controlId = signal('');\n\n protected readonly errorText = computed(() => {\n const e = this.error();\n return (Array.isArray(e) ? e[0] : e) ?? '';\n });\n\n constructor() {\n afterNextRender(() => this.link());\n // Keep aria in sync as the error / hint change.\n effect(() => {\n this.errorText();\n this.hint();\n this.applyAria();\n });\n }\n\n private control(): HTMLElement | null {\n return this.host.nativeElement.querySelector<HTMLElement>(\n 'input, select, textarea, [strctInput], [strctField]',\n );\n }\n\n private link(): void {\n const el = this.control();\n if (!el) return;\n if (!el.id) el.id = `strct-field-ctrl-${this.n}`;\n this.controlId.set(el.id);\n this.applyAria();\n }\n\n private applyAria(): void {\n const el = this.control();\n if (!el) return;\n const describedBy = this.errorText() ? this.errorId : this.hint() ? this.hintId : '';\n if (describedBy) el.setAttribute('aria-describedby', describedBy);\n else el.removeAttribute('aria-describedby');\n if (this.errorText()) el.setAttribute('aria-invalid', 'true');\n else el.removeAttribute('aria-invalid');\n }\n}\n","import { Directive } from '@angular/core';\n\n/**\n * Applies the shared `.strct-control` look to a native input / textarea / select.\n * <input strctInput placeholder=\"Name\" />\n * <select strctInput>…</select>\n * The visual definition lives in `strct/styles/_forms.scss` (shipped via the\n * theme entry point), so this directive only attaches the class.\n */\n@Directive({\n selector: 'input[strctInput], textarea[strctInput], select[strctInput]',\n host: { class: 'strct-control' },\n})\nexport class StrctInput {}\n","import {\n ChangeDetectionStrategy,\n Component,\n booleanAttribute,\n effect,\n forwardRef,\n input,\n model,\n} from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { StrctIcon } from '../icon/icon';\n\n/** Checkbox with custom box. Works with `[(ngModel)]` / reactive forms. */\n@Component({\n selector: 'strct-checkbox',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [StrctIcon],\n providers: [\n { provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => StrctCheckbox), multi: true },\n ],\n template: `\n <label class=\"strct-cb\" [class.strct-cb--disabled]=\"isDisabled()\">\n <input\n type=\"checkbox\"\n class=\"strct-cb__native\"\n [checked]=\"checked()\"\n [disabled]=\"isDisabled()\"\n [indeterminate]=\"indeterminate()\"\n [attr.aria-label]=\"ariaLabel()\"\n (change)=\"onToggle($event)\"\n (blur)=\"onTouched()\"\n />\n <span class=\"strct-cb__box\">\n <strct-icon name=\"check\" [size]=\"11\" [strokeWidth]=\"2\" />\n </span>\n <span class=\"strct-cb__label\"><ng-content /></span>\n </label>\n `,\n styles: [\n `\n .strct-cb {\n display: inline-flex;\n align-items: center;\n gap: 8px;\n cursor: pointer;\n font-size: 13px;\n color: var(--t1);\n user-select: none;\n }\n .strct-cb--disabled {\n opacity: 0.5;\n cursor: not-allowed;\n }\n .strct-cb__native {\n position: absolute;\n opacity: 0;\n width: 0;\n height: 0;\n }\n .strct-cb__box {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 17px;\n height: 17px;\n border-radius: 4px;\n flex-shrink: 0;\n background: var(--bg-2);\n border: 1px solid var(--b3);\n color: transparent;\n transition:\n background 0.14s ease,\n border-color 0.14s ease;\n }\n .strct-cb__native:checked + .strct-cb__box {\n background: var(--acc);\n border-color: transparent;\n color: #fff;\n }\n .strct-cb__native:focus-visible + .strct-cb__box {\n box-shadow: 0 0 0 3px var(--acc18);\n }\n `,\n ],\n})\nexport class StrctCheckbox implements ControlValueAccessor {\n readonly checked = model(false);\n readonly isDisabled = model(false);\n /** Static disable; forms' setDisabledState also drives the disabled state. */\n readonly disabled = input(false, { transform: booleanAttribute });\n /** Tri-state visual indicator for a parent / intermediate state. */\n readonly indeterminate = input(false, { transform: booleanAttribute });\n /** Accessible label for the checkbox (used when no text label is present). */\n readonly ariaLabel = input<string | null>(null);\n\n private onChange: (value: boolean) => void = () => {};\n protected onTouched: () => void = () => {};\n\n constructor() {\n effect(() => this.isDisabled.set(this.disabled()));\n }\n\n onToggle(event: Event): void {\n const value = (event.target as HTMLInputElement).checked;\n this.checked.set(value);\n this.onChange(value);\n }\n\n writeValue(value: boolean): void {\n this.checked.set(!!value);\n }\n registerOnChange(fn: (value: boolean) => void): void {\n this.onChange = fn;\n }\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n setDisabledState(isDisabled: boolean): void {\n this.isDisabled.set(isDisabled);\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n booleanAttribute,\n effect,\n forwardRef,\n input,\n signal,\n} from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\n\n/** On/off switch. Works with `[(ngModel)]` / reactive forms. */\n@Component({\n selector: 'strct-toggle',\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [\n { provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => StrctToggle), multi: true },\n ],\n template: `\n <label class=\"strct-tg\" [class.strct-tg--disabled]=\"isDisabled()\">\n <input\n type=\"checkbox\"\n class=\"strct-tg__native\"\n role=\"switch\"\n [checked]=\"checked()\"\n [disabled]=\"isDisabled()\"\n (change)=\"onToggle($event)\"\n (blur)=\"onTouched()\"\n />\n <span class=\"strct-tg__track\"><span class=\"strct-tg__thumb\"></span></span>\n <span class=\"strct-tg__label\"><ng-content /></span>\n </label>\n `,\n styles: [\n `\n .strct-tg {\n display: inline-flex; align-items: center; gap: 9px; cursor: pointer;\n font-size: 13px; color: var(--t1); user-select: none;\n }\n .strct-tg--disabled { opacity: .5; cursor: not-allowed; }\n .strct-tg__native { position: absolute; opacity: 0; width: 0; height: 0; }\n .strct-tg__track {\n position: relative; width: 34px; height: 19px; border-radius: 11px; flex-shrink: 0;\n background: var(--bg-3); border: 1px solid var(--b3);\n transition: background .16s ease, border-color .16s ease;\n }\n .strct-tg__thumb {\n position: absolute; top: 2px; left: 2px; width: 13px; height: 13px; border-radius: 50%;\n background: var(--t2); transition: transform .16s ease, background .16s ease;\n }\n .strct-tg__native:checked + .strct-tg__track {\n background: var(--acc); border-color: transparent;\n }\n .strct-tg__native:checked + .strct-tg__track .strct-tg__thumb {\n transform: translateX(15px); background: #fff;\n }\n .strct-tg__native:focus-visible + .strct-tg__track { box-shadow: 0 0 0 3px var(--acc18); }\n `,\n ],\n})\nexport class StrctToggle implements ControlValueAccessor {\n readonly checked = signal(false);\n readonly isDisabled = signal(false);\n /** Static disable; forms' setDisabledState also drives the disabled state. */\n readonly disabled = input(false, { transform: booleanAttribute });\n\n private onChange: (value: boolean) => void = () => {};\n protected onTouched: () => void = () => {};\n\n constructor() {\n effect(() => this.isDisabled.set(this.disabled()));\n }\n\n onToggle(event: Event): void {\n const value = (event.target as HTMLInputElement).checked;\n this.checked.set(value);\n this.onChange(value);\n }\n\n writeValue(value: boolean): void {\n this.checked.set(!!value);\n }\n registerOnChange(fn: (value: boolean) => void): void {\n this.onChange = fn;\n }\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n setDisabledState(isDisabled: boolean): void {\n this.isDisabled.set(isDisabled);\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n ViewEncapsulation,\n booleanAttribute,\n forwardRef,\n inject,\n input,\n signal,\n} from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\n\nlet groupCounter = 0;\n\n/**\n * Radio group (the form control). Wrap `<strct-radio>` items:\n * <strct-radio-group [(ngModel)]=\"size\">\n * <strct-radio [value]=\"'sm'\">Small</strct-radio>\n * <strct-radio [value]=\"'lg'\">Large</strct-radio>\n * </strct-radio-group>\n */\n@Component({\n selector: 'strct-radio-group',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n providers: [\n { provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => StrctRadioGroup), multi: true },\n ],\n template: `<ng-content />`,\n host: { class: 'strct-radio-group', role: 'radiogroup' },\n styles: [\n `\n .strct-radio-group {\n display: flex;\n flex-direction: column;\n gap: 9px;\n }\n `,\n ],\n})\nexport class StrctRadioGroup implements ControlValueAccessor {\n readonly name = `strct-radio-${++groupCounter}`;\n readonly value = signal<unknown>(null);\n readonly isDisabled = signal(false);\n\n private onChange: (value: unknown) => void = () => {};\n private onTouched: () => void = () => {};\n\n select(value: unknown): void {\n this.value.set(value);\n this.onChange(value);\n this.onTouched();\n }\n\n writeValue(value: unknown): void {\n this.value.set(value);\n }\n registerOnChange(fn: (value: unknown) => void): void {\n this.onChange = fn;\n }\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n setDisabledState(isDisabled: boolean): void {\n this.isDisabled.set(isDisabled);\n }\n}\n\n/** One option inside a `<strct-radio-group>`. */\n@Component({\n selector: 'strct-radio',\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <label class=\"strct-rb\" [class.strct-rb--disabled]=\"disabled() || group.isDisabled()\">\n <input\n type=\"radio\"\n class=\"strct-rb__native\"\n [name]=\"group.name\"\n [checked]=\"group.value() === value()\"\n [disabled]=\"disabled() || group.isDisabled()\"\n (change)=\"group.select(value())\"\n />\n <span class=\"strct-rb__dot\"></span>\n <span class=\"strct-rb__label\"><ng-content /></span>\n </label>\n `,\n styles: [\n `\n .strct-rb {\n display: inline-flex;\n align-items: center;\n gap: 8px;\n cursor: pointer;\n font-size: 13px;\n color: var(--t1);\n user-select: none;\n }\n .strct-rb--disabled {\n opacity: 0.5;\n cursor: not-allowed;\n }\n .strct-rb__native {\n position: absolute;\n opacity: 0;\n width: 0;\n height: 0;\n }\n .strct-rb__dot {\n position: relative;\n width: 17px;\n height: 17px;\n border-radius: 50%;\n flex-shrink: 0;\n background: var(--bg-2);\n border: 1px solid var(--b3);\n transition: border-color 0.14s ease;\n }\n .strct-rb__dot::after {\n content: '';\n position: absolute;\n inset: 0;\n margin: auto;\n width: 7px;\n height: 7px;\n border-radius: 50%;\n background: var(--acc);\n transform: scale(0);\n transition: transform 0.14s ease;\n }\n .strct-rb__native:checked + .strct-rb__dot {\n border-color: var(--acc);\n }\n .strct-rb__native:checked + .strct-rb__dot::after {\n transform: scale(1);\n }\n .strct-rb__native:focus-visible + .strct-rb__dot {\n box-shadow: 0 0 0 3px var(--acc18);\n }\n `,\n ],\n})\nexport class StrctRadio {\n /** Current value. */\n readonly value = input.required<unknown>();\n /** Static disable flag. */\n readonly disabled = input(false, { transform: booleanAttribute });\n protected readonly group = inject(StrctRadioGroup);\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n ViewEncapsulation,\n booleanAttribute,\n computed,\n effect,\n forwardRef,\n input,\n signal,\n} from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\n\n/**\n * Slider built on a native range input — fully accessible, CVA-compatible.\n * <strct-range [min]=\"0\" [max]=\"100\" [(ngModel)]=\"volume\" showValue />\n */\n@Component({\n selector: 'strct-range',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n providers: [\n { provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => StrctRange), multi: true },\n ],\n template: `\n <input\n type=\"range\"\n class=\"strct-range__input\"\n [min]=\"min()\"\n [max]=\"max()\"\n [step]=\"step()\"\n [value]=\"value()\"\n [disabled]=\"isDisabled()\"\n [style.--strct-range-fill.%]=\"fillPercent()\"\n (input)=\"onInput($event)\"\n (blur)=\"onTouched()\"\n />\n @if (showValue()) {\n <span class=\"strct-range__value\">{{ value() }}</span>\n }\n `,\n styles: [\n `\n .strct-range {\n display: inline-flex;\n align-items: center;\n gap: 10px;\n width: 100%;\n max-width: 280px;\n }\n .strct-range__input {\n flex: 1;\n appearance: none;\n height: 5px;\n border-radius: 3px;\n cursor: pointer;\n background: linear-gradient(\n to right,\n var(--acc) 0 var(--strct-range-fill, 0%),\n var(--bg-3) var(--strct-range-fill, 0%) 100%\n );\n }\n .strct-range__input:disabled {\n opacity: 0.5;\n cursor: not-allowed;\n }\n .strct-range__input::-webkit-slider-thumb {\n appearance: none;\n width: 15px;\n height: 15px;\n border-radius: 50%;\n background: var(--acc);\n border: 2px solid var(--bg-1);\n box-shadow: var(--sh);\n }\n .strct-range__input::-moz-range-thumb {\n width: 15px;\n height: 15px;\n border-radius: 50%;\n background: var(--acc);\n border: 2px solid var(--bg-1);\n box-shadow: var(--sh);\n }\n .strct-range__input:focus-visible {\n outline: none;\n }\n .strct-range__input:focus-visible::-webkit-slider-thumb {\n box-shadow: 0 0 0 3px var(--acc18);\n }\n .strct-range__value {\n min-width: 30px;\n text-align: right;\n font-size: 12px;\n font-family: var(--mono);\n color: var(--t2);\n }\n `,\n ],\n})\nexport class StrctRange implements ControlValueAccessor {\n /** Minimum allowed value. */\n readonly min = input(0);\n /** Maximum allowed value or top of the value axis. */\n readonly max = input(100);\n /** Step increment. */\n readonly step = input(1);\n /** Display the current numeric value. */\n readonly showValue = input(false, { transform: booleanAttribute });\n /** Static disable flag. */\n readonly disabled = input(false, { transform: booleanAttribute });\n\n readonly value = signal(0);\n readonly isDisabled = signal(false);\n\n protected readonly fillPercent = computed(() => {\n const span = this.max() - this.min();\n return span <= 0 ? 0 : ((this.value() - this.min()) / span) * 100;\n });\n\n private onChange: (value: number) => void = () => {};\n protected onTouched: () => void = () => {};\n\n constructor() {\n effect(() => this.isDisabled.set(this.disabled()));\n }\n\n onInput(event: Event): void {\n const value = Number((event.target as HTMLInputElement).value);\n this.value.set(value);\n this.onChange(value);\n }\n\n writeValue(value: number): void {\n this.value.set(Number(value) || 0);\n }\n registerOnChange(fn: (value: number) => void): void {\n this.onChange = fn;\n }\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n setDisabledState(isDisabled: boolean): void {\n this.isDisabled.set(isDisabled);\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n ViewEncapsulation,\n booleanAttribute,\n computed,\n forwardRef,\n input,\n signal,\n} from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { StrctIcon } from '../icon/icon';\n\nconst LEVELS = [\n { label: 'Weak', color: 'var(--critical)' },\n { label: 'Weak', color: 'var(--critical)' },\n { label: 'Fair', color: 'var(--warning)' },\n { label: 'Good', color: 'var(--acc)' },\n { label: 'Strong', color: 'var(--success)' },\n];\n\n/**\n * Password input with a reveal toggle and an optional strength meter. CVA-compatible.\n * <strct-password [(ngModel)]=\"pw\" meter />\n */\n@Component({\n selector: 'strct-password',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n imports: [StrctIcon],\n providers: [\n { provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => StrctPassword), multi: true },\n ],\n template: `\n <div class=\"strct-pw__field\">\n <input\n class=\"strct-control strct-pw__input\"\n [type]=\"revealed() ? 'text' : 'password'\"\n [placeholder]=\"placeholder()\"\n [value]=\"value()\"\n [disabled]=\"isDisabled()\"\n autocomplete=\"off\"\n (input)=\"onInput($event)\"\n (blur)=\"onTouched()\"\n />\n <button\n type=\"button\"\n class=\"strct-pw__toggle\"\n [attr.aria-label]=\"revealed() ? 'Hide password' : 'Show password'\"\n [disabled]=\"isDisabled()\"\n (click)=\"revealed.set(!revealed())\"\n >\n <strct-icon [name]=\"revealed() ? 'eyeOff' : 'eye'\" [size]=\"15\" [strokeWidth]=\"1.3\" />\n </button>\n </div>\n @if (meter() && value()) {\n <div class=\"strct-pw__meter\">\n <div class=\"strct-pw__bars\">\n @for (i of [0, 1, 2, 3]; track i) {\n <span\n class=\"strct-pw__bar\"\n [style.background]=\"i < score() ? level().color : 'var(--bg-3)'\"\n ></span>\n }\n </div>\n <span class=\"strct-pw__label\" [style.color]=\"level().color\">{{ level().label }}</span>\n </div>\n }\n `,\n host: { class: 'strct-pw' },\n styles: [\n `\n .strct-pw {\n display: block;\n width: 100%;\n max-width: 280px;\n }\n .strct-pw__field {\n position: relative;\n }\n .strct-pw__input {\n padding-right: 38px;\n }\n .strct-pw__toggle {\n position: absolute;\n right: 4px;\n top: 50%;\n transform: translateY(-50%);\n display: inline-flex;\n padding: 5px;\n border: 0;\n border-radius: 5px;\n background: transparent;\n color: var(--t2);\n cursor: pointer;\n }\n .strct-pw__toggle:hover {\n color: var(--acc);\n background: var(--bg-3);\n }\n .strct-pw__meter {\n display: flex;\n align-items: center;\n gap: 9px;\n margin-top: 7px;\n }\n .strct-pw__bars {\n display: flex;\n gap: 3px;\n flex: 1;\n }\n .strct-pw__bar {\n flex: 1;\n height: 3px;\n border-radius: 2px;\n transition: background 0.2s ease;\n }\n .strct-pw__label {\n font-size: 11px;\n font-weight: 600;\n min-width: 42px;\n text-align: right;\n }\n `,\n ],\n})\nexport class StrctPassword implements ControlValueAccessor {\n /** Placeholder text when empty. */\n readonly placeholder = input('');\n /** Show a strength meter. */\n readonly meter = input(false, { transform: booleanAttribute });\n /** Static disable flag. */\n readonly disabled = input(false, { transform: booleanAttribute });\n\n readonly value = signal('');\n readonly revealed = signal(false);\n readonly isDisabled = signal(false);\n\n protected readonly score = computed(() => {\n const v = this.value();\n if (!v) return 0;\n let s = 0;\n if (v.length >= 8) s++;\n if (/[a-z]/.test(v) && /[A-Z]/.test(v)) s++;\n if (/\\d/.test(v)) s++;\n if (/[^A-Za-z0-9]/.test(v)) s++;\n return s;\n });\n protected readonly level = computed(() => LEVELS[this.score()]);\n\n private onChange: (value: string) => void = () => {};\n protected onTouched: () => void = () => {};\n\n onInput(event: Event): void {\n const v = (event.target as HTMLInputElement).value;\n this.value.set(v);\n this.onChange(v);\n }\n\n writeValue(value: string): void {\n this.value.set(value || '');\n }\n registerOnChange(fn: (value: string) => void): void {\n this.onChange = fn;\n }\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n setDisabledState(isDisabled: boolean): void {\n this.isDisabled.set(isDisabled);\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n ViewEncapsulation,\n booleanAttribute,\n forwardRef,\n input,\n signal,\n} from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { StrctIcon } from '../icon/icon';\n\n/**\n * Drag-and-drop file picker. CVA value is a `File[]`.\n * <strct-file [(ngModel)]=\"files\" multiple accept=\"image/*\" />\n */\n@Component({\n selector: 'strct-file',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n imports: [StrctIcon],\n providers: [\n { provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => StrctFile), multi: true },\n ],\n template: `\n <div\n class=\"strct-file__zone\"\n [class.strct-file__zone--drag]=\"dragging()\"\n [class.strct-file__zone--disabled]=\"isDisabled()\"\n role=\"button\"\n tabindex=\"0\"\n (click)=\"!isDisabled() && input.click()\"\n (keydown.enter)=\"!isDisabled() && input.click()\"\n (dragover)=\"onDragOver($event)\"\n (dragleave)=\"dragging.set(false)\"\n (drop)=\"onDrop($event)\"\n >\n <strct-icon name=\"upload\" [size]=\"20\" />\n <div class=\"strct-file__prompt\">\n <strong>Drag files here</strong> or <span class=\"strct-file__browse\">browse</span>\n </div>\n <input\n #input\n type=\"file\"\n class=\"strct-file__native\"\n [multiple]=\"multiple()\"\n [accept]=\"accept()\"\n [disabled]=\"isDisabled()\"\n (change)=\"onSelect($event)\"\n (blur)=\"onTouched()\"\n />\n </div>\n\n @if (files().length) {\n <ul class=\"strct-file__list\">\n @for (file of files(); track file.name + file.size) {\n <li class=\"strct-file__file\">\n <span class=\"strct-file__name\">{{ file.name }}</span>\n <span class=\"strct-file__size\">{{ humanSize(file.size) }}</span>\n <button\n type=\"button\"\n class=\"strct-file__remove\"\n aria-label=\"Remove\"\n (click)=\"remove(file)\"\n >\n <strct-icon name=\"close\" [size]=\"12\" />\n </button>\n </li>\n }\n </ul>\n }\n `,\n host: { class: 'strct-file' },\n styles: [\n `\n .strct-file {\n display: block;\n width: 100%;\n max-width: 360px;\n }\n .strct-file__zone {\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: 8px;\n padding: 22px 16px;\n text-align: center;\n cursor: pointer;\n color: var(--t2);\n background: var(--bg-2);\n border: 1px dashed var(--b3);\n border-radius: 8px;\n transition:\n border-color 0.14s ease,\n background 0.14s ease,\n color 0.14s ease;\n }\n .strct-file__zone:hover {\n border-color: var(--acc30);\n color: var(--t1);\n }\n .strct-file__zone strct-icon {\n color: var(--t3);\n }\n .strct-file__zone--drag {\n border-color: var(--acc);\n background: var(--acc-m);\n color: var(--t1);\n }\n .strct-file__zone--drag strct-icon {\n color: var(--acc);\n }\n .strct-file__zone--disabled {\n opacity: 0.5;\n cursor: not-allowed;\n }\n .strct-file__prompt {\n font-size: 13px;\n }\n .strct-file__browse {\n color: var(--acc);\n }\n .strct-file__native {\n display: none;\n }\n .strct-file__list {\n list-style: none;\n margin: 10px 0 0;\n padding: 0;\n display: flex;\n flex-direction: column;\n gap: 6px;\n }\n .strct-file__file {\n display: flex;\n align-items: center;\n gap: 10px;\n padding: 7px 10px;\n font-size: 13px;\n background: var(--bg-1);\n border: 1px solid var(--b2);\n border-radius: 6px;\n }\n .strct-file__name {\n flex: 1;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n color: var(--t1);\n }\n .strct-file__size {\n font-size: 11px;\n color: var(--t3);\n font-family: var(--mono);\n }\n .strct-file__remove {\n display: inline-flex;\n padding: 3px;\n border: 0;\n border-radius: 4px;\n background: transparent;\n color: var(--t3);\n cursor: pointer;\n }\n .strct-file__remove:hover {\n color: var(--critical);\n background: var(--critical-bg);\n }\n `,\n ],\n})\nexport class StrctFile implements ControlValueAccessor {\n /** Multiple. */\n readonly multiple = input(false, { transform: booleanAttribute });\n /** Accept. */\n readonly accept = input('');\n /** Static disable flag. */\n readonly disabled = input(false, { transform: booleanAttribute });\n\n readonly files = signal<File[]>([]);\n readonly dragging = signal(false);\n readonly isDisabled = signal(false);\n\n private onChange: (value: File[]) => void = () => {};\n protected onTouched: () => void = () => {};\n\n onSelect(event: Event): void {\n const list = (event.target as HTMLInputElement).files;\n if (list) this.setFiles(Array.from(list));\n }\n\n onDragOver(event: DragEvent): void {\n if (this.isDisabled()) return;\n event.preventDefault();\n this.dragging.set(true);\n }\n\n onDrop(event: DragEvent): void {\n if (this.isDisabled()) return;\n event.preventDefault();\n this.dragging.set(false);\n const dropped = event.dataTransfer?.files;\n if (dropped?.length) this.setFiles(Array.from(dropped));\n }\n\n remove(file: File): void {\n this.setFiles(this.files().filter((f) => f !== file));\n }\n\n protected humanSize(bytes: number): string {\n if (bytes < 1024) return `${bytes} B`;\n if (bytes < 1024 * 1024) return `${(bytes / 1024).toFixed(1)} KB`;\n return `${(bytes / 1024 / 1024).toFixed(1)} MB`;\n }\n\n private setFiles(incoming: File[]): void {\n const next = this.multiple() ? incoming : incoming.slice(0, 1);\n this.files.set(next);\n this.onChange(next);\n this.onTouched();\n }\n\n writeValue(value: File[]): void {\n this.files.set(Array.isArray(value) ? value : []);\n }\n registerOnChange(fn: (value: File[]) => void): void {\n this.onChange = fn;\n }\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n setDisabledState(isDisabled: boolean): void {\n this.isDisabled.set(isDisabled);\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n ViewEncapsulation,\n booleanAttribute,\n forwardRef,\n input,\n signal,\n} from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\n\n/** Star rating input. CVA value is the selected count (0–max). */\n@Component({\n selector: 'strct-rating',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n providers: [\n { provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => StrctRating), multi: true },\n ],\n template: `\n <div\n class=\"strct-rating\"\n role=\"slider\"\n [attr.aria-valuemin]=\"0\"\n [attr.aria-valuemax]=\"max()\"\n [attr.aria-valuenow]=\"value()\"\n >\n @for (star of stars(); track star) {\n <button\n type=\"button\"\n class=\"strct-rating__star\"\n [class.strct-rating__star--on]=\"star <= (hover() || value())\"\n [disabled]=\"readonly() || isDisabled()\"\n [attr.aria-label]=\"star + ' of ' + max()\"\n (mouseenter)=\"hover.set(star)\"\n (mouseleave)=\"hover.set(0)\"\n (click)=\"pick(star)\"\n >\n <svg viewBox=\"0 0 16 16\" [style.width.px]=\"size()\" [style.height.px]=\"size()\">\n <path\n d=\"M8 1.5l1.9 4 4.4.5-3.3 3 .9 4.3L8 11.2 4.1 13.3l.9-4.3-3.3-3 4.4-.5z\"\n [attr.fill]=\"star <= (hover() || value()) ? 'currentColor' : 'none'\"\n stroke=\"currentColor\"\n stroke-width=\"1.1\"\n stroke-linejoin=\"round\"\n />\n </svg>\n </button>\n }\n </div>\n `,\n styles: [\n `\n .strct-rating {\n display: inline-flex;\n gap: 3px;\n }\n .strct-rating__star {\n display: inline-flex;\n padding: 1px;\n border: 0;\n background: transparent;\n cursor: pointer;\n color: var(--t4);\n transition:\n color 0.12s ease,\n transform 0.1s ease;\n }\n .strct-rating__star:hover:not(:disabled) {\n transform: scale(1.12);\n }\n .strct-rating__star--on {\n color: var(--warning);\n }\n .strct-rating__star:disabled {\n cursor: default;\n }\n `,\n ],\n})\nexport class StrctRating implements ControlValueAccessor {\n /** Maximum allowed value or top of the value axis. */\n readonly max = input(5);\n /** Size variant. */\n readonly size = input(18);\n /** Prevent user interaction. */\n readonly readonly = input(false, { transform: booleanAttribute });\n\n readonly value = signal(0);\n readonly hover = signal(0);\n readonly isDisabled = signal(false);\n\n protected stars(): number[] {\n return Array.from({ length: this.max() }, (_, i) => i + 1);\n }\n\n private onChange: (value: number) => void = () => {};\n private onTouched: () => void = () => {};\n\n pick(star: number): void {\n if (this.readonly() || this.isDisabled()) return;\n const next = this.value() === star ? 0 : star; // click the current star to clear\n this.value.set(next);\n this.onChange(next);\n this.onTouched();\n }\n\n writeValue(value: number): void {\n this.value.set(Number(value) || 0);\n }\n registerOnChange(fn: (value: number) => void): void {\n this.onChange = fn;\n }\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n setDisabledState(isDisabled: boolean): void {\n this.isDisabled.set(isDisabled);\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n ViewEncapsulation,\n forwardRef,\n input,\n signal,\n} from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { StrctTag } from '../tag/tag';\n\n/**\n * Tag input — type a word and press Enter to add a chip; Backspace on an empty\n * field removes the last. CVA value is `string[]`.\n * <strct-chips [(ngModel)]=\"labels\" placeholder=\"Add a tag…\" />\n */\n@Component({\n selector: 'strct-chips',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n imports: [StrctTag],\n providers: [\n { provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => StrctChips), multi: true },\n ],\n template: `\n <div\n class=\"strct-chips\"\n role=\"button\"\n tabindex=\"0\"\n (click)=\"input.focus()\"\n (keydown.enter)=\"input.focus()\"\n (keydown.space)=\"input.focus()\"\n >\n @for (chip of value(); track chip) {\n <strct-tag status=\"accent\" removable (removed)=\"remove(chip)\">{{ chip }}</strct-tag>\n }\n <input\n #input\n type=\"text\"\n class=\"strct-chips__input\"\n [value]=\"draft()\"\n [placeholder]=\"value().length ? '' : placeholder()\"\n [disabled]=\"isDisabled()\"\n (input)=\"draft.set($any($event.target).value)\"\n (keydown)=\"onKeydown($event)\"\n (blur)=\"commitDraft(); onTouched()\"\n />\n </div>\n `,\n styles: [\n `\n .strct-chips {\n display: flex;\n flex-wrap: wrap;\n align-items: center;\n gap: 6px;\n width: 100%;\n max-width: 360px;\n min-height: 38px;\n padding: 5px 8px;\n background: var(--bg-2);\n border: 1px solid var(--b2);\n border-radius: 6px;\n cursor: text;\n transition:\n border-color 0.14s ease,\n box-shadow 0.14s ease;\n }\n .strct-chips:focus-within {\n border-color: var(--acc50);\n box-shadow: 0 0 0 3px var(--acc18);\n background: var(--bg-1);\n }\n .strct-chips__input {\n flex: 1;\n min-width: 80px;\n border: 0;\n outline: none;\n background: transparent;\n font-family: var(--font);\n font-size: 13px;\n color: var(--t1);\n padding: 3px 2px;\n }\n .strct-chips__input::placeholder {\n color: var(--t3);\n }\n `,\n ],\n})\nexport class StrctChips implements ControlValueAccessor {\n /** Placeholder text when empty. */\n readonly placeholder = input('');\n /** Allow duplicate tags. */\n readonly allowDuplicates = input(false);\n\n readonly value = signal<string[]>([]);\n readonly draft = signal('');\n readonly isDisabled = signal(false);\n\n private onChange: (value: string[]) => void = () => {};\n protected onTouched: () => void = () => {};\n\n onKeydown(event: KeyboardEvent): void {\n if (event.key === 'Enter' || event.key === ',') {\n event.preventDefault();\n this.commitDraft();\n } else if (event.key === 'Backspace' && !this.draft() && this.value().length) {\n this.value.update((v) => v.slice(0, -1));\n this.emit();\n }\n }\n\n protected commitDraft(): void {\n const tag = this.draft().trim();\n if (!tag) return;\n if (this.allowDuplicates() || !this.value().includes(tag)) {\n this.value.update((v) => [...v, tag]);\n this.emit();\n }\n this.draft.set('');\n }\n\n remove(chip: string): void {\n this.value.update((v) => v.filter((c) => c !== chip));\n this.emit();\n }\n\n private emit(): void {\n this.onChange(this.value());\n }\n\n writeValue(value: string[]): void {\n this.value.set(Array.isArray(value) ? [...value] : []);\n }\n registerOnChange(fn: (value: string[]) => void): void {\n this.onChange = fn;\n }\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n setDisabledState(isDisabled: boolean): void {\n this.isDisabled.set(isDisabled);\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n ViewEncapsulation,\n ElementRef,\n computed,\n forwardRef,\n inject,\n input,\n signal,\n} from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\n\n/**\n * One-time-password input — a row of single-character boxes with auto-advance,\n * backspace and paste. CVA value is the concatenated string.\n * <strct-input-otp [length]=\"6\" [(ngModel)]=\"code\" />\n */\n@Component({\n selector: 'strct-input-otp',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n providers: [\n { provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => StrctInputOtp), multi: true },\n ],\n template: `\n <div class=\"strct-otp\">\n @for (i of indices(); track i) {\n <input\n class=\"strct-otp__box\"\n [type]=\"masked() ? 'password' : 'text'\"\n inputmode=\"numeric\"\n autocomplete=\"one-time-code\"\n maxlength=\"1\"\n [value]=\"slots()[i] || ''\"\n [disabled]=\"isDisabled()\"\n (input)=\"onInput(i, $event)\"\n (keydown)=\"onKeydown(i, $event)\"\n (paste)=\"onPaste($event)\"\n (focus)=\"$any($event.target).select()\"\n />\n }\n </div>\n `,\n styles: [\n `\n .strct-otp {\n display: inline-flex;\n gap: 8px;\n }\n .strct-otp__box {\n width: 40px;\n height: 46px;\n text-align: center;\n font-family: var(--mono);\n font-size: 18px;\n color: var(--t1);\n background: var(--bg-2);\n border: 1px solid var(--b2);\n border-radius: 8px;\n transition:\n border-color 0.14s ease,\n box-shadow 0.14s ease,\n background 0.14s ease;\n }\n .strct-otp__box:focus {\n outline: none;\n border-color: var(--acc50);\n box-shadow: 0 0 0 3px var(--acc18);\n background: var(--bg-1);\n }\n .strct-otp__box:disabled {\n opacity: 0.5;\n }\n `,\n ],\n})\nexport class StrctInputOtp implements ControlValueAccessor {\n private readonly host = inject(ElementRef<HTMLElement>);\n /** Number of OTP boxes. */\n readonly length = input(6);\n /** Mask each box as a password dot. */\n readonly masked = input(false);\n\n readonly slots = signal<string[]>([]);\n readonly isDisabled = signal(false);\n\n protected readonly indices = computed(() => Array.from({ length: this.length() }, (_, i) => i));\n\n private onChange: (value: string) => void = () => {};\n private onTouched: () => void = () => {};\n\n onInput(i: number, event: Event): void {\n const ch = (event.target as HTMLInputElement).value.slice(-1);\n this.setSlot(i, ch);\n if (ch) this.focusBox(i + 1);\n this.emit();\n }\n\n onKeydown(i: number, event: KeyboardEvent): void {\n if (event.key === 'Backspace') {\n if (!this.slots()[i]) {\n event.preventDefault();\n this.setSlot(i - 1, '');\n this.focusBox(i - 1);\n this.emit();\n }\n } else if (event.key === 'ArrowLeft') {\n this.focusBox(i - 1);\n } else if (event.key === 'ArrowRight') {\n this.focusBox(i + 1);\n }\n }\n\n onPaste(event: ClipboardEvent): void {\n event.preventDefault();\n const text = (event.clipboardData?.getData('text') ?? '').replace(/\\s/g, '');\n if (!text) return;\n const next = Array.from({ length: this.length() }, (_, i) => text[i] ?? '');\n this.slots.set(next);\n this.focusBox(Math.min(text.length, this.length() - 1));\n this.emit();\n this.onTouched();\n }\n\n private setSlot(i: number, ch: string): void {\n if (i < 0 || i >= this.length()) return;\n const next = [...this.slots()];\n while (next.length < this.length()) next.push('');\n next[i] = ch;\n this.slots.set(next);\n }\n\n private focusBox(i: number): void {\n const el = this.host.nativeElement as HTMLElement;\n const boxes = el.querySelectorAll('.strct-otp__box');\n (boxes[i] as HTMLInputElement | undefined)?.focus();\n }\n\n private emit(): void {\n this.onChange(this.slots().join(''));\n this.onTouched();\n }\n\n writeValue(value: string): void {\n const v = value ?? '';\n this.slots.set(Array.from({ length: this.length() }, (_, i) => v[i] ?? ''));\n }\n registerOnChange(fn: (value: string) => void): void {\n this.onChange = fn;\n }\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n setDisabledState(isDisabled: boolean): void {\n this.isDisabled.set(isDisabled);\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n ViewEncapsulation,\n computed,\n forwardRef,\n inject,\n input,\n signal,\n ElementRef,\n HostListener,\n} from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\n\n/** Knob accent color variants. */\nexport type StrctKnobStatus = 'accent' | 'success' | 'warning' | 'critical';\n\nconst COLOR: Record<StrctKnobStatus, string> = {\n accent: 'var(--acc)',\n success: 'var(--success)',\n warning: 'var(--warning)',\n critical: 'var(--critical)',\n};\n\n/**\n * Rotary dial input. Drag (up/down), arrow keys, Home/End or the wheel change\n * the value. CVA-compatible.\n * <strct-knob [min]=\"0\" [max]=\"100\" [(ngModel)]=\"fanSpeed\" label=\"Fan\" />\n */\n@Component({\n selector: 'strct-knob',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n providers: [\n { provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => StrctKnob), multi: true },\n ],\n template: `\n <div\n class=\"strct-knob\"\n [style.width.px]=\"size()\"\n [style.height.px]=\"size()\"\n role=\"slider\"\n tabindex=\"0\"\n [attr.aria-valuemin]=\"min()\"\n [attr.aria-valuemax]=\"max()\"\n [attr.aria-valuenow]=\"value()\"\n [attr.aria-disabled]=\"isDisabled() || null\"\n (pointerdown)=\"onPointerDown($event)\"\n >\n <svg [attr.viewBox]=\"'0 0 ' + size() + ' ' + size()\">\n <g [attr.transform]=\"'rotate(135 ' + half() + ' ' + half() + ')'\">\n <circle\n class=\"strct-knob__track\"\n [attr.cx]=\"half()\"\n [attr.cy]=\"half()\"\n [attr.r]=\"radius()\"\n fill=\"none\"\n [attr.stroke-width]=\"thickness()\"\n stroke-linecap=\"round\"\n [attr.stroke-dasharray]=\"trackDash()\"\n />\n <circle\n class=\"strct-knob__value\"\n [attr.cx]=\"half()\"\n [attr.cy]=\"half()\"\n [attr.r]=\"radius()\"\n fill=\"none\"\n [attr.stroke]=\"color()\"\n [attr.stroke-width]=\"thickness()\"\n stroke-linecap=\"round\"\n [attr.stroke-dasharray]=\"valueDash()\"\n />\n </g>\n <g [attr.transform]=\"'rotate(' + pointerAngle() + ' ' + half() + ' ' + half() + ')'\">\n <line\n class=\"strct-knob__pointer\"\n [attr.x1]=\"half()\"\n [attr.y1]=\"half()\"\n [attr.x2]=\"half()\"\n [attr.y2]=\"thickness() + 3\"\n [attr.stroke]=\"color()\"\n stroke-width=\"2.5\"\n stroke-linecap=\"round\"\n />\n </g>\n </svg>\n <div class=\"strct-knob__center\">\n <div class=\"strct-knob__num\">{{ value() }}</div>\n @if (label()) {\n <div class=\"strct-knob__label\">{{ label() }}</div>\n }\n </div>\n </div>\n `,\n styles: [\n `\n .strct-knob {\n position: relative;\n display: inline-flex;\n cursor: ns-resize;\n user-select: none;\n touch-action: none;\n outline: none;\n }\n .strct-knob:focus-visible {\n border-radius: 50%;\n box-shadow: 0 0 0 3px var(--acc18);\n }\n .strct-knob[aria-disabled='true'] {\n opacity: 0.5;\n cursor: not-allowed;\n }\n .strct-knob__track {\n stroke: var(--bg-3);\n }\n .strct-knob__value {\n transition: stroke-dasharray 0.05s linear;\n }\n .strct-knob__center {\n position: absolute;\n inset: 0;\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n pointer-events: none;\n }\n .strct-knob__num {\n font-size: 18px;\n font-weight: 600;\n color: var(--t1);\n line-height: 1;\n }\n .strct-knob__label {\n font-size: 11px;\n color: var(--t2);\n margin-top: 3px;\n }\n `,\n ],\n})\nexport class StrctKnob implements ControlValueAccessor {\n private readonly elementRef = inject(ElementRef<HTMLElement>);\n\n /** Minimum allowed value. */\n readonly min = input(0);\n /** Maximum allowed value or top of the value axis. */\n readonly max = input(100);\n /** Step increment. */\n readonly step = input(1);\n /** Size variant. */\n readonly size = input(96);\n /** Stroke thickness in pixels. */\n readonly thickness = input(9);\n /** Visual status color. */\n readonly status = input<StrctKnobStatus>('accent');\n /** Label text. */\n readonly label = input('');\n\n readonly value = signal(0);\n readonly isDisabled = signal(false);\n\n protected readonly half = computed(() => this.size() / 2);\n protected readonly radius = computed(() => (this.size() - this.thickness()) / 2 - 2);\n protected readonly color = computed(() => COLOR[this.status()]);\n\n private readonly fraction = computed(() => {\n const span = this.max() - this.min();\n return span <= 0 ? 0 : (this.value() - this.min()) / span;\n });\n private readonly circumference = computed(() => 2 * Math.PI * this.radius());\n\n protected readonly trackDash = computed(() => {\n const c = this.circumference();\n return `${0.75 * c} ${c}`;\n });\n protected readonly valueDash = computed(() => {\n const c = this.circumference();\n return `${this.fraction() * 0.75 * c} ${c}`;\n });\n /** Pointer rotation: -135° (start, lower-left) to +135° (end, lower-right). */\n protected readonly pointerAngle = computed(() => -135 + this.fraction() * 270);\n\n private onChange: (value: number) => void = () => {};\n private onTouched: () => void = () => {};\n\n private dragStartY = 0;\n private dragStartValue = 0;\n private readonly onMove = (e: PointerEvent) => {\n const span = this.max() - this.min();\n const delta = (this.dragStartY - e.clientY) / 150; // 150px ≈ full range\n this.setValue(this.dragStartValue + delta * span);\n };\n private readonly onUp = () => {\n window.removeEventListener('pointermove', this.onMove);\n window.removeEventListener('pointerup', this.onUp);\n this.onTouched();\n };\n\n protected onPointerDown(event: PointerEvent): void {\n if (this.isDisabled()) return;\n event.preventDefault();\n (this.elementRef.nativeElement.firstElementChild as HTMLElement)?.focus?.();\n this.dragStartY = event.clientY;\n this.dragStartValue = this.value();\n window.addEventListener('pointermove', this.onMove);\n window.addEventListener('pointerup', this.onUp);\n }\n\n @HostListener('keydown', ['$event'])\n protected onKeydown(event: KeyboardEvent): void {\n if (this.isDisabled()) return;\n const s = this.step();\n let handled = true;\n switch (event.key) {\n case 'ArrowUp':\n case 'ArrowRight':\n this.setValue(this.value() + s);\n break;\n case 'ArrowDown':\n case 'ArrowLeft':\n this.setValue(this.value() - s);\n break;\n case 'Home':\n this.setValue(this.min());\n break;\n case 'End':\n this.setValue(this.max());\n break;\n default:\n handled = false;\n }\n if (handled) {\n event.preventDefault();\n this.onTouched();\n }\n }\n\n @HostListener('wheel', ['$event'])\n protected onWheel(event: WheelEvent): void {\n if (this.isDisabled()) return;\n event.preventDefault();\n this.setValue(this.value() + (event.deltaY < 0 ? this.step() : -this.step()));\n this.onTouched();\n }\n\n private setValue(raw: number): void {\n const step = this.step();\n const snapped = Math.round(raw / step) * step;\n const clamped = Math.max(this.min(), Math.min(this.max(), snapped));\n if (clamped !== this.value()) {\n this.value.set(clamped);\n this.onChange(clamped);\n }\n }\n\n writeValue(value: number): void {\n this.value.set(Math.max(this.min(), Math.min(this.max(), Number(value) || 0)));\n }\n registerOnChange(fn: (value: number) => void): void {\n this.onChange = fn;\n }\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n setDisabledState(isDisabled: boolean): void {\n this.isDisabled.set(isDisabled);\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n ViewEncapsulation,\n booleanAttribute,\n forwardRef,\n input,\n signal,\n} from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\n\n/** Ready-made masks for common datacenter / form fields. */\nexport const STRCT_MASKS = {\n phoneTr: '(999) 999 99 99',\n nationalIdTr: '99999999999',\n creditCard: '9999 9999 9999 9999',\n /** MAC address — 6 hex octets, e.g. 00:1B:44:11:3A:B7 */\n mac: 'HH:HH:HH:HH:HH:HH',\n /** Fibre-channel WWPN — 8 hex octets, e.g. 20:00:00:25:B5:1A:00:0F */\n wwpn: 'HH:HH:HH:HH:HH:HH:HH:HH',\n} as const;\n\n/**\n * Masked text input. Mask tokens: `9` = digit, `A` = letter, `H` = hex digit,\n * `*` = alphanumeric; every other character is a literal. CVA value is the\n * formatted string.\n * <strct-input-mask mask=\"(999) 999 99 99\" [(ngModel)]=\"phone\" />\n * <strct-input-mask mask=\"HH:HH:HH:HH:HH:HH\" uppercase [(ngModel)]=\"mac\" />\n */\n@Component({\n selector: 'strct-input-mask',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n providers: [\n { provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => StrctInputMask), multi: true },\n ],\n template: `\n <input\n class=\"strct-control strct-mask__input\"\n type=\"text\"\n inputmode=\"text\"\n [placeholder]=\"placeholder() || mask()\"\n [value]=\"display()\"\n [disabled]=\"isDisabled()\"\n (input)=\"onInput($event)\"\n (blur)=\"onTouched()\"\n />\n `,\n styles: [\n `\n .strct-input-mask,\n .strct-mask__input {\n display: block;\n width: 100%;\n max-width: 280px;\n }\n `,\n ],\n})\nexport class StrctInputMask implements ControlValueAccessor {\n /** Mask pattern (9=digit, A=letter, H=hex, *=alnum). */\n readonly mask = input.required<string>();\n /** Placeholder text when empty. */\n readonly placeholder = input('');\n /** Upper-case entered letters (handy for hex MAC / WWPN). */\n readonly uppercase = input(false, { transform: booleanAttribute });\n\n readonly display = signal('');\n readonly isDisabled = signal(false);\n\n private onChange: (value: string) => void = () => {};\n protected onTouched: () => void = () => {};\n\n onInput(event: Event): void {\n const el = event.target as HTMLInputElement;\n const formatted = this.format(el.value);\n this.display.set(formatted);\n // keep the field text in sync (covers rejected characters)\n el.value = formatted;\n this.onChange(formatted);\n }\n\n private isToken(c: string): boolean {\n return c === '9' || c === 'A' || c === 'H' || c === '*';\n }\n\n private matches(ch: string, token: string): boolean {\n if (token === '9') return /[0-9]/.test(ch);\n if (token === 'A') return /[a-zA-Z]/.test(ch);\n if (token === 'H') return /[0-9a-fA-F]/.test(ch);\n return /[0-9a-zA-Z]/.test(ch); // '*'\n }\n\n private format(raw: string): string {\n const mask = this.mask();\n // Pull out only the data characters (drop literals / rejected input).\n const data: string[] = [];\n for (const ch of raw) {\n if (/[0-9a-zA-Z]/.test(ch)) data.push(ch);\n }\n let out = '';\n let di = 0;\n for (let mi = 0; mi < mask.length && di < data.length; ) {\n const m = mask[mi];\n if (this.isToken(m)) {\n if (this.matches(data[di], m)) {\n out += this.uppercase() ? data[di].toUpperCase() : data[di];\n mi++;\n di++;\n } else {\n di++; // skip a data char that doesn't fit this token\n }\n } else {\n out += m; // literal\n mi++;\n }\n }\n return out;\n }\n\n writeValue(value: string): void {\n this.display.set(this.format(value ?? ''));\n }\n registerOnChange(fn: (value: string) => void): void {\n this.onChange = fn;\n }\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n setDisabledState(isDisabled: boolean): void {\n this.isDisabled.set(isDisabled);\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n ViewEncapsulation,\n ElementRef,\n HostListener,\n booleanAttribute,\n computed,\n forwardRef,\n inject,\n input,\n signal,\n} from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { StrctIcon } from '../icon/icon';\nimport { StrctOverlay } from '../overlay/overlay';\n\n/** One option in a combobox or similar list. */\nexport interface StrctOption {\n value: unknown;\n label: string;\n}\n\nlet comboboxCounter = 0;\n\n/**\n * Filterable single-select (autocomplete). CVA-compatible, fully keyboard\n * driven (↑/↓ to move, Enter to pick, Esc to close).\n * <strct-combobox [options]=\"opts\" [(ngModel)]=\"selected\" placeholder=\"Pick…\" />\n */\n@Component({\n selector: 'strct-combobox',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n imports: [StrctIcon, StrctOverlay],\n providers: [\n { provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => StrctCombobox), multi: true },\n ],\n template: `\n <div #field class=\"strct-cbx__field\">\n <input\n #input\n type=\"text\"\n class=\"strct-control strct-cbx__input\"\n role=\"combobox\"\n autocomplete=\"off\"\n [attr.aria-expanded]=\"open()\"\n [attr.aria-controls]=\"listId\"\n [attr.aria-activedescendant]=\"\n open() && filtered().length ? listId + '-' + activeIndex() : null\n \"\n [placeholder]=\"placeholder()\"\n [value]=\"query()\"\n [disabled]=\"isDisabled()\"\n (focus)=\"openList()\"\n (input)=\"onType($event)\"\n (keydown)=\"onKeydown($event)\"\n (blur)=\"onTouched()\"\n />\n <strct-icon class=\"strct-cbx__caret\" name=\"chevronDown\" [size]=\"14\" />\n </div>\n @if (open()) {\n <div\n class=\"strct-cbx__menu\"\n role=\"listbox\"\n [id]=\"listId\"\n [strctOverlay]=\"field\"\n strctOverlayPlacement=\"bottom-start\"\n [strctOverlayMatchWidth]=\"true\"\n >\n @if (loading()) {\n <div class=\"strct-cbx__skeleton\">\n <div class=\"strct-cbx__skeleton-block\"></div>\n </div>\n } @else {\n @for (opt of filtered(); track opt.value; let i = $index) {\n <div\n class=\"strct-cbx__opt\"\n [id]=\"listId + '-' + i\"\n [class.strct-cbx__opt--active]=\"opt.value === value()\"\n [class.strct-cbx__opt--highlight]=\"i === activeIndex()\"\n role=\"option\"\n [attr.aria-selected]=\"opt.value === value()\"\n (mousedown)=\"select(opt, $event)\"\n (mousemove)=\"activeIndex.set(i)\"\n >\n {{ opt.label }}\n </div>\n } @empty {\n <div class=\"strct-cbx__empty\">No matches</div>\n }\n }\n </div>\n }\n `,\n host: { class: 'strct-cbx' },\n styles: [\n `\n /* Full width of its container by default — no artificial cap. */\n .strct-cbx {\n position: relative;\n display: block;\n width: 100%;\n }\n .strct-cbx__field {\n position: relative;\n }\n .strct-cbx__input {\n padding-right: 30px;\n }\n .strct-cbx__caret {\n position: absolute;\n right: 9px;\n top: 50%;\n transform: translateY(-50%);\n color: var(--t3);\n pointer-events: none;\n }\n /* Positioned by StrctOverlay (position: fixed, set inline) — only the\n surface styling lives here. */\n .strct-cbx__menu {\n z-index: 200;\n max-height: 220px;\n overflow-y: auto;\n padding: 4px;\n background: var(--bg-1);\n border: 1px solid var(--b2);\n border-radius: 7px;\n box-shadow: var(--shh);\n }\n .strct-cbx__opt {\n padding: 7px 10px;\n border-radius: 5px;\n cursor: pointer;\n font-size: 13px;\n color: var(--t1);\n }\n .strct-cbx__opt--highlight {\n background: var(--bg-3);\n }\n .strct-cbx__opt--active {\n color: var(--acc);\n }\n .strct-cbx__opt--active.strct-cbx__opt--highlight {\n background: var(--acc-m);\n }\n @keyframes strct-skeleton-pulse {\n 0%,\n 100% {\n opacity: 0.4;\n }\n 50% {\n opacity: 0.7;\n }\n }\n .strct-cbx__skeleton {\n padding: 9px 10px;\n }\n .strct-cbx__skeleton-block {\n height: 12px;\n background: var(--bg-3);\n border-radius: var(--radius-sm);\n animation: strct-skeleton-pulse 1.4s ease infinite;\n }\n .strct-cbx__empty {\n padding: 9px 10px;\n font-size: 13px;\n color: var(--t3);\n }\n `,\n ],\n})\nexport class StrctCombobox implements ControlValueAccessor {\n private readonly host = inject(ElementRef<HTMLElement>);\n protected readonly listId = `strct-cbx-${++comboboxCounter}`;\n\n /** Available options. */\n readonly options = input<StrctOption[]>([]);\n /** Placeholder text when empty. */\n readonly placeholder = input('');\n /** Show a skeleton placeholder while options are loading. */\n readonly loading = input(false, { transform: booleanAttribute });\n\n readonly query = signal('');\n readonly value = signal<unknown>(null);\n readonly open = signal(false);\n readonly activeIndex = signal(0);\n readonly isDisabled = signal(false);\n /** True while the user is typing a filter that hasn't been committed yet. */\n private readonly dirty = signal(false);\n\n protected readonly filtered = computed(() => {\n const q = this.dirty() ? this.query().toLowerCase().trim() : '';\n if (!q) return this.options();\n return this.options().filter((o) => o.label.toLowerCase().includes(q));\n });\n\n private onChange: (value: unknown) => void = () => {};\n protected onTouched: () => void = () => {};\n\n openList(): void {\n if (this.isDisabled()) return;\n this.open.set(true);\n this.activeIndex.set(this.indexOfValue());\n }\n\n onType(event: Event): void {\n this.dirty.set(true);\n this.query.set((event.target as HTMLInputElement).value);\n this.open.set(true);\n this.activeIndex.set(0);\n }\n\n onKeydown(event: KeyboardEvent): void {\n switch (event.key) {\n case 'ArrowDown':\n event.preventDefault();\n if (!this.open()) return this.openList();\n this.move(1);\n break;\n case 'ArrowUp':\n event.preventDefault();\n this.move(-1);\n break;\n case 'Enter': {\n if (!this.open()) return;\n event.preventDefault();\n const opt = this.filtered()[this.activeIndex()];\n if (opt) this.commit(opt);\n break;\n }\n case 'Escape':\n if (this.open()) {\n event.preventDefault();\n this.close();\n }\n break;\n }\n }\n\n private move(delta: number): void {\n const len = this.filtered().length;\n if (!len) return;\n this.activeIndex.set((this.activeIndex() + delta + len) % len);\n }\n\n select(opt: StrctOption, event: Event): void {\n event.preventDefault(); // keep focus, avoid blur reordering\n this.commit(opt);\n }\n\n private commit(opt: StrctOption): void {\n this.value.set(opt.value);\n this.query.set(opt.label);\n this.dirty.set(false);\n this.open.set(false);\n this.onChange(opt.value);\n this.onTouched();\n }\n\n @HostListener('document:click', ['$event'])\n protected onDocClick(event: MouseEvent): void {\n if (this.open() && !this.host.nativeElement.contains(event.target as Node)) {\n this.close();\n }\n }\n\n private close(): void {\n this.open.set(false);\n this.dirty.set(false);\n this.syncQueryToValue();\n }\n\n private indexOfValue(): number {\n const idx = this.filtered().findIndex((o) => o.value === this.value());\n return idx < 0 ? 0 : idx;\n }\n\n private syncQueryToValue(): void {\n const match = this.options().find((o) => o.value === this.value());\n this.query.set(match?.label ?? '');\n }\n\n writeValue(value: unknown): void {\n this.value.set(value);\n this.syncQueryToValue();\n }\n registerOnChange(fn: (value: unknown) => void): void {\n this.onChange = fn;\n }\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n setDisabledState(isDisabled: boolean): void {\n this.isDisabled.set(isDisabled);\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n ViewEncapsulation,\n ElementRef,\n HostListener,\n computed,\n forwardRef,\n inject,\n input,\n signal,\n} from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { StrctIcon } from '../icon/icon';\nimport { StrctOverlay } from '../overlay/overlay';\n\ninterface DayCell {\n day: number;\n iso: string;\n inMonth: boolean;\n}\n\nconst MONTHS = [\n 'January',\n 'February',\n 'March',\n 'April',\n 'May',\n 'June',\n 'July',\n 'August',\n 'September',\n 'October',\n 'November',\n 'December',\n];\nconst DOW = ['Su', 'Mo', 'Tu', 'We', 'Th', 'Fr', 'Sa'];\nconst pad = (n: number) => String(n).padStart(2, '0');\nconst toIso = (y: number, m: number, d: number) => `${y}-${pad(m + 1)}-${pad(d)}`;\n\n/**\n * Calendar date picker. Value is an ISO `yyyy-mm-dd` string. CVA-compatible.\n * <strct-datepicker [(ngModel)]=\"date\" />\n */\n@Component({\n selector: 'strct-datepicker',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n imports: [StrctIcon, StrctOverlay],\n providers: [\n { provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => StrctDatepicker), multi: true },\n ],\n template: `\n <div #field class=\"strct-dp__field\">\n <input\n type=\"text\"\n class=\"strct-control strct-dp__input\"\n readonly\n [value]=\"displayLabel()\"\n [placeholder]=\"placeholder()\"\n [disabled]=\"isDisabled()\"\n (click)=\"toggle()\"\n (keydown)=\"onKeydown($event)\"\n />\n <button\n type=\"button\"\n class=\"strct-dp__icon\"\n aria-label=\"Open calendar\"\n [disabled]=\"isDisabled()\"\n (click)=\"toggle()\"\n >\n <strct-icon name=\"calendar\" [size]=\"15\" />\n </button>\n </div>\n\n @if (open()) {\n <div\n class=\"strct-dp__panel\"\n role=\"dialog\"\n [strctOverlay]=\"field\"\n strctOverlayPlacement=\"bottom-start\"\n >\n <div class=\"strct-dp__head\">\n <button\n type=\"button\"\n class=\"strct-dp__nav\"\n aria-label=\"Previous month\"\n (click)=\"shiftMonth(-1)\"\n >\n <strct-icon name=\"chevronLeft\" [size]=\"14\" [strokeWidth]=\"1.7\" />\n </button>\n <span class=\"strct-dp__title\">{{ monthLabel() }}</span>\n <button\n type=\"button\"\n class=\"strct-dp__nav\"\n aria-label=\"Next month\"\n (click)=\"shiftMonth(1)\"\n >\n <strct-icon name=\"chevronRight\" [size]=\"14\" [strokeWidth]=\"1.7\" />\n </button>\n </div>\n <div class=\"strct-dp__dow\">\n @for (d of dow; track d) {\n <span>{{ d }}</span>\n }\n </div>\n <div class=\"strct-dp__grid\">\n @for (cell of cells(); track cell.iso) {\n <button\n type=\"button\"\n class=\"strct-dp__day\"\n [class.strct-dp__day--muted]=\"!cell.inMonth\"\n [class.strct-dp__day--today]=\"cell.iso === today\"\n [class.strct-dp__day--focused]=\"cell.iso === focusedIso()\"\n [class.strct-dp__day--selected]=\"cell.iso === value()\"\n (click)=\"pick(cell.iso)\"\n >\n {{ cell.day }}\n </button>\n }\n </div>\n </div>\n }\n `,\n host: { class: 'strct-dp' },\n styles: [\n `\n .strct-dp {\n position: relative;\n display: inline-block;\n width: 100%;\n max-width: 240px;\n }\n .strct-dp__field {\n position: relative;\n }\n .strct-dp__input {\n padding-right: 36px;\n cursor: pointer;\n }\n .strct-dp__icon {\n position: absolute;\n right: 4px;\n top: 50%;\n transform: translateY(-50%);\n display: inline-flex;\n padding: 5px;\n border: 0;\n border-radius: 5px;\n background: transparent;\n color: var(--t2);\n cursor: pointer;\n }\n .strct-dp__icon:hover {\n color: var(--acc);\n background: var(--bg-3);\n }\n .strct-dp__panel {\n position: absolute;\n top: calc(100% + 5px);\n left: 0;\n z-index: 250;\n width: 250px;\n padding: 10px;\n background: var(--bg-1);\n border: 1px solid var(--b2);\n border-radius: 9px;\n box-shadow: var(--shh);\n }\n .strct-dp__head {\n display: flex;\n align-items: center;\n justify-content: space-between;\n margin-bottom: 8px;\n }\n .strct-dp__title {\n font-size: 13px;\n font-weight: 600;\n color: var(--t1);\n }\n .strct-dp__nav {\n display: inline-flex;\n padding: 5px;\n border: 0;\n border-radius: 5px;\n background: transparent;\n color: var(--t2);\n cursor: pointer;\n }\n .strct-dp__nav:hover {\n color: var(--t1);\n background: var(--bg-3);\n }\n .strct-dp__dow {\n display: grid;\n grid-template-columns: repeat(7, 1fr);\n margin-bottom: 4px;\n }\n .strct-dp__dow span {\n text-align: center;\n font-size: 10px;\n font-weight: 600;\n color: var(--t3);\n padding: 4px 0;\n }\n .strct-dp__grid {\n display: grid;\n grid-template-columns: repeat(7, 1fr);\n gap: 2px;\n }\n .strct-dp__day {\n aspect-ratio: 1;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n border: 0;\n border-radius: 6px;\n background: transparent;\n cursor: pointer;\n font-family: var(--font);\n font-size: 12px;\n color: var(--t1);\n }\n .strct-dp__day:hover {\n background: var(--bg-3);\n }\n .strct-dp__day--muted {\n color: var(--t3);\n }\n .strct-dp__day--today {\n box-shadow: inset 0 0 0 1px var(--acc30);\n }\n .strct-dp__day--focused {\n box-shadow: inset 0 0 0 2px var(--acc);\n }\n .strct-dp__day--selected {\n background: var(--acc);\n color: #fff;\n }\n .strct-dp__day--selected:hover {\n background: var(--acc);\n }\n `,\n ],\n})\nexport class StrctDatepicker implements ControlValueAccessor {\n private readonly host = inject(ElementRef<HTMLElement>);\n\n /** Placeholder text when empty. */\n readonly placeholder = input('Select a date');\n protected readonly dow = DOW;\n\n readonly value = signal('');\n readonly open = signal(false);\n readonly isDisabled = signal(false);\n /** Keyboard cursor within the open calendar. */\n readonly focusedIso = signal('');\n private readonly view = signal(this.startOfMonth(new Date()));\n\n protected get today(): string {\n const d = new Date();\n return toIso(d.getFullYear(), d.getMonth(), d.getDate());\n }\n\n protected readonly monthLabel = computed(() => {\n const v = this.view();\n return `${MONTHS[v.m]} ${v.y}`;\n });\n\n protected readonly displayLabel = computed(() => {\n const iso = this.value();\n if (!iso) return '';\n const [y, m, d] = iso.split('-').map(Number);\n return `${MONTHS[m - 1].slice(0, 3)} ${d}, ${y}`;\n });\n\n protected readonly cells = computed<DayCell[]>(() => {\n const { y, m } = this.view();\n const firstDow = new Date(y, m, 1).getDay();\n const start = new Date(y, m, 1 - firstDow);\n return Array.from({ length: 42 }, (_, i) => {\n const d = new Date(start.getFullYear(), start.getMonth(), start.getDate() + i);\n return {\n day: d.getDate(),\n iso: toIso(d.getFullYear(), d.getMonth(), d.getDate()),\n inMonth: d.getMonth() === m,\n };\n });\n });\n\n private onChange: (value: string) => void = () => {};\n private onTouched: () => void = () => {};\n\n toggle(): void {\n if (this.isDisabled()) return;\n const next = !this.open();\n this.open.set(next);\n if (next) this.syncFocus();\n }\n\n shiftMonth(delta: number): void {\n const { y, m } = this.view();\n this.view.set(this.startOfMonth(new Date(y, m + delta, 1)));\n }\n\n pick(iso: string): void {\n this.value.set(iso);\n this.focusedIso.set(iso);\n const [y, m] = iso.split('-').map(Number);\n this.view.set({ y, m: m - 1 });\n this.open.set(false);\n this.onChange(iso);\n this.onTouched();\n }\n\n onKeydown(event: KeyboardEvent): void {\n if (this.isDisabled()) return;\n if (!this.open()) {\n if (event.key === 'ArrowDown' || event.key === 'Enter' || event.key === ' ') {\n event.preventDefault();\n this.toggle();\n }\n return;\n }\n switch (event.key) {\n case 'ArrowLeft':\n event.preventDefault();\n this.shiftFocus(-1);\n break;\n case 'ArrowRight':\n event.preventDefault();\n this.shiftFocus(1);\n break;\n case 'ArrowUp':\n event.preventDefault();\n this.shiftFocus(-7);\n break;\n case 'ArrowDown':\n event.preventDefault();\n this.shiftFocus(7);\n break;\n case 'PageUp':\n event.preventDefault();\n this.shiftFocus(0, -1);\n break;\n case 'PageDown':\n event.preventDefault();\n this.shiftFocus(0, 1);\n break;\n case 'Enter':\n case ' ':\n event.preventDefault();\n if (this.focusedIso()) this.pick(this.focusedIso());\n break;\n case 'Escape':\n event.preventDefault();\n this.open.set(false);\n break;\n }\n }\n\n private syncFocus(): void {\n const base = this.value() || this.today;\n this.focusedIso.set(base);\n const [y, m] = base.split('-').map(Number);\n this.view.set({ y, m: m - 1 });\n }\n\n private shiftFocus(days: number, months = 0): void {\n const [y, m, d] = (this.focusedIso() || this.today).split('-').map(Number);\n const next = new Date(y, m - 1 + months, d + days);\n this.focusedIso.set(toIso(next.getFullYear(), next.getMonth(), next.getDate()));\n this.view.set({ y: next.getFullYear(), m: next.getMonth() });\n }\n\n @HostListener('document:click', ['$event'])\n protected onDocClick(event: MouseEvent): void {\n if (this.open() && !this.host.nativeElement.contains(event.target as Node)) {\n this.open.set(false);\n }\n }\n\n @HostListener('document:keydown.escape')\n protected onEscape(): void {\n this.open.set(false);\n }\n\n private startOfMonth(date: Date): { y: number; m: number } {\n return { y: date.getFullYear(), m: date.getMonth() };\n }\n\n writeValue(value: string): void {\n this.value.set(value || '');\n if (value) {\n const [y, m] = value.split('-').map(Number);\n if (y && m) this.view.set({ y, m: m - 1 });\n }\n }\n registerOnChange(fn: (value: string) => void): void {\n this.onChange = fn;\n }\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n setDisabledState(isDisabled: boolean): void {\n this.isDisabled.set(isDisabled);\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n ViewEncapsulation,\n ElementRef,\n HostListener,\n forwardRef,\n inject,\n input,\n signal,\n} from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { StrctOverlay } from '../overlay/overlay';\n\nconst DEFAULT_SWATCHES = [\n '#7b9ec8',\n '#5a7ea3',\n '#7da87e',\n '#5e8a60',\n '#bfae6a',\n '#9a8a3e',\n '#b87872',\n '#a0635c',\n '#96724e',\n '#c49a6c',\n '#8d7bc8',\n '#5a5a64',\n];\n\nconst HEX = /^#([0-9a-f]{6})$/i;\n\n/**\n * Swatch-based color picker with a hex field. CVA value is a `#rrggbb` string.\n * <strct-color-picker [(ngModel)]=\"color\" />\n */\n@Component({\n selector: 'strct-color-picker',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n imports: [StrctOverlay],\n providers: [\n { provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => StrctColorPicker), multi: true },\n ],\n template: `\n <button\n #trigger\n type=\"button\"\n class=\"strct-cp__trigger\"\n [disabled]=\"isDisabled()\"\n [attr.aria-expanded]=\"open()\"\n (click)=\"toggle()\"\n >\n <span class=\"strct-cp__swatch\" [style.background]=\"value() || 'transparent'\"></span>\n <span class=\"strct-cp__value\">{{ value() || 'Pick a color' }}</span>\n </button>\n\n @if (open()) {\n <div\n class=\"strct-cp__panel\"\n role=\"dialog\"\n [strctOverlay]=\"trigger\"\n strctOverlayPlacement=\"bottom-start\"\n >\n <div class=\"strct-cp__grid\">\n @for (color of swatches(); track color) {\n <button\n type=\"button\"\n class=\"strct-cp__chip\"\n [class.strct-cp__chip--active]=\"eq(color)\"\n [style.background]=\"color\"\n [attr.aria-label]=\"color\"\n (click)=\"pick(color)\"\n ></button>\n }\n </div>\n <input\n class=\"strct-control strct-cp__hex\"\n spellcheck=\"false\"\n placeholder=\"#000000\"\n [value]=\"draft()\"\n (input)=\"onHex($event)\"\n />\n </div>\n }\n `,\n host: { class: 'strct-cp' },\n styles: [\n `\n .strct-cp {\n position: relative;\n display: inline-block;\n }\n .strct-cp__trigger {\n display: inline-flex;\n align-items: center;\n gap: 9px;\n padding: 6px 11px 6px 7px;\n border-radius: 6px;\n cursor: pointer;\n font-family: var(--font);\n font-size: 13px;\n color: var(--t1);\n background: var(--bg-2);\n border: 1px solid var(--b2);\n }\n .strct-cp__trigger:hover {\n border-color: var(--b3);\n }\n .strct-cp__swatch {\n width: 20px;\n height: 20px;\n border-radius: 5px;\n flex-shrink: 0;\n border: 1px solid var(--b3);\n background-clip: padding-box;\n }\n .strct-cp__value {\n font-family: var(--mono);\n font-size: 12px;\n }\n .strct-cp__panel {\n position: absolute;\n top: calc(100% + 5px);\n left: 0;\n z-index: 250;\n width: 196px;\n padding: 10px;\n background: var(--bg-1);\n border: 1px solid var(--b2);\n border-radius: 9px;\n box-shadow: var(--shh);\n }\n .strct-cp__grid {\n display: grid;\n grid-template-columns: repeat(6, 1fr);\n gap: 6px;\n margin-bottom: 9px;\n }\n .strct-cp__chip {\n aspect-ratio: 1;\n border-radius: 5px;\n cursor: pointer;\n padding: 0;\n border: 1px solid var(--b2);\n background-clip: padding-box;\n transition: transform 0.12s ease;\n }\n .strct-cp__chip:hover {\n transform: scale(1.1);\n }\n .strct-cp__chip--active {\n box-shadow:\n 0 0 0 2px var(--bg-1),\n 0 0 0 4px var(--acc);\n }\n .strct-cp__hex {\n font-family: var(--mono);\n font-size: 12px;\n text-transform: lowercase;\n }\n `,\n ],\n})\nexport class StrctColorPicker implements ControlValueAccessor {\n private readonly host = inject(ElementRef<HTMLElement>);\n /** Custom palette swatches. */\n readonly swatches = input<string[]>(DEFAULT_SWATCHES);\n\n readonly value = signal('');\n readonly draft = signal('');\n readonly open = signal(false);\n readonly isDisabled = signal(false);\n\n private onChange: (value: string) => void = () => {};\n private onTouched: () => void = () => {};\n\n toggle(): void {\n if (this.isDisabled()) return;\n this.draft.set(this.value());\n this.open.update((v) => !v);\n }\n\n protected eq(color: string): boolean {\n return color.toLowerCase() === this.value().toLowerCase();\n }\n\n pick(color: string): void {\n this.commit(color);\n this.open.set(false);\n }\n\n onHex(event: Event): void {\n const raw = (event.target as HTMLInputElement).value.trim();\n this.draft.set(raw);\n if (HEX.test(raw)) this.commit(raw.toLowerCase());\n }\n\n private commit(color: string): void {\n this.value.set(color);\n this.draft.set(color);\n this.onChange(color);\n this.onTouched();\n }\n\n @HostListener('document:click', ['$event'])\n protected onDocClick(event: MouseEvent): void {\n if (this.open() && !this.host.nativeElement.contains(event.target as Node)) {\n this.open.set(false);\n }\n }\n\n @HostListener('document:keydown.escape')\n protected onEscape(): void {\n this.open.set(false);\n }\n\n writeValue(value: string): void {\n this.value.set(value || '');\n this.draft.set(value || '');\n }\n registerOnChange(fn: (value: string) => void): void {\n this.onChange = fn;\n }\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n setDisabledState(isDisabled: boolean): void {\n this.isDisabled.set(isDisabled);\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n ViewEncapsulation,\n ElementRef,\n HostListener,\n computed,\n forwardRef,\n inject,\n input,\n signal,\n} from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { StrctIcon } from '../icon/icon';\nimport { StrctOverlay } from '../overlay/overlay';\n\n/** One option in a cascade select. */\nexport interface StrctCascadeOption {\n label: string;\n value?: unknown;\n children?: StrctCascadeOption[];\n}\n\n/** DI token the nodes use to talk back to the host control (avoids a circular type). */\nexport abstract class StrctCascadeHost {\n abstract pick(value: unknown): void;\n abstract isSelected(value: unknown): boolean;\n}\n\n/**\n * One row in the cascade. Leaf rows select on click; group rows reveal a\n * fly-out of their children on hover. Recurses to any depth.\n */\n@Component({\n selector: 'strct-cascade-node',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n imports: [StrctIcon, forwardRef(() => StrctCascadeNode)],\n template: `\n <div\n class=\"strct-csn\"\n [class.strct-csn--selected]=\"isLeafSelected()\"\n role=\"menuitem\"\n tabindex=\"0\"\n (mouseenter)=\"hasChildren() && open.set(true)\"\n (mouseleave)=\"open.set(false)\"\n (click)=\"onClick($event)\"\n (keydown.enter)=\"onClick($event)\"\n (keydown.space)=\"onClick($event)\"\n >\n <span class=\"strct-csn__label\">{{ option().label }}</span>\n @if (hasChildren()) {\n <strct-icon class=\"strct-csn__arrow\" name=\"chevronRight\" [size]=\"12\" [strokeWidth]=\"1.6\" />\n }\n @if (hasChildren() && open()) {\n <div class=\"strct-csn__flyout\" role=\"menu\">\n @for (child of option().children; track child) {\n <strct-cascade-node [option]=\"child\" />\n }\n </div>\n }\n </div>\n `,\n styles: [\n `\n .strct-csn {\n position: relative;\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 7px 8px 7px 10px;\n border-radius: 5px;\n cursor: pointer;\n font-size: 13px;\n color: var(--t1);\n }\n .strct-csn:hover {\n background: var(--bg-3);\n }\n .strct-csn--selected {\n color: var(--acc);\n background: var(--acc-m);\n }\n .strct-csn__label {\n flex: 1;\n white-space: nowrap;\n }\n .strct-csn__arrow {\n color: var(--t3);\n }\n .strct-csn__flyout {\n position: absolute;\n top: -5px;\n left: 100%;\n z-index: 1;\n min-width: 160px;\n margin-left: 2px;\n padding: 4px;\n background: var(--bg-1);\n border: 1px solid var(--b2);\n border-radius: 7px;\n box-shadow: var(--shh);\n }\n `,\n ],\n})\nexport class StrctCascadeNode {\n private readonly host = inject(StrctCascadeHost);\n /** Option. */\n readonly option = input.required<StrctCascadeOption>();\n readonly open = signal(false);\n\n protected readonly hasChildren = computed(() => !!this.option().children?.length);\n protected readonly isLeafSelected = computed(\n () => !this.hasChildren() && this.host.isSelected(this.option().value),\n );\n\n protected onClick(event: Event): void {\n if (this.hasChildren()) {\n event.stopPropagation(); // group rows only expand\n } else {\n this.host.pick(this.option().value);\n }\n }\n}\n\n/**\n * Hierarchical single-select — pick a leaf from nested groups (e.g. a port\n * group under a virtual switch). CVA-compatible.\n * <strct-cascade-select [options]=\"switches\" [(ngModel)]=\"portGroup\" />\n */\n@Component({\n selector: 'strct-cascade-select',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n imports: [StrctCascadeNode, StrctIcon, StrctOverlay],\n providers: [\n { provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => StrctCascadeSelect), multi: true },\n { provide: StrctCascadeHost, useExisting: forwardRef(() => StrctCascadeSelect) },\n ],\n template: `\n <button\n #trigger\n type=\"button\"\n class=\"strct-cs__trigger\"\n [attr.aria-expanded]=\"open()\"\n [disabled]=\"isDisabled()\"\n (click)=\"toggle()\"\n >\n <span class=\"strct-cs__value\" [class.strct-cs__value--empty]=\"!selectedLabel()\">\n {{ selectedLabel() || placeholder() }}\n </span>\n <strct-icon class=\"strct-cs__caret\" name=\"chevronDown\" [size]=\"14\" />\n </button>\n @if (open()) {\n <div\n class=\"strct-cs__panel\"\n role=\"menu\"\n [strctOverlay]=\"trigger\"\n strctOverlayPlacement=\"bottom-start\"\n >\n @for (opt of options(); track opt) {\n <strct-cascade-node [option]=\"opt\" />\n }\n </div>\n }\n `,\n host: { class: 'strct-cs' },\n styles: [\n `\n .strct-cs {\n position: relative;\n display: inline-block;\n width: 100%;\n max-width: 280px;\n }\n .strct-cs__trigger {\n display: flex;\n align-items: center;\n gap: 8px;\n width: 100%;\n padding: 7px 10px;\n border-radius: 6px;\n cursor: pointer;\n font-family: var(--font);\n font-size: 13px;\n color: var(--t1);\n background: var(--bg-2);\n border: 1px solid var(--b2);\n text-align: left;\n }\n .strct-cs__trigger:hover {\n border-color: var(--b3);\n }\n .strct-cs__value {\n flex: 1;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n }\n .strct-cs__value--empty {\n color: var(--t3);\n }\n .strct-cs__caret {\n color: var(--t3);\n }\n .strct-cs__panel {\n position: absolute;\n top: calc(100% + 4px);\n left: 0;\n z-index: 200;\n min-width: 180px;\n padding: 4px;\n background: var(--bg-1);\n border: 1px solid var(--b2);\n border-radius: 7px;\n box-shadow: var(--shh);\n }\n `,\n ],\n})\nexport class StrctCascadeSelect extends StrctCascadeHost implements ControlValueAccessor {\n private readonly elementRef = inject(ElementRef<HTMLElement>);\n\n /** Available options. */\n readonly options = input<StrctCascadeOption[]>([]);\n /** Placeholder text when empty. */\n readonly placeholder = input('Select…');\n\n readonly value = signal<unknown>(null);\n readonly open = signal(false);\n readonly isDisabled = signal(false);\n\n protected readonly selectedLabel = computed(() => this.findLabel(this.options(), this.value()));\n\n private onChange: (value: unknown) => void = () => {};\n private onTouched: () => void = () => {};\n\n toggle(): void {\n if (!this.isDisabled()) this.open.update((v) => !v);\n }\n\n override pick(value: unknown): void {\n this.value.set(value);\n this.open.set(false);\n this.onChange(value);\n this.onTouched();\n }\n\n override isSelected(value: unknown): boolean {\n return value !== undefined && value === this.value();\n }\n\n private findLabel(opts: StrctCascadeOption[], value: unknown): string {\n for (const o of opts) {\n if (o.value !== undefined && o.value === value) return o.label;\n if (o.children) {\n const found = this.findLabel(o.children, value);\n if (found) return found;\n }\n }\n return '';\n }\n\n @HostListener('document:click', ['$event'])\n protected onDocClick(event: MouseEvent): void {\n if (this.open() && !this.elementRef.nativeElement.contains(event.target as Node)) {\n this.open.set(false);\n }\n }\n\n @HostListener('document:keydown.escape')\n protected onEscape(): void {\n this.open.set(false);\n }\n\n writeValue(value: unknown): void {\n this.value.set(value);\n }\n registerOnChange(fn: (value: unknown) => void): void {\n this.onChange = fn;\n }\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n setDisabledState(isDisabled: boolean): void {\n this.isDisabled.set(isDisabled);\n }\n}\n","import { NgTemplateOutlet } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n Directive,\n TemplateRef,\n booleanAttribute,\n computed,\n contentChildren,\n inject,\n input,\n} from '@angular/core';\n\n/** Column definition for the table. */\nexport interface StrctColumn {\n key: string;\n label: string;\n align?: 'start' | 'center' | 'end';\n width?: string;\n}\n\n/** Shorthand for a record-shaped table/datagrid row. */\nexport type StrctRow = Record<string, unknown>;\n\n/** Context passed to a per-column cell template. */\nexport interface StrctCellContext {\n /** The row object. */\n $implicit: StrctRow;\n /** The raw value for this column (`row[column.key]`). */\n value: unknown;\n /** The column definition. */\n column: StrctColumn;\n}\n\n/**\n * Per-column cell template for `strct-table` / `strct-datagrid`. The column key\n * is the directive value; the row, value and column are the template context:\n *\n * <ng-template strctCell=\"status\" let-row let-value=\"value\">\n * <strct-badge [status]=\"row['success'] ? 'success' : 'critical'\">{{ value }}</strct-badge>\n * </ng-template>\n */\n@Directive({ selector: '[strctCell]' })\nexport class StrctCellDef {\n /** Key. */\n readonly key = input.required<string>({ alias: 'strctCell' });\n readonly template = inject<TemplateRef<StrctCellContext>>(TemplateRef);\n}\n\n/**\n * Declarative data table. Cells render `row[col.key]` as text by default; supply\n * a `*strctCell` template per column for custom content.\n * <strct-table [columns]=\"cols\" [rows]=\"data\" hover />\n */\n@Component({\n selector: 'strct-table',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [NgTemplateOutlet],\n template: `\n <table class=\"strct-table\">\n <thead>\n <tr>\n @for (col of columns(); track col.key) {\n <th [style.text-align]=\"col.align ?? 'start'\" [style.width]=\"col.width\">\n {{ col.label }}\n </th>\n }\n </tr>\n </thead>\n <tbody>\n @if (loading()) {\n @for (_ of [1, 2, 3]; track $index) {\n <tr class=\"strct-table__skeleton-row\">\n @for (col of columns(); track col.key) {\n <td [style.text-align]=\"col.align ?? 'start'\">\n <div class=\"strct-table__skeleton-block\"></div>\n </td>\n }\n </tr>\n }\n } @else {\n @for (row of rows(); track $index) {\n <tr>\n @for (col of columns(); track col.key) {\n <td [style.text-align]=\"col.align ?? 'start'\">\n @if (cellTemplate(col.key); as tpl) {\n <ng-container\n [ngTemplateOutlet]=\"tpl\"\n [ngTemplateOutletContext]=\"{\n $implicit: row,\n value: row[col.key],\n column: col,\n }\"\n />\n } @else {\n {{ row[col.key] }}\n }\n </td>\n }\n </tr>\n } @empty {\n <tr>\n <td class=\"strct-table__empty\" [attr.colspan]=\"columns().length\">\n {{ emptyText() }}\n </td>\n </tr>\n }\n }\n </tbody>\n </table>\n `,\n host: {\n class: 'strct-table-host',\n '[class.strct-table-host--striped]': 'striped()',\n '[class.strct-table-host--hover]': 'hover()',\n },\n styles: [\n `\n .strct-table-host {\n display: block;\n overflow-x: auto;\n }\n .strct-table {\n width: 100%;\n border-collapse: collapse;\n font-size: 13px;\n border: 1px solid var(--b2);\n border-radius: 8px;\n overflow: hidden;\n }\n .strct-table th,\n .strct-table td {\n padding: 9px 13px;\n text-align: left;\n border-bottom: 1px solid var(--b1);\n }\n .strct-table th {\n font-size: 11px;\n font-weight: 600;\n text-transform: uppercase;\n letter-spacing: 0.4px;\n color: var(--t2);\n background: var(--bg-2);\n }\n .strct-table td {\n color: var(--t1);\n }\n .strct-table tbody tr:last-child td {\n border-bottom: 0;\n }\n .strct-table-host--striped tbody tr:nth-child(even) td {\n background: var(--bg-2);\n }\n .strct-table-host--hover tbody tr:hover td {\n background: var(--acc-s);\n }\n @keyframes strct-skeleton-pulse {\n 0%,\n 100% {\n opacity: 0.4;\n }\n 50% {\n opacity: 0.7;\n }\n }\n .strct-table__skeleton-block {\n height: 12px;\n background: var(--bg-3);\n border-radius: var(--radius-sm);\n animation: strct-skeleton-pulse 1.4s ease infinite;\n }\n .strct-table__skeleton-row td {\n border-bottom: 1px solid var(--b1);\n }\n .strct-table__empty {\n text-align: center;\n color: var(--t3);\n padding: 22px;\n }\n `,\n ],\n})\nexport class StrctTable {\n /** Column definitions. */\n readonly columns = input.required<StrctColumn[]>();\n /** Data rows. */\n readonly rows = input.required<StrctRow[]>();\n /** Enable zebra-striping. */\n readonly striped = input(false, { transform: booleanAttribute });\n /** Highlight rows on hover. */\n readonly hover = input(false, { transform: booleanAttribute });\n /** Message shown when there are no rows. */\n readonly emptyText = input('No data');\n /** Show skeleton rows while data is loading. */\n readonly loading = input(false, { transform: booleanAttribute });\n\n private readonly cellDefs = contentChildren(StrctCellDef);\n private readonly cellMap = computed(() => {\n const m = new Map<string, TemplateRef<StrctCellContext>>();\n for (const d of this.cellDefs()) m.set(d.key(), d.template);\n return m;\n });\n\n protected cellTemplate(key: string): TemplateRef<StrctCellContext> | null {\n return this.cellMap().get(key) ?? null;\n }\n}\n","import { NgTemplateOutlet } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n Directive,\n TemplateRef,\n ViewEncapsulation,\n booleanAttribute,\n computed,\n contentChild,\n contentChildren,\n effect,\n inject,\n input,\n output,\n signal,\n} from '@angular/core';\nimport { StrctIcon } from '../icon/icon';\nimport { StrctPagination } from '../pagination/pagination';\nimport { StrctCheckbox } from '../forms/checkbox';\nimport { StrctButton } from '../button/button';\nimport { StrctCellContext, StrctCellDef, StrctRow } from '../table/table';\n\n/** Resolves a stable identity for a row: a property key, or a function. */\nexport type StrctRowId = string | ((row: StrctRow) => unknown);\n\n/** Column definition for the datagrid. */\nexport interface StrctDatagridColumn {\n key: string;\n label: string;\n sortable?: boolean;\n align?: 'start' | 'center' | 'end';\n width?: string;\n /** Allow the user to resize this column by dragging its right edge.\n * Defaults to the global {@link StrctDatagrid#resizable} setting. */\n resizable?: boolean;\n}\n\ntype SortDir = 'asc' | 'desc';\n\n/**\n * Marks the expandable-row detail template. The row is the template's implicit\n * context: `<ng-template strctRowDetail let-row> … {{ row['name'] }} … </ng-template>`.\n */\n@Directive({ selector: '[strctRowDetail]' })\nexport class StrctRowDetailDef {\n readonly template = inject(TemplateRef);\n}\n\n/** Marks the persistent action-bar (toolbar) content shown above the grid. */\n@Directive({ selector: '[strctDatagridActionBar]' })\nexport class StrctDatagridActionBar {}\n\n/**\n * Interactive data table: sortable columns, row selection, expandable detail\n * rows, a batch action bar and built-in paging.\n * <strct-datagrid [columns]=\"cols\" [rows]=\"data\" selectable expandable [pageSize]=\"10\">\n * <button strct-button strctDatagridActions size=\"sm\">Migrate</button>\n * <ng-template strctRowDetail let-row> … </ng-template>\n * </strct-datagrid>\n */\n@Component({\n selector: 'strct-datagrid',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n imports: [StrctIcon, StrctPagination, NgTemplateOutlet, StrctCheckbox, StrctButton],\n template: `\n @if (actionBarDef()) {\n <div class=\"strct-dg__toolbar\"><ng-content select=\"[strctDatagridActionBar]\" /></div>\n }\n\n <div class=\"strct-dg__layout\" [class.strct-dg__layout--paned]=\"paneOpen()\">\n <div class=\"strct-dg__scroll\">\n <table class=\"strct-dg\">\n <thead>\n <tr>\n @if (canDetail()) {\n <th class=\"strct-dg__expandcol\"></th>\n }\n @if (canExpand()) {\n <th class=\"strct-dg__expandcol\"></th>\n }\n @if (selectable()) {\n <th class=\"strct-dg__sel\">\n <strct-checkbox\n ariaLabel=\"Select all rows on this page\"\n [checked]=\"allPageSelected()\"\n [indeterminate]=\"somePageSelected()\"\n (checkedChange)=\"toggleAll()\"\n />\n </th>\n }\n @for (col of visibleColumns(); track col.key) {\n <th\n [style.text-align]=\"col.align ?? 'start'\"\n [style.width]=\"colWidth(col.key) ?? col.width ?? null\"\n [class.strct-dg__th--sortable]=\"col.sortable\"\n [attr.tabindex]=\"col.sortable ? 0 : null\"\n [attr.aria-sort]=\"col.sortable ? ariaSort(col.key) : null\"\n (click)=\"col.sortable && sortBy(col.key)\"\n (keydown.enter)=\"col.sortable && sortBy(col.key)\"\n (keydown.space)=\"col.sortable && onHeaderSpace($event, col.key)\"\n >\n <span class=\"strct-dg__hd\">\n {{ col.label }}\n @if (col.sortable) {\n <strct-icon\n class=\"strct-dg__sorticon\"\n [name]=\"sortIcon(col.key)\"\n [size]=\"13\"\n />\n }\n </span>\n @if (resizable() && col.resizable !== false) {\n <div\n class=\"strct-dg__resize\"\n (mousedown)=\"onResizeStart($event, col.key)\"\n ></div>\n }\n </th>\n }\n </tr>\n </thead>\n <tbody>\n @if (loading()) {\n @for (_ of [1, 2, 3, 4, 5]; track $index) {\n <tr class=\"strct-dg__skeleton-row\">\n @if (canDetail()) {\n <td class=\"strct-dg__expandcell\"></td>\n }\n @if (canExpand()) {\n <td class=\"strct-dg__expandcell\"></td>\n }\n @if (selectable()) {\n <td class=\"strct-dg__sel\"></td>\n }\n @for (col of visibleColumns(); track col.key) {\n <td [style.text-align]=\"col.align ?? 'start'\">\n <div class=\"strct-dg__skeleton-block\"></div>\n </td>\n }\n </tr>\n }\n } @else {\n @for (row of paged(); track rowKey(row)) {\n <tr\n [class.strct-dg__row--selected]=\"isSelected(row)\"\n [class.strct-dg__row--active]=\"paneOpen() && row === activeRow()\"\n >\n @if (canDetail()) {\n <td class=\"strct-dg__expandcell\">\n <button\n type=\"button\"\n class=\"strct-dg__detailbtn\"\n [class.strct-dg__detailbtn--active]=\"row === activeRow()\"\n [attr.aria-expanded]=\"row === activeRow()\"\n aria-label=\"Open detail\"\n (click)=\"openDetail(row)\"\n >\n <strct-icon name=\"chevronDoubleRight\" [size]=\"13\" [strokeWidth]=\"1.6\" />\n </button>\n </td>\n }\n @if (canExpand()) {\n <td class=\"strct-dg__expandcell\">\n <button\n type=\"button\"\n class=\"strct-dg__expandbtn\"\n [class.strct-dg__expandbtn--open]=\"isExpanded(row)\"\n [attr.aria-expanded]=\"isExpanded(row)\"\n aria-label=\"Toggle detail\"\n (click)=\"toggleExpand(row)\"\n >\n <strct-icon name=\"chevronRight\" [size]=\"12\" [strokeWidth]=\"1.7\" />\n </button>\n </td>\n }\n @if (selectable()) {\n <td class=\"strct-dg__sel\">\n <strct-checkbox\n ariaLabel=\"Select row\"\n [checked]=\"isSelected(row)\"\n (checkedChange)=\"toggleRow(row)\"\n />\n </td>\n }\n @for (col of visibleColumns(); track col.key) {\n <td [style.text-align]=\"col.align ?? 'start'\">\n @if (cellTemplate(col.key); as tpl) {\n <ng-container\n [ngTemplateOutlet]=\"tpl\"\n [ngTemplateOutletContext]=\"{\n $implicit: row,\n value: row[col.key],\n column: col,\n }\"\n />\n } @else {\n {{ row[col.key] }}\n }\n </td>\n }\n </tr>\n @if (canExpand() && isExpanded(row)) {\n <tr class=\"strct-dg__detailrow\">\n <td [attr.colspan]=\"colspan()\">\n <div class=\"strct-dg__detail\">\n <ng-container\n [ngTemplateOutlet]=\"detailDef()!.template\"\n [ngTemplateOutletContext]=\"{ $implicit: row }\"\n />\n </div>\n </td>\n </tr>\n }\n } @empty {\n <tr>\n <td class=\"strct-dg__empty\" [attr.colspan]=\"colspan()\">{{ emptyText() }}</td>\n </tr>\n }\n }\n </tbody>\n </table>\n </div>\n\n @if (paneOpen()) {\n <aside class=\"strct-dg__pane\">\n <div class=\"strct-dg__pane-head\">\n <span class=\"strct-dg__pane-title\">{{ activeRow()![columns()[0].key] }}</span>\n <button\n type=\"button\"\n class=\"strct-dg__pane-close\"\n aria-label=\"Close detail\"\n (click)=\"closePane()\"\n >\n <strct-icon name=\"close\" [size]=\"13\" />\n </button>\n </div>\n <div class=\"strct-dg__pane-body\">\n <ng-container\n [ngTemplateOutlet]=\"detailDef()!.template\"\n [ngTemplateOutletContext]=\"{ $implicit: activeRow() }\"\n />\n </div>\n </aside>\n }\n </div>\n\n @if (pageSize() > 0 && !loading()) {\n <div class=\"strct-dg__foot\">\n <div class=\"strct-dg__foot-left\">\n @if (columnChooser()) {\n <div class=\"strct-dg__chooser\">\n <button\n strct-button\n size=\"sm\"\n [class.is-open]=\"chooserOpen()\"\n aria-label=\"Choose columns\"\n (click)=\"chooserOpen.set(!chooserOpen())\"\n >\n <strct-icon name=\"settings\" [size]=\"14\" />\n </button>\n @if (chooserOpen()) {\n <div class=\"strct-dg__chooser-menu\">\n @for (col of columns(); track col.key) {\n <div class=\"strct-dg__chooser-item\">\n <strct-checkbox\n [checked]=\"!hiddenColumns().has(col.key)\"\n (checkedChange)=\"toggleColumn(col.key, $event)\"\n />\n <span>{{ col.label }}</span>\n </div>\n }\n </div>\n }\n </div>\n }\n <span class=\"strct-dg__count\">\n {{ sorted().length }} {{ sorted().length === 1 ? 'row' : 'rows' }}\n @if (selectedCount()) {\n <span class=\"strct-dg__count-sep\">|</span>\n <span class=\"strct-dg__count-sel\">{{ selectedCount() }} selected</span>\n }\n </span>\n </div>\n <div class=\"strct-dg__foot-right\">\n <strct-pagination [total]=\"sorted().length\" [pageSize]=\"pageSize()\" [(page)]=\"page\" />\n </div>\n </div>\n }\n `,\n host: {\n class: 'strct-dg-host',\n '[class.strct-dg-host--compact]': 'compact()',\n },\n styles: [\n `\n .strct-dg-host {\n display: block;\n }\n .strct-dg__scroll {\n flex: 1 1 auto;\n min-width: 0;\n overflow-x: auto;\n -webkit-overflow-scrolling: touch;\n }\n .strct-dg {\n width: 100%;\n border-collapse: collapse;\n font-size: 13px;\n border: 1px solid var(--b2);\n border-radius: 8px;\n overflow: hidden;\n box-shadow: var(--shadow-rest);\n background: var(--bg-2);\n }\n .strct-dg th,\n .strct-dg td {\n padding: 9px 13px;\n text-align: left;\n border-bottom: 1px solid var(--b1);\n }\n .strct-dg tbody td {\n background: var(--bg-1);\n }\n /* In dark mode, body cells should read slightly lighter than the header\n * so the grid feels like a raised surface rather than a recessed pit. */\n [data-theme='dark'] .strct-dg tbody td {\n background: var(--bg-3);\n }\n .strct-dg-host--compact .strct-dg th,\n .strct-dg-host--compact .strct-dg td {\n padding: 5px 11px;\n }\n .strct-dg th {\n position: relative;\n font-size: 11px;\n font-weight: 600;\n text-transform: uppercase;\n letter-spacing: 0.4px;\n color: var(--t2);\n background: var(--bg-2);\n white-space: nowrap;\n user-select: none;\n }\n .strct-dg__th--sortable {\n cursor: pointer;\n }\n .strct-dg__th--sortable:hover {\n color: var(--t1);\n }\n .strct-dg__th--sortable:focus-visible {\n outline: 2px solid var(--acc50);\n outline-offset: -2px;\n }\n .strct-dg__hd {\n display: inline-flex;\n align-items: center;\n gap: 5px;\n }\n .strct-dg__sorticon {\n color: var(--t3);\n }\n .strct-dg__th--sortable:hover .strct-dg__sorticon {\n color: var(--acc);\n }\n .strct-dg__resize {\n position: absolute;\n right: 0;\n top: 0;\n bottom: 0;\n width: 4px;\n cursor: col-resize;\n background: transparent;\n z-index: 2;\n }\n .strct-dg__resize:hover {\n background: var(--acc);\n }\n .strct-dg td {\n color: var(--t1);\n }\n .strct-dg tbody tr:last-child td {\n border-bottom: 0;\n }\n .strct-dg tbody tr:not(.strct-dg__detailrow):hover td {\n background: var(--acc-s);\n }\n .strct-dg__row--selected td {\n background: var(--acc-m);\n }\n .strct-dg__sel {\n width: 1%;\n white-space: nowrap;\n }\n .strct-dg__sel input {\n accent-color: var(--acc);\n width: 15px;\n height: 15px;\n cursor: pointer;\n }\n\n .strct-dg__expandcol,\n .strct-dg__expandcell {\n width: 1%;\n white-space: nowrap;\n }\n .strct-dg__expandbtn {\n display: inline-flex;\n padding: 3px;\n border: 0;\n border-radius: 4px;\n background: transparent;\n color: var(--t3);\n cursor: pointer;\n transition:\n transform 0.15s ease,\n color 0.15s ease;\n }\n .strct-dg__expandbtn:hover {\n color: var(--t1);\n background: var(--bg-3);\n }\n .strct-dg__expandbtn--open {\n transform: rotate(90deg);\n color: var(--acc);\n }\n .strct-dg__detailbtn {\n display: inline-flex;\n padding: 3px;\n border: 0;\n border-radius: 4px;\n background: transparent;\n color: var(--t3);\n cursor: pointer;\n transition:\n color 0.14s ease,\n background 0.14s ease;\n }\n .strct-dg__detailbtn:hover {\n color: var(--acc);\n background: var(--bg-3);\n }\n .strct-dg__detailbtn--active {\n color: var(--acc);\n background: var(--acc-m);\n }\n .strct-dg__detailrow td {\n background: var(--bg-2);\n padding: 0;\n }\n .strct-dg__detail {\n padding: 14px 16px;\n font-size: 13px;\n color: var(--t2);\n }\n\n /* Detail pane: grid collapses to one column, content opens beside it. */\n .strct-dg__layout {\n display: flex;\n align-items: flex-start;\n min-width: 0;\n }\n .strct-dg__layout--paned {\n gap: 0;\n }\n .strct-dg__layout--paned .strct-dg__scroll {\n flex: 0 0 auto;\n width: 260px;\n min-width: 260px;\n max-width: 260px;\n }\n .strct-dg__layout--paned .strct-dg {\n width: 260px;\n min-width: 260px;\n max-width: 260px;\n flex-shrink: 0;\n border-top-right-radius: 0;\n border-bottom-right-radius: 0;\n }\n .strct-dg__row--clickable {\n cursor: pointer;\n }\n .strct-dg__row--active td {\n background: var(--acc-m);\n }\n /* Caret on the active row that points toward the open detail pane. */\n .strct-dg__layout--paned .strct-dg__row--active td:last-child {\n position: relative;\n padding-right: 26px;\n }\n .strct-dg__layout--paned .strct-dg__row--active td:last-child::after {\n content: '';\n position: absolute;\n right: 11px;\n top: 50%;\n width: 6px;\n height: 6px;\n border-top: 1.6px solid var(--acc);\n border-right: 1.6px solid var(--acc);\n transform: translateY(-50%) rotate(45deg);\n }\n .strct-dg__pane {\n flex: 1;\n min-width: 0;\n align-self: stretch;\n background: var(--bg-1);\n border: 1px solid var(--b2);\n border-left: 2px solid var(--acc);\n border-radius: 8px;\n border-top-left-radius: 0;\n border-bottom-left-radius: 0;\n overflow: hidden;\n animation: strct-dg-pane-in 0.14s ease;\n }\n .strct-dg__pane-head {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: 10px;\n padding: 11px 14px;\n border-bottom: 1px solid var(--b1);\n font-size: 13px;\n font-weight: 600;\n color: var(--t1);\n }\n .strct-dg__pane-close {\n display: inline-flex;\n padding: 3px;\n border: 0;\n border-radius: 4px;\n background: transparent;\n color: var(--t3);\n cursor: pointer;\n }\n .strct-dg__pane-close:hover {\n color: var(--t1);\n background: var(--bg-3);\n }\n .strct-dg__pane-body {\n padding: 14px 16px;\n font-size: 13px;\n color: var(--t2);\n }\n @keyframes strct-dg-pane-in {\n from {\n opacity: 0;\n transform: translateX(8px);\n }\n }\n\n @keyframes strct-skeleton-pulse {\n 0%,\n 100% {\n opacity: 0.4;\n }\n 50% {\n opacity: 0.7;\n }\n }\n .strct-dg__skeleton-block {\n height: 12px;\n background: var(--bg-3);\n border-radius: var(--radius-sm);\n animation: strct-skeleton-pulse 1.4s ease infinite;\n }\n .strct-dg__skeleton-row td {\n border-bottom: 1px solid var(--b1);\n }\n .strct-dg__empty {\n text-align: center;\n color: var(--t3);\n padding: 22px;\n }\n /* Persistent action bar (toolbar) above the grid — always visible. */\n .strct-dg__toolbar {\n display: flex;\n align-items: center;\n gap: 8px;\n flex-wrap: wrap;\n padding: 8px 0;\n margin-bottom: 8px;\n border-bottom: 1px solid var(--b1);\n }\n\n .strct-dg__foot {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: 12px;\n margin-top: 12px;\n flex-wrap: wrap;\n }\n .strct-dg__foot-left {\n display: flex;\n align-items: center;\n gap: 12px;\n }\n .strct-dg__foot-right {\n display: flex;\n align-items: center;\n gap: 12px;\n }\n .strct-dg__chooser {\n position: relative;\n }\n .strct-dg__chooser-menu {\n position: absolute;\n bottom: calc(100% + 6px);\n left: 0;\n z-index: 10;\n min-width: 180px;\n background: var(--bg-1);\n border: 1px solid var(--b2);\n border-radius: 8px;\n box-shadow: var(--shadow-pop);\n padding: 6px;\n display: flex;\n flex-direction: column;\n gap: 2px;\n }\n .strct-dg__chooser-menu--right {\n left: auto;\n right: 0;\n }\n .strct-dg__chooser-item {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 5px 8px;\n border-radius: 6px;\n cursor: pointer;\n font-size: 12px;\n color: var(--t1);\n transition: background 0.1s ease;\n user-select: none;\n }\n .strct-dg__chooser-item:hover {\n background: var(--bg-3);\n }\n .strct-dg__count {\n font-size: 12px;\n color: var(--t2);\n }\n .strct-dg__count-sep {\n margin: 0 8px;\n color: var(--b2);\n }\n .strct-dg__count-sel {\n color: var(--acc);\n }\n `,\n ],\n})\nexport class StrctDatagrid {\n /** Column definitions. */\n readonly columns = input.required<StrctDatagridColumn[]>();\n /** Data rows. */\n readonly rows = input.required<StrctRow[]>();\n /** Rows per page (0 disables paging). */\n readonly pageSize = input(0);\n /** Enable row selection. */\n readonly selectable = input(false, { transform: booleanAttribute });\n /** Expand a row in place to reveal its detail template below it. */\n readonly expandable = input(false, { transform: booleanAttribute });\n /** Collapse the grid to a single column and open a side detail pane for the\n * clicked row (distinct from {@link expandable}). */\n readonly detailPane = input(false, { transform: booleanAttribute });\n /** Compact density mode. */\n readonly compact = input(false, { transform: booleanAttribute });\n /** Message shown when there are no rows. */\n readonly emptyText = input('No data');\n /** Show skeleton rows while data is loading. */\n readonly loading = input(false, { transform: booleanAttribute });\n /** Enable column resizing by dragging column headers. */\n readonly resizable = input(false, { transform: booleanAttribute });\n /** Show a column-chooser dropdown in the footer. */\n readonly columnChooser = input(false, { transform: booleanAttribute });\n /**\n * Stable row identity (property key or function). Set this for live-refreshing\n * data so selection, expansion and the active detail row survive re-fetches\n * that replace the row objects. Defaults to object identity.\n */\n readonly rowId = input<StrctRowId | null>(null);\n /** Emitted when the selection changes. */\n readonly selectionChange = output<StrctRow[]>();\n\n protected readonly detailDef = contentChild(StrctRowDetailDef);\n protected readonly actionBarDef = contentChild(StrctDatagridActionBar);\n private readonly cellDefs = contentChildren(StrctCellDef);\n private readonly cellMap = computed(() => {\n const m = new Map<string, TemplateRef<StrctCellContext>>();\n for (const d of this.cellDefs()) m.set(d.key(), d.template);\n return m;\n });\n\n readonly page = signal(1);\n private readonly sort = signal<{ key: string | null; dir: SortDir }>({ key: null, dir: 'asc' });\n /** Selection / expansion are tracked by row id (see {@link rowId}). */\n private readonly selected = signal<Set<unknown>>(new Set());\n protected readonly selectedCount = computed(() => this.selected().size);\n private readonly expandedRows = signal<Set<unknown>>(new Set());\n private readonly columnWidths = signal<Map<string, number>>(new Map());\n protected readonly hiddenColumns = signal<Set<string>>(new Set());\n protected readonly chooserOpen = signal(false);\n private resizeState: { key: string; startX: number; startWidth: number } | null = null;\n private readonly onMove = (e: MouseEvent) => this.onResizeMove(e);\n private readonly onUp = () => this.onResizeEnd();\n\n colWidth(key: string): string | null {\n const px = this.columnWidths().get(key);\n return px != null ? `${px}px` : null;\n }\n\n onResizeStart(e: MouseEvent, key: string) {\n e.preventDefault();\n const th = (e.target as HTMLElement).closest('th');\n if (!th) return;\n this.resizeState = { key, startX: e.clientX, startWidth: th.offsetWidth };\n document.addEventListener('mousemove', this.onMove);\n document.addEventListener('mouseup', this.onUp);\n }\n\n private onResizeMove(e: MouseEvent) {\n if (!this.resizeState) return;\n const diff = e.clientX - this.resizeState.startX;\n const newWidth = Math.max(40, this.resizeState.startWidth + diff);\n this.columnWidths.update((m) => {\n const next = new Map(m);\n next.set(this.resizeState!.key, newWidth);\n return next;\n });\n }\n\n private onResizeEnd() {\n this.resizeState = null;\n document.removeEventListener('mousemove', this.onMove);\n document.removeEventListener('mouseup', this.onUp);\n }\n\n private readonly activeId = signal<unknown>(null);\n protected readonly activeRow = computed(() => {\n const id = this.activeId();\n if (id == null) return null;\n return this.rows().find((r) => this.idOf(r) === id) ?? null;\n });\n\n protected readonly canExpand = computed(\n () => this.expandable() && !this.detailPane() && !!this.detailDef(),\n );\n protected readonly canDetail = computed(() => this.detailPane() && !!this.detailDef());\n protected readonly paneOpen = computed(\n () => this.detailPane() && !!this.detailDef() && !!this.activeRow(),\n );\n /** Only the first column is shown while the detail pane is open. */\n protected readonly visibleColumns = computed(() => {\n if (this.paneOpen()) return this.columns().slice(0, 1);\n const hidden = this.hiddenColumns();\n return this.columns().filter((c) => !hidden.has(c.key));\n });\n\n protected readonly sorted = computed(() => {\n const { key, dir } = this.sort();\n const data = [...this.rows()];\n if (!key) return data;\n const sign = dir === 'asc' ? 1 : -1;\n return data.sort((a, b) => sign * this.compare(a[key], b[key]));\n });\n\n protected readonly paged = computed(() => {\n const size = this.pageSize();\n if (size <= 0) return this.sorted();\n const start = (this.page() - 1) * size;\n return this.sorted().slice(start, start + size);\n });\n\n protected readonly allPageSelected = computed(() => {\n const rows = this.paged();\n return rows.length > 0 && rows.every((r) => this.selected().has(this.idOf(r)));\n });\n protected readonly somePageSelected = computed(\n () => !this.allPageSelected() && this.paged().some((r) => this.selected().has(this.idOf(r))),\n );\n\n /** Resolve a row's stable identity (defaults to the row object itself). */\n private idOf(row: StrctRow): unknown {\n const id = this.rowId();\n if (id == null) return row;\n return typeof id === 'function' ? id(row) : row[id];\n }\n\n protected rowKey(row: StrctRow): unknown {\n return this.idOf(row);\n }\n\n protected cellTemplate(key: string): TemplateRef<StrctCellContext> | null {\n return this.cellMap().get(key) ?? null;\n }\n\n constructor() {\n // Keep the page in range when the data set shrinks.\n effect(() => {\n const size = this.pageSize();\n if (size <= 0) return;\n const pageCount = Math.max(1, Math.ceil(this.sorted().length / size));\n if (this.page() > pageCount) this.page.set(pageCount);\n });\n }\n\n protected colspan(): number {\n return (\n this.visibleColumns().length +\n (this.selectable() ? 1 : 0) +\n (this.canExpand() ? 1 : 0) +\n (this.canDetail() ? 1 : 0)\n );\n }\n\n /** Toggle the detail pane for a row (triggered by its » button, not the row,\n * so row cells remain selectable for copy). */\n openDetail(row: StrctRow): void {\n const id = this.idOf(row);\n this.activeId.set(this.activeId() === id ? null : id);\n }\n\n closePane(): void {\n this.activeId.set(null);\n }\n\n sortBy(key: string): void {\n const current = this.sort();\n if (current.key !== key) {\n this.sort.set({ key, dir: 'asc' });\n } else if (current.dir === 'asc') {\n this.sort.set({ key, dir: 'desc' });\n } else {\n this.sort.set({ key: null, dir: 'asc' });\n }\n }\n\n protected sortIcon(key: string): string {\n const { key: k, dir } = this.sort();\n if (k !== key) return 'sortNone';\n return dir === 'asc' ? 'sortAsc' : 'sortDesc';\n }\n\n protected ariaSort(key: string): 'ascending' | 'descending' | 'none' {\n const { key: k, dir } = this.sort();\n if (k !== key) return 'none';\n return dir === 'asc' ? 'ascending' : 'descending';\n }\n\n protected onHeaderSpace(event: Event, key: string): void {\n event.preventDefault(); // stop page scroll\n this.sortBy(key);\n }\n\n toggleColumn(key: string, visible: boolean): void {\n this.hiddenColumns.update((set) => {\n const next = new Set(set);\n if (visible) next.delete(key);\n else next.add(key);\n return next;\n });\n }\n\n protected isSelected(row: StrctRow): boolean {\n return this.selected().has(this.idOf(row));\n }\n\n protected isExpanded(row: StrctRow): boolean {\n return this.expandedRows().has(this.idOf(row));\n }\n\n toggleExpand(row: StrctRow): void {\n const id = this.idOf(row);\n const next = new Set(this.expandedRows());\n if (next.has(id)) {\n next.delete(id);\n } else {\n next.add(id);\n }\n this.expandedRows.set(next);\n }\n\n toggleRow(row: StrctRow): void {\n const id = this.idOf(row);\n const next = new Set(this.selected());\n if (next.has(id)) {\n next.delete(id);\n } else {\n next.add(id);\n }\n this.commitSelection(next);\n }\n\n toggleAll(): void {\n const next = new Set(this.selected());\n const rows = this.paged();\n if (this.allPageSelected()) {\n rows.forEach((r) => next.delete(this.idOf(r)));\n } else {\n rows.forEach((r) => next.add(this.idOf(r)));\n }\n this.commitSelection(next);\n }\n\n clearSelection(): void {\n this.commitSelection(new Set());\n }\n\n /** Emit the current row objects whose id is selected (resolved against the\n * latest data, so consumers always get fresh references). */\n private commitSelection(next: Set<unknown>): void {\n this.selected.set(next);\n this.selectionChange.emit(this.rows().filter((r) => next.has(this.idOf(r))));\n }\n\n private compare(a: unknown, b: unknown): number {\n if (typeof a === 'number' && typeof b === 'number') return a - b;\n return String(a ?? '').localeCompare(String(b ?? ''), undefined, { numeric: true });\n }\n}\n","import { ChangeDetectionStrategy, Component, ViewEncapsulation, input } from '@angular/core';\n\n/** Timeline node state colors. */\nexport type StrctTimelineState = 'default' | 'current' | 'success' | 'warning' | 'critical';\n\n/** Vertical timeline container. Wraps `<strct-timeline-item>` children. */\n@Component({\n selector: 'strct-timeline',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n template: `<ng-content />`,\n host: { class: 'strct-tl' },\n styles: [\n `\n .strct-tl {\n display: flex;\n flex-direction: column;\n }\n `,\n ],\n})\nexport class StrctTimeline {}\n\n/** A timeline entry: a node on the rail plus a title and projected body. */\n@Component({\n selector: 'strct-timeline-item',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n template: `\n <div class=\"strct-tli__rail\">\n <span class=\"strct-tli__node\"></span>\n <span class=\"strct-tli__line\"></span>\n </div>\n <div class=\"strct-tli__content\">\n <div class=\"strct-tli__title\">{{ title() }}</div>\n <div class=\"strct-tli__body\"><ng-content /></div>\n </div>\n `,\n host: {\n class: 'strct-tli',\n '[class.strct-tli--current]': \"state() === 'current'\",\n '[class.strct-tli--success]': \"state() === 'success'\",\n '[class.strct-tli--warning]': \"state() === 'warning'\",\n '[class.strct-tli--critical]': \"state() === 'critical'\",\n },\n styles: [\n `\n .strct-tli {\n display: flex;\n gap: 12px;\n }\n .strct-tli__rail {\n display: flex;\n flex-direction: column;\n align-items: center;\n }\n .strct-tli__node {\n width: 11px;\n height: 11px;\n border-radius: 50%;\n margin-top: 3px;\n flex-shrink: 0;\n background: var(--bg-1);\n border: 2px solid var(--b3);\n }\n .strct-tli__line {\n flex: 1;\n width: 2px;\n background: var(--b2);\n margin: 4px 0;\n }\n .strct-tli:last-child .strct-tli__line {\n display: none;\n }\n .strct-tli__content {\n padding-bottom: 18px;\n }\n .strct-tli__title {\n font-size: 13px;\n font-weight: 600;\n color: var(--t1);\n }\n .strct-tli__body {\n margin-top: 3px;\n font-size: 13px;\n color: var(--t2);\n }\n\n .strct-tli--current .strct-tli__node {\n border-color: var(--acc);\n background: var(--acc-m);\n box-shadow: 0 0 0 3px var(--acc18);\n }\n .strct-tli--success .strct-tli__node {\n border-color: var(--success);\n background: var(--success);\n }\n .strct-tli--warning .strct-tli__node {\n border-color: var(--warning);\n background: var(--warning);\n }\n .strct-tli--critical .strct-tli__node {\n border-color: var(--critical);\n background: var(--critical);\n }\n `,\n ],\n})\nexport class StrctTimelineItem {\n /** Dialog title. */\n readonly title = input.required<string>();\n /** State. */\n readonly state = input<StrctTimelineState>('default');\n}\n","import { ChangeDetectionStrategy, Component, ViewEncapsulation, input } from '@angular/core';\n\n/** Key/value definition list. Wraps `<strct-stack-item>` rows. */\n@Component({\n selector: 'strct-stack',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n template: `<ng-content />`,\n host: { class: 'strct-stack' },\n styles: [\n `\n .strct-stack {\n display: block;\n border: 1px solid var(--b2);\n border-radius: 8px;\n overflow: hidden;\n }\n `,\n ],\n})\nexport class StrctStack {}\n\n/** A label + value row. The value is projected content. */\n@Component({\n selector: 'strct-stack-item',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n template: `\n <span class=\"strct-stack__label\">{{ label() }}</span>\n <span class=\"strct-stack__value\"><ng-content /></span>\n `,\n host: { class: 'strct-stack__item' },\n styles: [\n `\n .strct-stack__item {\n display: grid;\n grid-template-columns: minmax(120px, 34%) 1fr;\n gap: 12px;\n padding: 10px 14px;\n border-bottom: 1px solid var(--b1);\n font-size: 13px;\n }\n .strct-stack__item:last-child {\n border-bottom: 0;\n }\n .strct-stack__item:nth-child(even) {\n background: var(--bg-2);\n }\n .strct-stack__label {\n color: var(--t2);\n }\n .strct-stack__value {\n color: var(--t1);\n }\n `,\n ],\n})\nexport class StrctStackItem {\n /** Label text. */\n readonly label = input.required<string>();\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n ViewEncapsulation,\n booleanAttribute,\n computed,\n input,\n} from '@angular/core';\n\n/** Chart / gauge / sparkline status colors. */\nexport type StrctChartStatus = 'accent' | 'success' | 'warning' | 'critical';\n\nconst STROKE: Record<StrctChartStatus, string> = {\n accent: 'var(--acc)',\n success: 'var(--success)',\n warning: 'var(--warning)',\n critical: 'var(--critical)',\n};\n\n/**\n * Tiny inline trend line. `<strct-sparkline [data]=\"[3,5,4,8,6,9]\" area />`.\n */\n@Component({\n selector: 'strct-sparkline',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n template: `\n <svg\n class=\"strct-spark__svg\"\n viewBox=\"0 0 100 30\"\n preserveAspectRatio=\"none\"\n [style.width.px]=\"width()\"\n [style.height.px]=\"height()\"\n >\n @if (area()) {\n <polygon class=\"strct-spark__area\" [attr.points]=\"areaPoints()\" [attr.fill]=\"color()\" />\n }\n <polyline\n class=\"strct-spark__line\"\n fill=\"none\"\n [attr.points]=\"linePoints()\"\n [attr.stroke]=\"color()\"\n />\n </svg>\n `,\n host: { class: 'strct-spark' },\n styles: [\n `\n .strct-spark {\n display: inline-block;\n line-height: 0;\n }\n .strct-spark__line {\n stroke-width: 1.6;\n vector-effect: non-scaling-stroke;\n stroke-linejoin: round;\n stroke-linecap: round;\n }\n .strct-spark__area {\n opacity: 0.14;\n }\n `,\n ],\n})\nexport class StrctSparkline {\n /** Data array. */\n readonly data = input.required<number[]>();\n /** Visual status color. */\n readonly status = input<StrctChartStatus>('accent');\n /** Fill the area under the line. */\n readonly area = input(false, { transform: booleanAttribute });\n /** Width (CSS length). */\n readonly width = input(100);\n /** Height in pixels. */\n readonly height = input(30);\n\n protected readonly color = computed(() => STROKE[this.status()]);\n\n private readonly points = computed(() => {\n const d = this.data();\n if (!d.length) return [] as { x: number; y: number }[];\n const min = Math.min(...d);\n const max = Math.max(...d);\n const span = max - min || 1;\n const stepX = d.length > 1 ? 100 / (d.length - 1) : 0;\n return d.map((v, i) => ({ x: i * stepX, y: 29 - ((v - min) / span) * 28 }));\n });\n\n protected readonly linePoints = computed(() =>\n this.points()\n .map((p) => `${p.x},${p.y}`)\n .join(' '),\n );\n\n protected readonly areaPoints = computed(() => {\n const pts = this.points();\n if (!pts.length) return '';\n return `0,30 ${pts.map((p) => `${p.x},${p.y}`).join(' ')} 100,30`;\n });\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n ViewEncapsulation,\n computed,\n input,\n} from '@angular/core';\nimport { StrctChartStatus } from './sparkline';\n\n/** Chart rendering types (line, area, bar). */\nexport type StrctChartType = 'line' | 'area' | 'bar';\n\nconst COLOR: Record<StrctChartStatus, string> = {\n accent: 'var(--acc)',\n success: 'var(--success)',\n warning: 'var(--warning)',\n critical: 'var(--critical)',\n};\n\nconst VB_W = 320;\nconst PAD = { l: 6, r: 6, t: 10, b: 10 };\n\n/**\n * Single-series chart (line / area / bar). Dependency-free SVG, token-coloured.\n * <strct-chart [data]=\"cpu\" type=\"area\" [labels]=\"hours\" status=\"warning\" />\n */\n@Component({\n selector: 'strct-chart',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n template: `\n <svg\n class=\"strct-chart__svg\"\n [attr.viewBox]=\"'0 0 ' + vbW + ' ' + height()\"\n preserveAspectRatio=\"none\"\n [style.height.px]=\"height()\"\n >\n @for (g of gridY(); track g) {\n <line\n class=\"strct-chart__grid\"\n [attr.x1]=\"pad.l\"\n [attr.x2]=\"vbW - pad.r\"\n [attr.y1]=\"g\"\n [attr.y2]=\"g\"\n />\n }\n\n @if (type() === 'bar') {\n @for (b of bars(); track $index) {\n <rect\n class=\"strct-chart__bar\"\n [attr.x]=\"b.x\"\n [attr.y]=\"b.y\"\n [attr.width]=\"b.w\"\n [attr.height]=\"b.h\"\n [attr.fill]=\"color()\"\n />\n }\n } @else {\n @if (type() === 'area') {\n <polygon class=\"strct-chart__area\" [attr.points]=\"areaPoints()\" [attr.fill]=\"color()\" />\n }\n <polyline\n class=\"strct-chart__line\"\n fill=\"none\"\n [attr.points]=\"linePoints()\"\n [attr.stroke]=\"color()\"\n />\n @for (p of points(); track $index) {\n <circle\n class=\"strct-chart__dot\"\n [attr.cx]=\"p.x\"\n [attr.cy]=\"p.y\"\n r=\"2\"\n [attr.fill]=\"color()\"\n />\n }\n }\n </svg>\n\n @if (labels().length) {\n <div class=\"strct-chart__labels\">\n @for (l of labels(); track $index) {\n <span>{{ l }}</span>\n }\n </div>\n }\n `,\n host: { class: 'strct-chart' },\n styles: [\n `\n .strct-chart {\n display: block;\n }\n .strct-chart__svg {\n width: 100%;\n display: block;\n }\n .strct-chart__grid {\n stroke: var(--b1);\n stroke-width: 1;\n vector-effect: non-scaling-stroke;\n }\n .strct-chart__line {\n stroke-width: 2;\n vector-effect: non-scaling-stroke;\n stroke-linejoin: round;\n stroke-linecap: round;\n }\n .strct-chart__area {\n opacity: 0.13;\n }\n .strct-chart__dot {\n stroke: var(--bg-1);\n stroke-width: 1.5;\n }\n .strct-chart__bar {\n rx: 1.5;\n }\n .strct-chart__labels {\n display: flex;\n justify-content: space-between;\n margin-top: 6px;\n font-size: 10px;\n color: var(--t3);\n }\n `,\n ],\n})\nexport class StrctChart {\n /** Data array. */\n readonly data = input.required<number[]>();\n /** Visual type / variant. */\n readonly type = input<StrctChartType>('line');\n /** X-axis labels. */\n readonly labels = input<string[]>([]);\n /** Visual status color. */\n readonly status = input<StrctChartStatus>('accent');\n /** Height in pixels. */\n readonly height = input(160);\n /** Override the top of the value axis (defaults to the data max + headroom). */\n readonly max = input<number | null>(null);\n\n protected readonly vbW = VB_W;\n protected readonly pad = PAD;\n protected readonly color = computed(() => COLOR[this.status()]);\n\n private readonly maxValue = computed(() => {\n const explicit = this.max();\n if (explicit != null) return explicit || 1;\n const m = Math.max(0, ...this.data());\n return m === 0 ? 1 : m * 1.1;\n });\n\n private chartH(): number {\n return this.height() - PAD.t - PAD.b;\n }\n\n protected readonly points = computed(() => {\n const d = this.data();\n const chartW = VB_W - PAD.l - PAD.r;\n const max = this.maxValue();\n const stepX = d.length > 1 ? chartW / (d.length - 1) : 0;\n return d.map((v, i) => ({\n x: PAD.l + i * stepX,\n y: PAD.t + (1 - Math.max(0, v) / max) * this.chartH(),\n }));\n });\n\n protected readonly linePoints = computed(() =>\n this.points()\n .map((p) => `${p.x},${p.y}`)\n .join(' '),\n );\n\n protected readonly areaPoints = computed(() => {\n const pts = this.points();\n if (!pts.length) return '';\n const base = this.height() - PAD.b;\n return `${PAD.l},${base} ${pts.map((p) => `${p.x},${p.y}`).join(' ')} ${VB_W - PAD.r},${base}`;\n });\n\n protected readonly bars = computed(() => {\n const d = this.data();\n const chartW = VB_W - PAD.l - PAD.r;\n const max = this.maxValue();\n const base = this.height() - PAD.b;\n const slot = d.length ? chartW / d.length : chartW;\n const w = slot * 0.6;\n return d.map((v, i) => {\n const h = (Math.max(0, v) / max) * this.chartH();\n return { x: PAD.l + i * slot + (slot - w) / 2, y: base - h, w, h };\n });\n });\n\n protected readonly gridY = computed(() => {\n const top = PAD.t;\n const bottom = this.height() - PAD.b;\n return [top, (top + bottom) / 2, bottom];\n });\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n ViewEncapsulation,\n computed,\n input,\n} from '@angular/core';\n\n/** A single weighted slice of a donut chart. */\nexport interface StrctDonutSegment {\n value: number;\n label?: string;\n color?: string;\n}\n\nconst PALETTE = [\n 'var(--acc)',\n 'var(--success)',\n 'var(--warning)',\n 'var(--critical)',\n 'var(--acc50)',\n 'var(--t3)',\n];\n\n/**\n * Donut / ring chart from weighted segments.\n * <strct-donut [segments]=\"[{value:6,label:'Running'},{value:2,label:'Off'}]\"\n * centerValue=\"8\" centerLabel=\"VMs\" />\n */\n@Component({\n selector: 'strct-donut',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n template: `\n <div class=\"strct-donut__wrap\" [style.width.px]=\"size()\" [style.height.px]=\"size()\">\n <svg\n [attr.viewBox]=\"'0 0 ' + size() + ' ' + size()\"\n [style.width.px]=\"size()\"\n [style.height.px]=\"size()\"\n >\n <g [attr.transform]=\"'rotate(-90 ' + half() + ' ' + half() + ')'\">\n <circle\n class=\"strct-donut__track\"\n [attr.cx]=\"half()\"\n [attr.cy]=\"half()\"\n [attr.r]=\"radius()\"\n fill=\"none\"\n [attr.stroke-width]=\"thickness()\"\n />\n @for (arc of arcs(); track $index) {\n <circle\n [attr.cx]=\"half()\"\n [attr.cy]=\"half()\"\n [attr.r]=\"radius()\"\n fill=\"none\"\n [attr.stroke]=\"arc.color\"\n [attr.stroke-width]=\"thickness()\"\n [attr.stroke-dasharray]=\"arc.len + ' ' + (circumference() - arc.len)\"\n [attr.stroke-dashoffset]=\"-arc.offset\"\n />\n }\n </g>\n </svg>\n @if (centerValue() || centerLabel()) {\n <div class=\"strct-donut__center\">\n <div class=\"strct-donut__value\">{{ centerValue() }}</div>\n <div class=\"strct-donut__label\">{{ centerLabel() }}</div>\n </div>\n }\n </div>\n `,\n host: { class: 'strct-donut' },\n styles: [\n `\n .strct-donut {\n display: inline-block;\n }\n .strct-donut__wrap {\n position: relative;\n }\n .strct-donut__track {\n stroke: var(--bg-3);\n }\n .strct-donut__center {\n position: absolute;\n inset: 0;\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n pointer-events: none;\n }\n .strct-donut__value {\n font-size: 20px;\n font-weight: 600;\n color: var(--t1);\n line-height: 1;\n }\n .strct-donut__label {\n font-size: 11px;\n color: var(--t2);\n margin-top: 2px;\n }\n `,\n ],\n})\nexport class StrctDonut {\n /** Weighted segments. */\n readonly segments = input.required<StrctDonutSegment[]>();\n /** Size variant. */\n readonly size = input(120);\n /** Stroke thickness in pixels. */\n readonly thickness = input(14);\n /** Value shown in the donut center. */\n readonly centerValue = input<string | number>('');\n /** Label shown in the donut center. */\n readonly centerLabel = input('');\n\n protected readonly half = computed(() => this.size() / 2);\n protected readonly radius = computed(() => (this.size() - this.thickness()) / 2);\n protected readonly circumference = computed(() => 2 * Math.PI * this.radius());\n\n protected readonly arcs = computed(() => {\n const segs = this.segments();\n const total = segs.reduce((s, x) => s + Math.max(0, x.value), 0) || 1;\n const c = this.circumference();\n let offset = 0;\n return segs.map((seg, i) => {\n const len = (Math.max(0, seg.value) / total) * c;\n const arc = { color: seg.color ?? PALETTE[i % PALETTE.length], len, offset };\n offset += len;\n return arc;\n });\n });\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n ViewEncapsulation,\n computed,\n input,\n} from '@angular/core';\nimport { StrctChartStatus } from './sparkline';\n\nconst COLOR: Record<StrctChartStatus, string> = {\n accent: 'var(--acc)',\n success: 'var(--success)',\n warning: 'var(--warning)',\n critical: 'var(--critical)',\n};\n\n/**\n * 270° radial gauge for a 0–100 value (CPU, memory, capacity …).\n * <strct-gauge [value]=\"72\" status=\"warning\" label=\"CPU\" />\n */\n@Component({\n selector: 'strct-gauge',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n template: `\n <div class=\"strct-gauge__wrap\" [style.width.px]=\"size()\" [style.height.px]=\"size()\">\n <svg\n [attr.viewBox]=\"'0 0 ' + size() + ' ' + size()\"\n [style.width.px]=\"size()\"\n [style.height.px]=\"size()\"\n >\n <g [attr.transform]=\"'rotate(135 ' + half() + ' ' + half() + ')'\">\n <circle\n class=\"strct-gauge__track\"\n [attr.cx]=\"half()\"\n [attr.cy]=\"half()\"\n [attr.r]=\"radius()\"\n fill=\"none\"\n [attr.stroke-width]=\"thickness()\"\n stroke-linecap=\"round\"\n [attr.stroke-dasharray]=\"trackDash()\"\n />\n <circle\n class=\"strct-gauge__value\"\n [attr.cx]=\"half()\"\n [attr.cy]=\"half()\"\n [attr.r]=\"radius()\"\n fill=\"none\"\n [attr.stroke]=\"color()\"\n [attr.stroke-width]=\"thickness()\"\n stroke-linecap=\"round\"\n [attr.stroke-dasharray]=\"valueDash()\"\n />\n </g>\n </svg>\n <div class=\"strct-gauge__center\">\n <div class=\"strct-gauge__num\">{{ clamped() }}<span class=\"strct-gauge__pct\">%</span></div>\n @if (label()) {\n <div class=\"strct-gauge__label\">{{ label() }}</div>\n }\n </div>\n </div>\n `,\n host: { class: 'strct-gauge' },\n styles: [\n `\n .strct-gauge {\n display: inline-block;\n }\n .strct-gauge__wrap {\n position: relative;\n }\n .strct-gauge__track {\n stroke: var(--bg-3);\n }\n .strct-gauge__value {\n transition: stroke-dasharray 0.4s ease;\n }\n .strct-gauge__center {\n position: absolute;\n inset: 0;\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n pointer-events: none;\n }\n .strct-gauge__num {\n font-size: 22px;\n font-weight: 600;\n color: var(--t1);\n line-height: 1;\n }\n .strct-gauge__pct {\n font-size: 12px;\n color: var(--t2);\n margin-left: 1px;\n }\n .strct-gauge__label {\n font-size: 11px;\n color: var(--t2);\n margin-top: 3px;\n }\n `,\n ],\n})\nexport class StrctGauge {\n /** Current value. */\n readonly value = input(0);\n /** Visual status color. */\n readonly status = input<StrctChartStatus>('accent');\n /** Label text. */\n readonly label = input('');\n /** Size variant. */\n readonly size = input(120);\n /** Stroke thickness in pixels. */\n readonly thickness = input(12);\n\n protected readonly clamped = computed(() => Math.round(Math.max(0, Math.min(100, this.value()))));\n protected readonly half = computed(() => this.size() / 2);\n protected readonly radius = computed(() => (this.size() - this.thickness()) / 2);\n protected readonly color = computed(() => COLOR[this.status()]);\n\n private readonly circumference = computed(() => 2 * Math.PI * this.radius());\n\n protected readonly trackDash = computed(() => {\n const c = this.circumference();\n return `${0.75 * c} ${c}`;\n });\n\n protected readonly valueDash = computed(() => {\n const c = this.circumference();\n return `${(this.clamped() / 100) * 0.75 * c} ${c}`;\n });\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n ViewEncapsulation,\n booleanAttribute,\n computed,\n input,\n output,\n} from '@angular/core';\nimport { StrctIcon } from '../icon/icon';\n\n/** Alert visual types. */\nexport type StrctAlertType = 'info' | 'success' | 'warning' | 'critical';\n\n/** Inline contextual banner. `<strct-alert type=\"warning\">…</strct-alert>`. */\n@Component({\n selector: 'strct-alert',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n imports: [StrctIcon],\n template: `\n <strct-icon [name]=\"icon()\" [size]=\"15\" />\n <div class=\"strct-alert__body\"><ng-content /></div>\n @if (closable()) {\n <button type=\"button\" class=\"strct-alert__close\" aria-label=\"Dismiss\" (click)=\"closed.emit()\">\n <strct-icon name=\"close\" [size]=\"13\" />\n </button>\n }\n `,\n host: {\n class: 'strct-alert',\n role: 'status',\n '[class.strct-alert--success]': \"type() === 'success'\",\n '[class.strct-alert--warning]': \"type() === 'warning'\",\n '[class.strct-alert--critical]': \"type() === 'critical'\",\n },\n styles: [\n `\n /* Restrained: neutral surface with a colored left rail + colored icon,\n instead of a fully tinted background. */\n .strct-alert {\n display: flex;\n align-items: flex-start;\n gap: var(--space-2);\n padding: var(--space-2) var(--space-3);\n border-radius: var(--radius-lg);\n font-size: 13px;\n color: var(--t1);\n background: var(--bg-1);\n border: 1px solid var(--b2);\n border-left: 3px solid var(--acc);\n }\n .strct-alert strct-icon {\n color: var(--acc);\n margin-top: 1px;\n flex-shrink: 0;\n }\n .strct-alert__body {\n flex: 1;\n color: var(--t1);\n }\n .strct-alert__close {\n flex-shrink: 0;\n display: inline-flex;\n padding: 2px;\n margin: -2px -2px 0 0;\n border: 0;\n background: transparent;\n color: var(--t3);\n cursor: pointer;\n border-radius: 4px;\n }\n .strct-alert__close:hover {\n color: var(--t1);\n background: var(--bg-3);\n }\n\n .strct-alert--success {\n border-left-color: var(--success);\n }\n .strct-alert--success strct-icon {\n color: var(--success);\n }\n .strct-alert--warning {\n border-left-color: var(--warning);\n }\n .strct-alert--warning strct-icon {\n color: var(--warning);\n }\n .strct-alert--critical {\n border-left-color: var(--critical);\n }\n .strct-alert--critical strct-icon {\n color: var(--critical);\n }\n `,\n ],\n})\nexport class StrctAlert {\n /** Visual type / variant. */\n readonly type = input<StrctAlertType>('info');\n /** Show a dismiss button. */\n readonly closable = input(false, { transform: booleanAttribute });\n /** Emitted when the alert is dismissed. */\n readonly closed = output<void>();\n\n protected readonly icon = computed(() => {\n switch (this.type()) {\n case 'success':\n return 'success';\n case 'warning':\n return 'warning';\n case 'critical':\n return 'critical';\n default:\n return 'info';\n }\n });\n}\n","import {\n DOCUMENT,\n Directive,\n ElementRef,\n HostListener,\n Renderer2,\n inject,\n input,\n} from '@angular/core';\n\n/** Tooltip placement relative to the host element. */\nexport type StrctTooltipPosition = 'top' | 'bottom' | 'left' | 'right';\n\n/**\n * Lightweight hover/focus tooltip. Renders a fixed-positioned bubble so it is\n * never clipped by an ancestor's `overflow`.\n * <button strct-button strctTooltip=\"More info\">?</button>\n */\n@Directive({ selector: '[strctTooltip]' })\nexport class StrctTooltip {\n private readonly host = inject(ElementRef<HTMLElement>);\n private readonly renderer = inject(Renderer2);\n private readonly doc = inject(DOCUMENT);\n private bubble: HTMLElement | null = null;\n\n /** Tooltip text. */\n readonly strctTooltip = input.required<string>();\n /** Tooltip placement relative to the host. */\n readonly tooltipPosition = input<StrctTooltipPosition>('top');\n\n @HostListener('mouseenter')\n @HostListener('focus')\n protected show(): void {\n const text = this.strctTooltip();\n if (!text || this.bubble) return;\n\n const el = this.renderer.createElement('span') as HTMLElement;\n this.renderer.appendChild(el, this.renderer.createText(text));\n const s = el.style;\n s.position = 'fixed';\n s.zIndex = '1300';\n s.pointerEvents = 'none';\n s.whiteSpace = 'nowrap';\n s.padding = '5px 8px';\n s.fontSize = '11px';\n s.fontWeight = '500';\n s.lineHeight = '1';\n s.color = 'var(--t1)';\n s.background = 'var(--bg-0)';\n s.border = '1px solid var(--b3)';\n s.borderRadius = '5px';\n s.boxShadow = 'var(--shh)';\n s.top = '0';\n s.left = '0';\n s.visibility = 'hidden';\n\n // Append to <body> so the fixed bubble can't be trapped by a transformed\n // ancestor's containing block (e.g. a translated speed-dial / animation).\n this.renderer.appendChild(this.doc.body, el);\n this.bubble = el;\n this.place(el);\n }\n\n @HostListener('mouseleave')\n @HostListener('blur')\n protected hide(): void {\n if (this.bubble) {\n this.renderer.removeChild(this.doc.body, this.bubble);\n this.bubble = null;\n }\n }\n\n private place(el: HTMLElement): void {\n const a = this.host.nativeElement.getBoundingClientRect();\n const w = el.offsetWidth;\n const h = el.offsetHeight;\n const gap = 7;\n let top: number;\n let left: number;\n\n switch (this.tooltipPosition()) {\n case 'bottom':\n top = a.bottom + gap;\n left = a.left + a.width / 2 - w / 2;\n break;\n case 'left':\n left = a.left - gap - w;\n top = a.top + a.height / 2 - h / 2;\n break;\n case 'right':\n left = a.right + gap;\n top = a.top + a.height / 2 - h / 2;\n break;\n default:\n top = a.top - gap - h;\n left = a.left + a.width / 2 - w / 2;\n }\n\n const m = 4;\n left = Math.max(m, Math.min(left, window.innerWidth - w - m));\n top = Math.max(m, Math.min(top, window.innerHeight - h - m));\n el.style.left = `${Math.round(left)}px`;\n el.style.top = `${Math.round(top)}px`;\n el.style.visibility = 'visible';\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n ViewEncapsulation,\n ElementRef,\n HostListener,\n inject,\n input,\n signal,\n} from '@angular/core';\nimport { StrctOverlay, StrctOverlayPlacement } from '../overlay/overlay';\n\n/** Signpost popover placement. */\nexport type StrctSignpostPosition = 'top' | 'bottom' | 'left' | 'right';\n\n/**\n * A click-triggered popover with an arrow, for contextual help / detail.\n * <strct-signpost position=\"right\">\n * <button strct-button size=\"sm\" strctSignpostTrigger>?</button>\n * <h4>Title</h4>\n * <p>Any projected content…</p>\n * </strct-signpost>\n */\n@Component({\n selector: 'strct-signpost',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n imports: [StrctOverlay],\n template: `\n <div\n #trigger\n class=\"strct-sp__trigger\"\n role=\"button\"\n tabindex=\"0\"\n (click)=\"toggle()\"\n (keydown.enter)=\"toggle()\"\n (keydown.space)=\"toggle()\"\n >\n <ng-content select=\"[strctSignpostTrigger]\" />\n </div>\n @if (open()) {\n <div\n class=\"strct-sp__panel\"\n [class]=\"'strct-sp__panel--' + position()\"\n role=\"dialog\"\n [strctOverlay]=\"trigger\"\n [strctOverlayPlacement]=\"overlayPlacement()\"\n >\n <ng-content />\n </div>\n }\n `,\n host: { class: 'strct-sp' },\n styles: [\n `\n .strct-sp {\n position: relative;\n display: inline-block;\n }\n .strct-sp__trigger {\n display: inline-flex;\n }\n .strct-sp__panel {\n position: absolute;\n z-index: 300;\n width: max-content;\n max-width: 280px;\n padding: 12px 14px;\n font-size: 13px;\n color: var(--t1);\n background: var(--bg-1);\n border: 1px solid var(--b2);\n border-radius: 8px;\n box-shadow: var(--shh);\n animation: strct-sp-in 0.11s ease;\n }\n .strct-sp__panel h4 {\n margin: 0 0 6px;\n font-size: 13px;\n font-weight: 600;\n }\n .strct-sp__panel p {\n margin: 0;\n color: var(--t2);\n }\n .strct-sp__panel::before {\n content: '';\n position: absolute;\n width: 9px;\n height: 9px;\n background: var(--bg-1);\n border: 1px solid var(--b2);\n border-right: 0;\n border-bottom: 0;\n }\n .strct-sp__panel--bottom {\n top: calc(100% + 9px);\n left: 0;\n }\n .strct-sp__panel--bottom::before {\n top: -5px;\n left: 16px;\n transform: rotate(45deg);\n }\n .strct-sp__panel--top {\n bottom: calc(100% + 9px);\n left: 0;\n }\n .strct-sp__panel--top::before {\n bottom: -5px;\n left: 16px;\n transform: rotate(225deg);\n }\n .strct-sp__panel--right {\n left: calc(100% + 9px);\n top: 0;\n }\n .strct-sp__panel--right::before {\n left: -5px;\n top: 14px;\n transform: rotate(-45deg);\n }\n .strct-sp__panel--left {\n right: calc(100% + 9px);\n top: 0;\n }\n .strct-sp__panel--left::before {\n right: -5px;\n top: 14px;\n transform: rotate(135deg);\n }\n @keyframes strct-sp-in {\n from {\n opacity: 0;\n transform: scale(0.97);\n }\n }\n `,\n ],\n})\nexport class StrctSignpost {\n private readonly host = inject(ElementRef<HTMLElement>);\n /** Popover placement relative to the trigger. */\n readonly position = input<StrctSignpostPosition>('bottom');\n readonly open = signal(false);\n\n toggle(): void {\n this.open.update((v) => !v);\n }\n close(): void {\n this.open.set(false);\n }\n\n protected overlayPlacement(): StrctOverlayPlacement {\n switch (this.position()) {\n case 'top':\n return 'top-start';\n case 'right':\n return 'right';\n case 'left':\n return 'left';\n default:\n return 'bottom-start';\n }\n }\n\n @HostListener('document:click', ['$event'])\n protected onDocClick(event: MouseEvent): void {\n if (this.open() && !this.host.nativeElement.contains(event.target as Node)) {\n this.close();\n }\n }\n\n @HostListener('document:keydown.escape')\n protected onEscape(): void {\n this.close();\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n Injectable,\n ViewEncapsulation,\n inject,\n signal,\n} from '@angular/core';\nimport { StrctIcon } from '../icon/icon';\n\n/** Toast visual types. */\nexport type StrctToastType = 'info' | 'success' | 'warning' | 'critical';\n\n/** A single toast notification. */\nexport interface StrctToast {\n id: number;\n type: StrctToastType;\n message: string;\n /** Auto-dismiss after this many ms; 0 keeps it until dismissed. */\n duration: number;\n}\n\n/** Options passed when creating a toast. */\nexport interface StrctToastOptions {\n type?: StrctToastType;\n duration?: number;\n}\n\n/**\n * Queues transient notifications. Render `<strct-toast-outlet />` once near the\n * app root, then call from anywhere:\n * inject(StrctToastService).success('Saved');\n */\n@Injectable({ providedIn: 'root' })\nexport class StrctToastService {\n private counter = 0;\n private readonly _toasts = signal<StrctToast[]>([]);\n readonly toasts = this._toasts.asReadonly();\n\n show(message: string, options: StrctToastOptions = {}): number {\n const id = ++this.counter;\n const duration = options.duration ?? 4000;\n this._toasts.update((list) => [\n ...list,\n { id, type: options.type ?? 'info', message, duration },\n ]);\n if (duration > 0) {\n setTimeout(() => this.dismiss(id), duration);\n }\n return id;\n }\n\n info(message: string, duration?: number) {\n return this.show(message, { type: 'info', duration });\n }\n success(message: string, duration?: number) {\n return this.show(message, { type: 'success', duration });\n }\n warning(message: string, duration?: number) {\n return this.show(message, { type: 'warning', duration });\n }\n critical(message: string, duration?: number) {\n return this.show(message, { type: 'critical', duration });\n }\n\n dismiss(id: number): void {\n this._toasts.update((list) => list.filter((t) => t.id !== id));\n }\n\n clear(): void {\n this._toasts.set([]);\n }\n}\n\nconst TOAST_ICON: Record<StrctToastType, string> = {\n info: 'info',\n success: 'success',\n warning: 'warning',\n critical: 'critical',\n};\n\n/** Renders the toast stack. Place once, typically just inside the app shell. */\n@Component({\n selector: 'strct-toast-outlet',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n imports: [StrctIcon],\n template: `\n <div class=\"strct-toasts\" role=\"region\" aria-label=\"Notifications\" aria-live=\"polite\">\n @for (toast of service.toasts(); track toast.id) {\n <div\n class=\"strct-toast\"\n [class.strct-toast--success]=\"toast.type === 'success'\"\n [class.strct-toast--warning]=\"toast.type === 'warning'\"\n [class.strct-toast--critical]=\"toast.type === 'critical'\"\n >\n <strct-icon [name]=\"icon(toast.type)\" [size]=\"15\" />\n <span class=\"strct-toast__msg\">{{ toast.message }}</span>\n <button\n type=\"button\"\n class=\"strct-toast__close\"\n aria-label=\"Dismiss\"\n (click)=\"service.dismiss(toast.id)\"\n >\n <strct-icon name=\"close\" [size]=\"13\" />\n </button>\n </div>\n }\n </div>\n `,\n styles: [\n `\n .strct-toasts {\n position: fixed;\n top: var(--space-4);\n right: var(--space-4);\n z-index: 1200;\n display: flex;\n flex-direction: column;\n gap: var(--space-2);\n max-width: 360px;\n pointer-events: none;\n }\n .strct-toast {\n pointer-events: auto;\n display: flex;\n align-items: flex-start;\n gap: var(--space-2);\n padding: var(--space-3);\n font-size: 13px;\n color: var(--t1);\n background: var(--bg-1);\n border: 1px solid var(--b2);\n border-left: 3px solid var(--acc);\n border-radius: var(--radius-lg);\n box-shadow: var(--shadow-floating);\n animation: strct-toast-in 0.16s ease;\n }\n .strct-toast strct-icon {\n color: var(--acc);\n margin-top: 1px;\n flex-shrink: 0;\n }\n .strct-toast__msg {\n flex: 1;\n }\n .strct-toast__close {\n flex-shrink: 0;\n display: inline-flex;\n padding: 2px;\n margin: -2px -2px 0 0;\n border: 0;\n background: transparent;\n color: var(--t3);\n cursor: pointer;\n border-radius: 4px;\n }\n .strct-toast__close:hover {\n color: var(--t1);\n background: var(--bg-3);\n }\n .strct-toast--success {\n border-left-color: var(--success);\n }\n .strct-toast--success strct-icon {\n color: var(--success);\n }\n .strct-toast--warning {\n border-left-color: var(--warning);\n }\n .strct-toast--warning strct-icon {\n color: var(--warning);\n }\n .strct-toast--critical {\n border-left-color: var(--critical);\n }\n .strct-toast--critical strct-icon {\n color: var(--critical);\n }\n @keyframes strct-toast-in {\n from {\n opacity: 0;\n transform: translateX(16px);\n }\n }\n `,\n ],\n})\nexport class StrctToastOutlet {\n protected readonly service = inject(StrctToastService);\n protected icon(type: StrctToastType): string {\n return TOAST_ICON[type];\n }\n}\n","/**\n * Public API surface of the strct UI library.\n */\n\n// Theme\nexport * from './lib/theme/theme.service';\nexport * from './lib/theme/theme-switcher';\n\n// Foundations\nexport * from './lib/icon/icon';\nexport * from './lib/overlay/overlay';\n\n// Layout\nexport * from './lib/layout/layout';\nexport * from './lib/layout/nav';\nexport * from './lib/layout/login';\n\n// Buttons & indicators\nexport * from './lib/button/button';\nexport * from './lib/badge/badge';\nexport * from './lib/tag/tag';\nexport * from './lib/avatar/avatar';\nexport * from './lib/progress/progress';\nexport * from './lib/spinner/spinner';\nexport * from './lib/skeleton/skeleton';\nexport * from './lib/speed-dial/speed-dial';\n\n// Surfaces & disclosure\nexport * from './lib/card/card';\nexport * from './lib/accordion/accordion';\nexport * from './lib/tabs/tabs';\nexport * from './lib/tree/tree';\nexport * from './lib/modal/modal';\nexport * from './lib/dropdown/dropdown';\nexport * from './lib/context-menu/context-menu';\nexport * from './lib/context-menu/submenu';\nexport * from './lib/context-menu/menu';\nexport * from './lib/wizard/wizard';\nexport * from './lib/divider/divider';\n\n// Navigation\nexport * from './lib/breadcrumb/breadcrumb';\nexport * from './lib/pagination/pagination';\n\n// Forms\nexport * from './lib/forms/field';\nexport * from './lib/forms/input';\nexport * from './lib/forms/checkbox';\nexport * from './lib/forms/toggle';\nexport * from './lib/forms/radio';\nexport * from './lib/forms/range';\nexport * from './lib/forms/password';\nexport * from './lib/forms/file';\nexport * from './lib/rating/rating';\nexport * from './lib/chips/chips';\nexport * from './lib/input-otp/input-otp';\nexport * from './lib/knob/knob';\nexport * from './lib/input-mask/input-mask';\nexport * from './lib/combobox/combobox';\nexport * from './lib/datepicker/datepicker';\nexport * from './lib/color-picker/color-picker';\nexport * from './lib/cascade-select/cascade-select';\n\n// Data\nexport * from './lib/table/table';\nexport * from './lib/datagrid/datagrid';\nexport * from './lib/timeline/timeline';\nexport * from './lib/stack/stack';\n\n// Charts\nexport * from './lib/charts/sparkline';\nexport * from './lib/charts/chart';\nexport * from './lib/charts/donut';\nexport * from './lib/charts/gauge';\n\n// Feedback\nexport * from './lib/alert/alert';\nexport * from './lib/tooltip/tooltip';\nexport * from './lib/signpost/signpost';\nexport * from './lib/toast/toast';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["DOCUMENT","COLOR"],"mappings":"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"}