@dataengineeringformachinelearning/viking-ui 4.0.0 → 4.0.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +4 -4
- package/dist/README.md +4 -4
- package/dist/fesm2022/dataengineeringformachinelearning-viking-ui.mjs +2 -2
- package/dist/fesm2022/dataengineeringformachinelearning-viking-ui.mjs.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/package.json +1 -1
- package/dist/types/dataengineeringformachinelearning-viking-ui.d.ts +48 -48
- package/dist/viking-ui.css +1 -1
- package/package.json +1 -1
- package/src/lib/auth-panel/auth-panel.ts +9 -9
- package/src/styles/surfaces/backend.scss +22 -10
- package/src/styles/surfaces/docs-shell.scss +40 -15
- package/src/styles/surfaces/docs-showcase.scss +68 -29
- package/src/styles/surfaces/marketing-landing.scss +64 -39
- package/src/styles/surfaces/swagger-ui.scss +9 -8
- package/src/styles/viking-ui.scss +12 -12
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dataengineeringformachinelearning-viking-ui.mjs","sources":["../../src/core/lucide-paths.generated.ts","../../src/core/brand-icons.ts","../../src/core/integration-brand-icons.ts","../../src/core/icons.ts","../../src/lib/core/cva.ts","../../src/web/core/base.ts","../../src/web/core/dom.ts","../../src/lib/core/lucide-paths.generated.ts","../../src/lib/core/brand-icons.ts","../../src/lib/core/integration-brand-icons.ts","../../src/lib/core/icons.ts","../../src/web/core/icons-inline.ts","../../src/web/core/styles.ts","../../src/web/badge/viking-badge-wc.ts","../../src/web/button/viking-button-wc.ts","../../src/web/callout/viking-callout-wc.ts","../../src/web/card/viking-card-wc.ts","../../src/web/field/viking-field-wc.ts","../../src/web/input/viking-input-wc.ts","../../src/web/modal/viking-modal-wc.ts","../../src/web/search-palette/viking-search-palette-wc.ts","../../src/lib/site-drakkar/site-drakkar.config.ts","../../src/lib/site-drakkar/suite-search-items.ts","../../src/web/suite-search-palette/viking-suite-search-palette-wc.ts","../../src/web/theme-toggle/viking-theme-toggle-wc.ts","../../src/web/suite-header/viking-suite-header-wc.ts","../../src/web/select/viking-select-wc.ts","../../src/web/index.ts","../../src/lib/icon/icon.ts","../../src/lib/button/button.ts","../../src/lib/theme-toggle/theme-toggle.ts","../../src/lib/site-drakkar/site-navbar.ts","../../src/lib/footer/footer.ts","../../src/lib/site-drakkar/site-footer.ts","../../src/lib/app-header/app-header.ts","../../src/lib/app-sidebar/app-sidebar.ts","../../src/core/uid.ts","../../src/lib/accordion/accordion.ts","../../src/lib/separator/separator.ts","../../src/lib/auth-panel/auth-panel.ts","../../src/lib/autocomplete/autocomplete.ts","../../src/lib/avatar/avatar.ts","../../src/lib/badge/badge.ts","../../src/lib/bar/bar.ts","../../src/lib/brand/brand.ts","../../src/lib/breadcrumbs/breadcrumbs.ts","../../src/lib/button/button-group.ts","../../src/lib/calendar/calendar.ts","../../src/lib/callout/callout.ts","../../src/lib/skeleton/skeleton.ts","../../src/lib/card/card.ts","../../src/lib/icon-badge/icon-badge.ts","../../src/lib/typography/heading.ts","../../src/lib/card/card-title.ts","../../src/lib/carousel/carousel.ts","../../src/lib/chart/chart-zoom.ts","../../src/lib/chart/chart.ts","../../src/lib/field/field.ts","../../src/lib/spinner/spinner.ts","../../src/lib/input/input.ts","../../src/lib/modal/modal.ts","../../src/lib/typography/text.ts","../../src/lib/confirm-dialog/dialog.service.ts","../../src/lib/confirm-dialog/confirm-dialog.ts","../../src/lib/chart-card-header/chart-card-header.ts","../../src/lib/icon-heading/icon-heading.ts","../../src/lib/chart-empty-state/chart-empty-state.ts","../../src/lib/chart-panel/chart-panel.ts","../../src/lib/checkbox/checkbox.ts","../../src/tokens/series-presets.ts","../../src/lib/color-picker/color-picker.ts","../../src/lib/command/command.ts","../../src/lib/composer/composer.ts","../../src/lib/context/context.ts","../../src/lib/date-picker/date-picker.ts","../../src/lib/dropdown/dropdown.ts","../../src/lib/empty-state/empty-state.ts","../../src/lib/editor/editor.ts","../../src/lib/fab/fab.ts","../../src/lib/form-section/form-section.ts","../../src/lib/file-upload/file-upload.ts","../../src/lib/gauge-arc/gauge-arc.ts","../../src/lib/hud-panel/hud-panel.ts","../../src/lib/icon-text/icon-text.ts","../../src/lib/kanban/kanban.ts","../../src/lib/kbd/kbd.ts","../../src/lib/label/label.ts","../../src/lib/loading-overlay/loading-overlay.ts","../../src/lib/metric-card/metric-card.ts","../../src/lib/menubar/menubar.ts","../../src/lib/native-select/native-select.ts","../../src/lib/navigation-menu/navigation-menu.ts","../../src/lib/navbar/navbar.ts","../../src/lib/otp-input/otp-input.ts","../../src/lib/verification-code-field/verification-code-field.ts","../../src/lib/page-back-link/page-back-link.ts","../../src/lib/page-header/page-header.ts","../../src/lib/pagination/pagination.ts","../../src/lib/pillbox/pillbox.ts","../../src/lib/popover/popover.ts","../../src/lib/profile/profile.ts","../../src/lib/progress/progress.ts","../../src/lib/radio/radio.ts","../../src/lib/ring-gauge/ring-gauge.ts","../../src/lib/search-palette/search-palette.ts","../../src/lib/select/select.ts","../../src/lib/scroll-area/scroll-area.ts","../../src/lib/sheet/sheet.ts","../../src/lib/sidebar-nav/sidebar-nav.ts","../../src/lib/status-metric-row/status-metric-row.ts","../../src/lib/slider/slider.ts","../../src/lib/switch/switch.ts","../../src/lib/table/table.ts","../../src/lib/tabs/tabs.ts","../../src/lib/tabs/tab.ts","../../src/lib/tabs/tab-panel.ts","../../src/lib/textarea/textarea.ts","../../src/lib/toggle/toggle-group.ts","../../src/lib/toggle/toggle.ts","../../src/lib/time-picker/time-picker.ts","../../src/lib/timeline/timeline.ts","../../src/lib/toast/toast.ts","../../src/lib/uptime-bar/uptime-bar.ts","../../src/lib/whitepaper-cta/whitepaper-cta.ts","../../src/lib/wizard/wizard.ts","../../src/lib/tooltip/tooltip.ts","../../src/lib/suite-search-palette/suite-search-palette.ts","../../src/public-api.ts","../../src/dataengineeringformachinelearning-viking-ui.ts"],"sourcesContent":["/**\n * AUTO-GENERATED by scripts/sync_lucide_icons.mjs — do not edit by hand.\n * Lucide paths are inlined at build time; lucide is a devDependency only.\n * @see https://lucide.dev\n */\nexport const LUCIDE_ICON_PATHS = {\n \"alert-circle\":\n '<circle cx=\"12\" cy=\"12\" r=\"10\"/><line x1=\"12\" x2=\"12\" y1=\"8\" y2=\"12\"/><line x1=\"12\" x2=\"12.01\" y1=\"16\" y2=\"16\"/>',\n \"alert-triangle\":\n '<path d=\"m21.73 18-8-14a2 2 0 0 0-3.48 0l-8 14A2 2 0 0 0 4 21h16a2 2 0 0 0 1.73-3\"/><path d=\"M12 9v4\"/><path d=\"M12 17h.01\"/>',\n \"arrow-left\": '<path d=\"m12 19-7-7 7-7\"/><path d=\"M19 12H5\"/>',\n \"arrow-right\": '<path d=\"M5 12h14\"/><path d=\"m12 5 7 7-7 7\"/>',\n \"arrow-up-right\": '<path d=\"M7 7h10v10\"/><path d=\"M7 17 17 7\"/>',\n \"bar-chart\":\n '<path d=\"M3 3v16a2 2 0 0 0 2 2h16\"/><path d=\"M18 17V9\"/><path d=\"M13 17V5\"/><path d=\"M8 17v-3\"/>',\n bell: '<path d=\"M10.268 21a2 2 0 0 0 3.464 0\"/><path d=\"M3.262 15.326A1 1 0 0 0 4 17h16a1 1 0 0 0 .74-1.673C19.41 13.956 18 12.499 18 8A6 6 0 0 0 6 8c0 4.499-1.411 5.956-2.738 7.326\"/>',\n bold: '<path d=\"M6 12h9a4 4 0 0 1 0 8H7a1 1 0 0 1-1-1V5a1 1 0 0 1 1-1h7a4 4 0 0 1 0 8\"/>',\n bolt: '<path d=\"M4 14a1 1 0 0 1-.78-1.63l9.9-10.2a.5.5 0 0 1 .86.46l-1.92 6.02A1 1 0 0 0 13 10h7a1 1 0 0 1 .78 1.63l-9.9 10.2a.5.5 0 0 1-.86-.46l1.92-6.02A1 1 0 0 0 11 14z\"/>',\n brain:\n '<path d=\"M12 18V5\"/><path d=\"M15 13a4.17 4.17 0 0 1-3-4 4.17 4.17 0 0 1-3 4\"/><path d=\"M17.598 6.5A3 3 0 1 0 12 5a3 3 0 1 0-5.598 1.5\"/><path d=\"M17.997 5.125a4 4 0 0 1 2.526 5.77\"/><path d=\"M18 18a4 4 0 0 0 2-7.464\"/><path d=\"M19.967 17.483A4 4 0 1 1 12 18a4 4 0 1 1-7.967-.517\"/><path d=\"M6 18a4 4 0 0 1-2-7.464\"/><path d=\"M6.003 5.125a4 4 0 0 0-2.526 5.77\"/>',\n bug: '<path d=\"M12 20v-9\"/><path d=\"M14 7a4 4 0 0 1 4 4v3a6 6 0 0 1-12 0v-3a4 4 0 0 1 4-4z\"/><path d=\"M14.12 3.88 16 2\"/><path d=\"M21 21a4 4 0 0 0-3.81-4\"/><path d=\"M21 5a4 4 0 0 1-3.55 3.97\"/><path d=\"M22 13h-4\"/><path d=\"M3 21a4 4 0 0 1 3.81-4\"/><path d=\"M3 5a4 4 0 0 0 3.55 3.97\"/><path d=\"M6 13H2\"/><path d=\"m8 2 1.88 1.88\"/><path d=\"M9 7.13V6a3 3 0 1 1 6 0v1.13\"/>',\n building:\n '<path d=\"M12 10h.01\"/><path d=\"M12 14h.01\"/><path d=\"M12 6h.01\"/><path d=\"M16 10h.01\"/><path d=\"M16 14h.01\"/><path d=\"M16 6h.01\"/><path d=\"M8 10h.01\"/><path d=\"M8 14h.01\"/><path d=\"M8 6h.01\"/><path d=\"M9 22v-3a1 1 0 0 1 1-1h4a1 1 0 0 1 1 1v3\"/><rect x=\"4\" y=\"2\" width=\"16\" height=\"20\" rx=\"2\"/>',\n calendar:\n '<path d=\"M8 2v4\"/><path d=\"M16 2v4\"/><rect width=\"18\" height=\"18\" x=\"3\" y=\"4\" rx=\"2\"/><path d=\"M3 10h18\"/>',\n check: '<path d=\"M20 6 9 17l-5-5\"/>',\n \"check-circle\": '<circle cx=\"12\" cy=\"12\" r=\"10\"/><path d=\"m9 12 2 2 4-4\"/>',\n \"chevron-down\": '<path d=\"m6 9 6 6 6-6\"/>',\n \"chevron-left\": '<path d=\"m15 18-6-6 6-6\"/>',\n \"chevron-right\": '<path d=\"m9 18 6-6-6-6\"/>',\n \"chevron-up\": '<path d=\"m18 15-6-6-6 6\"/>',\n chip: '<path d=\"M12 20v2\"/><path d=\"M12 2v2\"/><path d=\"M17 20v2\"/><path d=\"M17 2v2\"/><path d=\"M2 12h2\"/><path d=\"M2 17h2\"/><path d=\"M2 7h2\"/><path d=\"M20 12h2\"/><path d=\"M20 17h2\"/><path d=\"M20 7h2\"/><path d=\"M7 20v2\"/><path d=\"M7 2v2\"/><rect x=\"4\" y=\"4\" width=\"16\" height=\"16\" rx=\"2\"/><rect x=\"8\" y=\"8\" width=\"8\" height=\"8\" rx=\"1\"/>',\n clock: '<circle cx=\"12\" cy=\"12\" r=\"10\"/><path d=\"M12 6v6l4 2\"/>',\n cloud: '<path d=\"M17.5 19H9a7 7 0 1 1 6.71-9h1.79a4.5 4.5 0 1 1 0 9Z\"/>',\n cookie:\n '<path d=\"M12 2a10 10 0 1 0 10 10 4 4 0 0 1-5-5 4 4 0 0 1-5-5\"/><path d=\"M8.5 8.5v.01\"/><path d=\"M16 15.5v.01\"/><path d=\"M12 12v.01\"/><path d=\"M11 17v.01\"/><path d=\"M7 14v.01\"/>',\n copy: '<rect width=\"14\" height=\"14\" x=\"8\" y=\"8\" rx=\"2\" ry=\"2\"/><path d=\"M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2\"/>',\n \"dots-horizontal\":\n '<circle cx=\"12\" cy=\"12\" r=\"1\" fill=\"currentColor\" stroke=\"none\"/><circle cx=\"19\" cy=\"12\" r=\"1\" fill=\"currentColor\" stroke=\"none\"/><circle cx=\"5\" cy=\"12\" r=\"1\" fill=\"currentColor\" stroke=\"none\"/>',\n \"dots-vertical\":\n '<circle cx=\"12\" cy=\"12\" r=\"1\" fill=\"currentColor\" stroke=\"none\"/><circle cx=\"12\" cy=\"5\" r=\"1\" fill=\"currentColor\" stroke=\"none\"/><circle cx=\"12\" cy=\"19\" r=\"1\" fill=\"currentColor\" stroke=\"none\"/>',\n download:\n '<path d=\"M12 15V3\"/><path d=\"M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4\"/><path d=\"m7 10 5 5 5-5\"/>',\n external:\n '<path d=\"M15 3h6v6\"/><path d=\"M10 14 21 3\"/><path d=\"M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6\"/>',\n eye: '<path d=\"M2.062 12.348a1 1 0 0 1 0-.696 10.75 10.75 0 0 1 19.876 0 1 1 0 0 1 0 .696 10.75 10.75 0 0 1-19.876 0\"/><circle cx=\"12\" cy=\"12\" r=\"3\"/>',\n \"eye-off\":\n '<path d=\"M10.733 5.076a10.744 10.744 0 0 1 11.205 6.575 1 1 0 0 1 0 .696 10.747 10.747 0 0 1-1.444 2.49\"/><path d=\"M14.084 14.158a3 3 0 0 1-4.242-4.242\"/><path d=\"M17.479 17.499a10.75 10.75 0 0 1-15.417-5.151 1 1 0 0 1 0-.696 10.75 10.75 0 0 1 4.446-5.143\"/><path d=\"m2 2 20 20\"/>',\n file: '<path d=\"M6 22a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h8a2.4 2.4 0 0 1 1.704.706l3.588 3.588A2.4 2.4 0 0 1 20 8v12a2 2 0 0 1-2 2z\"/><path d=\"M14 2v5a1 1 0 0 0 1 1h5\"/>',\n filter:\n '<path d=\"M10 20a1 1 0 0 0 .553.895l2 1A1 1 0 0 0 14 21v-7a2 2 0 0 1 .517-1.341L21.74 4.67A1 1 0 0 0 21 3H3a1 1 0 0 0-.742 1.67l7.225 7.989A2 2 0 0 1 10 14z\"/>',\n fingerprint:\n '<path d=\"M12 10a2 2 0 0 0-2 2c0 1.02-.1 2.51-.26 4\"/><path d=\"M14 13.12c0 2.38 0 6.38-1 8.88\"/><path d=\"M17.29 21.02c.12-.6.43-2.3.5-3.02\"/><path d=\"M2 12a10 10 0 0 1 18-6\"/><path d=\"M2 16h.01\"/><path d=\"M21.8 16c.2-2 .131-5.354 0-6\"/><path d=\"M5 19.5C5.5 18 6 15 6 12a6 6 0 0 1 .34-2\"/><path d=\"M8.65 22c.21-.66.45-1.32.57-2\"/><path d=\"M9 6.8a6 6 0 0 1 9 5.2v2\"/>',\n folder:\n '<path d=\"M20 20a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2h-7.9a2 2 0 0 1-1.69-.9L9.6 3.9A2 2 0 0 0 7.93 3H4a2 2 0 0 0-2 2v13a2 2 0 0 0 2 2Z\"/>',\n globe:\n '<circle cx=\"12\" cy=\"12\" r=\"10\"/><path d=\"M12 2a14.5 14.5 0 0 0 0 20 14.5 14.5 0 0 0 0-20\"/><path d=\"M2 12h20\"/>',\n \"grip-vertical\":\n '<circle cx=\"9\" cy=\"12\" r=\"1\" fill=\"currentColor\" stroke=\"none\"/><circle cx=\"9\" cy=\"5\" r=\"1\" fill=\"currentColor\" stroke=\"none\"/><circle cx=\"9\" cy=\"19\" r=\"1\" fill=\"currentColor\" stroke=\"none\"/><circle cx=\"15\" cy=\"12\" r=\"1\" fill=\"currentColor\" stroke=\"none\"/><circle cx=\"15\" cy=\"5\" r=\"1\" fill=\"currentColor\" stroke=\"none\"/><circle cx=\"15\" cy=\"19\" r=\"1\" fill=\"currentColor\" stroke=\"none\"/>',\n heart:\n '<path d=\"M2 9.5a5.5 5.5 0 0 1 9.591-3.676.56.56 0 0 0 .818 0A5.49 5.49 0 0 1 22 9.5c0 2.29-1.5 4-3 5.5l-5.492 5.313a2 2 0 0 1-3 .019L5 15c-1.5-1.5-3-3.2-3-5.5\"/>',\n home: '<path d=\"M15 21v-8a1 1 0 0 0-1-1h-4a1 1 0 0 0-1 1v8\"/><path d=\"M3 10a2 2 0 0 1 .709-1.528l7-6a2 2 0 0 1 2.582 0l7 6A2 2 0 0 1 21 10v9a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2z\"/>',\n image:\n '<rect width=\"18\" height=\"18\" x=\"3\" y=\"3\" rx=\"2\" ry=\"2\"/><circle cx=\"9\" cy=\"9\" r=\"2\"/><path d=\"m21 15-3.086-3.086a2 2 0 0 0-2.828 0L6 21\"/>',\n info: '<circle cx=\"12\" cy=\"12\" r=\"10\"/><path d=\"M12 16v-4\"/><path d=\"M12 8h.01\"/>',\n insights: '<path d=\"M3 3v16a2 2 0 0 0 2 2h16\"/><path d=\"m19 9-5 5-4-4-3 3\"/>',\n italic:\n '<line x1=\"19\" x2=\"10\" y1=\"4\" y2=\"4\"/><line x1=\"14\" x2=\"5\" y1=\"20\" y2=\"20\"/><line x1=\"15\" x2=\"9\" y1=\"4\" y2=\"20\"/>',\n key: '<path d=\"M2.586 17.414A2 2 0 0 0 2 18.828V21a1 1 0 0 0 1 1h3a1 1 0 0 0 1-1v-1a1 1 0 0 1 1-1h1a1 1 0 0 0 1-1v-1a1 1 0 0 1 1-1h.172a2 2 0 0 0 1.414-.586l.814-.814a6.5 6.5 0 1 0-4-4z\"/><circle cx=\"16.5\" cy=\"7.5\" r=\".5\" fill=\"currentColor\"/>',\n link: '<path d=\"M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71\"/><path d=\"M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71\"/>',\n list: '<path d=\"M3 5h.01\"/><path d=\"M3 12h.01\"/><path d=\"M3 19h.01\"/><path d=\"M8 5h13\"/><path d=\"M8 12h13\"/><path d=\"M8 19h13\"/>',\n \"list-ordered\":\n '<path d=\"M11 5h10\"/><path d=\"M11 12h10\"/><path d=\"M11 19h10\"/><path d=\"M4 4h1v5\"/><path d=\"M4 9h2\"/><path d=\"M6.5 20H3.4c0-1 2.6-1.925 2.6-3.5a1.5 1.5 0 0 0-2.6-1.02\"/>',\n loader: '<path d=\"M21 12a9 9 0 1 1-6.219-8.56\"/>',\n lock: '<rect width=\"18\" height=\"11\" x=\"3\" y=\"11\" rx=\"2\" ry=\"2\"/><path d=\"M7 11V7a5 5 0 0 1 10 0v4\"/>',\n \"log-in\":\n '<path d=\"m10 17 5-5-5-5\"/><path d=\"M15 12H3\"/><path d=\"M15 3h4a2 2 0 0 1 2 2v14a2 2 0 0 1-2 2h-4\"/>',\n \"log-out\":\n '<path d=\"m16 17 5-5-5-5\"/><path d=\"M21 12H9\"/><path d=\"M9 21H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h4\"/>',\n mail: '<path d=\"m22 7-8.991 5.727a2 2 0 0 1-2.009 0L2 7\"/><rect x=\"2\" y=\"4\" width=\"20\" height=\"16\" rx=\"2\"/>',\n menu: '<path d=\"M4 5h16\"/><path d=\"M4 12h16\"/><path d=\"M4 19h16\"/>',\n minus: '<path d=\"M5 12h14\"/>',\n moon: '<path d=\"M20.985 12.486a9 9 0 1 1-9.473-9.472c.405-.022.617.46.402.803a6 6 0 0 0 8.268 8.268c.344-.215.825-.004.803.401\"/>',\n network:\n '<rect x=\"16\" y=\"16\" width=\"6\" height=\"6\" rx=\"1\"/><rect x=\"2\" y=\"16\" width=\"6\" height=\"6\" rx=\"1\"/><rect x=\"9\" y=\"2\" width=\"6\" height=\"6\" rx=\"1\"/><path d=\"M5 16v-3a1 1 0 0 1 1-1h12a1 1 0 0 1 1 1v3\"/><path d=\"M12 12V8\"/>',\n paperclip:\n '<path d=\"m16 6-8.414 8.586a2 2 0 0 0 2.829 2.829l8.414-8.586a4 4 0 1 0-5.657-5.657l-8.379 8.551a6 6 0 1 0 8.485 8.485l8.379-8.551\"/>',\n pencil:\n '<path d=\"M21.174 6.812a1 1 0 0 0-3.986-3.987L3.842 16.174a2 2 0 0 0-.5.83l-1.321 4.352a.5.5 0 0 0 .623.622l4.353-1.32a2 2 0 0 0 .83-.497z\"/><path d=\"m15 5 4 4\"/>',\n phone:\n '<path d=\"M13.832 16.568a1 1 0 0 0 1.213-.303l.355-.465A2 2 0 0 1 17 15h3a2 2 0 0 1 2 2v3a2 2 0 0 1-2 2A18 18 0 0 1 2 4a2 2 0 0 1 2-2h3a2 2 0 0 1 2 2v3a2 2 0 0 1-.8 1.6l-.468.351a1 1 0 0 0-.292 1.233 14 14 0 0 0 6.392 6.384\"/>',\n play: '<path d=\"M5 5a2 2 0 0 1 3.008-1.728l11.997 6.998a2 2 0 0 1 .003 3.458l-12 7A2 2 0 0 1 5 19z\" fill=\"currentColor\" stroke=\"none\"/>',\n plus: '<path d=\"M5 12h14\"/><path d=\"M12 5v14\"/>',\n policy:\n '<path d=\"M20 13c0 5-3.5 7.5-7.66 8.95a1 1 0 0 1-.67-.01C7.5 20.5 4 18 4 13V6a1 1 0 0 1 1-1c2 0 4.5-1.2 6.24-2.72a1.17 1.17 0 0 1 1.52 0C14.51 3.81 17 5 19 5a1 1 0 0 1 1 1z\"/><path d=\"m9 12 2 2 4-4\"/>',\n refresh:\n '<path d=\"M3 12a9 9 0 0 1 9-9 9.75 9.75 0 0 1 6.74 2.74L21 8\"/><path d=\"M21 3v5h-5\"/><path d=\"M21 12a9 9 0 0 1-9 9 9.75 9.75 0 0 1-6.74-2.74L3 16\"/><path d=\"M8 16H3v5\"/>',\n rocket:\n '<path d=\"M12 15v5s3.03-.55 4-2c1.08-1.62 0-5 0-5\"/><path d=\"M4.5 16.5c-1.5 1.26-2 5-2 5s3.74-.5 5-2c.71-.84.7-2.13-.09-2.91a2.18 2.18 0 0 0-2.91-.09\"/><path d=\"M9 12a22 22 0 0 1 2-3.95A12.88 12.88 0 0 1 22 2c0 2.72-.78 7.5-6 11a22.4 22.4 0 0 1-4 2z\"/><path d=\"M9 12H4s.55-3.03 2-4c1.62-1.08 5 .05 5 .05\"/>',\n search: '<path d=\"m21 21-4.34-4.34\"/><circle cx=\"11\" cy=\"11\" r=\"8\"/>',\n \"search-off\":\n '<path d=\"m13.5 8.5-5 5\"/><path d=\"m8.5 8.5 5 5\"/><circle cx=\"11\" cy=\"11\" r=\"8\"/><path d=\"m21 21-4.3-4.3\"/>',\n send: '<path d=\"M14.536 21.686a.5.5 0 0 0 .937-.024l6.5-19a.496.496 0 0 0-.635-.635l-19 6.5a.5.5 0 0 0-.024.937l7.93 3.18a2 2 0 0 1 1.112 1.11z\"/><path d=\"m21.854 2.147-10.94 10.939\"/>',\n server:\n '<rect width=\"20\" height=\"8\" x=\"2\" y=\"2\" rx=\"2\" ry=\"2\"/><rect width=\"20\" height=\"8\" x=\"2\" y=\"14\" rx=\"2\" ry=\"2\"/><line x1=\"6\" x2=\"6.01\" y1=\"6\" y2=\"6\"/><line x1=\"6\" x2=\"6.01\" y1=\"18\" y2=\"18\"/>',\n settings:\n '<path d=\"M9.671 4.136a2.34 2.34 0 0 1 4.659 0 2.34 2.34 0 0 0 3.319 1.915 2.34 2.34 0 0 1 2.33 4.033 2.34 2.34 0 0 0 0 3.831 2.34 2.34 0 0 1-2.33 4.033 2.34 2.34 0 0 0-3.319 1.915 2.34 2.34 0 0 1-4.659 0 2.34 2.34 0 0 0-3.32-1.915 2.34 2.34 0 0 1-2.33-4.033 2.34 2.34 0 0 0 0-3.831A2.34 2.34 0 0 1 6.35 6.051a2.34 2.34 0 0 0 3.319-1.915\"/><circle cx=\"12\" cy=\"12\" r=\"3\"/>',\n shield:\n '<path d=\"M20 13c0 5-3.5 7.5-7.66 8.95a1 1 0 0 1-.67-.01C7.5 20.5 4 18 4 13V6a1 1 0 0 1 1-1c2 0 4.5-1.2 6.24-2.72a1.17 1.17 0 0 1 1.52 0C14.51 3.81 17 5 19 5a1 1 0 0 1 1 1z\"/>',\n ship: '<path d=\"M12 10.189V14\"/><path d=\"M12 2v3\"/><path d=\"M19 13V7a2 2 0 0 0-2-2H7a2 2 0 0 0-2 2v6\"/><path d=\"M19.38 20A11.6 11.6 0 0 0 21 14l-8.188-3.639a2 2 0 0 0-1.624 0L3 14a11.6 11.6 0 0 0 2.81 7.76\"/><path d=\"M2 21c.6.5 1.2 1 2.5 1 2.5 0 2.5-2 5-2 1.3 0 1.9.5 2.5 1s1.2 1 2.5 1c2.5 0 2.5-2 5-2 1.3 0 1.9.5 2.5 1\"/>',\n sparkle:\n '<path d=\"M11.017 2.814a1 1 0 0 1 1.966 0l1.051 5.558a2 2 0 0 0 1.594 1.594l5.558 1.051a1 1 0 0 1 0 1.966l-5.558 1.051a2 2 0 0 0-1.594 1.594l-1.051 5.558a1 1 0 0 1-1.966 0l-1.051-5.558a2 2 0 0 0-1.594-1.594l-5.558-1.051a1 1 0 0 1 0-1.966l5.558-1.051a2 2 0 0 0 1.594-1.594z\"/><path d=\"M20 2v4\"/><path d=\"M22 4h-4\"/><circle cx=\"4\" cy=\"20\" r=\"2\"/>',\n speed: '<path d=\"m12 14 4-4\"/><path d=\"M3.34 19a10 10 0 1 1 17.32 0\"/>',\n star: '<path d=\"M11.525 2.295a.53.53 0 0 1 .95 0l2.31 4.679a2.123 2.123 0 0 0 1.595 1.16l5.166.756a.53.53 0 0 1 .294.904l-3.736 3.638a2.123 2.123 0 0 0-.611 1.878l.882 5.14a.53.53 0 0 1-.771.56l-4.618-2.428a2.122 2.122 0 0 0-1.973 0L6.396 21.01a.53.53 0 0 1-.77-.56l.881-5.139a2.122 2.122 0 0 0-.611-1.879L2.16 9.795a.53.53 0 0 1 .294-.906l5.165-.755a2.122 2.122 0 0 0 1.597-1.16z\"/>',\n sun: '<circle cx=\"12\" cy=\"12\" r=\"4\"/><path d=\"M12 2v2\"/><path d=\"M12 20v2\"/><path d=\"m4.93 4.93 1.41 1.41\"/><path d=\"m17.66 17.66 1.41 1.41\"/><path d=\"M2 12h2\"/><path d=\"M20 12h2\"/><path d=\"m6.34 17.66-1.41 1.41\"/><path d=\"m19.07 4.93-1.41 1.41\"/>',\n terminal: '<path d=\"M12 19h8\"/><path d=\"m4 17 6-6-6-6\"/>',\n trash:\n '<path d=\"M10 11v6\"/><path d=\"M14 11v6\"/><path d=\"M19 6v14a2 2 0 0 1-2 2H7a2 2 0 0 1-2-2V6\"/><path d=\"M3 6h18\"/><path d=\"M8 6V4a2 2 0 0 1 2-2h4a2 2 0 0 1 2 2v2\"/>',\n \"trending-up\": '<path d=\"M16 7h6v6\"/><path d=\"m22 7-8.5 8.5-5-5L2 17\"/>',\n underline:\n '<path d=\"M6 4v6a6 6 0 0 0 12 0V4\"/><line x1=\"4\" x2=\"20\" y1=\"20\" y2=\"20\"/>',\n upload:\n '<path d=\"M12 3v12\"/><path d=\"m17 8-5-5-5 5\"/><path d=\"M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4\"/>',\n user: '<path d=\"M19 21v-2a4 4 0 0 0-4-4H9a4 4 0 0 0-4 4v2\"/><circle cx=\"12\" cy=\"7\" r=\"4\"/>',\n \"user-shield\":\n '<path d=\"M20 13c0 5-3.5 7.5-7.66 8.95a1 1 0 0 1-.67-.01C7.5 20.5 4 18 4 13V6a1 1 0 0 1 1-1c2 0 4.5-1.2 6.24-2.72a1.17 1.17 0 0 1 1.52 0C14.51 3.81 17 5 19 5a1 1 0 0 1 1 1z\"/><path d=\"M6.376 18.91a6 6 0 0 1 11.249.003\"/><circle cx=\"12\" cy=\"11\" r=\"4\"/>',\n x: '<path d=\"M18 6 6 18\"/><path d=\"m6 6 12 12\"/>',\n} as const;\n\nexport type LucideIconName = keyof typeof LUCIDE_ICON_PATHS;\n","/**\n * DEML branded icon paths — optimized SVG geometry (not sourced from Lucide).\n * Use via viking-icon name=\"deml\" | \"deml-compact\" | \"deml-lockup\".\n */\nexport const VIKING_BRAND_ICON_PATHS = {\n /** Primary bar-chart mark in rounded frame (outline). */\n deml: '<rect x=\"3\" y=\"3\" width=\"18\" height=\"18\" rx=\"2\"/><path d=\"M8 17V13M12 17V8M16 17V11\"/>',\n /** Compact monogram for favicons and dense Drakkar shell. */\n \"deml-compact\":\n '<rect x=\"4\" y=\"4\" width=\"16\" height=\"16\" rx=\"3\"/><path d=\"M9 16V12M12 16V9M15 16V13\"/>',\n /** Lockup mark with baseline accent bar. */\n \"deml-lockup\":\n '<rect x=\"3\" y=\"3\" width=\"18\" height=\"14\" rx=\"2\"/><path d=\"M8 17V13M12 17V8M16 17V11\"/><path d=\"M3 20h18\"/>',\n} as const;\n\n/** Drakkar — Viking-UI / site shell brand marks (Lucide ship, build-time inlined). */\nexport const VIKING_DRAKKAR_ICON_PATHS = {\n /** Primary Drakkar longship mark (outline). */\n drakkar:\n '<path d=\"M12 10.189V14\"/><path d=\"M12 2v3\"/><path d=\"M19 13V7a2 2 0 0 0-2-2H7a2 2 0 0 0-2 2v6\"/><path d=\"M19.38 20A11.6 11.6 0 0 0 21 14l-8.188-3.639a2 2 0 0 0-1.624 0L3 14a11.6 11.6 0 0 0 2.81 7.76\"/><path d=\"M2 21c.6.5 1.2 1 2.5 1 2.5 0 2.5-2 5-2 1.3 0 1.9.5 2.5 1s1.2 1 2.5 1c2.5 0 2.5-2 5-2 1.3 0 1.9.5 2.5 1\"/>',\n /** Compact tile for favicons and dense navbar chrome. */\n \"drakkar-compact\":\n '<rect x=\"3\" y=\"3\" width=\"18\" height=\"18\" rx=\"2\"/><path d=\"M12 10.189V14\"/><path d=\"M12 2v3\"/><path d=\"M19 13V7a2 2 0 0 0-2-2H7a2 2 0 0 0-2 2v6\"/><path d=\"M19.38 20A11.6 11.6 0 0 0 21 14l-8.188-3.639a2 2 0 0 0-1.624 0L3 14a11.6 11.6 0 0 0 2.81 7.76\"/><path d=\"M2 21c.6.5 1.2 1 2.5 1 2.5 0 2.5-2 5-2 1.3 0 1.9.5 2.5 1s1.2 1 2.5 1c2.5 0 2.5-2 5-2 1.3 0 1.9.5 2.5 1\"/>',\n /** Lockup mark with baseline accent bar. */\n \"drakkar-lockup\":\n '<path d=\"M12 10.189V14\"/><path d=\"M12 2v3\"/><path d=\"M19 13V7a2 2 0 0 0-2-2H7a2 2 0 0 0-2 2v6\"/><path d=\"M19.38 20A11.6 11.6 0 0 0 21 14l-8.188-3.639a2 2 0 0 0-1.624 0L3 14a11.6 11.6 0 0 0 2.81 7.76\"/><path d=\"M2 21c.6.5 1.2 1 2.5 1 2.5 0 2.5-2 5-2 1.3 0 1.9.5 2.5 1s1.2 1 2.5 1c2.5 0 2.5-2 5-2 1.3 0 1.9.5 2.5 1\"/><path d=\"M3 21h18\"/>',\n} as const;\n\n/** Filled-path overrides for DEML brand marks. */\nexport const VIKING_BRAND_ICON_FILLED_PATHS: Partial<\n Record<keyof typeof VIKING_BRAND_ICON_PATHS, string>\n> = {\n deml: '<path d=\"M5 4a1 1 0 0 1 1-1h12a1 1 0 0 1 1 1v14a1 1 0 0 1-1 1H6a1 1 0 0 1-1-1V4zM8 13h2.5v4H8v-4zM12 8h2.5v9H12V8zM16 11h2.5v6H16v-6z\"/>',\n \"deml-compact\":\n '<path d=\"M6 5a1 1 0 0 1 1-1h10a1 1 0 0 1 1 1v12a1 1 0 0 1-1 1H7a1 1 0 0 1-1-1V5zM9 12h1.5v4H9v-4zM12 9h1.5v7H12V9zM15 11h1.5v5H15v-5z\"/>',\n \"deml-lockup\":\n '<path d=\"M4 4a1 1 0 0 1 1-1h14a1 1 0 0 1 1 1v11a1 1 0 0 1-1 1H5a1 1 0 0 1-1-1V4zM8 13h2.5v4H8v-4zM12 8h2.5v9H12V8zM16 11h2.5v6H16v-6z\"/><rect x=\"3\" y=\"19\" width=\"18\" height=\"2\" rx=\"1\"/>',\n};\n\n/** Filled-path overrides for Drakkar brand marks. */\nexport const VIKING_DRAKKAR_ICON_FILLED_PATHS: Partial<\n Record<keyof typeof VIKING_DRAKKAR_ICON_PATHS, string>\n> = {\n drakkar:\n '<path d=\"M7 5h10a2 2 0 0 1 2 2v3.5L20.8 14.2l-7.8-3.5a1.8 1.8 0 0 0-1.4 0L3.2 14.2a10.5 10.5 0 0 0 2.6 7.2L5.2 13V7a2 2 0 0 0-2-2z\"/><rect x=\"10.85\" y=\"2\" width=\"2.3\" height=\"12\" rx=\"0.4\"/>',\n \"drakkar-compact\":\n '<path d=\"M3 3h18a2 2 0 0 1 2 2v18a2 2 0 0 1-2 2H3a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2z\"/><path d=\"M7.5 12.5 12 9.8l4.5 2.7v2.2c0 .8-.5 1.4-1.2 1.7L12 17.8l-3.3-1.6c-.7-.3-1.2-.9-1.2-1.7v-2.2z\"/><rect x=\"11\" y=\"6\" width=\"2\" height=\"5.5\" rx=\"0.35\"/>',\n \"drakkar-lockup\":\n '<path d=\"M7 5h10a2 2 0 0 1 2 2v3.5L20.8 14.2l-7.8-3.5a1.8 1.8 0 0 0-1.4 0L3.2 14.2a10.5 10.5 0 0 0 2.6 7.2L5.2 13V7a2 2 0 0 0-2-2z\"/><rect x=\"10.85\" y=\"2\" width=\"2.3\" height=\"12\" rx=\"0.4\"/><rect x=\"3\" y=\"20\" width=\"18\" height=\"2\" rx=\"1\"/>',\n};\n\nexport type VikingBrandIconName = keyof typeof VIKING_BRAND_ICON_PATHS;\n\nexport type VikingDrakkarIconName = keyof typeof VIKING_DRAKKAR_ICON_PATHS;\n\nexport const VIKING_BRAND_ICON_NAMES_LIST = Object.keys(\n VIKING_BRAND_ICON_PATHS,\n) as VikingBrandIconName[];\n\nexport const VIKING_DRAKKAR_ICON_NAMES_LIST = Object.keys(\n VIKING_DRAKKAR_ICON_PATHS,\n) as VikingDrakkarIconName[];\n","/** Official platform brand colors — exception for recognizable integration marks (same policy as Google/Apple in viking-icon). */\nexport const VIKING_INTEGRATION_BRAND_COLORS = {\n kubernetes: \"#326CE5\",\n tensorflow: \"#FF6F00\",\n pytorch: \"#EE4C2C\",\n \"apache-spark\": \"#E25A1C\",\n databricks: \"#FF3621\",\n \"aws-redshift\": \"#8C4FFF\",\n} as const;\n\nexport type VikingIntegrationBrandName =\n keyof typeof VIKING_INTEGRATION_BRAND_COLORS;\n\nexport const VIKING_INTEGRATION_BRAND_NAMES = Object.keys(\n VIKING_INTEGRATION_BRAND_COLORS,\n) as VikingIntegrationBrandName[];\n\nexport const isIntegrationBrandIcon = (\n name: string,\n): name is VikingIntegrationBrandName =>\n (VIKING_INTEGRATION_BRAND_NAMES as readonly string[]).includes(name);\n\n/**\n * Official product logo paths (24×24 viewBox) sourced from Simple Icons (CC0).\n * Inlined at build time — no runtime icon font or CDN.\n */\nconst VIKING_INTEGRATION_BRAND_PATHS: Record<\n VikingIntegrationBrandName,\n string\n> = {\n kubernetes:\n \"M10.204 14.35l.007.01-.999 2.413a5.171 5.171 0 0 1-2.075-2.597l2.578-.437.004.005a.44.44 0 0 1 .484.606zm-.833-2.129a.44.44 0 0 0 .173-.756l.002-.011L7.585 9.7a5.143 5.143 0 0 0-.73 3.255l2.514-.725.002-.009zm1.145-1.98a.44.44 0 0 0 .699-.337l.01-.005.15-2.62a5.144 5.144 0 0 0-3.01 1.442l2.147 1.523.004-.002zm.76 2.75l.723.349.722-.347.18-.78-.5-.623h-.804l-.5.623.179.779zm1.5-3.095a.44.44 0 0 0 .7.336l.008.003 2.134-1.513a5.188 5.188 0 0 0-2.992-1.442l.148 2.615.002.001zm10.876 5.97l-5.773 7.181a1.6 1.6 0 0 1-1.248.594l-9.261.003a1.6 1.6 0 0 1-1.247-.596l-5.776-7.18a1.583 1.583 0 0 1-.307-1.34L2.1 5.573c.108-.47.425-.864.863-1.073L11.305.513a1.606 1.606 0 0 1 1.385 0l8.345 3.985c.438.209.755.604.863 1.073l2.062 8.955c.108.47-.005.963-.308 1.34zm-3.289-2.057c-.042-.01-.103-.026-.145-.034-.174-.033-.315-.025-.479-.038-.35-.037-.638-.067-.895-.148-.105-.04-.18-.165-.216-.216l-.201-.059a6.45 6.45 0 0 0-.105-2.332 6.465 6.465 0 0 0-.936-2.163c.052-.047.15-.133.177-.159.008-.09.001-.183.094-.282.197-.185.444-.338.743-.522.142-.084.273-.137.415-.242.032-.024.076-.062.11-.089.24-.191.295-.52.123-.736-.172-.216-.506-.236-.745-.045-.034.027-.08.062-.111.088-.134.116-.217.23-.33.35-.246.25-.45.458-.673.609-.097.056-.239.037-.303.033l-.19.135a6.545 6.545 0 0 0-4.146-2.003l-.012-.223c-.065-.062-.143-.115-.163-.25-.022-.268.015-.557.057-.905.023-.163.061-.298.068-.475.001-.04-.001-.099-.001-.142 0-.306-.224-.555-.5-.555-.275 0-.499.249-.499.555l.001.014c0 .041-.002.092 0 .128.006.177.044.312.067.475.042.348.078.637.056.906a.545.545 0 0 1-.162.258l-.012.211a6.424 6.424 0 0 0-4.166 2.003 8.373 8.373 0 0 1-.18-.128c-.09.012-.18.04-.297-.029-.223-.15-.427-.358-.673-.608-.113-.12-.195-.234-.329-.349-.03-.026-.077-.062-.111-.088a.594.594 0 0 0-.348-.132.481.481 0 0 0-.398.176c-.172.216-.117.546.123.737l.007.005.104.083c.142.105.272.159.414.242.299.185.546.338.743.522.076.082.09.226.1.288l.16.143a6.462 6.462 0 0 0-1.02 4.506l-.208.06c-.055.072-.133.184-.215.217-.257.081-.546.11-.895.147-.164.014-.305.006-.48.039-.037.007-.09.02-.133.03l-.004.002-.007.002c-.295.071-.484.342-.423.608.061.267.349.429.645.365l.007-.001.01-.003.129-.029c.17-.046.294-.113.448-.172.33-.118.604-.217.87-.256.112-.009.23.069.288.101l.217-.037a6.5 6.5 0 0 0 2.88 3.596l-.09.218c.033.084.069.199.044.282-.097.252-.263.517-.452.813-.091.136-.185.242-.268.399-.02.037-.045.095-.064.134-.128.275-.034.591.213.71.248.12.556-.007.69-.282v-.002c.02-.039.046-.09.062-.127.07-.162.094-.301.144-.458.132-.332.205-.68.387-.897.05-.06.13-.082.215-.105l.113-.205a6.453 6.453 0 0 0 4.609.012l.106.192c.086.028.18.042.256.155.136.232.229.507.342.84.05.156.074.295.145.457.016.037.043.09.062.129.133.276.442.402.69.282.247-.118.341-.435.213-.71-.02-.039-.045-.096-.065-.134-.083-.156-.177-.261-.268-.398-.19-.296-.346-.541-.443-.793-.04-.13.007-.21.038-.294-.018-.022-.059-.144-.083-.202a6.499 6.499 0 0 0 2.88-3.622c.064.01.176.03.213.038.075-.05.144-.114.28-.104.266.039.54.138.87.256.154.06.277.128.448.173.036.01.088.019.13.028l.009.003.007.001c.297.064.584-.098.645-.365.06-.266-.128-.537-.423-.608zM16.4 9.701l-1.95 1.746v.005a.44.44 0 0 0 .173.757l.003.01 2.526.728a5.199 5.199 0 0 0-.108-1.674A5.208 5.208 0 0 0 16.4 9.7zm-4.013 5.325a.437.437 0 0 0-.404-.232.44.44 0 0 0-.372.233h-.002l-1.268 2.292a5.164 5.164 0 0 0 3.326.003l-1.27-2.296h-.01zm1.888-1.293a.44.44 0 0 0-.27.036.44.44 0 0 0-.214.572l-.003.004 1.01 2.438a5.15 5.15 0 0 0 2.081-2.615l-2.6-.44-.004.005z\",\n tensorflow:\n \"M1.292 5.856L11.54 0v24l-4.095-2.378V7.603l-6.168 3.564.015-5.31zm21.43 5.311l-.014-5.31L12.46 0v24l4.095-2.378V14.87l3.092 1.788-.018-4.618-3.074-1.756V7.603l6.168 3.564z\",\n pytorch:\n \"M12.005 0L4.952 7.053a9.865 9.865 0 000 14.022 9.866 9.866 0 0014.022 0c3.984-3.9 3.986-10.205.085-14.023l-1.744 1.743c2.904 2.905 2.904 7.634 0 10.538s-7.634 2.904-10.538 0-2.904-7.634 0-10.538l4.647-4.646.582-.665zm3.568 3.899a1.327 1.327 0 00-1.327 1.327 1.327 1.327 0 001.327 1.328A1.327 1.327 0 0016.9 5.226 1.327 1.327 0 0015.573 3.9z\",\n \"apache-spark\":\n \"M10.812 0c-.425.013-.845.215-1.196.605a3.593 3.593 0 00-.493.722c-.355.667-.425 1.415-.556 2.143a551.9 551.9 0 00-.726 4.087c-.027.16-.096.227-.244.273C5.83 8.386 4.06 8.94 2.3 9.514c-.387.125-.773.289-1.114.506-1.042.665-1.196 1.753-.415 2.71.346.422.79.715 1.284.936 1.1.49 2.202.976 3.3 1.47.019.01.036.013.053.019h-.004l1.306.535c0 .023.002.045 0 .073-.2 2.03-.39 4.063-.58 6.095-.04.419-.012.831.134 1.23.317.87 1.065 1.148 1.881.701.372-.204.666-.497.937-.818 1.372-1.623 2.746-3.244 4.113-4.872.111-.133.205-.15.363-.098.349.117.697.231 1.045.347h.001c.02.012.045.02.073.03l.142.042c1.248.416 2.68.775 3.929 1.19.4.132.622.164 1.045.098.311-.048.592-.062.828-.236.602-.33.995-.957.988-1.682-.005-.427-.154-.813-.35-1.186-.82-1.556-1.637-3.113-2.461-4.666-.078-.148-.076-.243.037-.375 1.381-1.615 2.756-3.236 4.133-4.855.272-.32.513-.658.653-1.058.308-.878-.09-1.57-1-1.741a2.783 2.783 0 00-1.235.069c-1.974.521-3.947 1.041-5.918 1.57-.175.047-.26.015-.355-.144a353.08 353.08 0 00-2.421-4.018 4.61 4.61 0 00-.652-.849c-.371-.37-.802-.549-1.227-.536zm.172 3.703a.592.592 0 01.189.211c.87 1.446 1.742 2.89 2.609 4.338.07.118.135.16.277.121 1.525-.41 3.052-.813 4.579-1.217.367-.098.735-.193 1.103-.289a.399.399 0 01-.1.2c-1.259 1.48-2.516 2.962-3.779 4.438-.11.13-.12.22-.04.37.937 1.803 1.768 3.309 2.498 4.76l-3.696-1.019c-.538-.18-1.077-.358-1.615-.539-.163-.055-.25-.03-.36.1-1.248 1.488-2.504 2.97-3.759 4.454a.398.398 0 01-.18.132c.035-.378.068-.757.104-1.136.149-1.572.297-3.144.451-4.716-.03-.318.117-.405-.322-.545-1.493-.593-3.346-1.321-4.816-1.905a.595.595 0 01.24-.134c1.797-.57 3.595-1.14 5.394-1.705.127-.04.199-.092.211-.233.013-.148.05-.294.076-.441.241-1.363.483-2.726.726-4.088.068-.386.14-.771.21-1.157z\",\n databricks:\n \"M.95 14.184L12 20.403l9.919-5.55v2.21L12 22.662l-10.484-5.96-.565.308v.77L12 24l11.05-6.218v-4.317l-.515-.309L12 19.118l-9.867-5.653v-2.21L12 16.805l11.05-6.218V6.32l-.515-.308L12 11.974 2.647 6.681 12 1.388l7.76 4.368.668-.411v-.566L12 0 .95 6.27v.72L12 13.207l9.919-5.55v2.26L12 15.52 1.516 9.56l-.565.308Z\",\n \"aws-redshift\":\n \"M16.639 9.932a.822.822 0 0 1-.822-.82.823.823 0 0 1 1.645 0c0 .452-.37.82-.823.82m-2.086 4.994a.823.823 0 0 1-.822-.822.822.822 0 0 1 1.645 0 .822.822 0 0 1-.823.822m-5.004-.833a.822.822 0 1 1 .002-1.644.822.822 0 0 1-.002 1.644m-2.083 4.578a.823.823 0 0 1-.823-.82.823.823 0 0 1 1.645 0c0 .452-.37.82-.822.82m9.173-11.236a1.68 1.68 0 0 0-1.68 1.676c0 .566.285 1.066.718 1.37l-.782 1.982a1.674 1.674 0 0 0-1.923 1.104l-1.753-.398a1.675 1.675 0 0 0-3.348.103c0 .432.169.823.438 1.12l-.764 1.79c-.028-.001-.053-.008-.08-.008a1.68 1.68 0 0 0-1.68 1.676 1.68 1.68 0 0 0 3.36 0c0-.593-.312-1.112-.778-1.41l.674-1.579c.161.052.33.088.508.088.661 0 1.228-.386 1.502-.94l1.856.42a1.68 1.68 0 0 0 3.327-.325c0-.5-.224-.943-.574-1.25l.822-2.083c.053.005.104.016.157.016a1.68 1.68 0 0 0 1.68-1.676 1.68 1.68 0 0 0-1.68-1.676M12 23.145c-4.17 0-7.286-1.252-7.286-2.37V4.79C6.14 5.938 9.131 6.547 12 6.547c2.869 0 5.86-.609 7.286-1.756v15.983c0 1.12-3.116 2.37-7.286 2.37M12 .856c4.293 0 7.286 1.274 7.286 2.419 0 1.143-2.993 2.418-7.286 2.418-4.293 0-7.286-1.275-7.286-2.418C4.714 2.129 7.707.855 12 .855m8.143 2.419C20.143 1.147 15.947 0 12 0 8.052 0 3.857 1.147 3.857 3.274l.002.01h-.002v17.49C3.857 22.87 8.052 24 12 24c3.947 0 8.143-1.13 8.143-3.226V3.284h-.002l.002-.01\",\n};\n\nconst integrationBrandSvg = (name: VikingIntegrationBrandName): string => {\n const fill = VIKING_INTEGRATION_BRAND_COLORS[name];\n const d = VIKING_INTEGRATION_BRAND_PATHS[name];\n return `<path fill=\"${fill}\" d=\"${d}\"/>`;\n};\n\n/** Multi-path brand SVG markup (24×24 viewBox) — official product logos at brand hue. */\nexport const VIKING_INTEGRATION_BRAND_SVGS: Record<\n VikingIntegrationBrandName,\n string\n> = {\n kubernetes: integrationBrandSvg(\"kubernetes\"),\n tensorflow: integrationBrandSvg(\"tensorflow\"),\n pytorch: integrationBrandSvg(\"pytorch\"),\n \"apache-spark\": integrationBrandSvg(\"apache-spark\"),\n databricks: integrationBrandSvg(\"databricks\"),\n \"aws-redshift\": integrationBrandSvg(\"aws-redshift\"),\n};\n\n/** Path markup for icon registry / viking-icon-paths.json sync. */\nexport const VIKING_INTEGRATION_ICON_PATHS = Object.fromEntries(\n (\n Object.entries(VIKING_INTEGRATION_BRAND_PATHS) as [\n VikingIntegrationBrandName,\n string,\n ][]\n ).map(([name, d]) => [name, `<path d=\"${d}\"/>`]),\n) as Record<VikingIntegrationBrandName, string>;\n\nexport type VikingIntegrationIconName = VikingIntegrationBrandName;\n\nexport const VIKING_INTEGRATION_ICON_NAMES_LIST =\n VIKING_INTEGRATION_BRAND_NAMES;\n","/**\n * Zero-dependency inline SVG icon registry (24×24 stroke icons).\n * Lucide paths are synced at build time; DEML brand marks are custom artwork.\n */\nimport { LUCIDE_ICON_PATHS } from \"./lucide-paths.generated\";\nimport {\n VIKING_BRAND_ICON_FILLED_PATHS,\n VIKING_BRAND_ICON_PATHS,\n VIKING_BRAND_ICON_NAMES_LIST,\n VIKING_DRAKKAR_ICON_FILLED_PATHS,\n VIKING_DRAKKAR_ICON_PATHS,\n VIKING_DRAKKAR_ICON_NAMES_LIST,\n} from \"./brand-icons\";\nimport {\n VIKING_INTEGRATION_ICON_PATHS,\n VIKING_INTEGRATION_ICON_NAMES_LIST,\n} from \"./integration-brand-icons\";\n\nexport {\n VIKING_DRAKKAR_ICON_NAMES_LIST,\n VIKING_BRAND_ICON_NAMES_LIST,\n} from \"./brand-icons\";\nexport {\n VIKING_INTEGRATION_ICON_NAMES_LIST,\n type VikingIntegrationIconName,\n} from \"./integration-brand-icons\";\n\nexport type VikingIconName = keyof typeof VIKING_ICON_PATHS;\n\nexport type VikingIconSizePreset = \"sm\" | \"md\" | \"lg\";\n\nexport type VikingIconVariant = \"outline\" | \"filled\";\n\n/** Semantic color tokens resolved to CSS custom properties. */\nexport type VikingIconColorToken =\n | \"inherit\"\n | \"accent\"\n | \"success\"\n | \"warning\"\n | \"danger\"\n | \"info\"\n | \"muted\"\n | \"text\";\n\n/** Pixel sizes for sm / md / lg presets. */\nexport const VIKING_ICON_SIZE_PRESETS: Record<VikingIconSizePreset, number> = {\n sm: 16,\n md: 20,\n lg: 24,\n} as const;\n\n/** Custom icons not covered by Lucide (hub topology, ML model tile, OAuth stubs). */\nconst VIKING_CUSTOM_ICON_PATHS = {\n hub: '<circle cx=\"12\" cy=\"12\" r=\"3\"/><path d=\"M12 3v3M12 18v3M3 12h3M18 12h3M5.6 5.6l2.1 2.1M16.3 16.3l2.1 2.1M18.4 5.6l-2.1 2.1M7.7 16.3l-2.1 2.1\"/>',\n model:\n '<rect x=\"4\" y=\"8\" width=\"16\" height=\"10\" rx=\"2\"/><path d=\"M8 8V6a4 4 0 0 1 8 0v2\"/>',\n google:\n '<path d=\"M12 11.2v2.4h6.6c-.3 1.5-1.8 4.4-6.6 4.4-4 0-7.2-3.3-7.2-7.3S8 3.4 12 3.4c2.3 0 3.9 1 4.8 1.8l3.2-3.1C17.5.8 14.9 0 12 0 5.4 0 0 5.4 0 12s5.4 12 12 12c6.9 0 11.5-4.8 11.5-11.6 0-.8-.1-1.4-.2-1.9H12z\"/>',\n apple:\n '<path d=\"M16.365 12.14c.02 2.53 2.21 3.38 2.23 3.39-.02.07-.35 1.21-1.16 2.4-.7 1.02-1.43 2.03-2.58 2.05-1.13.02-1.49-.67-2.78-.67-1.29 0-1.69.65-2.75.69-1.11.04-1.95-1.12-2.66-2.13-1.44-2.08-2.54-5.87-1.07-8.43.73-1.27 2.04-2.08 3.46-2.1 1.08-.02 2.1.72 2.78.72.67 0 2.14-.89 3.61-.76.61.03 2.33.25 3.44 1.88-.09.06-2.05 1.2-2.03 3.55M13.75 3.64c.59-.71 1-1.7.89-2.68-.86.03-1.9.57-2.52 1.28-.55.63-1.03 1.65-.9 2.62.95.07 1.92-.49 2.53-1.22\"/>',\n} as const;\n\nexport const VIKING_ICON_PATHS = {\n ...LUCIDE_ICON_PATHS,\n ...VIKING_BRAND_ICON_PATHS,\n ...VIKING_DRAKKAR_ICON_PATHS,\n ...VIKING_INTEGRATION_ICON_PATHS,\n ...VIKING_CUSTOM_ICON_PATHS,\n} as const;\n\n/** Filled-path overrides used when variant=\"filled\" (brand marks, solid shapes). */\nexport const VIKING_ICON_FILLED_PATHS: Partial<Record<VikingIconName, string>> =\n {\n ...VIKING_BRAND_ICON_FILLED_PATHS,\n ...VIKING_DRAKKAR_ICON_FILLED_PATHS,\n };\n\n/** Legacy Material Icons ligature names → Viking icon registry keys. */\nexport const MATERIAL_ICON_ALIASES: Record<string, VikingIconName> = {\n analytics: \"deml\",\n security: \"shield\",\n link: \"link\",\n visibility: \"eye\",\n shield: \"shield\",\n trending_up: \"trending-up\",\n lock: \"lock\",\n fingerprint: \"fingerprint\",\n gpp_maybe: \"shield\",\n verified_user: \"user-shield\",\n bolt: \"bolt\",\n cloud: \"cloud\",\n lan: \"network\",\n hub: \"hub\",\n speed: \"speed\",\n rocket_launch: \"rocket\",\n insights: \"insights\",\n check: \"check\",\n description: \"file\",\n vpn_key: \"key\",\n policy: \"policy\",\n bug_report: \"bug\",\n search: \"search\",\n chevron_left: \"chevron-left\",\n chevron_right: \"chevron-right\",\n verified: \"check-circle\",\n warning: \"alert-triangle\",\n close: \"x\",\n account_balance: \"building\",\n send: \"send\",\n check_circle: \"check-circle\",\n play_circle: \"play\",\n input: \"terminal\",\n model_training: \"model\",\n auto_awesome: \"sparkle\",\n error_outline: \"alert-circle\",\n home: \"home\",\n cookie: \"cookie\",\n search_off: \"search-off\",\n person_add: \"user\",\n storage: \"aws-redshift\",\n data_object: \"aws-redshift\",\n memory: \"tensorflow\",\n psychology: \"pytorch\",\n dns: \"server\",\n login: \"log-in\",\n};\n\n/** Icons always rendered with fill (play triangle, dot grids). */\nexport const VIKING_FILLED_ICON_NAMES = [\n \"play\",\n \"dots-horizontal\",\n \"dots-vertical\",\n \"grip-vertical\",\n] as const satisfies readonly VikingIconName[];\n\n/** OAuth / vendor marks rendered with official brand artwork in viking-icon. */\nexport const VIKING_BRAND_ICON_NAMES = [\n \"google\",\n \"apple\",\n ...VIKING_BRAND_ICON_NAMES_LIST,\n] as const satisfies readonly VikingIconName[];\n\nconst VIKING_ICON_COLOR_TOKENS: Record<\n Exclude<VikingIconColorToken, \"inherit\">,\n string\n> = {\n accent: \"var(--viking-accent)\",\n success: \"var(--viking-success)\",\n warning: \"var(--viking-warning)\",\n danger: \"var(--viking-danger)\",\n info: \"var(--viking-info)\",\n muted: \"var(--viking-text-muted)\",\n text: \"var(--viking-text)\",\n};\n\nexport const vikingIconViewBox = (_name: VikingIconName): string => \"0 0 24 24\";\n\n/** Resolve pixel size from preset or explicit value. */\nexport const resolveVikingIconSize = (\n size: number | undefined,\n preset: VikingIconSizePreset | null | undefined,\n): number => {\n if (preset) {\n return VIKING_ICON_SIZE_PRESETS[preset];\n }\n return size ?? VIKING_ICON_SIZE_PRESETS.lg;\n};\n\n/** Resolve semantic color token or raw CSS value for icon tinting. */\nexport const resolveVikingIconColor = (\n color: VikingIconColorToken | string | undefined,\n): string | undefined => {\n if (!color || color === \"inherit\") {\n return undefined;\n }\n if (color in VIKING_ICON_COLOR_TOKENS) {\n return VIKING_ICON_COLOR_TOKENS[\n color as Exclude<VikingIconColorToken, \"inherit\">\n ];\n }\n return color;\n};\n\nconst VIKING_ICON_PATH_KEYS = new Set(Object.keys(VIKING_ICON_PATHS));\n\n/** Resolve a Viking or legacy Material icon name to a registry key. */\nexport const resolveVikingIcon = (name: string): VikingIconName => {\n const normalized = name.trim().toLowerCase().replace(/\\s+/g, \"_\");\n if (VIKING_ICON_PATH_KEYS.has(normalized)) {\n return normalized as VikingIconName;\n }\n const alias = MATERIAL_ICON_ALIASES[normalized];\n if (alias) {\n return alias;\n }\n return \"info\";\n};\n\nexport const VIKING_ICON_NAMES = Object.keys(\n VIKING_ICON_PATHS,\n) as VikingIconName[];\n\n/** Lucide-sourced icon names (for docs and showcase grouping). */\nexport const VIKING_LUCIDE_ICON_NAMES = Object.keys(\n LUCIDE_ICON_PATHS,\n) as (keyof typeof LUCIDE_ICON_PATHS)[];\n","import { Directive, Provider, Type, forwardRef, signal } from \"@angular/core\";\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from \"@angular/forms\";\n\n/** Registers a component as a ControlValueAccessor. */\nexport const provideVikingCva = (component: Type<unknown>): Provider => ({\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => component),\n multi: true,\n});\n\n/** Shared ControlValueAccessor plumbing for Viking-Material form controls. */\n@Directive()\nexport abstract class VikingControl<T> implements ControlValueAccessor {\n protected onChange: (value: T) => void = () => {};\n protected onTouched: () => void = () => {};\n\n /** Disabled state driven by Angular forms (setDisabledState). */\n readonly formDisabled = signal(false);\n\n abstract writeValue(value: T): void;\n\n registerOnChange(fn: (value: T) => void): void {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n\n setDisabledState(isDisabled: boolean): void {\n this.formDisabled.set(isDisabled);\n }\n}\n","/** Attaches constructable stylesheet to a shadow root (with fallback). */\nexport const attachShadowStyles = (shadow: ShadowRoot, css: string): void => {\n if (\n \"adoptedStyleSheets\" in Document.prototype &&\n \"replaceSync\" in CSSStyleSheet.prototype\n ) {\n const sheet = new CSSStyleSheet();\n sheet.replaceSync(css);\n shadow.adoptedStyleSheets = [sheet];\n return;\n }\n\n const style = document.createElement(\"style\");\n style.textContent = css;\n shadow.append(style);\n};\n\n/** Reads a boolean attribute presence/value. */\nexport const readBoolAttr = (el: HTMLElement, name: string): boolean =>\n el.hasAttribute(name) && el.getAttribute(name) !== \"false\";\n\n/** Safely sets form value when ElementInternals is fully supported (e.g. not in jsdom). */\nexport const setFormValue = (\n internals: ElementInternals | null,\n value: string,\n): void => {\n if (internals && typeof internals.setFormValue === \"function\") {\n internals.setFormValue(value);\n }\n};\n\n/** Attaches ElementInternals where available without breaking older WebKit or test DOMs. */\nexport const attachElementInternals = (\n el: HTMLElement,\n): ElementInternals | null => {\n const attachInternals = (\n el as HTMLElement & { attachInternals?: () => ElementInternals }\n ).attachInternals;\n return typeof attachInternals === \"function\"\n ? attachInternals.call(el)\n : null;\n};\n\n/** Opens a native dialog when showModal is available. */\nexport const showModalDialog = (dialog: HTMLDialogElement | null): void => {\n if (dialog && typeof dialog.showModal === \"function\" && !dialog.open) {\n dialog.showModal();\n }\n};\n\n/** Closes a native dialog when close is available. */\nexport const closeModalDialog = (dialog: HTMLDialogElement | null): void => {\n if (dialog && typeof dialog.close === \"function\" && dialog.open) {\n dialog.close();\n }\n};\n","export const HTMLElementBase: typeof HTMLElement =\n typeof HTMLElement === \"undefined\"\n ? (class {} as unknown as typeof HTMLElement)\n : HTMLElement;\n\n/** Stable unique id for associating labels and controls. */\nexport const vikingWcUid = (prefix: string): string =>\n `${prefix}-${Math.random().toString(36).slice(2, 9)}`;\n\n/** Escape text for safe innerHTML insertion. */\nexport const escapeHtml = (value: string): string => {\n const entities: Record<string, string> = {\n \"&\": \"&\",\n \"<\": \"<\",\n \">\": \">\",\n '\"': \""\",\n \"'\": \"'\",\n };\n\n return value.replace(\n /[&<>\"']/g,\n (character) => entities[character] ?? character,\n );\n};\n\n/** Platform modifier label for keyboard shortcut hints. */\nexport const modKeyLabel = (): string =>\n typeof navigator !== \"undefined\" &&\n /Mac|iPhone|iPad/i.test(navigator.platform)\n ? \"⌘\"\n : \"Ctrl\";\n\n/** Register a custom element when the runtime supports it (skip during SSR/prerender). */\nexport const defineCustomElement = (\n tag: string,\n ctor: CustomElementConstructor,\n): void => {\n if (typeof customElements === \"undefined\" || customElements.get(tag)) {\n return;\n }\n customElements.define(tag, ctor);\n};\n\n/** Register an alias tag with a fresh subclass; customElements disallows reusing constructors. */\nexport const defineCustomElementAlias = <T extends CustomElementConstructor>(\n tag: string,\n ctor: T,\n): void => {\n if (typeof customElements === \"undefined\" || customElements.get(tag)) {\n return;\n }\n customElements.define(tag, class extends ctor {});\n};\n","/**\n * AUTO-GENERATED by scripts/sync_lucide_icons.mjs — do not edit by hand.\n * Lucide paths are inlined at build time; lucide is a devDependency only.\n * @see https://lucide.dev\n */\nexport const LUCIDE_ICON_PATHS = {\n \"alert-circle\":\n '<circle cx=\"12\" cy=\"12\" r=\"10\"/><line x1=\"12\" x2=\"12\" y1=\"8\" y2=\"12\"/><line x1=\"12\" x2=\"12.01\" y1=\"16\" y2=\"16\"/>',\n \"alert-triangle\":\n '<path d=\"m21.73 18-8-14a2 2 0 0 0-3.48 0l-8 14A2 2 0 0 0 4 21h16a2 2 0 0 0 1.73-3\"/><path d=\"M12 9v4\"/><path d=\"M12 17h.01\"/>',\n \"arrow-left\": '<path d=\"m12 19-7-7 7-7\"/><path d=\"M19 12H5\"/>',\n \"arrow-right\": '<path d=\"M5 12h14\"/><path d=\"m12 5 7 7-7 7\"/>',\n \"arrow-up-right\": '<path d=\"M7 7h10v10\"/><path d=\"M7 17 17 7\"/>',\n \"bar-chart\":\n '<path d=\"M3 3v16a2 2 0 0 0 2 2h16\"/><path d=\"M18 17V9\"/><path d=\"M13 17V5\"/><path d=\"M8 17v-3\"/>',\n bell: '<path d=\"M10.268 21a2 2 0 0 0 3.464 0\"/><path d=\"M3.262 15.326A1 1 0 0 0 4 17h16a1 1 0 0 0 .74-1.673C19.41 13.956 18 12.499 18 8A6 6 0 0 0 6 8c0 4.499-1.411 5.956-2.738 7.326\"/>',\n bold: '<path d=\"M6 12h9a4 4 0 0 1 0 8H7a1 1 0 0 1-1-1V5a1 1 0 0 1 1-1h7a4 4 0 0 1 0 8\"/>',\n bolt: '<path d=\"M4 14a1 1 0 0 1-.78-1.63l9.9-10.2a.5.5 0 0 1 .86.46l-1.92 6.02A1 1 0 0 0 13 10h7a1 1 0 0 1 .78 1.63l-9.9 10.2a.5.5 0 0 1-.86-.46l1.92-6.02A1 1 0 0 0 11 14z\"/>',\n brain:\n '<path d=\"M12 18V5\"/><path d=\"M15 13a4.17 4.17 0 0 1-3-4 4.17 4.17 0 0 1-3 4\"/><path d=\"M17.598 6.5A3 3 0 1 0 12 5a3 3 0 1 0-5.598 1.5\"/><path d=\"M17.997 5.125a4 4 0 0 1 2.526 5.77\"/><path d=\"M18 18a4 4 0 0 0 2-7.464\"/><path d=\"M19.967 17.483A4 4 0 1 1 12 18a4 4 0 1 1-7.967-.517\"/><path d=\"M6 18a4 4 0 0 1-2-7.464\"/><path d=\"M6.003 5.125a4 4 0 0 0-2.526 5.77\"/>',\n bug: '<path d=\"M12 20v-9\"/><path d=\"M14 7a4 4 0 0 1 4 4v3a6 6 0 0 1-12 0v-3a4 4 0 0 1 4-4z\"/><path d=\"M14.12 3.88 16 2\"/><path d=\"M21 21a4 4 0 0 0-3.81-4\"/><path d=\"M21 5a4 4 0 0 1-3.55 3.97\"/><path d=\"M22 13h-4\"/><path d=\"M3 21a4 4 0 0 1 3.81-4\"/><path d=\"M3 5a4 4 0 0 0 3.55 3.97\"/><path d=\"M6 13H2\"/><path d=\"m8 2 1.88 1.88\"/><path d=\"M9 7.13V6a3 3 0 1 1 6 0v1.13\"/>',\n building:\n '<path d=\"M12 10h.01\"/><path d=\"M12 14h.01\"/><path d=\"M12 6h.01\"/><path d=\"M16 10h.01\"/><path d=\"M16 14h.01\"/><path d=\"M16 6h.01\"/><path d=\"M8 10h.01\"/><path d=\"M8 14h.01\"/><path d=\"M8 6h.01\"/><path d=\"M9 22v-3a1 1 0 0 1 1-1h4a1 1 0 0 1 1 1v3\"/><rect x=\"4\" y=\"2\" width=\"16\" height=\"20\" rx=\"2\"/>',\n calendar:\n '<path d=\"M8 2v4\"/><path d=\"M16 2v4\"/><rect width=\"18\" height=\"18\" x=\"3\" y=\"4\" rx=\"2\"/><path d=\"M3 10h18\"/>',\n check: '<path d=\"M20 6 9 17l-5-5\"/>',\n \"check-circle\": '<circle cx=\"12\" cy=\"12\" r=\"10\"/><path d=\"m9 12 2 2 4-4\"/>',\n \"chevron-down\": '<path d=\"m6 9 6 6 6-6\"/>',\n \"chevron-left\": '<path d=\"m15 18-6-6 6-6\"/>',\n \"chevron-right\": '<path d=\"m9 18 6-6-6-6\"/>',\n \"chevron-up\": '<path d=\"m18 15-6-6-6 6\"/>',\n chip: '<path d=\"M12 20v2\"/><path d=\"M12 2v2\"/><path d=\"M17 20v2\"/><path d=\"M17 2v2\"/><path d=\"M2 12h2\"/><path d=\"M2 17h2\"/><path d=\"M2 7h2\"/><path d=\"M20 12h2\"/><path d=\"M20 17h2\"/><path d=\"M20 7h2\"/><path d=\"M7 20v2\"/><path d=\"M7 2v2\"/><rect x=\"4\" y=\"4\" width=\"16\" height=\"16\" rx=\"2\"/><rect x=\"8\" y=\"8\" width=\"8\" height=\"8\" rx=\"1\"/>',\n clock: '<circle cx=\"12\" cy=\"12\" r=\"10\"/><path d=\"M12 6v6l4 2\"/>',\n cloud: '<path d=\"M17.5 19H9a7 7 0 1 1 6.71-9h1.79a4.5 4.5 0 1 1 0 9Z\"/>',\n cookie:\n '<path d=\"M12 2a10 10 0 1 0 10 10 4 4 0 0 1-5-5 4 4 0 0 1-5-5\"/><path d=\"M8.5 8.5v.01\"/><path d=\"M16 15.5v.01\"/><path d=\"M12 12v.01\"/><path d=\"M11 17v.01\"/><path d=\"M7 14v.01\"/>',\n copy: '<rect width=\"14\" height=\"14\" x=\"8\" y=\"8\" rx=\"2\" ry=\"2\"/><path d=\"M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2\"/>',\n \"dots-horizontal\":\n '<circle cx=\"12\" cy=\"12\" r=\"1\" fill=\"currentColor\" stroke=\"none\"/><circle cx=\"19\" cy=\"12\" r=\"1\" fill=\"currentColor\" stroke=\"none\"/><circle cx=\"5\" cy=\"12\" r=\"1\" fill=\"currentColor\" stroke=\"none\"/>',\n \"dots-vertical\":\n '<circle cx=\"12\" cy=\"12\" r=\"1\" fill=\"currentColor\" stroke=\"none\"/><circle cx=\"12\" cy=\"5\" r=\"1\" fill=\"currentColor\" stroke=\"none\"/><circle cx=\"12\" cy=\"19\" r=\"1\" fill=\"currentColor\" stroke=\"none\"/>',\n download:\n '<path d=\"M12 15V3\"/><path d=\"M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4\"/><path d=\"m7 10 5 5 5-5\"/>',\n external:\n '<path d=\"M15 3h6v6\"/><path d=\"M10 14 21 3\"/><path d=\"M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6\"/>',\n eye: '<path d=\"M2.062 12.348a1 1 0 0 1 0-.696 10.75 10.75 0 0 1 19.876 0 1 1 0 0 1 0 .696 10.75 10.75 0 0 1-19.876 0\"/><circle cx=\"12\" cy=\"12\" r=\"3\"/>',\n \"eye-off\":\n '<path d=\"M10.733 5.076a10.744 10.744 0 0 1 11.205 6.575 1 1 0 0 1 0 .696 10.747 10.747 0 0 1-1.444 2.49\"/><path d=\"M14.084 14.158a3 3 0 0 1-4.242-4.242\"/><path d=\"M17.479 17.499a10.75 10.75 0 0 1-15.417-5.151 1 1 0 0 1 0-.696 10.75 10.75 0 0 1 4.446-5.143\"/><path d=\"m2 2 20 20\"/>',\n file: '<path d=\"M6 22a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h8a2.4 2.4 0 0 1 1.704.706l3.588 3.588A2.4 2.4 0 0 1 20 8v12a2 2 0 0 1-2 2z\"/><path d=\"M14 2v5a1 1 0 0 0 1 1h5\"/>',\n filter:\n '<path d=\"M10 20a1 1 0 0 0 .553.895l2 1A1 1 0 0 0 14 21v-7a2 2 0 0 1 .517-1.341L21.74 4.67A1 1 0 0 0 21 3H3a1 1 0 0 0-.742 1.67l7.225 7.989A2 2 0 0 1 10 14z\"/>',\n fingerprint:\n '<path d=\"M12 10a2 2 0 0 0-2 2c0 1.02-.1 2.51-.26 4\"/><path d=\"M14 13.12c0 2.38 0 6.38-1 8.88\"/><path d=\"M17.29 21.02c.12-.6.43-2.3.5-3.02\"/><path d=\"M2 12a10 10 0 0 1 18-6\"/><path d=\"M2 16h.01\"/><path d=\"M21.8 16c.2-2 .131-5.354 0-6\"/><path d=\"M5 19.5C5.5 18 6 15 6 12a6 6 0 0 1 .34-2\"/><path d=\"M8.65 22c.21-.66.45-1.32.57-2\"/><path d=\"M9 6.8a6 6 0 0 1 9 5.2v2\"/>',\n folder:\n '<path d=\"M20 20a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2h-7.9a2 2 0 0 1-1.69-.9L9.6 3.9A2 2 0 0 0 7.93 3H4a2 2 0 0 0-2 2v13a2 2 0 0 0 2 2Z\"/>',\n globe:\n '<circle cx=\"12\" cy=\"12\" r=\"10\"/><path d=\"M12 2a14.5 14.5 0 0 0 0 20 14.5 14.5 0 0 0 0-20\"/><path d=\"M2 12h20\"/>',\n \"grip-vertical\":\n '<circle cx=\"9\" cy=\"12\" r=\"1\" fill=\"currentColor\" stroke=\"none\"/><circle cx=\"9\" cy=\"5\" r=\"1\" fill=\"currentColor\" stroke=\"none\"/><circle cx=\"9\" cy=\"19\" r=\"1\" fill=\"currentColor\" stroke=\"none\"/><circle cx=\"15\" cy=\"12\" r=\"1\" fill=\"currentColor\" stroke=\"none\"/><circle cx=\"15\" cy=\"5\" r=\"1\" fill=\"currentColor\" stroke=\"none\"/><circle cx=\"15\" cy=\"19\" r=\"1\" fill=\"currentColor\" stroke=\"none\"/>',\n heart:\n '<path d=\"M2 9.5a5.5 5.5 0 0 1 9.591-3.676.56.56 0 0 0 .818 0A5.49 5.49 0 0 1 22 9.5c0 2.29-1.5 4-3 5.5l-5.492 5.313a2 2 0 0 1-3 .019L5 15c-1.5-1.5-3-3.2-3-5.5\"/>',\n home: '<path d=\"M15 21v-8a1 1 0 0 0-1-1h-4a1 1 0 0 0-1 1v8\"/><path d=\"M3 10a2 2 0 0 1 .709-1.528l7-6a2 2 0 0 1 2.582 0l7 6A2 2 0 0 1 21 10v9a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2z\"/>',\n image:\n '<rect width=\"18\" height=\"18\" x=\"3\" y=\"3\" rx=\"2\" ry=\"2\"/><circle cx=\"9\" cy=\"9\" r=\"2\"/><path d=\"m21 15-3.086-3.086a2 2 0 0 0-2.828 0L6 21\"/>',\n info: '<circle cx=\"12\" cy=\"12\" r=\"10\"/><path d=\"M12 16v-4\"/><path d=\"M12 8h.01\"/>',\n insights: '<path d=\"M3 3v16a2 2 0 0 0 2 2h16\"/><path d=\"m19 9-5 5-4-4-3 3\"/>',\n italic:\n '<line x1=\"19\" x2=\"10\" y1=\"4\" y2=\"4\"/><line x1=\"14\" x2=\"5\" y1=\"20\" y2=\"20\"/><line x1=\"15\" x2=\"9\" y1=\"4\" y2=\"20\"/>',\n key: '<path d=\"M2.586 17.414A2 2 0 0 0 2 18.828V21a1 1 0 0 0 1 1h3a1 1 0 0 0 1-1v-1a1 1 0 0 1 1-1h1a1 1 0 0 0 1-1v-1a1 1 0 0 1 1-1h.172a2 2 0 0 0 1.414-.586l.814-.814a6.5 6.5 0 1 0-4-4z\"/><circle cx=\"16.5\" cy=\"7.5\" r=\".5\" fill=\"currentColor\"/>',\n link: '<path d=\"M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71\"/><path d=\"M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71\"/>',\n list: '<path d=\"M3 5h.01\"/><path d=\"M3 12h.01\"/><path d=\"M3 19h.01\"/><path d=\"M8 5h13\"/><path d=\"M8 12h13\"/><path d=\"M8 19h13\"/>',\n \"list-ordered\":\n '<path d=\"M11 5h10\"/><path d=\"M11 12h10\"/><path d=\"M11 19h10\"/><path d=\"M4 4h1v5\"/><path d=\"M4 9h2\"/><path d=\"M6.5 20H3.4c0-1 2.6-1.925 2.6-3.5a1.5 1.5 0 0 0-2.6-1.02\"/>',\n loader: '<path d=\"M21 12a9 9 0 1 1-6.219-8.56\"/>',\n lock: '<rect width=\"18\" height=\"11\" x=\"3\" y=\"11\" rx=\"2\" ry=\"2\"/><path d=\"M7 11V7a5 5 0 0 1 10 0v4\"/>',\n \"log-in\":\n '<path d=\"m10 17 5-5-5-5\"/><path d=\"M15 12H3\"/><path d=\"M15 3h4a2 2 0 0 1 2 2v14a2 2 0 0 1-2 2h-4\"/>',\n \"log-out\":\n '<path d=\"m16 17 5-5-5-5\"/><path d=\"M21 12H9\"/><path d=\"M9 21H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h4\"/>',\n mail: '<path d=\"m22 7-8.991 5.727a2 2 0 0 1-2.009 0L2 7\"/><rect x=\"2\" y=\"4\" width=\"20\" height=\"16\" rx=\"2\"/>',\n menu: '<path d=\"M4 5h16\"/><path d=\"M4 12h16\"/><path d=\"M4 19h16\"/>',\n minus: '<path d=\"M5 12h14\"/>',\n moon: '<path d=\"M20.985 12.486a9 9 0 1 1-9.473-9.472c.405-.022.617.46.402.803a6 6 0 0 0 8.268 8.268c.344-.215.825-.004.803.401\"/>',\n network:\n '<rect x=\"16\" y=\"16\" width=\"6\" height=\"6\" rx=\"1\"/><rect x=\"2\" y=\"16\" width=\"6\" height=\"6\" rx=\"1\"/><rect x=\"9\" y=\"2\" width=\"6\" height=\"6\" rx=\"1\"/><path d=\"M5 16v-3a1 1 0 0 1 1-1h12a1 1 0 0 1 1 1v3\"/><path d=\"M12 12V8\"/>',\n paperclip:\n '<path d=\"m16 6-8.414 8.586a2 2 0 0 0 2.829 2.829l8.414-8.586a4 4 0 1 0-5.657-5.657l-8.379 8.551a6 6 0 1 0 8.485 8.485l8.379-8.551\"/>',\n pencil:\n '<path d=\"M21.174 6.812a1 1 0 0 0-3.986-3.987L3.842 16.174a2 2 0 0 0-.5.83l-1.321 4.352a.5.5 0 0 0 .623.622l4.353-1.32a2 2 0 0 0 .83-.497z\"/><path d=\"m15 5 4 4\"/>',\n phone:\n '<path d=\"M13.832 16.568a1 1 0 0 0 1.213-.303l.355-.465A2 2 0 0 1 17 15h3a2 2 0 0 1 2 2v3a2 2 0 0 1-2 2A18 18 0 0 1 2 4a2 2 0 0 1 2-2h3a2 2 0 0 1 2 2v3a2 2 0 0 1-.8 1.6l-.468.351a1 1 0 0 0-.292 1.233 14 14 0 0 0 6.392 6.384\"/>',\n play: '<path d=\"M5 5a2 2 0 0 1 3.008-1.728l11.997 6.998a2 2 0 0 1 .003 3.458l-12 7A2 2 0 0 1 5 19z\" fill=\"currentColor\" stroke=\"none\"/>',\n plus: '<path d=\"M5 12h14\"/><path d=\"M12 5v14\"/>',\n policy:\n '<path d=\"M20 13c0 5-3.5 7.5-7.66 8.95a1 1 0 0 1-.67-.01C7.5 20.5 4 18 4 13V6a1 1 0 0 1 1-1c2 0 4.5-1.2 6.24-2.72a1.17 1.17 0 0 1 1.52 0C14.51 3.81 17 5 19 5a1 1 0 0 1 1 1z\"/><path d=\"m9 12 2 2 4-4\"/>',\n refresh:\n '<path d=\"M3 12a9 9 0 0 1 9-9 9.75 9.75 0 0 1 6.74 2.74L21 8\"/><path d=\"M21 3v5h-5\"/><path d=\"M21 12a9 9 0 0 1-9 9 9.75 9.75 0 0 1-6.74-2.74L3 16\"/><path d=\"M8 16H3v5\"/>',\n rocket:\n '<path d=\"M12 15v5s3.03-.55 4-2c1.08-1.62 0-5 0-5\"/><path d=\"M4.5 16.5c-1.5 1.26-2 5-2 5s3.74-.5 5-2c.71-.84.7-2.13-.09-2.91a2.18 2.18 0 0 0-2.91-.09\"/><path d=\"M9 12a22 22 0 0 1 2-3.95A12.88 12.88 0 0 1 22 2c0 2.72-.78 7.5-6 11a22.4 22.4 0 0 1-4 2z\"/><path d=\"M9 12H4s.55-3.03 2-4c1.62-1.08 5 .05 5 .05\"/>',\n search: '<path d=\"m21 21-4.34-4.34\"/><circle cx=\"11\" cy=\"11\" r=\"8\"/>',\n \"search-off\":\n '<path d=\"m13.5 8.5-5 5\"/><path d=\"m8.5 8.5 5 5\"/><circle cx=\"11\" cy=\"11\" r=\"8\"/><path d=\"m21 21-4.3-4.3\"/>',\n send: '<path d=\"M14.536 21.686a.5.5 0 0 0 .937-.024l6.5-19a.496.496 0 0 0-.635-.635l-19 6.5a.5.5 0 0 0-.024.937l7.93 3.18a2 2 0 0 1 1.112 1.11z\"/><path d=\"m21.854 2.147-10.94 10.939\"/>',\n server:\n '<rect width=\"20\" height=\"8\" x=\"2\" y=\"2\" rx=\"2\" ry=\"2\"/><rect width=\"20\" height=\"8\" x=\"2\" y=\"14\" rx=\"2\" ry=\"2\"/><line x1=\"6\" x2=\"6.01\" y1=\"6\" y2=\"6\"/><line x1=\"6\" x2=\"6.01\" y1=\"18\" y2=\"18\"/>',\n settings:\n '<path d=\"M9.671 4.136a2.34 2.34 0 0 1 4.659 0 2.34 2.34 0 0 0 3.319 1.915 2.34 2.34 0 0 1 2.33 4.033 2.34 2.34 0 0 0 0 3.831 2.34 2.34 0 0 1-2.33 4.033 2.34 2.34 0 0 0-3.319 1.915 2.34 2.34 0 0 1-4.659 0 2.34 2.34 0 0 0-3.32-1.915 2.34 2.34 0 0 1-2.33-4.033 2.34 2.34 0 0 0 0-3.831A2.34 2.34 0 0 1 6.35 6.051a2.34 2.34 0 0 0 3.319-1.915\"/><circle cx=\"12\" cy=\"12\" r=\"3\"/>',\n shield:\n '<path d=\"M20 13c0 5-3.5 7.5-7.66 8.95a1 1 0 0 1-.67-.01C7.5 20.5 4 18 4 13V6a1 1 0 0 1 1-1c2 0 4.5-1.2 6.24-2.72a1.17 1.17 0 0 1 1.52 0C14.51 3.81 17 5 19 5a1 1 0 0 1 1 1z\"/>',\n ship: '<path d=\"M12 10.189V14\"/><path d=\"M12 2v3\"/><path d=\"M19 13V7a2 2 0 0 0-2-2H7a2 2 0 0 0-2 2v6\"/><path d=\"M19.38 20A11.6 11.6 0 0 0 21 14l-8.188-3.639a2 2 0 0 0-1.624 0L3 14a11.6 11.6 0 0 0 2.81 7.76\"/><path d=\"M2 21c.6.5 1.2 1 2.5 1 2.5 0 2.5-2 5-2 1.3 0 1.9.5 2.5 1s1.2 1 2.5 1c2.5 0 2.5-2 5-2 1.3 0 1.9.5 2.5 1\"/>',\n sparkle:\n '<path d=\"M11.017 2.814a1 1 0 0 1 1.966 0l1.051 5.558a2 2 0 0 0 1.594 1.594l5.558 1.051a1 1 0 0 1 0 1.966l-5.558 1.051a2 2 0 0 0-1.594 1.594l-1.051 5.558a1 1 0 0 1-1.966 0l-1.051-5.558a2 2 0 0 0-1.594-1.594l-5.558-1.051a1 1 0 0 1 0-1.966l5.558-1.051a2 2 0 0 0 1.594-1.594z\"/><path d=\"M20 2v4\"/><path d=\"M22 4h-4\"/><circle cx=\"4\" cy=\"20\" r=\"2\"/>',\n speed: '<path d=\"m12 14 4-4\"/><path d=\"M3.34 19a10 10 0 1 1 17.32 0\"/>',\n star: '<path d=\"M11.525 2.295a.53.53 0 0 1 .95 0l2.31 4.679a2.123 2.123 0 0 0 1.595 1.16l5.166.756a.53.53 0 0 1 .294.904l-3.736 3.638a2.123 2.123 0 0 0-.611 1.878l.882 5.14a.53.53 0 0 1-.771.56l-4.618-2.428a2.122 2.122 0 0 0-1.973 0L6.396 21.01a.53.53 0 0 1-.77-.56l.881-5.139a2.122 2.122 0 0 0-.611-1.879L2.16 9.795a.53.53 0 0 1 .294-.906l5.165-.755a2.122 2.122 0 0 0 1.597-1.16z\"/>',\n sun: '<circle cx=\"12\" cy=\"12\" r=\"4\"/><path d=\"M12 2v2\"/><path d=\"M12 20v2\"/><path d=\"m4.93 4.93 1.41 1.41\"/><path d=\"m17.66 17.66 1.41 1.41\"/><path d=\"M2 12h2\"/><path d=\"M20 12h2\"/><path d=\"m6.34 17.66-1.41 1.41\"/><path d=\"m19.07 4.93-1.41 1.41\"/>',\n terminal: '<path d=\"M12 19h8\"/><path d=\"m4 17 6-6-6-6\"/>',\n trash:\n '<path d=\"M10 11v6\"/><path d=\"M14 11v6\"/><path d=\"M19 6v14a2 2 0 0 1-2 2H7a2 2 0 0 1-2-2V6\"/><path d=\"M3 6h18\"/><path d=\"M8 6V4a2 2 0 0 1 2-2h4a2 2 0 0 1 2 2v2\"/>',\n \"trending-up\": '<path d=\"M16 7h6v6\"/><path d=\"m22 7-8.5 8.5-5-5L2 17\"/>',\n underline:\n '<path d=\"M6 4v6a6 6 0 0 0 12 0V4\"/><line x1=\"4\" x2=\"20\" y1=\"20\" y2=\"20\"/>',\n upload:\n '<path d=\"M12 3v12\"/><path d=\"m17 8-5-5-5 5\"/><path d=\"M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4\"/>',\n user: '<path d=\"M19 21v-2a4 4 0 0 0-4-4H9a4 4 0 0 0-4 4v2\"/><circle cx=\"12\" cy=\"7\" r=\"4\"/>',\n \"user-shield\":\n '<path d=\"M20 13c0 5-3.5 7.5-7.66 8.95a1 1 0 0 1-.67-.01C7.5 20.5 4 18 4 13V6a1 1 0 0 1 1-1c2 0 4.5-1.2 6.24-2.72a1.17 1.17 0 0 1 1.52 0C14.51 3.81 17 5 19 5a1 1 0 0 1 1 1z\"/><path d=\"M6.376 18.91a6 6 0 0 1 11.249.003\"/><circle cx=\"12\" cy=\"11\" r=\"4\"/>',\n x: '<path d=\"M18 6 6 18\"/><path d=\"m6 6 12 12\"/>',\n} as const;\n\nexport type LucideIconName = keyof typeof LUCIDE_ICON_PATHS;\n","/**\n * DEML branded icon paths — optimized SVG geometry (not sourced from Lucide).\n * Use via viking-icon name=\"deml\" | \"deml-compact\" | \"deml-lockup\".\n */\nexport const VIKING_BRAND_ICON_PATHS = {\n /** Primary bar-chart mark in rounded frame (outline). */\n deml: '<rect x=\"3\" y=\"3\" width=\"18\" height=\"18\" rx=\"2\"/><path d=\"M8 17V13M12 17V8M16 17V11\"/>',\n /** Compact monogram for favicons and dense Drakkar shell. */\n \"deml-compact\":\n '<rect x=\"4\" y=\"4\" width=\"16\" height=\"16\" rx=\"3\"/><path d=\"M9 16V12M12 16V9M15 16V13\"/>',\n /** Lockup mark with baseline accent bar. */\n \"deml-lockup\":\n '<rect x=\"3\" y=\"3\" width=\"18\" height=\"14\" rx=\"2\"/><path d=\"M8 17V13M12 17V8M16 17V11\"/><path d=\"M3 20h18\"/>',\n} as const;\n\n/** Drakkar — Viking-UI / site shell brand marks (Lucide ship, build-time inlined). */\nexport const VIKING_DRAKKAR_ICON_PATHS = {\n /** Primary Drakkar longship mark (outline). */\n drakkar:\n '<path d=\"M12 10.189V14\"/><path d=\"M12 2v3\"/><path d=\"M19 13V7a2 2 0 0 0-2-2H7a2 2 0 0 0-2 2v6\"/><path d=\"M19.38 20A11.6 11.6 0 0 0 21 14l-8.188-3.639a2 2 0 0 0-1.624 0L3 14a11.6 11.6 0 0 0 2.81 7.76\"/><path d=\"M2 21c.6.5 1.2 1 2.5 1 2.5 0 2.5-2 5-2 1.3 0 1.9.5 2.5 1s1.2 1 2.5 1c2.5 0 2.5-2 5-2 1.3 0 1.9.5 2.5 1\"/>',\n /** Compact tile for favicons and dense navbar chrome. */\n \"drakkar-compact\":\n '<rect x=\"3\" y=\"3\" width=\"18\" height=\"18\" rx=\"2\"/><path d=\"M12 10.189V14\"/><path d=\"M12 2v3\"/><path d=\"M19 13V7a2 2 0 0 0-2-2H7a2 2 0 0 0-2 2v6\"/><path d=\"M19.38 20A11.6 11.6 0 0 0 21 14l-8.188-3.639a2 2 0 0 0-1.624 0L3 14a11.6 11.6 0 0 0 2.81 7.76\"/><path d=\"M2 21c.6.5 1.2 1 2.5 1 2.5 0 2.5-2 5-2 1.3 0 1.9.5 2.5 1s1.2 1 2.5 1c2.5 0 2.5-2 5-2 1.3 0 1.9.5 2.5 1\"/>',\n /** Lockup mark with baseline accent bar. */\n \"drakkar-lockup\":\n '<path d=\"M12 10.189V14\"/><path d=\"M12 2v3\"/><path d=\"M19 13V7a2 2 0 0 0-2-2H7a2 2 0 0 0-2 2v6\"/><path d=\"M19.38 20A11.6 11.6 0 0 0 21 14l-8.188-3.639a2 2 0 0 0-1.624 0L3 14a11.6 11.6 0 0 0 2.81 7.76\"/><path d=\"M2 21c.6.5 1.2 1 2.5 1 2.5 0 2.5-2 5-2 1.3 0 1.9.5 2.5 1s1.2 1 2.5 1c2.5 0 2.5-2 5-2 1.3 0 1.9.5 2.5 1\"/><path d=\"M3 21h18\"/>',\n} as const;\n\n/** Filled-path overrides for DEML brand marks. */\nexport const VIKING_BRAND_ICON_FILLED_PATHS: Partial<\n Record<keyof typeof VIKING_BRAND_ICON_PATHS, string>\n> = {\n deml: '<path d=\"M5 4a1 1 0 0 1 1-1h12a1 1 0 0 1 1 1v14a1 1 0 0 1-1 1H6a1 1 0 0 1-1-1V4zM8 13h2.5v4H8v-4zM12 8h2.5v9H12V8zM16 11h2.5v6H16v-6z\"/>',\n \"deml-compact\":\n '<path d=\"M6 5a1 1 0 0 1 1-1h10a1 1 0 0 1 1 1v12a1 1 0 0 1-1 1H7a1 1 0 0 1-1-1V5zM9 12h1.5v4H9v-4zM12 9h1.5v7H12V9zM15 11h1.5v5H15v-5z\"/>',\n \"deml-lockup\":\n '<path d=\"M4 4a1 1 0 0 1 1-1h14a1 1 0 0 1 1 1v11a1 1 0 0 1-1 1H5a1 1 0 0 1-1-1V4zM8 13h2.5v4H8v-4zM12 8h2.5v9H12V8zM16 11h2.5v6H16v-6z\"/><rect x=\"3\" y=\"19\" width=\"18\" height=\"2\" rx=\"1\"/>',\n};\n\n/** Filled-path overrides for Drakkar brand marks. */\nexport const VIKING_DRAKKAR_ICON_FILLED_PATHS: Partial<\n Record<keyof typeof VIKING_DRAKKAR_ICON_PATHS, string>\n> = {\n drakkar:\n '<path d=\"M7 5h10a2 2 0 0 1 2 2v3.5L20.8 14.2l-7.8-3.5a1.8 1.8 0 0 0-1.4 0L3.2 14.2a10.5 10.5 0 0 0 2.6 7.2L5.2 13V7a2 2 0 0 0-2-2z\"/><rect x=\"10.85\" y=\"2\" width=\"2.3\" height=\"12\" rx=\"0.4\"/>',\n \"drakkar-compact\":\n '<path d=\"M3 3h18a2 2 0 0 1 2 2v18a2 2 0 0 1-2 2H3a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2z\"/><path d=\"M7.5 12.5 12 9.8l4.5 2.7v2.2c0 .8-.5 1.4-1.2 1.7L12 17.8l-3.3-1.6c-.7-.3-1.2-.9-1.2-1.7v-2.2z\"/><rect x=\"11\" y=\"6\" width=\"2\" height=\"5.5\" rx=\"0.35\"/>',\n \"drakkar-lockup\":\n '<path d=\"M7 5h10a2 2 0 0 1 2 2v3.5L20.8 14.2l-7.8-3.5a1.8 1.8 0 0 0-1.4 0L3.2 14.2a10.5 10.5 0 0 0 2.6 7.2L5.2 13V7a2 2 0 0 0-2-2z\"/><rect x=\"10.85\" y=\"2\" width=\"2.3\" height=\"12\" rx=\"0.4\"/><rect x=\"3\" y=\"20\" width=\"18\" height=\"2\" rx=\"1\"/>',\n};\n\nexport type VikingBrandIconName = keyof typeof VIKING_BRAND_ICON_PATHS;\n\nexport type VikingDrakkarIconName = keyof typeof VIKING_DRAKKAR_ICON_PATHS;\n\nexport const VIKING_BRAND_ICON_NAMES_LIST = Object.keys(\n VIKING_BRAND_ICON_PATHS,\n) as VikingBrandIconName[];\n\nexport const VIKING_DRAKKAR_ICON_NAMES_LIST = Object.keys(\n VIKING_DRAKKAR_ICON_PATHS,\n) as VikingDrakkarIconName[];\n","/** Official platform brand colors — exception for recognizable integration marks (same policy as Google/Apple in viking-icon). */\nexport const VIKING_INTEGRATION_BRAND_COLORS = {\n kubernetes: \"#326CE5\",\n tensorflow: \"#FF6F00\",\n pytorch: \"#EE4C2C\",\n \"apache-spark\": \"#E25A1C\",\n databricks: \"#FF3621\",\n \"aws-redshift\": \"#8C4FFF\",\n} as const;\n\nexport type VikingIntegrationBrandName =\n keyof typeof VIKING_INTEGRATION_BRAND_COLORS;\n\nexport const VIKING_INTEGRATION_BRAND_NAMES = Object.keys(\n VIKING_INTEGRATION_BRAND_COLORS,\n) as VikingIntegrationBrandName[];\n\nexport const isIntegrationBrandIcon = (\n name: string,\n): name is VikingIntegrationBrandName =>\n (VIKING_INTEGRATION_BRAND_NAMES as readonly string[]).includes(name);\n\n/**\n * Official product logo paths (24×24 viewBox) sourced from Simple Icons (CC0).\n * Inlined at build time — no runtime icon font or CDN.\n */\nconst VIKING_INTEGRATION_BRAND_PATHS: Record<\n VikingIntegrationBrandName,\n string\n> = {\n kubernetes:\n \"M10.204 14.35l.007.01-.999 2.413a5.171 5.171 0 0 1-2.075-2.597l2.578-.437.004.005a.44.44 0 0 1 .484.606zm-.833-2.129a.44.44 0 0 0 .173-.756l.002-.011L7.585 9.7a5.143 5.143 0 0 0-.73 3.255l2.514-.725.002-.009zm1.145-1.98a.44.44 0 0 0 .699-.337l.01-.005.15-2.62a5.144 5.144 0 0 0-3.01 1.442l2.147 1.523.004-.002zm.76 2.75l.723.349.722-.347.18-.78-.5-.623h-.804l-.5.623.179.779zm1.5-3.095a.44.44 0 0 0 .7.336l.008.003 2.134-1.513a5.188 5.188 0 0 0-2.992-1.442l.148 2.615.002.001zm10.876 5.97l-5.773 7.181a1.6 1.6 0 0 1-1.248.594l-9.261.003a1.6 1.6 0 0 1-1.247-.596l-5.776-7.18a1.583 1.583 0 0 1-.307-1.34L2.1 5.573c.108-.47.425-.864.863-1.073L11.305.513a1.606 1.606 0 0 1 1.385 0l8.345 3.985c.438.209.755.604.863 1.073l2.062 8.955c.108.47-.005.963-.308 1.34zm-3.289-2.057c-.042-.01-.103-.026-.145-.034-.174-.033-.315-.025-.479-.038-.35-.037-.638-.067-.895-.148-.105-.04-.18-.165-.216-.216l-.201-.059a6.45 6.45 0 0 0-.105-2.332 6.465 6.465 0 0 0-.936-2.163c.052-.047.15-.133.177-.159.008-.09.001-.183.094-.282.197-.185.444-.338.743-.522.142-.084.273-.137.415-.242.032-.024.076-.062.11-.089.24-.191.295-.52.123-.736-.172-.216-.506-.236-.745-.045-.034.027-.08.062-.111.088-.134.116-.217.23-.33.35-.246.25-.45.458-.673.609-.097.056-.239.037-.303.033l-.19.135a6.545 6.545 0 0 0-4.146-2.003l-.012-.223c-.065-.062-.143-.115-.163-.25-.022-.268.015-.557.057-.905.023-.163.061-.298.068-.475.001-.04-.001-.099-.001-.142 0-.306-.224-.555-.5-.555-.275 0-.499.249-.499.555l.001.014c0 .041-.002.092 0 .128.006.177.044.312.067.475.042.348.078.637.056.906a.545.545 0 0 1-.162.258l-.012.211a6.424 6.424 0 0 0-4.166 2.003 8.373 8.373 0 0 1-.18-.128c-.09.012-.18.04-.297-.029-.223-.15-.427-.358-.673-.608-.113-.12-.195-.234-.329-.349-.03-.026-.077-.062-.111-.088a.594.594 0 0 0-.348-.132.481.481 0 0 0-.398.176c-.172.216-.117.546.123.737l.007.005.104.083c.142.105.272.159.414.242.299.185.546.338.743.522.076.082.09.226.1.288l.16.143a6.462 6.462 0 0 0-1.02 4.506l-.208.06c-.055.072-.133.184-.215.217-.257.081-.546.11-.895.147-.164.014-.305.006-.48.039-.037.007-.09.02-.133.03l-.004.002-.007.002c-.295.071-.484.342-.423.608.061.267.349.429.645.365l.007-.001.01-.003.129-.029c.17-.046.294-.113.448-.172.33-.118.604-.217.87-.256.112-.009.23.069.288.101l.217-.037a6.5 6.5 0 0 0 2.88 3.596l-.09.218c.033.084.069.199.044.282-.097.252-.263.517-.452.813-.091.136-.185.242-.268.399-.02.037-.045.095-.064.134-.128.275-.034.591.213.71.248.12.556-.007.69-.282v-.002c.02-.039.046-.09.062-.127.07-.162.094-.301.144-.458.132-.332.205-.68.387-.897.05-.06.13-.082.215-.105l.113-.205a6.453 6.453 0 0 0 4.609.012l.106.192c.086.028.18.042.256.155.136.232.229.507.342.84.05.156.074.295.145.457.016.037.043.09.062.129.133.276.442.402.69.282.247-.118.341-.435.213-.71-.02-.039-.045-.096-.065-.134-.083-.156-.177-.261-.268-.398-.19-.296-.346-.541-.443-.793-.04-.13.007-.21.038-.294-.018-.022-.059-.144-.083-.202a6.499 6.499 0 0 0 2.88-3.622c.064.01.176.03.213.038.075-.05.144-.114.28-.104.266.039.54.138.87.256.154.06.277.128.448.173.036.01.088.019.13.028l.009.003.007.001c.297.064.584-.098.645-.365.06-.266-.128-.537-.423-.608zM16.4 9.701l-1.95 1.746v.005a.44.44 0 0 0 .173.757l.003.01 2.526.728a5.199 5.199 0 0 0-.108-1.674A5.208 5.208 0 0 0 16.4 9.7zm-4.013 5.325a.437.437 0 0 0-.404-.232.44.44 0 0 0-.372.233h-.002l-1.268 2.292a5.164 5.164 0 0 0 3.326.003l-1.27-2.296h-.01zm1.888-1.293a.44.44 0 0 0-.27.036.44.44 0 0 0-.214.572l-.003.004 1.01 2.438a5.15 5.15 0 0 0 2.081-2.615l-2.6-.44-.004.005z\",\n tensorflow:\n \"M1.292 5.856L11.54 0v24l-4.095-2.378V7.603l-6.168 3.564.015-5.31zm21.43 5.311l-.014-5.31L12.46 0v24l4.095-2.378V14.87l3.092 1.788-.018-4.618-3.074-1.756V7.603l6.168 3.564z\",\n pytorch:\n \"M12.005 0L4.952 7.053a9.865 9.865 0 000 14.022 9.866 9.866 0 0014.022 0c3.984-3.9 3.986-10.205.085-14.023l-1.744 1.743c2.904 2.905 2.904 7.634 0 10.538s-7.634 2.904-10.538 0-2.904-7.634 0-10.538l4.647-4.646.582-.665zm3.568 3.899a1.327 1.327 0 00-1.327 1.327 1.327 1.327 0 001.327 1.328A1.327 1.327 0 0016.9 5.226 1.327 1.327 0 0015.573 3.9z\",\n \"apache-spark\":\n \"M10.812 0c-.425.013-.845.215-1.196.605a3.593 3.593 0 00-.493.722c-.355.667-.425 1.415-.556 2.143a551.9 551.9 0 00-.726 4.087c-.027.16-.096.227-.244.273C5.83 8.386 4.06 8.94 2.3 9.514c-.387.125-.773.289-1.114.506-1.042.665-1.196 1.753-.415 2.71.346.422.79.715 1.284.936 1.1.49 2.202.976 3.3 1.47.019.01.036.013.053.019h-.004l1.306.535c0 .023.002.045 0 .073-.2 2.03-.39 4.063-.58 6.095-.04.419-.012.831.134 1.23.317.87 1.065 1.148 1.881.701.372-.204.666-.497.937-.818 1.372-1.623 2.746-3.244 4.113-4.872.111-.133.205-.15.363-.098.349.117.697.231 1.045.347h.001c.02.012.045.02.073.03l.142.042c1.248.416 2.68.775 3.929 1.19.4.132.622.164 1.045.098.311-.048.592-.062.828-.236.602-.33.995-.957.988-1.682-.005-.427-.154-.813-.35-1.186-.82-1.556-1.637-3.113-2.461-4.666-.078-.148-.076-.243.037-.375 1.381-1.615 2.756-3.236 4.133-4.855.272-.32.513-.658.653-1.058.308-.878-.09-1.57-1-1.741a2.783 2.783 0 00-1.235.069c-1.974.521-3.947 1.041-5.918 1.57-.175.047-.26.015-.355-.144a353.08 353.08 0 00-2.421-4.018 4.61 4.61 0 00-.652-.849c-.371-.37-.802-.549-1.227-.536zm.172 3.703a.592.592 0 01.189.211c.87 1.446 1.742 2.89 2.609 4.338.07.118.135.16.277.121 1.525-.41 3.052-.813 4.579-1.217.367-.098.735-.193 1.103-.289a.399.399 0 01-.1.2c-1.259 1.48-2.516 2.962-3.779 4.438-.11.13-.12.22-.04.37.937 1.803 1.768 3.309 2.498 4.76l-3.696-1.019c-.538-.18-1.077-.358-1.615-.539-.163-.055-.25-.03-.36.1-1.248 1.488-2.504 2.97-3.759 4.454a.398.398 0 01-.18.132c.035-.378.068-.757.104-1.136.149-1.572.297-3.144.451-4.716-.03-.318.117-.405-.322-.545-1.493-.593-3.346-1.321-4.816-1.905a.595.595 0 01.24-.134c1.797-.57 3.595-1.14 5.394-1.705.127-.04.199-.092.211-.233.013-.148.05-.294.076-.441.241-1.363.483-2.726.726-4.088.068-.386.14-.771.21-1.157z\",\n databricks:\n \"M.95 14.184L12 20.403l9.919-5.55v2.21L12 22.662l-10.484-5.96-.565.308v.77L12 24l11.05-6.218v-4.317l-.515-.309L12 19.118l-9.867-5.653v-2.21L12 16.805l11.05-6.218V6.32l-.515-.308L12 11.974 2.647 6.681 12 1.388l7.76 4.368.668-.411v-.566L12 0 .95 6.27v.72L12 13.207l9.919-5.55v2.26L12 15.52 1.516 9.56l-.565.308Z\",\n \"aws-redshift\":\n \"M16.639 9.932a.822.822 0 0 1-.822-.82.823.823 0 0 1 1.645 0c0 .452-.37.82-.823.82m-2.086 4.994a.823.823 0 0 1-.822-.822.822.822 0 0 1 1.645 0 .822.822 0 0 1-.823.822m-5.004-.833a.822.822 0 1 1 .002-1.644.822.822 0 0 1-.002 1.644m-2.083 4.578a.823.823 0 0 1-.823-.82.823.823 0 0 1 1.645 0c0 .452-.37.82-.822.82m9.173-11.236a1.68 1.68 0 0 0-1.68 1.676c0 .566.285 1.066.718 1.37l-.782 1.982a1.674 1.674 0 0 0-1.923 1.104l-1.753-.398a1.675 1.675 0 0 0-3.348.103c0 .432.169.823.438 1.12l-.764 1.79c-.028-.001-.053-.008-.08-.008a1.68 1.68 0 0 0-1.68 1.676 1.68 1.68 0 0 0 3.36 0c0-.593-.312-1.112-.778-1.41l.674-1.579c.161.052.33.088.508.088.661 0 1.228-.386 1.502-.94l1.856.42a1.68 1.68 0 0 0 3.327-.325c0-.5-.224-.943-.574-1.25l.822-2.083c.053.005.104.016.157.016a1.68 1.68 0 0 0 1.68-1.676 1.68 1.68 0 0 0-1.68-1.676M12 23.145c-4.17 0-7.286-1.252-7.286-2.37V4.79C6.14 5.938 9.131 6.547 12 6.547c2.869 0 5.86-.609 7.286-1.756v15.983c0 1.12-3.116 2.37-7.286 2.37M12 .856c4.293 0 7.286 1.274 7.286 2.419 0 1.143-2.993 2.418-7.286 2.418-4.293 0-7.286-1.275-7.286-2.418C4.714 2.129 7.707.855 12 .855m8.143 2.419C20.143 1.147 15.947 0 12 0 8.052 0 3.857 1.147 3.857 3.274l.002.01h-.002v17.49C3.857 22.87 8.052 24 12 24c3.947 0 8.143-1.13 8.143-3.226V3.284h-.002l.002-.01\",\n};\n\nconst integrationBrandSvg = (name: VikingIntegrationBrandName): string => {\n const fill = VIKING_INTEGRATION_BRAND_COLORS[name];\n const d = VIKING_INTEGRATION_BRAND_PATHS[name];\n return `<path fill=\"${fill}\" d=\"${d}\"/>`;\n};\n\n/** Multi-path brand SVG markup (24×24 viewBox) — official product logos at brand hue. */\nexport const VIKING_INTEGRATION_BRAND_SVGS: Record<\n VikingIntegrationBrandName,\n string\n> = {\n kubernetes: integrationBrandSvg(\"kubernetes\"),\n tensorflow: integrationBrandSvg(\"tensorflow\"),\n pytorch: integrationBrandSvg(\"pytorch\"),\n \"apache-spark\": integrationBrandSvg(\"apache-spark\"),\n databricks: integrationBrandSvg(\"databricks\"),\n \"aws-redshift\": integrationBrandSvg(\"aws-redshift\"),\n};\n\n/** Path markup for icon registry / viking-icon-paths.json sync. */\nexport const VIKING_INTEGRATION_ICON_PATHS = Object.fromEntries(\n (\n Object.entries(VIKING_INTEGRATION_BRAND_PATHS) as [\n VikingIntegrationBrandName,\n string,\n ][]\n ).map(([name, d]) => [name, `<path d=\"${d}\"/>`]),\n) as Record<VikingIntegrationBrandName, string>;\n\nexport type VikingIntegrationIconName = VikingIntegrationBrandName;\n\nexport const VIKING_INTEGRATION_ICON_NAMES_LIST =\n VIKING_INTEGRATION_BRAND_NAMES;\n","/**\n * Zero-dependency inline SVG icon registry (24×24 stroke icons).\n * Lucide paths are synced at build time; DEML brand marks are custom artwork.\n */\nimport { LUCIDE_ICON_PATHS } from \"./lucide-paths.generated\";\nimport {\n VIKING_BRAND_ICON_FILLED_PATHS,\n VIKING_BRAND_ICON_PATHS,\n VIKING_BRAND_ICON_NAMES_LIST,\n VIKING_DRAKKAR_ICON_FILLED_PATHS,\n VIKING_DRAKKAR_ICON_PATHS,\n VIKING_DRAKKAR_ICON_NAMES_LIST,\n} from \"./brand-icons\";\nimport {\n VIKING_INTEGRATION_ICON_PATHS,\n VIKING_INTEGRATION_ICON_NAMES_LIST,\n} from \"./integration-brand-icons\";\n\nexport {\n VIKING_DRAKKAR_ICON_NAMES_LIST,\n VIKING_BRAND_ICON_NAMES_LIST,\n} from \"./brand-icons\";\nexport {\n VIKING_INTEGRATION_ICON_NAMES_LIST,\n type VikingIntegrationIconName,\n} from \"./integration-brand-icons\";\n\nexport type VikingIconName = keyof typeof VIKING_ICON_PATHS;\n\nexport type VikingIconSizePreset = \"sm\" | \"md\" | \"lg\";\n\nexport type VikingIconVariant = \"outline\" | \"filled\";\n\n/** Semantic color tokens resolved to CSS custom properties. */\nexport type VikingIconColorToken =\n | \"inherit\"\n | \"accent\"\n | \"success\"\n | \"warning\"\n | \"danger\"\n | \"info\"\n | \"muted\"\n | \"text\";\n\n/** Pixel sizes for sm / md / lg presets. */\nexport const VIKING_ICON_SIZE_PRESETS: Record<VikingIconSizePreset, number> = {\n sm: 16,\n md: 20,\n lg: 24,\n} as const;\n\n/** Custom icons not covered by Lucide (hub topology, ML model tile, OAuth stubs). */\nconst VIKING_CUSTOM_ICON_PATHS = {\n hub: '<circle cx=\"12\" cy=\"12\" r=\"3\"/><path d=\"M12 3v3M12 18v3M3 12h3M18 12h3M5.6 5.6l2.1 2.1M16.3 16.3l2.1 2.1M18.4 5.6l-2.1 2.1M7.7 16.3l-2.1 2.1\"/>',\n model:\n '<rect x=\"4\" y=\"8\" width=\"16\" height=\"10\" rx=\"2\"/><path d=\"M8 8V6a4 4 0 0 1 8 0v2\"/>',\n google:\n '<path d=\"M12 11.2v2.4h6.6c-.3 1.5-1.8 4.4-6.6 4.4-4 0-7.2-3.3-7.2-7.3S8 3.4 12 3.4c2.3 0 3.9 1 4.8 1.8l3.2-3.1C17.5.8 14.9 0 12 0 5.4 0 0 5.4 0 12s5.4 12 12 12c6.9 0 11.5-4.8 11.5-11.6 0-.8-.1-1.4-.2-1.9H12z\"/>',\n apple:\n '<path d=\"M16.365 12.14c.02 2.53 2.21 3.38 2.23 3.39-.02.07-.35 1.21-1.16 2.4-.7 1.02-1.43 2.03-2.58 2.05-1.13.02-1.49-.67-2.78-.67-1.29 0-1.69.65-2.75.69-1.11.04-1.95-1.12-2.66-2.13-1.44-2.08-2.54-5.87-1.07-8.43.73-1.27 2.04-2.08 3.46-2.1 1.08-.02 2.1.72 2.78.72.67 0 2.14-.89 3.61-.76.61.03 2.33.25 3.44 1.88-.09.06-2.05 1.2-2.03 3.55M13.75 3.64c.59-.71 1-1.7.89-2.68-.86.03-1.9.57-2.52 1.28-.55.63-1.03 1.65-.9 2.62.95.07 1.92-.49 2.53-1.22\"/>',\n} as const;\n\nexport const VIKING_ICON_PATHS = {\n ...LUCIDE_ICON_PATHS,\n ...VIKING_BRAND_ICON_PATHS,\n ...VIKING_DRAKKAR_ICON_PATHS,\n ...VIKING_INTEGRATION_ICON_PATHS,\n ...VIKING_CUSTOM_ICON_PATHS,\n} as const;\n\n/** Filled-path overrides used when variant=\"filled\" (brand marks, solid shapes). */\nexport const VIKING_ICON_FILLED_PATHS: Partial<Record<VikingIconName, string>> =\n {\n ...VIKING_BRAND_ICON_FILLED_PATHS,\n ...VIKING_DRAKKAR_ICON_FILLED_PATHS,\n };\n\n/** Legacy Material Icons ligature names → Viking icon registry keys. */\nexport const MATERIAL_ICON_ALIASES: Record<string, VikingIconName> = {\n analytics: \"deml\",\n security: \"shield\",\n link: \"link\",\n visibility: \"eye\",\n shield: \"shield\",\n trending_up: \"trending-up\",\n lock: \"lock\",\n fingerprint: \"fingerprint\",\n gpp_maybe: \"shield\",\n verified_user: \"user-shield\",\n bolt: \"bolt\",\n cloud: \"cloud\",\n lan: \"network\",\n hub: \"hub\",\n speed: \"speed\",\n rocket_launch: \"rocket\",\n insights: \"insights\",\n check: \"check\",\n description: \"file\",\n vpn_key: \"key\",\n policy: \"policy\",\n bug_report: \"bug\",\n search: \"search\",\n chevron_left: \"chevron-left\",\n chevron_right: \"chevron-right\",\n verified: \"check-circle\",\n warning: \"alert-triangle\",\n close: \"x\",\n account_balance: \"building\",\n send: \"send\",\n check_circle: \"check-circle\",\n play_circle: \"play\",\n input: \"terminal\",\n model_training: \"model\",\n auto_awesome: \"sparkle\",\n error_outline: \"alert-circle\",\n home: \"home\",\n cookie: \"cookie\",\n search_off: \"search-off\",\n person_add: \"user\",\n storage: \"aws-redshift\",\n data_object: \"aws-redshift\",\n memory: \"tensorflow\",\n psychology: \"pytorch\",\n dns: \"server\",\n login: \"log-in\",\n};\n\n/** Icons always rendered with fill (play triangle, dot grids). */\nexport const VIKING_FILLED_ICON_NAMES = [\n \"play\",\n \"dots-horizontal\",\n \"dots-vertical\",\n \"grip-vertical\",\n] as const satisfies readonly VikingIconName[];\n\n/** OAuth / vendor marks rendered with official brand artwork in viking-icon. */\nexport const VIKING_BRAND_ICON_NAMES = [\n \"google\",\n \"apple\",\n ...VIKING_BRAND_ICON_NAMES_LIST,\n] as const satisfies readonly VikingIconName[];\n\nconst VIKING_ICON_COLOR_TOKENS: Record<\n Exclude<VikingIconColorToken, \"inherit\">,\n string\n> = {\n accent: \"var(--viking-accent)\",\n success: \"var(--viking-success)\",\n warning: \"var(--viking-warning)\",\n danger: \"var(--viking-danger)\",\n info: \"var(--viking-info)\",\n muted: \"var(--viking-text-muted)\",\n text: \"var(--viking-text)\",\n};\n\nexport const vikingIconViewBox = (_name: VikingIconName): string => \"0 0 24 24\";\n\n/** Resolve pixel size from preset or explicit value. */\nexport const resolveVikingIconSize = (\n size: number | undefined,\n preset: VikingIconSizePreset | null | undefined,\n): number => {\n if (preset) {\n return VIKING_ICON_SIZE_PRESETS[preset];\n }\n return size ?? VIKING_ICON_SIZE_PRESETS.lg;\n};\n\n/** Resolve semantic color token or raw CSS value for icon tinting. */\nexport const resolveVikingIconColor = (\n color: VikingIconColorToken | string | undefined,\n): string | undefined => {\n if (!color || color === \"inherit\") {\n return undefined;\n }\n if (color in VIKING_ICON_COLOR_TOKENS) {\n return VIKING_ICON_COLOR_TOKENS[\n color as Exclude<VikingIconColorToken, \"inherit\">\n ];\n }\n return color;\n};\n\nconst VIKING_ICON_PATH_KEYS = new Set(Object.keys(VIKING_ICON_PATHS));\n\n/** Resolve a Viking or legacy Material icon name to a registry key. */\nexport const resolveVikingIcon = (name: string): VikingIconName => {\n const normalized = name.trim().toLowerCase().replace(/\\s+/g, \"_\");\n if (VIKING_ICON_PATH_KEYS.has(normalized)) {\n return normalized as VikingIconName;\n }\n const alias = MATERIAL_ICON_ALIASES[normalized];\n if (alias) {\n return alias;\n }\n return \"info\";\n};\n\nexport const VIKING_ICON_NAMES = Object.keys(\n VIKING_ICON_PATHS,\n) as VikingIconName[];\n\n/** Lucide-sourced icon names (for docs and showcase grouping). */\nexport const VIKING_LUCIDE_ICON_NAMES = Object.keys(\n LUCIDE_ICON_PATHS,\n) as (keyof typeof LUCIDE_ICON_PATHS)[];\n","import {\n resolveVikingIcon,\n VIKING_FILLED_ICON_NAMES,\n VIKING_ICON_FILLED_PATHS,\n VIKING_ICON_PATHS,\n type VikingIconName,\n} from \"../../lib/core/icons\";\n\nconst FILLED_ICON_SET = new Set<string>(VIKING_FILLED_ICON_NAMES);\n\n/**\n * Renders a zero-dependency inline SVG icon for Web Components.\n * Uses the same registry as `viking-icon` in Angular.\n */\nexport const renderInlineIcon = (\n name: string,\n size = 16,\n className = \"viking-wc-icon\",\n): string => {\n const resolved = resolveVikingIcon(name);\n const filled = FILLED_ICON_SET.has(resolved);\n const paths = filled\n ? (VIKING_ICON_FILLED_PATHS[resolved as VikingIconName] ??\n VIKING_ICON_PATHS[resolved])\n : VIKING_ICON_PATHS[resolved];\n\n if (filled) {\n return `<svg class=\"${className}\" width=\"${size}\" height=\"${size}\" viewBox=\"0 0 24 24\" fill=\"currentColor\" fill-rule=\"evenodd\" aria-hidden=\"true\">${paths}</svg>`;\n }\n\n return `<svg class=\"${className}\" width=\"${size}\" height=\"${size}\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\">${paths}</svg>`;\n};\n\n/** Default tone → icon mapping shared by callout and badge surfaces. */\nexport const TONE_ICON_NAMES: Record<string, string> = {\n accent: \"info\",\n secondary: \"info\",\n success: \"check-circle\",\n warning: \"alert-triangle\",\n danger: \"alert-circle\",\n info: \"info\",\n muted: \"info\",\n subtle: \"info\",\n};\n","/**\n * Shadow DOM styles for Viking-UI Web Components.\n * All values reference --viking-* tokens inherited from the document :root.\n */\n\nexport const VIKING_BUTTON_STYLES = `\n:host {\n display: inline-flex;\n font-family: var(--viking-font-family);\n}\n\n:host([full-width]) {\n display: flex;\n width: 100%;\n}\n\n:host([full-width]) .viking-btn {\n width: 100%;\n min-width: 0;\n}\n\n:host([compact]) .viking-btn {\n min-width: 0;\n}\n\n:host([square]) {\n flex: 0 0 auto;\n}\n\n.viking-btn {\n font-family: inherit;\n font-size: var(--viking-font-size-ui, var(--viking-font-size-sm));\n font-weight: var(--viking-font-weight-semibold);\n letter-spacing: var(--viking-letter-spacing-wide);\n line-height: var(--viking-line-height-snug);\n display: inline-flex;\n align-items: center;\n justify-content: center;\n gap: var(--viking-space-1);\n min-height: var(--viking-control-height);\n padding: 0 var(--viking-control-padding-x);\n border-radius: var(--viking-radius);\n border: 1px solid transparent;\n cursor: pointer;\n text-decoration: none;\n transition: var(--viking-transition-interactive);\n width: auto;\n min-width: var(--viking-btn-min-width, 120px);\n white-space: nowrap;\n position: relative;\n user-select: none;\n -webkit-tap-highlight-color: transparent;\n box-sizing: border-box;\n}\n\n.viking-btn:focus-visible {\n outline: var(--viking-ring-width) solid var(--viking-ring);\n outline-offset: var(--viking-ring-offset);\n z-index: 1;\n}\n\n.viking-btn:disabled,\n.viking-btn[aria-busy='true'] {\n opacity: var(--viking-state-disabled-opacity);\n cursor: not-allowed;\n transform: none !important;\n box-shadow: none !important;\n}\n\n.viking-btn-sm {\n min-height: var(--viking-control-height-sm);\n padding: 0 var(--viking-space-2);\n font-size: var(--viking-font-size-xs);\n min-width: auto;\n}\n\n.viking-btn-xs {\n min-height: var(--viking-control-height-xs);\n padding: 0 var(--viking-space-1);\n font-size: var(--viking-font-size-xs);\n min-width: auto;\n}\n\n.viking-btn-square {\n display: inline-grid;\n place-items: center;\n width: var(--viking-control-height);\n min-width: var(--viking-control-height);\n max-width: var(--viking-control-height);\n height: var(--viking-control-height);\n min-height: var(--viking-control-height);\n padding: 0;\n line-height: 1;\n}\n\n.viking-btn-square.viking-btn-sm {\n width: var(--viking-control-height-sm);\n min-width: var(--viking-control-height-sm);\n max-width: var(--viking-control-height-sm);\n height: var(--viking-control-height-sm);\n min-height: var(--viking-control-height-sm);\n}\n\n.viking-btn-square.viking-btn-xs {\n width: var(--viking-control-height-xs);\n min-width: var(--viking-control-height-xs);\n max-width: var(--viking-control-height-xs);\n height: var(--viking-control-height-xs);\n min-height: var(--viking-control-height-xs);\n}\n\n.viking-btn-square .viking-btn-label {\n display: inline-grid;\n place-items: center;\n width: 100%;\n height: 100%;\n line-height: 1;\n}\n\n.viking-btn-square ::slotted(*) {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n margin: 0;\n line-height: 1;\n}\n\n.viking-btn-square ::slotted(svg),\n.viking-btn-square ::slotted([data-viking-icon]) {\n width: var(--viking-icon-size-md, 20px);\n height: var(--viking-icon-size-md, 20px);\n}\n\n.viking-btn-outline {\n background: var(--viking-surface);\n color: var(--viking-text);\n border-color: var(--viking-border-strong);\n box-shadow: var(--viking-shadow-sm);\n}\n\n.viking-btn-outline:hover:not(:disabled):not([aria-busy='true']) {\n background: var(--viking-surface-alt);\n border-color: color-mix(in srgb, var(--viking-accent) 45%, var(--viking-border-strong));\n box-shadow: var(--viking-shadow-md);\n transform: translateY(var(--viking-state-hover-lift));\n}\n\n.viking-btn-primary {\n background: var(--viking-accent);\n color: var(--viking-accent-content);\n border-color: color-mix(in srgb, var(--viking-accent) 82%, var(--viking-black));\n box-shadow: var(--viking-shadow-sm);\n}\n\n.viking-btn-primary:hover:not(:disabled):not([aria-busy='true']) {\n background: var(--viking-accent-hover);\n border-color: var(--viking-accent-hover);\n box-shadow: var(--viking-shadow-hover);\n transform: translateY(var(--viking-state-hover-lift));\n}\n\n.viking-btn-secondary {\n background: var(--viking-accent-secondary);\n color: var(--viking-accent-secondary-content);\n border-color: color-mix(in srgb, var(--viking-accent-secondary) 82%, var(--viking-black));\n box-shadow: var(--viking-shadow-sm);\n}\n\n.viking-btn-secondary:hover:not(:disabled):not([aria-busy='true']) {\n background: var(--viking-accent-secondary-hover);\n border-color: var(--viking-accent-secondary-hover);\n box-shadow: var(--viking-shadow-hover);\n transform: translateY(var(--viking-state-hover-lift));\n}\n\n.viking-btn-filled {\n background: var(--viking-surface-alt);\n color: var(--viking-text);\n border-color: var(--viking-border);\n box-shadow: var(--viking-shadow-xs);\n}\n\n.viking-btn-filled:hover:not(:disabled):not([aria-busy='true']) {\n border-color: color-mix(in srgb, var(--viking-accent) 45%, var(--viking-border));\n background: color-mix(in srgb, var(--viking-accent) 8%, var(--viking-surface-alt));\n box-shadow: var(--viking-shadow-sm);\n transform: translateY(var(--viking-state-hover-lift));\n}\n\n.viking-btn-danger {\n background: var(--viking-danger);\n color: var(--viking-on-danger);\n border-color: color-mix(in srgb, var(--viking-danger) 85%, var(--viking-black));\n box-shadow: var(--viking-shadow-sm);\n}\n\n.viking-btn-danger:hover:not(:disabled):not([aria-busy='true']) {\n background: color-mix(in srgb, var(--viking-danger) 88%, var(--viking-white));\n box-shadow: var(--viking-shadow-hover);\n transform: translateY(var(--viking-state-hover-lift));\n}\n\n.viking-btn-ghost {\n background: transparent;\n color: var(--viking-text);\n min-width: auto;\n box-shadow: none;\n border-color: transparent;\n}\n\n.viking-btn-ghost:hover:not(:disabled):not([aria-busy='true']) {\n background: var(--viking-accent-soft);\n color: var(--viking-accent-strong);\n}\n\n.viking-btn-subtle {\n background: transparent;\n color: var(--viking-text-muted);\n border-color: var(--viking-border-subtle);\n min-width: auto;\n box-shadow: none;\n}\n\n.viking-btn-subtle:hover:not(:disabled):not([aria-busy='true']) {\n color: var(--viking-text);\n background: var(--viking-accent-soft);\n border-color: var(--viking-border-strong);\n}\n\n.viking-btn:active:not(:disabled):not([aria-busy='true']) {\n transform: translateY(0) scale(var(--viking-state-active-scale));\n}\n\n.viking-btn-label {\n display: inline-flex;\n align-items: center;\n line-height: inherit;\n}\n\n.viking-btn-spinner {\n width: 1.125rem;\n height: 1.125rem;\n border: 2px solid currentColor;\n border-right-color: transparent;\n border-radius: 50%;\n animation: viking-spin 0.8s linear infinite;\n}\n\n@keyframes viking-spin {\n to { transform: rotate(360deg); }\n}\n\n@media (prefers-reduced-motion: reduce) {\n .viking-btn-spinner { animation-duration: 0.01ms; }\n .viking-btn { transition-duration: 0.01ms; }\n}\n`;\n\nexport const VIKING_INPUT_STYLES = `\n:host {\n display: block;\n font-family: var(--viking-font-family);\n}\n\n.viking-input-shell {\n display: flex;\n align-items: center;\n gap: var(--viking-space-1);\n min-height: var(--viking-control-height);\n padding: 0 var(--viking-space-2);\n font-family: inherit;\n font-size: var(--viking-font-size);\n color: var(--viking-text);\n background: var(--viking-surface-alt);\n border: 1px solid var(--viking-border);\n border-radius: var(--viking-radius-sm);\n box-shadow: var(--viking-shadow-xs);\n transition: var(--viking-transition-interactive);\n width: 100%;\n min-width: 0;\n box-sizing: border-box;\n}\n\n.viking-input-shell:hover:not(.viking-disabled):not(.viking-loading) {\n border-color: color-mix(in srgb, var(--viking-accent) 35%, var(--viking-border-strong));\n box-shadow: var(--viking-shadow-sm);\n}\n\n.viking-input-shell:focus-within:not(.viking-loading) {\n outline: var(--viking-ring-width) solid var(--viking-ring);\n outline-offset: var(--viking-ring-offset);\n border-color: var(--viking-accent);\n box-shadow: var(--viking-shadow-sm);\n}\n\n.viking-input-shell.viking-disabled,\n.viking-input-shell.viking-loading {\n opacity: var(--viking-state-disabled-opacity);\n}\n\n.viking-input-shell.viking-loading {\n cursor: wait;\n}\n\n.viking-input-native {\n flex: 1;\n min-width: 0;\n width: 100%;\n border: none;\n outline: none !important;\n background: transparent;\n color: var(--viking-text);\n font-family: inherit;\n font-size: inherit;\n padding: 0;\n}\n\n.viking-input-native::placeholder {\n color: var(--viking-text-muted);\n}\n\ninput {\n flex: 1;\n min-width: 0;\n border: none;\n outline: none !important;\n background: transparent;\n color: var(--viking-text);\n font-family: inherit;\n font-size: inherit;\n padding: 0;\n}\n\ninput::placeholder {\n color: var(--viking-text-muted);\n}\n\ninput:disabled {\n cursor: not-allowed;\n}\n\n.viking-input-clear {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n min-width: var(--viking-touch-target-comfort, 44px);\n min-height: var(--viking-touch-target-comfort, 44px);\n border: none;\n background: transparent;\n color: var(--viking-text-muted);\n cursor: pointer;\n padding: var(--viking-space-half);\n border-radius: var(--viking-radius-pill);\n transition: var(--viking-transition-interactive);\n flex-shrink: 0;\n -webkit-tap-highlight-color: transparent;\n}\n\n.viking-input-clear:hover {\n color: var(--viking-text);\n background: var(--viking-accent-soft);\n}\n\n.viking-input-clear:focus-visible {\n outline: var(--viking-ring-width) solid var(--viking-ring);\n outline-offset: var(--viking-ring-offset);\n}\n\n.viking-input-spinner {\n width: 1rem;\n height: 1rem;\n border: 2px solid var(--viking-text-muted);\n border-right-color: transparent;\n border-radius: 50%;\n animation: viking-spin 0.8s linear infinite;\n flex-shrink: 0;\n}\n\n@keyframes viking-spin {\n to { transform: rotate(360deg); }\n}\n`;\n\nexport const VIKING_FIELD_STYLES = `\n:host {\n display: block;\n font-family: var(--viking-font-family);\n color: var(--viking-text);\n min-width: 0;\n}\n\n:host([hidden]) {\n display: none;\n}\n\n:host([width='full']) {\n width: 100%;\n}\n\n:host([width='half']) {\n width: 100%;\n max-width: var(--viking-select-half-max-width, min(100%, 24rem));\n}\n\n.viking-field {\n display: flex;\n flex-direction: column;\n gap: var(--viking-space-1);\n}\n\n.viking-field-label-row {\n display: flex;\n align-items: baseline;\n justify-content: space-between;\n gap: var(--viking-space-2);\n}\n\n.viking-field-label {\n display: inline-flex;\n align-items: center;\n gap: var(--viking-space-half);\n font-size: var(--viking-font-size-ui);\n font-weight: var(--viking-font-weight-bold);\n color: var(--viking-text);\n line-height: var(--viking-line-height-snug);\n cursor: pointer;\n}\n\n.viking-field-required {\n color: var(--viking-danger-text);\n}\n\n.viking-field-control {\n min-width: 0;\n}\n\n.viking-field-description,\n.viking-field-error {\n margin: 0;\n font-size: var(--viking-font-size-xs);\n line-height: var(--viking-line-height-relaxed);\n}\n\n.viking-field-description {\n color: var(--viking-text-muted);\n}\n\n.viking-field-error {\n color: var(--viking-danger-text);\n}\n`;\n\nexport const VIKING_BADGE_STYLES = `\n:host {\n display: inline-flex;\n align-items: center;\n gap: var(--viking-space-half);\n padding: var(--viking-space-half) var(--viking-space-1);\n font-family: var(--viking-font-family);\n font-size: var(--viking-font-size-xs);\n font-weight: var(--viking-font-weight-semibold);\n letter-spacing: var(--viking-letter-spacing-wide);\n line-height: var(--viking-line-height-snug);\n border-radius: var(--viking-radius-pill);\n border: 1px solid var(--viking-border);\n background: var(--viking-surface-alt);\n color: var(--viking-text);\n white-space: nowrap;\n transition: var(--viking-transition-interactive);\n box-shadow: var(--viking-shadow-xs);\n}\n\n:host([size='sm']) {\n padding: 0 var(--viking-space-1);\n font-size: var(--viking-font-size-2xs);\n}\n\n:host([tone='accent']) {\n background: var(--viking-accent);\n border-color: color-mix(in srgb, var(--viking-accent) 80%, var(--viking-black));\n color: var(--viking-accent-content);\n box-shadow: var(--viking-shadow-sm);\n}\n\n:host([tone='secondary']) {\n background: color-mix(in srgb, var(--viking-accent-secondary) 16%, var(--viking-surface));\n border-color: color-mix(in srgb, var(--viking-accent-secondary) 55%, transparent);\n color: var(--viking-accent-secondary);\n}\n\n:host([tone='success']) {\n background: color-mix(in srgb, var(--viking-success) 16%, var(--viking-surface));\n border-color: color-mix(in srgb, var(--viking-success) 55%, transparent);\n color: var(--viking-success);\n}\n\n:host([tone='warning']) {\n background: color-mix(in srgb, var(--viking-warning) 18%, var(--viking-surface));\n border-color: color-mix(in srgb, var(--viking-warning) 55%, transparent);\n color: var(--viking-warning);\n}\n\n:host([tone='danger']) {\n background: color-mix(in srgb, var(--viking-danger) 14%, var(--viking-surface));\n border-color: color-mix(in srgb, var(--viking-danger) 50%, transparent);\n color: var(--viking-danger-text);\n}\n\n:host([tone='info']) {\n background: color-mix(in srgb, var(--viking-info) 14%, var(--viking-surface));\n border-color: color-mix(in srgb, var(--viking-info) 50%, transparent);\n color: var(--viking-info);\n}\n\n:host([tone='muted']),\n:host([tone='subtle']) {\n color: var(--viking-text-muted);\n background: var(--viking-surface);\n border-color: var(--viking-border-subtle);\n}\n\n.viking-wc-icon {\n flex-shrink: 0;\n}\n\n.viking-badge-remove {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n min-width: var(--viking-touch-target-comfort, 44px);\n min-height: var(--viking-touch-target-comfort, 44px);\n border: none;\n background: transparent;\n color: currentColor;\n cursor: pointer;\n padding: var(--viking-space-half);\n border-radius: var(--viking-radius-pill);\n transition: var(--viking-transition-interactive);\n margin-left: calc(var(--viking-space-half) * -1);\n}\n\n.viking-badge-remove:hover {\n background: color-mix(in srgb, currentColor 12%, transparent);\n}\n\n.viking-badge-remove:focus-visible {\n outline: var(--viking-ring-width) solid var(--viking-ring);\n outline-offset: var(--viking-ring-offset);\n}\n`;\n\nexport const VIKING_CALLOUT_STYLES = `\n:host {\n display: block;\n font-family: var(--viking-font-family);\n}\n\n:host([hidden]) {\n display: none;\n}\n\n.viking-callout {\n display: flex;\n align-items: flex-start;\n gap: var(--viking-space-2);\n padding: var(--viking-space-2);\n border-radius: var(--viking-radius-lg);\n border: 1px solid var(--viking-border);\n border-left-width: 3px;\n background: var(--viking-surface-alt);\n color: var(--viking-text);\n font-size: var(--viking-font-size-sm);\n box-shadow: var(--viking-shadow-sm);\n}\n\n.viking-callout-icon {\n flex-shrink: 0;\n margin-top: 2px;\n color: var(--viking-text-muted);\n}\n\n.viking-callout-body {\n flex: 1;\n min-width: 0;\n}\n\n.viking-callout-heading {\n margin: 0 0 var(--viking-space-half);\n font-size: var(--viking-font-size-ui);\n font-weight: var(--viking-font-weight-bold);\n color: var(--viking-text);\n}\n\n.viking-callout-text {\n margin: 0;\n color: var(--viking-text);\n line-height: var(--viking-line-height-relaxed);\n}\n\n.viking-callout-close {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n min-width: var(--viking-touch-target-comfort, 44px);\n min-height: var(--viking-touch-target-comfort, 44px);\n border: none;\n background: transparent;\n color: var(--viking-text-muted);\n cursor: pointer;\n padding: var(--viking-space-half);\n border-radius: var(--viking-radius);\n transition: var(--viking-transition-interactive);\n flex-shrink: 0;\n}\n\n.viking-callout-close:hover {\n color: var(--viking-text);\n background: color-mix(in srgb, currentColor 8%, transparent);\n}\n\n.viking-callout-close:focus-visible {\n outline: var(--viking-ring-width) solid var(--viking-ring);\n outline-offset: var(--viking-ring-offset);\n}\n\n.viking-callout-accent {\n border-color: var(--viking-accent);\n border-left-color: var(--viking-accent);\n background: var(--viking-accent-soft);\n}\n\n.viking-callout-accent .viking-callout-icon {\n color: var(--viking-accent);\n}\n\n.viking-callout-secondary {\n border-color: color-mix(in srgb, var(--viking-accent-secondary) 45%, transparent);\n border-left-color: var(--viking-accent-secondary);\n background: var(--viking-accent-secondary-soft);\n}\n\n.viking-callout-secondary .viking-callout-icon {\n color: var(--viking-accent-secondary);\n}\n\n.viking-callout-info {\n border-color: color-mix(in srgb, var(--viking-info) 45%, transparent);\n border-left-color: var(--viking-info);\n background: color-mix(in srgb, var(--viking-info) 10%, var(--viking-surface));\n}\n\n.viking-callout-info .viking-callout-icon {\n color: var(--viking-info);\n}\n\n.viking-callout-success {\n border-color: color-mix(in srgb, var(--viking-success) 45%, transparent);\n border-left-color: var(--viking-success);\n background: color-mix(in srgb, var(--viking-success) 10%, var(--viking-surface));\n}\n\n.viking-callout-success .viking-callout-icon {\n color: var(--viking-success);\n}\n\n.viking-callout-warning {\n border-color: color-mix(in srgb, var(--viking-warning) 45%, transparent);\n border-left-color: var(--viking-warning);\n background: color-mix(in srgb, var(--viking-warning) 12%, var(--viking-surface));\n}\n\n.viking-callout-warning .viking-callout-icon {\n color: var(--viking-warning);\n}\n\n.viking-callout-danger {\n border-color: var(--viking-danger);\n border-left-color: var(--viking-danger);\n background: color-mix(in srgb, var(--viking-crimson-600) 22%, var(--viking-surface));\n color: var(--viking-white);\n}\n\n.viking-callout-danger .viking-callout-icon {\n color: var(--viking-crimson-400);\n}\n\n.viking-callout-danger .viking-callout-text {\n color: var(--viking-white);\n}\n`;\n\nexport const VIKING_SELECT_STYLES = `\n:host {\n display: block;\n font-family: var(--viking-font-family);\n min-width: 0;\n}\n\n:host([width='full']) {\n width: 100%;\n}\n\n:host([width='half']) {\n width: 100%;\n max-width: var(--viking-select-half-max-width, min(100%, 24rem));\n}\n\n.viking-field {\n display: flex;\n flex-direction: column;\n gap: var(--viking-space-1);\n}\n\n.viking-field-label {\n font-size: var(--viking-font-size-ui);\n font-weight: var(--viking-font-weight-bold);\n color: var(--viking-text);\n}\n\n.viking-field-description {\n margin: 0;\n font-size: var(--viking-font-size-xs);\n color: var(--viking-text-muted);\n}\n\n.viking-field-error {\n margin: 0;\n font-size: var(--viking-font-size-xs);\n color: var(--viking-danger);\n}\n\n.viking-select-native {\n width: 100%;\n min-height: var(--viking-control-height);\n padding: 0 var(--viking-space-2);\n border: 1px solid var(--viking-border-strong);\n border-radius: var(--viking-radius);\n background: var(--viking-surface);\n color: var(--viking-text);\n font-family: inherit;\n font-size: var(--viking-font-size);\n cursor: pointer;\n transition: var(--viking-transition-interactive);\n box-shadow: var(--viking-shadow-sm);\n}\n\n.viking-select-native:hover:not(:disabled) {\n border-color: var(--viking-accent-strong);\n box-shadow: var(--viking-shadow-md);\n}\n\n.viking-select-native:focus-visible {\n outline: var(--viking-ring-width) solid var(--viking-ring);\n outline-offset: var(--viking-ring-offset);\n}\n\n.viking-select-native:disabled {\n opacity: var(--viking-state-disabled-opacity);\n cursor: not-allowed;\n}\n\n.viking-select-native[aria-invalid='true'] {\n border-color: var(--viking-danger);\n}\n`;\n\nexport const VIKING_MODAL_STYLES = `\n:host {\n display: contents;\n}\n\n.viking-modal-backdrop {\n position: fixed;\n inset: 0;\n z-index: var(--viking-z-overlay, 10001);\n display: flex;\n align-items: center;\n justify-content: center;\n padding: var(--viking-space-3);\n background: var(--viking-overlay-backdrop);\n backdrop-filter: blur(8px);\n -webkit-backdrop-filter: blur(8px);\n border: none;\n animation: viking-backdrop-in var(--viking-duration-fast) var(--viking-ease-out);\n}\n\n.viking-modal-panel {\n display: flex;\n flex-direction: column;\n gap: var(--viking-space-2);\n width: min(522px, calc(100vw - var(--viking-space-4)));\n max-height: calc(100vh - var(--viking-space-6));\n padding: var(--viking-space-3);\n border: 1px solid var(--viking-border-strong);\n border-radius: var(--viking-radius-lg);\n background: var(--viking-surface);\n color: var(--viking-text);\n box-shadow: var(--viking-shadow-lg);\n font-family: var(--viking-font-family);\n position: relative;\n overflow: hidden;\n animation: viking-modal-in var(--viking-duration) var(--viking-ease-default);\n}\n\n.viking-modal-panel::before {\n content: '';\n position: absolute;\n inset: 0 0 auto;\n height: 1px;\n background: linear-gradient(\n 90deg,\n transparent,\n color-mix(in srgb, var(--viking-metallic-200) 22%, transparent),\n transparent\n );\n pointer-events: none;\n}\n\n.viking-modal-header {\n display: flex;\n align-items: flex-start;\n justify-content: space-between;\n gap: var(--viking-space-2);\n padding-bottom: var(--viking-space-1);\n border-bottom: 1px solid var(--viking-border-subtle);\n}\n\n.viking-modal-heading {\n margin: 0;\n font-size: var(--viking-font-size-md);\n font-weight: var(--viking-font-weight-bold);\n letter-spacing: var(--viking-letter-spacing-tight);\n color: var(--viking-text);\n line-height: var(--viking-line-height-tight);\n}\n\n.viking-modal-close {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n min-width: var(--viking-touch-target-comfort, 44px);\n min-height: var(--viking-touch-target-comfort, 44px);\n border: 1px solid transparent;\n background: transparent;\n color: var(--viking-text-muted);\n cursor: pointer;\n border-radius: var(--viking-radius);\n transition: var(--viking-transition-interactive);\n flex-shrink: 0;\n}\n\n.viking-modal-close:hover {\n color: var(--viking-text);\n background: var(--viking-accent-soft);\n border-color: var(--viking-border-subtle);\n}\n\n.viking-modal-close:focus-visible {\n outline: var(--viking-ring-width) solid var(--viking-ring);\n outline-offset: var(--viking-ring-offset);\n}\n\n.viking-modal-body {\n overflow-y: auto;\n color: var(--viking-text-muted);\n font-size: var(--viking-font-size);\n line-height: var(--viking-line-height-relaxed);\n}\n\n.viking-modal-footer {\n display: flex;\n flex-wrap: wrap;\n gap: var(--viking-space-2);\n justify-content: flex-end;\n padding-top: var(--viking-space-2);\n border-top: 1px solid var(--viking-border-subtle);\n}\n\n.viking-modal-footer:empty {\n display: none;\n}\n\n@keyframes viking-backdrop-in {\n from { opacity: 0; }\n to { opacity: 1; }\n}\n\n@keyframes viking-modal-in {\n from {\n opacity: 0;\n transform: translateY(var(--viking-space-1)) scale(0.98);\n }\n to {\n opacity: 1;\n transform: translateY(0) scale(1);\n }\n}\n\n@media (prefers-reduced-motion: reduce) {\n .viking-modal-backdrop,\n .viking-modal-panel {\n animation: none;\n }\n}\n`;\n\nexport const VIKING_SEARCH_PALETTE_STYLES = `\n:host {\n display: contents;\n}\n\n.viking-search-palette-backdrop {\n position: fixed;\n inset: 0;\n z-index: var(--viking-z-overlay, 10001);\n display: flex;\n align-items: flex-start;\n justify-content: center;\n padding: 10vh var(--viking-space-2) var(--viking-space-2);\n background: var(--viking-overlay-backdrop);\n backdrop-filter: blur(8px);\n -webkit-backdrop-filter: blur(8px);\n border: none;\n animation: viking-backdrop-in var(--viking-duration-fast) var(--viking-ease-out);\n}\n\n.viking-search-palette-backdrop:not([open]) {\n display: none !important;\n pointer-events: none;\n}\n\n.viking-search-palette {\n display: flex;\n flex-direction: column;\n background: var(--viking-surface-raised, var(--viking-surface));\n border: 1px solid var(--viking-border-strong);\n border-radius: var(--viking-radius-lg);\n box-shadow: var(--viking-shadow-lg);\n overflow: hidden;\n max-width: 600px;\n width: min(100%, 600px);\n margin: 0 auto;\n font-family: var(--viking-font-family);\n color: var(--viking-text);\n animation: viking-modal-in var(--viking-duration) var(--viking-ease-default);\n position: relative;\n isolation: isolate;\n}\n\n.viking-search-palette::before {\n content: '';\n position: absolute;\n inset: 0 0 auto;\n height: 1px;\n background: linear-gradient(\n 90deg,\n transparent,\n color-mix(in srgb, var(--viking-metallic-200) 22%, transparent),\n transparent\n );\n pointer-events: none;\n z-index: 1;\n}\n\n.viking-search-palette-header {\n display: flex;\n align-items: center;\n padding: var(--viking-space-2);\n border-bottom: 1px solid var(--viking-border);\n gap: var(--viking-space-1);\n background: color-mix(in srgb, var(--viking-bg) 26%, var(--viking-surface-raised));\n}\n\n.viking-search-palette-header:focus-within {\n border-bottom-color: var(--viking-accent);\n box-shadow: inset 0 -2px 0 var(--viking-accent-soft);\n}\n\n.viking-search-palette-icon {\n color: var(--viking-text-muted);\n flex-shrink: 0;\n}\n\n.viking-search-palette-input {\n flex: 1;\n background: none;\n border: none;\n outline: none;\n font-size: calc(var(--viking-font-size) * 1.05);\n color: var(--viking-text);\n font-family: inherit;\n min-width: 0;\n}\n\n.viking-search-palette-input::placeholder {\n color: var(--viking-text-muted);\n}\n\n.viking-search-palette-close {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n min-width: var(--viking-touch-target-comfort, 44px);\n min-height: var(--viking-touch-target-comfort, 44px);\n border: none;\n background: transparent;\n color: var(--viking-text-muted);\n cursor: pointer;\n padding: var(--viking-space-half);\n border-radius: var(--viking-radius);\n transition: var(--viking-transition-interactive);\n flex-shrink: 0;\n}\n\n.viking-search-palette-close:hover {\n color: var(--viking-text);\n background: var(--viking-accent-soft);\n}\n\n.viking-search-palette-close:focus-visible {\n outline: var(--viking-ring-width) solid var(--viking-ring);\n outline-offset: var(--viking-ring-offset);\n}\n\n.viking-search-palette-body {\n max-height: 50vh;\n overflow-y: auto;\n padding: var(--viking-space-2);\n}\n\n.viking-search-palette-footer {\n display: flex;\n align-items: center;\n justify-content: center;\n gap: var(--viking-space-1);\n padding: var(--viking-space-1) var(--viking-space-2);\n border-top: 1px solid var(--viking-border);\n font-size: calc(var(--viking-font-size) * 0.85);\n color: var(--viking-text-muted);\n}\n\n.viking-kbd {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n min-width: 1.5rem;\n padding: 2px 6px;\n font-family: inherit;\n font-size: calc(var(--viking-font-size) * 0.75);\n border-radius: calc(var(--viking-radius) / 2);\n border: 1px solid var(--viking-border);\n background: var(--viking-surface-alt);\n}\n\n.viking-search-results {\n display: flex;\n flex-direction: column;\n gap: var(--viking-space-1);\n}\n\n.viking-search-group-label {\n margin: var(--viking-space-1) 0 var(--viking-space-half);\n padding: 0 var(--viking-space-1);\n font-size: var(--viking-font-size-2xs);\n font-weight: var(--viking-font-weight-semibold);\n letter-spacing: var(--viking-letter-spacing-caps);\n text-transform: uppercase;\n color: var(--viking-text-muted);\n}\n\n.viking-search-result {\n display: flex;\n align-items: center;\n min-height: var(--viking-control-height-sm, 36px);\n padding: var(--viking-space-1) var(--viking-space-2);\n border-radius: var(--viking-radius);\n background: var(--viking-surface-alt);\n border: 1px solid var(--viking-border-subtle);\n cursor: pointer;\n transition: var(--viking-transition-interactive);\n gap: var(--viking-space-1);\n text-decoration: none;\n color: inherit;\n}\n\n.viking-search-result:hover,\n.viking-search-result.is-selected {\n background: color-mix(in srgb, var(--viking-accent) 10%, var(--viking-surface-alt));\n border-color: color-mix(in srgb, var(--viking-accent) 42%, var(--viking-border-strong));\n box-shadow: var(--viking-shadow-sm);\n}\n\n.viking-search-result:focus-visible {\n outline: var(--viking-ring-width) solid var(--viking-ring);\n outline-offset: var(--viking-ring-offset);\n}\n\n.viking-search-result-title {\n font-size: var(--viking-font-size-sm);\n font-weight: var(--viking-font-weight-semibold);\n color: var(--viking-text);\n}\n\n.viking-search-result-snippet {\n font-size: var(--viking-font-size-xs);\n color: var(--viking-text-muted);\n}\n\n.viking-search-empty {\n padding: var(--viking-space-3);\n text-align: center;\n color: var(--viking-text-muted);\n font-size: var(--viking-font-size-sm);\n}\n\n@keyframes viking-backdrop-in {\n from { opacity: 0; }\n to { opacity: 1; }\n}\n\n@keyframes viking-modal-in {\n from {\n opacity: 0;\n transform: translateY(var(--viking-space-1)) scale(0.98);\n }\n to {\n opacity: 1;\n transform: translateY(0) scale(1);\n }\n}\n\n@media (prefers-reduced-motion: reduce) {\n .viking-search-palette-backdrop,\n .viking-search-palette {\n animation: none;\n }\n}\n`;\n","import { attachShadowStyles } from \"../core/base\";\nimport {\n defineCustomElement,\n defineCustomElementAlias,\n HTMLElementBase,\n} from \"../core/dom\";\nimport { renderInlineIcon, TONE_ICON_NAMES } from \"../core/icons-inline\";\nimport { VIKING_BADGE_STYLES } from \"../core/styles\";\nimport type { VikingWcTone } from \"../core/types\";\n\nconst TONES = new Set<VikingWcTone>([\n \"accent\",\n \"secondary\",\n \"success\",\n \"warning\",\n \"danger\",\n \"info\",\n \"muted\",\n \"subtle\",\n]);\n\n/**\n * Framework-agnostic Viking badge Web Component.\n * Tag: `viking-badge` (legacy alias: `viking-badge-wc`)\n *\n * @attr tone - Semantic color: accent | secondary | success | warning | danger | info | muted\n * @attr size - Compact density: sm\n * @attr icon - Viking icon registry name (pairs with label for a11y)\n * @attr removable - Shows remove control; dispatches `viking-removed`\n *\n * @example\n * <viking-badge-wc tone=\"success\" icon=\"check\">Healthy</viking-badge-wc>\n */\nexport class VikingBadgeWc extends HTMLElementBase {\n static readonly tag = \"viking-badge\";\n static readonly legacyTag = \"viking-badge-wc\";\n\n static get observedAttributes(): string[] {\n return [\"tone\", \"size\", \"icon\", \"removable\"];\n }\n\n private readonly shadow: ShadowRoot;\n\n constructor() {\n super();\n this.shadow = this.attachShadow({ mode: \"open\" });\n attachShadowStyles(this.shadow, VIKING_BADGE_STYLES);\n }\n\n connectedCallback(): void {\n this.render();\n }\n\n attributeChangedCallback(): void {\n if (this.isConnected) {\n this.render();\n }\n }\n\n private get tone(): VikingWcTone | null {\n const value = (this.getAttribute(\"tone\") ?? \"\") as VikingWcTone;\n return TONES.has(value) ? value : null;\n }\n\n private get size(): \"sm\" | null {\n return this.getAttribute(\"size\") === \"sm\" ? \"sm\" : null;\n }\n\n private get removable(): boolean {\n return (\n this.hasAttribute(\"removable\") &&\n this.getAttribute(\"removable\") !== \"false\"\n );\n }\n\n private readonly onRemove = (): void => {\n this.dispatchEvent(\n new CustomEvent(\"viking-removed\", { bubbles: true, composed: true }),\n );\n };\n\n private render(): void {\n const tone = this.tone;\n if (tone && this.getAttribute(\"tone\") !== tone) {\n this.setAttribute(\"tone\", tone);\n } else if (!tone && this.hasAttribute(\"tone\")) {\n this.removeAttribute(\"tone\");\n }\n\n const size = this.size;\n if (size && this.getAttribute(\"size\") !== size) {\n this.setAttribute(\"size\", size);\n } else if (!size && this.hasAttribute(\"size\")) {\n this.removeAttribute(\"size\");\n }\n\n const iconName =\n this.getAttribute(\"icon\") ?? (tone ? TONE_ICON_NAMES[tone] : null);\n const iconMarkup = iconName ? renderInlineIcon(iconName, 16) : \"\";\n\n this.shadow.innerHTML = `\n ${iconMarkup}\n <span part=\"label\"><slot></slot></span>\n ${this.removable ? `<button type=\"button\" class=\"viking-badge-remove\" part=\"remove\" aria-label=\"Remove\">${renderInlineIcon(\"x\", 14)}</button>` : \"\"}\n `;\n\n this.shadow\n .querySelector(\".viking-badge-remove\")\n ?.addEventListener(\"click\", this.onRemove);\n }\n}\n\nexport const registerVikingBadgeWc = (): void => {\n defineCustomElement(VikingBadgeWc.tag, VikingBadgeWc);\n defineCustomElementAlias(VikingBadgeWc.legacyTag, VikingBadgeWc);\n};\n","import { attachShadowStyles, readBoolAttr } from \"../core/base\";\nimport {\n defineCustomElement,\n defineCustomElementAlias,\n escapeHtml,\n HTMLElementBase,\n} from \"../core/dom\";\nimport { VIKING_BUTTON_STYLES } from \"../core/styles\";\n\nconst VARIANTS = new Set([\n \"outline\",\n \"primary\",\n \"secondary\",\n \"filled\",\n \"danger\",\n \"ghost\",\n \"subtle\",\n]);\n\nconst SIZES = new Set([\"sm\", \"xs\"]);\n\n/**\n * Framework-agnostic Viking button Web Component.\n * Tag: `viking-button` (legacy alias: `viking-button-wc`)\n *\n * @example\n * <viking-button variant=\"primary\">Launch</viking-button>\n */\nexport class VikingButtonWc extends HTMLElementBase {\n static readonly tag = \"viking-button\";\n static readonly legacyTag = \"viking-button-wc\";\n\n static get observedAttributes(): string[] {\n return [\n \"variant\",\n \"size\",\n \"type\",\n \"disabled\",\n \"loading\",\n \"href\",\n \"target\",\n \"aria-label\",\n \"aria-busy\",\n \"square\",\n \"full-width\",\n \"compact\",\n ];\n }\n\n private readonly shadow: ShadowRoot;\n private control: HTMLButtonElement | HTMLAnchorElement | null = null;\n\n constructor() {\n super();\n this.shadow = this.attachShadow({ mode: \"open\" });\n attachShadowStyles(this.shadow, VIKING_BUTTON_STYLES);\n }\n\n connectedCallback(): void {\n this.render();\n this.syncHostSemantics();\n this.control?.addEventListener(\"click\", this.onClick);\n }\n\n disconnectedCallback(): void {\n this.control?.removeEventListener(\"click\", this.onClick);\n }\n\n attributeChangedCallback(): void {\n if (this.isConnected) {\n this.render();\n this.syncHostSemantics();\n }\n }\n\n private readonly onClick = (event: Event): void => {\n if (this.disabled || this.loading) {\n event.preventDefault();\n event.stopPropagation();\n return;\n }\n this.dispatchEvent(\n new CustomEvent(\"viking-press\", {\n bubbles: true,\n composed: true,\n detail: event,\n }),\n );\n };\n\n private get variant(): string {\n const value = this.getAttribute(\"variant\") ?? \"outline\";\n return VARIANTS.has(value) ? value : \"outline\";\n }\n\n private get size(): string | null {\n const value = this.getAttribute(\"size\");\n return value && SIZES.has(value) ? value : null;\n }\n\n private get disabled(): boolean {\n return readBoolAttr(this, \"disabled\");\n }\n\n private get loading(): boolean {\n return readBoolAttr(this, \"loading\");\n }\n\n private get square(): boolean {\n return readBoolAttr(this, \"square\");\n }\n\n private syncHostSemantics(): void {\n if (!this.hasAttribute(\"role\")) {\n this.setAttribute(\"role\", this.getAttribute(\"href\") ? \"link\" : \"button\");\n }\n }\n\n private render(): void {\n const href = this.getAttribute(\"href\");\n const isLink = Boolean(href);\n const tag = isLink ? \"a\" : \"button\";\n\n const classes = [\n \"viking-btn\",\n `viking-btn-${this.variant}`,\n this.size ? `viking-btn-${this.size}` : \"\",\n this.square ? \"viking-btn-square\" : \"\",\n ]\n .filter(Boolean)\n .join(\" \");\n\n const label = this.getAttribute(\"aria-label\") ?? \"\";\n const busy =\n this.getAttribute(\"aria-busy\") === \"true\" || this.loading ? \"true\" : null;\n const type = escapeHtml(this.getAttribute(\"type\") ?? \"button\");\n const hrefValue = href ? escapeHtml(href) : \"\";\n const target = this.getAttribute(\"target\");\n const safeTarget = target ? escapeHtml(target) : \"\";\n\n this.shadow.innerHTML = `\n <${tag}\n class=\"${classes}\"\n part=\"control\"\n ${isLink ? `href=\"${hrefValue}\"` : `type=\"${type}\"`}\n ${isLink && safeTarget ? `target=\"${safeTarget}\"` : \"\"}\n ${isLink && target === \"_blank\" ? 'rel=\"noopener noreferrer\"' : \"\"}\n ${this.disabled || this.loading ? \"disabled\" : \"\"}\n ${label ? `aria-label=\"${escapeHtml(label)}\"` : \"\"}\n ${busy ? `aria-busy=\"${busy}\"` : \"\"}\n ${this.disabled && isLink ? 'aria-disabled=\"true\" tabindex=\"-1\"' : \"\"}\n >\n ${this.loading ? '<span class=\"viking-btn-spinner\" aria-hidden=\"true\"></span>' : \"\"}\n <span class=\"viking-btn-label\" part=\"label\"><slot></slot></span>\n </${tag}>\n `;\n\n this.control = this.shadow.querySelector(tag);\n }\n}\n\nexport const registerVikingButtonWc = (): void => {\n defineCustomElement(VikingButtonWc.tag, VikingButtonWc);\n defineCustomElementAlias(VikingButtonWc.legacyTag, VikingButtonWc);\n};\n","import { attachShadowStyles } from \"../core/base\";\nimport {\n defineCustomElement,\n defineCustomElementAlias,\n escapeHtml,\n HTMLElementBase,\n} from \"../core/dom\";\nimport { renderInlineIcon, TONE_ICON_NAMES } from \"../core/icons-inline\";\nimport { VIKING_CALLOUT_STYLES } from \"../core/styles\";\nimport type { VikingWcTone } from \"../core/types\";\n\nconst TONES = new Set<VikingWcTone>([\n \"accent\",\n \"secondary\",\n \"success\",\n \"warning\",\n \"danger\",\n \"info\",\n \"muted\",\n]);\n\n/**\n * Framework-agnostic Viking callout Web Component.\n * Tag: `viking-callout` (legacy alias: `viking-callout-wc`)\n *\n * @attr tone - Semantic tone (default: info)\n * @attr heading - Bold callout title\n * @attr icon - Override leading icon from the Viking registry\n * @attr dismissible - Shows dismiss control; dispatches `viking-close`\n *\n * @example\n * <viking-callout-wc tone=\"warning\" heading=\"Degraded worker\">Lag exceeds 3s.</viking-callout-wc>\n */\nexport class VikingCalloutWc extends HTMLElementBase {\n static readonly tag = \"viking-callout\";\n static readonly legacyTag = \"viking-callout-wc\";\n\n static get observedAttributes(): string[] {\n return [\"tone\", \"heading\", \"icon\", \"dismissible\", \"hidden\"];\n }\n\n private readonly shadow: ShadowRoot;\n\n constructor() {\n super();\n this.shadow = this.attachShadow({ mode: \"open\" });\n attachShadowStyles(this.shadow, VIKING_CALLOUT_STYLES);\n }\n\n connectedCallback(): void {\n this.render();\n }\n\n attributeChangedCallback(): void {\n if (this.isConnected) {\n this.render();\n }\n }\n\n private get tone(): VikingWcTone {\n const value = (this.getAttribute(\"tone\") ?? \"info\") as VikingWcTone;\n return TONES.has(value) ? value : \"info\";\n }\n\n private get dismissible(): boolean {\n return (\n this.hasAttribute(\"dismissible\") &&\n this.getAttribute(\"dismissible\") !== \"false\"\n );\n }\n\n private readonly onDismiss = (): void => {\n this.setAttribute(\"hidden\", \"\");\n this.dispatchEvent(\n new CustomEvent(\"viking-close\", { bubbles: true, composed: true }),\n );\n };\n\n private render(): void {\n const heading = this.getAttribute(\"heading\") ?? \"\";\n const iconName =\n this.getAttribute(\"icon\") ?? TONE_ICON_NAMES[this.tone] ?? \"info\";\n const iconMarkup = renderInlineIcon(iconName, 22, \"viking-callout-icon\");\n\n this.shadow.innerHTML = `\n <div class=\"viking-callout viking-callout-${this.tone}\" role=\"note\" part=\"surface\">\n <span part=\"icon\">${iconMarkup}</span>\n <div class=\"viking-callout-body\" part=\"body\">\n ${heading ? `<p class=\"viking-callout-heading\" part=\"heading\">${escapeHtml(heading)}</p>` : \"\"}\n <div class=\"viking-callout-text\" part=\"text\"><slot></slot></div>\n </div>\n ${this.dismissible ? `<button type=\"button\" class=\"viking-callout-close\" part=\"close\" aria-label=\"Dismiss\">${renderInlineIcon(\"x\", 18)}</button>` : \"\"}\n </div>\n `;\n\n this.shadow\n .querySelector(\".viking-callout-close\")\n ?.addEventListener(\"click\", this.onDismiss);\n }\n}\n\nexport const registerVikingCalloutWc = (): void => {\n defineCustomElement(VikingCalloutWc.tag, VikingCalloutWc);\n defineCustomElementAlias(VikingCalloutWc.legacyTag, VikingCalloutWc);\n};\n","import {\n defineCustomElement,\n defineCustomElementAlias,\n HTMLElementBase,\n} from \"../core/dom\";\n\n/**\n * Framework-agnostic Viking card Web Component (light DOM — inherits global viking-card CSS).\n * Tag: `viking-card` (legacy alias: `viking-card-wc`)\n *\n * Uses light DOM so slotted content inherits `viking-card`, `viking-card-header`, and related\n * classes from the synced static CSS bundle.\n *\n * @attr compact - Applies `viking-card-compact` padding\n * @attr interactive - Hover lift for clickable cards\n * @attr title - Accessible name when the card is a landmark region\n *\n * @example\n * <viking-card-wc compact title=\"Event throughput\">\n * <div class=\"viking-card-header\">\n * <h3 class=\"viking-heading viking-heading-sm\">Event throughput</h3>\n * </div>\n * <p class=\"viking-text-muted\">8.2K events/sec</p>\n * </viking-card-wc>\n */\nexport class VikingCardWc extends HTMLElementBase {\n static readonly tag = \"viking-card\";\n static readonly legacyTag = \"viking-card-wc\";\n\n static get observedAttributes(): string[] {\n return [\"compact\", \"interactive\", \"title\"];\n }\n\n connectedCallback(): void {\n this.syncClasses();\n }\n\n attributeChangedCallback(): void {\n if (this.isConnected) {\n this.syncClasses();\n }\n }\n\n private syncClasses(): void {\n this.classList.add(\"viking-card\");\n this.classList.toggle(\"viking-card-compact\", this.hasAttribute(\"compact\"));\n this.classList.toggle(\n \"viking-card-interactive\",\n this.hasAttribute(\"interactive\"),\n );\n\n const title = this.getAttribute(\"title\");\n if (title) {\n this.setAttribute(\"role\", \"region\");\n this.setAttribute(\"aria-label\", title);\n } else {\n this.removeAttribute(\"role\");\n this.removeAttribute(\"aria-label\");\n }\n }\n}\n\nexport const registerVikingCardWc = (): void => {\n defineCustomElement(VikingCardWc.tag, VikingCardWc);\n defineCustomElementAlias(VikingCardWc.legacyTag, VikingCardWc);\n};\n","import { attachShadowStyles, readBoolAttr } from \"../core/base\";\nimport {\n defineCustomElement,\n defineCustomElementAlias,\n escapeHtml,\n HTMLElementBase,\n vikingWcUid,\n} from \"../core/dom\";\nimport { VIKING_FIELD_STYLES } from \"../core/styles\";\n\n/**\n * Framework-agnostic Viking field stack Web Component.\n * Tag: `viking-field` (legacy alias: `viking-field-wc`)\n *\n * @attr label - Visible field label\n * @attr description - Helper text below the control\n * @attr error - Validation message; sets aria-invalid on the slotted control\n * @attr required - Adds a non-color-only required marker\n * @attr width - full | half\n *\n * @slot default - Form control, usually `viking-input`, `viking-select`, or native input/select\n */\nexport class VikingFieldWc extends HTMLElementBase {\n static readonly tag = \"viking-field\";\n static readonly legacyTag = \"viking-field-wc\";\n\n static get observedAttributes(): string[] {\n return [\"label\", \"description\", \"error\", \"required\", \"width\"];\n }\n\n private readonly shadow: ShadowRoot;\n private readonly labelId = vikingWcUid(\"viking-field-label\");\n private readonly descriptionId = vikingWcUid(\"viking-field-description\");\n private readonly errorId = vikingWcUid(\"viking-field-error\");\n private slotEl: HTMLSlotElement | null = null;\n\n constructor() {\n super();\n this.shadow = this.attachShadow({ mode: \"open\" });\n attachShadowStyles(this.shadow, VIKING_FIELD_STYLES);\n }\n\n connectedCallback(): void {\n this.render();\n this.syncControlA11y();\n }\n\n disconnectedCallback(): void {\n this.slotEl?.removeEventListener(\"slotchange\", this.syncControlA11y);\n }\n\n attributeChangedCallback(): void {\n if (this.isConnected) {\n this.render();\n this.syncControlA11y();\n }\n }\n\n private get control(): HTMLElement | null {\n const assigned = this.slotEl?.assignedElements({ flatten: true }) ?? [];\n return (\n assigned.find(\n (node): node is HTMLElement => node instanceof HTMLElement,\n ) ?? null\n );\n }\n\n private readonly focusControl = (): void => {\n const control = this.control as HTMLElement & { focus?: () => void };\n control?.focus?.();\n };\n\n private readonly syncControlA11y = (): void => {\n const control = this.control;\n if (!control) {\n return;\n }\n\n const description = [\n this.getAttribute(\"description\") ?? \"\",\n this.getAttribute(\"error\") ?? \"\",\n ]\n .filter(Boolean)\n .join(\" \");\n\n const label = this.getAttribute(\"label\") ?? \"\";\n if (label && !control.hasAttribute(\"aria-label\")) {\n control.setAttribute(\"aria-label\", label);\n }\n if (description) {\n control.setAttribute(\"aria-description\", description);\n } else {\n control.removeAttribute(\"aria-description\");\n }\n\n if (this.getAttribute(\"error\")) {\n control.setAttribute(\"aria-invalid\", \"true\");\n control.setAttribute(\"error\", this.getAttribute(\"error\") ?? \"\");\n } else {\n control.removeAttribute(\"aria-invalid\");\n if (control.getAttribute(\"error\") === \"\") {\n control.removeAttribute(\"error\");\n }\n }\n\n if (readBoolAttr(this, \"required\")) {\n control.setAttribute(\"required\", \"\");\n }\n };\n\n private render(): void {\n const label = this.getAttribute(\"label\") ?? \"\";\n const description = this.getAttribute(\"description\") ?? \"\";\n const error = this.getAttribute(\"error\") ?? \"\";\n const required = readBoolAttr(this, \"required\");\n\n this.shadow.innerHTML = `\n <div class=\"viking-field\" part=\"field\" role=\"group\" aria-labelledby=\"${this.labelId}\">\n ${\n label\n ? `<div class=\"viking-field-label-row\" part=\"label-row\">\n <span class=\"viking-field-label\" part=\"label\" id=\"${this.labelId}\">\n <span>${escapeHtml(label)}</span>\n ${required ? `<span class=\"viking-field-required\" aria-label=\"required\">*</span>` : \"\"}\n </span>\n </div>`\n : `<span id=\"${this.labelId}\" hidden>Form field</span>`\n }\n <div class=\"viking-field-control\" part=\"control\"><slot></slot></div>\n ${\n description\n ? `<p id=\"${this.descriptionId}\" class=\"viking-field-description\" part=\"description\">${escapeHtml(description)}</p>`\n : \"\"\n }\n ${\n error\n ? `<p id=\"${this.errorId}\" class=\"viking-field-error\" part=\"error\" role=\"alert\">${escapeHtml(error)}</p>`\n : \"\"\n }\n </div>\n `;\n\n this.slotEl = this.shadow.querySelector(\"slot\");\n this.slotEl?.addEventListener(\"slotchange\", this.syncControlA11y);\n this.shadow\n .querySelector(\".viking-field-label\")\n ?.addEventListener(\"click\", this.focusControl);\n }\n}\n\nexport const registerVikingFieldWc = (): void => {\n defineCustomElement(VikingFieldWc.tag, VikingFieldWc);\n defineCustomElementAlias(VikingFieldWc.legacyTag, VikingFieldWc);\n};\n","import {\n attachElementInternals,\n attachShadowStyles,\n readBoolAttr,\n setFormValue,\n} from \"../core/base\";\nimport {\n defineCustomElement,\n defineCustomElementAlias,\n escapeHtml,\n HTMLElementBase,\n} from \"../core/dom\";\nimport { VIKING_INPUT_STYLES } from \"../core/styles\";\n\n/**\n * Framework-agnostic Viking input Web Component with form association.\n * Tag: `viking-input` (legacy alias: `viking-input-wc`)\n *\n * @example\n * <viking-input placeholder=\"Email\" name=\"email\" type=\"email\"></viking-input>\n */\nexport class VikingInputWc extends HTMLElementBase {\n static readonly formAssociated = true;\n static readonly tag = \"viking-input\";\n static readonly legacyTag = \"viking-input-wc\";\n\n static get observedAttributes(): string[] {\n return [\n \"type\",\n \"placeholder\",\n \"value\",\n \"disabled\",\n \"loading\",\n \"clearable\",\n \"name\",\n \"autocomplete\",\n \"required\",\n \"readonly\",\n \"minlength\",\n \"maxlength\",\n \"pattern\",\n \"error\",\n \"aria-label\",\n \"aria-describedby\",\n \"bare\",\n ];\n }\n\n private readonly shadow: ShadowRoot;\n private readonly internals: ElementInternals | null;\n private input: HTMLInputElement | null = null;\n\n constructor() {\n super();\n this.shadow = this.attachShadow({ mode: \"open\" });\n this.internals = attachElementInternals(this);\n attachShadowStyles(this.shadow, VIKING_INPUT_STYLES);\n }\n\n connectedCallback(): void {\n this.render();\n this.syncFormValue();\n }\n\n attributeChangedCallback(name: string): void {\n if (!this.isConnected) {\n return;\n }\n if (name === \"value\" && this.input) {\n this.input.value = this.getAttribute(\"value\") ?? \"\";\n this.syncFormValue();\n return;\n }\n this.render();\n }\n\n get value(): string {\n return this.input?.value ?? this.getAttribute(\"value\") ?? \"\";\n }\n\n set value(next: string) {\n const normalized = next ?? \"\";\n this.setAttribute(\"value\", normalized);\n if (this.input) {\n this.input.value = normalized;\n }\n this.syncFormValue();\n }\n\n private get disabled(): boolean {\n return readBoolAttr(this, \"disabled\");\n }\n\n private get loading(): boolean {\n return readBoolAttr(this, \"loading\");\n }\n\n private get clearable(): boolean {\n return readBoolAttr(this, \"clearable\");\n }\n\n private get bare(): boolean {\n return readBoolAttr(this, \"bare\");\n }\n\n private readonly onInput = (): void => {\n const next = this.input?.value ?? \"\";\n this.setAttribute(\"value\", next);\n this.syncFormValue();\n this.dispatchEvent(new Event(\"input\", { bubbles: true, composed: true }));\n this.dispatchEvent(new Event(\"change\", { bubbles: true, composed: true }));\n };\n\n private readonly onBlur = (): void => {\n this.dispatchEvent(new Event(\"blur\", { bubbles: true, composed: true }));\n };\n\n private readonly onClear = (): void => {\n this.value = \"\";\n this.input?.focus();\n this.dispatchEvent(\n new CustomEvent(\"viking-cleared\", { bubbles: true, composed: true }),\n );\n this.dispatchEvent(new Event(\"input\", { bubbles: true, composed: true }));\n };\n\n private syncFormValue(): void {\n setFormValue(this.internals, this.value);\n }\n\n private render(): void {\n const shellClasses = [\n \"viking-input-shell\",\n this.disabled ? \"viking-disabled\" : \"\",\n this.loading ? \"viking-loading\" : \"\",\n ]\n .filter(Boolean)\n .join(\" \");\n\n const type = escapeHtml(this.getAttribute(\"type\") ?? \"text\");\n const rawPlaceholder = this.getAttribute(\"placeholder\") ?? \"\";\n const placeholder = escapeHtml(rawPlaceholder);\n const value = escapeHtml(this.getAttribute(\"value\") ?? \"\");\n const label =\n this.getAttribute(\"aria-label\") ?? (rawPlaceholder || \"Text input\");\n const autocomplete = escapeHtml(this.getAttribute(\"autocomplete\") ?? \"\");\n const describedBy = escapeHtml(this.getAttribute(\"aria-describedby\") ?? \"\");\n const minLength = escapeHtml(this.getAttribute(\"minlength\") ?? \"\");\n const maxLength = escapeHtml(this.getAttribute(\"maxlength\") ?? \"\");\n const pattern = escapeHtml(this.getAttribute(\"pattern\") ?? \"\");\n const error = this.getAttribute(\"error\") ?? \"\";\n const required = readBoolAttr(this, \"required\");\n const readonly = readBoolAttr(this, \"readonly\");\n const showClear =\n this.clearable && value.length > 0 && !this.loading && !this.bare;\n const nativeAttrs = `\n ${this.disabled || this.loading ? \"disabled\" : \"\"}\n ${required ? \"required\" : \"\"}\n ${readonly ? \"readonly\" : \"\"}\n aria-label=\"${escapeHtml(label)}\"\n ${describedBy ? `aria-describedby=\"${describedBy}\"` : \"\"}\n ${this.loading ? 'aria-busy=\"true\"' : \"\"}\n ${error ? 'aria-invalid=\"true\"' : \"\"}\n ${autocomplete ? `autocomplete=\"${autocomplete}\"` : \"\"}\n ${minLength ? `minlength=\"${minLength}\"` : \"\"}\n ${maxLength ? `maxlength=\"${maxLength}\"` : \"\"}\n ${pattern ? `pattern=\"${pattern}\"` : \"\"}\n `;\n\n if (this.bare) {\n this.shadow.innerHTML = `\n <input\n part=\"input\"\n class=\"viking-input-native\"\n type=\"${type}\"\n placeholder=\"${placeholder}\"\n value=\"${value}\"\n ${nativeAttrs}\n />\n `;\n } else {\n this.shadow.innerHTML = `\n <div class=\"${shellClasses}\" part=\"shell\">\n <slot name=\"leading\"></slot>\n <input\n part=\"input\"\n type=\"${type}\"\n placeholder=\"${placeholder}\"\n value=\"${value}\"\n ${nativeAttrs}\n />\n ${this.loading ? '<span class=\"viking-input-spinner\" aria-hidden=\"true\"></span>' : \"\"}\n ${showClear ? '<button type=\"button\" class=\"viking-input-clear\" aria-label=\"Clear input\" part=\"clear\">×</button>' : \"\"}\n <slot name=\"trailing\"></slot>\n </div>\n `;\n }\n\n this.input = this.shadow.querySelector(\"input\");\n this.input?.addEventListener(\"input\", this.onInput);\n this.input?.addEventListener(\"blur\", this.onBlur);\n\n const clearBtn = this.shadow.querySelector(\".viking-input-clear\");\n clearBtn?.addEventListener(\"click\", this.onClear);\n }\n}\n\nexport const registerVikingInputWc = (): void => {\n defineCustomElement(VikingInputWc.tag, VikingInputWc);\n defineCustomElementAlias(VikingInputWc.legacyTag, VikingInputWc);\n};\n","import {\n attachShadowStyles,\n closeModalDialog,\n showModalDialog,\n} from \"../core/base\";\nimport {\n defineCustomElement,\n defineCustomElementAlias,\n escapeHtml,\n HTMLElementBase,\n} from \"../core/dom\";\nimport { renderInlineIcon } from \"../core/icons-inline\";\nimport { VIKING_MODAL_STYLES } from \"../core/styles\";\n\n/**\n * Framework-agnostic modal Web Component using native `<dialog>` semantics.\n * Tag: `viking-modal` (legacy aliases: `viking-modal-wc`, `viking-dialog`)\n *\n * @attr open - When present, shows the modal\n * @attr title - Dialog title for aria-label / heading\n * @attr dismissible - Allow Escape and backdrop click to close (default: true)\n *\n * @slot default - Modal body content\n * @slot actions - Footer action buttons\n *\n * @method openModal() - Programmatically open\n * @method closeModal() - Programmatically close\n *\n * @event viking-close - Fired when the dialog closes\n *\n * @example\n * <viking-modal title=\"Confirm deploy\">\n * <p>Push v2.0.0 to production?</p>\n * <viking-button slot=\"actions\" variant=\"primary\">Deploy</viking-button>\n * </viking-modal>\n */\nexport class VikingModalWc extends HTMLElementBase {\n static readonly tag = \"viking-modal\";\n static readonly legacyTag = \"viking-modal-wc\";\n static readonly dialogTag = \"viking-dialog\";\n\n static get observedAttributes(): string[] {\n return [\"open\", \"title\", \"dismissible\"];\n }\n\n private readonly shadow: ShadowRoot;\n private dialogEl: HTMLDialogElement | null = null;\n\n constructor() {\n super();\n this.shadow = this.attachShadow({ mode: \"open\" });\n attachShadowStyles(this.shadow, VIKING_MODAL_STYLES);\n }\n\n connectedCallback(): void {\n this.render();\n this.syncOpen();\n this.dialogEl?.addEventListener(\"close\", this.onClose);\n this.dialogEl?.addEventListener(\"click\", this.onBackdropClick);\n }\n\n disconnectedCallback(): void {\n this.dialogEl?.removeEventListener(\"close\", this.onClose);\n this.dialogEl?.removeEventListener(\"click\", this.onBackdropClick);\n }\n\n attributeChangedCallback(name: string): void {\n if (!this.isConnected) {\n return;\n }\n if (name === \"open\") {\n this.syncOpen();\n return;\n }\n if (name === \"title\") {\n this.updateTitle();\n return;\n }\n if (name === \"dismissible\") {\n this.render();\n this.syncOpen();\n }\n }\n\n /** Opens the modal dialog. */\n openModal(): void {\n this.setAttribute(\"open\", \"\");\n this.syncOpen();\n }\n\n /** Closes the modal dialog. */\n closeModal(): void {\n this.removeAttribute(\"open\");\n closeModalDialog(this.dialogEl);\n }\n\n /** @deprecated Use openModal() */\n open(): void {\n this.openModal();\n }\n\n /** @deprecated Use closeModal() */\n close(): void {\n this.closeModal();\n }\n\n private get dismissible(): boolean {\n return this.getAttribute(\"dismissible\") !== \"false\";\n }\n\n private readonly onClose = (): void => {\n this.removeAttribute(\"open\");\n this.dispatchEvent(\n new CustomEvent(\"viking-close\", { bubbles: true, composed: true }),\n );\n };\n\n private readonly onBackdropClick = (event: MouseEvent): void => {\n if (!this.dismissible) {\n return;\n }\n if (event.target === this.dialogEl) {\n this.closeModal();\n }\n };\n\n private syncOpen(): void {\n if (!this.dialogEl) {\n return;\n }\n const shouldOpen = this.hasAttribute(\"open\");\n if (shouldOpen && !this.dialogEl.open) {\n showModalDialog(this.dialogEl);\n queueMicrotask(() => {\n const closeBtn = this.shadow.querySelector<HTMLButtonElement>(\n \".viking-modal-close\",\n );\n (closeBtn ?? this.dialogEl)?.focus();\n });\n } else if (!shouldOpen && this.dialogEl.open) {\n closeModalDialog(this.dialogEl);\n }\n }\n\n private updateTitle(): void {\n const title = this.getAttribute(\"title\") ?? \"Dialog\";\n const heading = this.shadow.querySelector(\".viking-modal-heading\");\n if (heading) {\n heading.textContent = title;\n }\n this.dialogEl?.setAttribute(\"aria-label\", title);\n }\n\n private render(): void {\n const title = this.getAttribute(\"title\") ?? \"Dialog\";\n\n this.shadow.innerHTML = `\n <dialog class=\"viking-modal-backdrop\" aria-label=\"${escapeHtml(title)}\" aria-modal=\"true\">\n <div class=\"viking-modal-panel\" part=\"panel\" role=\"document\">\n <header class=\"viking-modal-header\" part=\"header\">\n <h2 class=\"viking-modal-heading\" part=\"title\">${escapeHtml(title)}</h2>\n ${this.dismissible ? `<button type=\"button\" class=\"viking-modal-close\" part=\"close\" aria-label=\"Close dialog\">${renderInlineIcon(\"x\", 20)}</button>` : \"\"}\n </header>\n <div class=\"viking-modal-body\" part=\"body\"><slot></slot></div>\n <footer class=\"viking-modal-footer\" part=\"footer\"><slot name=\"actions\"></slot></footer>\n </div>\n </dialog>\n `;\n\n this.dialogEl = this.shadow.querySelector(\"dialog\");\n this.shadow\n .querySelector(\".viking-modal-close\")\n ?.addEventListener(\"click\", () => this.closeModal());\n this.dialogEl?.addEventListener(\"keydown\", (event) => {\n if (event.key === \"Escape\" && this.dismissible) {\n event.preventDefault();\n this.closeModal();\n }\n });\n }\n}\n\nexport const registerVikingModalWc = (): void => {\n defineCustomElement(VikingModalWc.tag, VikingModalWc);\n defineCustomElementAlias(VikingModalWc.legacyTag, VikingModalWc);\n defineCustomElementAlias(VikingModalWc.dialogTag, VikingModalWc);\n};\n","import {\n attachShadowStyles,\n readBoolAttr,\n closeModalDialog,\n showModalDialog,\n} from \"../core/base\";\nimport {\n defineCustomElement,\n defineCustomElementAlias,\n escapeHtml,\n HTMLElementBase,\n modKeyLabel,\n vikingWcUid,\n} from \"../core/dom\";\nimport { renderInlineIcon } from \"../core/icons-inline\";\nimport { VIKING_SEARCH_PALETTE_STYLES } from \"../core/styles\";\nimport type { VikingSearchPaletteItem } from \"../core/types\";\n\nexport type { VikingSearchPaletteItem };\n\nconst parseItems = (el: HTMLElement): VikingSearchPaletteItem[] => {\n const raw = el.getAttribute(\"items\");\n if (!raw) {\n return [];\n }\n try {\n const parsed = JSON.parse(raw) as VikingSearchPaletteItem[];\n return Array.isArray(parsed) ? parsed : [];\n } catch {\n return [];\n }\n};\n\nconst matchesQuery = (\n item: VikingSearchPaletteItem,\n query: string,\n): boolean => {\n const haystack = [\n item.title,\n item.snippet ?? \"\",\n item.group ?? \"\",\n item.href,\n ...(item.keywords ?? []),\n ]\n .join(\" \")\n .toLowerCase();\n return haystack.includes(query);\n};\n\nconst filterItems = (\n items: VikingSearchPaletteItem[],\n query: string,\n): VikingSearchPaletteItem[] => {\n const q = query.trim().toLowerCase();\n if (!q) {\n return items;\n }\n return items.filter((item) => matchesQuery(item, q));\n};\n\nconst groupItems = (\n items: VikingSearchPaletteItem[],\n): { group: string | null; items: VikingSearchPaletteItem[] }[] => {\n const groups = new Map<string | null, VikingSearchPaletteItem[]>();\n items.forEach((item) => {\n const key = item.group ?? null;\n const bucket = groups.get(key) ?? [];\n bucket.push(item);\n groups.set(key, bucket);\n });\n return Array.from(groups.entries()).map(([group, grouped]) => ({\n group,\n items: grouped,\n }));\n};\n\n/**\n * Framework-agnostic command palette / search overlay Web Component.\n * Tag: `viking-command-palette`\n * Aliases: `viking-search-palette`, `viking-search-palette-wc`\n *\n * @attr open - When present, shows the palette\n * @attr global-shortcut - Bind ⌘K / Ctrl+K to open\n * @attr placeholder - Search input placeholder\n * @attr items - JSON array of `{ title, href, snippet?, group? }`\n *\n * @method openPalette() - Programmatically open\n * @method closePalette() - Programmatically close\n *\n * @event viking-close - Palette closed\n * @event viking-query - `{ detail: { query: string } }` on input\n * @event viking-select - `{ detail: { item } }` when a result is activated\n *\n * @example\n * <viking-command-palette\n * global-shortcut\n * items='[{\"title\":\"Components\",\"href\":\"/components\",\"group\":\"Docs\"}]'\n * ></viking-command-palette>\n */\nexport class VikingSearchPaletteWc extends HTMLElementBase {\n static readonly tag = \"viking-command-palette\";\n static readonly searchTag = \"viking-search-palette\";\n static readonly legacyTag = \"viking-search-palette-wc\";\n\n static get observedAttributes(): string[] {\n return [\"open\", \"placeholder\", \"items\", \"global-shortcut\"];\n }\n\n private readonly shadow: ShadowRoot;\n private dialogEl: HTMLDialogElement | null = null;\n private inputEl: HTMLInputElement | null = null;\n private resultsEl: HTMLDivElement | null = null;\n private globalKeyHandler: ((event: KeyboardEvent) => void) | null = null;\n private readonly resultsId = vikingWcUid(\"viking-search-results\");\n private readonly inputId = vikingWcUid(\"viking-search-input\");\n private query = \"\";\n private activeIndex = 0;\n private flatResults: VikingSearchPaletteItem[] = [];\n\n constructor() {\n super();\n this.shadow = this.attachShadow({ mode: \"open\" });\n attachShadowStyles(this.shadow, VIKING_SEARCH_PALETTE_STYLES);\n }\n\n connectedCallback(): void {\n this.render();\n this.syncOpen();\n this.bindGlobalShortcut();\n this.dialogEl?.addEventListener(\"close\", this.onClose);\n this.dialogEl?.addEventListener(\"click\", this.onBackdropClick);\n this.inputEl?.addEventListener(\"input\", this.onInput);\n this.inputEl?.addEventListener(\"keydown\", this.onInputKeydown);\n }\n\n disconnectedCallback(): void {\n this.dialogEl?.removeEventListener(\"close\", this.onClose);\n this.dialogEl?.removeEventListener(\"click\", this.onBackdropClick);\n this.inputEl?.removeEventListener(\"input\", this.onInput);\n this.inputEl?.removeEventListener(\"keydown\", this.onInputKeydown);\n this.unbindGlobalShortcut();\n }\n\n attributeChangedCallback(name: string): void {\n if (!this.isConnected) {\n return;\n }\n if (name === \"open\") {\n this.syncOpen();\n }\n if (name === \"global-shortcut\") {\n this.unbindGlobalShortcut();\n this.bindGlobalShortcut();\n }\n if (name === \"items\" || name === \"placeholder\") {\n if (name === \"placeholder\" && this.inputEl) {\n const placeholder =\n this.getAttribute(\"placeholder\") ??\n \"Search documentation, dashboard, API…\";\n this.inputEl.placeholder = placeholder;\n this.inputEl.setAttribute(\"aria-label\", placeholder);\n } else {\n this.renderResults();\n }\n }\n }\n\n /** Opens the command palette. */\n openPalette(): void {\n this.setAttribute(\"open\", \"\");\n this.syncOpen();\n }\n\n /** Closes the command palette. */\n closePalette(): void {\n this.removeAttribute(\"open\");\n closeModalDialog(this.dialogEl);\n }\n\n /** Sets the query string and re-renders filtered results. */\n search(query: string): void {\n this.query = query;\n if (this.inputEl) {\n this.inputEl.value = query;\n }\n this.activeIndex = 0;\n this.renderResults();\n this.dispatchEvent(\n new CustomEvent(\"viking-query\", {\n bubbles: true,\n composed: true,\n detail: { query: this.query },\n }),\n );\n }\n\n private readonly onClose = (): void => {\n this.removeAttribute(\"open\");\n this.query = \"\";\n this.activeIndex = 0;\n if (this.inputEl) {\n this.inputEl.value = \"\";\n }\n this.dispatchEvent(\n new CustomEvent(\"viking-close\", { bubbles: true, composed: true }),\n );\n };\n\n private readonly onBackdropClick = (event: MouseEvent): void => {\n if (event.target === this.dialogEl) {\n this.closePalette();\n }\n };\n\n private readonly onInput = (event: Event): void => {\n this.query =\n (event.target as HTMLInputElement).value ?? this.inputEl?.value ?? \"\";\n this.activeIndex = 0;\n this.renderResults();\n this.dispatchEvent(\n new CustomEvent(\"viking-query\", {\n bubbles: true,\n composed: true,\n detail: { query: this.query },\n }),\n );\n };\n\n private readonly onInputKeydown = (event: KeyboardEvent): void => {\n if (this.flatResults.length === 0) {\n if (event.key === \"Escape\") {\n event.preventDefault();\n this.closePalette();\n }\n return;\n }\n\n if (event.key === \"ArrowDown\") {\n event.preventDefault();\n this.activeIndex = Math.min(\n this.flatResults.length - 1,\n this.activeIndex + 1,\n );\n this.renderResults();\n this.scrollActiveIntoView();\n return;\n }\n\n if (event.key === \"ArrowUp\") {\n event.preventDefault();\n this.activeIndex = Math.max(0, this.activeIndex - 1);\n this.renderResults();\n this.scrollActiveIntoView();\n return;\n }\n\n if (event.key === \"Enter\") {\n event.preventDefault();\n const item = this.flatResults[this.activeIndex];\n if (item) {\n this.activateItem(item);\n }\n }\n };\n\n private bindGlobalShortcut(): void {\n if (!readBoolAttr(this, \"global-shortcut\")) {\n return;\n }\n this.globalKeyHandler = (event: KeyboardEvent) => {\n if ((event.metaKey || event.ctrlKey) && event.key.toLowerCase() === \"k\") {\n event.preventDefault();\n if (this.hasAttribute(\"open\")) {\n this.closePalette();\n } else {\n this.openPalette();\n }\n }\n };\n document.addEventListener(\"keydown\", this.globalKeyHandler);\n }\n\n private unbindGlobalShortcut(): void {\n if (this.globalKeyHandler) {\n document.removeEventListener(\"keydown\", this.globalKeyHandler);\n this.globalKeyHandler = null;\n }\n }\n\n private syncOpen(): void {\n if (!this.dialogEl) {\n return;\n }\n const shouldOpen = this.hasAttribute(\"open\");\n if (shouldOpen && !this.dialogEl.open) {\n this.dialogEl.removeAttribute(\"aria-hidden\");\n showModalDialog(this.dialogEl);\n this.activeIndex = 0;\n this.renderResults();\n queueMicrotask(() => this.inputEl?.focus());\n } else if (!shouldOpen && this.dialogEl.open) {\n closeModalDialog(this.dialogEl);\n this.dialogEl.setAttribute(\"aria-hidden\", \"true\");\n } else if (!shouldOpen) {\n this.dialogEl.setAttribute(\"aria-hidden\", \"true\");\n }\n }\n\n private scrollActiveIntoView(): void {\n const active = this.resultsEl?.querySelector(\n \".viking-search-result.is-selected\",\n );\n active?.scrollIntoView({ block: \"nearest\" });\n }\n\n private activateItem(item: VikingSearchPaletteItem): void {\n this.dispatchEvent(\n new CustomEvent(\"viking-select\", {\n bubbles: true,\n composed: true,\n detail: { item },\n }),\n );\n this.closePalette();\n\n if (item.action === \"cookie-settings\") {\n const widgets = (\n globalThis as { DemlWidgets?: { openCookieSettings?: () => void } }\n ).DemlWidgets;\n widgets?.openCookieSettings?.();\n return;\n }\n\n if (item.action === \"bug-report\") {\n const widgets = (\n globalThis as { DemlWidgets?: { openBugReport?: () => void } }\n ).DemlWidgets;\n if (widgets?.openBugReport) {\n widgets.openBugReport();\n return;\n }\n }\n\n if (item.href && item.href !== \"#\") {\n window.location.assign(item.href);\n }\n }\n\n private renderResults(): void {\n if (!this.resultsEl) {\n return;\n }\n\n const items = parseItems(this);\n const q = this.query.trim().toLowerCase();\n const filtered = filterItems(items, q);\n this.flatResults = filtered;\n\n if (filtered.length === 0) {\n const q = this.query.trim();\n this.resultsEl.innerHTML = `<p class=\"viking-search-empty\" role=\"status\">${q ? \"No results found\" : \"Start typing to search…\"}</p>`;\n this.inputEl?.removeAttribute(\"aria-activedescendant\");\n return;\n }\n\n if (this.activeIndex >= filtered.length) {\n this.activeIndex = filtered.length - 1;\n }\n\n let resultIndex = 0;\n const grouped = groupItems(filtered);\n\n const markup = grouped\n .map(({ group, items: groupItemsList }) => {\n const groupLabel = group\n ? `<p class=\"viking-search-group-label\" role=\"presentation\">${escapeHtml(group)}</p>`\n : \"\";\n const rows = groupItemsList\n .map((item) => {\n const id = `${this.resultsId}-result-${resultIndex}`;\n const selected = resultIndex === this.activeIndex;\n resultIndex += 1;\n return `\n <a\n id=\"${id}\"\n class=\"viking-search-result${selected ? \" is-selected\" : \"\"}\"\n role=\"option\"\n aria-selected=\"${selected}\"\n href=\"${escapeHtml(item.href)}\"\n part=\"result\"\n data-index=\"${resultIndex - 1}\"\n >\n <div>\n <div class=\"viking-search-result-title\">${escapeHtml(item.title)}</div>\n ${item.snippet ? `<div class=\"viking-search-result-snippet\">${escapeHtml(item.snippet)}</div>` : \"\"}\n </div>\n </a>`;\n })\n .join(\"\");\n return `${groupLabel}${rows}`;\n })\n .join(\"\");\n\n this.resultsEl.innerHTML = `<div class=\"viking-search-results\" id=\"${this.resultsId}\" role=\"listbox\" aria-label=\"Search results\">${markup}</div>`;\n\n const activeId = `${this.resultsId}-result-${this.activeIndex}`;\n this.inputEl?.setAttribute(\"aria-activedescendant\", activeId);\n this.inputEl?.setAttribute(\"role\", \"combobox\");\n this.inputEl?.setAttribute(\"aria-expanded\", \"true\");\n this.inputEl?.setAttribute(\"aria-controls\", this.resultsId);\n\n this.resultsEl.querySelectorAll(\".viking-search-result\").forEach((node) => {\n node.addEventListener(\"click\", (event) => {\n event.preventDefault();\n const index = Number((node as HTMLElement).dataset[\"index\"] ?? 0);\n const item = this.flatResults[index];\n if (item) {\n this.activateItem(item);\n }\n });\n node.addEventListener(\"mouseenter\", () => {\n const index = Number((node as HTMLElement).dataset[\"index\"] ?? 0);\n this.activeIndex = index;\n this.renderResults();\n });\n });\n }\n\n private render(): void {\n const placeholder =\n this.getAttribute(\"placeholder\") ??\n \"Search documentation, dashboard, API…\";\n const mod = modKeyLabel();\n\n this.shadow.innerHTML = `\n <dialog class=\"viking-search-palette-backdrop\" aria-label=\"Search\" aria-hidden=\"true\">\n <div class=\"viking-search-palette\" part=\"panel\" role=\"document\">\n <div class=\"viking-search-palette-header\" part=\"header\">\n <span class=\"viking-search-palette-icon\" aria-hidden=\"true\">${renderInlineIcon(\"search\", 24)}</span>\n <input\n id=\"${this.inputId}\"\n type=\"search\"\n class=\"viking-search-palette-input\"\n part=\"input\"\n placeholder=\"${escapeHtml(placeholder)}\"\n aria-label=\"${escapeHtml(placeholder)}\"\n aria-autocomplete=\"list\"\n autocomplete=\"off\"\n spellcheck=\"false\"\n />\n <button type=\"button\" class=\"viking-search-palette-close\" part=\"close\" aria-label=\"Close search\">${renderInlineIcon(\"x\", 20)}</button>\n </div>\n <div class=\"viking-search-palette-body\" part=\"body\">\n <slot></slot>\n <div class=\"viking-search-results-host\"></div>\n </div>\n <footer class=\"viking-search-palette-footer\" part=\"footer\">\n <span class=\"viking-kbd\">${mod}</span><span class=\"viking-kbd\">K</span> toggle ·\n <span class=\"viking-kbd\">↑</span><span class=\"viking-kbd\">↓</span> navigate ·\n <span class=\"viking-kbd\">Enter</span> open ·\n <span class=\"viking-kbd\">Esc</span> close\n </footer>\n </div>\n </dialog>\n `;\n\n this.dialogEl = this.shadow.querySelector(\"dialog\");\n this.inputEl = this.shadow.querySelector(\"input\");\n this.resultsEl = this.shadow.querySelector(\".viking-search-results-host\");\n\n this.shadow\n .querySelector(\".viking-search-palette-close\")\n ?.addEventListener(\"click\", () => this.closePalette());\n\n this.dialogEl?.addEventListener(\"keydown\", (event) => {\n if (event.key === \"Escape\") {\n event.preventDefault();\n this.closePalette();\n }\n });\n }\n}\n\nexport const registerVikingSearchPaletteWc = (): void => {\n defineCustomElement(VikingSearchPaletteWc.tag, VikingSearchPaletteWc);\n defineCustomElementAlias(\n VikingSearchPaletteWc.searchTag,\n VikingSearchPaletteWc,\n );\n defineCustomElementAlias(\n VikingSearchPaletteWc.legacyTag,\n VikingSearchPaletteWc,\n );\n};\n","import { VikingIconName } from \"../core/icons\";\n\n/**\n * Drakkar — the Viking longship that carries the site shell (navbar, footer, nav links)\n * across marketing, app, and backend surfaces.\n */\n\n/** Which DEML surface the Drakkar shell is rendering on (navbar + footer). */\nexport type SiteDrakkarContext = \"app\" | \"marketing\" | \"backend\" | \"docs\";\n\nexport interface SiteUrls {\n app: string;\n marketing: string;\n backend: string;\n}\n\nexport interface SiteNavLink {\n id: string;\n label: string;\n icon: VikingIconName;\n appHref: string;\n marketingHref: string;\n external?: boolean;\n requireAuth?: boolean;\n /** Routes served by deml.app — resolved to absolute app URLs off-app. */\n platform?: boolean;\n}\n\nexport interface SiteFooterLink {\n label: string;\n appHref: string;\n marketingHref: string;\n external?: boolean;\n action?: \"cookie-settings\" | \"bug-report\";\n /** Routes served by deml.app — resolved to absolute app URLs off-app. */\n platform?: boolean;\n}\n\nexport interface SiteFooterColumn {\n title: string;\n links: SiteFooterLink[];\n}\n\n/** Primary navbar links (desktop + mobile). Shown on every surface. */\nexport const SITE_NAV_LINKS: readonly SiteNavLink[] = [\n {\n id: \"explore\",\n label: \"Explore\",\n icon: \"globe\",\n appHref: \"/explore\",\n marketingHref: \"/explore\",\n platform: true,\n },\n {\n id: \"documentation\",\n label: \"Documentation\",\n icon: \"file\",\n appHref: \"https://dataengineeringformachinelearning.com/documentation/\",\n marketingHref: \"/documentation\",\n },\n {\n id: \"dashboard\",\n label: \"Dashboard\",\n icon: \"home\",\n appHref: \"/dashboard\",\n marketingHref: \"/dashboard\",\n requireAuth: true,\n platform: true,\n },\n {\n id: \"sites\",\n label: \"Sites\",\n icon: \"building\",\n appHref: \"/settings\",\n marketingHref: \"/settings\",\n requireAuth: true,\n platform: true,\n },\n {\n id: \"account\",\n label: \"Account\",\n icon: \"user\",\n appHref: \"/account\",\n marketingHref: \"/account\",\n requireAuth: true,\n platform: true,\n },\n] as const;\n\nexport const SITE_FOOTER_COLUMNS: readonly SiteFooterColumn[] = [\n {\n title: \"Platform\",\n links: [\n {\n label: \"Explore\",\n appHref: \"/explore\",\n marketingHref: \"/explore\",\n platform: true,\n },\n {\n label: \"Dashboard\",\n appHref: \"/dashboard\",\n marketingHref: \"/dashboard\",\n platform: true,\n },\n {\n label: \"Sites\",\n appHref: \"/settings\",\n marketingHref: \"/settings\",\n platform: true,\n },\n {\n label: \"Account\",\n appHref: \"/account\",\n marketingHref: \"/account\",\n platform: true,\n },\n {\n label: \"Platform Status\",\n appHref: \"/status/platform-status\",\n marketingHref: \"/status/platform-status\",\n platform: true,\n },\n ],\n },\n {\n title: \"Resources\",\n links: [\n {\n label: \"Documentation\",\n appHref: \"https://dataengineeringformachinelearning.com/documentation/\",\n marketingHref: \"/documentation\",\n },\n {\n label: \"Whitepaper\",\n appHref: \"https://dataengineeringformachinelearning.com/whitepaper/\",\n marketingHref: \"/whitepaper\",\n },\n {\n label: \"Book\",\n appHref: \"https://dataengineeringformachinelearning.com/book/\",\n marketingHref: \"/book\",\n },\n ],\n },\n {\n title: \"Support\",\n links: [\n {\n label: \"Platform Status\",\n appHref: \"/status/platform-status\",\n marketingHref: \"/status/platform-status\",\n platform: true,\n },\n {\n label: \"Report a Bug\",\n appHref: \"#\",\n marketingHref: \"#\",\n action: \"bug-report\",\n },\n ],\n },\n {\n title: \"Legal & Compliance\",\n links: [\n {\n label: \"Privacy Policy\",\n appHref: \"https://dataengineeringformachinelearning.com/privacy/\",\n marketingHref: \"/privacy\",\n },\n {\n label: \"Terms of Service\",\n appHref: \"https://dataengineeringformachinelearning.com/terms/\",\n marketingHref: \"/terms\",\n },\n {\n label: \"SOC2 Compliance\",\n appHref: \"https://dataengineeringformachinelearning.com/compliance/\",\n marketingHref: \"/compliance\",\n },\n {\n label: \"GDPR Compliance\",\n appHref: \"https://dataengineeringformachinelearning.com/privacy/#gdpr\",\n marketingHref: \"/privacy#gdpr\",\n },\n {\n label: \"Cookie Settings\",\n appHref: \"#\",\n marketingHref: \"#\",\n action: \"cookie-settings\",\n },\n ],\n },\n] as const;\n\nexport const BUG_REPORT_QUERY = \"reportBug=1\";\nexport const COOKIE_SETTINGS_QUERY = \"cookieSettings=1\";\n\nconst isAbsoluteUrl = (href: string): boolean => /^https?:\\/\\//i.test(href);\n\nconst joinBase = (base: string, path: string): string => {\n if (isAbsoluteUrl(path)) {\n return path;\n }\n const normalizedBase = base.replace(/\\/$/, \"\");\n const normalizedPath = path.startsWith(\"/\") ? path : `/${path}`;\n return `${normalizedBase}${normalizedPath}`;\n};\n\nexport const bugReportHref = (urls: SiteUrls): string =>\n `${joinBase(urls.app, \"/\")}?${BUG_REPORT_QUERY}`;\n\nexport const cookieSettingsHref = (urls: SiteUrls): string =>\n `${joinBase(urls.marketing, \"/\")}?${COOKIE_SETTINGS_QUERY}`;\n\nconst resolveMarketingContentHref = (href: string, urls: SiteUrls): string => {\n if (isAbsoluteUrl(href)) {\n return href;\n }\n if (href.startsWith(\"mailto:\")) {\n return href;\n }\n return href.startsWith(\"/\") ? href : joinBase(urls.marketing, href);\n};\n\nconst resolvePlatformHref = (\n href: string,\n context: SiteDrakkarContext,\n urls: SiteUrls,\n): string => {\n if (context === \"app\") {\n return href;\n }\n return joinBase(urls.app, href);\n};\n\nexport const resolveNavHref = (\n link: SiteNavLink,\n context: SiteDrakkarContext,\n urls: SiteUrls,\n): string => {\n if (link.platform) {\n return resolvePlatformHref(link.appHref, context, urls);\n }\n if (context === \"app\") {\n return link.appHref;\n }\n return resolveMarketingContentHref(link.marketingHref, urls);\n};\n\nexport const resolveFooterHref = (\n link: SiteFooterLink,\n context: SiteDrakkarContext,\n urls: SiteUrls,\n): string => {\n if (link.action === \"bug-report\") {\n return context === \"app\" ? \"#\" : bugReportHref(urls);\n }\n if (link.action === \"cookie-settings\") {\n return cookieSettingsHref(urls);\n }\n if (link.platform) {\n return resolvePlatformHref(link.appHref, context, urls);\n }\n if (context === \"app\") {\n return link.appHref;\n }\n return resolveMarketingContentHref(link.marketingHref, urls);\n};\n\nexport const resolveBrandHref = (\n context: SiteDrakkarContext,\n urls: SiteUrls,\n): string => {\n if (context === \"marketing\") {\n return \"/\";\n }\n return urls.marketing;\n};\n\n/** Navbar links; auth-gated entries appear only when the session is active. */\nexport const visibleNavLinks = (\n links: readonly SiteNavLink[],\n isAuthenticated = false,\n): SiteNavLink[] =>\n links.filter((link) => !link.requireAuth || isAuthenticated);\n\nexport const isAppRouterPath = (href: string): boolean =>\n !isAbsoluteUrl(href) && href.startsWith(\"/\");\n\nexport const DEFAULT_SITE_URLS: SiteUrls = {\n app: \"https://deml.app\",\n marketing: \"https://dataengineeringformachinelearning.com\",\n backend: \"https://backend.deml.app\",\n};\n","import type {\n SiteDrakkarContext,\n SiteFooterLink,\n SiteNavLink,\n SiteUrls,\n} from \"./site-drakkar.config\";\nimport {\n SITE_FOOTER_COLUMNS,\n SITE_NAV_LINKS,\n bugReportHref,\n cookieSettingsHref,\n resolveFooterHref,\n resolveNavHref,\n} from \"./site-drakkar.config\";\n\n/** Curated command-palette entry for cross-surface navigation. */\nexport type SuiteSearchItem = {\n title: string;\n href: string;\n snippet?: string;\n group?: string;\n keywords?: string[];\n action?: \"cookie-settings\" | \"bug-report\";\n};\n\nconst dedupeItems = (items: SuiteSearchItem[]): SuiteSearchItem[] => {\n const seen = new Set<string>();\n return items.filter((item) => {\n const key = `${item.title}:${item.href}:${item.action ?? \"\"}`;\n if (seen.has(key)) {\n return false;\n }\n seen.add(key);\n return true;\n });\n};\n\nconst navItem = (\n link: SiteNavLink,\n context: SiteDrakkarContext,\n urls: SiteUrls,\n): SuiteSearchItem => ({\n title: link.label,\n href: resolveNavHref(link, context, urls),\n snippet: `Open ${link.label}`,\n group: \"Platform\",\n keywords: [link.id, link.label.toLowerCase(), \"navigate\", \"go\"],\n});\n\nconst footerItem = (\n link: SiteFooterLink,\n columnTitle: string,\n context: SiteDrakkarContext,\n urls: SiteUrls,\n): SuiteSearchItem => {\n if (link.action === \"cookie-settings\") {\n return {\n title: link.label,\n href: cookieSettingsHref(urls),\n snippet: \"Manage analytics and cookie preferences\",\n group: columnTitle,\n keywords: [\"cookies\", \"consent\", \"privacy\", \"gdpr\"],\n action: \"cookie-settings\",\n };\n }\n\n if (link.action === \"bug-report\") {\n return {\n title: link.label,\n href: context === \"app\" ? \"#\" : bugReportHref(urls),\n snippet: \"Submit a product issue or regression\",\n group: columnTitle,\n keywords: [\"bug\", \"issue\", \"support\", \"feedback\"],\n action: \"bug-report\",\n };\n }\n\n return {\n title: link.label,\n href: resolveFooterHref(link, context, urls),\n snippet: `Open ${link.label}`,\n group: columnTitle,\n keywords: [link.label.toLowerCase(), columnTitle.toLowerCase()],\n };\n};\n\n/** Static entries that are not derived from Drakkar nav/footer config. */\nconst SUITE_SEARCH_EXTRAS: readonly Omit<SuiteSearchItem, \"href\">[] = [\n {\n title: \"Viking-UI Components\",\n snippet: \"Browse the design system showcase\",\n group: \"Resources\",\n keywords: [\"viking\", \"ui\", \"design system\", \"components\", \"showcase\"],\n },\n {\n title: \"Design tokens\",\n snippet: \"Canonical --viking-* token matrix\",\n group: \"Resources\",\n keywords: [\"tokens\", \"theme\", \"css\", \"variables\"],\n },\n {\n title: \"API reference\",\n snippet: \"OpenAPI schema and REST endpoints\",\n group: \"Resources\",\n keywords: [\"api\", \"openapi\", \"swagger\", \"rest\"],\n },\n];\n\nconst resolveExtraHref = (\n extra: (typeof SUITE_SEARCH_EXTRAS)[number],\n context: SiteDrakkarContext,\n urls: SiteUrls,\n): string => {\n switch (extra.title) {\n case \"Viking-UI Components\":\n return \"https://ui.dataengineeringformachinelearning.com/components\";\n case \"Design tokens\":\n return \"https://ui.dataengineeringformachinelearning.com/tokens\";\n case \"API reference\":\n return `${urls.backend.replace(/\\/$/, \"\")}/api/docs`;\n default:\n return context === \"app\" ? urls.app : urls.marketing;\n }\n};\n\n/** Viking-UI docs site entries (ui.dataengineeringformachinelearning.com). */\nconst DOCS_SEARCH_EXTRAS: readonly SuiteSearchItem[] = [\n {\n title: \"Components\",\n href: \"/components\",\n snippet: \"Browse all documented primitives\",\n group: \"Viking-UI\",\n keywords: [\"components\", \"showcase\", \"registry\"],\n },\n {\n title: \"Playground\",\n href: \"/playground\",\n snippet: \"Live Web Component sandbox\",\n group: \"Viking-UI\",\n keywords: [\"playground\", \"sandbox\", \"demo\"],\n },\n {\n title: \"Architecture\",\n href: \"/architecture\",\n snippet: \"CSS + WC + Angular layers\",\n group: \"Viking-UI\",\n keywords: [\"architecture\", \"layers\", \"web component\"],\n },\n {\n title: \"Design tokens\",\n href: \"/tokens\",\n snippet: \"Canonical --viking-* token matrix\",\n group: \"Viking-UI\",\n keywords: [\"tokens\", \"theme\", \"css\", \"variables\"],\n },\n {\n title: \"Theming\",\n href: \"/theming\",\n snippet: \"Light/dark mode and sync pipeline\",\n group: \"Viking-UI\",\n keywords: [\"theming\", \"dark\", \"light\", \"mode\"],\n },\n {\n title: \"Framework guides\",\n href: \"/frameworks\",\n snippet: \"Angular, Astro, Django setup\",\n group: \"Viking-UI\",\n keywords: [\"frameworks\", \"angular\", \"astro\", \"django\"],\n },\n {\n title: \"Contributing\",\n href: \"/contributing\",\n snippet: \"Extend the Viking-UI kit\",\n group: \"Viking-UI\",\n keywords: [\"contributing\", \"extend\", \"primitives\"],\n },\n];\n\nconst resolveDocsHref = (href: string, docsOrigin: string): string =>\n href.startsWith(\"http\")\n ? href\n : `${docsOrigin.replace(/\\/$/, \"\")}${href.startsWith(\"/\") ? href : `/${href}`}`;\n\n/**\n * Builds curated command-palette links for deml.app, marketing, backend, and docs.\n * Used by the static widget and Angular `viking-suite-search-palette`.\n */\nexport const buildSuiteSearchItems = (\n context: SiteDrakkarContext,\n urls: SiteUrls,\n options?: { docsOrigin?: string },\n): SuiteSearchItem[] => {\n const paletteContext = context === \"docs\" ? \"marketing\" : context;\n\n const items: SuiteSearchItem[] = [\n ...SITE_NAV_LINKS.map((link) => navItem(link, paletteContext, urls)),\n ...SITE_FOOTER_COLUMNS.flatMap((column) =>\n column.links.map((link) =>\n footerItem(link, column.title, paletteContext, urls),\n ),\n ),\n ...SUITE_SEARCH_EXTRAS.map((extra) => ({\n ...extra,\n href: resolveExtraHref(extra, paletteContext, urls),\n })),\n ];\n\n if (context === \"app\") {\n items.push(\n {\n title: \"Settings\",\n href: \"/settings\",\n snippet: \"Workspace domains, billing, and security\",\n group: \"Platform\",\n keywords: [\"settings\", \"sites\", \"workspace\", \"configuration\"],\n },\n {\n title: \"Billing & subscription\",\n href: \"/settings/billing\",\n snippet: \"Manage plan, invoices, and payment methods\",\n group: \"Platform\",\n keywords: [\"billing\", \"stripe\", \"subscription\", \"payment\"],\n },\n {\n title: \"Security settings\",\n href: \"/settings/security\",\n snippet: \"Keys, sessions, and access controls\",\n group: \"Platform\",\n keywords: [\"security\", \"keys\", \"auth\", \"rbac\"],\n },\n );\n }\n\n if (context === \"docs\") {\n const docsOrigin =\n options?.docsOrigin ?? \"https://ui.dataengineeringformachinelearning.com\";\n items.push(\n ...DOCS_SEARCH_EXTRAS.map((extra) => ({\n ...extra,\n href: resolveDocsHref(extra.href, docsOrigin),\n })),\n );\n }\n\n return dedupeItems(items);\n};\n","import {\n DEFAULT_SITE_URLS,\n type SiteDrakkarContext,\n type SiteUrls,\n} from \"../../lib/site-drakkar/site-drakkar.config\";\nimport { buildSuiteSearchItems } from \"../../lib/site-drakkar/suite-search-items\";\nimport { readBoolAttr } from \"../core/base\";\nimport {\n defineCustomElement,\n defineCustomElementAlias,\n HTMLElementBase,\n} from \"../core/dom\";\nimport {\n VikingSearchPaletteWc,\n registerVikingSearchPaletteWc,\n type VikingSearchPaletteItem,\n} from \"../search-palette/viking-search-palette-wc\";\n\nconst VALID_CONTEXTS = new Set<SiteDrakkarContext>([\n \"app\",\n \"marketing\",\n \"backend\",\n \"docs\",\n]);\n\nconst detectContext = (): SiteDrakkarContext => {\n const explicit = document.documentElement.getAttribute(\"data-deml-context\");\n if (explicit && VALID_CONTEXTS.has(explicit as SiteDrakkarContext)) {\n return explicit as SiteDrakkarContext;\n }\n\n const host = window.location.hostname;\n if (host.startsWith(\"ui.\")) {\n return \"docs\";\n }\n if (host.includes(\"deml.app\") && !host.startsWith(\"backend.\")) {\n return \"app\";\n }\n if (host.startsWith(\"backend.\")) {\n return \"backend\";\n }\n return \"marketing\";\n};\n\nconst readUrls = (el: HTMLElement): SiteUrls => {\n const env = (globalThis as { __DEML?: Partial<SiteUrls> }).__DEML ?? {};\n return {\n app: el.getAttribute(\"app-url\") ?? env.app ?? DEFAULT_SITE_URLS.app,\n marketing:\n el.getAttribute(\"marketing-url\") ??\n env.marketing ??\n DEFAULT_SITE_URLS.marketing,\n backend:\n el.getAttribute(\"backend-url\") ??\n env.backend ??\n DEFAULT_SITE_URLS.backend,\n };\n};\n\nconst readContext = (el: HTMLElement): SiteDrakkarContext => {\n const raw = el.getAttribute(\"context\");\n if (raw && VALID_CONTEXTS.has(raw as SiteDrakkarContext)) {\n return raw as SiteDrakkarContext;\n }\n return detectContext();\n};\n\n/**\n * Unified cross-suite command palette Web Component.\n * Tag: `viking-suite-command-palette`\n * Aliases: `viking-suite-search-palette`, `viking-suite-search-palette-wc`\n *\n * Curated ⌘K navigation for marketing, docs, deml.app, and backend surfaces.\n * Composes `viking-command-palette` with suite links from site-drakkar config.\n *\n * @attr context - Surface: app | marketing | backend | docs (auto-detected when omitted)\n * @attr app-url - Override deml.app origin\n * @attr marketing-url - Override marketing origin\n * @attr backend-url - Override backend origin\n * @attr global-shortcut - Bind ⌘K / Ctrl+K (default: on)\n * @attr placeholder - Search input placeholder\n *\n * @method openPalette() - Programmatically open\n * @method closePalette() - Programmatically close\n *\n * @example\n * <viking-suite-command-palette context=\"marketing\" global-shortcut></viking-suite-command-palette>\n */\nexport class VikingSuiteSearchPaletteWc extends HTMLElementBase {\n static readonly tag = \"viking-suite-command-palette\";\n static readonly searchTag = \"viking-suite-search-palette\";\n static readonly legacyTag = \"viking-suite-search-palette-wc\";\n\n static get observedAttributes(): string[] {\n return [\n \"context\",\n \"app-url\",\n \"marketing-url\",\n \"backend-url\",\n \"placeholder\",\n \"global-shortcut\",\n ];\n }\n\n private paletteEl: VikingSearchPaletteWc | null = null;\n private itemsLoaded = false;\n\n connectedCallback(): void {\n registerVikingSearchPaletteWc();\n this.ensurePalette();\n void this.loadItems();\n }\n\n attributeChangedCallback(name: string): void {\n if (!this.isConnected) {\n return;\n }\n if (name === \"placeholder\" && this.paletteEl) {\n const placeholder =\n this.getAttribute(\"placeholder\") ??\n \"Search documentation, dashboard, settings…\";\n this.paletteEl.setAttribute(\"placeholder\", placeholder);\n return;\n }\n if (name === \"global-shortcut\" && this.paletteEl) {\n if (\n readBoolAttr(this, \"global-shortcut\") ||\n !this.hasAttribute(\"global-shortcut\")\n ) {\n this.paletteEl.setAttribute(\"global-shortcut\", \"\");\n } else {\n this.paletteEl.removeAttribute(\"global-shortcut\");\n }\n return;\n }\n if (\n name === \"context\" ||\n name === \"app-url\" ||\n name === \"marketing-url\" ||\n name === \"backend-url\"\n ) {\n void this.loadItems(true);\n }\n }\n\n /** Opens the unified command palette. */\n openPalette(): void {\n this.ensurePalette();\n void this.loadItems().then(() => this.paletteEl?.openPalette());\n }\n\n /** Closes the unified command palette. */\n closePalette(): void {\n this.paletteEl?.closePalette();\n }\n\n private ensurePalette(): void {\n if (this.paletteEl) {\n return;\n }\n\n this.paletteEl = document.createElement(\n \"viking-command-palette\",\n ) as VikingSearchPaletteWc;\n this.paletteEl.id = \"deml-command-palette\";\n\n const placeholder =\n this.getAttribute(\"placeholder\") ??\n \"Search documentation, dashboard, settings…\";\n this.paletteEl.setAttribute(\"placeholder\", placeholder);\n\n if (\n readBoolAttr(this, \"global-shortcut\") ||\n !this.hasAttribute(\"global-shortcut\")\n ) {\n this.paletteEl.setAttribute(\"global-shortcut\", \"\");\n }\n\n this.append(this.paletteEl);\n }\n\n private async loadItems(force = false): Promise<void> {\n if (!this.paletteEl || (this.itemsLoaded && !force)) {\n return;\n }\n\n const context = readContext(this);\n const urls = readUrls(this);\n let items: VikingSearchPaletteItem[] = buildSuiteSearchItems(\n context,\n urls,\n {\n docsOrigin: window.location.origin,\n },\n );\n\n try {\n const response = await fetch(\"/assets/site-drakkar.json\", {\n cache: \"no-cache\",\n });\n if (response.ok) {\n const drakkar = (await response.json()) as {\n navLinks?: unknown[];\n footerColumns?: unknown[];\n };\n if (drakkar.navLinks?.length || drakkar.footerColumns?.length) {\n items = buildSuiteSearchItems(context, urls, {\n docsOrigin: window.location.origin,\n });\n }\n }\n } catch {\n // Bundled config is authoritative when JSON is unavailable.\n }\n\n this.paletteEl.setAttribute(\"items\", JSON.stringify(items));\n this.itemsLoaded = true;\n }\n}\n\nexport const registerVikingSuiteSearchPaletteWc = (): void => {\n defineCustomElement(\n VikingSuiteSearchPaletteWc.tag,\n VikingSuiteSearchPaletteWc,\n );\n defineCustomElementAlias(\n VikingSuiteSearchPaletteWc.searchTag,\n VikingSuiteSearchPaletteWc,\n );\n defineCustomElementAlias(\n VikingSuiteSearchPaletteWc.legacyTag,\n VikingSuiteSearchPaletteWc,\n );\n};\n","import { attachShadowStyles } from \"../core/base\";\nimport { defineCustomElement, HTMLElementBase } from \"../core/dom\";\n\nconst VIKING_THEME_TOGGLE_STYLES = `\n:host {\n display: inline-flex;\n}\n\n.theme-toggle-btn {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n width: var(--viking-control-height, 40px);\n height: var(--viking-control-height, 40px);\n min-width: var(--viking-control-height, 40px);\n padding: 0;\n border: 1px solid color-mix(in srgb, var(--viking-accent, var(--viking-accent)) 32%, var(--viking-border-strong, var(--viking-border)));\n border-radius: var(--viking-radius);\n background: color-mix(in srgb, var(--viking-accent, var(--viking-accent)) 8%, var(--viking-surface));\n color: var(--viking-accent-strong, var(--viking-ring));\n box-shadow: var(--viking-shadow-sm);\n cursor: pointer;\n transition: var(--viking-transition-interactive);\n -webkit-tap-highlight-color: transparent;\n}\n\n.theme-toggle-btn:hover {\n border-color: var(--viking-accent-strong, var(--viking-ring));\n background: color-mix(in srgb, var(--viking-accent, var(--viking-accent)) 14%, var(--viking-surface-alt));\n color: var(--viking-accent-strong, var(--viking-ring));\n box-shadow: var(--viking-shadow-md);\n}\n\n.theme-toggle-btn:focus-visible {\n outline: var(--viking-ring-width, 2px) solid var(--viking-ring);\n outline-offset: var(--viking-ring-offset, 2px);\n}\n\n.theme-toggle-btn:active {\n transform: scale(var(--viking-state-active-scale, 0.98));\n}\n\n.theme-icon {\n display: none;\n}\n\n.theme-icon.is-visible {\n display: block;\n}\n`;\n\nconst applyTheme = (theme: \"light\" | \"dark\"): void => {\n document.documentElement.setAttribute(\"data-theme\", theme);\n document.documentElement.classList.toggle(\"dark\", theme === \"dark\");\n localStorage.setItem(\"theme\", theme);\n};\n\nconst readTheme = (): \"light\" | \"dark\" => {\n const saved = localStorage.getItem(\"theme\");\n if (saved === \"light\" || saved === \"dark\") return saved;\n return window.matchMedia(\"(prefers-color-scheme: dark)\").matches\n ? \"dark\"\n : \"light\";\n};\n\n/**\n * Framework-agnostic theme toggle Web Component.\n * Tag: `viking-theme-toggle-wc`\n */\nexport class VikingThemeToggleWc extends HTMLElementBase {\n static readonly tag = \"viking-theme-toggle-wc\";\n\n private readonly shadow: ShadowRoot;\n private button: HTMLButtonElement | null = null;\n private sunIcon: SVGElement | null = null;\n private moonIcon: SVGElement | null = null;\n\n constructor() {\n super();\n this.shadow = this.attachShadow({ mode: \"open\" });\n attachShadowStyles(this.shadow, VIKING_THEME_TOGGLE_STYLES);\n }\n\n connectedCallback(): void {\n if (!this.hasAttribute(\"role\")) {\n this.setAttribute(\"role\", \"button\");\n }\n this.render();\n this.syncIcons();\n this.button?.addEventListener(\"click\", this.onClick);\n }\n\n disconnectedCallback(): void {\n this.button?.removeEventListener(\"click\", this.onClick);\n }\n\n private readonly onClick = (): void => {\n const next = readTheme() === \"light\" ? \"dark\" : \"light\";\n applyTheme(next);\n this.syncIcons();\n this.dispatchEvent(\n new CustomEvent(\"viking-theme-change\", {\n bubbles: true,\n composed: true,\n detail: { theme: next },\n }),\n );\n };\n\n private syncIcons = (): void => {\n const isLight = readTheme() === \"light\";\n this.sunIcon?.classList.toggle(\"is-visible\", isLight);\n this.moonIcon?.classList.toggle(\"is-visible\", !isLight);\n };\n\n private render(): void {\n const label =\n this.getAttribute(\"aria-label\") ?? \"Toggle light and dark theme\";\n this.shadow.innerHTML = `\n <button type=\"button\" class=\"theme-toggle-btn\" part=\"control\" aria-label=\"${label}\">\n <svg class=\"theme-icon theme-icon-sun\" width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" aria-hidden=\"true\">\n <circle cx=\"12\" cy=\"12\" r=\"4\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"/>\n <path stroke=\"currentColor\" stroke-width=\"2\" d=\"M12 2v2M12 20v2M4.93 4.93l1.41 1.41M17.66 17.66l1.41 1.41M2 12h2M20 12h2M4.93 19.07l1.41-1.41M17.66 6.34l1.41-1.41\"/>\n </svg>\n <svg class=\"theme-icon theme-icon-moon\" width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" aria-hidden=\"true\">\n <path fill=\"currentColor\" d=\"M21 12.79A9 9 0 1111.21 3 7 7 0 0021 12.79z\"/>\n </svg>\n </button>\n `;\n this.button = this.shadow.querySelector(\"button\");\n this.sunIcon = this.shadow.querySelector(\".theme-icon-sun\");\n this.moonIcon = this.shadow.querySelector(\".theme-icon-moon\");\n }\n}\n\nexport const registerVikingThemeToggleWc = (): void => {\n defineCustomElement(VikingThemeToggleWc.tag, VikingThemeToggleWc);\n};\n","import {\n DEFAULT_SITE_URLS,\n type SiteDrakkarContext,\n type SiteUrls,\n resolveBrandHref,\n resolveNavHref,\n SITE_NAV_LINKS,\n visibleNavLinks,\n} from \"../../lib/site-drakkar/site-drakkar.config\";\nimport { attachShadowStyles, readBoolAttr } from \"../core/base\";\nimport {\n defineCustomElement,\n escapeHtml,\n HTMLElementBase,\n modKeyLabel,\n} from \"../core/dom\";\nimport { renderInlineIcon } from \"../core/icons-inline\";\nimport {\n registerVikingSuiteSearchPaletteWc,\n type VikingSuiteSearchPaletteWc,\n} from \"../suite-search-palette/viking-suite-search-palette-wc\";\nimport { registerVikingThemeToggleWc } from \"../theme-toggle/viking-theme-toggle-wc\";\n\nconst VALID_CONTEXTS = new Set<SiteDrakkarContext>([\n \"app\",\n \"marketing\",\n \"backend\",\n \"docs\",\n]);\n\nconst VIKING_SUITE_HEADER_STYLES = `\n:host {\n display: block;\n position: sticky;\n top: 0;\n z-index: var(--viking-z-sticky, 50);\n color: var(--viking-text);\n font-family: var(--viking-font-family);\n}\n\n* {\n box-sizing: border-box;\n}\n\n.suite-header {\n width: 100%;\n min-height: var(--viking-navbar-height, var(--viking-space-8));\n background: var(--viking-surface);\n border-bottom: var(--viking-border-width, 1px) solid var(--viking-border);\n box-shadow: var(--viking-shadow-xs);\n isolation: isolate;\n}\n\n.suite-header__bar {\n display: grid;\n grid-template-columns: minmax(max-content, auto) minmax(0, 1fr) max-content;\n align-items: center;\n gap: var(--viking-space-1);\n width: 100%;\n max-width: var(--viking-container-max-width);\n min-height: var(--viking-navbar-height, var(--viking-space-8));\n margin-inline: auto;\n padding-inline: var(--viking-page-gutter);\n}\n\n.suite-header__brand {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n gap: var(--viking-space-1);\n min-width: 0;\n min-height: var(--viking-control-height);\n color: var(--viking-text);\n text-decoration: none;\n border-radius: var(--viking-radius);\n}\n\n.suite-header__brand:focus-visible,\n.suite-header__link:focus-visible,\n.suite-header__icon-button:focus-visible,\n.suite-header__auth-link:focus-visible,\n.suite-header__user-trigger:focus-visible,\n.suite-header__menu-link:focus-visible,\n.suite-header__menu-button:focus-visible {\n outline: var(--viking-ring-width) solid var(--viking-ring);\n outline-offset: var(--viking-ring-offset);\n}\n\n.suite-header__mark {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: var(--viking-space-4);\n height: var(--viking-space-4);\n color: var(--viking-accent);\n flex: 0 0 auto;\n}\n\n.suite-header__lockup {\n display: none;\n min-width: 0;\n color: var(--viking-text);\n font-size: var(--viking-font-size-sm);\n font-weight: var(--viking-font-weight-bold);\n line-height: var(--viking-line-height-tight);\n letter-spacing: var(--viking-letter-spacing-caps);\n text-transform: uppercase;\n white-space: nowrap;\n}\n\n.suite-header__nav {\n display: none;\n align-items: center;\n justify-content: center;\n gap: var(--viking-space-half);\n min-width: 0;\n overflow: hidden;\n}\n\n.suite-header__link {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n gap: var(--viking-space-half);\n min-width: 0;\n height: var(--viking-control-height);\n padding-inline: var(--viking-space-1-5);\n color: var(--viking-text-muted);\n border-radius: var(--viking-radius) var(--viking-radius) 0 0;\n font-size: var(--viking-font-size-sm);\n font-weight: var(--viking-font-weight-semibold);\n line-height: var(--viking-line-height-none);\n letter-spacing: var(--viking-letter-spacing-caps);\n text-decoration: none;\n text-transform: uppercase;\n white-space: nowrap;\n transition: var(--viking-transition-interactive);\n}\n\n.suite-header__link:hover,\n.suite-header__link[aria-current='page'] {\n color: var(--viking-text);\n background: var(--viking-surface-alt);\n}\n\n.suite-header__actions {\n display: inline-flex;\n align-items: center;\n justify-content: flex-end;\n gap: var(--viking-space-1);\n min-width: 0;\n}\n\n.suite-header__icon-button,\n.suite-header__menu-button,\n.suite-header__user-trigger,\n.suite-header__auth-link {\n min-height: var(--viking-control-height);\n border: var(--viking-border-width, 1px) solid var(--viking-border-strong);\n border-radius: var(--viking-radius);\n background: var(--viking-surface);\n color: var(--viking-text);\n box-shadow: var(--viking-shadow-sm);\n cursor: pointer;\n font-family: inherit;\n transition: var(--viking-transition-interactive);\n -webkit-tap-highlight-color: transparent;\n}\n\n.suite-header__icon-button,\n.suite-header__menu-button {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: var(--viking-control-height);\n min-width: var(--viking-control-height);\n padding: 0;\n}\n\n.suite-header__icon-button:hover,\n.suite-header__menu-button:hover,\n.suite-header__user-trigger:hover,\n.suite-header__auth-link:hover {\n border-color: var(--viking-accent-strong);\n background: var(--viking-surface-alt);\n box-shadow: var(--viking-shadow-md);\n}\n\n.suite-header__auth-link {\n display: none;\n align-items: center;\n justify-content: center;\n gap: var(--viking-space-half);\n min-width: max-content;\n padding-inline: var(--viking-space-2);\n background: var(--viking-accent);\n border-color: var(--viking-accent);\n color: var(--viking-accent-content);\n font-size: var(--viking-font-size-sm);\n font-weight: var(--viking-font-weight-bold);\n line-height: var(--viking-line-height-none);\n letter-spacing: var(--viking-letter-spacing-caps);\n text-decoration: none;\n text-transform: uppercase;\n}\n\n.suite-header__auth-link:hover {\n background: var(--viking-accent-hover);\n color: var(--viking-accent-content);\n}\n\n.suite-header__user {\n position: relative;\n display: none;\n}\n\n.suite-header__user-trigger {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n gap: var(--viking-space-1);\n min-width: max-content;\n padding-inline: var(--viking-space-1);\n}\n\n.suite-header__avatar {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: var(--viking-space-3);\n height: var(--viking-space-3);\n border-radius: var(--viking-radius-full);\n background: var(--viking-accent-soft);\n color: var(--viking-accent-strong);\n}\n\n.suite-header__user-text {\n display: none;\n max-width: var(--viking-space-16);\n overflow: hidden;\n color: var(--viking-text);\n font-size: var(--viking-font-size-sm);\n font-weight: var(--viking-font-weight-semibold);\n line-height: var(--viking-line-height-tight);\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n.suite-header__menu {\n position: absolute;\n inset-block-start: calc(100% + var(--viking-space-1));\n inset-inline-end: 0;\n display: none;\n min-width: var(--viking-space-24);\n padding: var(--viking-space-1);\n background: var(--viking-surface);\n border: var(--viking-border-width, 1px) solid var(--viking-border-strong);\n border-radius: var(--viking-radius);\n box-shadow: var(--viking-shadow-lg);\n}\n\n.suite-header__user[data-open='true'] .suite-header__menu {\n display: grid;\n gap: var(--viking-space-half);\n}\n\n.suite-header__menu-label {\n padding: var(--viking-space-1);\n color: var(--viking-text-muted);\n font-size: var(--viking-font-size-xs);\n line-height: var(--viking-line-height-tight);\n}\n\n.suite-header__menu-label strong {\n display: block;\n color: var(--viking-text);\n font-size: var(--viking-font-size-sm);\n}\n\n.suite-header__menu-link,\n.suite-header__menu-button {\n display: inline-flex;\n align-items: center;\n justify-content: flex-start;\n gap: var(--viking-space-1);\n width: 100%;\n min-height: var(--viking-control-height);\n padding-inline: var(--viking-space-1);\n background: transparent;\n border: 0;\n border-radius: var(--viking-radius-sm);\n box-shadow: none;\n color: var(--viking-text);\n font: inherit;\n text-align: start;\n text-decoration: none;\n}\n\n.suite-header__menu-link:hover,\n.suite-header__menu-button:hover {\n background: var(--viking-surface-alt);\n}\n\n.suite-header__mobile {\n display: none;\n width: 100%;\n max-width: var(--viking-container-max-width);\n margin-inline: auto;\n padding: 0 var(--viking-page-gutter) var(--viking-space-2);\n}\n\n.suite-header[data-menu-open='true'] .suite-header__mobile {\n display: grid;\n gap: var(--viking-space-1);\n}\n\n.suite-header__mobile .suite-header__link,\n.suite-header__mobile .suite-header__auth-link,\n.suite-header__mobile .suite-header__menu-button {\n display: inline-flex;\n justify-content: flex-start;\n width: 100%;\n border-radius: var(--viking-radius);\n}\n\n.suite-header__mobile .suite-header__auth-link {\n justify-content: center;\n margin-block-start: var(--viking-space-1);\n}\n\nviking-suite-command-palette {\n display: contents;\n}\n\n@media (min-width: 520px) {\n .suite-header__lockup,\n .suite-header__user-text {\n display: inline;\n }\n}\n\n@media (min-width: 768px) {\n .suite-header__bar {\n padding-inline: var(--viking-page-gutter-lg);\n }\n\n .suite-header__nav {\n display: flex;\n }\n\n .suite-header__auth-link,\n .suite-header__user {\n display: inline-flex;\n }\n\n .suite-header__menu-button {\n display: none;\n }\n}\n`;\n\nconst detectContext = (): SiteDrakkarContext => {\n const explicit = document.documentElement.getAttribute(\"data-deml-context\");\n if (explicit && VALID_CONTEXTS.has(explicit as SiteDrakkarContext)) {\n return explicit as SiteDrakkarContext;\n }\n\n const host = window.location.hostname;\n if (host.startsWith(\"ui.\")) {\n return \"docs\";\n }\n if (host.startsWith(\"backend.\")) {\n return \"backend\";\n }\n if (host.includes(\"deml.app\")) {\n return \"app\";\n }\n return \"marketing\";\n};\n\nconst readContext = (el: HTMLElement): SiteDrakkarContext => {\n const raw = el.getAttribute(\"context\");\n if (raw && VALID_CONTEXTS.has(raw as SiteDrakkarContext)) {\n return raw as SiteDrakkarContext;\n }\n return detectContext();\n};\n\nconst readUrls = (el: HTMLElement): SiteUrls => {\n const env = (globalThis as { __DEML?: Partial<SiteUrls> }).__DEML ?? {};\n return {\n app: el.getAttribute(\"app-url\") ?? env.app ?? DEFAULT_SITE_URLS.app,\n marketing:\n el.getAttribute(\"marketing-url\") ??\n env.marketing ??\n DEFAULT_SITE_URLS.marketing,\n backend:\n el.getAttribute(\"backend-url\") ??\n env.backend ??\n DEFAULT_SITE_URLS.backend,\n };\n};\n\nconst isCurrentHref = (href: string): boolean => {\n try {\n const url = new URL(href, window.location.origin);\n return (\n url.origin === window.location.origin &&\n url.pathname === window.location.pathname\n );\n } catch {\n return false;\n }\n};\n\n/**\n * Unified framework-agnostic DEML suite header.\n * Tag: `viking-suite-header`\n *\n * @attr context - Surface: app | marketing | backend | docs (auto-detected when omitted)\n * @attr authenticated - Render the user menu instead of Sign In\n * @attr user-name - Display name for the authenticated user menu\n * @attr user-email - Secondary user menu label\n * @attr sign-in-href - Fallback href for static Sign In navigation\n */\nexport class VikingSuiteHeaderWc extends HTMLElementBase {\n static readonly tag = \"viking-suite-header\";\n\n static get observedAttributes(): string[] {\n return [\n \"context\",\n \"app-url\",\n \"marketing-url\",\n \"backend-url\",\n \"authenticated\",\n \"user-name\",\n \"user-email\",\n \"sign-in-href\",\n \"dashboard-href\",\n ];\n }\n\n private readonly shadow: ShadowRoot;\n private menuOpen = false;\n private userMenuOpen = false;\n private paletteEl: VikingSuiteSearchPaletteWc | null = null;\n\n constructor() {\n super();\n this.shadow = this.attachShadow({ mode: \"open\" });\n attachShadowStyles(this.shadow, VIKING_SUITE_HEADER_STYLES);\n }\n\n connectedCallback(): void {\n registerVikingThemeToggleWc();\n registerVikingSuiteSearchPaletteWc();\n this.render();\n document.addEventListener(\"click\", this.onDocumentClick);\n }\n\n disconnectedCallback(): void {\n document.removeEventListener(\"click\", this.onDocumentClick);\n }\n\n attributeChangedCallback(): void {\n if (this.isConnected) {\n this.render();\n }\n }\n\n openSearch(): void {\n this.paletteEl?.openPalette();\n this.dispatchEvent(\n new CustomEvent(\"viking-search-open\", { bubbles: true, composed: true }),\n );\n }\n\n private readonly onDocumentClick = (event: MouseEvent): void => {\n if (event.composedPath().includes(this)) {\n return;\n }\n if (this.menuOpen || this.userMenuOpen) {\n this.menuOpen = false;\n this.userMenuOpen = false;\n this.syncOpenState();\n }\n };\n\n private readonly onSearchClick = (): void => {\n this.openSearch();\n };\n\n private readonly onMenuClick = (): void => {\n this.menuOpen = !this.menuOpen;\n this.syncOpenState();\n };\n\n private readonly onUserClick = (): void => {\n this.userMenuOpen = !this.userMenuOpen;\n this.syncOpenState();\n };\n\n private readonly onSignInClick = (event: Event): void => {\n const signInEvent = new CustomEvent(\"viking-sign-in\", {\n bubbles: true,\n cancelable: true,\n composed: true,\n detail: event,\n });\n this.dispatchEvent(signInEvent);\n if (signInEvent.defaultPrevented) {\n event.preventDefault();\n }\n };\n\n private readonly onSignOutClick = (): void => {\n this.userMenuOpen = false;\n this.menuOpen = false;\n this.syncOpenState();\n this.dispatchEvent(\n new CustomEvent(\"viking-sign-out\", { bubbles: true, composed: true }),\n );\n };\n\n private syncOpenState(): void {\n const header = this.shadow.querySelector<HTMLElement>(\".suite-header\");\n const menuButton =\n this.shadow.querySelector<HTMLButtonElement>(\"[data-menu-toggle]\");\n const user = this.shadow.querySelector<HTMLElement>(\".suite-header__user\");\n const userButton =\n this.shadow.querySelector<HTMLButtonElement>(\"[data-user-toggle]\");\n header?.setAttribute(\"data-menu-open\", String(this.menuOpen));\n menuButton?.setAttribute(\"aria-expanded\", String(this.menuOpen));\n user?.setAttribute(\"data-open\", String(this.userMenuOpen));\n userButton?.setAttribute(\"aria-expanded\", String(this.userMenuOpen));\n }\n\n private renderNavLinks(\n context: SiteDrakkarContext,\n urls: SiteUrls,\n authenticated: boolean,\n ): string {\n return visibleNavLinks(SITE_NAV_LINKS, authenticated)\n .map((link) => {\n const href = resolveNavHref(link, context, urls);\n const current = isCurrentHref(href) ? ' aria-current=\"page\"' : \"\";\n return `\n <a class=\"suite-header__link\" href=\"${escapeHtml(href)}\"${current}>\n ${renderInlineIcon(link.icon, 16, \"suite-header__link-icon\")}\n <span>${escapeHtml(link.label)}</span>\n </a>\n `;\n })\n .join(\"\");\n }\n\n private renderAuth(\n urls: SiteUrls,\n authenticated: boolean,\n mobile = false,\n ): string {\n if (!authenticated) {\n const signInHref =\n this.getAttribute(\"sign-in-href\") ?? `${urls.app}/login`;\n return `\n <a class=\"suite-header__auth-link\" href=\"${escapeHtml(signInHref)}\" data-sign-in>\n <span>Sign In</span>\n ${renderInlineIcon(\"arrow-right\", 16, \"suite-header__auth-icon\")}\n </a>\n `;\n }\n\n if (mobile) {\n return `\n <a class=\"suite-header__menu-link\" href=\"${escapeHtml(this.getDashboardHref(urls))}\">\n ${renderInlineIcon(\"home\", 16, \"suite-header__menu-icon\")}\n <span>Dashboard</span>\n </a>\n <button class=\"suite-header__menu-button\" type=\"button\" data-sign-out>\n ${renderInlineIcon(\"log-out\", 16, \"suite-header__menu-icon\")}\n <span>Sign Out</span>\n </button>\n `;\n }\n\n const userName = this.getAttribute(\"user-name\") ?? \"Account\";\n const userEmail = this.getAttribute(\"user-email\") ?? \"\";\n return `\n <div class=\"suite-header__user\" data-open=\"${String(this.userMenuOpen)}\">\n <button\n class=\"suite-header__user-trigger\"\n type=\"button\"\n aria-haspopup=\"menu\"\n aria-expanded=\"${String(this.userMenuOpen)}\"\n data-user-toggle\n >\n <span class=\"suite-header__avatar\" aria-hidden=\"true\">\n ${renderInlineIcon(\"user\", 16, \"suite-header__avatar-icon\")}\n </span>\n <span class=\"suite-header__user-text\">${escapeHtml(userName)}</span>\n ${renderInlineIcon(\"chevron-down\", 16, \"suite-header__chevron\")}\n </button>\n <div class=\"suite-header__menu\" role=\"menu\">\n <div class=\"suite-header__menu-label\">\n <strong>${escapeHtml(userName)}</strong>\n ${userEmail ? `<span>${escapeHtml(userEmail)}</span>` : \"\"}\n </div>\n <a class=\"suite-header__menu-link\" role=\"menuitem\" href=\"${escapeHtml(\n this.getDashboardHref(urls),\n )}\">\n ${renderInlineIcon(\"home\", 16, \"suite-header__menu-icon\")}\n <span>Dashboard</span>\n </a>\n <button class=\"suite-header__menu-button\" type=\"button\" role=\"menuitem\" data-sign-out>\n ${renderInlineIcon(\"log-out\", 16, \"suite-header__menu-icon\")}\n <span>Sign Out</span>\n </button>\n </div>\n </div>\n `;\n }\n\n private getDashboardHref(urls: SiteUrls): string {\n return this.getAttribute(\"dashboard-href\") ?? `${urls.app}/dashboard`;\n }\n\n private render(): void {\n const context = readContext(this);\n const urls = readUrls(this);\n const authenticated = readBoolAttr(this, \"authenticated\");\n const navLinks = this.renderNavLinks(context, urls, authenticated);\n const brandHref = resolveBrandHref(context, urls);\n const shortcut = `${modKeyLabel()}K`;\n\n this.shadow.innerHTML = `\n <header class=\"suite-header\" data-menu-open=\"${String(this.menuOpen)}\">\n <div class=\"suite-header__bar\">\n <a class=\"suite-header__brand\" href=\"${escapeHtml(\n brandHref,\n )}\" aria-label=\"Data Engineering for Machine Learning home\">\n <span class=\"suite-header__mark\" aria-hidden=\"true\">\n ${renderInlineIcon(\"drakkar\", 28, \"suite-header__brand-icon\")}\n </span>\n <span class=\"suite-header__lockup\">DEML</span>\n </a>\n\n <nav class=\"suite-header__nav\" aria-label=\"Main navigation\">\n ${navLinks}\n </nav>\n\n <div class=\"suite-header__actions\">\n <button\n class=\"suite-header__icon-button\"\n type=\"button\"\n aria-label=\"Open command palette (${shortcut})\"\n title=\"Open command palette (${shortcut})\"\n data-search-trigger\n >\n ${renderInlineIcon(\"search\", 18, \"suite-header__action-icon\")}\n </button>\n ${this.renderAuth(urls, authenticated)}\n <viking-theme-toggle-wc></viking-theme-toggle-wc>\n <button\n class=\"suite-header__menu-button\"\n type=\"button\"\n aria-label=\"Toggle navigation menu\"\n aria-expanded=\"${String(this.menuOpen)}\"\n data-menu-toggle\n >\n ${renderInlineIcon(this.menuOpen ? \"x\" : \"menu\", 18, \"suite-header__action-icon\")}\n </button>\n </div>\n </div>\n\n <nav class=\"suite-header__mobile\" aria-label=\"Mobile navigation\">\n ${navLinks}\n ${this.renderAuth(urls, authenticated, true)}\n </nav>\n </header>\n <viking-suite-command-palette\n context=\"${context}\"\n app-url=\"${escapeHtml(urls.app)}\"\n marketing-url=\"${escapeHtml(urls.marketing)}\"\n backend-url=\"${escapeHtml(urls.backend)}\"\n global-shortcut\n ></viking-suite-command-palette>\n `;\n\n this.paletteEl = this.shadow.querySelector(\"viking-suite-command-palette\");\n this.shadow\n .querySelector(\"[data-search-trigger]\")\n ?.addEventListener(\"click\", this.onSearchClick);\n this.shadow\n .querySelector(\"[data-menu-toggle]\")\n ?.addEventListener(\"click\", this.onMenuClick);\n this.shadow\n .querySelector(\"[data-user-toggle]\")\n ?.addEventListener(\"click\", this.onUserClick);\n this.shadow\n .querySelectorAll(\"[data-sign-in]\")\n .forEach((control) =>\n control.addEventListener(\"click\", this.onSignInClick),\n );\n this.shadow\n .querySelectorAll(\"[data-sign-out]\")\n .forEach((control) =>\n control.addEventListener(\"click\", this.onSignOutClick),\n );\n }\n}\n\nexport const registerVikingSuiteHeaderWc = (): void => {\n defineCustomElement(VikingSuiteHeaderWc.tag, VikingSuiteHeaderWc);\n};\n","import {\n attachElementInternals,\n attachShadowStyles,\n setFormValue,\n} from \"../core/base\";\nimport {\n defineCustomElement,\n defineCustomElementAlias,\n escapeHtml,\n HTMLElementBase,\n vikingWcUid,\n} from \"../core/dom\";\nimport { VIKING_SELECT_STYLES } from \"../core/styles\";\n\n/**\n * Framework-agnostic native select Web Component with form association.\n * Tag: `viking-select` (legacy alias: `viking-select-wc`)\n *\n * Place `<option>` elements as light DOM children; they are mirrored into the shadow select.\n *\n * @attr label - Visible field label\n * @attr name - Form field name (participates in form submission via ElementInternals)\n * @attr value - Selected option value\n * @attr placeholder - Placeholder option text when no value is selected\n * @attr description - Helper text below the control\n * @attr error - Validation message; sets aria-invalid\n * @attr width - full | half (default: half)\n * @attr disabled - Disables the control\n * @attr required - Marks field as required\n *\n * @event viking-change - `{ detail: { value: string } }`\n *\n * @example\n * <viking-select-wc label=\"Retention\" name=\"retention\" value=\"30d\">\n * <option value=\"7d\">7 days</option>\n * <option value=\"30d\">30 days</option>\n * </viking-select-wc>\n */\nexport class VikingSelectWc extends HTMLElementBase {\n static readonly formAssociated = true;\n static readonly tag = \"viking-select\";\n static readonly legacyTag = \"viking-select-wc\";\n\n static get observedAttributes(): string[] {\n return [\n \"label\",\n \"name\",\n \"value\",\n \"placeholder\",\n \"description\",\n \"error\",\n \"width\",\n \"disabled\",\n \"required\",\n ];\n }\n\n private readonly shadow: ShadowRoot;\n private readonly internals: ElementInternals | null;\n private selectEl: HTMLSelectElement | null = null;\n private optionObserver: MutationObserver | null = null;\n private readonly controlId = vikingWcUid(\"viking-select\");\n\n constructor() {\n super();\n this.shadow = this.attachShadow({ mode: \"open\" });\n this.internals = attachElementInternals(this);\n attachShadowStyles(this.shadow, VIKING_SELECT_STYLES);\n }\n\n connectedCallback(): void {\n this.render();\n this.syncOptions();\n this.observeOptions();\n this.selectEl?.addEventListener(\"change\", this.onChange);\n }\n\n disconnectedCallback(): void {\n this.selectEl?.removeEventListener(\"change\", this.onChange);\n this.optionObserver?.disconnect();\n this.optionObserver = null;\n }\n\n attributeChangedCallback(name: string): void {\n if (!this.isConnected) {\n return;\n }\n if (name === \"value\" && this.selectEl) {\n this.selectEl.value = this.getAttribute(\"value\") ?? \"\";\n this.syncFormValue();\n return;\n }\n if (name === \"error\" || name === \"description\" || name === \"label\") {\n this.render();\n this.syncOptions();\n return;\n }\n this.render();\n this.syncOptions();\n }\n\n get value(): string {\n return this.selectEl?.value ?? this.getAttribute(\"value\") ?? \"\";\n }\n\n set value(next: string) {\n this.setAttribute(\"value\", next);\n if (this.selectEl) {\n this.selectEl.value = next;\n }\n this.syncFormValue();\n }\n\n private readonly onChange = (): void => {\n const value = this.selectEl?.value ?? \"\";\n this.setAttribute(\"value\", value);\n this.syncFormValue();\n this.dispatchEvent(\n new CustomEvent(\"viking-change\", {\n bubbles: true,\n composed: true,\n detail: { value },\n }),\n );\n };\n\n private syncFormValue(): void {\n setFormValue(this.internals, this.value);\n }\n\n private observeOptions(): void {\n this.optionObserver?.disconnect();\n this.optionObserver = new MutationObserver(() => this.syncOptions());\n this.optionObserver.observe(this, {\n childList: true,\n subtree: true,\n characterData: true,\n });\n }\n\n private render(): void {\n const label = this.getAttribute(\"label\") ?? \"\";\n const name = this.getAttribute(\"name\") ?? \"\";\n const disabled = this.hasAttribute(\"disabled\");\n const required = this.hasAttribute(\"required\");\n const error = this.getAttribute(\"error\") ?? \"\";\n const description = this.getAttribute(\"description\") ?? \"\";\n const describedBy = [\n description && `${this.controlId}-desc`,\n error && `${this.controlId}-error`,\n ]\n .filter(Boolean)\n .join(\" \");\n\n this.shadow.innerHTML = `\n <div class=\"viking-field\" part=\"field\">\n ${label ? `<label class=\"viking-field-label\" part=\"label\" for=\"${this.controlId}\">${escapeHtml(label)}</label>` : \"\"}\n <select\n id=\"${this.controlId}\"\n class=\"viking-select-native\"\n part=\"control\"\n ${name ? `name=\"${escapeHtml(name)}\"` : \"\"}\n ${disabled ? \"disabled\" : \"\"}\n ${required ? \"required\" : \"\"}\n ${error ? 'aria-invalid=\"true\"' : \"\"}\n ${describedBy ? `aria-describedby=\"${describedBy}\"` : \"\"}\n ></select>\n ${description ? `<p id=\"${this.controlId}-desc\" class=\"viking-field-description\" part=\"description\">${escapeHtml(description)}</p>` : \"\"}\n ${error ? `<p id=\"${this.controlId}-error\" class=\"viking-field-error\" part=\"error\" role=\"alert\">${escapeHtml(error)}</p>` : \"\"}\n </div>\n `;\n\n this.selectEl = this.shadow.querySelector(\"select\");\n const value = this.getAttribute(\"value\");\n if (this.selectEl && value) {\n this.selectEl.value = value;\n }\n this.syncFormValue();\n }\n\n private syncOptions(): void {\n if (!this.selectEl) {\n return;\n }\n\n const currentValue = this.selectEl.value;\n this.selectEl.innerHTML = \"\";\n const options = this.querySelectorAll(\"option\");\n\n if (options.length === 0) {\n const placeholder = this.getAttribute(\"placeholder\") ?? \"Select…\";\n const opt = document.createElement(\"option\");\n opt.value = \"\";\n opt.textContent = placeholder;\n opt.disabled = true;\n opt.selected = !this.getAttribute(\"value\");\n this.selectEl.append(opt);\n return;\n }\n\n options.forEach((opt) => {\n this.selectEl?.append(opt.cloneNode(true));\n });\n\n const value = this.getAttribute(\"value\");\n if (value) {\n this.selectEl.value = value;\n } else if (currentValue) {\n this.selectEl.value = currentValue;\n }\n this.syncFormValue();\n }\n}\n\nexport const registerVikingSelectWc = (): void => {\n defineCustomElement(VikingSelectWc.tag, VikingSelectWc);\n defineCustomElementAlias(VikingSelectWc.legacyTag, VikingSelectWc);\n};\n","import { registerVikingBadgeWc } from \"./badge/viking-badge-wc\";\nimport { registerVikingButtonWc } from \"./button/viking-button-wc\";\nimport { registerVikingCalloutWc } from \"./callout/viking-callout-wc\";\nimport { registerVikingCardWc } from \"./card/viking-card-wc\";\nimport { registerVikingFieldWc } from \"./field/viking-field-wc\";\nimport { registerVikingInputWc } from \"./input/viking-input-wc\";\nimport { registerVikingModalWc } from \"./modal/viking-modal-wc\";\nimport { registerVikingSearchPaletteWc } from \"./search-palette/viking-search-palette-wc\";\nimport { registerVikingSuiteHeaderWc } from \"./suite-header/viking-suite-header-wc\";\nimport { registerVikingSuiteSearchPaletteWc } from \"./suite-search-palette/viking-suite-search-palette-wc\";\nimport { registerVikingSelectWc } from \"./select/viking-select-wc\";\nimport { registerVikingThemeToggleWc } from \"./theme-toggle/viking-theme-toggle-wc\";\n\nexport { VikingBadgeWc, registerVikingBadgeWc } from \"./badge/viking-badge-wc\";\nexport {\n VikingButtonWc,\n registerVikingButtonWc,\n} from \"./button/viking-button-wc\";\nexport {\n VikingCalloutWc,\n registerVikingCalloutWc,\n} from \"./callout/viking-callout-wc\";\nexport { VikingCardWc, registerVikingCardWc } from \"./card/viking-card-wc\";\nexport { VikingFieldWc, registerVikingFieldWc } from \"./field/viking-field-wc\";\nexport { VikingInputWc, registerVikingInputWc } from \"./input/viking-input-wc\";\nexport { VikingModalWc, registerVikingModalWc } from \"./modal/viking-modal-wc\";\nexport {\n VikingSearchPaletteWc,\n registerVikingSearchPaletteWc,\n type VikingSearchPaletteItem,\n} from \"./search-palette/viking-search-palette-wc\";\nexport {\n VikingSuiteSearchPaletteWc,\n registerVikingSuiteSearchPaletteWc,\n} from \"./suite-search-palette/viking-suite-search-palette-wc\";\nexport {\n VikingSuiteHeaderWc,\n registerVikingSuiteHeaderWc,\n} from \"./suite-header/viking-suite-header-wc\";\nexport {\n VikingSelectWc,\n registerVikingSelectWc,\n} from \"./select/viking-select-wc\";\nexport {\n VikingThemeToggleWc,\n registerVikingThemeToggleWc,\n} from \"./theme-toggle/viking-theme-toggle-wc\";\nexport type { VikingWcTone } from \"./core/types\";\n\n/** Register all Viking-UI Web Components. Safe to call multiple times. */\nexport const registerVikingElements = (): void => {\n registerVikingButtonWc();\n registerVikingFieldWc();\n registerVikingInputWc();\n registerVikingBadgeWc();\n registerVikingCalloutWc();\n registerVikingCardWc();\n registerVikingSelectWc();\n registerVikingModalWc();\n registerVikingSearchPaletteWc();\n registerVikingSuiteHeaderWc();\n registerVikingSuiteSearchPaletteWc();\n registerVikingThemeToggleWc();\n};\n\n// Auto-register when loaded as a script bundle (Astro, Django, static HTML).\nif (typeof globalThis !== \"undefined\" && typeof document !== \"undefined\") {\n if (document.readyState === \"loading\") {\n document.addEventListener(\"DOMContentLoaded\", registerVikingElements);\n } else {\n registerVikingElements();\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n input,\n} from \"@angular/core\";\nimport { DomSanitizer, SafeHtml } from \"@angular/platform-browser\";\nimport {\n VIKING_FILLED_ICON_NAMES,\n VIKING_ICON_FILLED_PATHS,\n VIKING_ICON_PATHS,\n resolveVikingIcon,\n resolveVikingIconColor,\n resolveVikingIconSize,\n vikingIconViewBox,\n VikingIconColorToken,\n VikingIconName,\n VikingIconSizePreset,\n VikingIconVariant,\n VIKING_DRAKKAR_ICON_NAMES_LIST,\n} from \"../../core/icons\";\nimport {\n isIntegrationBrandIcon,\n VIKING_INTEGRATION_BRAND_SVGS,\n type VikingIntegrationBrandName,\n} from \"../../core/integration-brand-icons\";\n\nconst VIKING_FILLED_ICON_SET = new Set<string>(VIKING_FILLED_ICON_NAMES);\nconst VIKING_DRAKKAR_ICON_SET = new Set<string>(VIKING_DRAKKAR_ICON_NAMES_LIST);\n\n/**\n * viking-icon — themeable inline SVG icon (Lucide-sourced registry + DEML brand marks).\n * Zero runtime dependencies; paths are inlined at build time from Lucide.\n *\n * @example Outline with semantic color\n * ```html\n * <viking-icon name=\"search\" sizePreset=\"md\" color=\"accent\" />\n * ```\n *\n * @example Brand mark (outline)\n * ```html\n * <viking-icon name=\"drakkar\" [size]=\"28\" color=\"accent\" />\n * ```\n */\n@Component({\n selector: \"viking-icon\",\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n \"[class.viking-icon-spin]\": \"spin()\",\n \"[class.viking-icon-filled]\": \"isFilled()\",\n \"[class.viking-icon-outline]\": \"!isFilled()\",\n \"[class.viking-icon-brand-drakkar]\": \"isDrakkarBrand()\",\n \"[class.viking-icon-sm]\": 'sizePreset() === \"sm\"',\n \"[class.viking-icon-md]\": 'sizePreset() === \"md\"',\n \"[class.viking-icon-lg]\":\n 'sizePreset() === \"lg\" || (!sizePreset() && !size())',\n \"[class.viking-icon-backdrop]\": \"backdrop()\",\n \"[class.viking-icon-backdrop-success]\":\n \"backdrop() && backdropTone() === 'success'\",\n \"[class.viking-icon-backdrop-warning]\":\n \"backdrop() && backdropTone() === 'warning'\",\n \"[class.viking-icon-backdrop-danger]\":\n \"backdrop() && backdropTone() === 'danger'\",\n \"[class.viking-icon-backdrop-info]\":\n \"backdrop() && backdropTone() === 'info'\",\n \"[style.color]\": \"resolvedColor()\",\n \"aria-hidden\": \"true\",\n },\n template: `\n @if (resolvedName() === \"google\") {\n <svg\n class=\"viking-icon-svg viking-icon-brand\"\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 48 48\"\n [style.width.px]=\"resolvedSize()\"\n [style.height.px]=\"resolvedSize()\"\n aria-hidden=\"true\"\n >\n <path\n fill=\"#EA4335\"\n d=\"M24 9.5c3.54 0 6.71 1.22 9.21 3.6l6.85-6.85C35.9 2.38 30.47 0 24 0 14.62 0 6.51 5.38 2.56 13.22l7.98 6.19C12.43 13.72 17.74 9.5 24 9.5z\"\n />\n <path\n fill=\"#4285F4\"\n d=\"M46.5 24c0-1.55-.15-3.24-.47-4.77H24v9.03h12.75c-.55 2.83-2.13 5.23-4.53 6.82l7.02 5.44C43.35 36.56 46.5 30.82 46.5 24z\"\n />\n <path\n fill=\"#FBBC05\"\n d=\"M10.54 28.59c-.48-1.45-.76-2.99-.76-4.59s.27-3.14.76-4.59l-7.98-6.19C.92 16.46 0 20.12 0 24s.92 7.54 2.56 10.78l7.98-6.19z\"\n />\n <path\n fill=\"#34A853\"\n d=\"M24 48c6.48 0 11.93-2.13 15.89-5.81l-7.02-5.44c-1.99 1.33-4.51 2.15-7.87 2.15-6.26 0-11.57-4.22-13.46-9.91l-7.98 6.19C6.51 42.62 14.62 48 24 48z\"\n />\n </svg>\n } @else if (resolvedName() === \"apple\") {\n <svg\n class=\"viking-icon-svg viking-icon-brand\"\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\"\n fill=\"currentColor\"\n [style.width.px]=\"resolvedSize()\"\n [style.height.px]=\"resolvedSize()\"\n aria-hidden=\"true\"\n >\n <path\n d=\"M16.365 12.14c.02 2.53 2.21 3.38 2.23 3.39-.02.07-.35 1.21-1.16 2.4-.7 1.02-1.43 2.03-2.58 2.05-1.13.02-1.49-.67-2.78-.67-1.29 0-1.69.65-2.75.69-1.11.04-1.95-1.12-2.66-2.13-1.44-2.08-2.54-5.87-1.07-8.43.73-1.27 2.04-2.08 3.46-2.1 1.08-.02 2.1.72 2.78.72.67 0 2.14-.89 3.61-.76.61.03 2.33.25 3.44 1.88-.09.06-2.05 1.2-2.03 3.55M13.75 3.64c.59-.71 1-1.7.89-2.68-.86.03-1.9.57-2.52 1.28-.55.63-1.03 1.65-.9 2.62.95.07 1.92-.49 2.53-1.22\"\n />\n </svg>\n } @else if (isIntegrationBrand()) {\n <svg\n class=\"viking-icon-svg viking-icon-brand viking-icon-integration-brand\"\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\"\n [style.width.px]=\"resolvedSize()\"\n [style.height.px]=\"resolvedSize()\"\n aria-hidden=\"true\"\n >\n <g [innerHTML]=\"integrationBrandSvg()\"></g>\n </svg>\n } @else {\n <svg\n class=\"viking-icon-svg\"\n xmlns=\"http://www.w3.org/2000/svg\"\n [attr.viewBox]=\"viewBox()\"\n [attr.fill]=\"isFilled() ? 'currentColor' : 'none'\"\n [attr.fill-rule]=\"isFilled() ? 'evenodd' : null\"\n [attr.stroke]=\"isFilled() ? 'none' : 'currentColor'\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n [style.width.px]=\"resolvedSize()\"\n [style.height.px]=\"resolvedSize()\"\n >\n <!-- innerHTML on <g> — binding on <svg> throws NotYetImplemented under SSR (domino). -->\n <g [innerHTML]=\"paths()\"></g>\n </svg>\n }\n `,\n styles: [\n `\n :host {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n line-height: 0;\n color: inherit;\n }\n\n :host(.viking-icon-outline) .viking-icon-svg {\n --viking-icon-stroke-width: 1.75;\n stroke-width: var(--viking-icon-stroke-width);\n shape-rendering: geometricPrecision;\n }\n\n :host(.viking-icon-outline.viking-icon-brand-drakkar) .viking-icon-svg {\n --viking-icon-stroke-width: 1.5;\n }\n\n :host(.viking-icon-sm) .viking-icon-svg {\n --viking-icon-stroke-width: 1.5;\n }\n\n :host(.viking-icon-lg) .viking-icon-svg {\n --viking-icon-stroke-width: 1.75;\n }\n\n :host(.viking-icon-filled) .viking-icon-svg {\n stroke: none;\n }\n\n :host(.viking-icon-spin) svg {\n animation: viking-icon-rotate 0.9s linear infinite;\n }\n\n :host(.viking-icon-backdrop) {\n padding: var(--viking-icon-backdrop-padding, var(--viking-space-half));\n border-radius: var(--viking-radius-lg);\n background: var(--viking-accent-soft);\n color: var(--viking-accent-strong);\n box-shadow: var(--viking-shadow-sm);\n }\n\n :host(.viking-icon-backdrop-success) {\n background: color-mix(in srgb, var(--viking-success) 14%, transparent);\n color: var(--viking-success);\n }\n\n :host(.viking-icon-backdrop-warning) {\n background: color-mix(in srgb, var(--viking-warning) 14%, transparent);\n color: var(--viking-warning);\n }\n\n :host(.viking-icon-backdrop-danger) {\n background: color-mix(in srgb, var(--viking-danger) 14%, transparent);\n color: var(--viking-danger);\n }\n\n :host(.viking-icon-backdrop-info) {\n background: color-mix(in srgb, var(--viking-info) 14%, transparent);\n color: var(--viking-info);\n }\n\n @keyframes viking-icon-rotate {\n to {\n transform: rotate(360deg);\n }\n }\n `,\n ],\n})\nexport class VikingIcon {\n readonly name = input.required<VikingIconName | string>();\n /** Explicit pixel size — overridden by sizePreset when set. */\n readonly size = input<number | undefined>(undefined);\n /** sm (16px) · md (20px) · lg (24px) */\n readonly sizePreset = input<VikingIconSizePreset | null>(null);\n /** outline (stroke) or filled (solid) */\n readonly variant = input<VikingIconVariant>(\"outline\");\n /** Semantic token (accent, success, …) or any CSS color value. */\n readonly color = input<VikingIconColorToken | string | undefined>(undefined);\n /** Renders icon inside a padded tokenized backdrop (matches viking-icon-badge). */\n readonly backdrop = input<boolean>(false);\n readonly backdropTone = input<\n \"default\" | \"success\" | \"warning\" | \"danger\" | \"info\"\n >(\"default\");\n readonly spin = input<boolean>(false);\n\n protected readonly resolvedName = computed(() =>\n resolveVikingIcon(this.name()),\n );\n\n protected readonly resolvedSize = computed(() =>\n resolveVikingIconSize(this.size(), this.sizePreset()),\n );\n\n protected readonly resolvedColor = computed(() =>\n resolveVikingIconColor(this.color()),\n );\n\n protected readonly viewBox = computed(() =>\n vikingIconViewBox(this.resolvedName()),\n );\n\n protected readonly isFilled = computed(() => {\n const name = this.resolvedName();\n if (name === \"google\" || name === \"apple\" || isIntegrationBrandIcon(name)) {\n return false;\n }\n if (this.variant() === \"filled\") {\n return true;\n }\n return VIKING_FILLED_ICON_SET.has(name);\n });\n\n protected readonly isDrakkarBrand = computed(() =>\n VIKING_DRAKKAR_ICON_SET.has(this.resolvedName()),\n );\n\n protected readonly isIntegrationBrand = computed(() =>\n isIntegrationBrandIcon(this.resolvedName()),\n );\n\n protected readonly integrationBrandSvg = computed<SafeHtml>(() => {\n const name = this.resolvedName() as VikingIntegrationBrandName;\n return this.sanitizer.bypassSecurityTrustHtml(\n VIKING_INTEGRATION_BRAND_SVGS[name] ?? \"\",\n );\n });\n\n protected readonly paths = computed<SafeHtml>(() => {\n const name = this.resolvedName();\n const html =\n this.isFilled() && VIKING_ICON_FILLED_PATHS[name]\n ? VIKING_ICON_FILLED_PATHS[name]\n : (VIKING_ICON_PATHS[name] ?? \"\");\n return this.sanitizer.bypassSecurityTrustHtml(html);\n });\n\n constructor(private readonly sanitizer: DomSanitizer) {}\n}\n\n/** Alias for consumers expecting VikingIconComponent. */\nexport { VikingIcon as VikingIconComponent };\n","import {\n ChangeDetectionStrategy,\n Component,\n CUSTOM_ELEMENTS_SCHEMA,\n computed,\n input,\n output,\n} from \"@angular/core\";\nimport { VikingIcon } from \"../icon/icon\";\nimport { VikingIconName } from \"../../core/icons\";\nimport { VikingSize } from \"../../core/types\";\nimport { registerVikingElements } from \"../../web/index\";\n\nregisterVikingElements();\n\nexport type VikingButtonVariant =\n | \"outline\"\n | \"primary\"\n | \"secondary\"\n | \"filled\"\n | \"danger\"\n | \"ghost\"\n | \"subtle\";\n\n/**\n * viking-button — thin Angular wrapper around `viking-button-wc`.\n * Variants: outline (default), primary, filled, danger, ghost, subtle.\n */\n@Component({\n selector: \"viking-button\",\n imports: [VikingIcon],\n schemas: [CUSTOM_ELEMENTS_SCHEMA],\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n \"[style.pointer-events]\": \"disabled() ? 'none' : null\",\n \"[class.viking-full]\": \"fullWidth()\",\n \"[class.viking-compact]\": \"compact()\",\n },\n template: `\n <viking-button-wc\n [attr.variant]=\"variant()\"\n [attr.size]=\"size() === 'base' ? null : size()\"\n [attr.type]=\"type()\"\n [attr.disabled]=\"disabled() || loading() ? '' : null\"\n [attr.aria-busy]=\"loading() ? 'true' : null\"\n [attr.href]=\"href()\"\n [attr.target]=\"target()\"\n [attr.aria-label]=\"label() || null\"\n [attr.square]=\"square() ? '' : null\"\n [attr.full-width]=\"fullWidth() ? '' : null\"\n [attr.compact]=\"compact() ? '' : null\"\n (viking-press)=\"onPress($event)\"\n >\n @if (loading()) {\n <viking-icon name=\"loader\" [size]=\"iconSize()\" [spin]=\"true\" />\n } @else if (icon()) {\n <viking-icon [name]=\"icon()!\" [size]=\"iconSize()\" />\n }\n <span class=\"viking-btn-label\"><ng-content /></span>\n @if (iconTrailing()) {\n <viking-icon [name]=\"iconTrailing()!\" [size]=\"iconSize()\" />\n }\n @if (kbd()) {\n <kbd class=\"viking-btn-kbd\">{{ kbd() }}</kbd>\n }\n </viking-button-wc>\n `,\n styleUrl: \"./button.scss\",\n})\nexport class VikingButton {\n readonly variant = input<VikingButtonVariant>(\"outline\");\n readonly size = input<VikingSize>(\"base\");\n readonly type = input<\"button\" | \"submit\">(\"button\");\n readonly icon = input<VikingIconName | null>(null);\n readonly iconTrailing = input<VikingIconName | null>(null);\n readonly disabled = input<boolean>(false);\n readonly loading = input<boolean>(false);\n readonly square = input<boolean>(false);\n readonly fullWidth = input<boolean>(false);\n readonly compact = input<boolean>(false);\n readonly href = input<string | null>(null);\n readonly target = input<string | null>(null);\n readonly kbd = input<string | null>(null);\n readonly label = input<string>(\"\");\n\n readonly pressed = output<MouseEvent>();\n\n protected readonly iconSize = computed(() =>\n this.size() === \"base\" ? 22 : 18,\n );\n\n protected onPress = (event: Event): void => {\n const detail = (event as CustomEvent<MouseEvent>).detail;\n if (detail) {\n this.pressed.emit(detail);\n }\n };\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n ViewEncapsulation,\n computed,\n input,\n output,\n} from \"@angular/core\";\nimport { VikingIcon } from \"../icon/icon\";\n\n/**\n * viking-theme-toggle — navbar utility control for light/dark theme switching.\n * Uses `.theme-toggle-btn` styles from viking-ui.css (static-navbar.scss).\n */\n@Component({\n selector: \"viking-theme-toggle\",\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n imports: [VikingIcon],\n host: { class: \"viking-theme-toggle-host\" },\n template: `\n <button\n type=\"button\"\n class=\"theme-toggle-btn\"\n aria-label=\"Toggle light and dark theme\"\n (click)=\"toggle.emit()\"\n >\n <viking-icon [name]=\"icon()\" [size]=\"20\" />\n </button>\n `,\n})\nexport class VikingThemeToggle {\n readonly theme = input<\"light\" | \"dark\">(\"dark\");\n readonly toggle = output<void>();\n\n protected readonly icon = computed(() =>\n this.theme() === \"dark\" ? \"sun\" : \"moon\",\n );\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n ViewEncapsulation,\n computed,\n input,\n output,\n signal,\n} from \"@angular/core\";\nimport { RouterLink, RouterLinkActive } from \"@angular/router\";\nimport { VikingButton } from \"../button/button\";\nimport { VikingIcon } from \"../icon/icon\";\nimport { VikingThemeToggle } from \"../theme-toggle/theme-toggle\";\nimport {\n DEFAULT_SITE_URLS,\n isAppRouterPath,\n resolveBrandHref,\n resolveNavHref,\n SITE_NAV_LINKS,\n SiteDrakkarContext,\n SiteUrls,\n visibleNavLinks,\n} from \"./site-drakkar.config\";\n\n/**\n * viking-site-navbar — canonical site header shared across DEML surfaces.\n * Uses `.navbar` markup + viking-ui.css (same structure as marketing/backend static HTML).\n */\n@Component({\n selector: \"viking-site-navbar\",\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n imports: [\n RouterLink,\n RouterLinkActive,\n VikingButton,\n VikingIcon,\n VikingThemeToggle,\n ],\n styleUrl: \"./site-navbar.scss\",\n template: `\n <header class=\"navbar\">\n <div class=\"navbar-content\">\n <div class=\"navbar-left\">\n @if (context() === \"app\") {\n <a\n [href]=\"brandHref()\"\n class=\"navbar-brand\"\n aria-label=\"Go to marketing homepage\"\n (click)=\"onBrandClick($event)\"\n >\n <viking-icon\n name=\"drakkar\"\n [size]=\"28\"\n color=\"accent\"\n class=\"brand-icon navbar-logo\"\n />\n </a>\n } @else {\n <a\n [href]=\"brandHref()\"\n class=\"navbar-brand\"\n aria-label=\"Go to homepage\"\n >\n <viking-icon\n name=\"drakkar\"\n [size]=\"28\"\n color=\"accent\"\n class=\"brand-icon navbar-logo\"\n />\n </a>\n }\n </div>\n\n <nav class=\"navbar-center desktop-nav\" aria-label=\"Main navigation\">\n @for (link of navLinks(); track link.id) {\n @if (context() === \"app\" && isAppRouterPath(link.appHref)) {\n <a\n [routerLink]=\"link.appHref\"\n routerLinkActive=\"active\"\n [routerLinkActiveOptions]=\"{\n exact: link.appHref === '/explore',\n }\"\n class=\"nav-btn\"\n >\n <viking-icon [name]=\"link.icon\" [size]=\"16\" />\n <span>{{ link.label }}</span>\n </a>\n } @else {\n <a [href]=\"resolveHref(link)\" class=\"nav-btn\">\n <viking-icon [name]=\"link.icon\" [size]=\"16\" />\n <span>{{ link.label }}</span>\n </a>\n }\n }\n </nav>\n\n <div class=\"navbar-right\">\n @if (showSearch()) {\n <div class=\"navbar-search\" role=\"search\">\n <viking-button\n variant=\"outline\"\n [square]=\"true\"\n [compact]=\"true\"\n icon=\"search\"\n label=\"Open search (⌘K)\"\n (pressed)=\"openSearch()\"\n />\n </div>\n }\n\n <div class=\"desktop-auth\">\n @if (!isAuthenticated()) {\n <viking-button\n variant=\"primary\"\n icon=\"arrow-right\"\n (pressed)=\"login.emit()\"\n >\n Sign In\n </viking-button>\n } @else {\n <viking-button\n variant=\"primary\"\n icon=\"home\"\n [href]=\"urls().app + '/dashboard'\"\n >\n Dashboard\n </viking-button>\n <viking-button variant=\"ghost\" (pressed)=\"logout.emit()\"\n >Sign Out</viking-button\n >\n }\n </div>\n\n <viking-theme-toggle\n [theme]=\"theme()\"\n (toggle)=\"themeToggle.emit()\"\n />\n\n <viking-button\n variant=\"outline\"\n [square]=\"true\"\n class=\"menu-toggle-btn\"\n [icon]=\"mobileMenuOpen() ? 'x' : 'menu'\"\n [label]=\"\n mobileMenuOpen()\n ? 'Close navigation menu'\n : 'Toggle navigation menu'\n \"\n (pressed)=\"toggleMobileMenu()\"\n />\n </div>\n </div>\n\n <nav\n class=\"mobile-menu\"\n [class.open]=\"mobileMenuOpen()\"\n aria-label=\"Mobile navigation\"\n >\n @for (link of navLinks(); track link.id + \"-mobile\") {\n @if (context() === \"app\" && isAppRouterPath(link.appHref)) {\n <a\n [routerLink]=\"link.appHref\"\n routerLinkActive=\"active\"\n [routerLinkActiveOptions]=\"{ exact: link.appHref === '/explore' }\"\n class=\"mobile-nav-btn\"\n (click)=\"closeMobileMenu()\"\n >\n <viking-icon [name]=\"link.icon\" [size]=\"16\" />\n <span>{{ link.label }}</span>\n </a>\n } @else {\n <a\n [href]=\"resolveHref(link)\"\n class=\"mobile-nav-btn\"\n (click)=\"closeMobileMenu()\"\n >\n <viking-icon [name]=\"link.icon\" [size]=\"16\" />\n <span>{{ link.label }}</span>\n </a>\n }\n }\n\n <div class=\"mobile-divider\"></div>\n\n @if (!isAuthenticated()) {\n <viking-button\n variant=\"primary\"\n icon=\"arrow-right\"\n class=\"mobile-auth-btn\"\n [fullWidth]=\"true\"\n (pressed)=\"login.emit(); closeMobileMenu()\"\n >\n Sign In\n </viking-button>\n } @else {\n <viking-button\n variant=\"primary\"\n icon=\"home\"\n class=\"mobile-auth-btn\"\n [fullWidth]=\"true\"\n [href]=\"urls().app + '/dashboard'\"\n (pressed)=\"closeMobileMenu()\"\n >\n Dashboard\n </viking-button>\n <viking-button\n variant=\"ghost\"\n class=\"mobile-auth-btn\"\n [fullWidth]=\"true\"\n (pressed)=\"logout.emit(); closeMobileMenu()\"\n >\n Sign Out\n </viking-button>\n }\n </nav>\n </header>\n `,\n})\nexport class VikingSiteNavbar {\n readonly context = input<SiteDrakkarContext>(\"app\");\n readonly urls = input<SiteUrls>(DEFAULT_SITE_URLS);\n readonly isAuthenticated = input<boolean>(false);\n readonly theme = input<\"light\" | \"dark\">(\"dark\");\n readonly showSearch = input<boolean>(false);\n\n readonly login = output<void>();\n readonly logout = output<void>();\n readonly themeToggle = output<void>();\n readonly searchOpen = output<void>();\n\n protected readonly mobileMenuOpen = signal(false);\n\n protected readonly navLinks = computed(() =>\n visibleNavLinks(SITE_NAV_LINKS, this.isAuthenticated()),\n );\n\n protected readonly brandHref = computed(() =>\n resolveBrandHref(this.context(), this.urls()),\n );\n\n protected resolveHref = (link: (typeof SITE_NAV_LINKS)[number]): string =>\n resolveNavHref(link, this.context(), this.urls());\n\n protected isAppRouterPath = isAppRouterPath;\n\n protected onBrandClick(event: MouseEvent): void {\n event.preventDefault();\n window.location.href = this.brandHref();\n }\n\n protected toggleMobileMenu(): void {\n this.mobileMenuOpen.update((open) => !open);\n }\n\n protected closeMobileMenu(): void {\n this.mobileMenuOpen.set(false);\n }\n\n protected openSearch(): void {\n this.searchOpen.emit();\n const widgets = (\n globalThis as { DemlWidgets?: { openSearch?: () => void } }\n ).DemlWidgets;\n widgets?.openSearch?.();\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n ViewEncapsulation,\n} from \"@angular/core\";\n\n/**\n * viking-footer — site-wide Drakkar footer shell. Project directory columns and bottom row via slots.\n * Static apps (marketing, backend) use the same class names from viking-ui.css.\n */\n@Component({\n selector: \"viking-footer\",\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n host: { class: \"viking-footer-host\" },\n template: `\n <footer class=\"viking-footer mega-footer\">\n <div class=\"viking-footer-content footer-content\">\n <ng-content select=\"[vikingFooterDirectory]\" />\n <section class=\"viking-footer-bottom footer-bottom\">\n <ng-content select=\"[vikingFooterBottom]\" />\n </section>\n </div>\n </footer>\n `,\n styleUrl: \"./footer.scss\",\n})\nexport class VikingFooter {}\n","import {\n ChangeDetectionStrategy,\n Component,\n input,\n output,\n} from \"@angular/core\";\nimport { RouterLink } from \"@angular/router\";\nimport { VikingFooter } from \"../footer/footer\";\nimport {\n cookieSettingsHref,\n DEFAULT_SITE_URLS,\n isAppRouterPath,\n resolveFooterHref,\n SITE_FOOTER_COLUMNS,\n SiteDrakkarContext,\n SiteFooterLink,\n SiteUrls,\n} from \"./site-drakkar.config\";\n\n/**\n * viking-site-footer — canonical site footer shared across DEML surfaces.\n */\n@Component({\n selector: \"viking-site-footer\",\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [RouterLink, VikingFooter],\n template: `\n <viking-footer>\n <nav\n vikingFooterDirectory\n class=\"viking-footer-directory footer-directory\"\n aria-label=\"Footer Directory\"\n >\n @for (column of columns; track column.title) {\n <div class=\"footer-column\">\n <h3 class=\"footer-column-title\">{{ column.title }}</h3>\n <ul class=\"footer-list\">\n @for (link of column.links; track link.label) {\n <li>\n @if (link.action === \"cookie-settings\") {\n @if (context() === \"marketing\") {\n <a href=\"#\" (click)=\"onCookieSettings($event)\">{{\n link.label\n }}</a>\n } @else {\n <a [href]=\"cookieSettingsUrl()\">{{ link.label }}</a>\n }\n } @else if (link.action === \"bug-report\") {\n @if (context() === \"app\") {\n <a href=\"#\" (click)=\"onBugReport($event)\">{{\n link.label\n }}</a>\n } @else {\n <a [href]=\"resolveHref(link)\">{{ link.label }}</a>\n }\n } @else if (context() === \"app\" && isAppRoute(link)) {\n <a [routerLink]=\"link.appHref\">{{ link.label }}</a>\n } @else {\n <a [href]=\"resolveHref(link)\">{{ link.label }}</a>\n }\n </li>\n }\n </ul>\n </div>\n }\n </nav>\n\n <ng-container vikingFooterBottom>\n <div class=\"footer-badges-top\">\n <span\n class=\"usa-badge viking-usa-badge\"\n id=\"usa-badge\"\n (mouseenter)=\"usaBadgeHover.emit($event)\"\n >\n <span\n class=\"usa-badge-icon viking-usa-badge-icon\"\n aria-hidden=\"true\"\n >🇺🇸</span\n >\n <span>Made in the U.S.A</span>\n </span>\n </div>\n\n <div class=\"footer-compliance-row\">\n <div class=\"copyright-info\">\n <span class=\"copyright-text\">\n Copyright © {{ year() }} Data Engineering for Machine Learning by\n <a\n href=\"https://joealongi.dev/\"\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n >Joe Alongi</a\n >. All rights reserved.\n </span>\n </div>\n </div>\n </ng-container>\n </viking-footer>\n `,\n})\nexport class VikingSiteFooter {\n readonly context = input<SiteDrakkarContext>(\"app\");\n readonly urls = input<SiteUrls>(DEFAULT_SITE_URLS);\n readonly year = input<number>(new Date().getFullYear());\n\n readonly cookieSettings = output<Event>();\n readonly bugReport = output<Event>();\n readonly usaBadgeHover = output<MouseEvent>();\n\n protected readonly columns = SITE_FOOTER_COLUMNS;\n\n protected readonly cookieSettingsUrl = () => cookieSettingsHref(this.urls());\n\n protected resolveHref = (link: SiteFooterLink): string =>\n resolveFooterHref(link, this.context(), this.urls());\n\n protected isAppRoute = (link: SiteFooterLink): boolean =>\n !link.action && isAppRouterPath(link.appHref);\n\n protected onCookieSettings(event: Event): void {\n event.preventDefault();\n this.cookieSettings.emit(event);\n }\n\n protected onBugReport(event: Event): void {\n event.preventDefault();\n this.bugReport.emit(event);\n }\n}\n","import { ChangeDetectionStrategy, Component, input } from \"@angular/core\";\n\n/**\n * viking-app-header — sticky application header with brand, nav, actions, and mobile menu slots.\n * Styles live in the component library so all apps share one navbar implementation.\n */\n@Component({\n selector: \"viking-app-header\",\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <header class=\"viking-app-header\">\n <div class=\"viking-app-header-content\">\n <div class=\"viking-app-header-left\">\n <ng-content select=\"[vikingAppHeaderBrand]\" />\n </div>\n <nav\n class=\"viking-app-header-center viking-app-header-desktop-nav\"\n aria-label=\"Main navigation\"\n >\n <ng-content select=\"[vikingAppHeaderNav]\" />\n </nav>\n <div class=\"viking-app-header-right\">\n <div class=\"viking-app-header-desktop-auth\">\n <ng-content select=\"[vikingAppHeaderAuth]\" />\n </div>\n <ng-content select=\"[vikingAppHeaderActions]\" />\n </div>\n </div>\n <nav\n class=\"viking-app-header-mobile\"\n [class.viking-open]=\"mobileMenuOpen()\"\n [attr.aria-label]=\"mobileMenuLabel()\"\n >\n <ng-content select=\"[vikingAppHeaderMobile]\" />\n </nav>\n </header>\n `,\n styleUrl: \"./app-header.scss\",\n})\nexport class VikingAppHeader {\n readonly mobileMenuOpen = input<boolean>(false);\n readonly mobileMenuLabel = input<string>(\"Mobile navigation\");\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n ViewEncapsulation,\n input,\n output,\n} from \"@angular/core\";\n\n/**\n * viking-app-sidebar — dashboard sidebar shell styles (project nav markup inside).\n * Width is driven by the `--viking-sidebar-width` CSS variable on the host.\n */\n@Component({\n selector: \"viking-app-sidebar\",\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n host: {\n class: \"viking-app-sidebar-host\",\n \"[style.--viking-sidebar-width.px]\": \"collapsed() ? null : width()\",\n },\n template: `<ng-content />`,\n styleUrl: \"./app-sidebar.scss\",\n})\nexport class VikingAppSidebar {\n readonly collapsed = input<boolean>(false);\n readonly dragging = input<boolean>(false);\n readonly width = input<number>(260);\n readonly resizeStart = output<MouseEvent>();\n}\n","let counter = 0;\n\n/** Generates a stable, unique DOM id for label/control associations. */\nexport const vikingUid = (prefix: string): string => {\n counter += 1;\n return `${prefix}-${counter}`;\n};\n","import {\n ChangeDetectionStrategy,\n Component,\n Optional,\n input,\n model,\n} from \"@angular/core\";\nimport { VikingIcon } from \"../icon/icon\";\nimport { vikingUid } from \"../../core/uid\";\n\n/**\n * viking-accordion — collapsible content panels.\n * Set exclusive to allow only one open item at a time.\n */\n@Component({\n selector: \"viking-accordion\",\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `<ng-content />`,\n styles: [\n `\n :host {\n display: block;\n border: 1px solid var(--viking-border);\n border-radius: var(--viking-radius);\n background: var(--viking-surface);\n overflow: hidden;\n }\n :host ::ng-deep viking-accordion-item:not(:last-child) {\n border-bottom: 1px solid var(--viking-border);\n }\n `,\n ],\n})\nexport class VikingAccordion {\n readonly exclusive = input<boolean>(false);\n\n private openItem: VikingAccordionItem | null = null;\n\n /** Called by items when they open, to enforce exclusive mode. */\n readonly notifyOpened = (item: VikingAccordionItem): void => {\n if (this.exclusive() && this.openItem && this.openItem !== item) {\n this.openItem.expanded.set(false);\n }\n this.openItem = item;\n };\n}\n\n/** A single expandable section within viking-accordion. */\n@Component({\n selector: \"viking-accordion-item\",\n imports: [VikingIcon],\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <button\n type=\"button\"\n class=\"viking-accordion-trigger\"\n [attr.aria-expanded]=\"expanded()\"\n [attr.aria-controls]=\"panelId\"\n (click)=\"toggle()\"\n >\n <span class=\"viking-accordion-heading\">{{ heading() }}</span>\n <viking-icon\n [name]=\"expanded() ? 'chevron-up' : 'chevron-down'\"\n [size]=\"18\"\n />\n </button>\n @if (expanded()) {\n <div class=\"viking-accordion-panel\" [id]=\"panelId\">\n <ng-content />\n </div>\n }\n `,\n styles: [\n `\n :host {\n display: block;\n }\n .viking-accordion-trigger {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: var(--viking-space-2);\n width: 100%;\n border: none;\n background: transparent;\n color: var(--viking-text);\n font-family: var(--viking-font-family);\n font-size: var(--viking-font-size-ui);\n font-weight: 700;\n padding: var(--viking-space-2);\n cursor: pointer;\n text-align: left;\n transition: var(--viking-transition);\n }\n .viking-accordion-trigger:hover {\n background: var(--viking-accent-soft);\n }\n .viking-accordion-trigger:focus-visible {\n outline: var(--viking-ring-width) solid var(--viking-ring);\n outline-offset: -3px;\n }\n .viking-accordion-panel {\n padding: 0 var(--viking-space-2) var(--viking-space-2);\n color: var(--viking-text-muted);\n font-family: var(--viking-font-family);\n font-size: var(--viking-font-size);\n line-height: 1.6;\n }\n `,\n ],\n})\nexport class VikingAccordionItem {\n constructor(@Optional() private readonly accordion: VikingAccordion | null) {}\n\n readonly heading = input.required<string>();\n readonly expanded = model<boolean>(false);\n\n protected readonly panelId = vikingUid(\"viking-accordion-panel\");\n\n protected toggle = (): void => {\n this.expanded.update((value) => !value);\n if (this.expanded()) {\n this.accordion?.notifyOpened(this);\n }\n };\n}\n","import { ChangeDetectionStrategy, Component, input } from \"@angular/core\";\n\n/**\n * viking-separator — horizontal/vertical rule with optional label\n *.\n */\n@Component({\n selector: \"viking-separator\",\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n role: \"separator\",\n \"[attr.aria-orientation]\": \"orientation()\",\n \"[class.viking-vertical]\": \"orientation() === 'vertical'\",\n },\n template: `\n @if (text() && orientation() === \"horizontal\") {\n <span class=\"viking-separator-line\" aria-hidden=\"true\"></span>\n <span class=\"viking-separator-text\">{{ text() }}</span>\n <span class=\"viking-separator-line\" aria-hidden=\"true\"></span>\n } @else {\n <span class=\"viking-separator-line\" aria-hidden=\"true\"></span>\n }\n `,\n styles: [\n `\n :host {\n display: flex;\n align-items: center;\n gap: var(--viking-space-2);\n width: 100%;\n }\n :host(.viking-vertical) {\n width: auto;\n align-self: stretch;\n }\n .viking-separator-line {\n flex: 1;\n border-top: 1px solid var(--viking-border);\n }\n :host(.viking-vertical) .viking-separator-line {\n flex: none;\n border-top: none;\n border-left: 1px solid var(--viking-border);\n height: 100%;\n min-height: var(--viking-space-3);\n }\n .viking-separator-text {\n font-family: var(--viking-font-family);\n font-size: var(--viking-font-size);\n color: var(--viking-text-muted);\n white-space: nowrap;\n }\n `,\n ],\n})\nexport class VikingSeparator {\n readonly orientation = input<\"horizontal\" | \"vertical\">(\"horizontal\");\n readonly text = input<string>(\"\");\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n input,\n output,\n} from \"@angular/core\";\nimport { VikingButton } from \"../button/button\";\nimport { VikingSeparator } from \"../separator/separator\";\n\n/**\n * viking-auth-panel — access portal / sign-in layout template.\n * Full-width stacked actions, Google + Apple OAuth row, WCAG-friendly structure.\n */\n@Component({\n selector: \"viking-auth-panel\",\n imports: [VikingButton, VikingSeparator],\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: { class: \"viking-auth-panel-host\" },\n template: `\n <section class=\"viking-auth-panel\" aria-labelledby=\"viking-auth-title\">\n <header class=\"viking-auth-header\">\n @if (tag()) {\n <div class=\"viking-auth-tag-row\">\n <span class=\"viking-auth-tag\">{{ tag() }}</span>\n </div>\n }\n <h1 id=\"viking-auth-title\" class=\"viking-auth-title\">{{ title() }}</h1>\n @if (subtitle()) {\n <p class=\"viking-auth-subtitle\">{{ subtitle() }}</p>\n }\n </header>\n\n <div class=\"viking-auth-body\">\n <ng-content />\n </div>\n\n <ng-content select=\"[vikingAuthLinks]\" />\n\n @if (showSocial()) {\n <viking-separator text=\"or\" />\n <div\n class=\"viking-auth-social\"\n role=\"group\"\n aria-label=\"Social sign-in\"\n >\n <viking-button\n variant=\"outline\"\n type=\"button\"\n icon=\"google\"\n [fullWidth]=\"true\"\n [loading]=\"socialLoading()\"\n [disabled]=\"socialLoading()\"\n (pressed)=\"googleSignIn.emit()\"\n >\n Sign In with Google\n </viking-button>\n <viking-button\n variant=\"outline\"\n type=\"button\"\n icon=\"apple\"\n [fullWidth]=\"true\"\n [loading]=\"socialLoading()\"\n [disabled]=\"socialLoading()\"\n (pressed)=\"appleSignIn.emit()\"\n >\n Sign In with Apple\n </viking-button>\n </div>\n }\n\n <footer class=\"viking-auth-footer\">\n <ng-content select=\"[vikingAuthFooter]\" />\n </footer>\n </section>\n `,\n styles: [\n `\n :host {\n display: block;\n width: 100%;\n max-width: 480px;\n margin-inline: auto;\n font-family: var(--viking-font-family);\n }\n .viking-auth-panel {\n display: flex;\n flex-direction: column;\n gap: var(--viking-space-3);\n width: 100%;\n padding: var(--viking-space-3);\n background: var(--viking-surface);\n border: 1px solid var(--viking-border);\n border-radius: var(--viking-radius-lg);\n box-shadow: var(--viking-shadow-md);\n position: relative;\n overflow: hidden;\n }\n .viking-auth-panel::before {\n content: \"\";\n position: absolute;\n inset: 0 0 auto;\n height: 1px;\n background: linear-gradient(\n 90deg,\n transparent,\n color-mix(in srgb, var(--viking-metallic-200) 22%, transparent),\n transparent\n );\n pointer-events: none;\n }\n .viking-auth-header {\n display: flex;\n flex-direction: column;\n gap: var(--viking-space-1);\n margin-bottom: var(--viking-space-1);\n }\n .viking-auth-tag-row {\n display: flex;\n align-items: center;\n }\n .viking-auth-tag {\n display: inline-flex;\n align-items: center;\n gap: var(--viking-space-1);\n font-size: var(--viking-font-size-ui);\n font-weight: 700;\n letter-spacing: 0.08em;\n text-transform: uppercase;\n color: var(--viking-text-muted);\n padding: var(--viking-space-1) var(--viking-space-2);\n border: 1px solid var(--viking-border);\n border-radius: var(--viking-radius-pill);\n background: var(--viking-surface);\n box-shadow: var(--viking-shadow-sm);\n }\n .viking-auth-tag::before {\n content: \"\";\n width: var(--viking-space-1);\n height: var(--viking-space-1);\n border-radius: 50%;\n background: var(--viking-accent);\n flex-shrink: 0;\n }\n .viking-auth-title {\n margin: 0;\n font-size: var(--viking-font-size-xl);\n font-weight: 700;\n letter-spacing: var(--header-letter-spacing, -0.02em);\n color: var(--viking-text);\n line-height: var(--viking-line-height-tight);\n }\n .viking-auth-subtitle {\n margin: 0;\n font-size: var(--viking-font-size);\n line-height: 1.6;\n color: var(--viking-text-muted);\n }\n .viking-auth-body {\n display: flex;\n flex-direction: column;\n gap: var(--viking-space-2);\n width: 100%;\n }\n :host ::ng-deep .viking-auth-stack {\n display: flex;\n flex-direction: column;\n gap: var(--viking-space-2);\n width: 100%;\n }\n :host ::ng-deep .viking-auth-stack viking-callout {\n width: 100%;\n }\n :host ::ng-deep .viking-auth-stack .login-form,\n :host ::ng-deep .login-form {\n display: flex;\n flex-direction: column;\n gap: var(--viking-space-2);\n width: 100%;\n }\n .viking-auth-social {\n display: flex;\n flex-direction: column;\n gap: var(--viking-space-2);\n width: 100%;\n }\n .viking-auth-footer {\n display: flex;\n flex-direction: column;\n gap: var(--viking-space-3);\n width: 100%;\n margin-top: var(--viking-space-4);\n padding-top: var(--viking-space-4);\n border-top: 1px solid var(--viking-border);\n }\n :host ::ng-deep [vikingAuthFooter] {\n display: flex;\n flex-direction: column;\n gap: var(--viking-space-3);\n width: 100%;\n }\n :host ::ng-deep [vikingAuthFooter] viking-button .viking-btn {\n min-width: 0;\n }\n :host ::ng-deep [vikingAuthLinks].viking-auth-links,\n :host ::ng-deep .viking-auth-links {\n display: flex;\n flex-direction: column;\n gap: var(--viking-space-2);\n width: 100%;\n }\n :host ::ng-deep viking-field {\n width: 100%;\n }\n `,\n ],\n})\nexport class VikingAuthPanel {\n readonly tag = input(\"Access Portal\");\n readonly title = input.required<string>();\n readonly subtitle = input(\n \"Secure entry to the DEML (DATA ENGINEERING FOR MACHINE LEARNING).\",\n );\n readonly showSocial = input(true);\n readonly socialLoading = input(false);\n\n readonly googleSignIn = output<void>();\n readonly appleSignIn = output<void>();\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n computed,\n input,\n model,\n output,\n signal,\n} from \"@angular/core\";\nimport { VikingControl, provideVikingCva } from \"../core/cva\";\nimport { VikingIcon } from \"../icon/icon\";\nimport { vikingUid } from \"../../core/uid\";\n\n/**\n * viking-autocomplete — text input with filtered suggestions\n *. ControlValueAccessor-compatible.\n */\n@Component({\n selector: \"viking-autocomplete\",\n imports: [VikingIcon],\n providers: [provideVikingCva(VikingAutocomplete)],\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: { \"(document:click)\": \"onDocumentClick($event)\" },\n template: `\n <div class=\"viking-control viking-autocomplete-shell\">\n <viking-icon class=\"viking-autocomplete-icon\" name=\"search\" [size]=\"20\" />\n <input\n type=\"text\"\n role=\"combobox\"\n [placeholder]=\"placeholder()\"\n [value]=\"value()\"\n [disabled]=\"disabled() || formDisabled()\"\n [attr.aria-expanded]=\"open()\"\n [attr.aria-controls]=\"panelId\"\n [attr.aria-label]=\"label() || placeholder() || 'Autocomplete'\"\n aria-autocomplete=\"list\"\n (input)=\"onInput($event)\"\n (focus)=\"open.set(true)\"\n (keydown)=\"onKeydown($event)\"\n (blur)=\"onTouched()\"\n />\n </div>\n @if (open() && filtered().length > 0) {\n <div class=\"viking-autocomplete-panel\" role=\"listbox\" [id]=\"panelId\">\n @for (item of filtered(); track item; let index = $index) {\n <button\n type=\"button\"\n role=\"option\"\n class=\"viking-autocomplete-option\"\n [class.viking-active]=\"index === activeIndex()\"\n [attr.aria-selected]=\"index === activeIndex()\"\n (mousedown)=\"$event.preventDefault()\"\n (click)=\"pick(item)\"\n (mouseenter)=\"activeIndex.set(index)\"\n >\n {{ item }}\n </button>\n }\n </div>\n }\n `,\n styles: [\n `\n :host {\n position: relative;\n display: block;\n }\n .viking-autocomplete-shell {\n display: flex;\n align-items: center;\n gap: var(--viking-space-1);\n min-height: var(--viking-control-height);\n padding: 0 var(--viking-space-2);\n background: var(--viking-surface);\n border: 1px solid var(--viking-border-strong);\n border-radius: var(--viking-radius);\n box-shadow: var(--viking-shadow-sm);\n transition: var(--viking-transition);\n }\n .viking-autocomplete-shell:focus-within {\n outline: var(--viking-ring-width) solid var(--viking-ring);\n outline-offset: var(--viking-ring-offset);\n }\n .viking-autocomplete-icon {\n color: var(--viking-text-muted);\n }\n input {\n flex: 1;\n min-width: 0;\n border: none;\n outline: none;\n background: transparent;\n color: var(--viking-text);\n font-family: var(--viking-font-family);\n font-size: var(--viking-font-size);\n }\n input::placeholder {\n color: var(--viking-text-muted);\n }\n .viking-autocomplete-panel {\n position: absolute;\n top: calc(100% + var(--viking-space-1));\n left: 0;\n right: 0;\n display: flex;\n flex-direction: column;\n gap: 2px;\n margin: 0;\n padding: var(--viking-space-1);\n background: var(--viking-surface);\n border: 1px solid var(--viking-border-strong);\n border-radius: var(--viking-radius);\n box-shadow: var(--viking-shadow-md);\n z-index: var(--viking-z-overlay);\n max-height: 288px;\n overflow: auto;\n }\n .viking-autocomplete-option {\n padding: var(--viking-space-1);\n border: none;\n background: transparent;\n text-align: left;\n width: 100%;\n border-radius: calc(var(--viking-radius) / 1.5);\n font-family: var(--viking-font-family);\n font-size: var(--viking-font-size);\n color: var(--viking-text);\n cursor: pointer;\n }\n .viking-autocomplete-option:focus-visible {\n outline: var(--viking-ring-width) solid var(--viking-ring);\n outline-offset: -2px;\n }\n .viking-active {\n background: var(--viking-accent-soft);\n }\n `,\n ],\n})\nexport class VikingAutocomplete extends VikingControl<string> {\n readonly suggestions = input.required<string[]>();\n readonly value = model<string>(\"\");\n readonly placeholder = input<string>(\"\");\n readonly label = input<string>(\"\");\n readonly disabled = input<boolean>(false);\n\n readonly selected = output<string>();\n\n constructor(private readonly host: ElementRef<HTMLElement>) {\n super();\n }\n\n protected readonly open = signal(false);\n protected readonly activeIndex = signal(0);\n protected readonly panelId = vikingUid(\"viking-autocomplete-panel\");\n\n protected readonly filtered = computed(() => {\n const query = this.value().toLowerCase().trim();\n if (!query) {\n return this.suggestions();\n }\n return this.suggestions().filter((item) =>\n item.toLowerCase().includes(query),\n );\n });\n\n writeValue(value: string): void {\n this.value.set(value ?? \"\");\n }\n\n protected onInput = (event: Event): void => {\n const next = (event.target as HTMLInputElement).value;\n this.value.set(next);\n this.onChange(next);\n this.open.set(true);\n this.activeIndex.set(0);\n };\n\n protected pick = (item: string): void => {\n this.value.set(item);\n this.onChange(item);\n this.selected.emit(item);\n this.open.set(false);\n };\n\n protected onKeydown = (event: KeyboardEvent): void => {\n if (!this.open()) {\n return;\n }\n const items = this.filtered();\n switch (event.key) {\n case \"ArrowDown\":\n event.preventDefault();\n this.activeIndex.update((index) =>\n Math.min(items.length - 1, index + 1),\n );\n break;\n case \"ArrowUp\":\n event.preventDefault();\n this.activeIndex.update((index) => Math.max(0, index - 1));\n break;\n case \"Enter\":\n if (items[this.activeIndex()]) {\n event.preventDefault();\n this.pick(items[this.activeIndex()]);\n }\n break;\n case \"Escape\":\n this.open.set(false);\n break;\n }\n };\n\n protected onDocumentClick = (event: Event): void => {\n if (\n this.open() &&\n !this.host.nativeElement.contains(event.target as Node)\n ) {\n this.open.set(false);\n }\n };\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n input,\n signal,\n} from \"@angular/core\";\nimport { VikingTone } from \"../../core/types\";\n\n/**\n * viking-avatar — image or initials avatar with optional status indicator\n *.\n */\n@Component({\n selector: \"viking-avatar\",\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n \"[style.width.px]\": \"size()\",\n \"[style.height.px]\": \"size()\",\n \"[class.viking-avatar-square]\": \"square()\",\n },\n template: `\n @if (src() && !imageFailed()) {\n <img [src]=\"src()\" [alt]=\"name()\" (error)=\"imageFailed.set(true)\" />\n } @else {\n <span class=\"viking-avatar-initials\">\n {{ initials() }}\n </span>\n }\n @if (status()) {\n <span\n class=\"viking-avatar-status\"\n [class]=\"'viking-status-' + status()\"\n role=\"status\"\n >\n <span class=\"viking-visually-hidden\">{{ status() }}</span>\n </span>\n }\n `,\n styles: [\n `\n :host {\n position: relative;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n border-radius: var(--viking-radius-pill);\n background: var(--viking-surface-alt);\n border: 1px solid var(--viking-border);\n overflow: visible;\n flex-shrink: 0;\n }\n :host(.viking-avatar-square) {\n border-radius: var(--viking-radius);\n }\n img {\n width: 100%;\n height: 100%;\n object-fit: cover;\n border-radius: inherit;\n }\n .viking-avatar-initials {\n font-family: var(--viking-font-family);\n font-size: var(--viking-font-size-ui);\n font-weight: 600;\n color: var(--viking-text);\n text-transform: uppercase;\n letter-spacing: 0.02em;\n user-select: none;\n }\n .viking-avatar-status {\n position: absolute;\n right: -1px;\n bottom: -1px;\n width: 27%;\n height: 27%;\n min-width: 9px;\n min-height: 9px;\n border-radius: var(--viking-radius-pill);\n border: 2px solid var(--viking-surface);\n }\n .viking-status-success {\n background: var(--viking-success);\n }\n .viking-status-warning {\n background: var(--viking-warning);\n }\n .viking-status-danger {\n background: var(--viking-danger);\n }\n .viking-status-accent {\n background: var(--viking-accent);\n }\n .viking-status-muted {\n background: var(--viking-text-muted);\n }\n .viking-visually-hidden {\n position: absolute;\n width: 1px;\n height: 1px;\n overflow: hidden;\n clip: rect(0 0 0 0);\n white-space: nowrap;\n }\n `,\n ],\n})\nexport class VikingAvatar {\n readonly src = input<string | null>(null);\n readonly name = input<string>(\"\");\n readonly size = input<number>(45);\n readonly square = input<boolean>(false);\n readonly status = input<VikingTone | null>(null);\n\n protected readonly imageFailed = signal(false);\n\n protected readonly initials = computed(() => {\n const parts = this.name().trim().split(/\\s+/).filter(Boolean);\n if (parts.length === 0) {\n return \"?\";\n }\n const first = parts[0].charAt(0);\n const last = parts.length > 1 ? parts[parts.length - 1].charAt(0) : \"\";\n return `${first}${last}`;\n });\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n input,\n output,\n} from \"@angular/core\";\nimport { VikingIcon } from \"../icon/icon\";\nimport { VikingIconName } from \"../../core/icons\";\nimport { VikingSize, VikingTone } from \"../../core/types\";\n\n/**\n * viking-badge — status pill.\n * Tones map to THEME.md semantic colors only.\n */\n@Component({\n selector: \"viking-badge\",\n imports: [VikingIcon],\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: { \"[class]\": \"hostClass()\" },\n template: `\n @if (icon()) {\n <viking-icon [name]=\"icon()!\" [size]=\"16\" />\n }\n <ng-content />\n @if (removable()) {\n <button\n type=\"button\"\n class=\"viking-badge-remove\"\n aria-label=\"Remove\"\n (click)=\"removed.emit()\"\n >\n <viking-icon name=\"x\" [size]=\"14\" />\n </button>\n }\n `,\n styles: [\n `\n :host {\n display: inline-flex;\n align-items: center;\n gap: var(--viking-space-half);\n font-family: var(--viking-font-family);\n font-size: var(--viking-font-size-xs);\n font-weight: var(--viking-font-weight-semibold);\n letter-spacing: var(--viking-letter-spacing-wide);\n line-height: var(--viking-line-height-snug);\n padding: var(--viking-space-half) var(--viking-space-1);\n border-radius: var(--viking-radius-pill);\n border: 1px solid var(--viking-border);\n background: var(--viking-surface-alt);\n color: var(--viking-text);\n white-space: nowrap;\n transition: var(--viking-transition-interactive);\n box-shadow: var(--viking-shadow-xs);\n }\n :host(.viking-badge-sm) {\n padding: 0 var(--viking-space-1);\n font-size: var(--viking-font-size-2xs);\n }\n :host(.viking-badge-accent) {\n background: var(--viking-accent);\n border-color: color-mix(\n in srgb,\n var(--viking-accent) 80%,\n var(--viking-black)\n );\n color: var(--viking-accent-content);\n box-shadow: var(--viking-shadow-sm);\n }\n :host(.viking-badge-secondary) {\n background: color-mix(\n in srgb,\n var(--viking-accent-secondary) 16%,\n var(--viking-surface)\n );\n border-color: color-mix(\n in srgb,\n var(--viking-accent-secondary) 55%,\n transparent\n );\n color: var(--viking-accent-secondary);\n }\n :host(.viking-badge-success) {\n background: color-mix(\n in srgb,\n var(--viking-success) 16%,\n var(--viking-surface)\n );\n border-color: color-mix(\n in srgb,\n var(--viking-success) 55%,\n transparent\n );\n color: var(--viking-success);\n }\n :host(.viking-badge-warning) {\n background: color-mix(\n in srgb,\n var(--viking-warning) 18%,\n var(--viking-surface)\n );\n border-color: color-mix(\n in srgb,\n var(--viking-warning) 55%,\n transparent\n );\n color: var(--viking-warning);\n }\n :host(.viking-badge-danger) {\n background: color-mix(\n in srgb,\n var(--viking-danger) 14%,\n var(--viking-surface)\n );\n border-color: color-mix(in srgb, var(--viking-danger) 50%, transparent);\n color: var(--viking-danger-text);\n }\n :host(.viking-badge-info) {\n background: color-mix(\n in srgb,\n var(--viking-info) 14%,\n var(--viking-surface)\n );\n border-color: color-mix(in srgb, var(--viking-info) 50%, transparent);\n color: var(--viking-info);\n }\n :host(.viking-badge-muted) {\n color: var(--viking-text-muted);\n background: var(--viking-surface);\n border-color: var(--viking-border-subtle);\n }\n .viking-badge-remove {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n min-width: var(--viking-touch-target-comfort);\n min-height: var(--viking-touch-target-comfort);\n border: none;\n background: transparent;\n color: currentColor;\n cursor: pointer;\n padding: var(--viking-space-half);\n border-radius: var(--viking-radius-pill);\n transition: var(--viking-transition-interactive);\n margin-left: calc(var(--viking-space-half) * -1);\n position: relative;\n }\n .viking-badge-remove::before {\n content: \"\";\n position: absolute;\n inset: 50%;\n width: var(--viking-touch-target-min);\n height: var(--viking-touch-target-min);\n transform: translate(-50%, -50%);\n }\n .viking-badge-remove:hover {\n background: color-mix(in srgb, currentColor 12%, transparent);\n }\n .viking-badge-remove:focus-visible {\n outline: var(--viking-ring-width) solid var(--viking-ring);\n outline-offset: var(--viking-ring-offset);\n }\n .viking-badge-remove:active {\n transform: scale(var(--viking-state-active-scale));\n }\n `,\n ],\n})\nexport class VikingBadge {\n readonly tone = input<VikingTone | \"neutral\">(\"neutral\");\n readonly size = input<VikingSize>(\"base\");\n readonly icon = input<VikingIconName | null>(null);\n readonly removable = input<boolean>(false);\n\n readonly removed = output<void>();\n\n protected readonly hostClass = computed(() => ({\n [`viking-badge-${this.tone()}`]: this.tone() !== \"neutral\",\n \"viking-badge-sm\": this.size() !== \"base\",\n }));\n}\n","import { ChangeDetectionStrategy, Component, input } from \"@angular/core\";\n\n/** viking-bar — vertical bar for mock charts and decorative grids. */\n@Component({\n selector: \"viking-bar\",\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: \"viking-bar\",\n \"[style.--viking-bar-height.%]\": \"height()\",\n },\n template: \"\",\n styles: [\n `\n :host {\n display: block;\n flex: 1;\n height: calc(var(--viking-bar-height, 50) * 1%);\n background: linear-gradient(\n 180deg,\n var(--viking-accent),\n var(--viking-accent-strong, var(--viking-info))\n );\n border-radius: 4px 4px 0 0;\n opacity: 0.85;\n }\n `,\n ],\n})\nexport class VikingBar {\n readonly height = input<number>(50);\n}\n","import { ChangeDetectionStrategy, Component, input } from \"@angular/core\";\nimport { VikingIcon } from \"../icon/icon\";\n\n/**\n * viking-brand — logo + wordmark lockup.\n * Project a custom logo (img/svg) or fall back to a monogram tile.\n */\n@Component({\n selector: \"viking-brand\",\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [VikingIcon],\n template: `\n @if (logoSrc()) {\n <img\n class=\"viking-brand-logo\"\n [src]=\"logoSrc()\"\n [alt]=\"name() + ' logo'\"\n />\n } @else {\n <viking-icon\n name=\"drakkar\"\n [size]=\"28\"\n color=\"accent\"\n class=\"viking-brand-mark-icon\"\n />\n }\n <span class=\"viking-brand-name\">{{ name() }}</span>\n <ng-content />\n `,\n styles: [\n `\n :host {\n display: inline-flex;\n align-items: center;\n gap: var(--viking-space-1);\n font-family: var(--viking-font-family);\n color: var(--viking-text);\n text-decoration: none;\n }\n .viking-brand-logo {\n height: var(--viking-space-3);\n width: auto;\n }\n .viking-brand-mark-icon {\n color: var(--viking-accent);\n flex-shrink: 0;\n }\n .viking-brand-name {\n font-weight: 700;\n font-size: var(--viking-font-size-ui);\n letter-spacing: var(--header-letter-spacing, -0.02em);\n white-space: nowrap;\n }\n `,\n ],\n})\nexport class VikingBrand {\n readonly name = input.required<string>();\n readonly logoSrc = input<string | null>(null);\n}\n","import { ChangeDetectionStrategy, Component, input } from \"@angular/core\";\nimport { VikingIcon } from \"../icon/icon\";\n\nexport interface VikingBreadcrumb {\n label: string;\n href?: string;\n}\n\n/**\n * viking-breadcrumbs — hierarchy navigation.\n */\n@Component({\n selector: \"viking-breadcrumbs\",\n imports: [VikingIcon],\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <nav aria-label=\"Breadcrumb\">\n <ol class=\"viking-breadcrumbs\">\n @for (item of items(); track item.label; let last = $last) {\n <li class=\"viking-breadcrumb\">\n @if (item.href && !last) {\n <a [href]=\"item.href\">{{ item.label }}</a>\n } @else {\n <span [attr.aria-current]=\"last ? 'page' : null\">{{\n item.label\n }}</span>\n }\n @if (!last) {\n <viking-icon name=\"chevron-right\" [size]=\"16\" />\n }\n </li>\n }\n </ol>\n </nav>\n `,\n styles: [\n `\n .viking-breadcrumbs {\n display: flex;\n align-items: center;\n flex-wrap: wrap;\n gap: var(--viking-space-1);\n margin: 0;\n padding: 0;\n list-style: none;\n font-family: var(--viking-font-family);\n font-size: var(--viking-font-size);\n }\n .viking-breadcrumb {\n display: inline-flex;\n align-items: center;\n gap: var(--viking-space-1);\n color: var(--viking-text-muted);\n }\n .viking-breadcrumb a {\n color: var(--viking-text-muted);\n text-decoration: none;\n border-bottom: 1px solid transparent;\n padding: var(--viking-space-half) 0;\n transition: var(--viking-transition-interactive);\n }\n .viking-breadcrumb a:hover {\n color: var(--viking-accent-strong);\n border-bottom-color: var(--viking-accent-strong);\n }\n .viking-breadcrumb a:focus-visible {\n color: var(--viking-accent-strong);\n outline: var(--viking-ring-width) solid var(--viking-ring);\n outline-offset: var(--viking-ring-offset);\n border-radius: var(--viking-radius-xs);\n }\n .viking-breadcrumb span[aria-current=\"page\"] {\n color: var(--viking-text);\n font-weight: var(--viking-font-weight-semibold);\n }\n `,\n ],\n})\nexport class VikingBreadcrumbs {\n readonly items = input.required<VikingBreadcrumb[]>();\n}\n","import { ChangeDetectionStrategy, Component } from \"@angular/core\";\n\n/**\n * viking-button-group — fuses buttons with shared borders\n *.\n */\n@Component({\n selector: \"viking-button-group\",\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: { role: \"group\" },\n template: `<ng-content />`,\n styles: [\n `\n :host {\n display: inline-flex;\n border-radius: var(--viking-radius);\n box-shadow: var(--viking-shadow-sm);\n overflow: hidden;\n }\n :host ::ng-deep viking-button:not(:first-child) .viking-btn {\n border-top-left-radius: 0;\n border-bottom-left-radius: 0;\n margin-left: -1px;\n }\n :host ::ng-deep viking-button:not(:last-child) .viking-btn {\n border-top-right-radius: 0;\n border-bottom-right-radius: 0;\n }\n :host ::ng-deep viking-button .viking-btn {\n box-shadow: none;\n min-width: 0;\n }\n :host ::ng-deep viking-button .viking-btn:hover,\n :host ::ng-deep viking-button .viking-btn:focus-visible {\n z-index: 1;\n }\n `,\n ],\n})\nexport class VikingButtonGroup {}\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n model,\n signal,\n} from \"@angular/core\";\nimport { VikingControl, provideVikingCva } from \"../core/cva\";\nimport { VikingIcon } from \"../icon/icon\";\n\ninterface CalendarDay {\n iso: string;\n day: number;\n inMonth: boolean;\n isToday: 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];\n\nconst WEEKDAYS = [\"Su\", \"Mo\", \"Tu\", \"We\", \"Th\", \"Fr\", \"Sa\"];\n\nconst toIso = (date: Date): string =>\n `${date.getFullYear()}-${String(date.getMonth() + 1).padStart(2, \"0\")}-${String(date.getDate()).padStart(2, \"0\")}`;\n\n/**\n * viking-calendar — month-grid date selection.\n * Value is an ISO date string (YYYY-MM-DD). ControlValueAccessor-compatible.\n */\n@Component({\n selector: \"viking-calendar\",\n imports: [VikingIcon],\n providers: [provideVikingCva(VikingCalendar)],\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <div class=\"viking-calendar\">\n <div class=\"viking-calendar-header\">\n <button\n type=\"button\"\n class=\"viking-calendar-nav\"\n aria-label=\"Previous month\"\n (click)=\"move(-1)\"\n >\n <viking-icon name=\"chevron-left\" [size]=\"18\" />\n </button>\n <span class=\"viking-calendar-title\" aria-live=\"polite\">{{\n title()\n }}</span>\n <button\n type=\"button\"\n class=\"viking-calendar-nav\"\n aria-label=\"Next month\"\n (click)=\"move(1)\"\n >\n <viking-icon name=\"chevron-right\" [size]=\"18\" />\n </button>\n </div>\n <div\n class=\"viking-calendar-grid\"\n role=\"group\"\n [attr.aria-label]=\"title()\"\n >\n @for (weekday of weekdays; track weekday) {\n <span class=\"viking-calendar-weekday\" aria-hidden=\"true\">{{\n weekday\n }}</span>\n }\n @for (day of days(); track day.iso) {\n <button\n type=\"button\"\n class=\"viking-calendar-day\"\n [class.viking-outside]=\"!day.inMonth\"\n [class.viking-today]=\"day.isToday\"\n [class.viking-selected]=\"day.iso === value()\"\n [attr.aria-label]=\"day.iso\"\n [attr.aria-pressed]=\"day.iso === value()\"\n (click)=\"pick(day)\"\n >\n {{ day.day }}\n </button>\n }\n </div>\n </div>\n `,\n styles: [\n `\n .viking-calendar {\n display: inline-block;\n padding: var(--viking-space-2);\n background: var(--viking-surface);\n border: 1px solid var(--viking-border);\n border-radius: var(--viking-radius);\n font-family: var(--viking-font-family);\n }\n .viking-calendar-header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: var(--viking-space-1);\n margin-bottom: var(--viking-space-1);\n }\n .viking-calendar-title {\n font-size: var(--viking-font-size);\n font-weight: 600;\n color: var(--viking-text);\n }\n .viking-calendar-nav {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n min-width: var(--viking-touch-target-comfort);\n min-height: var(--viking-touch-target-comfort);\n border: 1px solid var(--viking-border);\n background: transparent;\n color: var(--viking-text-muted);\n border-radius: var(--viking-radius-sm);\n padding: var(--viking-space-half);\n cursor: pointer;\n transition: var(--viking-transition-interactive);\n -webkit-tap-highlight-color: transparent;\n }\n .viking-calendar-nav:hover {\n color: var(--viking-text);\n border-color: var(--viking-accent-strong);\n background: var(--viking-accent-soft);\n }\n .viking-calendar-nav:active {\n transform: scale(var(--viking-state-active-scale));\n }\n .viking-calendar-nav:focus-visible {\n outline: var(--viking-ring-width) solid var(--viking-ring);\n outline-offset: var(--viking-ring-offset);\n }\n .viking-calendar-grid {\n display: grid;\n grid-template-columns: repeat(7, 1fr);\n gap: var(--viking-space-half);\n }\n .viking-calendar-weekday {\n text-align: center;\n font-size: var(--viking-font-size);\n color: var(--viking-text-muted);\n padding: calc(var(--viking-space-1) / 2);\n }\n .viking-calendar-day {\n width: 100%;\n aspect-ratio: 1;\n min-width: var(--viking-control-height-sm);\n min-height: var(--viking-control-height-sm);\n display: inline-flex;\n align-items: center;\n justify-content: center;\n border: 1px solid transparent;\n background: transparent;\n color: var(--viking-text);\n border-radius: var(--viking-radius-sm);\n font-family: var(--viking-font-family);\n font-size: var(--viking-font-size-sm);\n cursor: pointer;\n transition: var(--viking-transition-interactive);\n font-variant-numeric: tabular-nums;\n -webkit-tap-highlight-color: transparent;\n }\n .viking-calendar-day:hover:not(.viking-selected) {\n background: var(--viking-accent-soft);\n }\n .viking-calendar-day:active:not(.viking-selected) {\n transform: scale(var(--viking-state-active-scale));\n }\n .viking-calendar-day:focus-visible {\n outline: var(--viking-ring-width) solid var(--viking-ring);\n outline-offset: var(--viking-ring-offset);\n }\n .viking-outside {\n color: var(--viking-text-muted);\n }\n .viking-today {\n border-color: var(--viking-accent-strong);\n }\n .viking-selected {\n background: var(--viking-accent);\n color: var(--viking-accent-content);\n font-weight: 600;\n }\n `,\n ],\n})\nexport class VikingCalendar extends VikingControl<string | null> {\n readonly value = model<string | null>(null);\n\n protected readonly weekdays = WEEKDAYS;\n protected readonly viewDate = signal(new Date());\n\n protected readonly title = computed(() => {\n const view = this.viewDate();\n return `${MONTHS[view.getMonth()]} ${view.getFullYear()}`;\n });\n\n protected readonly days = computed<CalendarDay[]>(() => {\n const view = this.viewDate();\n const year = view.getFullYear();\n const month = view.getMonth();\n const firstOfMonth = new Date(year, month, 1);\n const start = new Date(year, month, 1 - firstOfMonth.getDay());\n const todayIso = toIso(new Date());\n return Array.from({ length: 42 }, (_, index) => {\n const date = new Date(\n start.getFullYear(),\n start.getMonth(),\n start.getDate() + index,\n );\n const iso = toIso(date);\n return {\n iso,\n day: date.getDate(),\n inMonth: date.getMonth() === month,\n isToday: iso === todayIso,\n };\n });\n });\n\n writeValue(value: string | null): void {\n this.value.set(value);\n if (value) {\n const [year, month] = value.split(\"-\").map(Number);\n this.viewDate.set(new Date(year, month - 1, 1));\n }\n }\n\n protected move = (delta: number): void => {\n this.viewDate.update(\n (view) => new Date(view.getFullYear(), view.getMonth() + delta, 1),\n );\n };\n\n protected pick = (day: CalendarDay): void => {\n this.value.set(day.iso);\n this.onChange(day.iso);\n this.onTouched();\n };\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n input,\n output,\n signal,\n} from \"@angular/core\";\nimport { VikingIcon } from \"../icon/icon\";\nimport { VikingIconName } from \"../../core/icons\";\nimport { VikingTone } from \"../../core/types\";\n\nconst TONE_ICONS: Record<string, VikingIconName> = {\n accent: \"info\",\n secondary: \"info\",\n success: \"check-circle\",\n warning: \"alert-triangle\",\n danger: \"alert-circle\",\n info: \"info\",\n muted: \"info\",\n};\n\n/**\n * viking-callout — highlighted message block.\n */\n@Component({\n selector: \"viking-callout\",\n imports: [VikingIcon],\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n role: \"note\",\n \"[class]\": \"'viking-callout-' + tone()\",\n \"[style.display]\": \"dismissed() ? 'none' : null\",\n },\n template: `\n <viking-icon\n class=\"viking-callout-icon\"\n [name]=\"resolvedIcon()\"\n [size]=\"22\"\n />\n <div class=\"viking-callout-body\">\n @if (heading()) {\n <p class=\"viking-callout-heading\">{{ heading() }}</p>\n }\n <div class=\"viking-callout-text\"><ng-content /></div>\n </div>\n @if (dismissible()) {\n <button\n type=\"button\"\n class=\"viking-callout-close\"\n aria-label=\"Dismiss\"\n (click)=\"dismiss()\"\n >\n <viking-icon name=\"x\" [size]=\"18\" />\n </button>\n }\n `,\n styles: [\n `\n :host {\n display: flex;\n align-items: flex-start;\n gap: var(--viking-space-2);\n padding: var(--viking-space-2);\n border-radius: var(--viking-radius-lg);\n border: 1px solid var(--viking-border);\n border-left-width: 3px;\n background: var(--viking-surface-alt);\n color: var(--viking-text);\n font-family: var(--viking-font-family);\n font-size: var(--viking-font-size-sm);\n box-shadow: var(--viking-shadow-sm);\n animation: viking-fade-in var(--viking-duration)\n var(--viking-ease-default);\n }\n .viking-callout-icon {\n margin-top: 2px;\n color: var(--viking-text-muted);\n }\n :host(.viking-callout-accent) {\n border-color: var(--viking-accent);\n border-left-color: var(--viking-accent);\n background: var(--viking-accent-soft);\n }\n :host(.viking-callout-accent) .viking-callout-icon {\n color: var(--viking-accent);\n }\n :host(.viking-callout-secondary) {\n border-color: color-mix(\n in srgb,\n var(--viking-accent-secondary) 45%,\n transparent\n );\n border-left-color: var(--viking-accent-secondary);\n background: var(--viking-accent-secondary-soft);\n }\n :host(.viking-callout-secondary) .viking-callout-icon {\n color: var(--viking-accent-secondary);\n }\n :host(.viking-callout-info) {\n border-color: color-mix(in srgb, var(--viking-info) 45%, transparent);\n border-left-color: var(--viking-info);\n background: color-mix(\n in srgb,\n var(--viking-info) 10%,\n var(--viking-surface)\n );\n }\n :host(.viking-callout-info) .viking-callout-icon {\n color: var(--viking-info);\n }\n :host(.viking-callout-success) {\n border-color: color-mix(\n in srgb,\n var(--viking-success) 45%,\n transparent\n );\n border-left-color: var(--viking-success);\n background: color-mix(\n in srgb,\n var(--viking-success) 10%,\n var(--viking-surface)\n );\n }\n :host(.viking-callout-success) .viking-callout-icon {\n color: var(--viking-success);\n }\n :host(.viking-callout-warning) {\n border-color: color-mix(\n in srgb,\n var(--viking-warning) 45%,\n transparent\n );\n border-left-color: var(--viking-warning);\n background: color-mix(\n in srgb,\n var(--viking-warning) 12%,\n var(--viking-surface)\n );\n }\n :host(.viking-callout-warning) .viking-callout-icon {\n color: var(--viking-warning);\n }\n :host(.viking-callout-danger) {\n border-color: var(--viking-danger);\n border-left-color: var(--viking-danger);\n background: color-mix(\n in srgb,\n var(--viking-crimson-600) 22%,\n var(--viking-surface)\n );\n color: var(--viking-white);\n }\n :host(.viking-callout-danger) .viking-callout-icon {\n color: var(--viking-crimson-400);\n }\n :host(.viking-callout-danger) .viking-callout-text {\n color: var(--viking-white);\n }\n .viking-callout-body {\n flex: 1;\n min-width: 0;\n }\n .viking-callout-heading {\n margin: 0 0 calc(var(--viking-space-1) / 2);\n font-size: var(--viking-font-size-ui);\n font-weight: 700;\n }\n .viking-callout-text {\n color: var(--viking-text);\n line-height: 1.55;\n }\n .viking-callout-close {\n border: none;\n background: transparent;\n color: var(--viking-text-muted);\n cursor: pointer;\n padding: var(--viking-space-half);\n border-radius: var(--viking-radius);\n display: inline-flex;\n transition: var(--viking-transition-interactive);\n }\n .viking-callout-close:hover {\n color: var(--viking-text);\n background: color-mix(in srgb, currentColor 8%, transparent);\n }\n .viking-callout-close:focus-visible {\n outline: var(--viking-ring-width) solid var(--viking-ring);\n outline-offset: 1px;\n }\n `,\n ],\n})\nexport class VikingCallout {\n readonly tone = input<VikingTone>(\"accent\");\n readonly heading = input<string>(\"\");\n readonly icon = input<VikingIconName | null>(null);\n readonly dismissible = input<boolean>(false);\n\n readonly closed = output<void>();\n\n protected readonly dismissed = signal(false);\n protected readonly resolvedIcon = computed<VikingIconName>(\n () => this.icon() ?? TONE_ICONS[this.tone()] ?? \"info\",\n );\n\n protected dismiss = (): void => {\n this.dismissed.set(true);\n this.closed.emit();\n };\n}\n","import { ChangeDetectionStrategy, Component, input } from \"@angular/core\";\n\n/**\n * viking-skeleton — loading placeholder.\n */\n@Component({\n selector: \"viking-skeleton\",\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n \"aria-hidden\": \"true\",\n \"[class.viking-skeleton-circle]\": \"shape() === 'circle'\",\n \"[style.width]\": \"width()\",\n \"[style.height]\": \"height()\",\n },\n template: ``,\n styles: [\n `\n :host {\n display: block;\n border-radius: var(--viking-radius-sm);\n background: linear-gradient(\n 100deg,\n var(--viking-surface-alt) 38%,\n color-mix(\n in srgb,\n var(--viking-text-muted) 10%,\n var(--viking-surface-alt)\n )\n 50%,\n var(--viking-surface-alt) 62%\n );\n background-size: 200% 100%;\n animation: viking-shimmer 1.6s ease-in-out infinite;\n }\n :host(.viking-skeleton-circle) {\n border-radius: var(--viking-radius-pill);\n }\n @media (prefers-reduced-motion: reduce) {\n :host {\n animation: none;\n background: var(--viking-surface-alt);\n }\n }\n `,\n ],\n})\nexport class VikingSkeleton {\n readonly shape = input<\"line\" | \"rect\" | \"circle\">(\"line\");\n readonly width = input<string>(\"100%\");\n readonly height = input<string>(\"var(--viking-font-size-sm)\");\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n input,\n} from \"@angular/core\";\nimport { VikingSkeleton } from \"../skeleton/skeleton\";\n\n/**\n * viking-card — surface container.\n * Compose with viking-card-header / viking-card-footer for structured layouts.\n */\n@Component({\n selector: \"viking-card\",\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n \"[class.viking-card-interactive]\": \"interactive()\",\n \"[class.viking-card-loading]\": \"loading()\",\n \"[class.viking-card-compact]\": \"compact()\",\n \"[attr.aria-busy]\": \"loading() ? 'true' : null\",\n \"[attr.tabindex]\": \"interactive() ? 0 : null\",\n \"[attr.role]\": \"interactive() ? 'button' : null\",\n \"(keydown.enter)\": \"onActivate($event)\",\n \"(keydown.space)\": \"onActivate($event)\",\n },\n template: `\n @if (loading()) {\n <div class=\"viking-card-skeleton\" aria-hidden=\"true\">\n <viking-skeleton height=\"var(--viking-font-size-lg)\" width=\"45%\" />\n <viking-skeleton height=\"var(--viking-font-size-sm)\" width=\"80%\" />\n <viking-skeleton height=\"var(--viking-font-size-sm)\" width=\"65%\" />\n </div>\n } @else {\n <ng-content />\n }\n `,\n imports: [VikingSkeleton],\n styles: [\n `\n :host {\n display: block;\n background: var(--viking-surface-recipe, var(--viking-surface));\n border: 1px solid var(--viking-border);\n border-radius: var(--viking-radius-lg);\n box-shadow: var(--viking-shadow-sm);\n padding: var(--viking-card-padding, var(--viking-space-3));\n color: var(--viking-text);\n transition: var(--viking-transition-interactive);\n position: relative;\n overflow: hidden;\n min-width: 0;\n }\n :host(.viking-card-headerless) .viking-card-header,\n :host(.viking-card-headerless) viking-card-header {\n display: none;\n }\n :host::before {\n content: \"\";\n position: absolute;\n inset: 0 0 auto;\n height: 1px;\n background: linear-gradient(\n 90deg,\n transparent,\n color-mix(\n in srgb,\n var(--viking-metallic-200)\n var(--viking-surface-hairline-strength, 22%),\n transparent\n ),\n transparent\n );\n pointer-events: none;\n }\n :host(.viking-card-interactive) {\n cursor: pointer;\n }\n :host(.viking-card-interactive):hover {\n border-color: var(--viking-accent-strong);\n box-shadow: var(--viking-shadow-hover);\n transform: translateY(var(--viking-state-hover-lift));\n }\n :host(.viking-card-interactive):active {\n transform: translateY(0) scale(var(--viking-state-active-scale));\n box-shadow: var(--viking-shadow-md);\n }\n :host(.viking-card-interactive):focus-visible {\n outline: var(--viking-ring-width) solid var(--viking-ring);\n outline-offset: var(--viking-ring-offset);\n }\n :host(.viking-card-loading) {\n pointer-events: none;\n }\n :host(.viking-card-compact) {\n padding: var(--viking-card-padding-compact, var(--viking-space-2));\n }\n .viking-card-skeleton {\n display: flex;\n flex-direction: column;\n gap: var(--viking-space-1-5);\n }\n `,\n ],\n})\nexport class VikingCard {\n readonly interactive = input<boolean>(false);\n readonly loading = input<boolean>(false);\n readonly compact = input<boolean>(false);\n\n constructor(private readonly host: ElementRef<HTMLElement>) {}\n\n protected onActivate = (event: Event): void => {\n if (!this.interactive() || this.loading()) {\n return;\n }\n event.preventDefault();\n this.host.nativeElement.click();\n };\n}\n\n/** Header row for viking-card. */\n@Component({\n selector: \"viking-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(--viking-space-2);\n padding-bottom: var(--viking-space-2);\n margin-bottom: var(--viking-space-2);\n border-bottom: 1px solid var(--viking-border-subtle);\n }\n /* Support slotted left meta + right actions uniformly */\n :host ::ng-deep > * {\n display: inline-flex;\n align-items: center;\n }\n\n :host ::ng-deep viking-card-title {\n flex: 1 1 auto;\n min-width: 0;\n }\n `,\n ],\n})\nexport class VikingCardHeader {}\n\n/** Footer row for viking-card. */\n@Component({\n selector: \"viking-card-footer\",\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `<ng-content />`,\n styles: [\n `\n :host {\n display: flex;\n align-items: center;\n gap: var(--viking-space-2);\n padding-top: var(--viking-space-2);\n margin-top: var(--viking-space-2);\n border-top: 1px solid var(--viking-border-subtle);\n }\n `,\n ],\n})\nexport class VikingCardFooter {}\n","import { ChangeDetectionStrategy, Component, input } from \"@angular/core\";\nimport { VikingIcon } from \"../icon/icon\";\nimport {\n VikingIconColorToken,\n VikingIconName,\n VikingIconSizePreset,\n} from \"../../core/icons\";\n\nexport type VikingIconBadgeTone =\n | \"default\"\n | \"success\"\n | \"warning\"\n | \"danger\"\n | \"info\";\n\n/**\n * viking-icon-badge — consistent icon backdrop for empty states, callouts, and metric headers.\n */\n@Component({\n selector: \"viking-icon-badge\",\n imports: [VikingIcon],\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: \"viking-icon-badge\",\n \"[class.viking-icon-badge-success]\": \"tone() === 'success'\",\n \"[class.viking-icon-badge-warning]\": \"tone() === 'warning'\",\n \"[class.viking-icon-badge-danger]\": \"tone() === 'danger'\",\n \"[class.viking-icon-badge-info]\": \"tone() === 'info'\",\n \"[attr.aria-hidden]\": 'decorative() ? \"true\" : null',\n },\n template: `\n <viking-icon\n [name]=\"icon()\"\n [size]=\"size()\"\n [sizePreset]=\"sizePreset()\"\n [color]=\"color()\"\n [variant]=\"variant()\"\n />\n `,\n styles: [\n `\n :host {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n width: var(--viking-icon-badge-size, var(--viking-space-6));\n height: var(--viking-icon-badge-size, var(--viking-space-6));\n padding: var(--viking-icon-badge-padding, var(--viking-space-half));\n box-sizing: border-box;\n border-radius: var(--viking-radius-lg);\n background: var(--viking-accent-soft);\n color: var(--viking-accent-strong);\n box-shadow: var(--viking-shadow-sm);\n }\n\n :host(.viking-icon-badge-success) {\n background: color-mix(in srgb, var(--viking-success) 14%, transparent);\n color: var(--viking-success);\n }\n\n :host(.viking-icon-badge-warning) {\n background: color-mix(in srgb, var(--viking-warning) 14%, transparent);\n color: var(--viking-warning);\n }\n\n :host(.viking-icon-badge-danger) {\n background: color-mix(in srgb, var(--viking-danger) 14%, transparent);\n color: var(--viking-danger);\n }\n\n :host(.viking-icon-badge-info) {\n background: color-mix(in srgb, var(--viking-info) 14%, transparent);\n color: var(--viking-info);\n }\n `,\n ],\n})\nexport class VikingIconBadge {\n readonly icon = input.required<VikingIconName>();\n readonly tone = input<VikingIconBadgeTone>(\"default\");\n readonly size = input<number | undefined>(28);\n readonly sizePreset = input<VikingIconSizePreset | null>(null);\n readonly color = input<VikingIconColorToken | string | undefined>(undefined);\n readonly variant = input<\"outline\" | \"filled\">(\"outline\");\n readonly decorative = input<boolean>(true);\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n input,\n} from \"@angular/core\";\n\n/**\n * viking-heading — consistent heading sizes.\n */\n@Component({\n selector: \"viking-heading\",\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n role: \"heading\",\n \"[attr.aria-level]\": \"ariaLevel()\",\n \"[class]\": \"hostClass()\",\n },\n template: `<ng-content />`,\n styles: [\n `\n :host {\n display: block;\n font-family: var(--viking-font-family);\n font-weight: 600;\n color: var(--viking-text);\n letter-spacing: var(--header-letter-spacing, -0.02em);\n font-size: var(--viking-font-size-ui);\n line-height: 1.25;\n }\n :host(.viking-heading-sm) {\n font-size: var(--viking-font-size-sm);\n }\n :host(.viking-heading-lg) {\n font-size: var(--viking-font-size);\n }\n :host(.viking-heading-xl) {\n font-size: var(--viking-font-size-lg);\n font-weight: 700;\n }\n `,\n ],\n})\nexport class VikingHeading {\n readonly size = input<\"sm\" | \"base\" | \"lg\" | \"xl\">(\"base\");\n readonly level = input<1 | 2 | 3 | 4>(3);\n\n protected readonly ariaLevel = computed(() => this.level());\n protected readonly hostClass = computed(\n () => `viking-heading-${this.size()}`,\n );\n}\n","import { ChangeDetectionStrategy, Component, input } from \"@angular/core\";\nimport { VikingIconBadge, VikingIconBadgeTone } from \"../icon-badge/icon-badge\";\nimport { VikingIconName } from \"../../core/icons\";\nimport { VikingHeading } from \"../typography/heading\";\n\n/**\n * viking-card-title — card header title row with tokenized icon badge + heading.\n * Compose inside viking-card-header for premium, consistent section titles.\n */\n@Component({\n selector: \"viking-card-title\",\n imports: [VikingIconBadge, VikingHeading],\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: { class: \"viking-card-title\" },\n template: `\n <viking-icon-badge [icon]=\"icon()\" [tone]=\"tone()\" [size]=\"iconSize()\" />\n <viking-heading [level]=\"level()\" [size]=\"size()\">\n <ng-content />\n </viking-heading>\n `,\n styles: [\n `\n :host {\n display: flex;\n align-items: center;\n gap: var(--viking-space-1);\n flex: 1 1 auto;\n min-width: 0;\n margin: 0;\n }\n\n :host ::ng-deep viking-heading {\n display: block;\n flex: 1 1 auto;\n min-width: 0;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n margin: 0;\n }\n `,\n ],\n})\nexport class VikingCardTitle {\n readonly icon = input.required<VikingIconName>();\n readonly tone = input<VikingIconBadgeTone>(\"default\");\n readonly level = input<1 | 2 | 3 | 4>(2);\n readonly size = input<\"sm\" | \"base\" | \"lg\" | \"xl\">(\"xl\");\n readonly iconSize = input<number>(20);\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n contentChildren,\n signal,\n viewChild,\n} from \"@angular/core\";\nimport { VikingIcon } from \"../icon/icon\";\n\n/** A single slide inside viking-carousel. */\n@Component({\n selector: \"viking-carousel-slide\",\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: { role: \"group\", \"aria-roledescription\": \"slide\" },\n template: `<ng-content />`,\n styles: [\n `\n :host {\n flex: 0 0 100%;\n scroll-snap-align: start;\n display: block;\n box-sizing: border-box;\n }\n `,\n ],\n})\nexport class VikingCarouselSlide {}\n\n/**\n * viking-carousel — scroll-snap slideshow.\n */\n@Component({\n selector: \"viking-carousel\",\n imports: [VikingIcon],\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: { \"aria-roledescription\": \"carousel\" },\n template: `\n <div\n class=\"viking-carousel-viewport\"\n #viewport\n tabindex=\"0\"\n role=\"group\"\n aria-label=\"Carousel slides\"\n (scroll)=\"onScroll()\"\n >\n <ng-content />\n </div>\n <div class=\"viking-carousel-controls\">\n <button\n type=\"button\"\n class=\"viking-carousel-nav\"\n aria-label=\"Previous slide\"\n [disabled]=\"index() <= 0\"\n (click)=\"goTo(index() - 1)\"\n >\n <viking-icon name=\"chevron-left\" [size]=\"18\" />\n </button>\n <div class=\"viking-carousel-dots\">\n @for (slide of slides(); track $index) {\n <button\n type=\"button\"\n class=\"viking-carousel-dot\"\n [class.viking-active]=\"$index === index()\"\n [attr.aria-label]=\"'Go to slide ' + ($index + 1)\"\n [attr.aria-current]=\"$index === index()\"\n (click)=\"goTo($index)\"\n ></button>\n }\n </div>\n <button\n type=\"button\"\n class=\"viking-carousel-nav\"\n aria-label=\"Next slide\"\n [disabled]=\"index() >= slides().length - 1\"\n (click)=\"goTo(index() + 1)\"\n >\n <viking-icon name=\"chevron-right\" [size]=\"18\" />\n </button>\n </div>\n `,\n styles: [\n `\n :host {\n display: block;\n }\n .viking-carousel-viewport {\n display: flex;\n overflow-x: auto;\n scroll-snap-type: x mandatory;\n scroll-behavior: smooth;\n border-radius: var(--viking-radius);\n border: 1px solid var(--viking-border);\n background: var(--viking-surface);\n scrollbar-width: none;\n }\n .viking-carousel-viewport::-webkit-scrollbar {\n display: none;\n }\n .viking-carousel-viewport:focus-visible {\n outline: var(--viking-ring-width) solid var(--viking-ring);\n outline-offset: var(--viking-ring-offset);\n }\n .viking-carousel-controls {\n display: flex;\n align-items: center;\n justify-content: center;\n gap: var(--viking-space-2);\n margin-top: var(--viking-space-1);\n }\n .viking-carousel-nav {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n min-width: var(--viking-touch-target-comfort);\n min-height: var(--viking-touch-target-comfort);\n border: 1px solid var(--viking-border-strong);\n background: var(--viking-surface);\n color: var(--viking-text);\n border-radius: var(--viking-radius-pill);\n padding: var(--viking-space-1);\n cursor: pointer;\n transition: var(--viking-transition-interactive);\n -webkit-tap-highlight-color: transparent;\n }\n .viking-carousel-nav:hover:not(:disabled) {\n border-color: var(--viking-accent-strong);\n background: var(--viking-accent-soft);\n box-shadow: var(--viking-shadow-sm);\n transform: translateY(var(--viking-state-hover-lift));\n }\n .viking-carousel-nav:active:not(:disabled) {\n transform: translateY(0) scale(var(--viking-state-active-scale));\n }\n .viking-carousel-nav:focus-visible {\n outline: var(--viking-ring-width) solid var(--viking-ring);\n outline-offset: var(--viking-ring-offset);\n }\n .viking-carousel-nav:disabled {\n opacity: 0.45;\n cursor: not-allowed;\n }\n .viking-carousel-dots {\n display: flex;\n gap: var(--viking-space-1);\n }\n .viking-carousel-dot {\n position: relative;\n width: var(--viking-space-1);\n height: var(--viking-space-1);\n border-radius: var(--viking-radius-pill);\n border: 1px solid var(--viking-border-strong);\n background: var(--viking-surface-alt);\n cursor: pointer;\n padding: 0;\n transition: var(--viking-transition-interactive);\n -webkit-tap-highlight-color: transparent;\n }\n .viking-carousel-dot::before {\n content: \"\";\n position: absolute;\n inset: 50%;\n width: var(--viking-touch-target-min);\n height: var(--viking-touch-target-min);\n transform: translate(-50%, -50%);\n }\n .viking-carousel-dot:hover:not(.viking-active) {\n border-color: var(--viking-accent-strong);\n background: var(--viking-accent-soft);\n }\n .viking-carousel-dot.viking-active {\n background: var(--viking-accent);\n border-color: var(--viking-accent);\n box-shadow: 0 0 0 2px var(--viking-accent-soft);\n }\n .viking-carousel-dot:focus-visible {\n outline: var(--viking-ring-width) solid var(--viking-ring);\n outline-offset: var(--viking-ring-offset);\n }\n `,\n ],\n})\nexport class VikingCarousel {\n private readonly viewport =\n viewChild.required<ElementRef<HTMLElement>>(\"viewport\");\n\n protected readonly slides = contentChildren(VikingCarouselSlide);\n protected readonly index = signal(0);\n\n protected goTo = (target: number): void => {\n const clamped = Math.min(this.slides().length - 1, Math.max(0, target));\n const element = this.viewport().nativeElement;\n element.scrollTo({\n left: clamped * element.clientWidth,\n behavior: \"smooth\",\n });\n this.index.set(clamped);\n };\n\n protected onScroll = (): void => {\n const element = this.viewport().nativeElement;\n if (element.clientWidth > 0) {\n this.index.set(Math.round(element.scrollLeft / element.clientWidth));\n }\n };\n}\n","/** Visible index window for chart zoom/pan (inclusive start, exclusive end). */\nexport interface ChartZoomWindow {\n start: number;\n end: number;\n}\n\nexport const fullChartWindow = (count: number): ChartZoomWindow => ({\n start: 0,\n end: Math.max(count, 1),\n});\n\n/** Clamp zoom window to valid bounds with a minimum visible span. */\nexport const clampChartWindow = (\n window: ChartZoomWindow,\n count: number,\n minSpan = 3,\n): ChartZoomWindow => {\n if (count <= 0) {\n return { start: 0, end: 0 };\n }\n const span = Math.max(minSpan, Math.min(count, window.end - window.start));\n let start = Math.max(0, Math.min(window.start, count - span));\n let end = start + span;\n if (end > count) {\n end = count;\n start = Math.max(0, end - span);\n }\n return { start, end };\n};\n\n/** Wheel delta → narrower/wider window centered on cursor fraction (0–1). */\nexport const zoomChartWindow = (\n current: ChartZoomWindow,\n count: number,\n cursorFraction: number,\n deltaY: number,\n minSpan = 3,\n): ChartZoomWindow => {\n if (count <= minSpan) {\n return fullChartWindow(count);\n }\n const span = current.end - current.start;\n const factor = deltaY < 0 ? 0.85 : 1.15;\n const nextSpan = Math.max(\n minSpan,\n Math.min(count, Math.round(span * factor)),\n );\n const anchor = current.start + span * cursorFraction;\n const raw: ChartZoomWindow = {\n start: Math.round(anchor - nextSpan * cursorFraction),\n end: Math.round(anchor - nextSpan * cursorFraction) + nextSpan,\n };\n return clampChartWindow(raw, count, minSpan);\n};\n\n/** Drag delta in data points → pan window. */\nexport const panChartWindow = (\n current: ChartZoomWindow,\n count: number,\n deltaPoints: number,\n minSpan = 3,\n): ChartZoomWindow =>\n clampChartWindow(\n { start: current.start - deltaPoints, end: current.end - deltaPoints },\n count,\n minSpan,\n );\n\n/** Slice series rows and category labels for the active window. */\nexport const sliceChartData = <T>(values: T[], window: ChartZoomWindow): T[] =>\n values.slice(window.start, window.end);\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n effect,\n input,\n signal,\n} from \"@angular/core\";\nimport {\n VikingChartCurve,\n VikingChartKind,\n VikingChartSeries,\n VikingDonutSegment,\n VikingTone,\n} from \"../../core/types\";\nimport {\n ChartZoomWindow,\n clampChartWindow,\n fullChartWindow,\n panChartWindow,\n sliceChartData,\n zoomChartWindow,\n} from \"./chart-zoom\";\n\ninterface ChartPath {\n name: string;\n tone: VikingTone;\n line: string;\n area: string;\n}\n\ninterface ChartPoint {\n x: number;\n y: number;\n tone: VikingTone;\n}\n\ninterface BarRect {\n x: number;\n y: number;\n width: number;\n height: number;\n tone: VikingTone;\n radiusTop: boolean;\n}\n\ninterface DonutSlice {\n label: string;\n tone: VikingTone;\n path: string;\n}\n\ninterface AxisLabel {\n x: number;\n y: number;\n text: string;\n anchor: \"start\" | \"middle\" | \"end\";\n}\n\ninterface TickMark {\n x: number;\n y1: number;\n y2: number;\n}\n\ninterface Gutter {\n top: number;\n right: number;\n bottom: number;\n left: number;\n}\n\nconst TONE_VARS: Record<VikingTone, string> = {\n accent: \"var(--viking-accent)\",\n secondary: \"var(--viking-accent-secondary)\",\n success: \"var(--viking-success)\",\n warning: \"var(--viking-warning)\",\n danger: \"var(--viking-danger)\",\n info: \"var(--viking-info)\",\n muted: \"var(--viking-text-muted)\",\n};\n\nconst WIDTH = 720;\nconst HEIGHT_DEFAULT = 240;\nconst HEIGHT_COMPACT = 200;\nconst HEIGHT_FILL = 400;\nconst HEIGHT_FILL_LINE = 240;\nconst HEIGHT_SPARKLINE = 48;\nconst BAR_WIDTH_MIN = 12;\nconst BAR_WIDTH_MAX = 96;\nconst SINGLE_BAR_WIDTH = 72;\nconst BAR_MIN_VISIBLE_HEIGHT_DEFAULT = 4;\nconst LABEL_MAX_DEFAULT = 10;\nconst LABEL_MAX_FILL = 18;\n\nconst resolveBarWidth = (\n slotWidth: number,\n count: number,\n widthPercent: number,\n): number => {\n if (count <= 1) {\n return SINGLE_BAR_WIDTH;\n }\n return Math.min(\n BAR_WIDTH_MAX,\n Math.max(BAR_WIDTH_MIN, slotWidth * (widthPercent / 100)),\n );\n};\n\nconst resolveBarHeight = (\n value: number,\n normalized: number,\n plotHeight: number,\n minVisible: number,\n): number => {\n if (value === 0) {\n return minVisible;\n }\n return Math.max(normalized * plotHeight, 0);\n};\n\nconst formatTick = (value: number): string => {\n if (value >= 1_000_000) {\n return `${(value / 1_000_000).toFixed(1)}M`;\n }\n if (value >= 10_000) {\n return `${Math.round(value / 1000)}K`;\n }\n if (value >= 1000) {\n return `${(value / 1000).toFixed(1)}K`;\n }\n if (Number.isInteger(value)) {\n return `${value}`;\n }\n return value.toFixed(value < 10 ? 1 : 0);\n};\n\nconst truncateLabel = (label: string, max = 10): string =>\n label.length > max ? `${label.slice(0, max - 1)}…` : label;\n\nconst parseGutter = (\n value: number | string | undefined,\n sparkline: boolean,\n): Gutter => {\n if (sparkline) {\n return { top: 0, right: 0, bottom: 0, left: 0 };\n }\n if (value === undefined || value === null) {\n return { top: 12, right: 20, bottom: 36, left: 48 };\n }\n if (typeof value === \"number\") {\n return { top: value, right: value, bottom: value, left: value };\n }\n const parts = value\n .trim()\n .split(/\\s+/)\n .map((part) => Number(part));\n if (parts.length === 1) {\n return { top: parts[0], right: parts[0], bottom: parts[0], left: parts[0] };\n }\n if (parts.length === 2) {\n return { top: parts[0], right: parts[1], bottom: parts[0], left: parts[1] };\n }\n if (parts.length === 3) {\n return { top: parts[0], right: parts[1], bottom: parts[2], left: parts[1] };\n }\n return { top: parts[0], right: parts[1], bottom: parts[2], left: parts[3] };\n};\n\nconst buildLinearPath = (points: { x: number; y: number }[]): string => {\n if (points.length === 0) {\n return \"\";\n }\n return `M${points.map((point) => `${point.x.toFixed(1)},${point.y.toFixed(1)}`).join(\" L\")}`;\n};\n\nconst buildSmoothPath = (points: { x: number; y: number }[]): string => {\n if (points.length < 3) {\n return buildLinearPath(points);\n }\n let path = `M${points[0].x.toFixed(1)},${points[0].y.toFixed(1)}`;\n for (let index = 0; index < points.length - 1; index += 1) {\n const current = points[index];\n const next = points[index + 1];\n const previous = points[index - 1] ?? current;\n const after = points[index + 2] ?? next;\n const cp1x = current.x + (next.x - previous.x) / 6;\n const cp1y = current.y + (next.y - previous.y) / 6;\n const cp2x = next.x - (after.x - current.x) / 6;\n const cp2y = next.y - (after.y - current.y) / 6;\n path += ` C${cp1x.toFixed(1)},${cp1y.toFixed(1)} ${cp2x.toFixed(1)},${cp2y.toFixed(1)} ${next.x.toFixed(1)},${next.y.toFixed(1)}`;\n }\n return path;\n};\n\n/**\n * viking-chart — zero-dependency native SVG charts styled after Viking UI.\n */\n@Component({\n selector: \"viking-chart\",\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n \"[class.viking-chart-fill-host]\": \"fill()\",\n \"[class.viking-chart-sparkline-host]\": \"kind() === 'sparkline'\",\n },\n template: `\n <figure\n class=\"viking-chart\"\n [class.viking-chart-fill]=\"fill()\"\n [class.viking-chart-compact]=\"compact() && !fill()\"\n [class.viking-chart-sparkline]=\"isSparkline()\"\n [class.viking-chart-has-legend]=\"legendVisible()\"\n [attr.aria-labelledby]=\"label() ? 'viking-chart-label-' + chartId : null\"\n [attr.aria-describedby]=\"\n summary() ? 'viking-chart-summary-' + chartId : null\n \"\n >\n @if (label()) {\n <figcaption class=\"sr-only\" [id]=\"'viking-chart-label-' + chartId\">\n {{ label() }}\n </figcaption>\n }\n @if (summary()) {\n <p class=\"sr-only\" [id]=\"'viking-chart-summary-' + chartId\">\n {{ summary() }}\n </p>\n }\n <div\n class=\"viking-chart-viewport\"\n [class.viking-chart-zoomable]=\"\n zoomable() && !isSparkline() && kind() !== 'donut'\n \"\n (wheel)=\"onWheel($event)\"\n (dblclick)=\"resetZoom()\"\n (pointerdown)=\"onPanStart($event)\"\n (pointermove)=\"onPanMove($event)\"\n (pointerup)=\"onPanEnd()\"\n (pointerleave)=\"onPanEnd()\"\n (pointercancel)=\"onPanEnd()\"\n >\n <svg\n [attr.viewBox]=\"'0 0 ' + width + ' ' + height()\"\n preserveAspectRatio=\"xMidYMid meet\"\n shape-rendering=\"geometricPrecision\"\n role=\"img\"\n [attr.aria-label]=\"label() || 'Chart'\"\n aria-hidden=\"true\"\n >\n @if (kind() === \"donut\") {\n @for (slice of donutSlices(); track slice.label) {\n <path\n class=\"viking-chart-donut-slice\"\n [attr.d]=\"slice.path\"\n [style.fill]=\"toneVar(slice.tone)\"\n />\n }\n @if (donutSlices().length > 0) {\n <circle\n class=\"viking-chart-donut-hole\"\n [attr.cx]=\"width / 2\"\n [attr.cy]=\"plotCy()\"\n [attr.r]=\"donutInnerRadius()\"\n />\n <text\n class=\"viking-chart-donut-total\"\n [attr.x]=\"width / 2\"\n [attr.y]=\"plotCy()\"\n text-anchor=\"middle\"\n dominant-baseline=\"central\"\n >\n {{ donutTotalLabel() }}\n </text>\n }\n } @else {\n <defs>\n <clipPath id=\"viking-plot-clip\">\n <rect\n [attr.x]=\"resolvedGutter().left\"\n [attr.y]=\"plotTop()\"\n [attr.width]=\"\n width - resolvedGutter().left - resolvedGutter().right\n \"\n [attr.height]=\"plotBottom() - plotTop()\"\n />\n </clipPath>\n </defs>\n @if (!isSparkline()) {\n @for (line of gridLines(); track line) {\n <line\n class=\"viking-chart-grid\"\n [attr.x1]=\"resolvedGutter().left\"\n [attr.x2]=\"width - resolvedGutter().right\"\n [attr.y1]=\"line\"\n [attr.y2]=\"line\"\n ></line>\n }\n <line\n class=\"viking-chart-axis-line\"\n [attr.x1]=\"resolvedGutter().left\"\n [attr.x2]=\"width - resolvedGutter().right\"\n [attr.y1]=\"plotBottom()\"\n [attr.y2]=\"plotBottom()\"\n ></line>\n @for (tick of yAxisLabels(); track tick.text + tick.y) {\n <text\n class=\"viking-chart-axis-y\"\n [attr.x]=\"resolvedGutter().left - 10\"\n [attr.y]=\"tick.y\"\n [attr.text-anchor]=\"tick.anchor\"\n dominant-baseline=\"middle\"\n >\n {{ tick.text }}\n </text>\n }\n @for (tick of xAxisLabels(); track tick.text + tick.x) {\n <text\n class=\"viking-chart-axis-x\"\n [attr.x]=\"tick.x\"\n [attr.y]=\"height() - 10\"\n [attr.text-anchor]=\"tick.anchor\"\n >\n {{ tick.text }}\n </text>\n }\n @for (mark of xTickMarks(); track mark.x) {\n <line\n class=\"viking-chart-tick\"\n [attr.x1]=\"mark.x\"\n [attr.x2]=\"mark.x\"\n [attr.y1]=\"mark.y1\"\n [attr.y2]=\"mark.y2\"\n ></line>\n }\n }\n @if (isBarKind()) {\n @for (\n bar of barRects();\n track bar.x + \"-\" + bar.y + \"-\" + bar.tone\n ) {\n <rect\n class=\"viking-chart-bar\"\n [attr.x]=\"bar.x\"\n [attr.y]=\"bar.y\"\n [attr.width]=\"bar.width\"\n [attr.height]=\"bar.height\"\n [style.fill]=\"toneVar(bar.tone)\"\n [attr.rx]=\"bar.radiusTop ? barRadius() : 0\"\n [attr.ry]=\"bar.radiusTop ? barRadius() : 0\"\n />\n }\n } @else {\n <g clip-path=\"url(#viking-plot-clip)\">\n @for (path of paths(); track path.name) {\n @if (renderArea()) {\n <path\n class=\"viking-chart-area\"\n [attr.d]=\"path.area\"\n [style.fill]=\"toneVar(path.tone)\"\n ></path>\n }\n <path\n class=\"viking-chart-line\"\n [attr.d]=\"path.line\"\n [style.stroke]=\"toneVar(path.tone)\"\n ></path>\n }\n @if (renderPoints()) {\n @for (\n point of linePoints();\n track point.x + \"-\" + point.y + \"-\" + point.tone\n ) {\n <circle\n class=\"viking-chart-point\"\n [attr.cx]=\"point.x\"\n [attr.cy]=\"point.y\"\n [attr.r]=\"pointRadius()\"\n [style.fill]=\"toneVar(point.tone)\"\n />\n }\n }\n </g>\n }\n }\n </svg>\n @if (zoomActive()) {\n <button\n type=\"button\"\n class=\"viking-chart-zoom-reset\"\n (click)=\"resetZoom()\"\n >\n Reset zoom\n </button>\n }\n </div>\n @if (legendVisible()) {\n <figcaption class=\"viking-chart-legend\">\n @if (kind() === \"donut\") {\n @for (item of segments(); track item.label) {\n @if (item.value > 0) {\n <span class=\"viking-chart-legend-item\">\n <span\n class=\"viking-chart-swatch\"\n [style.background]=\"toneVar(item.tone ?? 'accent')\"\n ></span>\n {{ item.label }}\n </span>\n }\n }\n } @else {\n @for (item of series(); track item.name) {\n <span class=\"viking-chart-legend-item\">\n <span\n class=\"viking-chart-swatch\"\n [style.background]=\"toneVar(item.tone ?? 'accent')\"\n ></span>\n {{ item.name }}\n </span>\n }\n }\n </figcaption>\n }\n </figure>\n `,\n styles: [\n `\n :host {\n display: block;\n width: 100%;\n }\n :host(.viking-chart-fill-host) {\n display: flex;\n flex-direction: column;\n flex: 1 1 auto;\n min-height: var(\n --viking-chart-fill-min-height,\n clamp(18rem, 36vw, 20rem)\n );\n height: 100%;\n }\n :host(.viking-chart-sparkline-host) {\n display: inline-block;\n width: auto;\n max-width: 100%;\n }\n :host(.viking-chart-wide) {\n display: block;\n width: 100%;\n }\n .viking-chart {\n margin: 0;\n font-family: var(--viking-font-family);\n overflow: hidden;\n width: 100%;\n max-width: 100%;\n container-type: inline-size;\n }\n .viking-chart:not(.viking-chart-fill):not(.viking-chart-sparkline) {\n aspect-ratio: var(--viking-chart-ratio, 3 / 1);\n min-height: var(--viking-chart-min-height, clamp(9.5rem, 22vw, 12rem));\n max-height: var(--viking-chart-max-height, clamp(13rem, 36vw, 17.5rem));\n height: auto;\n }\n .viking-chart-fill {\n flex: 1 1 auto;\n display: flex;\n flex-direction: column;\n align-items: stretch;\n justify-content: center;\n min-height: var(\n --viking-chart-fill-min-height,\n clamp(12rem, 28vw, 16rem)\n );\n max-height: var(\n --viking-chart-fill-max-height,\n clamp(14rem, 32vw, 18rem)\n );\n height: 100%;\n --viking-chart-axis-size: 13px;\n }\n .viking-chart-sparkline {\n width: 5rem;\n aspect-ratio: 3 / 1;\n }\n :host(.viking-chart-wide) .viking-chart-sparkline {\n width: 100%;\n aspect-ratio: auto;\n height: var(--viking-chart-sparkline-height, 2.5rem);\n }\n .viking-chart-viewport {\n position: relative;\n width: 100%;\n flex: 1 1 auto;\n display: flex;\n align-items: center;\n justify-content: center;\n min-height: 0;\n }\n .viking-chart-viewport.viking-chart-zoomable {\n cursor: grab;\n touch-action: none;\n }\n .viking-chart-viewport.viking-chart-zoomable:active {\n cursor: grabbing;\n }\n .viking-chart-zoom-reset {\n position: absolute;\n top: var(--viking-space-half);\n right: var(--viking-space-half);\n z-index: 2;\n padding: var(--viking-space-half) var(--viking-space-1);\n font-size: var(--viking-font-size-sm);\n font-family: var(--viking-font-family);\n color: var(--viking-text-muted);\n background: color-mix(in srgb, var(--viking-surface) 88%, transparent);\n border: 1px solid var(--viking-border);\n border-radius: var(--viking-radius-md);\n cursor: pointer;\n }\n .viking-chart-zoom-reset:focus-visible {\n outline: 2px solid var(--viking-ring);\n outline-offset: 2px;\n }\n svg {\n display: block;\n width: 100%;\n height: auto;\n max-width: 100%;\n background: transparent;\n overflow: visible;\n -webkit-backface-visibility: hidden;\n backface-visibility: hidden;\n }\n .viking-chart:not(.viking-chart-fill):not(.viking-chart-sparkline) svg {\n min-height: var(--viking-chart-min-height, clamp(9.5rem, 22vw, 12rem));\n max-height: var(--viking-chart-max-height, clamp(13rem, 36vw, 17.5rem));\n aspect-ratio: 720 / 240;\n }\n .viking-chart-fill svg {\n width: 100%;\n height: auto;\n min-height: 0;\n max-height: min(\n 100%,\n var(--viking-chart-fill-max-height, clamp(14rem, 32vw, 18rem))\n );\n aspect-ratio: 720 / 400;\n }\n .viking-chart-fill:not(.viking-chart-has-legend) svg {\n aspect-ratio: 720 / 240;\n }\n .viking-chart-sparkline svg {\n min-height: 0;\n border: none;\n }\n .viking-chart-compact svg {\n max-height: min(\n var(--viking-chart-max-height, clamp(13rem, 36vw, 17.5rem)),\n 13.75rem\n );\n }\n .viking-chart-grid {\n stroke: color-mix(in srgb, var(--viking-border) 55%, transparent);\n stroke-width: 1;\n }\n .viking-chart-axis-line,\n .viking-chart-tick {\n stroke: color-mix(in srgb, var(--viking-border) 85%, transparent);\n stroke-width: 1;\n }\n .viking-chart-axis-y,\n .viking-chart-axis-x {\n fill: var(--viking-text-muted);\n font-size: max(11px, var(--viking-chart-axis-size, 12px));\n font-family: var(--viking-font-family);\n }\n .viking-chart-line {\n fill: none;\n stroke-width: 2;\n stroke-linecap: round;\n stroke-linejoin: round;\n vector-effect: non-scaling-stroke;\n }\n .viking-chart-fill .viking-chart-line {\n stroke-width: 2.5;\n }\n .viking-chart-area {\n opacity: 0.32;\n stroke: none;\n }\n .viking-chart-fill .viking-chart-area {\n opacity: 0.38;\n }\n .viking-chart-point {\n stroke: var(--viking-surface);\n stroke-width: 2;\n vector-effect: non-scaling-stroke;\n }\n .viking-chart-bar {\n opacity: 1;\n }\n .viking-chart-donut-slice {\n stroke: var(--viking-surface);\n stroke-width: 2;\n }\n .viking-chart-donut-hole {\n fill: var(--viking-surface);\n }\n .viking-chart-donut-total {\n fill: var(--viking-text);\n font-size: max(12px, min(16px, 3.5cqw));\n font-weight: 700;\n font-family: var(--viking-font-family);\n }\n .viking-chart-fill .viking-chart-donut-total {\n font-size: max(16px, min(24px, 5cqw));\n }\n .viking-chart-legend {\n display: flex;\n flex-wrap: wrap;\n justify-content: center;\n gap: var(--viking-space-2) var(--viking-space-3);\n margin-top: var(--viking-space-2);\n font-size: calc(var(--viking-font-size) * 0.9);\n color: var(--viking-text-muted);\n }\n .viking-chart-fill .viking-chart-legend {\n margin-top: var(--viking-space-3);\n }\n .viking-chart-legend-item {\n display: inline-flex;\n align-items: center;\n gap: calc(var(--viking-space-1) / 1.5);\n line-height: 1.2;\n }\n .viking-chart-swatch {\n width: 10px;\n height: 10px;\n border-radius: 999px;\n display: inline-block;\n flex-shrink: 0;\n }\n .sr-only {\n position: absolute !important;\n width: 1px !important;\n height: 1px !important;\n padding: 0 !important;\n margin: -1px !important;\n overflow: hidden !important;\n clip: rect(0, 0, 0, 0) !important;\n white-space: nowrap !important;\n border: 0 !important;\n }\n `,\n ],\n})\nexport class VikingChart {\n protected readonly chartId = `vc-${Math.random().toString(36).slice(2, 9)}`;\n\n readonly kind = input<VikingChartKind>(\"line\");\n readonly series = input<VikingChartSeries[]>([{ name: \"Series\", data: [] }]);\n readonly categories = input<string[]>([]);\n readonly segments = input<VikingDonutSegment[]>([]);\n readonly label = input<string>(\"\");\n readonly showArea = input<boolean>(false);\n readonly compact = input<boolean>(false);\n readonly fill = input<boolean>(false);\n readonly curve = input<VikingChartCurve>(\"smooth\");\n readonly showPoints = input<boolean>(false);\n readonly pointRadius = input<number>(4);\n readonly barWidth = input<number>(85);\n readonly barRadius = input<number>(6);\n readonly barMinHeight = input<number>(BAR_MIN_VISIBLE_HEIGHT_DEFAULT);\n readonly gutter = input<number | string | undefined>(undefined);\n readonly tickCount = input<number>(4);\n readonly showLegend = input<boolean | undefined>(undefined);\n readonly summary = input<string>(\"\");\n /** Enable wheel zoom + drag pan on line/bar charts (Flux-style interaction). */\n readonly zoomable = input<boolean>(false);\n\n private readonly zoomWindow = signal<ChartZoomWindow | null>(null);\n private panStartX: number | null = null;\n private panStartWindow: ChartZoomWindow | null = null;\n\n constructor() {\n effect(() => {\n const count = this.series()[0]?.data.length ?? 0;\n if (count === 0) {\n this.zoomWindow.set(null);\n }\n });\n }\n\n /** Slice series/categories to the active zoom window. */\n protected readonly dataWindow = computed(() => {\n const count = this.series()[0]?.data.length ?? 0;\n const zoom = this.zoomWindow();\n if (\n !this.zoomable() ||\n !zoom ||\n this.isSparkline() ||\n this.kind() === \"donut\"\n ) {\n return fullChartWindow(count);\n }\n return clampChartWindow(zoom, count);\n });\n\n protected readonly effectiveSeries = computed(() => {\n const window = this.dataWindow();\n return this.series().map((item) => ({\n ...item,\n data: sliceChartData(item.data, window),\n }));\n });\n\n protected readonly effectiveCategories = computed(() =>\n sliceChartData(this.categories(), this.dataWindow()),\n );\n\n protected readonly zoomActive = computed(() => {\n const count = this.series()[0]?.data.length ?? 0;\n const window = this.dataWindow();\n return (\n this.zoomable() && count > 0 && (window.start > 0 || window.end < count)\n );\n });\n\n protected resetZoom = (): void => {\n this.zoomWindow.set(null);\n };\n\n protected onWheel = (event: WheelEvent): void => {\n if (!this.zoomable() || this.isSparkline() || this.kind() === \"donut\") {\n return;\n }\n event.preventDefault();\n const count = this.series()[0]?.data.length ?? 0;\n if (count <= 3) {\n return;\n }\n const current = this.zoomWindow() ?? fullChartWindow(count);\n const rect = (event.currentTarget as HTMLElement).getBoundingClientRect();\n const fraction = Math.min(\n 1,\n Math.max(0, (event.clientX - rect.left) / rect.width),\n );\n this.zoomWindow.set(\n zoomChartWindow(current, count, fraction, event.deltaY),\n );\n };\n\n protected onPanStart = (event: PointerEvent): void => {\n if (\n !this.zoomable() ||\n this.isSparkline() ||\n this.kind() === \"donut\" ||\n event.button !== 0\n ) {\n return;\n }\n const count = this.series()[0]?.data.length ?? 0;\n if (count <= 3) {\n return;\n }\n this.panStartX = event.clientX;\n this.panStartWindow = this.zoomWindow() ?? fullChartWindow(count);\n (event.currentTarget as HTMLElement).setPointerCapture(event.pointerId);\n };\n\n protected onPanMove = (event: PointerEvent): void => {\n if (this.panStartX === null || !this.panStartWindow) {\n return;\n }\n const count = this.series()[0]?.data.length ?? 0;\n const rect = (event.currentTarget as HTMLElement).getBoundingClientRect();\n const span = this.panStartWindow.end - this.panStartWindow.start;\n const deltaPx = event.clientX - this.panStartX;\n const deltaPoints = Math.round((deltaPx / rect.width) * span);\n this.zoomWindow.set(\n panChartWindow(this.panStartWindow, count, deltaPoints),\n );\n };\n\n protected onPanEnd = (): void => {\n this.panStartX = null;\n this.panStartWindow = null;\n };\n\n protected readonly width = WIDTH;\n\n protected readonly isSparkline = computed(() => this.kind() === \"sparkline\");\n\n protected readonly resolvedGutter = computed(() => {\n if (this.gutter() !== undefined && this.gutter() !== null) {\n return parseGutter(this.gutter(), this.isSparkline());\n }\n if (this.fill() && !this.isSparkline()) {\n return { top: 8, right: 8, bottom: 28, left: 36 };\n }\n return parseGutter(undefined, this.isSparkline());\n });\n\n protected readonly legendVisible = computed(() => {\n const explicit = this.showLegend();\n if (explicit !== undefined) {\n return explicit;\n }\n const kind = this.kind();\n if (kind === \"donut\") {\n return this.segments().some((item) => item.value > 0);\n }\n if (kind === \"sparkline\") {\n return false;\n }\n if (kind === \"grouped-bar\" || kind === \"stacked-bar\") {\n return this.series().length > 0;\n }\n return this.series().length > 1;\n });\n\n protected readonly height = computed(() => {\n if (this.isSparkline()) {\n return HEIGHT_SPARKLINE;\n }\n if (this.fill()) {\n if (this.kind() === \"donut\") {\n return WIDTH;\n }\n if (this.isLineKind()) {\n return HEIGHT_FILL_LINE;\n }\n return HEIGHT_FILL;\n }\n return this.compact() ? HEIGHT_COMPACT : HEIGHT_DEFAULT;\n });\n\n protected readonly preserveAspectRatio = computed(() => \"xMidYMid meet\");\n\n protected readonly plotBottom = computed(\n () => this.height() - this.resolvedGutter().bottom,\n );\n protected readonly plotTop = computed(() => this.resolvedGutter().top);\n protected readonly plotCy = computed(() => this.height() / 2);\n\n protected readonly donutInnerRadius = computed(() => {\n const plotH = this.plotBottom() - this.plotTop();\n const plotW =\n WIDTH - this.resolvedGutter().left - this.resolvedGutter().right;\n const outer = Math.min(plotW, plotH) / 2 - 6;\n return outer * 0.58;\n });\n\n protected readonly isBarKind = computed(() => {\n const kind = this.kind();\n return kind === \"bar\" || kind === \"grouped-bar\" || kind === \"stacked-bar\";\n });\n\n protected readonly isLineKind = computed(() => {\n const kind = this.kind();\n return kind === \"line\" || kind === \"area\";\n });\n\n protected readonly renderArea = computed(\n () => this.kind() === \"area\" || this.showArea() || this.isSparkline(),\n );\n\n protected readonly renderPoints = computed(\n () => this.showPoints() && !this.isSparkline() && !this.isBarKind(),\n );\n\n protected toneVar = (tone: VikingTone): string => TONE_VARS[tone];\n\n protected readonly valueRange = computed(() => {\n const kind = this.kind();\n const series = this.effectiveSeries();\n\n if (kind === \"stacked-bar\") {\n const count = series[0]?.data.length ?? 0;\n const sums = Array.from({ length: count }, (_, index) =>\n series.reduce((sum, item) => sum + (item.data[index] ?? 0), 0),\n );\n if (sums.length === 0) {\n return { min: 0, max: 1 };\n }\n const max = Math.max(...sums);\n return { min: 0, max: max || 1 };\n }\n\n const all = series.flatMap((item) => item.data);\n if (all.length === 0) {\n return { min: 0, max: 1 };\n }\n const dataMin = Math.min(...all);\n const dataMax = Math.max(...all);\n\n if (this.isSparkline()) {\n if (dataMax === dataMin) {\n const pad = Math.max(Math.abs(dataMax) * 0.12, 0.5);\n return { min: dataMax - pad, max: dataMax + pad };\n }\n const padding = Math.max((dataMax - dataMin) * 0.12, 0.5);\n return { min: dataMin - padding, max: dataMax + padding };\n }\n\n const min = Math.min(0, ...all);\n const max = Math.max(...all);\n return { min, max: max === min ? max + 1 : max };\n });\n\n protected readonly gridLines = computed(() => {\n const bottom = this.plotBottom();\n const top = this.plotTop();\n const count = this.tickCount();\n const lines: number[] = [];\n for (let index = 0; index <= count; index += 1) {\n lines.push(top + ((bottom - top) * index) / count);\n }\n return lines;\n });\n\n protected readonly yAxisLabels = computed<AxisLabel[]>(() => {\n const { min, max } = this.valueRange();\n const bottom = this.plotBottom();\n const top = this.plotTop();\n const count = this.tickCount();\n const labels: AxisLabel[] = [];\n\n for (let index = 0; index <= count; index += 1) {\n const value = max - ((max - min) * index) / count;\n const y = top + ((bottom - top) * index) / count;\n labels.push({ x: 0, y, text: formatTick(value), anchor: \"end\" });\n }\n\n return labels;\n });\n\n protected readonly xAxisLabels = computed<AxisLabel[]>(() => {\n if (this.kind() === \"donut\" || this.isSparkline()) {\n return [];\n }\n\n const primary = this.effectiveSeries()[0];\n const count = primary?.data.length ?? 0;\n if (count === 0) {\n return [];\n }\n\n const cats = this.effectiveCategories();\n const plotWidth =\n WIDTH - this.resolvedGutter().left - this.resolvedGutter().right;\n const maxLabels = this.fill() ? 8 : 6;\n const labelMax = this.fill() ? LABEL_MAX_FILL : LABEL_MAX_DEFAULT;\n const step = Math.max(1, Math.ceil(count / maxLabels));\n const labels: AxisLabel[] = [];\n\n for (let index = 0; index < count; index += step) {\n const x =\n this.resolvedGutter().left +\n (count === 1\n ? plotWidth / 2\n : (index / Math.max(1, count - 1)) * plotWidth);\n const text = cats[index]\n ? truncateLabel(cats[index], labelMax)\n : `${index + 1}`;\n labels.push({ x, y: this.height(), text, anchor: \"middle\" });\n }\n\n if ((count - 1) % step !== 0 && count > 1) {\n const last = count - 1;\n const x =\n this.resolvedGutter().left +\n (last / Math.max(1, count - 1)) * plotWidth;\n const text = cats[last]\n ? truncateLabel(cats[last], labelMax)\n : `${last + 1}`;\n if (!labels.some((item) => item.text === text)) {\n labels.push({ x, y: this.height(), text, anchor: \"middle\" });\n }\n }\n\n return labels;\n });\n\n protected readonly xTickMarks = computed<TickMark[]>(() => {\n const bottom = this.plotBottom();\n return this.xAxisLabels().map((label) => ({\n x: label.x,\n y1: bottom,\n y2: bottom + 5,\n }));\n });\n\n protected readonly paths = computed<ChartPath[]>(() => {\n const all = this.effectiveSeries().flatMap((item) => item.data);\n if (all.length === 0) {\n return [];\n }\n\n const { min, max } = this.valueRange();\n const range = max - min || 1;\n const bottom = this.plotBottom();\n const top = this.plotTop();\n const plotHeight = bottom - top;\n const plotWidth =\n WIDTH - this.resolvedGutter().left - this.resolvedGutter().right;\n const buildPath =\n this.curve() === \"smooth\" ? buildSmoothPath : buildLinearPath;\n\n return this.effectiveSeries().map((item) => {\n const points = item.data.map((value, index) => {\n const x =\n this.resolvedGutter().left +\n (index / Math.max(1, item.data.length - 1)) * plotWidth;\n const y = bottom - ((value - min) / range) * plotHeight;\n return { x, y };\n });\n const line = buildPath(points);\n const area = `${line} L${WIDTH - this.resolvedGutter().right},${bottom} L${this.resolvedGutter().left},${bottom} Z`;\n return { name: item.name, tone: item.tone ?? \"accent\", line, area };\n });\n });\n\n protected readonly linePoints = computed<ChartPoint[]>(() => {\n const all = this.effectiveSeries().flatMap((item) => item.data);\n if (all.length === 0) {\n return [];\n }\n\n const { min, max } = this.valueRange();\n const range = max - min || 1;\n const bottom = this.plotBottom();\n const top = this.plotTop();\n const plotHeight = bottom - top;\n const plotWidth =\n WIDTH - this.resolvedGutter().left - this.resolvedGutter().right;\n\n return this.effectiveSeries().flatMap((item) =>\n item.data.map((value, index) => {\n const x =\n this.resolvedGutter().left +\n (index / Math.max(1, item.data.length - 1)) * plotWidth;\n const y = bottom - ((value - min) / range) * plotHeight;\n return { x, y, tone: item.tone ?? \"accent\" };\n }),\n );\n });\n\n protected readonly barRects = computed<BarRect[]>(() => {\n const kind = this.kind();\n if (kind === \"stacked-bar\") {\n return this.stackedBarRects();\n }\n if (kind === \"grouped-bar\") {\n return this.groupedBarRects();\n }\n return this.singleBarRects();\n });\n\n private readonly singleBarRects = computed<BarRect[]>(() => {\n const primary = this.effectiveSeries()[0];\n if (!primary?.data.length) {\n return [];\n }\n\n const { min, max } = this.valueRange();\n const range = max - min || 1;\n const bottom = this.plotBottom();\n const top = this.plotTop();\n const plotHeight = bottom - top;\n const plotWidth =\n WIDTH - this.resolvedGutter().left - this.resolvedGutter().right;\n const widthPercent = this.barWidth();\n const slotWidth = plotWidth / primary.data.length;\n const barWidth = resolveBarWidth(\n slotWidth,\n primary.data.length,\n widthPercent,\n );\n\n const minVisible = this.barMinHeight();\n\n return primary.data.map((value, index) => {\n const normalized = (value - min) / range;\n const height = resolveBarHeight(\n value,\n normalized,\n plotHeight,\n minVisible,\n );\n const x =\n this.resolvedGutter().left +\n index * slotWidth +\n (slotWidth - barWidth) / 2;\n const y = bottom - height;\n return {\n x,\n y,\n width: barWidth,\n height,\n tone: primary.tone ?? \"accent\",\n radiusTop: true,\n };\n });\n });\n\n private readonly groupedBarRects = computed<BarRect[]>(() => {\n const series = this.effectiveSeries();\n const count = series[0]?.data.length ?? 0;\n if (!count) {\n return [];\n }\n\n const { min, max } = this.valueRange();\n const range = max - min || 1;\n const bottom = this.plotBottom();\n const top = this.plotTop();\n const plotHeight = bottom - top;\n const plotWidth =\n WIDTH - this.resolvedGutter().left - this.resolvedGutter().right;\n const groupWidth = plotWidth / count;\n const widthPercent = this.barWidth();\n const groupBarWidth = resolveBarWidth(groupWidth, count, widthPercent);\n const barWidth = Math.max(3, groupBarWidth / series.length);\n const rects: BarRect[] = [];\n\n for (let index = 0; index < count; index += 1) {\n const groupStart = this.resolvedGutter().left + index * groupWidth;\n const groupInner = groupBarWidth;\n const groupOffset = (groupWidth - groupInner) / 2;\n\n const minVisible = this.barMinHeight();\n\n series.forEach((item, seriesIndex) => {\n const value = item.data[index] ?? 0;\n const normalized = (value - min) / range;\n const height = resolveBarHeight(\n value,\n normalized,\n plotHeight,\n minVisible,\n );\n const x = groupStart + groupOffset + seriesIndex * barWidth;\n const y = bottom - height;\n rects.push({\n x,\n y,\n width: Math.max(3, barWidth - 2),\n height,\n tone: item.tone ?? \"accent\",\n radiusTop: true,\n });\n });\n }\n\n return rects;\n });\n\n private readonly stackedBarRects = computed<BarRect[]>(() => {\n const series = this.effectiveSeries();\n const count = series[0]?.data.length ?? 0;\n if (!count) {\n return [];\n }\n\n const { max } = this.valueRange();\n const range = max || 1;\n const bottom = this.plotBottom();\n const top = this.plotTop();\n const plotHeight = bottom - top;\n const plotWidth =\n WIDTH - this.resolvedGutter().left - this.resolvedGutter().right;\n const widthPercent = this.barWidth();\n const slotWidth = plotWidth / count;\n const barWidth = resolveBarWidth(slotWidth, count, widthPercent);\n const rects: BarRect[] = [];\n\n for (let index = 0; index < count; index += 1) {\n let cursor = bottom;\n const x =\n this.resolvedGutter().left +\n index * slotWidth +\n (slotWidth - barWidth) / 2;\n\n series.forEach((item, seriesIndex) => {\n const value = item.data[index] ?? 0;\n const height = Math.max(0, (value / range) * plotHeight);\n cursor -= height;\n rects.push({\n x,\n y: cursor,\n width: barWidth,\n height,\n tone: item.tone ?? \"accent\",\n radiusTop: seriesIndex === series.length - 1,\n });\n });\n }\n\n return rects;\n });\n\n protected readonly donutTotalLabel = computed(() => {\n const total = this.segments()\n .filter((item) => item.value > 0)\n .reduce((sum, item) => sum + item.value, 0);\n return formatTick(total);\n });\n\n protected readonly donutSlices = computed<DonutSlice[]>(() => {\n const items = this.segments().filter((item) => item.value > 0);\n const total = items.reduce((sum, item) => sum + item.value, 0);\n if (total <= 0) {\n return [];\n }\n\n const cx = WIDTH / 2;\n const cy = this.plotCy();\n const plotH = this.plotBottom() - this.plotTop();\n const plotW =\n WIDTH - this.resolvedGutter().left - this.resolvedGutter().right;\n const outer = Math.min(plotW, plotH) / 2 - 6;\n const inner = outer * 0.58;\n let cursor = -Math.PI / 2;\n\n return items.map((item) => {\n const angle = (item.value / total) * Math.PI * 2;\n const start = cursor;\n const end = cursor + angle;\n cursor = end;\n\n if (items.length === 1) {\n const path = [\n `M ${cx - outer} ${cy}`,\n `A ${outer} ${outer} 0 1 1 ${cx + outer} ${cy}`,\n `A ${outer} ${outer} 0 1 1 ${cx - outer} ${cy}`,\n `M ${cx - inner} ${cy}`,\n `A ${inner} ${inner} 0 1 0 ${cx + inner} ${cy}`,\n `A ${inner} ${inner} 0 1 0 ${cx - inner} ${cy}`,\n \"Z\",\n ].join(\" \");\n return { label: item.label, tone: item.tone ?? \"accent\", path };\n }\n\n const x1 = cx + outer * Math.cos(start);\n const y1 = cy + outer * Math.sin(start);\n const x2 = cx + outer * Math.cos(end);\n const y2 = cy + outer * Math.sin(end);\n const x3 = cx + inner * Math.cos(end);\n const y3 = cy + inner * Math.sin(end);\n const x4 = cx + inner * Math.cos(start);\n const y4 = cy + inner * Math.sin(start);\n const large = angle > Math.PI ? 1 : 0;\n const path = `M ${x1} ${y1} A ${outer} ${outer} 0 ${large} 1 ${x2} ${y2} L ${x3} ${y3} A ${inner} ${inner} 0 ${large} 0 ${x4} ${y4} Z`;\n return { label: item.label, tone: item.tone ?? \"accent\", path };\n });\n });\n}\n","import { ChangeDetectionStrategy, Component, input } from \"@angular/core\";\nimport { vikingUid } from \"../../core/uid\";\n\n/**\n * viking-field — label / description / error wrapper for any control\n *.\n * The projected control is associated with the label by wrapping.\n */\n@Component({\n selector: \"viking-field\",\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: { \"[class.viking-field-invalid]\": \"!!error()\" },\n template: `\n <!-- The projected control lives inside the label, which associates it implicitly. -->\n <!-- eslint-disable-next-line @angular-eslint/template/label-has-associated-control -->\n <label class=\"viking-field-label-wrap\">\n @if (label()) {\n <span class=\"viking-field-label\" [id]=\"labelId\">\n {{ label() }}\n @if (required()) {\n <span class=\"viking-field-required\" aria-hidden=\"true\">*</span>\n }\n </span>\n }\n <ng-content />\n </label>\n @if (description() && !error()) {\n <p class=\"viking-field-description\" [id]=\"descriptionId\">\n {{ description() }}\n </p>\n }\n @if (error()) {\n <p class=\"viking-field-error\" [id]=\"errorId\" role=\"alert\">\n {{ error() }}\n </p>\n }\n `,\n styles: [\n `\n :host {\n display: block;\n font-family: var(--viking-font-family);\n }\n :host(.viking-field-invalid) {\n animation: viking-shake var(--viking-duration-slow)\n var(--viking-ease-default);\n }\n .viking-field-label-wrap {\n display: flex;\n flex-direction: column;\n gap: var(--viking-space-half);\n }\n .viking-field-label {\n font-size: var(--viking-font-size-sm);\n font-weight: var(--viking-font-weight-semibold);\n color: var(--viking-text);\n letter-spacing: var(--viking-letter-spacing-wide);\n line-height: var(--viking-line-height-tight);\n }\n .viking-field-required {\n color: var(--viking-danger);\n margin-left: 2px;\n }\n .viking-field-description,\n .viking-field-error {\n margin: var(--viking-space-half) 0 0;\n font-size: var(--viking-font-size-sm);\n line-height: var(--viking-line-height-normal);\n }\n .viking-field-description {\n color: var(--viking-text-muted);\n }\n .viking-field-error {\n color: var(--viking-danger-text, var(--viking-danger));\n font-weight: var(--viking-font-weight-semibold);\n display: flex;\n align-items: center;\n gap: var(--viking-space-half);\n }\n .viking-field-error::before {\n content: \"\";\n width: 6px;\n height: 6px;\n border-radius: var(--viking-radius-pill);\n background: var(--viking-danger);\n flex-shrink: 0;\n }\n :host(.viking-field-invalid) ::ng-deep .viking-control {\n border-color: var(--viking-danger);\n box-shadow: 0 0 0 1px\n color-mix(in srgb, var(--viking-danger) 25%, transparent);\n }\n :host ::ng-deep viking-select,\n :host ::ng-deep viking-native-select {\n display: block;\n width: 100%;\n min-width: 0;\n }\n `,\n ],\n})\nexport class VikingField {\n readonly label = input<string>(\"\");\n readonly description = input<string>(\"\");\n readonly error = input<string>(\"\");\n readonly required = input<boolean>(false);\n\n protected readonly descriptionId = vikingUid(\"viking-field-description\");\n protected readonly errorId = vikingUid(\"viking-field-error\");\n protected readonly labelId = vikingUid(\"viking-field-label\");\n}\n","import { ChangeDetectionStrategy, Component, input } from \"@angular/core\";\n\n/**\n * viking-spinner — clinical loading indicator.\n */\n@Component({\n selector: \"viking-spinner\",\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n role: \"status\",\n \"aria-live\": \"polite\",\n \"[attr.aria-label]\": \"label()\",\n },\n template: `\n <svg\n class=\"viking-spinner-svg\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n [attr.width]=\"size()\"\n [attr.height]=\"size()\"\n aria-hidden=\"true\"\n >\n <circle class=\"viking-spinner-track\" cx=\"12\" cy=\"12\" r=\"9\" />\n <circle\n class=\"viking-spinner-arc\"\n cx=\"12\"\n cy=\"12\"\n r=\"9\"\n stroke-linecap=\"round\"\n />\n </svg>\n `,\n styles: [\n `\n :host {\n display: inline-flex;\n color: var(--viking-accent);\n }\n\n .viking-spinner-svg {\n --viking-spinner-stroke: 2;\n shape-rendering: geometricPrecision;\n }\n\n .viking-spinner-track,\n .viking-spinner-arc {\n fill: none;\n stroke-width: var(--viking-spinner-stroke);\n }\n\n .viking-spinner-track {\n stroke: color-mix(in srgb, currentColor 14%, transparent);\n }\n\n .viking-spinner-arc {\n stroke: currentColor;\n stroke-dasharray: 42 84;\n transform-origin: center;\n animation: viking-spin var(--viking-duration-slow)\n var(--viking-ease-default) infinite;\n }\n\n @media (prefers-reduced-motion: reduce) {\n .viking-spinner-arc {\n animation: none;\n stroke-dasharray: 56 84;\n }\n }\n `,\n ],\n})\nexport class VikingSpinner {\n readonly size = input<number>(20);\n readonly label = input<string>(\"Loading\");\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n CUSTOM_ELEMENTS_SCHEMA,\n input,\n model,\n output,\n} from \"@angular/core\";\nimport { VikingControl, provideVikingCva } from \"../core/cva\";\nimport { VikingIcon } from \"../icon/icon\";\nimport { VikingIconName } from \"../../core/icons\";\nimport { VikingSpinner } from \"../spinner/spinner\";\nimport { registerVikingElements } from \"../../web/index\";\nimport type { VikingInputWc } from \"../../web/input/viking-input-wc\";\n\nregisterVikingElements();\n\n/**\n * viking-input — thin Angular wrapper around `viking-input-wc`.\n * ControlValueAccessor-compatible.\n */\n@Component({\n selector: \"viking-input\",\n imports: [VikingIcon, VikingSpinner],\n schemas: [CUSTOM_ELEMENTS_SCHEMA],\n providers: [provideVikingCva(VikingInput)],\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <viking-input-wc\n [attr.type]=\"type()\"\n [attr.placeholder]=\"placeholder()\"\n [attr.value]=\"value()\"\n [attr.disabled]=\"isDisabled() ? '' : null\"\n [attr.loading]=\"loading() ? '' : null\"\n [attr.clearable]=\"clearable() ? '' : null\"\n [attr.autocomplete]=\"autocomplete() || null\"\n [attr.aria-label]=\"label() || placeholder() || 'Text input'\"\n (input)=\"onWcInput($event)\"\n (blur)=\"onTouched()\"\n (viking-cleared)=\"clear()\"\n >\n @if (icon()) {\n <viking-icon\n slot=\"leading\"\n class=\"viking-input-icon\"\n [name]=\"icon()!\"\n [size]=\"20\"\n />\n }\n @if (loading()) {\n <viking-spinner slot=\"trailing\" [size]=\"16\" label=\"Loading input\" />\n } @else if (iconTrailing()) {\n <viking-icon\n slot=\"trailing\"\n class=\"viking-input-icon\"\n [name]=\"iconTrailing()!\"\n [size]=\"20\"\n />\n }\n @if (kbd()) {\n <kbd slot=\"trailing\" class=\"viking-input-kbd\">{{ kbd() }}</kbd>\n }\n </viking-input-wc>\n `,\n styles: [\n `\n :host {\n display: block;\n }\n .viking-input-icon {\n color: var(--viking-text-muted);\n }\n .viking-input-kbd {\n font-family: var(--viking-font-family-mono);\n font-size: var(--viking-font-size-xs);\n color: var(--viking-text-muted);\n background: var(--viking-surface-alt);\n border: 1px solid var(--viking-border);\n border-radius: var(--viking-radius-xs);\n padding: 0 var(--viking-space-half);\n line-height: 1.4;\n }\n `,\n ],\n})\nexport class VikingInput extends VikingControl<string> {\n readonly value = model<string>(\"\");\n readonly type = input<string>(\"text\");\n readonly placeholder = input<string>(\"\");\n readonly label = input<string>(\"\");\n readonly icon = input<VikingIconName | null>(null);\n readonly iconTrailing = input<VikingIconName | null>(null);\n readonly kbd = input<string | null>(null);\n readonly clearable = input<boolean>(false);\n readonly loading = input<boolean>(false);\n readonly disabled = input<boolean>(false);\n readonly autocomplete = input<string>(\"\");\n\n readonly cleared = output<void>();\n\n protected isDisabled = (): boolean => this.disabled() || this.formDisabled();\n\n writeValue(value: string): void {\n this.value.set(value ?? \"\");\n }\n\n protected onWcInput = (event: Event): void => {\n const wc = event.currentTarget as VikingInputWc | null;\n const next = wc?.value ?? this.value();\n this.value.set(next);\n this.onChange(next);\n };\n\n protected clear = (): void => {\n this.value.set(\"\");\n this.onChange(\"\");\n this.cleared.emit();\n };\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n effect,\n input,\n model,\n viewChild,\n} from \"@angular/core\";\nimport { VikingIcon } from \"../icon/icon\";\n\n/**\n * viking-modal — dialog built on the native <dialog> element\n *. Toggle via the `open` model.\n */\n@Component({\n selector: \"viking-modal\",\n imports: [VikingIcon],\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <dialog\n #dialog\n class=\"viking-modal\"\n tabindex=\"-1\"\n [attr.aria-label]=\"heading() || 'Dialog'\"\n (close)=\"open.set(false)\"\n (click)=\"onBackdropClick($event)\"\n (keydown.escape)=\"dismissible() && open.set(false)\"\n >\n <div class=\"viking-modal-surface\">\n <header class=\"viking-modal-header\">\n @if (heading()) {\n <h2 class=\"viking-modal-heading\">{{ heading() }}</h2>\n }\n @if (dismissible()) {\n <button\n type=\"button\"\n class=\"viking-modal-close\"\n aria-label=\"Close dialog\"\n (click)=\"open.set(false)\"\n >\n <viking-icon name=\"x\" [size]=\"20\" />\n </button>\n }\n </header>\n <div class=\"viking-modal-body\"><ng-content /></div>\n <footer class=\"viking-modal-footer\">\n <ng-content select=\"[vikingModalActions]\" />\n </footer>\n </div>\n </dialog>\n `,\n styles: [\n `\n .viking-modal {\n padding: 0;\n border: 1px solid var(--viking-border-strong);\n border-radius: var(--viking-radius-lg);\n background: var(--viking-surface);\n color: var(--viking-text);\n box-shadow: var(--viking-shadow-lg);\n width: min(522px, calc(100vw - var(--viking-space-4)));\n animation: viking-modal-in var(--viking-duration)\n var(--viking-ease-default);\n overflow: hidden;\n }\n .viking-modal::backdrop {\n background: var(--viking-overlay-backdrop);\n backdrop-filter: blur(8px);\n animation: viking-backdrop-in var(--viking-duration-fast)\n var(--viking-ease-default);\n }\n .viking-modal-surface {\n display: flex;\n flex-direction: column;\n padding: var(--viking-space-3);\n gap: var(--viking-space-2);\n font-family: var(--viking-font-family);\n position: relative;\n }\n .viking-modal-surface::before {\n content: \"\";\n position: absolute;\n inset: 0 0 auto;\n height: 1px;\n background: linear-gradient(\n 90deg,\n transparent,\n color-mix(in srgb, var(--viking-metallic-200) 22%, transparent),\n transparent\n );\n pointer-events: none;\n }\n .viking-modal-header {\n display: flex;\n align-items: flex-start;\n justify-content: space-between;\n gap: var(--viking-space-2);\n padding-bottom: var(--viking-space-1);\n border-bottom: 1px solid var(--viking-border-subtle);\n }\n .viking-modal-heading {\n margin: 0;\n font-size: var(--viking-font-size-md);\n font-weight: var(--viking-font-weight-bold);\n letter-spacing: var(--viking-letter-spacing-tight);\n color: var(--viking-text);\n line-height: var(--viking-line-height-tight);\n }\n .viking-modal-close {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: var(--viking-control-height-sm);\n height: var(--viking-control-height-sm);\n border: 1px solid transparent;\n background: transparent;\n color: var(--viking-text-muted);\n cursor: pointer;\n padding: 0;\n border-radius: var(--viking-radius);\n transition: var(--viking-transition-interactive);\n flex-shrink: 0;\n }\n .viking-modal-close:hover {\n color: var(--viking-text);\n background: var(--viking-accent-soft);\n border-color: var(--viking-border-subtle);\n }\n .viking-modal-close:active {\n transform: scale(var(--viking-state-active-scale));\n }\n .viking-modal-close:focus-visible {\n outline: var(--viking-ring-width) solid var(--viking-ring);\n outline-offset: var(--viking-ring-offset);\n }\n .viking-modal-body {\n font-size: var(--viking-font-size);\n line-height: var(--viking-line-height-relaxed);\n color: var(--viking-text-muted);\n animation: viking-fade-in var(--viking-duration)\n var(--viking-ease-default);\n }\n .viking-modal-footer {\n display: flex;\n flex-wrap: wrap;\n justify-content: flex-end;\n align-items: center;\n gap: var(--viking-space-2);\n padding-top: var(--viking-space-2);\n border-top: 1px solid var(--viking-border-subtle);\n }\n .viking-modal-footer:empty {\n display: none;\n }\n /* Projected action wrappers keep buttons in a single slot — spread gap inside */\n :host ::ng-deep .viking-modal-footer [vikingModalActions] {\n display: flex;\n flex-wrap: nowrap;\n justify-content: flex-end;\n align-items: center;\n gap: var(--viking-space-2);\n width: 100%;\n }\n @media (prefers-reduced-motion: reduce) {\n .viking-modal {\n animation: none;\n }\n .viking-modal::backdrop {\n animation: none;\n }\n .viking-modal-body {\n animation: none;\n }\n }\n `,\n ],\n})\nexport class VikingModal {\n private readonly dialogRef =\n viewChild.required<ElementRef<HTMLDialogElement>>(\"dialog\");\n\n readonly open = model<boolean>(false);\n readonly heading = input<string>(\"\");\n readonly dismissible = input<boolean>(true);\n\n constructor(host: ElementRef<HTMLElement>) {\n effect(() => {\n const dialog = this.dialogRef().nativeElement;\n // showModal is unavailable during SSR; the dialog stays closed there.\n if (typeof dialog.showModal !== \"function\") {\n return;\n }\n if (this.open() && host.nativeElement.isConnected && !dialog.open) {\n dialog.showModal();\n } else if (!this.open() && dialog.open) {\n dialog.close();\n }\n });\n }\n\n protected onBackdropClick = (event: MouseEvent): void => {\n if (this.dismissible() && event.target === this.dialogRef().nativeElement) {\n this.open.set(false);\n }\n };\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n input,\n} from \"@angular/core\";\n\n/**\n * viking-text — body text with semantic variants.\n */\n@Component({\n selector: \"viking-text\",\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: { \"[class]\": \"hostClass()\" },\n template: `<ng-content />`,\n styles: [\n `\n :host {\n display: block;\n font-family: var(--viking-font-family);\n font-size: var(--viking-font-size);\n line-height: 1.65;\n color: var(--viking-text);\n }\n :host(.viking-text-inline) {\n display: inline;\n }\n :host(.viking-text-muted) {\n color: var(--viking-text-muted);\n }\n :host(.viking-text-strong) {\n font-weight: 600;\n }\n :host(.viking-text-accent) {\n color: var(--viking-accent);\n font-weight: 500;\n }\n `,\n ],\n})\nexport class VikingText {\n readonly variant = input<\"default\" | \"muted\" | \"strong\" | \"accent\">(\n \"default\",\n );\n readonly inline = input<boolean>(false);\n\n protected readonly hostClass = computed(() => ({\n [`viking-text-${this.variant()}`]: this.variant() !== \"default\",\n \"viking-text-inline\": this.inline(),\n }));\n}\n","import { Injectable, signal } from \"@angular/core\";\n\nexport type VikingDialogKind = \"confirm\" | \"search\" | \"onboarding\";\n\nexport interface VikingConfirmDialogData {\n title?: string;\n message: string;\n type?: \"alert\" | \"confirm\" | \"prompt\";\n confirmText?: string;\n confirmBtnText?: string;\n confirmBtnColor?: \"primary\" | \"warn\" | \"accent\";\n}\n\nexport interface VikingDialogState {\n kind: VikingDialogKind;\n data?: VikingConfirmDialogData & { force?: boolean };\n}\n\n/** Programmatic confirm / prompt / overlay orchestration for Viking-UI modals. */\n@Injectable({ providedIn: \"root\" })\nexport class VikingDialogService {\n readonly active = signal<VikingDialogState | null>(null);\n\n private confirmResolver: ((value: boolean) => void) | null = null;\n private onboardingResolver: ((value: boolean | undefined) => void) | null =\n null;\n\n openConfirm(data: VikingConfirmDialogData): Promise<boolean> {\n this.closeActive(false);\n return new Promise<boolean>((resolve) => {\n this.confirmResolver = resolve;\n this.active.set({ kind: \"confirm\", data });\n });\n }\n\n resolveConfirm(result: boolean): void {\n this.confirmResolver?.(result);\n this.confirmResolver = null;\n this.active.set(null);\n }\n\n openSearch(): void {\n if (this.active()?.kind === \"search\") {\n return;\n }\n this.closeActive(false);\n this.active.set({ kind: \"search\" });\n }\n\n closeSearch(): void {\n if (this.active()?.kind === \"search\") {\n this.active.set(null);\n }\n }\n\n openOnboarding(force = false): Promise<boolean | undefined> {\n this.closeActive(false);\n return new Promise<boolean | undefined>((resolve) => {\n this.onboardingResolver = resolve;\n this.active.set({ kind: \"onboarding\", data: { message: \"\", force } });\n });\n }\n\n resolveOnboarding(result?: boolean): void {\n this.onboardingResolver?.(result);\n this.onboardingResolver = null;\n this.active.set(null);\n }\n\n closeActive(cancelPending = true): void {\n if (cancelPending) {\n this.confirmResolver?.(false);\n this.onboardingResolver?.(undefined);\n }\n this.confirmResolver = null;\n this.onboardingResolver = null;\n this.active.set(null);\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n signal,\n} from \"@angular/core\";\nimport { FormsModule } from \"@angular/forms\";\nimport { VikingButton } from \"../button/button\";\nimport { VikingField } from \"../field/field\";\nimport { VikingIcon } from \"../icon/icon\";\nimport { VikingInput } from \"../input/input\";\nimport { VikingModal } from \"../modal/modal\";\nimport { VikingText } from \"../typography/text\";\nimport type { VikingIconName } from \"../../core/icons\";\nimport { VikingConfirmDialogData, VikingDialogService } from \"./dialog.service\";\n\n/**\n * viking-confirm-dialog — alert / confirm / prompt modal wired to VikingDialogService.\n */\n@Component({\n selector: \"viking-confirm-dialog\",\n imports: [\n FormsModule,\n VikingModal,\n VikingButton,\n VikingField,\n VikingInput,\n VikingText,\n VikingIcon,\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n @if (data(); as dialogData) {\n <viking-modal\n [open]=\"open()\"\n [heading]=\"heading()\"\n (openChange)=\"onOpenChange($event)\"\n >\n <div class=\"viking-confirm-body\">\n <div class=\"viking-confirm-title-row\">\n <viking-icon [name]=\"iconName()\" [size]=\"24\" />\n <viking-text>{{ dialogData.message }}</viking-text>\n </div>\n @if (dialogData.type === \"prompt\" && dialogData.confirmText) {\n <viking-field\n label=\"Verification text\"\n [description]=\"'Type ' + dialogData.confirmText + ' to proceed'\"\n >\n <viking-input\n [ngModel]=\"inputValue()\"\n (ngModelChange)=\"inputValue.set($event)\"\n autocomplete=\"off\"\n (keyup.enter)=\"onConfirm()\"\n />\n </viking-field>\n }\n </div>\n <div vikingModalActions>\n @if (dialogData.type !== \"alert\") {\n <viking-button variant=\"outline\" (pressed)=\"onCancel()\"\n >Cancel</viking-button\n >\n }\n <viking-button\n [variant]=\"\n dialogData.confirmBtnColor === 'warn' ? 'danger' : 'primary'\n \"\n [disabled]=\"!isValid()\"\n [icon]=\"\n dialogData.type === 'alert'\n ? 'check-circle'\n : dialogData.confirmBtnColor === 'warn'\n ? 'trash'\n : 'check'\n \"\n (pressed)=\"onConfirm()\"\n >\n {{\n dialogData.confirmBtnText ||\n (dialogData.type === \"alert\" ? \"OK\" : \"Confirm\")\n }}\n </viking-button>\n </div>\n </viking-modal>\n }\n `,\n styles: [\n `\n .viking-confirm-body {\n display: flex;\n flex-direction: column;\n gap: var(--viking-space-2);\n }\n .viking-confirm-title-row {\n display: flex;\n align-items: center;\n gap: var(--viking-space-2);\n }\n `,\n ],\n})\nexport class VikingConfirmDialog {\n constructor(private readonly vikingDialog: VikingDialogService) {}\n\n protected readonly inputValue = signal<string>(\"\");\n\n protected readonly data = computed(() => {\n const active = this.vikingDialog.active();\n return active?.kind === \"confirm\"\n ? (active.data as VikingConfirmDialogData)\n : null;\n });\n\n protected readonly open = computed(() => this.data() !== null);\n\n protected readonly heading = computed(() => {\n const data = this.data();\n if (!data) return \"\";\n return (\n data.title ??\n (data.type === \"alert\"\n ? \"Notice\"\n : data.type === \"prompt\"\n ? \"Verification Required\"\n : \"Confirm Action\")\n );\n });\n\n protected readonly iconName = computed((): VikingIconName => {\n const data = this.data();\n if (!data) return \"info\";\n if (data.type === \"alert\") return \"info\";\n if (data.confirmBtnColor === \"warn\") return \"alert-triangle\";\n return \"info\";\n });\n\n protected readonly isValid = computed(() => {\n const data = this.data();\n if (!data || data.type !== \"prompt\" || !data.confirmText) {\n return true;\n }\n return this.inputValue() === data.confirmText;\n });\n\n protected onCancel = (): void => {\n this.inputValue.set(\"\");\n this.vikingDialog.resolveConfirm(false);\n };\n\n protected onConfirm = (): void => {\n if (!this.isValid()) return;\n this.inputValue.set(\"\");\n this.vikingDialog.resolveConfirm(true);\n };\n\n protected onOpenChange = (next: boolean): void => {\n if (!next) {\n this.onCancel();\n }\n };\n}\n\nexport type { VikingConfirmDialogData };\n","import { ChangeDetectionStrategy, Component, input } from \"@angular/core\";\n\n/**\n * viking-chart-card-header — shared label / value / trend header for analytics chart cards.\n */\n@Component({\n selector: \"viking-chart-card-header\",\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: { class: \"chart-custom-header\" },\n template: `\n <div class=\"chart-custom-title\">{{ title() }}</div>\n @if (hasData()) {\n <div class=\"chart-custom-value\">{{ value() }}</div>\n @if (trend()) {\n <div class=\"chart-custom-trend\">{{ trend() }}</div>\n }\n } @else {\n <div class=\"chart-custom-value chart-value-muted\">{{ emptyLabel() }}</div>\n }\n `,\n styles: [\n `\n :host {\n display: flex;\n flex-direction: column;\n align-items: flex-start;\n gap: var(--viking-space-half, 4px);\n padding: var(--viking-space-2, 16px) var(--viking-space-3, 24px)\n var(--viking-space-1, 8px);\n width: 100%;\n box-sizing: border-box;\n flex-shrink: 0;\n border-bottom: 1px solid var(--viking-border-subtle);\n margin-bottom: 0;\n }\n\n .chart-custom-title {\n color: var(--viking-text-muted, var(--text-muted));\n font-size: var(--viking-font-size-ui, 14px);\n font-family: var(--viking-font-family);\n letter-spacing: var(--viking-letter-spacing-wide, 0.025em);\n font-weight: var(--viking-font-weight-semibold, 600);\n margin: 0;\n }\n\n .chart-custom-value {\n color: var(--viking-text, var(--text-color));\n font-size: var(--viking-font-size-lg, 20px);\n font-family: var(--viking-font-family);\n font-weight: var(--viking-font-weight-bold, 700);\n line-height: var(--viking-line-height-tight, 1.25);\n margin: 0;\n }\n\n .chart-custom-trend {\n color: var(--color-primary);\n font-size: var(--viking-font-size-sm, 14px);\n font-family: var(--viking-font-family);\n font-weight: var(--viking-font-weight-semibold, 600);\n letter-spacing: 0.02em;\n margin: 0;\n }\n\n .chart-value-muted {\n font-size: 1.125rem !important;\n font-weight: var(--viking-font-weight-semibold, 600) !important;\n color: var(--text-muted) !important;\n letter-spacing: var(--viking-letter-spacing-caps, 0.05em);\n text-transform: uppercase;\n }\n `,\n ],\n})\nexport class VikingChartCardHeader {\n readonly title = input.required<string>();\n readonly value = input<string>(\"\");\n readonly emptyLabel = input<string>(\"Awaiting signal\");\n readonly trend = input<string>(\"\");\n readonly hasData = input<boolean>(false);\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n ViewEncapsulation,\n input,\n} from \"@angular/core\";\nimport { VikingIcon } from \"../icon/icon\";\nimport { VikingIconName } from \"../../core/icons\";\n\n/**\n * viking-icon-heading — icon + title row with shared vertical alignment.\n * Use in bento cards, integration tiles, and docs panels.\n */\n@Component({\n selector: \"viking-icon-heading\",\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n imports: [VikingIcon],\n host: {\n class: \"viking-icon-heading\",\n \"[class.viking-icon-heading--lg]\": 'size() === \"lg\"',\n },\n template: `\n <span class=\"viking-icon-heading__icon\" aria-hidden=\"true\">\n <viking-icon [name]=\"icon()\" [size]=\"24\" color=\"accent\" />\n </span>\n @if (headingLevel() === \"h2\") {\n <h2 class=\"viking-icon-heading__title\"><ng-content /></h2>\n } @else {\n <h3 class=\"viking-icon-heading__title\"><ng-content /></h3>\n }\n `,\n})\nexport class VikingIconHeading {\n readonly icon = input.required<VikingIconName>();\n readonly size = input<\"md\" | \"lg\">(\"md\");\n readonly headingLevel = input<\"h2\" | \"h3\">(\"h3\");\n}\n","import { ChangeDetectionStrategy, Component, input } from \"@angular/core\";\nimport { VikingIconBadge } from \"../icon-badge/icon-badge\";\nimport { VikingIconName } from \"../../core/icons\";\n\nexport type VikingChartEmptyTone = \"default\" | \"secure\";\nexport type VikingChartEmptyLayout = \"fill\" | \"overlay\" | \"compact\" | \"inline\";\n\n/**\n * viking-chart-empty-state — standardized dashed “waiting for data” overlay for chart panels.\n * Fills its parent chart body by default; use layout=\"overlay\" for map/canvas stacks.\n */\n@Component({\n selector: \"viking-chart-empty-state\",\n imports: [VikingIconBadge],\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n role: \"status\",\n class: \"viking-chart-empty-state empty-chart-state\",\n \"[class.is-secure]\": \"tone() === 'secure'\",\n \"[class.compact]\": \"layout() === 'compact'\",\n \"[class.viking-chart-empty-overlay]\": \"layout() === 'overlay'\",\n \"[class.viking-chart-empty-fill]\": \"layout() === 'fill'\",\n \"[class.viking-chart-empty-inline]\": \"layout() === 'inline'\",\n },\n template: `\n <viking-icon-badge\n [icon]=\"icon()\"\n [tone]=\"tone() === 'secure' ? 'success' : 'default'\"\n />\n <h3 class=\"empty-title\">{{ title() }}</h3>\n <p class=\"empty-subtitle\">{{ description() }}</p>\n <div class=\"viking-chart-empty-actions\">\n <ng-content />\n </div>\n `,\n styles: [\n `\n :host {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n text-align: center;\n width: 100%;\n box-sizing: border-box;\n padding: var(--viking-space-4) var(--viking-space-3);\n border-radius: var(--viking-radius-lg);\n background: var(--viking-surface-alt);\n border: 1px dashed var(--viking-border-strong);\n box-shadow: var(--viking-shadow-inner);\n gap: var(--viking-space-2);\n animation: viking-fade-in var(--viking-duration)\n var(--viking-ease-default);\n }\n\n :host(.viking-chart-empty-fill) {\n flex: 1 1 auto;\n min-height: var(\n --viking-chart-empty-min-height,\n var(--viking-chart-fill-min-height, clamp(16rem, 32vw, 17.5rem))\n );\n }\n\n viking-icon-badge {\n margin-bottom: var(--viking-space-2);\n }\n\n .empty-title {\n margin: 0 0 var(--viking-space-1) 0;\n font-size: var(--viking-font-size-md);\n font-weight: var(--viking-font-weight-semibold);\n letter-spacing: var(--viking-letter-spacing-caps);\n text-transform: uppercase;\n color: var(--viking-text);\n line-height: var(--viking-line-height-tight);\n }\n\n :host(.viking-chart-empty-overlay) {\n position: absolute;\n inset: 0;\n z-index: 1;\n min-height: 100%;\n margin: 0;\n background: color-mix(\n in srgb,\n var(--viking-surface-alt) 94%,\n transparent\n );\n }\n\n :host(.compact) {\n min-height: 160px;\n padding: var(--viking-space-3);\n }\n\n :host(.viking-chart-empty-inline) {\n border: none;\n background: transparent;\n box-shadow: none;\n min-height: auto;\n flex: 1 1 auto;\n justify-content: center;\n padding: var(--viking-space-4) var(--viking-space-2);\n }\n\n :host(.is-secure) .viking-icon-badge {\n background: color-mix(in srgb, var(--viking-success) 14%, transparent);\n color: var(--viking-success);\n }\n\n .empty-subtitle {\n margin: 0;\n font-size: var(--viking-font-size);\n color: var(--viking-text-muted);\n line-height: var(--viking-line-height-relaxed);\n max-width: 28rem;\n }\n\n .viking-chart-empty-actions {\n display: flex;\n flex-wrap: wrap;\n align-items: center;\n justify-content: center;\n gap: var(--viking-space-2);\n margin-top: var(--viking-space-2);\n }\n\n .viking-chart-empty-actions:empty {\n display: none;\n }\n\n @media (prefers-reduced-motion: reduce) {\n :host {\n animation: none;\n }\n }\n `,\n ],\n})\nexport class VikingChartEmptyState {\n readonly title = input.required<string>();\n readonly description = input.required<string>();\n readonly icon = input<VikingIconName>(\"globe\");\n readonly tone = input<VikingChartEmptyTone>(\"default\");\n readonly layout = input<VikingChartEmptyLayout>(\"fill\");\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n input,\n} from \"@angular/core\";\n\nexport type VikingChartPanelSize = \"large\" | \"medium\";\nexport type VikingChartPanelBody = \"default\" | \"origin-map\";\n\n/**\n * viking-chart-panel — outlined analytics card shell with consistent header/body rhythm.\n */\n@Component({\n selector: \"viking-chart-panel\",\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: \"status-card-outlined viking-chart-panel\",\n \"[class.viking-chart-panel-large]\": \"size() === 'large'\",\n \"[class.viking-chart-panel-medium]\": \"size() === 'medium'\",\n \"[class.viking-chart-panel-origin-map]\": \"body() === 'origin-map'\",\n },\n template: `\n <ng-content select=\"viking-chart-card-header\" />\n <div [class]=\"bodyClasses()\">\n <ng-content />\n </div>\n `,\n styles: [\n `\n :host {\n display: flex;\n flex-direction: column;\n position: relative;\n overflow: hidden;\n min-width: 0;\n }\n\n :host(.viking-chart-panel-large) {\n min-height: var(--viking-chart-panel-min-height-lg, 30rem);\n }\n\n :host(.viking-chart-panel-medium) {\n min-height: var(--viking-chart-panel-min-height-md, 26rem);\n }\n\n .viking-chart-panel-body {\n flex: 1 1 auto;\n display: flex;\n flex-direction: column;\n position: relative;\n overflow: hidden;\n padding: 0 var(--viking-panel-padding, var(--viking-space-3))\n var(--viking-panel-padding, var(--viking-space-3));\n box-sizing: border-box;\n }\n\n :host(.viking-chart-panel-large) .viking-chart-panel-body {\n --viking-chart-empty-min-height: var(\n --viking-chart-empty-min-height-lg,\n 20rem\n );\n --viking-chart-fill-min-height: var(\n --viking-chart-fill-min-height-lg,\n clamp(20rem, 40vw, 22rem)\n );\n min-height: var(--viking-chart-panel-body-min-height-lg, 25rem);\n }\n\n :host(.viking-chart-panel-medium) .viking-chart-panel-body {\n --viking-chart-empty-min-height: var(\n --viking-chart-empty-min-height,\n clamp(18rem, 36vw, 20rem)\n );\n --viking-chart-fill-min-height: var(\n --viking-chart-fill-min-height,\n clamp(18rem, 36vw, 20rem)\n );\n min-height: var(--viking-chart-panel-body-min-height-md, 22rem);\n }\n\n :host(.viking-chart-panel-medium.viking-chart-panel-origin-map)\n .viking-chart-panel-body,\n :host(.viking-chart-panel-medium)\n .viking-chart-panel-body.origin-map-container {\n --viking-chart-empty-min-height: var(\n --viking-chart-map-min-height,\n 22.5rem\n );\n min-height: var(--viking-chart-map-min-height, 22.5rem);\n }\n\n :host(.viking-chart-panel-origin-map) ::ng-deep .origin-map-canvas {\n flex: 1 1 auto;\n height: var(--viking-chart-map-min-height, 22.5rem);\n min-height: var(--viking-chart-map-min-height, 22.5rem);\n width: 100%;\n display: block;\n border-radius: var(--viking-radius-md, 8px);\n z-index: 0;\n }\n\n :host(.viking-chart-panel-origin-map)\n ::ng-deep\n .origin-map-canvas:not(.viking-map-ready) {\n position: absolute;\n visibility: hidden;\n pointer-events: none;\n }\n\n :host(.viking-chart-panel-origin-map)\n ::ng-deep\n .origin-map-canvas.viking-map-ready {\n position: relative;\n visibility: visible;\n }\n `,\n ],\n})\nexport class VikingChartPanel {\n readonly size = input<VikingChartPanelSize>(\"medium\");\n readonly body = input<VikingChartPanelBody>(\"default\");\n\n protected readonly bodyClasses = computed(() => {\n const sizeClass =\n this.size() === \"large\"\n ? \"chart-container-large\"\n : \"chart-container-medium\";\n const bodyVariant =\n this.body() === \"origin-map\" ? \" origin-map-container\" : \"\";\n return `card-body-clean viking-chart-panel-body ${sizeClass}${bodyVariant}`;\n });\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n input,\n model,\n} from \"@angular/core\";\nimport { VikingControl, provideVikingCva } from \"../core/cva\";\nimport { VikingIcon } from \"../icon/icon\";\n\n/**\n * viking-checkbox — custom checkbox.\n * ControlValueAccessor-compatible.\n */\n@Component({\n selector: \"viking-checkbox\",\n imports: [VikingIcon],\n providers: [provideVikingCva(VikingCheckbox)],\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <label\n class=\"viking-checkbox\"\n [class.viking-disabled]=\"disabled() || formDisabled()\"\n >\n <span\n class=\"viking-checkbox-box\"\n [class.viking-checked]=\"checked() || indeterminate()\"\n >\n <input\n type=\"checkbox\"\n [checked]=\"checked()\"\n [indeterminate]=\"indeterminate()\"\n [disabled]=\"disabled() || formDisabled()\"\n (change)=\"toggle($event)\"\n (blur)=\"onTouched()\"\n />\n @if (indeterminate()) {\n <viking-icon name=\"minus\" [size]=\"14\" />\n } @else if (checked()) {\n <viking-icon name=\"check\" [size]=\"14\" />\n }\n </span>\n <span class=\"viking-checkbox-content\">\n <span class=\"viking-checkbox-label\"><ng-content /></span>\n @if (description()) {\n <span class=\"viking-checkbox-description\">{{ description() }}</span>\n }\n </span>\n </label>\n `,\n styles: [\n `\n :host {\n display: block;\n font-family: var(--viking-font-family);\n }\n .viking-checkbox {\n display: inline-flex;\n align-items: flex-start;\n gap: var(--viking-space-1);\n cursor: pointer;\n }\n .viking-disabled {\n opacity: var(--viking-state-disabled-opacity);\n cursor: not-allowed;\n }\n .viking-checkbox-box {\n position: relative;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: var(--viking-space-2);\n height: var(--viking-space-2);\n margin-top: 2px;\n border: 1px solid var(--viking-border-strong);\n border-radius: var(--viking-radius-xs);\n background: var(--viking-surface);\n color: var(--viking-accent-content);\n transition: var(--viking-transition-interactive);\n flex-shrink: 0;\n box-shadow: var(--viking-shadow-xs);\n }\n /* The native input fills the visual box so clicks and focus land on it. */\n .viking-checkbox-box input {\n position: absolute;\n inset: 0;\n width: 100%;\n height: 100%;\n margin: 0;\n opacity: 0;\n cursor: pointer;\n }\n .viking-checkbox:hover:not(.viking-disabled) .viking-checkbox-box {\n border-color: var(--viking-accent-strong);\n }\n .viking-checkbox-box.viking-checked {\n background: var(--viking-accent);\n border-color: color-mix(\n in srgb,\n var(--viking-accent) 80%,\n var(--viking-black)\n );\n box-shadow: var(--viking-shadow-sm);\n }\n .viking-checkbox-box:has(input:focus-visible) {\n outline: var(--viking-ring-width) solid var(--viking-ring);\n outline-offset: var(--viking-ring-offset);\n }\n .viking-checkbox-content {\n display: flex;\n flex-direction: column;\n }\n .viking-checkbox-label {\n font-size: var(--viking-font-size);\n color: var(--viking-text);\n line-height: 1.45;\n }\n .viking-checkbox-description {\n font-size: var(--viking-font-size);\n color: var(--viking-text-muted);\n }\n `,\n ],\n})\nexport class VikingCheckbox extends VikingControl<boolean> {\n readonly checked = model<boolean>(false);\n readonly indeterminate = input<boolean>(false);\n readonly disabled = input<boolean>(false);\n readonly description = input<string>(\"\");\n\n writeValue(value: boolean): void {\n this.checked.set(!!value);\n }\n\n protected toggle = (event: Event): void => {\n const next = (event.target as HTMLInputElement).checked;\n this.checked.set(next);\n this.onChange(next);\n };\n}\n","/** Fixed series palette — keep in sync with viking-tokens.json and THEME.md §8.4 */\nexport const VIKING_SERIES_PRESETS = [\n \"var(--viking-electric-500)\",\n \"var(--viking-crimson-600)\",\n \"var(--viking-green-500)\",\n \"var(--viking-gold-500)\",\n \"var(--viking-crimson-500)\",\n \"var(--viking-blue-500)\",\n \"var(--viking-charcoal-700)\",\n \"var(--viking-metallic-500)\",\n] as const;\n\nexport const VIKING_SERIES_DEFAULT = VIKING_SERIES_PRESETS[0];\n\nexport type VikingSeriesPreset = (typeof VIKING_SERIES_PRESETS)[number];\n","import {\n ChangeDetectionStrategy,\n Component,\n input,\n model,\n} from \"@angular/core\";\nimport { VikingControl, provideVikingCva } from \"../core/cva\";\nimport { VikingIcon } from \"../icon/icon\";\nimport {\n VIKING_SERIES_DEFAULT,\n VIKING_SERIES_PRESETS,\n} from \"../../tokens/series-presets\";\n\n/**\n * viking-color-picker — swatch presets + custom color input\n *. ControlValueAccessor-compatible.\n * Default presets are the THEME.md palette.\n */\n@Component({\n selector: \"viking-color-picker\",\n imports: [VikingIcon],\n providers: [provideVikingCva(VikingColorPicker)],\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <div\n class=\"viking-color-picker\"\n role=\"group\"\n [attr.aria-label]=\"label() || 'Color picker'\"\n >\n @for (preset of presets(); track preset) {\n <button\n type=\"button\"\n class=\"viking-color-swatch\"\n [class.viking-selected]=\"preset === value()\"\n [style.background]=\"preset\"\n [attr.aria-label]=\"'Color ' + preset\"\n [attr.aria-pressed]=\"preset === value()\"\n (click)=\"pick(preset)\"\n >\n @if (preset === value()) {\n <viking-icon name=\"check\" [size]=\"16\" />\n }\n </button>\n }\n <label class=\"viking-color-custom\" [style.background]=\"value()\">\n <input\n type=\"color\"\n [value]=\"value()\"\n [disabled]=\"disabled() || formDisabled()\"\n aria-label=\"Custom color\"\n (input)=\"onInput($event)\"\n />\n <viking-icon name=\"pencil\" [size]=\"16\" />\n </label>\n <code class=\"viking-color-value\">{{ value() }}</code>\n </div>\n `,\n styles: [\n `\n .viking-color-picker {\n display: flex;\n align-items: center;\n flex-wrap: wrap;\n gap: var(--viking-space-1);\n font-family: var(--viking-font-family);\n }\n .viking-color-swatch,\n .viking-color-custom {\n position: relative;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: var(--viking-space-4);\n height: var(--viking-space-4);\n border: 1px solid var(--viking-border-strong);\n border-radius: var(--viking-radius-sm);\n cursor: pointer;\n color: var(--viking-accent-content);\n transition: var(--viking-transition-interactive);\n padding: 0;\n box-shadow: var(--viking-shadow-xs);\n }\n .viking-color-swatch:hover,\n .viking-color-custom:hover {\n transform: scale(1.08);\n border-color: var(--viking-accent-strong);\n box-shadow: var(--viking-shadow-sm);\n z-index: 1;\n }\n .viking-selected {\n border-color: var(--viking-text);\n box-shadow:\n var(--viking-shadow-sm),\n 0 0 0 2px color-mix(in srgb, var(--viking-accent) 35%, transparent),\n inset 0 1px 0 rgba(255, 255, 255, 0.12);\n transform: scale(1.04);\n }\n .viking-color-swatch:focus-visible,\n .viking-color-custom:focus-within {\n outline: var(--viking-ring-width) solid var(--viking-ring);\n outline-offset: var(--viking-ring-offset);\n }\n /* The native input fills the swatch so clicks and focus land on it. */\n .viking-color-custom input {\n position: absolute;\n inset: 0;\n width: 100%;\n height: 100%;\n margin: 0;\n opacity: 0;\n cursor: pointer;\n }\n .viking-color-value {\n font-family: var(--viking-font-family-mono);\n font-size: var(--viking-font-size-sm);\n color: var(--viking-text-muted);\n background: var(--viking-surface-alt);\n border: 1px solid var(--viking-border-subtle);\n border-radius: var(--viking-radius-xs);\n padding: var(--viking-space-half) var(--viking-space-1);\n font-variant-numeric: tabular-nums;\n letter-spacing: 0.02em;\n text-transform: uppercase;\n }\n `,\n ],\n})\nexport class VikingColorPicker extends VikingControl<string> {\n readonly value = model<string>(VIKING_SERIES_DEFAULT);\n readonly label = input<string>(\"\");\n readonly disabled = input<boolean>(false);\n /** Preset swatches — THEME.md Series color palette (premium charcoal / teal / crimson). */\n readonly presets = input<string[]>([...VIKING_SERIES_PRESETS]);\n\n writeValue(value: string): void {\n this.value.set(value || VIKING_SERIES_DEFAULT);\n }\n\n protected pick = (color: string): void => {\n this.value.set(color);\n this.onChange(color);\n this.onTouched();\n };\n\n protected onInput = (event: Event): void => {\n this.pick((event.target as HTMLInputElement).value);\n };\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n computed,\n effect,\n input,\n model,\n output,\n signal,\n viewChild,\n} from \"@angular/core\";\nimport { VikingIcon } from \"../icon/icon\";\nimport { VikingCommandItem } from \"../../core/types\";\n\n/**\n * viking-command — command palette.\n * Toggle with the `open` model; emits `executed` when an item is chosen.\n */\n@Component({\n selector: \"viking-command\",\n imports: [VikingIcon],\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: { \"(keydown.escape)\": \"open.set(false)\" },\n template: `\n @if (open()) {\n <button\n type=\"button\"\n class=\"viking-command-backdrop\"\n aria-label=\"Close command palette\"\n (click)=\"open.set(false)\"\n ></button>\n <div class=\"viking-command\" role=\"dialog\" aria-label=\"Command palette\">\n <div class=\"viking-command-search\">\n <viking-icon name=\"search\" [size]=\"20\" />\n <input\n #queryInput\n type=\"text\"\n [placeholder]=\"placeholder()\"\n [value]=\"query()\"\n aria-label=\"Search commands\"\n (input)=\"onQuery($event)\"\n (keydown)=\"onKeydown($event)\"\n />\n <kbd>esc</kbd>\n </div>\n <div class=\"viking-command-list\" role=\"listbox\">\n @for (group of groups(); track group.name) {\n <p class=\"viking-command-group\">{{ group.name }}</p>\n @for (item of group.items; track item.id) {\n <button\n type=\"button\"\n role=\"option\"\n class=\"viking-command-item\"\n [class.viking-active]=\"item.id === activeId()\"\n [attr.aria-selected]=\"item.id === activeId()\"\n (click)=\"run(item)\"\n (mouseenter)=\"activeId.set(item.id)\"\n >\n @if (item.icon) {\n <viking-icon [name]=\"item.icon\" [size]=\"18\" />\n }\n <span class=\"viking-command-label\">{{ item.label }}</span>\n @if (item.kbd) {\n <kbd>{{ item.kbd }}</kbd>\n }\n </button>\n }\n }\n @if (filtered().length === 0) {\n <p class=\"viking-command-empty\">No results for “{{ query() }}”</p>\n }\n </div>\n </div>\n }\n `,\n styles: [\n `\n .viking-command-backdrop {\n position: fixed;\n inset: 0;\n border: none;\n background: var(--viking-overlay-backdrop, rgba(49, 57, 60, 0.55));\n backdrop-filter: blur(4px);\n z-index: var(--viking-z-overlay);\n cursor: default;\n }\n .viking-command {\n position: fixed;\n top: 12vh;\n left: 50%;\n transform: translateX(-50%);\n width: min(576px, calc(100vw - var(--viking-space-4)));\n background: var(--viking-surface);\n border: 1px solid var(--viking-border-strong);\n border-radius: var(--viking-radius);\n box-shadow: var(--viking-shadow-md);\n z-index: calc(var(--viking-z-overlay) + 1);\n font-family: var(--viking-font-family);\n overflow: hidden;\n }\n .viking-command-search {\n display: flex;\n align-items: center;\n gap: var(--viking-space-1);\n padding: var(--viking-space-2);\n border-bottom: 1px solid var(--viking-border);\n color: var(--viking-text-muted);\n transition: var(--viking-transition-colors);\n }\n .viking-command-search:focus-within {\n border-bottom-color: var(--viking-accent);\n box-shadow: inset 0 -2px 0 var(--viking-accent-soft);\n }\n .viking-command-search input {\n flex: 1;\n min-width: 0;\n border: none;\n outline: none;\n background: transparent;\n color: var(--viking-text);\n font-family: var(--viking-font-family);\n font-size: var(--viking-font-size);\n }\n kbd {\n font-family: var(--viking-font-family);\n font-size: var(--viking-font-size);\n color: var(--viking-text-muted);\n background: var(--viking-surface-alt);\n border: 1px solid var(--viking-border);\n border-radius: calc(var(--viking-radius) / 2);\n padding: 0 var(--viking-space-1);\n line-height: 1.4;\n }\n .viking-command-list {\n max-height: 342px;\n overflow: auto;\n padding: var(--viking-space-1);\n }\n .viking-command-group {\n margin: var(--viking-space-1) var(--viking-space-1) 3px;\n font-size: var(--viking-font-size);\n font-weight: 600;\n text-transform: uppercase;\n letter-spacing: 0.06em;\n color: var(--viking-text-muted);\n }\n .viking-command-item {\n display: flex;\n align-items: center;\n gap: var(--viking-space-1);\n width: 100%;\n min-height: var(--viking-control-height-sm);\n border: none;\n background: transparent;\n color: var(--viking-text);\n font-family: var(--viking-font-family);\n font-size: var(--viking-font-size);\n padding: var(--viking-space-1) var(--viking-space-1-5);\n border-radius: var(--viking-radius-sm);\n cursor: pointer;\n text-align: left;\n transition: var(--viking-transition-interactive);\n }\n .viking-command-item:hover:not(.viking-active),\n .viking-command-item.viking-active {\n background: var(--viking-accent-soft);\n }\n .viking-command-item:focus-visible {\n outline: var(--viking-ring-width) solid var(--viking-ring);\n outline-offset: var(--viking-ring-offset);\n }\n .viking-command-item:active {\n transform: scale(var(--viking-state-active-scale));\n }\n .viking-command-label {\n flex: 1;\n }\n .viking-command-empty {\n margin: 0;\n padding: var(--viking-space-2);\n color: var(--viking-text-muted);\n font-size: var(--viking-font-size);\n text-align: center;\n }\n `,\n ],\n})\nexport class VikingCommand {\n readonly items = input.required<VikingCommandItem[]>();\n readonly open = model<boolean>(false);\n readonly placeholder = input<string>(\"Type a command or search…\");\n\n readonly executed = output<VikingCommandItem>();\n\n private readonly queryInput =\n viewChild<ElementRef<HTMLInputElement>>(\"queryInput\");\n\n protected readonly query = signal(\"\");\n protected readonly activeId = signal<string>(\"\");\n\n constructor() {\n effect(() => {\n if (this.open()) {\n this.query.set(\"\");\n this.activeId.set(this.items()[0]?.id ?? \"\");\n queueMicrotask(() => this.queryInput()?.nativeElement.focus());\n }\n });\n }\n\n protected readonly filtered = computed(() => {\n const query = this.query().toLowerCase().trim();\n if (!query) {\n return this.items();\n }\n return this.items().filter((item) =>\n item.label.toLowerCase().includes(query),\n );\n });\n\n protected readonly groups = computed(() => {\n const map = new Map<string, VikingCommandItem[]>();\n for (const item of this.filtered()) {\n const group = item.group ?? \"Commands\";\n map.set(group, [...(map.get(group) ?? []), item]);\n }\n return [...map.entries()].map(([name, items]) => ({ name, items }));\n });\n\n protected onQuery = (event: Event): void => {\n this.query.set((event.target as HTMLInputElement).value);\n this.activeId.set(this.filtered()[0]?.id ?? \"\");\n };\n\n protected run = (item: VikingCommandItem): void => {\n this.executed.emit(item);\n this.open.set(false);\n this.query.set(\"\");\n };\n\n protected onKeydown = (event: KeyboardEvent): void => {\n const items = this.filtered();\n const index = items.findIndex((item) => item.id === this.activeId());\n if (event.key === \"ArrowDown\") {\n event.preventDefault();\n this.activeId.set(items[Math.min(items.length - 1, index + 1)]?.id ?? \"\");\n } else if (event.key === \"ArrowUp\") {\n event.preventDefault();\n this.activeId.set(items[Math.max(0, index - 1)]?.id ?? \"\");\n } else if (event.key === \"Enter\") {\n const active =\n items.find((item) => item.id === this.activeId()) ?? items[0];\n if (active) {\n event.preventDefault();\n this.run(active);\n }\n }\n };\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n input,\n model,\n output,\n} from \"@angular/core\";\nimport { VikingIcon } from \"../icon/icon\";\n\n/**\n * viking-composer — message composer with attachments and send action\n *.\n */\n@Component({\n selector: \"viking-composer\",\n imports: [VikingIcon],\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <div class=\"viking-composer\">\n <textarea\n rows=\"1\"\n [placeholder]=\"placeholder()\"\n [value]=\"value()\"\n [disabled]=\"disabled()\"\n [attr.aria-label]=\"placeholder() || 'Message'\"\n (input)=\"onInput($event)\"\n (keydown)=\"onKeydown($event)\"\n ></textarea>\n <div class=\"viking-composer-actions\">\n <div class=\"viking-composer-tools\">\n @if (allowAttachments()) {\n <button\n type=\"button\"\n class=\"viking-composer-tool\"\n aria-label=\"Attach file\"\n (click)=\"attach.emit()\"\n >\n <viking-icon name=\"paperclip\" [size]=\"20\" />\n </button>\n }\n <ng-content />\n </div>\n <button\n type=\"button\"\n class=\"viking-composer-send\"\n aria-label=\"Send message\"\n [disabled]=\"disabled() || !value().trim()\"\n (click)=\"send()\"\n >\n <viking-icon name=\"send\" [size]=\"18\" />\n <span>Send</span>\n </button>\n </div>\n </div>\n `,\n styles: [\n `\n .viking-composer {\n display: flex;\n flex-direction: column;\n background: var(--viking-surface);\n border: 1px solid var(--viking-border-strong);\n border-radius: var(--viking-radius);\n box-shadow: var(--viking-shadow-sm);\n transition: var(--viking-transition);\n font-family: var(--viking-font-family);\n }\n .viking-composer:focus-within {\n outline: var(--viking-ring-width) solid var(--viking-ring);\n outline-offset: var(--viking-ring-offset);\n }\n textarea {\n border: none;\n outline: none;\n resize: none;\n background: transparent;\n color: var(--viking-text);\n font-family: var(--viking-font-family);\n font-size: var(--viking-font-size);\n line-height: 1.55;\n padding: var(--viking-space-2);\n min-height: var(--viking-space-5);\n }\n textarea::placeholder {\n color: var(--viking-text-muted);\n }\n .viking-composer-actions {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: var(--viking-space-1);\n padding: var(--viking-space-1) var(--viking-space-2)\n var(--viking-space-1) var(--viking-space-1);\n border-top: 1px solid var(--viking-border);\n }\n .viking-composer-tools {\n display: flex;\n align-items: center;\n gap: calc(var(--viking-space-1) / 2);\n }\n .viking-composer-tool {\n display: inline-flex;\n border: none;\n background: transparent;\n color: var(--viking-text-muted);\n cursor: pointer;\n padding: var(--viking-space-1);\n border-radius: calc(var(--viking-radius) / 1.5);\n transition: var(--viking-transition);\n }\n .viking-composer-tool:hover {\n color: var(--viking-text);\n background: var(--viking-accent-soft);\n }\n .viking-composer-tool:focus-visible {\n outline: var(--viking-ring-width) solid var(--viking-ring);\n outline-offset: 1px;\n }\n .viking-composer-send {\n display: inline-flex;\n align-items: center;\n gap: calc(var(--viking-space-1) / 1.5);\n border: 1px solid var(--viking-accent);\n background: var(--viking-accent);\n color: var(--viking-accent-content);\n font-family: var(--viking-font-family);\n /* >= 18.67px bold qualifies as WCAG large text (3:1 on accent fill). */\n font-size: calc(var(--viking-font-size) * 1.05);\n font-weight: 700;\n padding: calc(var(--viking-space-1) / 1.5) var(--viking-space-2);\n border-radius: var(--viking-radius);\n cursor: pointer;\n transition: var(--viking-transition);\n }\n .viking-composer-send:hover:not(:disabled) {\n background: var(--viking-accent-strong);\n border-color: var(--viking-accent-strong);\n }\n .viking-composer-send:focus-visible {\n outline: var(--viking-ring-width) solid var(--viking-ring);\n outline-offset: var(--viking-ring-offset);\n }\n .viking-composer-send:disabled {\n opacity: var(--viking-state-disabled-opacity);\n cursor: not-allowed;\n }\n `,\n ],\n})\nexport class VikingComposer {\n readonly value = model<string>(\"\");\n readonly placeholder = input<string>(\"Write a message…\");\n readonly disabled = input<boolean>(false);\n readonly allowAttachments = input<boolean>(true);\n\n readonly sent = output<string>();\n readonly attach = output<void>();\n\n protected onInput = (event: Event): void => {\n const el = event.target as HTMLTextAreaElement;\n this.value.set(el.value);\n el.style.height = \"auto\";\n el.style.height = `${el.scrollHeight}px`;\n };\n\n protected onKeydown = (event: KeyboardEvent): void => {\n if (event.key === \"Enter\" && (event.metaKey || event.ctrlKey)) {\n event.preventDefault();\n this.send();\n }\n };\n\n protected send = (): void => {\n const message = this.value().trim();\n if (message) {\n this.sent.emit(message);\n this.value.set(\"\");\n }\n };\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n signal,\n} from \"@angular/core\";\n\n/**\n * viking-context — right-click context menu.\n * Wrap the target content and project menu content with the `vikingMenu` attribute\n * (typically viking-menu-item elements).\n */\n@Component({\n selector: \"viking-context\",\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n \"(contextmenu)\": \"onContextMenu($event)\",\n \"(document:click)\": \"closed()\",\n \"(keydown.escape)\": \"closed()\",\n },\n template: `\n <ng-content />\n @if (open()) {\n <div\n class=\"viking-context-menu\"\n role=\"menu\"\n [style.left.px]=\"position().x\"\n [style.top.px]=\"position().y\"\n >\n <ng-content select=\"[vikingMenu]\" />\n </div>\n }\n `,\n styles: [\n `\n :host {\n display: block;\n position: relative;\n }\n .viking-context-menu {\n position: absolute;\n min-width: 198px;\n padding: var(--viking-space-1);\n background: var(--viking-surface);\n border: 1px solid var(--viking-border-strong);\n border-radius: var(--viking-radius);\n box-shadow: var(--viking-shadow-md);\n z-index: var(--viking-z-overlay);\n display: flex;\n flex-direction: column;\n gap: 2px;\n }\n `,\n ],\n})\nexport class VikingContext {\n protected readonly open = signal(false);\n protected readonly position = signal({ x: 0, y: 0 });\n\n constructor(private readonly host: ElementRef<HTMLElement>) {}\n\n protected onContextMenu = (event: MouseEvent): void => {\n event.preventDefault();\n const rect = this.host.nativeElement.getBoundingClientRect();\n this.position.set({\n x: event.clientX - rect.left,\n y: event.clientY - rect.top,\n });\n this.open.set(true);\n };\n\n protected closed = (): void => {\n this.open.set(false);\n };\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n input,\n model,\n signal,\n} from \"@angular/core\";\nimport { VikingControl, provideVikingCva } from \"../core/cva\";\nimport { VikingCalendar } from \"../calendar/calendar\";\nimport { VikingIcon } from \"../icon/icon\";\n\n/**\n * viking-date-picker — input + calendar popover.\n * Value is an ISO date string (YYYY-MM-DD). ControlValueAccessor-compatible.\n */\n@Component({\n selector: \"viking-date-picker\",\n imports: [VikingCalendar, VikingIcon],\n providers: [provideVikingCva(VikingDatePicker)],\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n \"(document:click)\": \"onDocumentClick($event)\",\n \"(keydown.escape)\": \"open.set(false)\",\n },\n template: `\n <button\n type=\"button\"\n class=\"viking-control viking-date-trigger\"\n [disabled]=\"disabled() || formDisabled()\"\n [attr.aria-expanded]=\"open()\"\n [attr.aria-label]=\"label() || placeholder()\"\n aria-haspopup=\"dialog\"\n (click)=\"open.set(!open())\"\n >\n <viking-icon name=\"calendar\" [size]=\"20\" />\n <span\n class=\"viking-date-value\"\n [class.viking-date-placeholder]=\"!value()\"\n >\n {{ value() || placeholder() }}\n </span>\n <viking-icon\n [name]=\"open() ? 'chevron-up' : 'chevron-down'\"\n [size]=\"18\"\n />\n </button>\n @if (open()) {\n <div class=\"viking-date-panel\" role=\"dialog\" aria-label=\"Choose date\">\n <viking-calendar [value]=\"value()\" (valueChange)=\"pick($event)\" />\n </div>\n }\n `,\n styles: [\n `\n :host {\n position: relative;\n display: block;\n }\n .viking-date-trigger {\n display: flex;\n align-items: center;\n gap: var(--viking-space-1);\n width: 100%;\n min-height: var(--viking-control-height);\n padding: 0 var(--viking-space-2);\n background: var(--viking-surface);\n border: 1px solid var(--viking-border-strong);\n border-radius: var(--viking-radius);\n box-shadow: var(--viking-shadow-sm);\n color: var(--viking-text-muted);\n font-family: var(--viking-font-family);\n font-size: var(--viking-font-size);\n cursor: pointer;\n transition: var(--viking-transition);\n text-align: left;\n }\n .viking-date-trigger:hover:not(:disabled) {\n border-color: var(--viking-accent-strong);\n }\n .viking-date-trigger:focus-visible {\n outline: var(--viking-ring-width) solid var(--viking-ring);\n outline-offset: var(--viking-ring-offset);\n }\n .viking-date-trigger:disabled {\n opacity: var(--viking-state-disabled-opacity);\n cursor: not-allowed;\n }\n .viking-date-value {\n flex: 1;\n color: var(--viking-text);\n font-variant-numeric: tabular-nums;\n }\n .viking-date-placeholder {\n color: var(--viking-text-muted);\n }\n .viking-date-panel {\n position: absolute;\n top: calc(100% + var(--viking-space-1));\n left: 0;\n z-index: var(--viking-z-overlay);\n box-shadow: var(--viking-shadow-md);\n border-radius: var(--viking-radius);\n }\n `,\n ],\n})\nexport class VikingDatePicker extends VikingControl<string | null> {\n readonly value = model<string | null>(null);\n readonly placeholder = input<string>(\"Select date\");\n readonly label = input<string>(\"\");\n readonly disabled = input<boolean>(false);\n\n protected readonly open = signal(false);\n\n constructor(private readonly host: ElementRef<HTMLElement>) {\n super();\n }\n\n writeValue(value: string | null): void {\n this.value.set(value);\n }\n\n protected pick = (iso: string | null): void => {\n this.value.set(iso);\n this.onChange(iso);\n this.onTouched();\n this.open.set(false);\n };\n\n protected onDocumentClick = (event: Event): void => {\n if (\n this.open() &&\n !this.host.nativeElement.contains(event.target as Node)\n ) {\n this.open.set(false);\n }\n };\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n Optional,\n input,\n model,\n output,\n} from \"@angular/core\";\nimport { VikingIcon } from \"../icon/icon\";\nimport { VikingIconName } from \"../../core/icons\";\n\n/**\n * viking-dropdown — expandable menu.\n * Project the trigger with `vikingTrigger`; fill the menu with viking-menu-item.\n */\n@Component({\n selector: \"viking-dropdown\",\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n \"(click)\": \"onHostClick($event)\",\n \"(document:click)\": \"onDocumentClick($event)\",\n \"(keydown.escape)\": \"open.set(false)\",\n },\n template: `\n <span class=\"viking-dropdown-trigger\">\n <ng-content select=\"[vikingTrigger]\" />\n </span>\n @if (open()) {\n <div\n class=\"viking-dropdown-menu\"\n [class.viking-dropdown-end]=\"align() === 'end'\"\n role=\"menu\"\n >\n <ng-content />\n </div>\n }\n `,\n styles: [\n `\n :host {\n position: relative;\n display: inline-block;\n }\n .viking-dropdown-trigger {\n display: inline-flex;\n }\n .viking-dropdown-menu {\n position: absolute;\n top: calc(100% + var(--viking-space-1));\n left: 0;\n min-width: 216px;\n padding: var(--viking-space-1);\n background: var(--viking-surface);\n border: 1px solid var(--viking-border-strong);\n border-radius: var(--viking-radius);\n box-shadow: var(--viking-shadow-md);\n z-index: var(--viking-z-overlay);\n display: flex;\n flex-direction: column;\n gap: 2px;\n }\n .viking-dropdown-end {\n left: auto;\n right: 0;\n }\n `,\n ],\n})\nexport class VikingDropdown {\n readonly open = model<boolean>(false);\n readonly align = input<\"start\" | \"end\">(\"start\");\n\n constructor(private readonly host: ElementRef<HTMLElement>) {}\n\n /** Closes the menu; called by viking-menu-item on selection. */\n readonly close = (): void => {\n this.open.set(false);\n };\n\n /** Toggles when the (focusable, projected) trigger is activated. */\n protected onHostClick = (event: Event): void => {\n const trigger = this.host.nativeElement.querySelector(\n \".viking-dropdown-trigger\",\n );\n if (trigger?.contains(event.target as Node)) {\n this.open.update((value) => !value);\n }\n };\n\n protected onDocumentClick = (event: Event): void => {\n if (\n this.open() &&\n !this.host.nativeElement.contains(event.target as Node)\n ) {\n this.open.set(false);\n }\n };\n}\n\n/**\n * viking-menu-item — action row inside viking-dropdown / viking-context menus.\n */\n@Component({\n selector: \"viking-menu-item\",\n imports: [VikingIcon],\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <button\n type=\"button\"\n role=\"menuitem\"\n class=\"viking-menu-item\"\n [class.viking-menu-item-danger]=\"danger()\"\n [disabled]=\"disabled()\"\n (click)=\"select($event)\"\n >\n @if (icon()) {\n <viking-icon [name]=\"icon()!\" [size]=\"18\" />\n }\n <span class=\"viking-menu-item-label\"><ng-content /></span>\n @if (kbd()) {\n <kbd class=\"viking-menu-item-kbd\">{{ kbd() }}</kbd>\n }\n </button>\n `,\n styles: [\n `\n :host {\n display: block;\n }\n .viking-menu-item {\n display: flex;\n align-items: center;\n gap: var(--viking-space-1);\n width: 100%;\n border: none;\n background: transparent;\n color: var(--viking-text);\n font-family: var(--viking-font-family);\n font-size: var(--viking-font-size-ui);\n font-weight: 600;\n padding: var(--viking-space-1) var(--viking-space-1);\n border-radius: calc(var(--viking-radius) / 1.5);\n cursor: pointer;\n text-align: left;\n transition: var(--viking-transition);\n }\n .viking-menu-item:hover:not(:disabled) {\n background: var(--viking-accent-soft);\n }\n .viking-menu-item:focus-visible {\n outline: var(--viking-ring-width) solid var(--viking-ring);\n outline-offset: -2px;\n }\n .viking-menu-item:disabled {\n opacity: var(--viking-state-disabled-opacity);\n cursor: not-allowed;\n }\n .viking-menu-item-danger {\n color: var(--viking-danger);\n }\n .viking-menu-item-label {\n flex: 1;\n white-space: nowrap;\n }\n .viking-menu-item-kbd {\n font-family: var(--viking-font-family);\n font-size: var(--viking-font-size-ui);\n color: var(--viking-text-muted);\n }\n `,\n ],\n})\nexport class VikingMenuItem {\n constructor(@Optional() private readonly dropdown: VikingDropdown | null) {}\n\n readonly icon = input<VikingIconName | null>(null);\n readonly kbd = input<string | null>(null);\n readonly danger = input<boolean>(false);\n readonly disabled = input<boolean>(false);\n\n readonly selected = output<MouseEvent>();\n\n protected select = (event: MouseEvent): void => {\n this.selected.emit(event);\n this.dropdown?.close();\n };\n}\n","import { ChangeDetectionStrategy, Component, input } from \"@angular/core\";\nimport { VikingIcon } from \"../icon/icon\";\nimport { VikingIconName } from \"../../core/icons\";\n\n/**\n * viking-empty-state — reusable empty / zero-data placeholder.\n */\n@Component({\n selector: \"viking-empty-state\",\n imports: [VikingIcon],\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: { role: \"status\" },\n template: `\n <div class=\"viking-empty-state-inner\">\n @if (icon()) {\n <div class=\"viking-empty-state-icon\" aria-hidden=\"true\">\n <viking-icon [name]=\"icon()!\" [size]=\"iconSize()\" />\n </div>\n }\n @if (heading()) {\n <p class=\"viking-empty-state-heading\">{{ heading() }}</p>\n }\n @if (description()) {\n <p class=\"viking-empty-state-description\">{{ description() }}</p>\n }\n <div class=\"viking-empty-state-actions\">\n <ng-content />\n </div>\n </div>\n `,\n styles: [\n `\n :host {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 100%;\n padding: var(--viking-space-4) var(--viking-space-3);\n font-family: var(--viking-font-family);\n animation: viking-fade-in var(--viking-duration)\n var(--viking-ease-default);\n }\n .viking-empty-state-inner {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n text-align: center;\n gap: 0;\n max-width: 28rem;\n }\n .viking-empty-state-icon {\n display: flex;\n align-items: center;\n justify-content: center;\n width: var(--viking-space-7);\n height: var(--viking-space-7);\n border-radius: var(--viking-radius-lg);\n background: var(--viking-accent-soft);\n color: var(--viking-accent-strong);\n box-shadow: var(--viking-shadow-sm);\n border: 1px solid\n color-mix(in srgb, var(--viking-accent) 18%, transparent);\n margin-bottom: var(--viking-space-2);\n }\n .viking-empty-state-heading {\n margin: 0 0 var(--viking-space-1) 0;\n font-size: var(--viking-font-size-md);\n font-weight: var(--viking-font-weight-semibold);\n letter-spacing: var(--viking-letter-spacing-caps);\n text-transform: uppercase;\n color: var(--viking-text);\n line-height: var(--viking-line-height-tight);\n }\n .viking-empty-state-description {\n margin: 0;\n font-size: var(--viking-font-size);\n color: var(--viking-text-muted);\n line-height: var(--viking-line-height-relaxed);\n }\n .viking-empty-state-actions {\n display: flex;\n flex-wrap: wrap;\n align-items: center;\n justify-content: center;\n gap: var(--viking-space-2);\n margin-top: var(--viking-space-2);\n }\n .viking-empty-state-actions:empty {\n display: none;\n }\n `,\n ],\n})\nexport class VikingEmptyState {\n readonly heading = input<string>(\"\");\n readonly description = input<string>(\"\");\n readonly icon = input<VikingIconName | null>(\"folder\");\n readonly iconSize = input<number>(28);\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n afterNextRender,\n input,\n model,\n viewChild,\n} from \"@angular/core\";\nimport { VikingControl, provideVikingCva } from \"../core/cva\";\nimport { VikingIcon } from \"../icon/icon\";\nimport { VikingIconName } from \"../../core/icons\";\n\ninterface EditorAction {\n icon: VikingIconName;\n command: string;\n label: string;\n}\n\nconst ACTIONS: EditorAction[] = [\n { icon: \"bold\", command: \"bold\", label: \"Bold\" },\n { icon: \"italic\", command: \"italic\", label: \"Italic\" },\n { icon: \"underline\", command: \"underline\", label: \"Underline\" },\n { icon: \"list\", command: \"insertUnorderedList\", label: \"Bulleted list\" },\n {\n icon: \"list-ordered\",\n command: \"insertOrderedList\",\n label: \"Numbered list\",\n },\n];\n\n/**\n * viking-editor — lightweight rich text editor.\n * Zero-dependency contenteditable with a formatting toolbar.\n * Value is HTML. ControlValueAccessor-compatible.\n */\n@Component({\n selector: \"viking-editor\",\n imports: [VikingIcon],\n providers: [provideVikingCva(VikingEditor)],\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <div class=\"viking-editor\">\n <div\n class=\"viking-editor-toolbar\"\n role=\"toolbar\"\n aria-label=\"Text formatting\"\n >\n @for (action of actions; track action.command) {\n <button\n type=\"button\"\n class=\"viking-editor-btn\"\n [attr.aria-label]=\"action.label\"\n (mousedown)=\"$event.preventDefault()\"\n (click)=\"exec(action.command)\"\n >\n <viking-icon [name]=\"action.icon\" [size]=\"18\" />\n </button>\n }\n </div>\n <div\n #surface\n class=\"viking-editor-surface\"\n contenteditable=\"true\"\n role=\"textbox\"\n aria-multiline=\"true\"\n [attr.aria-label]=\"label() || 'Rich text editor'\"\n [attr.data-placeholder]=\"placeholder()\"\n (input)=\"onInput()\"\n (blur)=\"onTouched()\"\n ></div>\n </div>\n `,\n styles: [\n `\n .viking-editor {\n border: 1px solid var(--viking-border-strong);\n border-radius: var(--viking-radius);\n background: var(--viking-surface);\n box-shadow: var(--viking-shadow-sm);\n font-family: var(--viking-font-family);\n transition: var(--viking-transition);\n }\n .viking-editor:focus-within {\n outline: var(--viking-ring-width) solid var(--viking-ring);\n outline-offset: var(--viking-ring-offset);\n }\n .viking-editor-toolbar {\n display: flex;\n gap: 2px;\n padding: var(--viking-space-1);\n border-bottom: 1px solid var(--viking-border);\n }\n .viking-editor-btn {\n display: inline-flex;\n border: none;\n background: transparent;\n color: var(--viking-text-muted);\n cursor: pointer;\n padding: calc(var(--viking-space-1) / 1.5);\n border-radius: calc(var(--viking-radius) / 1.5);\n transition: var(--viking-transition);\n }\n .viking-editor-btn:hover {\n color: var(--viking-text);\n background: var(--viking-accent-soft);\n }\n .viking-editor-btn:focus-visible {\n outline: var(--viking-ring-width) solid var(--viking-ring);\n outline-offset: 1px;\n }\n .viking-editor-surface {\n min-height: 126px;\n padding: var(--viking-space-2);\n color: var(--viking-text);\n font-size: var(--viking-font-size);\n line-height: 1.6;\n outline: none;\n }\n .viking-editor-surface:empty::before {\n content: attr(data-placeholder);\n color: var(--viking-text-muted);\n pointer-events: none;\n }\n `,\n ],\n})\nexport class VikingEditor extends VikingControl<string> {\n private readonly surface =\n viewChild.required<ElementRef<HTMLElement>>(\"surface\");\n private readonly document: Document;\n\n readonly value = model<string>(\"\");\n readonly placeholder = input<string>(\"Start writing…\");\n readonly label = input<string>(\"\");\n\n protected readonly actions = ACTIONS;\n\n constructor(elementRef: ElementRef<HTMLElement>) {\n super();\n this.document = elementRef.nativeElement.ownerDocument;\n afterNextRender(() => {\n if (this.value()) {\n this.surface().nativeElement.innerHTML = this.value();\n }\n });\n }\n\n writeValue(value: string): void {\n this.value.set(value ?? \"\");\n const surface = this.surface?.();\n if (surface) {\n surface.nativeElement.innerHTML = value ?? \"\";\n }\n }\n\n protected exec = (command: string): void => {\n this.surface().nativeElement.focus();\n // execCommand is deprecated but remains the only zero-dependency way to\n // apply inline formatting to a contenteditable selection.\n this.document.execCommand(command, false);\n this.onInput();\n };\n\n protected onInput = (): void => {\n const html = this.surface().nativeElement.innerHTML;\n this.value.set(html);\n this.onChange(html);\n };\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n input,\n output,\n} from \"@angular/core\";\nimport { VikingIcon } from \"../icon/icon\";\nimport { VikingIconName } from \"../../core/icons\";\n\n/**\n * viking-fab — floating action button (fixed bottom-right).\n */\n@Component({\n selector: \"viking-fab\",\n imports: [VikingIcon],\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <button\n type=\"button\"\n class=\"viking-fab\"\n [attr.aria-label]=\"label()\"\n [disabled]=\"disabled()\"\n (click)=\"pressed.emit($event)\"\n >\n <viking-icon [name]=\"icon()\" [size]=\"24\" />\n </button>\n `,\n styles: [\n `\n :host {\n display: contents;\n }\n .viking-fab {\n position: fixed;\n bottom: var(--viking-space-3);\n right: var(--viking-space-3);\n width: var(--viking-space-7);\n height: var(--viking-space-7);\n border-radius: var(--viking-radius-pill);\n background: var(--viking-accent);\n color: var(--viking-accent-content);\n border: 1px solid\n color-mix(in srgb, var(--viking-accent) 80%, var(--viking-black));\n box-shadow: var(--viking-shadow-md);\n cursor: pointer;\n z-index: var(--viking-z-overlay);\n display: flex;\n align-items: center;\n justify-content: center;\n transition: var(--viking-transition-interactive);\n }\n .viking-fab:hover:not(:disabled) {\n transform: translateY(var(--viking-state-hover-lift));\n box-shadow: var(--viking-shadow-hover);\n background: var(--viking-accent-hover);\n }\n .viking-fab:active:not(:disabled) {\n transform: translateY(0) scale(var(--viking-state-active-scale));\n }\n .viking-fab:focus-visible {\n outline: var(--viking-ring-width) solid var(--viking-ring);\n outline-offset: var(--viking-ring-offset);\n }\n .viking-fab:disabled {\n opacity: var(--viking-state-disabled-opacity);\n cursor: not-allowed;\n }\n `,\n ],\n})\nexport class VikingFab {\n readonly icon = input.required<VikingIconName>();\n readonly label = input.required<string>();\n readonly disabled = input<boolean>(false);\n readonly pressed = output<MouseEvent>();\n}\n","import { ChangeDetectionStrategy, Component, input } from \"@angular/core\";\nimport { VikingIcon } from \"../icon/icon\";\nimport { VikingIconName } from \"../../core/icons\";\n\nexport type VikingFormSectionLayout = \"inline\" | \"stack\" | \"status\";\n\n/**\n * viking-form-panel — groups related form sections inside a card without nested outlines.\n */\n@Component({\n selector: \"viking-form-panel\",\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: { class: \"viking-form-panel\" },\n template: `<ng-content />`,\n styles: [\n `\n :host {\n display: flex;\n flex-direction: column;\n gap: 0;\n width: 100%;\n min-width: 0;\n }\n :host ::ng-deep viking-form-section + viking-form-section {\n border-top: 1px solid var(--viking-border-subtle);\n margin-top: var(--viking-space-3);\n padding-top: var(--viking-space-3);\n }\n `,\n ],\n})\nexport class VikingFormPanel {}\n\n/**\n * viking-form-section — standard dashboard form row: heading, fields, and actions.\n * Use inside viking-form-panel (or a card body) to avoid nested bordered sub-forms.\n */\n@Component({\n selector: \"viking-form-section\",\n imports: [VikingIcon],\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: \"viking-form-section\",\n \"[class.viking-form-section-inline]\": \"layout() === 'inline'\",\n \"[class.viking-form-section-stack]\": \"layout() === 'stack'\",\n \"[class.viking-form-section-status]\": \"layout() === 'status'\",\n },\n template: `\n <header class=\"viking-form-section-header\">\n @if (icon()) {\n <viking-icon\n [name]=\"icon()!\"\n [size]=\"16\"\n class=\"viking-form-section-icon\"\n />\n }\n <h3 class=\"viking-form-section-title\">{{ heading() }}</h3>\n </header>\n\n <div class=\"viking-form-section-body\">\n <div class=\"viking-form-section-fields\">\n <ng-content />\n </div>\n <div class=\"viking-form-section-actions\">\n <ng-content select=\"[vikingFormActions]\" />\n </div>\n </div>\n\n <div class=\"viking-form-section-footer\">\n <ng-content select=\"[vikingFormFooter]\" />\n </div>\n `,\n styles: [\n `\n :host {\n display: flex;\n flex-direction: column;\n gap: var(--viking-space-2);\n width: 100%;\n min-width: 0;\n font-family: var(--viking-font-family);\n }\n\n .viking-form-section-header {\n display: flex;\n align-items: center;\n gap: var(--viking-space-1);\n min-width: 0;\n }\n\n .viking-form-section-icon {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 24px;\n height: 24px;\n border-radius: var(--viking-radius-sm);\n background: var(--viking-accent-soft);\n color: var(--viking-accent-strong);\n flex-shrink: 0;\n }\n\n .viking-form-section-title {\n margin: 0;\n font-size: var(--viking-font-size-ui);\n font-weight: var(--viking-font-weight-semibold);\n letter-spacing: var(--viking-letter-spacing-caps);\n text-transform: uppercase;\n color: var(--viking-text);\n line-height: var(--viking-line-height-tight);\n }\n\n .viking-form-section-body {\n display: flex;\n flex-direction: column;\n align-items: stretch;\n gap: var(--viking-space-2);\n width: 100%;\n min-width: 0;\n }\n\n .viking-form-section-fields {\n display: flex;\n flex-direction: column;\n gap: var(--viking-space-2);\n min-width: 0;\n flex: 1;\n }\n\n .viking-form-section-actions {\n display: flex;\n flex-direction: column;\n align-items: stretch;\n gap: var(--viking-space-1);\n flex-shrink: 0;\n }\n\n .viking-form-section-actions:empty {\n display: none;\n }\n\n .viking-form-section-footer:empty {\n display: none;\n }\n\n .viking-form-section-footer:not(:empty) {\n display: flex;\n flex-direction: column;\n gap: var(--viking-space-1);\n }\n\n :host(.viking-form-section-inline) .viking-form-section-body {\n @media (min-width: 601px) {\n flex-direction: row;\n align-items: flex-end;\n }\n }\n\n :host(.viking-form-section-inline) .viking-form-section-actions {\n @media (min-width: 601px) {\n align-items: center;\n justify-content: flex-end;\n width: auto;\n }\n }\n\n :host(.viking-form-section-status) .viking-form-section-body {\n @media (min-width: 601px) {\n flex-direction: row;\n align-items: flex-start;\n justify-content: space-between;\n }\n }\n\n :host(.viking-form-section-status) .viking-form-section-fields {\n flex-direction: row;\n align-items: flex-start;\n gap: var(--viking-space-1, 8px);\n }\n\n :host(.viking-form-section-status) .viking-form-section-actions {\n @media (min-width: 601px) {\n align-items: flex-start;\n padding-top: 1px;\n margin-left: auto;\n }\n }\n\n :host ::ng-deep viking-field {\n width: 100%;\n min-width: 0;\n }\n `,\n ],\n})\nexport class VikingFormSection {\n readonly heading = input.required<string>();\n readonly icon = input<VikingIconName | null>(null);\n readonly layout = input<VikingFormSectionLayout>(\"inline\");\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n input,\n output,\n signal,\n} from \"@angular/core\";\nimport { VikingIcon } from \"../icon/icon\";\n\n/**\n * viking-file-upload — drag & drop file zone.\n */\n@Component({\n selector: \"viking-file-upload\",\n imports: [VikingIcon],\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <label\n class=\"viking-upload-zone\"\n [class.viking-dragover]=\"dragOver()\"\n (dragover)=\"onDragOver($event)\"\n (dragleave)=\"dragOver.set(false)\"\n (drop)=\"onDrop($event)\"\n >\n <input\n type=\"file\"\n [accept]=\"accept()\"\n [multiple]=\"multiple()\"\n [disabled]=\"disabled()\"\n [attr.aria-label]=\"heading()\"\n (change)=\"onSelect($event)\"\n />\n <viking-icon name=\"upload\" [size]=\"27\" />\n <span class=\"viking-upload-heading\">{{ heading() }}</span>\n <span class=\"viking-upload-hint\">{{ hint() }}</span>\n </label>\n @if (fileList().length > 0) {\n <ul class=\"viking-upload-list\">\n @for (file of fileList(); track file.name) {\n <li class=\"viking-upload-file\">\n <viking-icon name=\"file\" [size]=\"18\" />\n <span class=\"viking-upload-name\">{{ file.name }}</span>\n <span class=\"viking-upload-size\">{{ formatSize(file.size) }}</span>\n <button\n type=\"button\"\n class=\"viking-upload-remove\"\n [attr.aria-label]=\"'Remove ' + file.name\"\n (click)=\"removeFile(file)\"\n >\n <viking-icon name=\"x\" [size]=\"16\" />\n </button>\n </li>\n }\n </ul>\n }\n `,\n styles: [\n `\n :host {\n display: block;\n font-family: var(--viking-font-family);\n }\n .viking-upload-zone {\n position: relative;\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n gap: var(--viking-space-1);\n padding: var(--viking-space-4) var(--viking-space-2);\n border: 2px dashed var(--viking-border-strong);\n border-radius: var(--viking-radius);\n background: var(--viking-surface);\n color: var(--viking-text-muted);\n cursor: pointer;\n transition: var(--viking-transition);\n text-align: center;\n }\n .viking-upload-zone:hover,\n .viking-dragover {\n border-color: var(--viking-accent);\n background: var(--viking-accent-soft);\n color: var(--viking-accent);\n }\n .viking-upload-zone:focus-within {\n outline: var(--viking-ring-width) solid var(--viking-ring);\n outline-offset: var(--viking-ring-offset);\n }\n /* The native input fills the drop zone so clicks and focus land on it. */\n input {\n position: absolute;\n inset: 0;\n width: 100%;\n height: 100%;\n margin: 0;\n opacity: 0;\n cursor: pointer;\n }\n .viking-upload-heading {\n font-size: var(--viking-font-size);\n font-weight: 600;\n color: var(--viking-text);\n }\n .viking-upload-hint {\n font-size: var(--viking-font-size);\n color: var(--viking-text-muted);\n }\n .viking-upload-list {\n list-style: none;\n margin: var(--viking-space-1) 0 0;\n padding: 0;\n display: flex;\n flex-direction: column;\n gap: calc(var(--viking-space-1) / 2);\n }\n .viking-upload-file {\n display: flex;\n align-items: center;\n gap: var(--viking-space-1);\n padding: var(--viking-space-1);\n border: 1px solid var(--viking-border);\n border-radius: var(--viking-radius);\n background: var(--viking-surface);\n font-size: var(--viking-font-size);\n color: var(--viking-text);\n }\n .viking-upload-name {\n flex: 1;\n min-width: 0;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n }\n .viking-upload-size {\n color: var(--viking-text-muted);\n font-variant-numeric: tabular-nums;\n }\n .viking-upload-remove {\n display: inline-flex;\n border: none;\n background: transparent;\n color: var(--viking-text-muted);\n cursor: pointer;\n padding: 3px;\n border-radius: var(--viking-radius-pill);\n }\n .viking-upload-remove:hover {\n color: var(--viking-danger);\n }\n .viking-upload-remove:focus-visible {\n outline: var(--viking-ring-width) solid var(--viking-ring);\n outline-offset: 1px;\n }\n `,\n ],\n})\nexport class VikingFileUpload {\n readonly heading = input<string>(\"Drop files here or click to browse\");\n readonly hint = input<string>(\"\");\n readonly accept = input<string>(\"\");\n readonly multiple = input<boolean>(true);\n readonly disabled = input<boolean>(false);\n\n readonly filesChanged = output<File[]>();\n\n protected readonly dragOver = signal(false);\n protected readonly fileList = signal<File[]>([]);\n\n protected onDragOver = (event: DragEvent): void => {\n event.preventDefault();\n this.dragOver.set(true);\n };\n\n protected onDrop = (event: DragEvent): void => {\n event.preventDefault();\n this.dragOver.set(false);\n this.addFiles(Array.from(event.dataTransfer?.files ?? []));\n };\n\n protected onSelect = (event: Event): void => {\n this.addFiles(Array.from((event.target as HTMLInputElement).files ?? []));\n };\n\n protected removeFile = (file: File): void => {\n this.fileList.update((list) => list.filter((item) => item !== file));\n this.filesChanged.emit(this.fileList());\n };\n\n protected formatSize = (bytes: number): string => {\n if (bytes < 1024) {\n return `${bytes} B`;\n }\n if (bytes < 1024 * 1024) {\n return `${(bytes / 1024).toFixed(1)} KB`;\n }\n return `${(bytes / (1024 * 1024)).toFixed(1)} MB`;\n };\n\n private addFiles(files: File[]): void {\n if (files.length === 0) {\n return;\n }\n this.fileList.update((list) =>\n this.multiple() ? [...list, ...files] : files.slice(0, 1),\n );\n this.filesChanged.emit(this.fileList());\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n input,\n} from \"@angular/core\";\n\n/** viking-gauge-arc — semicircle gauge fill driven by value / max. */\n@Component({\n selector: \"viking-gauge-arc\",\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: \"viking-gauge-arc\",\n \"aria-hidden\": \"true\",\n \"[class.viking-gauge-arc-amber]\": \"tone() === 'amber'\",\n \"[class.viking-gauge-arc-danger]\": \"tone() === 'danger'\",\n \"[class.viking-gauge-arc-primary]\": \"tone() === 'primary'\",\n },\n template: `\n <svg class=\"viking-gauge-arc-svg\" viewBox=\"0 0 100 60\" fill=\"none\">\n <path class=\"viking-gauge-arc-bg\" d=\"M10 50A40 40 0 0 1 90 50\" />\n <path\n class=\"viking-gauge-arc-fill\"\n d=\"M10 50A40 40 0 0 1 90 50\"\n [attr.stroke-dasharray]=\"strokeDasharray()\"\n />\n </svg>\n `,\n styles: [\n `\n :host {\n display: block;\n width: 100%;\n color: var(--viking-accent);\n }\n\n .viking-gauge-arc-svg {\n width: 100%;\n height: auto;\n overflow: visible;\n shape-rendering: geometricPrecision;\n }\n\n .viking-gauge-arc-bg,\n .viking-gauge-arc-fill {\n fill: none;\n stroke-width: 8;\n stroke-linecap: round;\n }\n\n .viking-gauge-arc-bg {\n stroke: color-mix(in srgb, var(--viking-text-muted) 25%, transparent);\n }\n\n .viking-gauge-arc-fill {\n stroke: currentColor;\n transition: stroke-dasharray 0.4s var(--viking-ease-default);\n }\n\n :host(.viking-gauge-arc-amber) {\n color: var(--viking-warning);\n }\n\n :host(.viking-gauge-arc-danger) {\n color: var(--viking-danger);\n }\n\n :host(.viking-gauge-arc-primary) {\n color: var(--viking-accent);\n }\n `,\n ],\n})\nexport class VikingGaugeArc {\n readonly value = input.required<number>();\n readonly max = input<number>(100);\n readonly circumference = input<number>(125.66);\n readonly tone = input<\"accent\" | \"amber\" | \"danger\" | \"primary\">(\"accent\");\n\n protected readonly strokeDasharray = computed(() => {\n const pct = Math.max(0, Math.min(1, this.value() / this.max()));\n const filled = pct * this.circumference();\n return `${filled} ${this.circumference()}`;\n });\n}\n","import { ChangeDetectionStrategy, Component, input } from \"@angular/core\";\nimport { VikingIcon } from \"../icon/icon\";\nimport { VikingIconName } from \"../../core/icons\";\n\n/** viking-hud-panel — bordered dashboard panel with icon header. */\n@Component({\n selector: \"viking-hud-panel\",\n imports: [VikingIcon],\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: \"viking-hud-panel panel-section\",\n },\n template: `\n <div class=\"viking-hud-panel-header panel-header\">\n @if (icon()) {\n <viking-icon [name]=\"icon()!\" [size]=\"20\" class=\"panel-icon\" />\n }\n <h2 class=\"viking-hud-panel-title\">{{ title() }}</h2>\n <ng-content select=\"[vikingHudPanelBadge]\" />\n </div>\n <ng-content />\n `,\n})\nexport class VikingHudPanel {\n readonly title = input.required<string>();\n readonly icon = input<VikingIconName | null>(null);\n}\n","import { ChangeDetectionStrategy, Component, input } from \"@angular/core\";\nimport { VikingIcon } from \"../icon/icon\";\nimport { VikingIconName } from \"../../core/icons\";\nimport { VikingTone } from \"../../core/types\";\n\n/**\n * viking-icon-text — icon aligned beside a title and optional description.\n * Use for status rows (MFA enrolled, connected accounts, subscription state).\n */\n@Component({\n selector: \"viking-icon-text\",\n imports: [VikingIcon],\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: \"viking-icon-text\",\n \"[class.viking-icon-text--muted]\": \"tone() === 'muted'\",\n },\n template: `\n <span\n class=\"viking-icon-text-icon\"\n [class]=\"'viking-icon-text-icon--' + tone()\"\n >\n @if (icon()) {\n <viking-icon [name]=\"icon()!\" [size]=\"iconSize()\" />\n } @else {\n <ng-content select=\"[vikingIconTextIcon]\" />\n }\n </span>\n <span class=\"viking-icon-text-body\">\n <strong class=\"viking-icon-text-title\">{{ title() }}</strong>\n @if (description()) {\n <span class=\"viking-icon-text-desc\">{{ description() }}</span>\n } @else {\n <ng-content select=\"[vikingIconTextDesc]\" />\n }\n </span>\n `,\n styles: [\n `\n :host {\n display: inline-flex;\n align-items: flex-start;\n gap: var(--viking-space-1-5, 12px);\n min-width: 0;\n flex: 1;\n font-family: var(--viking-font-family);\n }\n\n .viking-icon-text-icon {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n width: 24px;\n height: 24px;\n margin-top: 1px;\n border-radius: var(--viking-radius-sm);\n background: var(--viking-accent-soft);\n color: var(--viking-text-muted);\n }\n\n .viking-icon-text-icon--success {\n color: var(--viking-success);\n background: color-mix(in srgb, var(--viking-success) 14%, transparent);\n }\n\n .viking-icon-text-icon--info {\n color: var(--viking-info);\n background: color-mix(in srgb, var(--viking-info) 14%, transparent);\n }\n\n .viking-icon-text-icon--warning {\n color: var(--viking-warning);\n background: color-mix(in srgb, var(--viking-warning) 14%, transparent);\n }\n\n .viking-icon-text-icon--danger {\n color: var(--viking-danger);\n background: color-mix(in srgb, var(--viking-danger) 14%, transparent);\n }\n\n .viking-icon-text-icon--accent {\n color: var(--viking-accent-strong);\n background: var(--viking-accent-soft);\n }\n\n .viking-icon-text-body {\n display: flex;\n flex-direction: column;\n gap: var(--viking-space-half, 4px);\n min-width: 0;\n padding-top: 1px;\n }\n\n .viking-icon-text-title {\n display: block;\n font-size: var(--viking-font-size, 16px);\n font-weight: var(--viking-font-weight-semibold, 600);\n color: var(--viking-text);\n line-height: var(--viking-line-height-tight, 1.25);\n }\n\n .viking-icon-text-desc {\n display: block;\n margin: 0;\n font-size: var(--viking-font-size-sm, 14px);\n font-weight: var(--viking-font-weight-regular, 400);\n color: var(--viking-text-muted);\n line-height: var(--viking-line-height-relaxed, 1.625);\n }\n `,\n ],\n})\nexport class VikingIconText {\n readonly icon = input<VikingIconName | null>(null);\n readonly title = input.required<string>();\n readonly description = input<string>(\"\");\n readonly tone = input<VikingTone>(\"muted\");\n readonly iconSize = input<number>(16);\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n model,\n output,\n signal,\n} from \"@angular/core\";\nimport { VikingIcon } from \"../icon/icon\";\nimport { VikingBadge } from \"../badge/badge\";\nimport {\n VikingKanbanCard,\n VikingKanbanColumn,\n VikingKanbanMove,\n} from \"../../core/types\";\n\n/**\n * viking-kanban — drag & drop board.\n * Native HTML5 drag and drop; emits `moved` and updates the `columns` model.\n */\n@Component({\n selector: \"viking-kanban\",\n imports: [VikingIcon, VikingBadge],\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <div\n class=\"viking-kanban\"\n role=\"group\"\n aria-label=\"Kanban board\"\n tabindex=\"0\"\n >\n @for (column of columns(); track column.id) {\n <section\n class=\"viking-kanban-column\"\n [attr.aria-label]=\"column.title\"\n [class.viking-drop-target]=\"dropColumnId() === column.id\"\n (dragover)=\"onDragOver($event, column.id)\"\n (dragleave)=\"dropColumnId.set(null)\"\n (drop)=\"onDrop($event, column.id)\"\n >\n <header class=\"viking-kanban-header\">\n <span class=\"viking-kanban-title\">{{ column.title }}</span>\n <viking-badge size=\"sm\">{{ column.cards.length }}</viking-badge>\n </header>\n <div class=\"viking-kanban-cards\">\n @for (card of column.cards; track card.id) {\n <article\n class=\"viking-kanban-card\"\n draggable=\"true\"\n [class.viking-dragging]=\"draggingId() === card.id\"\n (dragstart)=\"onDragStart(card, column.id)\"\n (dragend)=\"resetDrag()\"\n >\n <div class=\"viking-kanban-card-header\">\n <span class=\"viking-kanban-card-title\">{{ card.title }}</span>\n <viking-icon\n class=\"viking-kanban-grip\"\n name=\"grip-vertical\"\n [size]=\"16\"\n />\n </div>\n @if (card.description) {\n <p class=\"viking-kanban-card-text\">{{ card.description }}</p>\n }\n </article>\n }\n </div>\n </section>\n }\n </div>\n `,\n styles: [\n `\n .viking-kanban:focus-visible {\n outline: var(--viking-ring-width) solid var(--viking-ring);\n outline-offset: var(--viking-ring-offset);\n }\n .viking-kanban {\n display: grid;\n grid-auto-flow: column;\n grid-auto-columns: minmax(234px, 1fr);\n gap: var(--viking-space-2);\n overflow-x: auto;\n padding-bottom: var(--viking-space-1);\n font-family: var(--viking-font-family);\n }\n .viking-kanban-column {\n background: var(--viking-surface-alt);\n border: 1px solid var(--viking-border);\n border-radius: var(--viking-radius);\n padding: var(--viking-space-1);\n transition: var(--viking-transition);\n }\n .viking-drop-target {\n border-color: var(--viking-accent);\n background: var(--viking-accent-soft);\n }\n .viking-kanban-header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: var(--viking-space-1);\n padding: var(--viking-space-1);\n }\n .viking-kanban-title {\n font-size: var(--viking-font-size);\n font-weight: 600;\n color: var(--viking-text);\n text-transform: uppercase;\n letter-spacing: 0.04em;\n }\n .viking-kanban-cards {\n display: flex;\n flex-direction: column;\n gap: var(--viking-space-1);\n min-height: var(--viking-space-4);\n }\n .viking-kanban-card {\n background: var(--viking-surface);\n border: 1px solid var(--viking-border);\n border-radius: calc(var(--viking-radius) / 1.2);\n box-shadow: var(--viking-shadow-sm);\n padding: var(--viking-space-1) var(--viking-space-2);\n cursor: grab;\n transition: var(--viking-transition);\n }\n .viking-kanban-card:hover {\n border-color: var(--viking-accent-strong);\n }\n .viking-dragging {\n opacity: 0.45;\n }\n .viking-kanban-card-header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: var(--viking-space-1);\n }\n .viking-kanban-card-title {\n font-size: var(--viking-font-size);\n font-weight: 600;\n color: var(--viking-text);\n }\n .viking-kanban-grip {\n color: var(--viking-text-muted);\n }\n .viking-kanban-card-text {\n margin: 3px 0 0;\n font-size: var(--viking-font-size);\n color: var(--viking-text-muted);\n line-height: 1.45;\n }\n `,\n ],\n})\nexport class VikingKanban {\n readonly columns = model<VikingKanbanColumn[]>([]);\n\n readonly moved = output<VikingKanbanMove>();\n\n protected readonly draggingId = signal<string | null>(null);\n protected readonly dropColumnId = signal<string | null>(null);\n\n private dragSource: { card: VikingKanbanCard; columnId: string } | null =\n null;\n\n protected onDragStart = (card: VikingKanbanCard, columnId: string): void => {\n this.dragSource = { card, columnId };\n this.draggingId.set(card.id);\n };\n\n protected onDragOver = (event: DragEvent, columnId: string): void => {\n event.preventDefault();\n this.dropColumnId.set(columnId);\n };\n\n protected onDrop = (event: DragEvent, toColumnId: string): void => {\n event.preventDefault();\n const source = this.dragSource;\n this.resetDrag();\n if (!source || source.columnId === toColumnId) {\n return;\n }\n this.columns.update((columns) =>\n columns.map((column) => {\n if (column.id === source.columnId) {\n return {\n ...column,\n cards: column.cards.filter((card) => card.id !== source.card.id),\n };\n }\n if (column.id === toColumnId) {\n return { ...column, cards: [...column.cards, source.card] };\n }\n return column;\n }),\n );\n const target = this.columns().find((column) => column.id === toColumnId);\n this.moved.emit({\n cardId: source.card.id,\n fromColumnId: source.columnId,\n toColumnId,\n toIndex: (target?.cards.length ?? 1) - 1,\n });\n };\n\n protected resetDrag = (): void => {\n this.draggingId.set(null);\n this.dropColumnId.set(null);\n this.dragSource = null;\n };\n}\n","import { ChangeDetectionStrategy, Component } from \"@angular/core\";\n\n/**\n * viking-kbd — keyboard hint chip.\n */\n@Component({\n selector: \"viking-kbd\",\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `<ng-content />`,\n styles: [\n `\n :host {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n font-family: var(--viking-font-family);\n font-size: var(--viking-font-size-ui);\n font-weight: 600;\n line-height: 1.2;\n color: var(--viking-text-muted);\n background: var(--viking-surface-alt);\n border: 1px solid var(--viking-border);\n border-radius: calc(var(--viking-radius) / 2);\n padding: 2px var(--viking-space-1);\n min-width: 1.5rem;\n box-shadow: inset 0 -1px 0\n color-mix(in srgb, var(--viking-border) 65%, transparent);\n }\n `,\n ],\n})\nexport class VikingKbd {}\n","import { ChangeDetectionStrategy, Component, input } from \"@angular/core\";\n\n/**\n * viking-label — accessible form label.\n */\n@Component({\n selector: \"viking-label\",\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <label class=\"viking-label\" [attr.for]=\"htmlFor() || null\">\n <ng-content />\n @if (required()) {\n <span class=\"viking-label-required\" aria-hidden=\"true\">*</span>\n }\n </label>\n `,\n styles: [\n `\n .viking-label {\n display: inline-flex;\n align-items: center;\n gap: calc(var(--viking-space-1) / 4);\n font-family: var(--viking-font-family);\n font-size: var(--viking-font-size-ui);\n font-weight: 600;\n color: var(--viking-text);\n letter-spacing: 0.01em;\n line-height: 1.3;\n }\n .viking-label-required {\n color: var(--viking-accent);\n }\n `,\n ],\n})\nexport class VikingLabel {\n readonly htmlFor = input<string>(\"\");\n readonly required = input<boolean>(false);\n}\n","import { ChangeDetectionStrategy, Component, input } from \"@angular/core\";\nimport { VikingSpinner } from \"../spinner/spinner\";\n\n/**\n * viking-loading-overlay — blocks interaction with a centered spinner.\n * Use on cards, panels, or full-page surfaces during async operations.\n */\n@Component({\n selector: \"viking-loading-overlay\",\n imports: [VikingSpinner],\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n role: \"status\",\n \"aria-live\": \"polite\",\n \"[attr.aria-label]\": \"label()\",\n \"[class.viking-loading-overlay-full]\": \"full()\",\n },\n template: `\n <div class=\"viking-loading-overlay-backdrop\" aria-hidden=\"true\"></div>\n <div class=\"viking-loading-overlay-content\">\n <viking-spinner [size]=\"spinnerSize()\" [label]=\"label()\" />\n @if (message()) {\n <p class=\"viking-loading-overlay-message\">{{ message() }}</p>\n }\n </div>\n `,\n styles: [\n `\n :host {\n position: absolute;\n inset: 0;\n z-index: 2;\n display: flex;\n align-items: center;\n justify-content: center;\n border-radius: inherit;\n animation: viking-fade-in var(--viking-duration-fast)\n var(--viking-ease-out);\n }\n :host(.viking-loading-overlay-full) {\n position: fixed;\n z-index: var(--viking-z-overlay);\n border-radius: 0;\n }\n .viking-loading-overlay-backdrop {\n position: absolute;\n inset: 0;\n background: color-mix(in srgb, var(--viking-bg) 55%, transparent);\n backdrop-filter: blur(2px);\n border-radius: inherit;\n }\n .viking-loading-overlay-content {\n position: relative;\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: var(--viking-space-1);\n padding: var(--viking-space-2);\n }\n .viking-loading-overlay-message {\n margin: 0;\n font-family: var(--viking-font-family);\n font-size: var(--viking-font-size-sm);\n color: var(--viking-text-muted);\n text-align: center;\n }\n @media (prefers-reduced-motion: reduce) {\n :host {\n animation: none;\n }\n }\n `,\n ],\n})\nexport class VikingLoadingOverlay {\n readonly label = input<string>(\"Loading\");\n readonly message = input<string>(\"\");\n readonly spinnerSize = input<number>(28);\n readonly full = input<boolean>(false);\n}\n","import { ChangeDetectionStrategy, Component, input } from \"@angular/core\";\n\n/** viking-metric-row — responsive grid row for HUD metric cards. */\n@Component({\n selector: \"viking-metric-row\",\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `<div class=\"viking-metric-row hud-metrics\"><ng-content /></div>`,\n})\nexport class VikingMetricRow {}\n\n/** viking-metric-card — single KPI tile in a metric row. */\n@Component({\n selector: \"viking-metric-card\",\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: \"viking-metric-card metric-card col-span-4 col-span-md-4\",\n \"[class.viking-metric-card-warning]\": \"variant() === 'warning'\",\n \"[class.warning]\": \"variant() === 'warning'\",\n \"[class.viking-metric-card-critical]\": \"variant() === 'critical'\",\n \"[class.critical]\": \"variant() === 'critical'\",\n },\n template: `\n <span class=\"viking-metric-label metric-label\">{{ label() }}</span>\n <span class=\"viking-metric-value metric-value\"\n ><ng-content />{{ value() }}</span\n >\n `,\n})\nexport class VikingMetricCard {\n readonly label = input.required<string>();\n readonly value = input<string | number>(\"\");\n readonly variant = input<\"default\" | \"warning\" | \"critical\">(\"default\");\n}\n","import { ChangeDetectionStrategy, Component } from \"@angular/core\";\n\n/**\n * viking-menubar — horizontal application menu bar.\n */\n@Component({\n selector: \"viking-menubar\",\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n role: \"menubar\",\n class: \"viking-menubar\",\n },\n template: `<ng-content />`,\n styles: [\n `\n :host {\n display: flex;\n flex-wrap: wrap;\n align-items: center;\n gap: var(--viking-space-1);\n padding: var(--viking-space-1);\n border: 1px solid var(--viking-border);\n border-radius: var(--viking-radius);\n background: var(--viking-surface);\n font-family: var(--viking-font-family);\n }\n :host ::ng-deep .viking-menubar-item,\n :host ::ng-deep button[role=\"menuitem\"] {\n font-size: var(--viking-font-size-ui);\n font-weight: 600;\n display: inline-flex;\n align-items: center;\n gap: var(--viking-space-1);\n min-height: var(--viking-control-height-sm);\n padding: 0 var(--viking-space-2);\n border: 1px solid transparent;\n border-radius: var(--viking-radius);\n background: transparent;\n color: var(--viking-text);\n cursor: pointer;\n transition: var(--viking-transition);\n }\n :host ::ng-deep .viking-menubar-item:hover,\n :host ::ng-deep button[role=\"menuitem\"]:hover {\n background: var(--viking-accent-soft);\n color: var(--viking-accent);\n }\n :host ::ng-deep .viking-menubar-item:focus-visible,\n :host ::ng-deep button[role=\"menuitem\"]:focus-visible {\n outline: var(--viking-ring-width) solid var(--viking-ring);\n outline-offset: var(--viking-ring-offset);\n }\n `,\n ],\n})\nexport class VikingMenubar {}\n\n/**\n * viking-menubar-item — menu item trigger for viking-menubar.\n */\n@Component({\n selector: \"viking-menubar-item\",\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <button type=\"button\" role=\"menuitem\" class=\"viking-menubar-item\">\n <ng-content />\n </button>\n `,\n styles: [\n `\n :host {\n display: inline-flex;\n }\n `,\n ],\n})\nexport class VikingMenubarItem {}\n","import {\n ChangeDetectionStrategy,\n Component,\n input,\n model,\n} from \"@angular/core\";\nimport { VikingControl, provideVikingCva } from \"../core/cva\";\nimport { VikingSelectOption } from \"../../core/types\";\nimport type { VikingSelectWidth } from \"../select/select\";\nimport { vikingUid } from \"../../core/uid\";\n\n/**\n * viking-native-select — styled native <select>.\n */\n@Component({\n selector: \"viking-native-select\",\n providers: [provideVikingCva(VikingNativeSelect)],\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n \"[class.viking-native-select-full]\": \"width() === 'full'\",\n \"[class.viking-native-select-half]\": \"width() === 'half'\",\n },\n template: `\n <label\n class=\"viking-native-select\"\n [class.viking-disabled]=\"disabled() || formDisabled()\"\n >\n @if (label()) {\n <span class=\"viking-native-select-label\">{{ label() }}</span>\n }\n <select\n class=\"viking-native-select-control\"\n [id]=\"selectId\"\n [disabled]=\"disabled() || formDisabled()\"\n [value]=\"value() ?? ''\"\n (change)=\"onSelectChange($event)\"\n (blur)=\"onTouched()\"\n >\n @if (placeholder()) {\n <option value=\"\" disabled [selected]=\"!value()\">\n {{ placeholder() }}\n </option>\n }\n @for (option of options(); track option.label) {\n <option [value]=\"option.value\" [disabled]=\"option.disabled\">\n {{ option.label }}\n </option>\n }\n </select>\n </label>\n `,\n styles: [\n `\n :host {\n display: block;\n min-width: 0;\n font-family: var(--viking-font-family);\n }\n :host(.viking-native-select-full) {\n width: 100%;\n }\n :host(.viking-native-select-half) {\n width: 100%;\n max-width: var(--viking-select-half-max-width, min(100%, 24rem));\n }\n .viking-native-select {\n display: flex;\n flex-direction: column;\n gap: var(--viking-space-1);\n }\n .viking-native-select-label {\n font-size: var(--viking-font-size-ui);\n font-weight: 700;\n color: var(--viking-text);\n }\n .viking-native-select-control {\n width: 100%;\n min-height: var(--viking-control-height);\n padding: 0 var(--viking-space-2);\n font-size: var(--viking-font-size);\n color: var(--viking-text);\n background: var(--viking-surface);\n border: 1px solid var(--viking-border-strong);\n border-radius: var(--viking-radius);\n cursor: pointer;\n transition: var(--viking-transition);\n }\n .viking-native-select-control:hover:not(:disabled) {\n border-color: var(--viking-accent-strong);\n }\n .viking-native-select-control:focus-visible {\n outline: var(--viking-ring-width) solid var(--viking-ring);\n outline-offset: var(--viking-ring-offset);\n }\n .viking-disabled .viking-native-select-control {\n opacity: var(--viking-state-disabled-opacity);\n cursor: not-allowed;\n }\n `,\n ],\n})\nexport class VikingNativeSelect extends VikingControl<string | number | null> {\n readonly label = input(\"\");\n readonly placeholder = input(\"\");\n readonly options = input<VikingSelectOption[]>([]);\n readonly disabled = input(false);\n readonly width = input<VikingSelectWidth>(\"half\");\n\n readonly value = model<string | number | null>(null);\n\n protected readonly selectId = vikingUid(\"viking-native-select\");\n\n writeValue(value: string | number | null): void {\n this.value.set(value);\n }\n\n protected onSelectChange = (event: Event): void => {\n const raw = (event.target as HTMLSelectElement).value;\n const match = this.options().find((o) => String(o.value) === raw);\n const next = (match?.value ?? raw) as string | number;\n this.value.set(next);\n this.onChange(next);\n };\n}\n","import { ChangeDetectionStrategy, Component, input } from \"@angular/core\";\n\nexport interface VikingNavItem {\n label: string;\n href?: string;\n active?: boolean;\n disabled?: boolean;\n}\n\n/**\n * viking-navigation-menu — primary nav links with active indicator.\n */\n@Component({\n selector: \"viking-navigation-menu\",\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n role: \"navigation\",\n class: \"viking-navigation-menu\",\n \"[attr.aria-label]\": \"label()\",\n },\n template: `\n <ul class=\"viking-nav-list\" role=\"list\">\n @for (item of items(); track item.label) {\n <li class=\"viking-nav-item\" role=\"listitem\">\n @if (item.href && !item.disabled) {\n <a\n class=\"viking-nav-link\"\n [class.viking-active]=\"item.active\"\n [href]=\"item.href\"\n [attr.aria-current]=\"item.active ? 'page' : null\"\n >\n {{ item.label }}\n </a>\n } @else {\n <span\n class=\"viking-nav-link\"\n [class.viking-active]=\"item.active\"\n [class.viking-disabled]=\"item.disabled\"\n [attr.aria-disabled]=\"item.disabled ? 'true' : null\"\n >\n {{ item.label }}\n </span>\n }\n </li>\n }\n </ul>\n `,\n styles: [\n `\n :host {\n display: block;\n font-family: var(--viking-font-family);\n }\n .viking-nav-list {\n display: flex;\n flex-wrap: wrap;\n align-items: center;\n gap: var(--viking-space-half);\n margin: 0;\n padding: var(--viking-space-half);\n list-style: none;\n border: 1px solid var(--viking-border);\n border-radius: var(--viking-radius-lg);\n background: color-mix(\n in srgb,\n var(--viking-surface-alt) 80%,\n var(--viking-surface)\n );\n box-shadow: var(--viking-shadow-sm);\n }\n .viking-nav-link {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n min-height: var(--viking-control-height-sm);\n min-width: var(--viking-btn-min-width, 120px);\n padding: 0 var(--viking-space-2);\n font-size: var(--viking-font-size-sm);\n font-weight: var(--viking-font-weight-semibold);\n color: var(--viking-text-muted);\n text-decoration: none;\n border-radius: var(--viking-radius);\n border: 1px solid transparent;\n transition: var(--viking-transition-interactive);\n position: relative;\n }\n a.viking-nav-link:hover {\n color: var(--viking-text);\n background: var(--viking-accent-soft);\n border-color: var(--viking-border-subtle);\n }\n a.viking-nav-link:focus-visible {\n outline: var(--viking-ring-width) solid var(--viking-ring);\n outline-offset: var(--viking-ring-offset);\n }\n .viking-nav-link.viking-active {\n color: var(--viking-accent-content);\n background: var(--viking-accent);\n border-color: color-mix(\n in srgb,\n var(--viking-accent) 80%,\n var(--viking-black)\n );\n box-shadow: var(--viking-shadow-sm);\n }\n .viking-nav-link.viking-disabled {\n opacity: var(--viking-state-disabled-opacity);\n cursor: not-allowed;\n }\n `,\n ],\n})\nexport class VikingNavigationMenu {\n readonly label = input(\"Main\");\n readonly items = input<VikingNavItem[]>([]);\n}\n","import { ChangeDetectionStrategy, Component, input } from \"@angular/core\";\nimport { NgTemplateOutlet } from \"@angular/common\";\nimport { VikingIcon } from \"../icon/icon\";\nimport { VikingIconName } from \"../../core/icons\";\n\n/**\n * viking-navbar — horizontal navigation container.\n * Compose with viking-navbar-item and any other inline content.\n */\n@Component({\n selector: \"viking-navbar\",\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: { \"[attr.aria-label]\": \"label()\" },\n template: `<nav class=\"viking-navbar\" [attr.aria-label]=\"label()\">\n <ng-content />\n </nav>`,\n styles: [\n `\n :host {\n display: block;\n }\n .viking-navbar {\n display: flex;\n align-items: center;\n gap: var(--viking-space-half);\n flex-wrap: wrap;\n padding: var(--viking-space-half);\n background: color-mix(in srgb, var(--viking-surface) 96%, transparent);\n border: 1px solid var(--viking-border);\n border-radius: var(--viking-radius-lg);\n box-shadow: var(--viking-shadow-sm);\n }\n `,\n ],\n})\nexport class VikingNavbar {\n readonly label = input<string>(\"Primary\");\n}\n\n/** Navigation link/button inside viking-navbar. */\n@Component({\n selector: \"viking-navbar-item\",\n imports: [VikingIcon, NgTemplateOutlet],\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <ng-template #content>\n @if (icon()) {\n <viking-icon [name]=\"icon()!\" [size]=\"18\" />\n }\n <ng-content />\n </ng-template>\n\n @if (href()) {\n <a\n class=\"viking-navbar-item\"\n [href]=\"href()\"\n [class.viking-current]=\"current()\"\n [attr.aria-current]=\"current() ? 'page' : null\"\n >\n <ng-container *ngTemplateOutlet=\"content\" />\n </a>\n } @else {\n <button\n type=\"button\"\n class=\"viking-navbar-item\"\n [class.viking-current]=\"current()\"\n >\n <ng-container *ngTemplateOutlet=\"content\" />\n </button>\n }\n `,\n styles: [\n `\n :host {\n display: inline-flex;\n }\n .viking-navbar-item {\n display: inline-flex;\n align-items: center;\n gap: var(--viking-space-1);\n border: 1px solid transparent;\n background: transparent;\n color: var(--viking-text-muted);\n font-family: var(--viking-font-family);\n font-size: var(--viking-font-size-sm);\n font-weight: var(--viking-font-weight-medium);\n padding: var(--viking-space-1) var(--viking-space-1-5);\n border-radius: var(--viking-radius);\n text-decoration: none;\n cursor: pointer;\n transition: var(--viking-transition-interactive);\n position: relative;\n }\n .viking-navbar-item:hover {\n color: var(--viking-text);\n background: var(--viking-accent-soft);\n }\n .viking-navbar-item:focus-visible {\n outline: var(--viking-ring-width) solid var(--viking-ring);\n outline-offset: var(--viking-ring-offset);\n }\n .viking-current {\n color: var(--viking-text);\n font-weight: var(--viking-font-weight-semibold);\n background: var(--viking-accent-soft);\n }\n .viking-current::after {\n content: \"\";\n position: absolute;\n bottom: 0;\n left: var(--viking-space-1);\n right: var(--viking-space-1);\n height: 2px;\n border-radius: var(--viking-radius-pill);\n background: var(--viking-accent);\n }\n `,\n ],\n})\nexport class VikingNavbarItem {\n readonly href = input<string | null>(null);\n readonly icon = input<VikingIconName | null>(null);\n readonly current = input<boolean>(false);\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n computed,\n input,\n model,\n output,\n} from \"@angular/core\";\nimport { VikingControl, provideVikingCva } from \"../core/cva\";\n\n/**\n * viking-otp-input — one-time-passcode input.\n * Auto-advances between cells and supports paste. ControlValueAccessor-compatible.\n */\n@Component({\n selector: \"viking-otp-input\",\n providers: [provideVikingCva(VikingOtpInput)],\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n \"[class.viking-otp-centered]\": \"centered()\",\n },\n template: `\n <div\n class=\"viking-otp\"\n role=\"group\"\n [attr.aria-label]=\"label() || 'One-time passcode'\"\n >\n @for (index of indexes(); track index) {\n <input\n class=\"viking-otp-cell\"\n type=\"text\"\n inputmode=\"numeric\"\n autocomplete=\"one-time-code\"\n maxlength=\"1\"\n [value]=\"value().charAt(index) || ''\"\n [disabled]=\"disabled() || formDisabled()\"\n [attr.aria-label]=\"'Digit ' + (index + 1)\"\n (input)=\"onCellInput($event, index)\"\n (keydown)=\"onKeydown($event, index)\"\n (paste)=\"onPaste($event)\"\n (blur)=\"onTouched()\"\n />\n }\n </div>\n `,\n styles: [\n `\n .viking-otp {\n display: flex;\n gap: var(--viking-space-1);\n }\n :host(.viking-otp-centered) .viking-otp {\n justify-content: center;\n width: 100%;\n gap: var(--viking-space-2);\n }\n .viking-otp-cell {\n width: var(--viking-control-height);\n height: var(--viking-control-height);\n text-align: center;\n font-family: var(--viking-font-family);\n font-size: var(--viking-font-size-lg);\n font-weight: var(--viking-font-weight-semibold);\n color: var(--viking-text);\n background: var(--viking-surface-alt);\n border: 1px solid var(--viking-border);\n border-radius: var(--viking-radius-sm);\n box-shadow: var(--viking-shadow-xs);\n transition: var(--viking-transition-interactive);\n font-variant-numeric: tabular-nums;\n }\n .viking-otp-cell:hover:not(:disabled) {\n border-color: color-mix(\n in srgb,\n var(--viking-accent) 35%,\n var(--viking-border-strong)\n );\n box-shadow: var(--viking-shadow-sm);\n }\n .viking-otp-cell:focus-visible {\n outline: var(--viking-ring-width) solid var(--viking-ring);\n outline-offset: var(--viking-ring-offset);\n border-color: var(--viking-accent);\n }\n .viking-otp-cell:disabled {\n opacity: var(--viking-state-disabled-opacity);\n }\n `,\n ],\n})\nexport class VikingOtpInput extends VikingControl<string> {\n readonly length = input<number>(6);\n readonly value = model<string>(\"\");\n readonly label = input<string>(\"\");\n readonly disabled = input<boolean>(false);\n readonly centered = input<boolean>(false);\n\n readonly completed = output<string>();\n\n constructor(private readonly host: ElementRef<HTMLElement>) {\n super();\n }\n\n protected readonly indexes = computed(() =>\n Array.from({ length: this.length() }, (_, index) => index),\n );\n\n writeValue(value: string): void {\n this.value.set(value ?? \"\");\n }\n\n private commit(next: string): void {\n this.value.set(next);\n this.onChange(next);\n if (next.length === this.length()) {\n this.completed.emit(next);\n }\n }\n\n private focusCell(index: number): void {\n const cells =\n this.host.nativeElement.querySelectorAll<HTMLInputElement>(\n \".viking-otp-cell\",\n );\n cells[Math.min(this.length() - 1, Math.max(0, index))]?.focus();\n }\n\n protected onCellInput = (event: Event, index: number): void => {\n const char = (event.target as HTMLInputElement).value\n .replace(/\\D/g, \"\")\n .slice(-1);\n const chars = this.value().padEnd(this.length(), \" \").split(\"\");\n chars[index] = char || \" \";\n this.commit(chars.join(\"\").trimEnd().replace(/ /g, \"\"));\n if (char) {\n this.focusCell(index + 1);\n }\n };\n\n protected onKeydown = (event: KeyboardEvent, index: number): void => {\n if (\n event.key === \"Backspace\" &&\n !(event.target as HTMLInputElement).value\n ) {\n this.focusCell(index - 1);\n } else if (event.key === \"ArrowLeft\") {\n this.focusCell(index - 1);\n } else if (event.key === \"ArrowRight\") {\n this.focusCell(index + 1);\n }\n };\n\n protected onPaste = (event: ClipboardEvent): void => {\n event.preventDefault();\n const digits = (event.clipboardData?.getData(\"text\") ?? \"\")\n .replace(/\\D/g, \"\")\n .slice(0, this.length());\n if (digits) {\n this.commit(digits);\n this.focusCell(digits.length - 1);\n }\n };\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n input,\n output,\n signal,\n} from \"@angular/core\";\nimport { VikingControl, provideVikingCva } from \"../core/cva\";\nimport { vikingUid } from \"../../core/uid\";\nimport { VikingOtpInput } from \"../otp-input/otp-input\";\n\n/**\n * viking-verification-code-field — labeled, centered OTP entry for MFA and phone verification flows.\n */\n@Component({\n selector: \"viking-verification-code-field\",\n imports: [VikingOtpInput],\n providers: [provideVikingCva(VikingVerificationCodeField)],\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: \"viking-verification-code-field\",\n \"[class.viking-verification-code-field-invalid]\": \"!!error()\",\n },\n template: `\n <fieldset class=\"viking-verification-code-fieldset\">\n @if (label()) {\n <legend class=\"viking-verification-code-label\" [id]=\"labelId\">\n {{ label() }}\n @if (required()) {\n <span class=\"viking-verification-code-required\" aria-hidden=\"true\"\n >*</span\n >\n }\n </legend>\n }\n <div class=\"viking-verification-code-control\">\n <viking-otp-input\n [length]=\"length()\"\n [value]=\"value()\"\n (valueChange)=\"onValueChange($event)\"\n [disabled]=\"disabled() || formDisabled()\"\n [label]=\"label()\"\n [centered]=\"true\"\n (completed)=\"completed.emit($event)\"\n />\n </div>\n </fieldset>\n @if (description() && !error()) {\n <p class=\"viking-verification-code-description\" [id]=\"descriptionId\">\n {{ description() }}\n </p>\n }\n @if (error()) {\n <p class=\"viking-verification-code-error\" [id]=\"errorId\" role=\"alert\">\n {{ error() }}\n </p>\n }\n `,\n styles: [\n `\n :host {\n display: block;\n width: 100%;\n font-family: var(--viking-font-family);\n }\n\n :host(.viking-verification-code-field-invalid) {\n animation: viking-shake var(--viking-duration-slow)\n var(--viking-ease-default);\n }\n\n .viking-verification-code-fieldset {\n margin: 0;\n padding: 0;\n border: 0;\n min-width: 0;\n width: 100%;\n }\n\n .viking-verification-code-label {\n display: block;\n width: 100%;\n margin-bottom: var(--viking-space-1);\n padding: 0;\n font-size: var(--viking-font-size-sm);\n font-weight: var(--viking-font-weight-semibold);\n color: var(--viking-text);\n letter-spacing: var(--viking-letter-spacing-wide);\n line-height: var(--viking-line-height-tight);\n text-align: center;\n }\n\n .viking-verification-code-required {\n color: var(--viking-danger);\n margin-left: 2px;\n }\n\n .viking-verification-code-control {\n display: flex;\n justify-content: center;\n width: 100%;\n }\n\n .viking-verification-code-description,\n .viking-verification-code-error {\n margin: var(--viking-space-1) 0 0;\n font-size: var(--viking-font-size-sm);\n line-height: var(--viking-line-height-normal);\n text-align: center;\n }\n\n .viking-verification-code-description {\n color: var(--viking-text-muted);\n }\n\n .viking-verification-code-error {\n color: var(--viking-danger-text, var(--viking-danger));\n font-weight: var(--viking-font-weight-semibold);\n }\n `,\n ],\n})\nexport class VikingVerificationCodeField extends VikingControl<string> {\n readonly length = input<number>(6);\n readonly label = input<string>(\"Verification Code\");\n readonly description = input<string>(\"\");\n readonly error = input<string>(\"\");\n readonly required = input<boolean>(false);\n readonly disabled = input<boolean>(false);\n\n readonly completed = output<string>();\n\n protected readonly value = signal<string>(\"\");\n protected readonly labelId = vikingUid(\"viking-verification-code-label\");\n protected readonly descriptionId = vikingUid(\n \"viking-verification-code-description\",\n );\n protected readonly errorId = vikingUid(\"viking-verification-code-error\");\n\n writeValue(value: string): void {\n this.value.set(value ?? \"\");\n }\n\n protected onValueChange = (next: string): void => {\n this.value.set(next);\n this.onChange(next);\n this.onTouched();\n };\n}\n","import { ChangeDetectionStrategy, Component, input } from \"@angular/core\";\nimport { Params, RouterLink } from \"@angular/router\";\nimport { VikingIcon } from \"../icon/icon\";\n\n/**\n * viking-page-back-link — consistent dashboard back navigation with fixed spacing\n * below the control so page titles never sit flush against the link.\n */\n@Component({\n selector: \"viking-page-back-link\",\n imports: [RouterLink, VikingIcon],\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: \"viking-page-back-link-host\",\n },\n template: `\n <nav\n class=\"viking-page-back-nav page-back-nav\"\n [attr.aria-label]=\"navLabel()\"\n >\n <a\n class=\"viking-page-back-link back-link\"\n [routerLink]=\"route()\"\n [queryParams]=\"queryParams()\"\n [attr.aria-label]=\"label()\"\n >\n <viking-icon name=\"arrow-left\" [size]=\"18\" color=\"accent\" />\n <span>{{ label() }}</span>\n </a>\n </nav>\n `,\n styles: [\n `\n :host {\n display: block;\n width: 100%;\n }\n\n .viking-page-back-nav {\n margin: 0;\n padding: 0;\n }\n\n .viking-page-back-link {\n display: inline-flex;\n align-items: center;\n gap: var(--viking-space-1);\n padding: var(--viking-space-half) 0;\n font-family: var(--viking-font-family);\n font-size: var(--viking-font-size-sm);\n font-weight: var(--viking-font-weight-semibold);\n color: var(--viking-accent-strong);\n text-decoration: none;\n border-radius: var(--viking-radius-xs);\n transition: var(--viking-transition-interactive);\n }\n\n .viking-page-back-link:hover {\n color: var(--viking-accent);\n }\n\n .viking-page-back-link:focus-visible {\n outline: var(--viking-ring-width) solid var(--viking-ring);\n outline-offset: var(--viking-ring-offset);\n }\n `,\n ],\n})\nexport class VikingPageBackLink {\n readonly route = input<string | readonly string[]>(\"/dashboard\");\n readonly queryParams = input<Params | null>(null);\n readonly label = input<string>(\"Back to Dashboard\");\n readonly navLabel = input<string>(\"Return to dashboard\");\n}\n","import { ChangeDetectionStrategy, Component, input } from \"@angular/core\";\nimport { Params } from \"@angular/router\";\nimport { VikingPageBackLink } from \"../page-back-link/page-back-link\";\n\n/**\n * viking-page-header — unified HUD page title block (tag, title, subtitle) with\n * optional back navigation and action slots.\n */\n@Component({\n selector: \"viking-page-header\",\n imports: [VikingPageBackLink],\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n \"[class.viking-page-header-sidebar]\": \"layout() === 'sidebar'\",\n },\n template: `\n <header\n class=\"viking-page-header\"\n [class.dashboard-topbar]=\"layout() === 'sidebar'\"\n [class.hud-header]=\"layout() === 'hud'\"\n >\n <div class=\"viking-page-header-main title-group topbar-left\">\n @if (backTo()) {\n <viking-page-back-link\n [route]=\"backTo()!\"\n [queryParams]=\"backQueryParams()\"\n [label]=\"backLabel()\"\n [navLabel]=\"backNavLabel()\"\n />\n } @else {\n <ng-content select=\"[vikingPageHeaderBack]\" />\n }\n\n <div class=\"viking-page-header-title-block\">\n @if (tag()) {\n <div class=\"section-tag-row\">\n <span class=\"section-tag viking-page-header-tag\">{{\n tag()\n }}</span>\n </div>\n }\n <h1 class=\"viking-page-header-title hud-title page-title\">\n {{ title() }}\n </h1>\n @if (subtitle()) {\n <p\n class=\"viking-page-header-subtitle hud-subtitle page-description\"\n >\n {{ subtitle() }}\n </p>\n }\n <ng-content select=\"[vikingPageHeaderExtra]\" />\n </div>\n </div>\n <div class=\"viking-page-header-actions topbar-right\">\n <ng-content select=\"[vikingPageHeaderActions]\" />\n </div>\n </header>\n `,\n})\nexport class VikingPageHeader {\n readonly tag = input<string>(\"\");\n readonly title = input.required<string>();\n readonly subtitle = input<string>(\"\");\n readonly layout = input<\"hud\" | \"sidebar\">(\"hud\");\n readonly backTo = input<string | readonly string[] | null>(null);\n readonly backQueryParams = input<Params | null>(null);\n readonly backLabel = input<string>(\"Back to Dashboard\");\n readonly backNavLabel = input<string>(\"Return to dashboard\");\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n input,\n model,\n} from \"@angular/core\";\nimport { VikingIcon } from \"../icon/icon\";\n\n/**\n * viking-pagination — page navigation.\n */\n@Component({\n selector: \"viking-pagination\",\n imports: [VikingIcon],\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <nav class=\"viking-pagination\" aria-label=\"Pagination\">\n <button\n type=\"button\"\n class=\"viking-page-btn\"\n aria-label=\"Previous page\"\n [disabled]=\"page() <= 1\"\n (click)=\"goTo(page() - 1)\"\n >\n <viking-icon name=\"chevron-left\" [size]=\"18\" />\n </button>\n @for (item of pageItems(); track $index) {\n @if (item === null) {\n <span class=\"viking-page-ellipsis\" aria-hidden=\"true\">…</span>\n } @else {\n <button\n type=\"button\"\n class=\"viking-page-btn\"\n [class.viking-page-current]=\"item === page()\"\n [attr.aria-current]=\"item === page() ? 'page' : null\"\n [attr.aria-label]=\"'Page ' + item\"\n (click)=\"goTo(item)\"\n >\n {{ item }}\n </button>\n }\n }\n <button\n type=\"button\"\n class=\"viking-page-btn\"\n aria-label=\"Next page\"\n [disabled]=\"page() >= totalPages()\"\n (click)=\"goTo(page() + 1)\"\n >\n <viking-icon name=\"chevron-right\" [size]=\"18\" />\n </button>\n </nav>\n `,\n styles: [\n `\n .viking-pagination {\n display: flex;\n align-items: center;\n gap: calc(var(--viking-space-1) / 2);\n flex-wrap: wrap;\n }\n .viking-page-btn {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n min-width: var(--viking-control-height-sm);\n height: var(--viking-control-height-sm);\n padding: 0 var(--viking-space-1);\n border: 1px solid var(--viking-border-subtle);\n border-radius: var(--viking-radius);\n background: var(--viking-surface);\n color: var(--viking-text);\n font-family: var(--viking-font-family);\n font-size: var(--viking-font-size-sm);\n font-weight: var(--viking-font-weight-medium);\n cursor: pointer;\n transition: var(--viking-transition-interactive);\n font-variant-numeric: tabular-nums;\n box-shadow: var(--viking-shadow-xs);\n }\n .viking-page-btn:hover:not(:disabled):not(.viking-page-current) {\n background: var(--viking-accent-soft);\n border-color: var(--viking-accent-strong);\n transform: translateY(var(--viking-state-hover-lift));\n }\n .viking-page-btn:active:not(:disabled):not(.viking-page-current) {\n transform: translateY(0) scale(var(--viking-state-active-scale));\n }\n .viking-page-btn:focus-visible {\n outline: var(--viking-ring-width) solid var(--viking-ring);\n outline-offset: var(--viking-ring-offset);\n }\n .viking-page-btn:disabled {\n opacity: var(--viking-state-disabled-opacity);\n cursor: not-allowed;\n }\n .viking-page-current {\n background: var(--viking-accent);\n border-color: color-mix(\n in srgb,\n var(--viking-accent) 80%,\n var(--viking-black)\n );\n color: var(--viking-accent-content);\n font-size: var(--viking-font-size-sm);\n font-weight: var(--viking-font-weight-bold);\n box-shadow: var(--viking-shadow-sm);\n }\n .viking-page-ellipsis {\n color: var(--viking-text-muted);\n padding: 0 var(--viking-space-1);\n font-size: var(--viking-font-size);\n }\n `,\n ],\n})\nexport class VikingPagination {\n readonly page = model<number>(1);\n readonly totalPages = input.required<number>();\n\n /** Windowed page list with null entries marking ellipses. */\n protected readonly pageItems = computed<(number | null)[]>(() => {\n const total = this.totalPages();\n const current = this.page();\n if (total <= 7) {\n return Array.from({ length: total }, (_, index) => index + 1);\n }\n const pages = new Set<number>([\n 1,\n 2,\n total - 1,\n total,\n current - 1,\n current,\n current + 1,\n ]);\n const sorted = [...pages]\n .filter((value) => value >= 1 && value <= total)\n .sort((a, b) => a - b);\n const items: (number | null)[] = [];\n let previous = 0;\n for (const value of sorted) {\n if (value - previous > 1) {\n items.push(null);\n }\n items.push(value);\n previous = value;\n }\n return items;\n });\n\n protected goTo = (target: number): void => {\n const clamped = Math.min(this.totalPages(), Math.max(1, target));\n this.page.set(clamped);\n };\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n input,\n model,\n signal,\n} from \"@angular/core\";\nimport { VikingControl, provideVikingCva } from \"../core/cva\";\nimport { VikingIcon } from \"../icon/icon\";\n\n/**\n * viking-pillbox — multi-value tag input.\n * Type and press Enter (or comma) to add pills. ControlValueAccessor-compatible.\n */\n@Component({\n selector: \"viking-pillbox\",\n imports: [VikingIcon],\n providers: [provideVikingCva(VikingPillbox)],\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <div\n class=\"viking-control viking-pillbox\"\n [class.viking-disabled]=\"disabled() || formDisabled()\"\n role=\"group\"\n [attr.aria-label]=\"label() || 'Tags'\"\n >\n @for (pill of values(); track pill) {\n <span class=\"viking-pill\">\n {{ pill }}\n <button\n type=\"button\"\n class=\"viking-pill-remove\"\n [attr.aria-label]=\"'Remove ' + pill\"\n [disabled]=\"disabled() || formDisabled()\"\n (click)=\"remove(pill)\"\n >\n <viking-icon name=\"x\" [size]=\"13\" />\n </button>\n </span>\n }\n <input\n type=\"text\"\n [placeholder]=\"values().length === 0 ? placeholder() : ''\"\n [value]=\"draft()\"\n [disabled]=\"disabled() || formDisabled()\"\n [attr.aria-label]=\"label() || placeholder() || 'Add tag'\"\n (input)=\"draft.set($any($event.target).value)\"\n (keydown)=\"onKeydown($event)\"\n (blur)=\"onTouched()\"\n />\n </div>\n `,\n styles: [\n `\n .viking-pillbox {\n display: flex;\n align-items: center;\n flex-wrap: wrap;\n gap: calc(var(--viking-space-1) / 1.5);\n min-height: var(--viking-control-height);\n padding: calc(var(--viking-space-1) / 1.5) var(--viking-space-1);\n background: var(--viking-surface);\n border: 1px solid var(--viking-border-strong);\n border-radius: var(--viking-radius);\n box-shadow: var(--viking-shadow-sm);\n transition: var(--viking-transition);\n cursor: text;\n }\n .viking-pillbox:focus-within {\n outline: var(--viking-ring-width) solid var(--viking-ring);\n outline-offset: var(--viking-ring-offset);\n }\n .viking-disabled {\n opacity: var(--viking-state-disabled-opacity);\n }\n .viking-pill {\n display: inline-flex;\n align-items: center;\n gap: 5px;\n font-family: var(--viking-font-family);\n font-size: var(--viking-font-size);\n font-weight: 500;\n color: var(--viking-text);\n background: var(--viking-accent-soft);\n border: 1px solid var(--viking-accent-strong);\n border-radius: var(--viking-radius-pill);\n padding: 2px var(--viking-space-1);\n line-height: 1.35;\n }\n .viking-pill-remove {\n display: inline-flex;\n border: none;\n background: transparent;\n color: var(--viking-text-muted);\n cursor: pointer;\n padding: 2px;\n border-radius: var(--viking-radius-pill);\n }\n .viking-pill-remove:hover {\n color: var(--viking-danger);\n }\n .viking-pill-remove:focus-visible {\n outline: var(--viking-ring-width) solid var(--viking-ring);\n outline-offset: 1px;\n }\n input {\n flex: 1;\n min-width: 108px;\n border: none;\n outline: none;\n background: transparent;\n color: var(--viking-text);\n font-family: var(--viking-font-family);\n font-size: var(--viking-font-size);\n padding: calc(var(--viking-space-1) / 2);\n }\n input::placeholder {\n color: var(--viking-text-muted);\n }\n `,\n ],\n})\nexport class VikingPillbox extends VikingControl<string[]> {\n readonly values = model<string[]>([]);\n readonly placeholder = input<string>(\"Add a tag…\");\n readonly label = input<string>(\"\");\n readonly disabled = input<boolean>(false);\n\n protected readonly draft = signal(\"\");\n\n writeValue(value: string[]): void {\n this.values.set(value ?? []);\n }\n\n protected onKeydown = (event: KeyboardEvent): void => {\n if (event.key === \"Enter\" || event.key === \",\") {\n event.preventDefault();\n const next = this.draft().trim().replace(/,$/, \"\");\n if (next && !this.values().includes(next)) {\n this.values.update((list) => [...list, next]);\n this.onChange(this.values());\n }\n this.draft.set(\"\");\n } else if (\n event.key === \"Backspace\" &&\n !this.draft() &&\n this.values().length > 0\n ) {\n this.remove(this.values()[this.values().length - 1]);\n }\n };\n\n protected remove = (pill: string): void => {\n this.values.update((list) => list.filter((item) => item !== pill));\n this.onChange(this.values());\n };\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n input,\n model,\n} from \"@angular/core\";\n\n/**\n * viking-popover — anchored floating panel.\n * Project the trigger with the `vikingTrigger` attribute; everything else becomes\n * the panel content. Closes on Escape or outside interaction.\n */\n@Component({\n selector: \"viking-popover\",\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n \"(click)\": \"onHostClick($event)\",\n \"(document:click)\": \"onDocumentClick($event)\",\n \"(keydown.escape)\": \"open.set(false)\",\n },\n template: `\n <span class=\"viking-popover-trigger\">\n <ng-content select=\"[vikingTrigger]\" />\n </span>\n @if (open()) {\n <div\n class=\"viking-popover-panel\"\n [class.viking-popover-end]=\"align() === 'end'\"\n role=\"dialog\"\n >\n <ng-content />\n </div>\n }\n `,\n styles: [\n `\n :host {\n position: relative;\n display: inline-block;\n }\n .viking-popover-trigger {\n display: inline-flex;\n }\n .viking-popover-panel {\n position: absolute;\n top: calc(100% + var(--viking-space-1));\n left: 0;\n min-width: 234px;\n max-width: 90vw;\n background: var(--viking-surface);\n border: 1px solid var(--viking-border-strong);\n border-radius: var(--viking-radius);\n box-shadow: var(--viking-shadow-md);\n padding: var(--viking-space-2);\n z-index: var(--viking-z-overlay);\n font-family: var(--viking-font-family);\n font-size: var(--viking-font-size-ui);\n color: var(--viking-text);\n }\n .viking-popover-end {\n left: auto;\n right: 0;\n }\n `,\n ],\n})\nexport class VikingPopover {\n readonly open = model<boolean>(false);\n readonly align = input<\"start\" | \"end\">(\"start\");\n\n constructor(private readonly host: ElementRef<HTMLElement>) {}\n\n /** Toggles when the (focusable, projected) trigger is activated. */\n protected onHostClick = (event: Event): void => {\n const trigger = this.host.nativeElement.querySelector(\n \".viking-popover-trigger\",\n );\n if (trigger?.contains(event.target as Node)) {\n this.open.update((value) => !value);\n }\n };\n\n protected onDocumentClick = (event: Event): void => {\n if (\n this.open() &&\n !this.host.nativeElement.contains(event.target as Node)\n ) {\n this.open.set(false);\n }\n };\n}\n","import { ChangeDetectionStrategy, Component, input } from \"@angular/core\";\nimport { VikingAvatar } from \"../avatar/avatar\";\nimport { VikingTone } from \"../../core/types\";\n\n/**\n * viking-profile — user identity block.\n * Project actions (e.g. viking-button) as content.\n */\n@Component({\n selector: \"viking-profile\",\n imports: [VikingAvatar],\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <viking-avatar\n [src]=\"avatarSrc()\"\n [name]=\"name()\"\n [size]=\"45\"\n [status]=\"status()\"\n />\n <div class=\"viking-profile-identity\">\n <span class=\"viking-profile-name\">{{ name() }}</span>\n @if (detail()) {\n <span class=\"viking-profile-detail\">{{ detail() }}</span>\n }\n </div>\n <div class=\"viking-profile-actions\"><ng-content /></div>\n `,\n styles: [\n `\n :host {\n display: flex;\n align-items: center;\n gap: var(--viking-space-2);\n font-family: var(--viking-font-family);\n }\n .viking-profile-identity {\n display: flex;\n flex-direction: column;\n min-width: 0;\n flex: 1;\n }\n .viking-profile-name {\n font-size: var(--viking-font-size);\n font-weight: 600;\n color: var(--viking-text);\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n }\n .viking-profile-detail {\n font-size: var(--viking-font-size);\n color: var(--viking-text-muted);\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n }\n .viking-profile-actions {\n display: flex;\n align-items: center;\n gap: var(--viking-space-1);\n }\n .viking-profile-actions:empty {\n display: none;\n }\n `,\n ],\n})\nexport class VikingProfile {\n readonly name = input.required<string>();\n readonly detail = input<string>(\"\");\n readonly avatarSrc = input<string | null>(null);\n readonly status = input<VikingTone | null>(null);\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n input,\n} from \"@angular/core\";\nimport { VikingTone } from \"../../core/types\";\n\n/**\n * viking-progress — determinate/indeterminate progress bar\n *.\n */\n@Component({\n selector: \"viking-progress\",\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n @if (label()) {\n <div class=\"viking-progress-header\">\n <span class=\"viking-progress-label\">{{ label() }}</span>\n @if (!indeterminate()) {\n <span class=\"viking-progress-value\">{{ clamped() }}%</span>\n }\n </div>\n }\n <div\n class=\"viking-progress-track\"\n role=\"progressbar\"\n [attr.aria-label]=\"label() || 'Progress'\"\n [attr.aria-valuemin]=\"0\"\n [attr.aria-valuemax]=\"100\"\n [attr.aria-valuenow]=\"indeterminate() ? null : clamped()\"\n >\n <div\n class=\"viking-progress-bar\"\n [class.viking-indeterminate]=\"indeterminate()\"\n [class]=\"'viking-bar-' + tone()\"\n [style.width.%]=\"indeterminate() ? 40 : clamped()\"\n ></div>\n </div>\n `,\n styles: [\n `\n :host {\n display: block;\n font-family: var(--viking-font-family);\n }\n .viking-progress-header {\n display: flex;\n justify-content: space-between;\n gap: var(--viking-space-2);\n margin-bottom: calc(var(--viking-space-1) / 2);\n font-size: var(--viking-font-size);\n }\n .viking-progress-label {\n color: var(--viking-text);\n font-weight: 500;\n }\n .viking-progress-value {\n color: var(--viking-text-muted);\n font-variant-numeric: tabular-nums;\n }\n .viking-progress-track {\n position: relative;\n height: var(--viking-space-1);\n border-radius: var(--viking-radius-pill);\n background: var(--viking-surface-alt);\n border: 1px solid var(--viking-border);\n overflow: hidden;\n }\n .viking-progress-bar {\n height: 100%;\n border-radius: var(--viking-radius-pill);\n background: var(--viking-accent);\n transition: width 0.3s ease;\n }\n .viking-bar-secondary {\n background: var(--viking-accent-secondary);\n }\n .viking-bar-success {\n background: var(--viking-success);\n }\n .viking-bar-info {\n background: var(--viking-info);\n }\n .viking-bar-warning {\n background: var(--viking-warning);\n }\n .viking-bar-danger {\n background: var(--viking-danger);\n }\n .viking-bar-muted {\n background: var(--viking-text-muted);\n }\n .viking-indeterminate {\n position: absolute;\n animation: viking-progress-slide 1.2s ease-in-out infinite;\n }\n @keyframes viking-progress-slide {\n from {\n left: -40%;\n }\n to {\n left: 100%;\n }\n }\n @media (prefers-reduced-motion: reduce) {\n .viking-indeterminate {\n animation-duration: 2.4s;\n }\n }\n `,\n ],\n})\nexport class VikingProgress {\n readonly value = input<number>(0);\n readonly label = input<string>(\"\");\n readonly tone = input<VikingTone>(\"accent\");\n readonly indeterminate = input<boolean>(false);\n\n protected readonly clamped = computed(() =>\n Math.min(100, Math.max(0, Math.round(this.value()))),\n );\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n input,\n model,\n} from \"@angular/core\";\nimport { VikingControl, provideVikingCva } from \"../core/cva\";\nimport { VikingSelectOption } from \"../../core/types\";\nimport { vikingUid } from \"../../core/uid\";\n\n/**\n * viking-radio-group — radio group.\n * ControlValueAccessor-compatible; options-driven for symmetry with viking-select.\n */\n@Component({\n selector: \"viking-radio-group\",\n providers: [provideVikingCva(VikingRadioGroup)],\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n role: \"radiogroup\",\n \"[attr.aria-label]\": \"label() || null\",\n \"[class.viking-radio-row]\": \"orientation() === 'horizontal'\",\n },\n template: `\n @for (option of options(); track option.label) {\n <label\n class=\"viking-radio\"\n [class.viking-disabled]=\"\n option.disabled || disabled() || formDisabled()\n \"\n >\n <span\n class=\"viking-radio-dot\"\n [class.viking-checked]=\"option.value === value()\"\n >\n <input\n type=\"radio\"\n [name]=\"groupName\"\n [checked]=\"option.value === value()\"\n [disabled]=\"option.disabled || disabled() || formDisabled()\"\n (change)=\"select(option)\"\n (blur)=\"onTouched()\"\n />\n </span>\n <span class=\"viking-radio-label\">{{ option.label }}</span>\n </label>\n }\n `,\n styles: [\n `\n :host {\n display: flex;\n flex-direction: column;\n gap: var(--viking-space-1);\n font-family: var(--viking-font-family);\n }\n :host(.viking-radio-row) {\n flex-direction: row;\n flex-wrap: wrap;\n gap: var(--viking-space-2);\n }\n .viking-radio {\n display: inline-flex;\n align-items: center;\n gap: var(--viking-space-1);\n cursor: pointer;\n }\n .viking-disabled {\n opacity: var(--viking-state-disabled-opacity);\n cursor: not-allowed;\n }\n .viking-radio-dot {\n position: relative;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: var(--viking-space-2);\n height: var(--viking-space-2);\n border-radius: var(--viking-radius-pill);\n border: 1px solid var(--viking-border-strong);\n background: var(--viking-surface);\n transition: var(--viking-transition);\n flex-shrink: 0;\n box-sizing: border-box;\n }\n /* The native input fills the visual dot so clicks and focus land on it. */\n .viking-radio-dot input {\n position: absolute;\n inset: 0;\n width: 100%;\n height: 100%;\n margin: 0;\n opacity: 0;\n cursor: pointer;\n }\n .viking-radio:hover:not(.viking-disabled) .viking-radio-dot {\n border-color: var(--viking-accent-strong);\n }\n .viking-radio-dot.viking-checked {\n border-color: var(--viking-accent);\n border-width: 5px;\n background: var(--viking-accent-content);\n }\n .viking-radio-dot:has(input:focus-visible) {\n outline: var(--viking-ring-width) solid var(--viking-ring);\n outline-offset: var(--viking-ring-offset);\n }\n .viking-radio-label {\n font-size: var(--viking-font-size);\n color: var(--viking-text);\n }\n `,\n ],\n})\nexport class VikingRadioGroup extends VikingControl<unknown> {\n readonly options = input.required<VikingSelectOption[]>();\n readonly value = model<unknown>(null);\n readonly label = input<string>(\"\");\n readonly disabled = input<boolean>(false);\n readonly orientation = input<\"vertical\" | \"horizontal\">(\"vertical\");\n\n protected readonly groupName = vikingUid(\"viking-radio\");\n\n writeValue(value: unknown): void {\n this.value.set(value);\n }\n\n protected select = (option: VikingSelectOption): void => {\n this.value.set(option.value);\n this.onChange(option.value);\n };\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n input,\n} from \"@angular/core\";\n\n/** viking-ring-gauge — circular progress ring for health/score displays. */\n@Component({\n selector: \"viking-ring-gauge\",\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: \"viking-ring-gauge\",\n \"aria-hidden\": \"true\",\n \"[attr.data-status]\": \"status()\",\n },\n template: `\n <svg class=\"viking-ring-gauge-svg\" viewBox=\"0 0 120 120\" fill=\"none\">\n <circle class=\"viking-ring-bg\" cx=\"60\" cy=\"60\" r=\"52\" />\n <circle\n class=\"viking-ring-fill\"\n cx=\"60\"\n cy=\"60\"\n r=\"52\"\n stroke-linecap=\"round\"\n [attr.stroke-dasharray]=\"strokeDasharray()\"\n />\n </svg>\n `,\n styles: [\n `\n :host {\n display: block;\n width: 100%;\n height: 100%;\n color: var(--viking-accent);\n }\n\n .viking-ring-gauge-svg {\n width: 100%;\n height: 100%;\n shape-rendering: geometricPrecision;\n }\n\n .viking-ring-bg,\n .viking-ring-fill {\n fill: none;\n stroke-width: 10;\n transform: rotate(-90deg);\n transform-origin: 50% 50%;\n }\n\n .viking-ring-bg {\n stroke: color-mix(in srgb, var(--viking-text-muted) 20%, transparent);\n }\n\n .viking-ring-fill {\n stroke: currentColor;\n transition: stroke-dasharray 0.4s var(--viking-ease-default);\n }\n `,\n ],\n})\nexport class VikingRingGauge {\n readonly value = input.required<number>();\n readonly max = input<number>(100);\n readonly circumference = input<number>(327);\n readonly status = input<string>(\"\");\n\n protected readonly strokeDasharray = computed(() => {\n const pct = Math.max(0, Math.min(1, this.value() / this.max()));\n const filled = pct * this.circumference();\n return `${filled} ${this.circumference()}`;\n });\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n effect,\n input,\n model,\n output,\n viewChild,\n} from \"@angular/core\";\nimport { VikingIcon } from \"../icon/icon\";\nimport { VikingKbd } from \"../kbd/kbd\";\n\n/**\n * viking-search-palette — command-palette style search overlay (Product Hunt / Algolia inspired).\n * Project custom result lists into the body slot; ⌘K / Ctrl+K wired by host app static widget.\n */\n@Component({\n selector: \"viking-search-palette\",\n imports: [VikingIcon, VikingKbd],\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: { \"(keydown.escape)\": \"close()\" },\n template: `\n @if (open()) {\n <div\n class=\"viking-search-palette-backdrop\"\n role=\"presentation\"\n tabindex=\"-1\"\n (click)=\"close()\"\n (keydown.escape)=\"close()\"\n >\n <div\n class=\"viking-search-palette\"\n role=\"dialog\"\n aria-label=\"Search\"\n tabindex=\"-1\"\n (click)=\"$event.stopPropagation()\"\n (keydown)=\"$event.stopPropagation()\"\n >\n <div class=\"viking-search-palette-header\">\n <viking-icon name=\"search\" [size]=\"24\" />\n <input\n #queryInput\n type=\"text\"\n class=\"viking-search-palette-input\"\n [placeholder]=\"placeholder()\"\n [value]=\"query()\"\n [attr.aria-label]=\"placeholder()\"\n (input)=\"onQueryInput($event)\"\n />\n <button\n type=\"button\"\n class=\"viking-search-palette-close\"\n aria-label=\"Close search\"\n (click)=\"close()\"\n >\n <viking-icon name=\"x\" [size]=\"20\" />\n </button>\n </div>\n <div\n class=\"viking-search-palette-body\"\n tabindex=\"-1\"\n (keydown)=\"paletteKeydown.emit($event)\"\n >\n <ng-content />\n </div>\n <footer class=\"viking-search-palette-footer\">\n <ng-content select=\"[vikingSearchPaletteFooter]\" />\n <span class=\"viking-search-palette-shortcut\">\n <viking-kbd>{{ modKey() }}</viking-kbd\n ><viking-kbd>K</viking-kbd> toggle · <viking-kbd>↑</viking-kbd\n ><viking-kbd>↓</viking-kbd> navigate ·\n <viking-kbd>Enter</viking-kbd> open ·\n <viking-kbd>Esc</viking-kbd> close\n </span>\n </footer>\n </div>\n </div>\n }\n `,\n styleUrl: \"./search-palette.scss\",\n})\nexport class VikingSearchPalette {\n readonly open = model<boolean>(false);\n readonly query = model<string>(\"\");\n readonly placeholder = input<string>(\"Search...\");\n readonly paletteKeydown = output<KeyboardEvent>();\n\n private readonly queryInput =\n viewChild<ElementRef<HTMLInputElement>>(\"queryInput\");\n\n constructor() {\n effect(() => {\n if (this.open()) {\n queueMicrotask(() => this.queryInput()?.nativeElement.focus());\n }\n });\n }\n\n protected onQueryInput(event: Event): void {\n this.query.set((event.target as HTMLInputElement).value);\n }\n\n protected close(): void {\n this.open.set(false);\n }\n\n /** Platform modifier label for footer shortcut hint. */\n protected modKey = (): string =>\n typeof navigator !== \"undefined\" &&\n /Mac|iPhone|iPad/i.test(navigator.platform)\n ? \"⌘\"\n : \"Ctrl\";\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n computed,\n input,\n model,\n signal,\n} from \"@angular/core\";\nimport { VikingControl, provideVikingCva } from \"../core/cva\";\nimport { VikingIcon } from \"../icon/icon\";\nimport { VikingSelectOption } from \"../../core/types\";\n\nexport type VikingSelectWidth = \"full\" | \"half\";\n\n/**\n * viking-select — custom listbox select.\n * ControlValueAccessor-compatible with full keyboard support.\n */\n@Component({\n selector: \"viking-select\",\n imports: [VikingIcon],\n providers: [provideVikingCva(VikingSelect)],\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n \"(document:click)\": \"onDocumentClick($event)\",\n \"[class.viking-select-full]\": \"width() === 'full'\",\n \"[class.viking-select-half]\": \"width() === 'half'\",\n },\n template: `\n <button\n type=\"button\"\n class=\"viking-control viking-select-trigger\"\n [disabled]=\"disabled() || formDisabled()\"\n [attr.aria-expanded]=\"open()\"\n [attr.aria-label]=\"label() || placeholder()\"\n aria-haspopup=\"listbox\"\n (click)=\"toggle()\"\n (keydown)=\"onKeydown($event)\"\n >\n <span\n class=\"viking-select-value\"\n [class.viking-select-placeholder]=\"!selectedLabel()\"\n >\n {{ selectedLabel() || placeholder() }}\n </span>\n <viking-icon\n [name]=\"open() ? 'chevron-up' : 'chevron-down'\"\n [size]=\"18\"\n />\n </button>\n @if (open()) {\n <div\n class=\"viking-select-panel\"\n role=\"listbox\"\n [attr.aria-label]=\"label() || placeholder()\"\n >\n @for (option of options(); track option.label; let index = $index) {\n <button\n type=\"button\"\n role=\"option\"\n class=\"viking-select-option\"\n [class.viking-active]=\"index === activeIndex()\"\n [class.viking-selected]=\"option.value === value()\"\n [disabled]=\"option.disabled\"\n [attr.aria-selected]=\"option.value === value()\"\n (click)=\"pick(option)\"\n (mouseenter)=\"activeIndex.set(index)\"\n >\n <span class=\"viking-select-option-label\">{{ option.label }}</span>\n @if (option.value === value()) {\n <viking-icon name=\"check\" [size]=\"16\" />\n }\n </button>\n }\n </div>\n }\n `,\n styles: [\n `\n :host {\n position: relative;\n display: block;\n min-width: 0;\n }\n :host(.viking-select-full) {\n width: 100%;\n }\n :host(.viking-select-half) {\n width: 100%;\n max-width: var(--viking-select-half-max-width, min(100%, 24rem));\n }\n .viking-select-value {\n min-width: 0;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n }\n .viking-select-trigger {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: var(--viking-space-1);\n width: 100%;\n min-height: var(--viking-control-height);\n padding: 0 var(--viking-space-2);\n background: var(--viking-surface);\n border: 1px solid var(--viking-border-strong);\n border-radius: var(--viking-radius);\n box-shadow: var(--viking-shadow-sm);\n color: var(--viking-text);\n font-family: var(--viking-font-family);\n font-size: var(--viking-font-size);\n cursor: pointer;\n transition: var(--viking-transition-interactive);\n text-align: left;\n }\n .viking-select-trigger:hover:not(:disabled) {\n border-color: var(--viking-accent-strong);\n box-shadow: var(--viking-shadow-md);\n }\n .viking-select-trigger:focus-visible {\n outline: var(--viking-ring-width) solid var(--viking-ring);\n outline-offset: var(--viking-ring-offset);\n }\n .viking-select-trigger:disabled {\n opacity: var(--viking-state-disabled-opacity);\n cursor: not-allowed;\n }\n .viking-select-placeholder {\n color: var(--viking-text-muted);\n }\n .viking-select-panel {\n position: absolute;\n top: calc(100% + var(--viking-space-half));\n left: 0;\n width: 100%;\n min-width: 100%;\n max-width: 100%;\n box-sizing: border-box;\n display: flex;\n flex-direction: column;\n gap: 2px;\n margin: 0;\n padding: var(--viking-space-1);\n background-color: var(\n --viking-select-panel-bg,\n var(--viking-surface-raised)\n );\n border: 1px solid var(--viking-border-strong);\n border-radius: var(--viking-radius);\n box-shadow: var(--viking-shadow-lg);\n z-index: var(--viking-z-overlay);\n max-height: 315px;\n overflow: auto;\n isolation: isolate;\n animation: viking-slide-up var(--viking-duration-fast)\n var(--viking-ease-default);\n }\n .viking-select-option {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: var(--viking-space-1);\n padding: var(--viking-space-1) var(--viking-space-1-5);\n border: none;\n background: transparent;\n text-align: left;\n width: 100%;\n min-width: 0;\n border-radius: var(--viking-radius-sm);\n font-family: var(--viking-font-family);\n font-size: var(--viking-font-size-sm);\n color: var(--viking-text);\n cursor: pointer;\n transition: var(--viking-transition-interactive);\n }\n .viking-select-option-label {\n min-width: 0;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n }\n .viking-select-option:disabled {\n opacity: var(--viking-state-disabled-opacity);\n cursor: not-allowed;\n }\n .viking-select-option:focus-visible {\n outline: var(--viking-ring-width) solid var(--viking-ring);\n outline-offset: -2px;\n }\n .viking-active {\n background: var(--viking-accent-soft);\n color: var(--viking-text);\n }\n .viking-selected {\n font-weight: var(--viking-font-weight-semibold);\n color: var(--viking-accent-strong);\n background: color-mix(\n in srgb,\n var(--viking-accent) 14%,\n var(--viking-select-panel-bg, var(--viking-surface-raised))\n );\n }\n `,\n ],\n})\nexport class VikingSelect extends VikingControl<unknown> {\n readonly options = input.required<VikingSelectOption[]>();\n readonly value = model<unknown>(null);\n readonly placeholder = input<string>(\"Select…\");\n readonly label = input<string>(\"\");\n readonly disabled = input<boolean>(false);\n readonly width = input<VikingSelectWidth>(\"half\");\n\n constructor(private readonly host: ElementRef<HTMLElement>) {\n super();\n }\n\n protected readonly open = signal(false);\n protected readonly activeIndex = signal(0);\n\n protected readonly selectedLabel = computed(\n () =>\n this.options().find((option) => option.value === this.value())?.label ??\n \"\",\n );\n\n writeValue(value: unknown): void {\n this.value.set(value);\n }\n\n protected toggle = (): void => {\n this.open.update((value) => !value);\n if (this.open()) {\n const index = this.options().findIndex(\n (option) => option.value === this.value(),\n );\n this.activeIndex.set(Math.max(0, index));\n }\n };\n\n protected pick = (option: VikingSelectOption): void => {\n if (option.disabled) {\n return;\n }\n this.value.set(option.value);\n this.onChange(option.value);\n this.onTouched();\n this.open.set(false);\n };\n\n protected onKeydown = (event: KeyboardEvent): void => {\n const options = this.options();\n if (!this.open()) {\n if ([\"ArrowDown\", \"ArrowUp\", \"Enter\", \" \"].includes(event.key)) {\n event.preventDefault();\n this.toggle();\n }\n return;\n }\n switch (event.key) {\n case \"ArrowDown\":\n event.preventDefault();\n this.activeIndex.update((index) =>\n Math.min(options.length - 1, index + 1),\n );\n break;\n case \"ArrowUp\":\n event.preventDefault();\n this.activeIndex.update((index) => Math.max(0, index - 1));\n break;\n case \"Enter\":\n case \" \":\n event.preventDefault();\n this.pick(options[this.activeIndex()]);\n break;\n case \"Escape\":\n this.open.set(false);\n break;\n }\n };\n\n protected onDocumentClick = (event: Event): void => {\n if (\n this.open() &&\n !this.host.nativeElement.contains(event.target as Node)\n ) {\n this.open.set(false);\n }\n };\n}\n","import { ChangeDetectionStrategy, Component, input } from \"@angular/core\";\n\n/**\n * viking-scroll-area — constrained scroll region with clinical scrollbar styling.\n */\n@Component({\n selector: \"viking-scroll-area\",\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: \"viking-scroll-area\",\n \"[style.max-height]\": \"maxHeight()\",\n \"[style.max-width]\": \"maxWidth()\",\n },\n template: `<div class=\"viking-scroll-area-viewport\" tabindex=\"0\">\n <ng-content />\n </div>`,\n styles: [\n `\n :host {\n display: block;\n overflow: hidden;\n border: 1px solid var(--viking-border);\n border-radius: var(--viking-radius);\n background: var(--viking-surface);\n }\n .viking-scroll-area-viewport {\n max-height: inherit;\n overflow: auto;\n padding: var(--viking-space-2);\n font-family: var(--viking-font-family);\n font-size: var(--viking-font-size);\n color: var(--viking-text);\n scrollbar-width: thin;\n scrollbar-color: var(--viking-accent-strong) var(--viking-surface-alt);\n }\n .viking-scroll-area-viewport:focus-visible {\n outline: var(--viking-ring-width) solid var(--viking-ring);\n outline-offset: calc(-1 * var(--viking-ring-offset));\n }\n .viking-scroll-area-viewport::-webkit-scrollbar {\n width: 8px;\n height: 8px;\n }\n .viking-scroll-area-viewport::-webkit-scrollbar-thumb {\n background: var(--viking-accent-strong);\n border-radius: var(--viking-radius-pill);\n }\n .viking-scroll-area-viewport::-webkit-scrollbar-track {\n background: var(--viking-surface-alt);\n }\n `,\n ],\n})\nexport class VikingScrollArea {\n readonly maxHeight = input<string>(\"240px\");\n readonly maxWidth = input<string>(\"100%\");\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n effect,\n inject,\n input,\n model,\n viewChild,\n} from \"@angular/core\";\nimport { VikingIcon } from \"../icon/icon\";\n\nexport type VikingSheetSide = \"left\" | \"right\";\n\n/**\n * viking-sheet — slide-over panel.\n */\n@Component({\n selector: \"viking-sheet\",\n imports: [VikingIcon],\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <dialog\n #dialog\n class=\"viking-sheet\"\n [class.viking-sheet-left]=\"side() === 'left'\"\n tabindex=\"-1\"\n [attr.aria-label]=\"heading() || 'Panel'\"\n (close)=\"open.set(false)\"\n (click)=\"onBackdropClick($event)\"\n (keydown.escape)=\"dismissible() && open.set(false)\"\n >\n <div class=\"viking-sheet-surface\">\n <header class=\"viking-sheet-header\">\n @if (heading()) {\n <h2 class=\"viking-sheet-heading\">{{ heading() }}</h2>\n }\n @if (dismissible()) {\n <button\n type=\"button\"\n class=\"viking-sheet-close\"\n aria-label=\"Close panel\"\n (click)=\"open.set(false)\"\n >\n <viking-icon name=\"x\" [size]=\"20\" />\n </button>\n }\n </header>\n <div class=\"viking-sheet-body\"><ng-content /></div>\n <footer class=\"viking-sheet-footer\">\n <ng-content select=\"[vikingSheetActions]\" />\n </footer>\n </div>\n </dialog>\n `,\n styles: [\n `\n .viking-sheet {\n margin: 0;\n padding: 0;\n border: none;\n background: transparent;\n max-width: none;\n max-height: none;\n width: 100%;\n height: 100%;\n position: fixed;\n inset: 0;\n }\n .viking-sheet::backdrop {\n background: var(--viking-overlay-backdrop);\n backdrop-filter: blur(6px);\n animation: viking-backdrop-in var(--viking-duration-fast)\n var(--viking-ease-default);\n }\n .viking-sheet-surface {\n position: fixed;\n top: 0;\n right: 0;\n display: flex;\n flex-direction: column;\n width: min(420px, 100vw);\n height: 100%;\n background: var(--viking-surface);\n border-left: 1px solid var(--viking-border-strong);\n box-shadow: var(--viking-shadow-lg);\n font-family: var(--viking-font-family);\n animation: viking-slide-in-right var(--viking-duration)\n var(--viking-ease-default);\n }\n .viking-sheet-left .viking-sheet-surface {\n right: auto;\n left: 0;\n border-left: none;\n border-right: 1px solid var(--viking-border-strong);\n }\n .viking-sheet-header {\n display: flex;\n align-items: flex-start;\n justify-content: space-between;\n gap: var(--viking-space-2);\n padding: var(--viking-space-2);\n border-bottom: 1px solid var(--viking-border);\n }\n .viking-sheet-heading {\n margin: 0;\n font-size: var(--viking-font-size-ui);\n font-weight: 700;\n letter-spacing: var(--header-letter-spacing, -0.02em);\n }\n .viking-sheet-close {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: var(--viking-control-height-sm);\n height: var(--viking-control-height-sm);\n border: 1px solid transparent;\n background: transparent;\n color: var(--viking-text-muted);\n cursor: pointer;\n padding: 0;\n border-radius: var(--viking-radius);\n transition: var(--viking-transition-interactive);\n }\n .viking-sheet-close:hover {\n color: var(--viking-text);\n background: var(--viking-accent-soft);\n border-color: var(--viking-border-subtle);\n }\n .viking-sheet-close:active {\n transform: scale(var(--viking-state-active-scale));\n }\n .viking-sheet-close:focus-visible {\n outline: var(--viking-ring-width) solid var(--viking-ring);\n outline-offset: var(--viking-ring-offset);\n }\n .viking-sheet-body {\n flex: 1;\n overflow: auto;\n padding: var(--viking-space-2);\n font-size: var(--viking-font-size);\n color: var(--viking-text);\n line-height: 1.6;\n }\n .viking-sheet-footer {\n display: flex;\n flex-wrap: wrap;\n gap: var(--viking-space-2);\n justify-content: flex-end;\n align-items: center;\n padding: var(--viking-space-2);\n border-top: 1px solid var(--viking-border);\n }\n :host ::ng-deep .viking-sheet-footer [vikingSheetActions] {\n display: flex;\n flex-wrap: wrap;\n justify-content: flex-end;\n align-items: center;\n gap: var(--viking-space-2);\n width: 100%;\n }\n `,\n ],\n})\nexport class VikingSheet {\n readonly open = model(false);\n readonly heading = input(\"\");\n readonly dismissible = input(true);\n readonly side = input<VikingSheetSide>(\"right\");\n\n private readonly dialogRef =\n viewChild.required<ElementRef<HTMLDialogElement>>(\"dialog\");\n\n constructor() {\n effect(() => {\n const dialog = this.dialogRef().nativeElement;\n if (this.open() && !dialog.open) {\n dialog.showModal();\n } else if (!this.open() && dialog.open) {\n dialog.close();\n }\n });\n }\n\n protected onBackdropClick = (event: MouseEvent): void => {\n if (!this.dismissible()) return;\n const dialog = this.dialogRef().nativeElement;\n if (event.target === dialog) {\n this.open.set(false);\n }\n };\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n input,\n output,\n ViewEncapsulation,\n} from \"@angular/core\";\nimport { RouterLink, RouterLinkActive } from \"@angular/router\";\n\n/**\n * viking-sidebar-nav — composable sidebar navigation container.\n */\n@Component({\n selector: \"viking-sidebar-nav\",\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n host: {\n class: \"viking-sidebar-nav\",\n role: \"navigation\",\n },\n template: `<ng-content />`,\n styleUrl: \"./sidebar-nav.scss\",\n})\nexport class VikingSidebarNav {}\n\n/**\n * viking-sidebar-nav-link — router-aware sidebar nav item.\n */\n@Component({\n selector: \"viking-sidebar-nav-link\",\n imports: [RouterLink, RouterLinkActive],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n host: {\n class: \"viking-sidebar-nav-link\",\n },\n template: `\n <a\n [routerLink]=\"routerLink()\"\n routerLinkActive=\"viking-sidebar-nav-link-active\"\n [routerLinkActiveOptions]=\"routerLinkActiveOptions()\"\n [title]=\"title()\"\n [attr.aria-label]=\"title() || null\"\n >\n <ng-content />\n </a>\n `,\n styleUrl: \"./sidebar-nav.scss\",\n})\nexport class VikingSidebarNavLink {\n readonly routerLink = input.required<string | string[]>();\n readonly routerLinkActiveOptions = input<{ exact: boolean }>({ exact: true });\n readonly title = input<string>(\"\");\n}\n\n/**\n * viking-sidebar-nav-tree — expandable tree section within sidebar nav.\n */\n@Component({\n selector: \"viking-sidebar-nav-tree\",\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n host: { class: \"viking-sidebar-nav-tree\" },\n template: `<ng-content />`,\n styleUrl: \"./sidebar-nav.scss\",\n})\nexport class VikingSidebarNavTree {}\n\n/**\n * viking-sidebar-nav-tree-header — collapsible tree section header.\n */\n@Component({\n selector: \"viking-sidebar-nav-tree-header\",\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n host: {\n class: \"viking-sidebar-nav-tree-header\",\n role: \"button\",\n tabindex: \"0\",\n \"[attr.aria-expanded]\": \"expanded()\",\n \"(click)\": \"onToggle()\",\n \"(keydown.enter)\": \"onToggle()\",\n \"(keydown.space)\": \"onSpace($event)\",\n },\n template: `\n <span class=\"viking-sidebar-nav-tree-label\">{{ label() }}</span>\n <ng-content select=\"[vikingSidebarTreeArrow]\" />\n `,\n styleUrl: \"./sidebar-nav.scss\",\n})\nexport class VikingSidebarNavTreeHeader {\n readonly label = input.required<string>();\n readonly expanded = input<boolean>(true);\n readonly toggled = output<void>();\n\n protected onToggle = (): void => {\n this.toggled.emit();\n };\n\n protected onSpace = (event: Event): void => {\n event.preventDefault();\n this.onToggle();\n };\n}\n\n/**\n * viking-sidebar-nav-tree-children — tree item list container.\n */\n@Component({\n selector: \"viking-sidebar-nav-tree-children\",\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n host: { class: \"viking-sidebar-nav-tree-children\" },\n template: `<ng-content />`,\n styleUrl: \"./sidebar-nav.scss\",\n})\nexport class VikingSidebarNavTreeChildren {}\n\nexport type VikingSidebarNavTreeItemVariant = \"default\" | \"empty\" | \"accent\";\n\n/**\n * viking-sidebar-nav-tree-item — selectable tree leaf or action row.\n */\n@Component({\n selector: \"viking-sidebar-nav-tree-item\",\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n host: {\n class: \"viking-sidebar-nav-tree-item\",\n role: \"button\",\n tabindex: \"0\",\n \"[class.viking-sidebar-nav-tree-item-active]\": \"active()\",\n \"[class.viking-sidebar-nav-tree-item-empty]\": \"variant() === 'empty'\",\n \"[class.viking-sidebar-nav-tree-item-accent]\": \"variant() === 'accent'\",\n \"(click)\": \"onActivate($event)\",\n \"(keydown.enter)\": \"onActivate($event)\",\n \"(keydown.space)\": \"onSpace($event)\",\n },\n template: `<ng-content />`,\n styleUrl: \"./sidebar-nav.scss\",\n})\nexport class VikingSidebarNavTreeItem {\n readonly active = input<boolean>(false);\n readonly variant = input<VikingSidebarNavTreeItemVariant>(\"default\");\n readonly activated = output<void>();\n\n protected onActivate = (event: Event): void => {\n if (this.variant() === \"empty\") {\n return;\n }\n this.activated.emit();\n };\n\n protected onSpace = (event: Event): void => {\n event.preventDefault();\n this.onActivate(event);\n };\n}\n","import { ChangeDetectionStrategy, Component, input } from \"@angular/core\";\nimport { VikingIcon } from \"../icon/icon\";\nimport type { VikingIconName } from \"../../core/icons\";\n\n/**\n * viking-status-metric-row — icon + title/subtitle + value row for status cards.\n */\n@Component({\n selector: \"viking-status-metric-row\",\n imports: [VikingIcon],\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: { class: \"viking-status-metric-row ml-stat-panel\" },\n template: `\n <div class=\"stat-info\">\n <viking-icon\n [name]=\"icon()\"\n [size]=\"22\"\n color=\"accent\"\n [backdrop]=\"true\"\n />\n <div>\n <span class=\"stat-title\">{{ title() }}</span>\n @if (subtitle()) {\n <span class=\"stat-subtitle\">{{ subtitle() }}</span>\n }\n </div>\n </div>\n <div class=\"stat-value-container\">\n <span class=\"stat-value\"><ng-content />{{ value() }}</span>\n </div>\n `,\n styles: [\n `\n :host {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: var(--viking-space-2);\n padding: var(--viking-space-2);\n border: 1px solid var(--viking-border);\n border-radius: var(--viking-radius-lg);\n background: var(--viking-surface);\n }\n .stat-info {\n display: flex;\n align-items: center;\n gap: var(--viking-space-2);\n min-width: 0;\n }\n .stat-title {\n display: block;\n font-size: var(--viking-font-size-sm);\n font-weight: var(--viking-font-weight-semibold);\n color: var(--viking-text);\n }\n .stat-subtitle {\n display: block;\n font-size: var(--viking-font-size-sm);\n color: var(--viking-text-muted);\n }\n .stat-value {\n font-size: calc(var(--viking-font-size) * 1.25);\n font-weight: 700;\n color: var(--viking-text);\n }\n `,\n ],\n})\nexport class VikingStatusMetricRow {\n readonly icon = input.required<VikingIconName>();\n readonly title = input.required<string>();\n readonly subtitle = input<string>(\"\");\n readonly value = input<string | number>(\"\");\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n input,\n model,\n} from \"@angular/core\";\nimport { VikingControl, provideVikingCva } from \"../core/cva\";\n\n/**\n * viking-slider — range slider.\n * ControlValueAccessor-compatible.\n */\n@Component({\n selector: \"viking-slider\",\n providers: [provideVikingCva(VikingSlider)],\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <div class=\"viking-slider-header\">\n @if (label()) {\n <span class=\"viking-slider-label\">{{ label() }}</span>\n }\n @if (showValue()) {\n <output class=\"viking-slider-value\">{{ value() }}</output>\n }\n </div>\n <input\n type=\"range\"\n [min]=\"min()\"\n [max]=\"max()\"\n [step]=\"step()\"\n [value]=\"value()\"\n [disabled]=\"disabled() || formDisabled()\"\n [attr.aria-label]=\"label() || 'Slider'\"\n [style.--viking-slider-fill.%]=\"fillPercent()\"\n (input)=\"onInput($event)\"\n (blur)=\"onTouched()\"\n />\n `,\n styles: [\n `\n :host {\n display: block;\n font-family: var(--viking-font-family);\n }\n .viking-slider-header {\n display: flex;\n justify-content: space-between;\n gap: var(--viking-space-2);\n margin-bottom: calc(var(--viking-space-1) / 2);\n font-size: var(--viking-font-size);\n }\n .viking-slider-label {\n color: var(--viking-text);\n font-weight: 500;\n }\n .viking-slider-value {\n color: var(--viking-text-muted);\n font-variant-numeric: tabular-nums;\n }\n input[type=\"range\"] {\n appearance: none;\n width: 100%;\n height: var(--viking-space-1);\n border-radius: var(--viking-radius-pill);\n border: 1px solid var(--viking-border);\n background: linear-gradient(\n to right,\n var(--viking-accent) var(--viking-slider-fill, 0%),\n var(--viking-surface-alt) var(--viking-slider-fill, 0%)\n );\n cursor: pointer;\n margin: var(--viking-space-1) 0;\n }\n input[type=\"range\"]:disabled {\n opacity: var(--viking-state-disabled-opacity);\n cursor: not-allowed;\n }\n input[type=\"range\"]::-webkit-slider-thumb {\n appearance: none;\n width: var(--viking-space-2);\n height: var(--viking-space-2);\n border-radius: var(--viking-radius-pill);\n background: var(--viking-surface);\n border: 2px solid var(--viking-accent);\n box-shadow: var(--viking-shadow-sm);\n transition: transform 0.15s ease;\n }\n input[type=\"range\"]::-webkit-slider-thumb:hover {\n transform: scale(1.15);\n }\n input[type=\"range\"]::-moz-range-thumb {\n width: var(--viking-space-2);\n height: var(--viking-space-2);\n border-radius: var(--viking-radius-pill);\n background: var(--viking-surface);\n border: 2px solid var(--viking-accent);\n box-shadow: var(--viking-shadow-sm);\n }\n input[type=\"range\"]:focus-visible {\n outline: var(--viking-ring-width) solid var(--viking-ring);\n outline-offset: var(--viking-ring-offset);\n }\n `,\n ],\n})\nexport class VikingSlider extends VikingControl<number> {\n readonly value = model<number>(0);\n readonly min = input<number>(0);\n readonly max = input<number>(100);\n readonly step = input<number>(1);\n readonly label = input<string>(\"\");\n readonly showValue = input<boolean>(true);\n readonly disabled = input<boolean>(false);\n\n protected readonly fillPercent = computed(() => {\n const range = this.max() - this.min();\n if (range <= 0) {\n return 0;\n }\n return ((this.value() - this.min()) / range) * 100;\n });\n\n writeValue(value: number): void {\n this.value.set(Number(value ?? 0));\n }\n\n protected onInput = (event: Event): void => {\n const next = Number((event.target as HTMLInputElement).value);\n this.value.set(next);\n this.onChange(next);\n };\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n input,\n model,\n} from \"@angular/core\";\nimport { VikingControl, provideVikingCva } from \"../core/cva\";\n\n/**\n * viking-switch — toggle switch.\n * ControlValueAccessor-compatible.\n */\n@Component({\n selector: \"viking-switch\",\n providers: [provideVikingCva(VikingSwitch)],\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <label\n class=\"viking-switch\"\n [class.viking-disabled]=\"disabled() || formDisabled()\"\n >\n <span class=\"viking-switch-track\" [class.viking-checked]=\"checked()\">\n <input\n type=\"checkbox\"\n role=\"switch\"\n [checked]=\"checked()\"\n [disabled]=\"disabled() || formDisabled()\"\n (change)=\"toggle($event)\"\n (blur)=\"onTouched()\"\n />\n <span class=\"viking-switch-thumb\"></span>\n </span>\n <span class=\"viking-switch-content\">\n <span class=\"viking-switch-label\"><ng-content /></span>\n @if (description()) {\n <span class=\"viking-switch-description\">{{ description() }}</span>\n }\n </span>\n </label>\n `,\n styles: [\n `\n :host {\n display: block;\n font-family: var(--viking-font-family);\n }\n .viking-switch {\n display: inline-flex;\n align-items: flex-start;\n gap: var(--viking-space-1);\n cursor: pointer;\n }\n .viking-disabled {\n opacity: var(--viking-state-disabled-opacity);\n cursor: not-allowed;\n }\n .viking-switch-track {\n position: relative;\n display: inline-flex;\n align-items: center;\n width: var(--viking-space-4);\n height: calc(var(--viking-space-2) + 2px);\n padding: 2px;\n margin-top: 3px;\n border-radius: var(--viking-radius-pill);\n background: var(--viking-surface-alt);\n border: 1px solid var(--viking-border-strong);\n transition: var(--viking-transition-interactive);\n flex-shrink: 0;\n box-sizing: border-box;\n }\n /* The native input fills the visual track so clicks and focus land on it. */\n .viking-switch-track input {\n position: absolute;\n inset: 0;\n width: 100%;\n height: 100%;\n margin: 0;\n opacity: 0;\n cursor: pointer;\n }\n .viking-switch-thumb {\n width: 14px;\n height: 14px;\n border-radius: var(--viking-radius-pill);\n background: var(--viking-text-muted);\n transition: var(--viking-transition-transform);\n }\n .viking-switch-track.viking-checked {\n background: var(--viking-accent);\n border-color: var(--viking-accent);\n }\n .viking-switch-track.viking-checked .viking-switch-thumb {\n background: var(--viking-accent-content);\n transform: translateX(calc(var(--viking-space-4) - 22px));\n }\n .viking-switch-track:has(input:focus-visible) {\n outline: var(--viking-ring-width) solid var(--viking-ring);\n outline-offset: var(--viking-ring-offset);\n }\n .viking-switch-content {\n display: flex;\n flex-direction: column;\n }\n .viking-switch-label {\n font-size: var(--viking-font-size);\n color: var(--viking-text);\n line-height: 1.45;\n }\n .viking-switch-description {\n font-size: var(--viking-font-size);\n color: var(--viking-text-muted);\n }\n `,\n ],\n})\nexport class VikingSwitch extends VikingControl<boolean> {\n readonly checked = model<boolean>(false);\n readonly disabled = input<boolean>(false);\n readonly description = input<string>(\"\");\n\n writeValue(value: boolean): void {\n this.checked.set(!!value);\n }\n\n protected toggle = (event: Event): void => {\n const next = (event.target as HTMLInputElement).checked;\n this.checked.set(next);\n this.onChange(next);\n };\n}\n","import { ChangeDetectionStrategy, Component, input } from \"@angular/core\";\nimport { VikingEmptyState } from \"../empty-state/empty-state\";\nimport { VikingSkeleton } from \"../skeleton/skeleton\";\n\n/**\n * viking-table — clinical data table wrapper.\n */\n@Component({\n selector: \"viking-table\",\n imports: [VikingEmptyState, VikingSkeleton],\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: \"viking-table-wrap\",\n \"[class.viking-table-compact]\": \"compact()\",\n \"[class.viking-table-striped]\": \"striped()\",\n \"[class.viking-table-loading]\": \"loading()\",\n \"[attr.aria-busy]\": \"loading() ? 'true' : null\",\n },\n template: `\n @if (loading()) {\n <div class=\"viking-table-loading-state\" aria-hidden=\"true\">\n @for (row of [1, 2, 3, 4]; track row) {\n <viking-skeleton height=\"44px\" />\n }\n </div>\n } @else if (emptyMessage()) {\n <viking-empty-state\n [heading]=\"emptyMessage()\"\n [description]=\"emptyDescription()\"\n icon=\"search-off\"\n />\n } @else {\n <table class=\"viking-table\">\n <ng-content />\n </table>\n }\n `,\n styles: [\n `\n :host {\n display: block;\n width: 100%;\n overflow-x: auto;\n border: 1px solid var(--viking-border);\n border-radius: var(--viking-radius-lg);\n background: var(--viking-surface);\n box-shadow: var(--viking-shadow-sm);\n transition: var(--viking-transition-colors);\n position: relative;\n }\n :host::before {\n content: \"\";\n position: absolute;\n inset: 0 0 auto;\n height: 1px;\n background: linear-gradient(\n 90deg,\n transparent,\n color-mix(in srgb, var(--viking-metallic-200) 18%, transparent),\n transparent\n );\n pointer-events: none;\n z-index: 1;\n }\n .viking-table-loading-state {\n display: flex;\n flex-direction: column;\n gap: var(--viking-space-1);\n padding: var(--viking-space-2);\n }\n .viking-table {\n width: 100%;\n border-collapse: collapse;\n font-family: var(--viking-font-family);\n font-size: var(--viking-font-size-sm);\n color: var(--viking-text);\n }\n :host ::ng-deep thead th {\n font-size: var(--viking-font-size-xs);\n font-weight: var(--viking-font-weight-bold);\n text-align: left;\n letter-spacing: var(--viking-letter-spacing-caps);\n text-transform: uppercase;\n color: var(--viking-text-muted);\n background: color-mix(\n in srgb,\n var(--viking-bg) 40%,\n var(--viking-surface)\n );\n padding: var(--viking-space-1-5) var(--viking-space-2);\n border-bottom: 1px solid var(--viking-border-strong);\n white-space: nowrap;\n }\n :host ::ng-deep tbody td {\n padding: var(--viking-space-1-5) var(--viking-space-2);\n border-bottom: 1px solid var(--viking-border-subtle);\n vertical-align: middle;\n transition: background-color var(--viking-duration-fast)\n var(--viking-ease-default);\n }\n :host ::ng-deep tbody tr:last-child td {\n border-bottom: none;\n }\n :host ::ng-deep tbody tr:hover td {\n background: var(--viking-accent-soft);\n }\n :host(.viking-table-striped) ::ng-deep tbody tr:nth-child(even) td {\n background: color-mix(\n in srgb,\n var(--viking-surface-alt) 50%,\n transparent\n );\n }\n :host(.viking-table-striped) ::ng-deep tbody tr:nth-child(even):hover td {\n background: var(--viking-accent-soft);\n }\n :host(.viking-table-compact) ::ng-deep thead th,\n :host(.viking-table-compact) ::ng-deep tbody td {\n padding: var(--viking-space-1) var(--viking-space-2);\n }\n @media (max-width: 640px) {\n :host ::ng-deep thead th,\n :host ::ng-deep tbody td {\n padding: var(--viking-space-1);\n font-size: var(--viking-font-size-xs);\n }\n }\n `,\n ],\n})\nexport class VikingTable {\n readonly compact = input(false);\n readonly striped = input(false);\n readonly loading = input(false);\n readonly emptyMessage = input<string>(\"\");\n readonly emptyDescription = input<string>(\"\");\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n contentChildren,\n InjectionToken,\n model,\n} from \"@angular/core\";\nimport { VikingTab } from \"./tab\";\n\nexport const VIKING_TABS = new InjectionToken<VikingTabs>(\"VIKING_TABS\");\n\n/**\n * viking-tabs — tablist container with roving keyboard navigation.\n */\n@Component({\n selector: \"viking-tabs\",\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [{ provide: VIKING_TABS, useExisting: VikingTabs }],\n host: { class: \"viking-tabs\" },\n template: `\n <div\n class=\"viking-tabs-list\"\n role=\"tablist\"\n (keydown)=\"onTabKeydown($event)\"\n >\n <ng-content select=\"viking-tab\" />\n </div>\n <ng-content select=\"viking-tab-panel\" />\n `,\n styles: [\n `\n :host {\n display: flex;\n flex-direction: column;\n gap: var(--viking-space-2);\n font-family: var(--viking-font-family);\n }\n .viking-tabs-list {\n display: flex;\n flex-wrap: wrap;\n gap: var(--viking-space-half);\n padding: var(--viking-space-half);\n border: 1px solid var(--viking-border);\n border-radius: var(--viking-radius-lg);\n background: color-mix(\n in srgb,\n var(--viking-surface-alt) 80%,\n var(--viking-surface)\n );\n box-shadow: var(--viking-shadow-sm);\n }\n @media (max-width: 767px) {\n .viking-tabs-list {\n flex-wrap: nowrap;\n overflow-x: auto;\n scroll-snap-type: x proximity;\n -webkit-overflow-scrolling: touch;\n scrollbar-width: none;\n }\n .viking-tabs-list::-webkit-scrollbar {\n display: none;\n }\n }\n `,\n ],\n})\nexport class VikingTabs {\n private readonly tabComponents = contentChildren(VikingTab);\n\n readonly value = model<string>(\"\");\n\n protected onTabKeydown = (event: KeyboardEvent): void => {\n const tabs = this.tabComponents().filter((tab) => !tab.disabled());\n if (tabs.length === 0) {\n return;\n }\n\n const currentIndex = tabs.findIndex((tab) => tab.value() === this.value());\n let nextIndex = currentIndex;\n\n switch (event.key) {\n case \"ArrowRight\":\n case \"ArrowDown\":\n event.preventDefault();\n nextIndex = (currentIndex + 1) % tabs.length;\n break;\n case \"ArrowLeft\":\n case \"ArrowUp\":\n event.preventDefault();\n nextIndex = (currentIndex - 1 + tabs.length) % tabs.length;\n break;\n case \"Home\":\n event.preventDefault();\n nextIndex = 0;\n break;\n case \"End\":\n event.preventDefault();\n nextIndex = tabs.length - 1;\n break;\n default:\n return;\n }\n\n const next = tabs[nextIndex];\n this.value.set(next.value());\n const button = document.getElementById(`viking-tab-${next.value()}`);\n button?.focus();\n };\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n Optional,\n computed,\n input,\n} from \"@angular/core\";\nimport { VIKING_TABS, VikingTabs } from \"./tabs\";\n\n/**\n * viking-tab — tab trigger button inside viking-tabs.\n */\n@Component({\n selector: \"viking-tab\",\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <button\n type=\"button\"\n role=\"tab\"\n class=\"viking-tab\"\n [class.viking-active]=\"active()\"\n [id]=\"tabId()\"\n [attr.aria-selected]=\"active()\"\n [attr.aria-controls]=\"panelId()\"\n [attr.tabindex]=\"active() ? 0 : -1\"\n [disabled]=\"disabled()\"\n (click)=\"select()\"\n >\n <ng-content />\n </button>\n `,\n styles: [\n `\n .viking-tab {\n font-family: var(--viking-font-family);\n font-size: var(--viking-font-size-sm);\n font-weight: var(--viking-font-weight-semibold);\n letter-spacing: var(--viking-letter-spacing-wide);\n display: inline-flex;\n align-items: center;\n justify-content: center;\n min-height: var(--viking-control-height-sm);\n min-width: var(--viking-btn-min-width, 120px);\n padding: 0 var(--viking-space-2);\n border: 1px solid transparent;\n border-radius: var(--viking-radius);\n background: transparent;\n color: var(--viking-text-muted);\n cursor: pointer;\n transition: var(--viking-transition-interactive);\n position: relative;\n -webkit-tap-highlight-color: transparent;\n }\n @media (max-width: 767px) {\n .viking-tab {\n min-height: var(--viking-control-height);\n flex: 1 1 auto;\n }\n }\n .viking-tab:hover:not(:disabled):not(.viking-active) {\n color: var(--viking-text);\n background: var(--viking-accent-soft);\n }\n .viking-tab:focus-visible {\n outline: var(--viking-ring-width) solid var(--viking-ring);\n outline-offset: var(--viking-ring-offset);\n }\n .viking-tab:active:not(:disabled) {\n transform: scale(var(--viking-state-active-scale));\n }\n .viking-tab.viking-active {\n color: var(--viking-accent-content);\n background: var(--viking-accent);\n border-color: color-mix(\n in srgb,\n var(--viking-accent) 80%,\n var(--viking-black)\n );\n box-shadow: var(--viking-shadow-sm);\n }\n .viking-tab:disabled {\n opacity: var(--viking-state-disabled-opacity);\n cursor: not-allowed;\n }\n `,\n ],\n})\nexport class VikingTab {\n constructor(@Optional() private readonly tabs: VikingTabs | null) {}\n\n readonly value = input.required<string>();\n readonly disabled = input(false);\n\n protected readonly tabId = computed(() => `viking-tab-${this.value()}`);\n protected readonly panelId = computed(\n () => `viking-tab-panel-${this.value()}`,\n );\n\n protected active = () => (this.tabs?.value() ?? \"\") === this.value();\n\n protected select = (): void => {\n if (this.disabled() || !this.tabs) {\n return;\n }\n this.tabs.value.set(this.value());\n };\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n Optional,\n computed,\n input,\n} from \"@angular/core\";\nimport { VIKING_TABS, VikingTabs } from \"./tabs\";\n\n/**\n * viking-tab-panel — tabpanel region inside viking-tabs.\n */\n@Component({\n selector: \"viking-tab-panel\",\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n role: \"tabpanel\",\n \"[attr.id]\": \"panelId()\",\n \"[attr.aria-labelledby]\": \"tabId()\",\n \"[attr.hidden]\": 'hidden() ? \"\" : null',\n \"[class.viking-hidden]\": \"hidden()\",\n },\n template: `<ng-content />`,\n styles: [\n `\n :host {\n display: block;\n padding: var(--viking-space-2);\n border: 1px solid var(--viking-border);\n border-radius: var(--viking-radius);\n background: var(--viking-surface);\n font-family: var(--viking-font-family);\n font-size: var(--viking-font-size);\n color: var(--viking-text);\n line-height: var(--viking-line-height-relaxed);\n animation: viking-fade-in var(--viking-duration-fast)\n var(--viking-ease-out);\n }\n :host(.viking-hidden) {\n display: none;\n }\n @media (prefers-reduced-motion: reduce) {\n :host {\n animation: none;\n }\n }\n `,\n ],\n})\nexport class VikingTabPanel {\n constructor(@Optional() private readonly tabs: VikingTabs | null) {}\n\n readonly value = input.required<string>();\n\n protected readonly panelId = computed(\n () => `viking-tab-panel-${this.value()}`,\n );\n protected readonly tabId = computed(() => `viking-tab-${this.value()}`);\n\n protected hidden = () => (this.tabs?.value() ?? \"\") !== this.value();\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n input,\n model,\n} from \"@angular/core\";\nimport { VikingControl, provideVikingCva } from \"../core/cva\";\n\n/**\n * viking-textarea — auto-growing textarea.\n * ControlValueAccessor-compatible.\n */\n@Component({\n selector: \"viking-textarea\",\n providers: [provideVikingCva(VikingTextarea)],\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <div\n class=\"viking-control viking-textarea-shell\"\n [class.viking-disabled]=\"isDisabled()\"\n >\n <textarea\n [rows]=\"rows()\"\n [placeholder]=\"placeholder()\"\n [value]=\"value()\"\n [disabled]=\"isDisabled()\"\n [attr.aria-label]=\"label() || placeholder() || 'Text area'\"\n [style.resize]=\"autoGrow() ? 'none' : 'vertical'\"\n (input)=\"onInput($event)\"\n (blur)=\"onTouched()\"\n ></textarea>\n </div>\n `,\n styles: [\n `\n :host {\n display: block;\n }\n .viking-textarea-shell {\n display: flex;\n width: 100%;\n padding: var(--viking-space-1-5) var(--viking-space-2);\n background: var(--viking-surface);\n border: 1px solid var(--viking-border-strong);\n border-radius: var(--viking-radius);\n box-shadow: var(--viking-shadow-sm);\n transition: var(--viking-transition-interactive);\n }\n .viking-textarea-shell:hover:not(.viking-disabled) {\n border-color: var(--viking-accent-strong);\n box-shadow: var(--viking-shadow-md);\n }\n .viking-textarea-shell:focus-within {\n outline: var(--viking-ring-width) solid var(--viking-ring);\n outline-offset: var(--viking-ring-offset);\n border-color: var(--viking-accent);\n }\n .viking-disabled {\n opacity: var(--viking-state-disabled-opacity);\n cursor: not-allowed;\n }\n textarea {\n width: 100%;\n box-sizing: border-box;\n border: none;\n outline: none !important;\n background: transparent;\n color: var(--viking-text);\n font-family: var(--viking-font-family);\n font-size: var(--viking-font-size);\n line-height: 1.55;\n padding: 0;\n }\n textarea::placeholder {\n color: var(--viking-text-muted);\n }\n `,\n ],\n})\nexport class VikingTextarea extends VikingControl<string> {\n readonly value = model<string>(\"\");\n readonly placeholder = input<string>(\"\");\n readonly label = input<string>(\"\");\n readonly rows = input<number>(3);\n readonly autoGrow = input<boolean>(true);\n readonly disabled = input<boolean>(false);\n\n protected isDisabled = (): boolean => this.disabled() || this.formDisabled();\n\n writeValue(value: string): void {\n this.value.set(value ?? \"\");\n }\n\n protected onInput = (event: Event): void => {\n const el = event.target as HTMLTextAreaElement;\n this.value.set(el.value);\n this.onChange(el.value);\n if (this.autoGrow()) {\n el.style.height = \"auto\";\n el.style.height = `${el.scrollHeight}px`;\n }\n };\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n InjectionToken,\n model,\n} from \"@angular/core\";\n\nexport const VIKING_TOGGLE_GROUP = new InjectionToken<VikingToggleGroup>(\n \"VIKING_TOGGLE_GROUP\",\n);\n\n/**\n * viking-toggle-group — exclusive or multi toggle cluster.\n */\n@Component({\n selector: \"viking-toggle-group\",\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [{ provide: VIKING_TOGGLE_GROUP, useExisting: VikingToggleGroup }],\n host: {\n role: \"group\",\n class: \"viking-toggle-group\",\n \"[class.viking-exclusive]\": \"exclusive()\",\n },\n template: `<ng-content />`,\n styles: [\n `\n :host {\n display: inline-flex;\n flex-wrap: wrap;\n gap: 0;\n border: 1px solid var(--viking-border-strong);\n border-radius: var(--viking-radius);\n overflow: hidden;\n box-shadow: var(--viking-shadow-sm);\n }\n :host ::ng-deep viking-toggle:not(:first-child) .viking-toggle {\n border-left: none;\n margin-left: -1px;\n border-radius: 0;\n }\n :host ::ng-deep viking-toggle:first-child .viking-toggle {\n border-top-right-radius: 0;\n border-bottom-right-radius: 0;\n }\n :host ::ng-deep viking-toggle:last-child .viking-toggle {\n border-top-left-radius: 0;\n border-bottom-left-radius: 0;\n }\n :host ::ng-deep viking-toggle .viking-toggle {\n min-width: var(--viking-btn-min-width, 120px);\n border-radius: 0;\n box-shadow: none;\n }\n `,\n ],\n})\nexport class VikingToggleGroup {\n readonly value = model<string>(\"\");\n readonly exclusive = model(true);\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n Optional,\n input,\n model,\n output,\n} from \"@angular/core\";\nimport { VIKING_TOGGLE_GROUP, VikingToggleGroup } from \"./toggle-group\";\n\n/**\n * viking-toggle — pressed-state button toggle.\n */\n@Component({\n selector: \"viking-toggle\",\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <button\n type=\"button\"\n class=\"viking-toggle\"\n [class.viking-pressed]=\"isPressed()\"\n [attr.aria-pressed]=\"isPressed()\"\n [disabled]=\"disabled()\"\n [attr.aria-label]=\"label() || null\"\n (click)=\"toggle()\"\n >\n <ng-content />\n </button>\n `,\n styles: [\n `\n :host {\n display: inline-flex;\n }\n .viking-toggle {\n font-family: var(--viking-font-family);\n font-size: var(--viking-font-size-ui);\n font-weight: 700;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n gap: var(--viking-space-1);\n min-height: var(--viking-control-height-sm);\n min-width: var(--viking-btn-min-width, 120px);\n padding: 0 var(--viking-space-2);\n border: 1px solid var(--viking-border-strong);\n border-radius: var(--viking-radius);\n background: var(--viking-surface);\n color: var(--viking-text);\n cursor: pointer;\n transition: var(--viking-transition);\n }\n .viking-toggle:hover:not(:disabled) {\n border-color: var(--viking-accent-strong);\n background: var(--viking-accent-soft);\n }\n .viking-toggle:focus-visible {\n outline: var(--viking-ring-width) solid var(--viking-ring);\n outline-offset: var(--viking-ring-offset);\n }\n .viking-toggle.viking-pressed {\n background: var(--viking-accent);\n border-color: var(--viking-accent);\n color: var(--viking-accent-content);\n }\n .viking-toggle:disabled {\n opacity: var(--viking-state-disabled-opacity);\n cursor: not-allowed;\n }\n `,\n ],\n})\nexport class VikingToggle {\n constructor(@Optional() private readonly group: VikingToggleGroup | null) {}\n\n readonly pressed = model(false);\n readonly value = input<string>(\"\");\n readonly disabled = input(false);\n readonly label = input(\"\");\n\n readonly toggled = output<boolean>();\n\n protected isPressed = (): boolean => {\n if (this.group && this.value()) {\n return this.group.value() === this.value();\n }\n return this.pressed();\n };\n\n protected toggle = (): void => {\n if (this.disabled()) return;\n if (this.group && this.value()) {\n this.group.value.set(this.value());\n this.toggled.emit(true);\n return;\n }\n const next = !this.pressed();\n this.pressed.set(next);\n this.toggled.emit(next);\n };\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n computed,\n input,\n model,\n signal,\n} from \"@angular/core\";\nimport { VikingControl, provideVikingCva } from \"../core/cva\";\nimport { VikingIcon } from \"../icon/icon\";\n\n/**\n * viking-time-picker — dropdown time selection.\n * Value is a 24h HH:MM string. ControlValueAccessor-compatible.\n */\n@Component({\n selector: \"viking-time-picker\",\n imports: [VikingIcon],\n providers: [provideVikingCva(VikingTimePicker)],\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n \"(document:click)\": \"onDocumentClick($event)\",\n \"(keydown.escape)\": \"open.set(false)\",\n },\n template: `\n <button\n type=\"button\"\n class=\"viking-control viking-time-trigger\"\n [disabled]=\"disabled() || formDisabled()\"\n [attr.aria-expanded]=\"open()\"\n [attr.aria-label]=\"label() || placeholder()\"\n aria-haspopup=\"listbox\"\n (click)=\"open.set(!open())\"\n >\n <viking-icon name=\"clock\" [size]=\"20\" />\n <span\n class=\"viking-time-value\"\n [class.viking-time-placeholder]=\"!value()\"\n >\n {{ value() || placeholder() }}\n </span>\n <viking-icon\n [name]=\"open() ? 'chevron-up' : 'chevron-down'\"\n [size]=\"18\"\n />\n </button>\n @if (open()) {\n <div class=\"viking-time-panel\" role=\"listbox\" aria-label=\"Choose time\">\n @for (slot of slots(); track slot) {\n <button\n type=\"button\"\n role=\"option\"\n class=\"viking-time-option\"\n [class.viking-selected]=\"slot === value()\"\n [attr.aria-selected]=\"slot === value()\"\n (click)=\"pick(slot)\"\n >\n {{ slot }}\n </button>\n }\n </div>\n }\n `,\n styles: [\n `\n :host {\n position: relative;\n display: block;\n }\n .viking-time-trigger {\n display: flex;\n align-items: center;\n gap: var(--viking-space-1);\n width: 100%;\n min-height: var(--viking-control-height);\n padding: 0 var(--viking-space-2);\n background: var(--viking-surface);\n border: 1px solid var(--viking-border-strong);\n border-radius: var(--viking-radius);\n box-shadow: var(--viking-shadow-sm);\n color: var(--viking-text-muted);\n font-family: var(--viking-font-family);\n font-size: var(--viking-font-size);\n cursor: pointer;\n transition: var(--viking-transition);\n text-align: left;\n }\n .viking-time-trigger:hover:not(:disabled) {\n border-color: var(--viking-accent-strong);\n }\n .viking-time-trigger:focus-visible {\n outline: var(--viking-ring-width) solid var(--viking-ring);\n outline-offset: var(--viking-ring-offset);\n }\n .viking-time-trigger:disabled {\n opacity: var(--viking-state-disabled-opacity);\n cursor: not-allowed;\n }\n .viking-time-value {\n flex: 1;\n color: var(--viking-text);\n font-variant-numeric: tabular-nums;\n }\n .viking-time-placeholder {\n color: var(--viking-text-muted);\n }\n .viking-time-panel {\n position: absolute;\n top: calc(100% + var(--viking-space-1));\n left: 0;\n right: 0;\n display: flex;\n flex-direction: column;\n gap: 2px;\n margin: 0;\n padding: var(--viking-space-1);\n background: var(--viking-surface);\n border: 1px solid var(--viking-border-strong);\n border-radius: var(--viking-radius);\n box-shadow: var(--viking-shadow-md);\n z-index: var(--viking-z-overlay);\n max-height: 279px;\n overflow: auto;\n }\n .viking-time-option {\n padding: var(--viking-space-1);\n border: none;\n background: transparent;\n text-align: left;\n width: 100%;\n border-radius: calc(var(--viking-radius) / 1.5);\n font-family: var(--viking-font-family);\n font-size: var(--viking-font-size);\n color: var(--viking-text);\n cursor: pointer;\n font-variant-numeric: tabular-nums;\n }\n .viking-time-option:focus-visible {\n outline: var(--viking-ring-width) solid var(--viking-ring);\n outline-offset: -2px;\n }\n .viking-time-option:hover {\n background: var(--viking-accent-soft);\n }\n .viking-selected {\n color: var(--viking-accent);\n font-weight: 600;\n }\n `,\n ],\n})\nexport class VikingTimePicker extends VikingControl<string | null> {\n readonly value = model<string | null>(null);\n readonly placeholder = input<string>(\"Select time\");\n readonly label = input<string>(\"\");\n readonly disabled = input<boolean>(false);\n /** Minute granularity for generated slots. */\n readonly stepMinutes = input<number>(30);\n\n constructor(private readonly host: ElementRef<HTMLElement>) {\n super();\n }\n\n protected readonly open = signal(false);\n\n protected readonly slots = computed<string[]>(() => {\n const step = Math.max(5, this.stepMinutes());\n const result: string[] = [];\n for (let minutes = 0; minutes < 24 * 60; minutes += step) {\n const hours = String(Math.floor(minutes / 60)).padStart(2, \"0\");\n const mins = String(minutes % 60).padStart(2, \"0\");\n result.push(`${hours}:${mins}`);\n }\n return result;\n });\n\n writeValue(value: string | null): void {\n this.value.set(value);\n }\n\n protected pick = (slot: string): void => {\n this.value.set(slot);\n this.onChange(slot);\n this.onTouched();\n this.open.set(false);\n };\n\n protected onDocumentClick = (event: Event): void => {\n if (\n this.open() &&\n !this.host.nativeElement.contains(event.target as Node)\n ) {\n this.open.set(false);\n }\n };\n}\n","import { ChangeDetectionStrategy, Component, input } from \"@angular/core\";\nimport { VikingIcon } from \"../icon/icon\";\nimport { VikingIconName } from \"../../core/icons\";\nimport { VikingTone } from \"../../core/types\";\n\n/**\n * viking-timeline — vertical event feed.\n * Compose with viking-timeline-item.\n */\n@Component({\n selector: \"viking-timeline\",\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: { role: \"list\" },\n template: `<ng-content />`,\n styles: [\n `\n :host {\n display: flex;\n flex-direction: column;\n }\n `,\n ],\n})\nexport class VikingTimeline {}\n\n/** A single event on viking-timeline. */\n@Component({\n selector: \"viking-timeline-item\",\n imports: [VikingIcon],\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: { role: \"listitem\" },\n template: `\n <div class=\"viking-timeline-item\">\n <div class=\"viking-timeline-rail\" aria-hidden=\"true\">\n <span\n class=\"viking-timeline-marker\"\n [class]=\"'viking-marker-' + tone()\"\n >\n @if (icon()) {\n <viking-icon [name]=\"icon()!\" [size]=\"14\" />\n }\n </span>\n <span class=\"viking-timeline-line\"></span>\n </div>\n <div class=\"viking-timeline-content\">\n <div class=\"viking-timeline-header\">\n <span class=\"viking-timeline-heading\">{{ heading() }}</span>\n @if (timestamp()) {\n <time class=\"viking-timeline-time\">{{ timestamp() }}</time>\n }\n </div>\n <div class=\"viking-timeline-body\"><ng-content /></div>\n </div>\n </div>\n `,\n styles: [\n `\n :host:last-child .viking-timeline-line {\n display: none;\n }\n .viking-timeline-item {\n display: flex;\n gap: var(--viking-space-2);\n font-family: var(--viking-font-family);\n }\n .viking-timeline-rail {\n display: flex;\n flex-direction: column;\n align-items: center;\n }\n .viking-timeline-marker {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: var(--viking-space-3);\n height: var(--viking-space-3);\n border-radius: var(--viking-radius-pill);\n border: 2px solid var(--viking-border-strong);\n background: var(--viking-surface);\n color: var(--viking-text-muted);\n flex-shrink: 0;\n }\n .viking-marker-accent {\n border-color: var(--viking-accent);\n color: var(--viking-accent);\n }\n .viking-marker-secondary {\n border-color: var(--viking-accent-secondary);\n color: var(--viking-accent-secondary);\n }\n .viking-marker-info {\n border-color: var(--viking-info);\n color: var(--viking-info);\n }\n .viking-marker-success {\n border-color: var(--viking-success);\n color: var(--viking-success);\n }\n .viking-marker-warning {\n border-color: var(--viking-warning);\n color: var(--viking-text);\n }\n .viking-marker-danger {\n border-color: var(--viking-danger);\n color: var(--viking-danger);\n }\n .viking-timeline-line {\n flex: 1;\n width: 2px;\n min-height: var(--viking-space-2);\n background: var(--viking-border);\n }\n .viking-timeline-content {\n flex: 1;\n padding-bottom: var(--viking-space-3);\n min-width: 0;\n }\n .viking-timeline-header {\n display: flex;\n align-items: baseline;\n justify-content: space-between;\n gap: var(--viking-space-2);\n flex-wrap: wrap;\n }\n .viking-timeline-heading {\n font-size: var(--viking-font-size);\n font-weight: 600;\n color: var(--viking-text);\n }\n .viking-timeline-time {\n font-size: var(--viking-font-size);\n color: var(--viking-text-muted);\n font-variant-numeric: tabular-nums;\n }\n .viking-timeline-body {\n margin-top: 3px;\n font-size: var(--viking-font-size);\n color: var(--viking-text-muted);\n line-height: 1.55;\n }\n .viking-timeline-body:empty {\n display: none;\n }\n `,\n ],\n})\nexport class VikingTimelineItem {\n readonly heading = input.required<string>();\n readonly timestamp = input<string>(\"\");\n readonly icon = input<VikingIconName | null>(null);\n readonly tone = input<VikingTone>(\"muted\");\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n Injectable,\n input,\n signal,\n} from \"@angular/core\";\nimport { VikingIcon } from \"../icon/icon\";\nimport { VikingIconName } from \"../../core/icons\";\nimport { VikingToastInstance, VikingToastOptions } from \"../../core/types\";\n\nconst TONE_ICONS: Record<string, VikingIconName> = {\n accent: \"info\",\n success: \"check-circle\",\n warning: \"alert-triangle\",\n danger: \"alert-circle\",\n muted: \"info\",\n};\n\n/**\n * VikingToastService — imperative toast API.\n * Render a single <viking-toaster> outlet near the app root.\n */\n@Injectable({ providedIn: \"root\" })\nexport class VikingToastService {\n private nextId = 1;\n readonly toasts = signal<VikingToastInstance[]>([]);\n\n readonly show = (options: VikingToastOptions): number => {\n const toast: VikingToastInstance = {\n id: this.nextId++,\n heading: options.heading ?? \"\",\n text: options.text,\n tone: options.tone ?? \"accent\",\n duration: options.duration ?? 4500,\n };\n this.toasts.update((list) => [...list, toast]);\n if (toast.duration > 0) {\n setTimeout(() => this.dismiss(toast.id), toast.duration);\n }\n return toast.id;\n };\n\n readonly dismiss = (id: number): void => {\n this.toasts.update((list) => list.filter((toast) => toast.id !== id));\n };\n}\n\n/**\n * viking-toaster — fixed-position outlet that renders active toasts.\n */\n@Component({\n selector: \"viking-toaster\",\n imports: [VikingIcon],\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: { \"[class.viking-toaster-top]\": \"position() === 'top-end'\" },\n template: `\n @for (toast of service.toasts(); track toast.id) {\n <div\n class=\"viking-toast\"\n [class]=\"'viking-toast-' + toast.tone\"\n role=\"status\"\n >\n <viking-icon\n class=\"viking-toast-icon\"\n [name]=\"toneIcon(toast.tone)\"\n [size]=\"20\"\n />\n <div class=\"viking-toast-body\">\n @if (toast.heading) {\n <p class=\"viking-toast-heading\">{{ toast.heading }}</p>\n }\n <p class=\"viking-toast-text\">{{ toast.text }}</p>\n </div>\n <button\n type=\"button\"\n class=\"viking-toast-close\"\n aria-label=\"Dismiss notification\"\n (click)=\"service.dismiss(toast.id)\"\n >\n <viking-icon name=\"x\" [size]=\"16\" />\n </button>\n </div>\n }\n `,\n styles: [\n `\n :host {\n position: fixed;\n bottom: var(--viking-space-3);\n right: var(--viking-space-3);\n display: flex;\n flex-direction: column;\n gap: var(--viking-space-1);\n z-index: var(--viking-z-toast);\n max-width: min(414px, calc(100vw - var(--viking-space-4)));\n }\n @media (max-width: 767px) {\n :host {\n bottom: var(--viking-space-2);\n right: var(--viking-space-2);\n left: var(--viking-space-2);\n max-width: none;\n }\n }\n :host(.viking-toaster-top) {\n bottom: auto;\n top: var(--viking-space-3);\n }\n .viking-toast {\n display: flex;\n align-items: flex-start;\n gap: var(--viking-space-1);\n padding: var(--viking-space-2);\n background: var(--viking-surface);\n border: 1px solid var(--viking-border-strong);\n border-radius: var(--viking-radius);\n box-shadow: var(--viking-shadow-md);\n font-family: var(--viking-font-family);\n animation: viking-toast-in var(--viking-duration) var(--viking-ease-out);\n }\n @keyframes viking-toast-in {\n from {\n transform: translateY(var(--viking-space-1));\n opacity: 0;\n }\n to {\n transform: translateY(0);\n opacity: 1;\n }\n }\n @media (prefers-reduced-motion: reduce) {\n .viking-toast {\n animation: none;\n }\n }\n .viking-toast-icon {\n margin-top: 2px;\n }\n .viking-toast-accent .viking-toast-icon {\n color: var(--viking-accent);\n }\n .viking-toast-success .viking-toast-icon {\n color: var(--viking-success);\n }\n .viking-toast-warning .viking-toast-icon {\n color: var(--viking-warning);\n }\n .viking-toast-danger .viking-toast-icon {\n color: var(--viking-danger);\n }\n .viking-toast-body {\n flex: 1;\n min-width: 0;\n }\n .viking-toast-heading {\n margin: 0;\n font-size: var(--viking-font-size);\n font-weight: 600;\n color: var(--viking-text);\n }\n .viking-toast-text {\n margin: 0;\n font-size: var(--viking-font-size);\n color: var(--viking-text-muted);\n line-height: 1.45;\n }\n .viking-toast-close {\n display: inline-flex;\n border: none;\n background: transparent;\n color: var(--viking-text-muted);\n cursor: pointer;\n padding: var(--viking-space-half);\n border-radius: var(--viking-radius-pill);\n transition: var(--viking-transition-interactive);\n }\n .viking-toast-close:hover {\n color: var(--viking-text);\n background: var(--viking-accent-soft);\n }\n .viking-toast-close:focus-visible {\n outline: var(--viking-ring-width) solid var(--viking-ring);\n outline-offset: 1px;\n }\n `,\n ],\n})\nexport class VikingToaster {\n readonly position = input<\"bottom-end\" | \"top-end\">(\"bottom-end\");\n\n constructor(protected readonly service: VikingToastService) {}\n\n protected toneIcon = (tone: string): VikingIconName =>\n TONE_ICONS[tone] ?? \"info\";\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n input,\n} from \"@angular/core\";\n\nexport type VikingUptimeStatus =\n | \"operational\"\n | \"partial_outage\"\n | \"major_outage\"\n | \"no_data\";\n\n/** viking-uptime-bar — timeline bar for uptime history visualizations. */\n@Component({\n selector: \"viking-uptime-bar\",\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: \"viking-uptime-bar\",\n \"[class.viking-uptime-partial]\": \"status() === 'partial_outage'\",\n \"[class.viking-uptime-major]\": \"status() === 'major_outage'\",\n \"[class.viking-uptime-nodata]\": \"status() === 'no_data'\",\n \"[attr.title]\": \"title()\",\n },\n template: \"\",\n styles: [\n `\n :host {\n display: block;\n width: 100%;\n height: 100%;\n border-radius: var(--viking-radius);\n background: var(--viking-success);\n }\n :host(.viking-uptime-partial) {\n height: 70%;\n align-self: flex-end;\n background: var(--viking-warning);\n }\n :host(.viking-uptime-major) {\n height: 40%;\n align-self: flex-end;\n background: var(--viking-danger);\n }\n :host(.viking-uptime-nodata) {\n background: var(--viking-text-muted);\n opacity: 0.35;\n }\n `,\n ],\n})\nexport class VikingUptimeBar {\n readonly status = input<VikingUptimeStatus>(\"operational\");\n readonly title = input<string>(\"\");\n}\n","import { ChangeDetectionStrategy, Component, input } from \"@angular/core\";\nimport { VikingBar } from \"../bar/bar\";\nimport { VikingButton } from \"../button/button\";\nimport { VikingChart } from \"../chart/chart\";\nimport { VikingChartSeries } from \"../../core/types\";\n\n/**\n * viking-whitepaper-cta — Polars-style animated research CTA with bar grid + sparkline.\n */\n@Component({\n selector: \"viking-whitepaper-cta\",\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [VikingBar, VikingButton, VikingChart],\n template: `\n <section class=\"viking-whitepaper-cta\" [attr.aria-labelledby]=\"headingId\">\n <div class=\"viking-whitepaper-cta-bg\" aria-hidden=\"true\">\n <div class=\"viking-whitepaper-polars-grid\">\n @for (bar of barHeights; track $index) {\n <viking-bar class=\"viking-whitepaper-polars-bar\" [height]=\"bar\" />\n }\n </div>\n <viking-chart\n kind=\"sparkline\"\n [series]=\"sparklineSeries\"\n label=\"Research activity trend\"\n class=\"viking-whitepaper-sparkline viking-chart-wide\"\n />\n </div>\n\n <div class=\"viking-whitepaper-cta-content\">\n <span class=\"viking-whitepaper-tag\">{{ tag() }}</span>\n <h2 [id]=\"headingId\" class=\"viking-whitepaper-title\">{{ title() }}</h2>\n <p class=\"viking-whitepaper-description\">{{ description() }}</p>\n <viking-button\n variant=\"primary\"\n [href]=\"href()\"\n [attr.target]=\"external() ? '_blank' : null\"\n [attr.rel]=\"external() ? 'noopener noreferrer' : null\"\n icon=\"file\"\n class=\"viking-whitepaper-btn\"\n >\n {{ buttonLabel() }}\n </viking-button>\n </div>\n </section>\n `,\n styleUrl: \"./whitepaper-cta.scss\",\n styles: [\n `\n :host {\n display: block;\n width: 100%;\n }\n `,\n ],\n})\nexport class VikingWhitepaperCta {\n readonly tag = input(\"Research & Architecture\");\n readonly title = input(\"The Whitepaper\");\n readonly description = input(\n \"Event projection patterns, threat mitigation algorithms, and the architecture powering symmetrical multi-tenant pipelines.\",\n );\n readonly buttonLabel = input(\"Read Whitepaper\");\n readonly href = input(\"/whitepaper\");\n readonly external = input(false);\n\n protected readonly headingId = \"viking-whitepaper-cta-title\";\n protected readonly barHeights = [\n 72, 45, 88, 56, 91, 38, 67, 82, 49, 76, 58, 94,\n ];\n protected readonly sparklineSeries: VikingChartSeries[] = [\n {\n name: \"Research\",\n tone: \"accent\",\n data: [12, 18, 15, 22, 28, 24, 32, 35, 30, 38, 42, 45],\n },\n ];\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n input,\n} from \"@angular/core\";\nimport { VikingProgress } from \"../progress/progress\";\n\nexport interface VikingWizardStep {\n id: string;\n label: string;\n}\n\n/**\n * viking-wizard — multi-step modal shell with progress and action slots.\n */\n@Component({\n selector: \"viking-wizard\",\n imports: [VikingProgress],\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: { class: \"viking-wizard\" },\n template: `\n <viking-progress [value]=\"progressPercent()\" />\n <p class=\"viking-wizard-step-label\">{{ activeStep().label }}</p>\n <div class=\"viking-wizard-body\">\n <ng-content />\n </div>\n <footer class=\"viking-wizard-actions\">\n <ng-content select=\"[vikingWizardActions]\" />\n </footer>\n `,\n styles: [\n `\n :host {\n display: flex;\n flex-direction: column;\n gap: var(--viking-space-2);\n font-family: var(--viking-font-family);\n }\n .viking-wizard-step-label {\n margin: 0;\n font-size: var(--viking-font-size-sm);\n font-weight: var(--viking-font-weight-semibold);\n color: var(--viking-text-muted);\n letter-spacing: var(--viking-letter-spacing-wide);\n text-transform: uppercase;\n }\n .viking-wizard-body {\n display: flex;\n flex-direction: column;\n gap: var(--viking-space-2);\n }\n .viking-wizard-actions {\n display: flex;\n flex-wrap: wrap;\n justify-content: flex-end;\n gap: var(--viking-space-1);\n padding-top: var(--viking-space-2);\n border-top: 1px solid var(--viking-border);\n }\n `,\n ],\n})\nexport class VikingWizard {\n readonly steps = input<VikingWizardStep[]>([]);\n readonly step = input<string>(\"\");\n\n protected readonly activeStep = computed(\n () =>\n this.steps().find((item) => item.id === this.step()) ??\n this.steps()[0] ?? { id: \"\", label: \"\" },\n );\n\n protected readonly progressPercent = computed(() => {\n const steps = this.steps();\n if (steps.length <= 1) return 100;\n const index = steps.findIndex((item) => item.id === this.step());\n return Math.round(((index + 1) / steps.length) * 100);\n });\n}\n","import {\n DOCUMENT,\n Directive,\n ElementRef,\n Inject,\n OnDestroy,\n input,\n} from \"@angular/core\";\n\nlet tooltipIdCounter = 0;\n\n/**\n * vikingTooltip — attribute directive tooltip.\n * Shows on hover and keyboard focus; positions itself relative to the host.\n */\n@Directive({\n selector: \"[vikingTooltip]\",\n host: {\n class: \"viking-tooltip-host viking-focus-ring\",\n \"(mouseenter)\": \"show()\",\n \"(mouseleave)\": \"hide()\",\n \"(focusin)\": \"show()\",\n \"(focusout)\": \"hide()\",\n \"(keydown.escape)\": \"hide()\",\n \"[attr.aria-describedby]\": \"visible() ? tooltipId : null\",\n },\n})\nexport class VikingTooltip implements OnDestroy {\n constructor(\n private readonly host: ElementRef<HTMLElement>,\n @Inject(DOCUMENT) private readonly document: Document,\n ) {}\n\n readonly vikingTooltip = input.required<string>();\n readonly tooltipPosition = input<\"top\" | \"bottom\" | \"left\" | \"right\">(\"top\");\n readonly tooltipKbd = input<string>(\"\");\n\n protected readonly tooltipId = `viking-tooltip-${++tooltipIdCounter}`;\n\n private element: HTMLElement | null = null;\n\n protected visible = (): boolean => this.element !== null;\n\n protected show = (): void => {\n if (this.element || !this.vikingTooltip()) {\n return;\n }\n const tip = this.document.createElement(\"div\");\n tip.id = this.tooltipId;\n tip.setAttribute(\"role\", \"tooltip\");\n tip.className = \"viking-tooltip\";\n\n const text = this.document.createElement(\"span\");\n text.className = \"viking-tooltip-text\";\n text.textContent = this.vikingTooltip();\n tip.appendChild(text);\n\n if (this.tooltipKbd()) {\n const kbd = this.document.createElement(\"kbd\");\n kbd.className = \"viking-tooltip-kbd\";\n kbd.textContent = this.tooltipKbd();\n tip.appendChild(kbd);\n }\n\n this.document.body.appendChild(tip);\n this.position(tip);\n this.element = tip;\n };\n\n private position = (tip: HTMLElement): void => {\n const anchor = this.host.nativeElement.getBoundingClientRect();\n const rect = tip.getBoundingClientRect();\n const gap =\n parseInt(\n getComputedStyle(this.document.documentElement).getPropertyValue(\n \"--viking-space-1\",\n ),\n 10,\n ) || 8;\n const edge =\n parseInt(\n getComputedStyle(this.document.documentElement).getPropertyValue(\n \"--viking-space-1\",\n ),\n 10,\n ) || 8;\n\n let left = anchor.left + anchor.width / 2 - rect.width / 2;\n let top = anchor.top - rect.height - gap;\n\n switch (this.tooltipPosition()) {\n case \"bottom\":\n top = anchor.bottom + gap;\n break;\n case \"left\":\n left = anchor.left - rect.width - gap;\n top = anchor.top + anchor.height / 2 - rect.height / 2;\n break;\n case \"right\":\n left = anchor.right + gap;\n top = anchor.top + anchor.height / 2 - rect.height / 2;\n break;\n default:\n break;\n }\n\n tip.style.left = `${Math.max(edge, Math.min(left, window.innerWidth - rect.width - edge))}px`;\n tip.style.top = `${Math.max(edge, top)}px`;\n };\n\n protected hide = (): void => {\n this.element?.remove();\n this.element = null;\n };\n\n ngOnDestroy(): void {\n this.hide();\n }\n}\n","import {\n AfterViewInit,\n ChangeDetectionStrategy,\n Component,\n CUSTOM_ELEMENTS_SCHEMA,\n ElementRef,\n OnInit,\n PLATFORM_ID,\n inject,\n input,\n viewChild,\n} from \"@angular/core\";\nimport { isPlatformBrowser } from \"@angular/common\";\nimport {\n DEFAULT_SITE_URLS,\n type SiteDrakkarContext,\n type SiteUrls,\n} from \"../site-drakkar/site-drakkar.config\";\nimport { registerVikingElements } from \"../../web/index\";\n\nregisterVikingElements();\n\n/**\n * viking-suite-search-palette — thin Angular wrapper around `viking-suite-command-palette`.\n * Unified ⌘K command palette for deml.app with curated suite navigation.\n */\n@Component({\n selector: \"viking-suite-search-palette\",\n schemas: [CUSTOM_ELEMENTS_SCHEMA],\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <viking-suite-command-palette\n #palette\n [attr.context]=\"context()\"\n [attr.app-url]=\"urls().app\"\n [attr.marketing-url]=\"urls().marketing\"\n [attr.backend-url]=\"urls().backend\"\n [attr.placeholder]=\"placeholder()\"\n [attr.global-shortcut]=\"bindShortcut() ? '' : 'false'\"\n />\n `,\n})\nexport class VikingSuiteSearchPalette implements OnInit, AfterViewInit {\n private readonly platformId = inject(PLATFORM_ID);\n\n readonly context = input<SiteDrakkarContext>(\"app\");\n readonly urls = input<SiteUrls>(DEFAULT_SITE_URLS);\n readonly placeholder = input<string>(\n \"Search documentation, dashboard, settings…\",\n );\n readonly bindShortcut = input<boolean>(true);\n\n /** Optional callback when the palette opens (e.g. SearchService bridge). */\n readonly onRegister =\n input<(handlers: { open: () => void; close: () => void }) => void>();\n\n private readonly paletteRef = viewChild<ElementRef<HTMLElement>>(\"palette\");\n\n ngOnInit(): void {\n this.onRegister()?.({\n open: () => this.openPalette(),\n close: () => this.closePalette(),\n });\n }\n\n ngAfterViewInit(): void {\n if (!isPlatformBrowser(this.platformId)) {\n return;\n }\n const widgets =\n (globalThis as { DemlWidgets?: Record<string, unknown> }).DemlWidgets ??\n {};\n (globalThis as { DemlWidgets?: Record<string, unknown> }).DemlWidgets = {\n ...widgets,\n openSearch: () => this.openPalette(),\n closeSearch: () => this.closePalette(),\n };\n }\n\n /** Opens the palette. */\n openPalette(): void {\n const el = this.paletteRef()?.nativeElement as HTMLElement & {\n openPalette?: () => void;\n };\n el?.openPalette?.();\n }\n\n /** Closes the palette and clears the query. */\n closePalette(): void {\n const el = this.paletteRef()?.nativeElement as HTMLElement & {\n closePalette?: () => void;\n };\n el?.closePalette?.();\n }\n}\n","/*\n * @dataengineeringformachinelearning/viking-ui — public API surface.\n * Viking-UI: DEML premium design system for Angular (THEME.md palette only).\n */\n\nexport * from \"./core/types\";\nexport {\n VIKING_ICON_NAMES,\n VIKING_ICON_PATHS,\n VIKING_ICON_SIZE_PRESETS,\n VIKING_BRAND_ICON_NAMES,\n VIKING_LUCIDE_ICON_NAMES,\n MATERIAL_ICON_ALIASES,\n resolveVikingIcon,\n resolveVikingIconColor,\n resolveVikingIconSize,\n type VikingIconName,\n vikingIconViewBox,\n type VikingIconSizePreset,\n} from \"./core/icons\";\nexport {\n VIKING_BRAND_ICON_PATHS,\n VIKING_BRAND_ICON_FILLED_PATHS,\n VIKING_BRAND_ICON_NAMES_LIST,\n VIKING_DRAKKAR_ICON_PATHS,\n VIKING_DRAKKAR_ICON_FILLED_PATHS,\n VIKING_DRAKKAR_ICON_NAMES_LIST,\n type VikingBrandIconName,\n type VikingDrakkarIconName,\n} from \"./core/brand-icons\";\nexport {\n type VikingChartCurve,\n type VikingChartKind,\n type VikingDonutSegment,\n type VikingCommandItem,\n type VikingSelectOption,\n} from \"./core/types\";\nexport { type VikingSeriesPreset } from \"./tokens/series-presets\";\nexport { VikingControl, provideVikingCva } from \"./lib/core/cva\";\n\n// Framework-agnostic Web Components + registration\nexport {\n VikingBadgeWc,\n VikingButtonWc,\n VikingCalloutWc,\n VikingCardWc,\n VikingInputWc,\n VikingModalWc,\n VikingSearchPaletteWc,\n VikingSelectWc,\n VikingSuiteSearchPaletteWc,\n VikingThemeToggleWc,\n registerVikingBadgeWc,\n registerVikingButtonWc,\n registerVikingCalloutWc,\n registerVikingCardWc,\n registerVikingInputWc,\n registerVikingModalWc,\n registerVikingSearchPaletteWc,\n registerVikingSelectWc,\n registerVikingSuiteSearchPaletteWc,\n registerVikingThemeToggleWc,\n registerVikingElements,\n type VikingSearchPaletteItem,\n type VikingWcTone,\n} from \"./web/index\";\n\n// Site-drakkar config + services (cross-surface).\nexport * from \"./lib/site-drakkar/site-drakkar.config\";\nexport * from \"./lib/site-drakkar/suite-search-items\";\n\n// Angular components\nexport * from \"./lib/site-drakkar/site-navbar\";\nexport * from \"./lib/site-drakkar/site-footer\";\nexport * from \"./lib/theme-toggle/theme-toggle\";\nexport * from \"./lib/app-header/app-header\";\nexport * from \"./lib/app-sidebar/app-sidebar\";\nexport * from \"./lib/accordion/accordion\";\nexport * from \"./lib/auth-panel/auth-panel\";\nexport * from \"./lib/autocomplete/autocomplete\";\nexport * from \"./lib/avatar/avatar\";\nexport * from \"./lib/badge/badge\";\nexport * from \"./lib/bar/bar\";\nexport * from \"./lib/brand/brand\";\nexport * from \"./lib/breadcrumbs/breadcrumbs\";\nexport * from \"./lib/button/button\";\nexport * from \"./lib/button/button-group\";\nexport * from \"./lib/calendar/calendar\";\nexport * from \"./lib/callout/callout\";\nexport * from \"./lib/card/card\";\nexport * from \"./lib/card/card-title\";\nexport * from \"./lib/carousel/carousel\";\nexport * from \"./lib/chart/chart\";\nexport * from \"./lib/chart/chart-zoom\";\nexport * from \"./lib/confirm-dialog/confirm-dialog\";\nexport * from \"./lib/confirm-dialog/dialog.service\";\nexport * from \"./lib/chart-card-header/chart-card-header\";\nexport * from \"./lib/icon-heading/icon-heading\";\nexport * from \"./lib/chart-empty-state/chart-empty-state\";\nexport * from \"./lib/chart-panel/chart-panel\";\nexport * from \"./lib/checkbox/checkbox\";\nexport * from \"./lib/color-picker/color-picker\";\nexport * from \"./lib/command/command\";\nexport * from \"./lib/composer/composer\";\nexport * from \"./lib/context/context\";\nexport * from \"./lib/date-picker/date-picker\";\nexport * from \"./lib/dropdown/dropdown\";\nexport * from \"./lib/empty-state/empty-state\";\nexport * from \"./lib/editor/editor\";\nexport * from \"./lib/fab/fab\";\nexport * from \"./lib/field/field\";\nexport * from \"./lib/footer/footer\";\nexport * from \"./lib/form-section/form-section\";\nexport * from \"./lib/file-upload/file-upload\";\nexport * from \"./lib/gauge-arc/gauge-arc\";\nexport * from \"./lib/hud-panel/hud-panel\";\nexport * from \"./lib/icon/icon\";\nexport * from \"./lib/icon-badge/icon-badge\";\nexport { VikingIconComponent } from \"./lib/icon/icon\";\nexport * from \"./lib/icon-text/icon-text\";\nexport * from \"./lib/input/input\";\nexport * from \"./lib/kanban/kanban\";\nexport * from \"./lib/kbd/kbd\";\nexport * from \"./lib/label/label\";\nexport * from \"./lib/loading-overlay/loading-overlay\";\nexport * from \"./lib/metric-card/metric-card\";\nexport * from \"./lib/menubar/menubar\";\nexport * from \"./lib/modal/modal\";\nexport * from \"./lib/native-select/native-select\";\nexport * from \"./lib/navigation-menu/navigation-menu\";\nexport type { VikingNavItem } from \"./lib/navigation-menu/navigation-menu\";\nexport * from \"./lib/navbar/navbar\";\nexport * from \"./lib/otp-input/otp-input\";\nexport * from \"./lib/verification-code-field/verification-code-field\";\nexport * from \"./lib/page-back-link/page-back-link\";\nexport * from \"./lib/page-header/page-header\";\nexport * from \"./lib/pagination/pagination\";\nexport * from \"./lib/pillbox/pillbox\";\nexport * from \"./lib/popover/popover\";\nexport * from \"./lib/profile/profile\";\nexport * from \"./lib/progress/progress\";\nexport * from \"./lib/radio/radio\";\nexport * from \"./lib/ring-gauge/ring-gauge\";\nexport * from \"./lib/search-palette/search-palette\";\nexport * from \"./lib/select/select\";\nexport * from \"./lib/separator/separator\";\nexport * from \"./lib/scroll-area/scroll-area\";\nexport * from \"./lib/sheet/sheet\";\nexport * from \"./lib/sidebar-nav/sidebar-nav\";\nexport * from \"./lib/skeleton/skeleton\";\nexport * from \"./lib/spinner/spinner\";\nexport * from \"./lib/status-metric-row/status-metric-row\";\nexport * from \"./lib/slider/slider\";\nexport * from \"./lib/switch/switch\";\nexport * from \"./lib/table/table\";\nexport * from \"./lib/tabs/tab\";\nexport * from \"./lib/tabs/tab-panel\";\nexport * from \"./lib/tabs/tabs\";\nexport * from \"./lib/textarea/textarea\";\nexport * from \"./lib/toggle/toggle\";\nexport * from \"./lib/toggle/toggle-group\";\nexport * from \"./lib/time-picker/time-picker\";\nexport * from \"./lib/timeline/timeline\";\nexport * from \"./lib/toast/toast\";\nexport * from \"./lib/uptime-bar/uptime-bar\";\nexport * from \"./lib/whitepaper-cta/whitepaper-cta\";\nexport * from \"./lib/wizard/wizard\";\nexport type { VikingUptimeStatus } from \"./lib/uptime-bar/uptime-bar\";\nexport * from \"./lib/tooltip/tooltip\";\nexport * from \"./lib/typography/heading\";\nexport * from \"./lib/typography/text\";\nexport * from \"./lib/suite-search-palette/suite-search-palette\";\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["LUCIDE_ICON_PATHS","VIKING_BRAND_ICON_PATHS","VIKING_DRAKKAR_ICON_PATHS","VIKING_BRAND_ICON_FILLED_PATHS","VIKING_DRAKKAR_ICON_FILLED_PATHS","VIKING_BRAND_ICON_NAMES_LIST","VIKING_DRAKKAR_ICON_NAMES_LIST","VIKING_INTEGRATION_BRAND_COLORS","VIKING_INTEGRATION_BRAND_NAMES","isIntegrationBrandIcon","VIKING_INTEGRATION_BRAND_PATHS","integrationBrandSvg","VIKING_INTEGRATION_BRAND_SVGS","VIKING_INTEGRATION_ICON_PATHS","VIKING_INTEGRATION_ICON_NAMES_LIST","VIKING_ICON_SIZE_PRESETS","VIKING_CUSTOM_ICON_PATHS","VIKING_ICON_PATHS","VIKING_ICON_FILLED_PATHS","MATERIAL_ICON_ALIASES","VIKING_FILLED_ICON_NAMES","VIKING_BRAND_ICON_NAMES","VIKING_ICON_COLOR_TOKENS","vikingIconViewBox","resolveVikingIconSize","resolveVikingIconColor","VIKING_ICON_PATH_KEYS","resolveVikingIcon","VIKING_ICON_NAMES","VIKING_LUCIDE_ICON_NAMES","TONES","VALID_CONTEXTS","detectContext","readUrls","readContext","TONE_ICONS","i1.VikingDialogService","i1.VikingTabs","i1.VikingToggleGroup"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"dataengineeringformachinelearning-viking-ui.mjs","sources":["../../src/core/lucide-paths.generated.ts","../../src/core/brand-icons.ts","../../src/core/integration-brand-icons.ts","../../src/core/icons.ts","../../src/lib/core/cva.ts","../../src/web/core/base.ts","../../src/web/core/dom.ts","../../src/lib/core/lucide-paths.generated.ts","../../src/lib/core/brand-icons.ts","../../src/lib/core/integration-brand-icons.ts","../../src/lib/core/icons.ts","../../src/web/core/icons-inline.ts","../../src/web/core/styles.ts","../../src/web/badge/viking-badge-wc.ts","../../src/web/button/viking-button-wc.ts","../../src/web/callout/viking-callout-wc.ts","../../src/web/card/viking-card-wc.ts","../../src/web/field/viking-field-wc.ts","../../src/web/input/viking-input-wc.ts","../../src/web/modal/viking-modal-wc.ts","../../src/web/search-palette/viking-search-palette-wc.ts","../../src/lib/site-drakkar/site-drakkar.config.ts","../../src/lib/site-drakkar/suite-search-items.ts","../../src/web/suite-search-palette/viking-suite-search-palette-wc.ts","../../src/web/theme-toggle/viking-theme-toggle-wc.ts","../../src/web/suite-header/viking-suite-header-wc.ts","../../src/web/select/viking-select-wc.ts","../../src/web/index.ts","../../src/lib/icon/icon.ts","../../src/lib/button/button.ts","../../src/lib/theme-toggle/theme-toggle.ts","../../src/lib/site-drakkar/site-navbar.ts","../../src/lib/footer/footer.ts","../../src/lib/site-drakkar/site-footer.ts","../../src/lib/app-header/app-header.ts","../../src/lib/app-sidebar/app-sidebar.ts","../../src/core/uid.ts","../../src/lib/accordion/accordion.ts","../../src/lib/separator/separator.ts","../../src/lib/auth-panel/auth-panel.ts","../../src/lib/autocomplete/autocomplete.ts","../../src/lib/avatar/avatar.ts","../../src/lib/badge/badge.ts","../../src/lib/bar/bar.ts","../../src/lib/brand/brand.ts","../../src/lib/breadcrumbs/breadcrumbs.ts","../../src/lib/button/button-group.ts","../../src/lib/calendar/calendar.ts","../../src/lib/callout/callout.ts","../../src/lib/skeleton/skeleton.ts","../../src/lib/card/card.ts","../../src/lib/icon-badge/icon-badge.ts","../../src/lib/typography/heading.ts","../../src/lib/card/card-title.ts","../../src/lib/carousel/carousel.ts","../../src/lib/chart/chart-zoom.ts","../../src/lib/chart/chart.ts","../../src/lib/field/field.ts","../../src/lib/spinner/spinner.ts","../../src/lib/input/input.ts","../../src/lib/modal/modal.ts","../../src/lib/typography/text.ts","../../src/lib/confirm-dialog/dialog.service.ts","../../src/lib/confirm-dialog/confirm-dialog.ts","../../src/lib/chart-card-header/chart-card-header.ts","../../src/lib/icon-heading/icon-heading.ts","../../src/lib/chart-empty-state/chart-empty-state.ts","../../src/lib/chart-panel/chart-panel.ts","../../src/lib/checkbox/checkbox.ts","../../src/tokens/series-presets.ts","../../src/lib/color-picker/color-picker.ts","../../src/lib/command/command.ts","../../src/lib/composer/composer.ts","../../src/lib/context/context.ts","../../src/lib/date-picker/date-picker.ts","../../src/lib/dropdown/dropdown.ts","../../src/lib/empty-state/empty-state.ts","../../src/lib/editor/editor.ts","../../src/lib/fab/fab.ts","../../src/lib/form-section/form-section.ts","../../src/lib/file-upload/file-upload.ts","../../src/lib/gauge-arc/gauge-arc.ts","../../src/lib/hud-panel/hud-panel.ts","../../src/lib/icon-text/icon-text.ts","../../src/lib/kanban/kanban.ts","../../src/lib/kbd/kbd.ts","../../src/lib/label/label.ts","../../src/lib/loading-overlay/loading-overlay.ts","../../src/lib/metric-card/metric-card.ts","../../src/lib/menubar/menubar.ts","../../src/lib/native-select/native-select.ts","../../src/lib/navigation-menu/navigation-menu.ts","../../src/lib/navbar/navbar.ts","../../src/lib/otp-input/otp-input.ts","../../src/lib/verification-code-field/verification-code-field.ts","../../src/lib/page-back-link/page-back-link.ts","../../src/lib/page-header/page-header.ts","../../src/lib/pagination/pagination.ts","../../src/lib/pillbox/pillbox.ts","../../src/lib/popover/popover.ts","../../src/lib/profile/profile.ts","../../src/lib/progress/progress.ts","../../src/lib/radio/radio.ts","../../src/lib/ring-gauge/ring-gauge.ts","../../src/lib/search-palette/search-palette.ts","../../src/lib/select/select.ts","../../src/lib/scroll-area/scroll-area.ts","../../src/lib/sheet/sheet.ts","../../src/lib/sidebar-nav/sidebar-nav.ts","../../src/lib/status-metric-row/status-metric-row.ts","../../src/lib/slider/slider.ts","../../src/lib/switch/switch.ts","../../src/lib/table/table.ts","../../src/lib/tabs/tabs.ts","../../src/lib/tabs/tab.ts","../../src/lib/tabs/tab-panel.ts","../../src/lib/textarea/textarea.ts","../../src/lib/toggle/toggle-group.ts","../../src/lib/toggle/toggle.ts","../../src/lib/time-picker/time-picker.ts","../../src/lib/timeline/timeline.ts","../../src/lib/toast/toast.ts","../../src/lib/uptime-bar/uptime-bar.ts","../../src/lib/whitepaper-cta/whitepaper-cta.ts","../../src/lib/wizard/wizard.ts","../../src/lib/tooltip/tooltip.ts","../../src/lib/suite-search-palette/suite-search-palette.ts","../../src/public-api.ts","../../src/dataengineeringformachinelearning-viking-ui.ts"],"sourcesContent":["/**\n * AUTO-GENERATED by scripts/sync_lucide_icons.mjs — do not edit by hand.\n * Lucide paths are inlined at build time; lucide is a devDependency only.\n * @see https://lucide.dev\n */\nexport const LUCIDE_ICON_PATHS = {\n \"alert-circle\":\n '<circle cx=\"12\" cy=\"12\" r=\"10\"/><line x1=\"12\" x2=\"12\" y1=\"8\" y2=\"12\"/><line x1=\"12\" x2=\"12.01\" y1=\"16\" y2=\"16\"/>',\n \"alert-triangle\":\n '<path d=\"m21.73 18-8-14a2 2 0 0 0-3.48 0l-8 14A2 2 0 0 0 4 21h16a2 2 0 0 0 1.73-3\"/><path d=\"M12 9v4\"/><path d=\"M12 17h.01\"/>',\n \"arrow-left\": '<path d=\"m12 19-7-7 7-7\"/><path d=\"M19 12H5\"/>',\n \"arrow-right\": '<path d=\"M5 12h14\"/><path d=\"m12 5 7 7-7 7\"/>',\n \"arrow-up-right\": '<path d=\"M7 7h10v10\"/><path d=\"M7 17 17 7\"/>',\n \"bar-chart\":\n '<path d=\"M3 3v16a2 2 0 0 0 2 2h16\"/><path d=\"M18 17V9\"/><path d=\"M13 17V5\"/><path d=\"M8 17v-3\"/>',\n bell: '<path d=\"M10.268 21a2 2 0 0 0 3.464 0\"/><path d=\"M3.262 15.326A1 1 0 0 0 4 17h16a1 1 0 0 0 .74-1.673C19.41 13.956 18 12.499 18 8A6 6 0 0 0 6 8c0 4.499-1.411 5.956-2.738 7.326\"/>',\n bold: '<path d=\"M6 12h9a4 4 0 0 1 0 8H7a1 1 0 0 1-1-1V5a1 1 0 0 1 1-1h7a4 4 0 0 1 0 8\"/>',\n bolt: '<path d=\"M4 14a1 1 0 0 1-.78-1.63l9.9-10.2a.5.5 0 0 1 .86.46l-1.92 6.02A1 1 0 0 0 13 10h7a1 1 0 0 1 .78 1.63l-9.9 10.2a.5.5 0 0 1-.86-.46l1.92-6.02A1 1 0 0 0 11 14z\"/>',\n brain:\n '<path d=\"M12 18V5\"/><path d=\"M15 13a4.17 4.17 0 0 1-3-4 4.17 4.17 0 0 1-3 4\"/><path d=\"M17.598 6.5A3 3 0 1 0 12 5a3 3 0 1 0-5.598 1.5\"/><path d=\"M17.997 5.125a4 4 0 0 1 2.526 5.77\"/><path d=\"M18 18a4 4 0 0 0 2-7.464\"/><path d=\"M19.967 17.483A4 4 0 1 1 12 18a4 4 0 1 1-7.967-.517\"/><path d=\"M6 18a4 4 0 0 1-2-7.464\"/><path d=\"M6.003 5.125a4 4 0 0 0-2.526 5.77\"/>',\n bug: '<path d=\"M12 20v-9\"/><path d=\"M14 7a4 4 0 0 1 4 4v3a6 6 0 0 1-12 0v-3a4 4 0 0 1 4-4z\"/><path d=\"M14.12 3.88 16 2\"/><path d=\"M21 21a4 4 0 0 0-3.81-4\"/><path d=\"M21 5a4 4 0 0 1-3.55 3.97\"/><path d=\"M22 13h-4\"/><path d=\"M3 21a4 4 0 0 1 3.81-4\"/><path d=\"M3 5a4 4 0 0 0 3.55 3.97\"/><path d=\"M6 13H2\"/><path d=\"m8 2 1.88 1.88\"/><path d=\"M9 7.13V6a3 3 0 1 1 6 0v1.13\"/>',\n building:\n '<path d=\"M12 10h.01\"/><path d=\"M12 14h.01\"/><path d=\"M12 6h.01\"/><path d=\"M16 10h.01\"/><path d=\"M16 14h.01\"/><path d=\"M16 6h.01\"/><path d=\"M8 10h.01\"/><path d=\"M8 14h.01\"/><path d=\"M8 6h.01\"/><path d=\"M9 22v-3a1 1 0 0 1 1-1h4a1 1 0 0 1 1 1v3\"/><rect x=\"4\" y=\"2\" width=\"16\" height=\"20\" rx=\"2\"/>',\n calendar:\n '<path d=\"M8 2v4\"/><path d=\"M16 2v4\"/><rect width=\"18\" height=\"18\" x=\"3\" y=\"4\" rx=\"2\"/><path d=\"M3 10h18\"/>',\n check: '<path d=\"M20 6 9 17l-5-5\"/>',\n \"check-circle\": '<circle cx=\"12\" cy=\"12\" r=\"10\"/><path d=\"m9 12 2 2 4-4\"/>',\n \"chevron-down\": '<path d=\"m6 9 6 6 6-6\"/>',\n \"chevron-left\": '<path d=\"m15 18-6-6 6-6\"/>',\n \"chevron-right\": '<path d=\"m9 18 6-6-6-6\"/>',\n \"chevron-up\": '<path d=\"m18 15-6-6-6 6\"/>',\n chip: '<path d=\"M12 20v2\"/><path d=\"M12 2v2\"/><path d=\"M17 20v2\"/><path d=\"M17 2v2\"/><path d=\"M2 12h2\"/><path d=\"M2 17h2\"/><path d=\"M2 7h2\"/><path d=\"M20 12h2\"/><path d=\"M20 17h2\"/><path d=\"M20 7h2\"/><path d=\"M7 20v2\"/><path d=\"M7 2v2\"/><rect x=\"4\" y=\"4\" width=\"16\" height=\"16\" rx=\"2\"/><rect x=\"8\" y=\"8\" width=\"8\" height=\"8\" rx=\"1\"/>',\n clock: '<circle cx=\"12\" cy=\"12\" r=\"10\"/><path d=\"M12 6v6l4 2\"/>',\n cloud: '<path d=\"M17.5 19H9a7 7 0 1 1 6.71-9h1.79a4.5 4.5 0 1 1 0 9Z\"/>',\n cookie:\n '<path d=\"M12 2a10 10 0 1 0 10 10 4 4 0 0 1-5-5 4 4 0 0 1-5-5\"/><path d=\"M8.5 8.5v.01\"/><path d=\"M16 15.5v.01\"/><path d=\"M12 12v.01\"/><path d=\"M11 17v.01\"/><path d=\"M7 14v.01\"/>',\n copy: '<rect width=\"14\" height=\"14\" x=\"8\" y=\"8\" rx=\"2\" ry=\"2\"/><path d=\"M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2\"/>',\n \"dots-horizontal\":\n '<circle cx=\"12\" cy=\"12\" r=\"1\" fill=\"currentColor\" stroke=\"none\"/><circle cx=\"19\" cy=\"12\" r=\"1\" fill=\"currentColor\" stroke=\"none\"/><circle cx=\"5\" cy=\"12\" r=\"1\" fill=\"currentColor\" stroke=\"none\"/>',\n \"dots-vertical\":\n '<circle cx=\"12\" cy=\"12\" r=\"1\" fill=\"currentColor\" stroke=\"none\"/><circle cx=\"12\" cy=\"5\" r=\"1\" fill=\"currentColor\" stroke=\"none\"/><circle cx=\"12\" cy=\"19\" r=\"1\" fill=\"currentColor\" stroke=\"none\"/>',\n download:\n '<path d=\"M12 15V3\"/><path d=\"M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4\"/><path d=\"m7 10 5 5 5-5\"/>',\n external:\n '<path d=\"M15 3h6v6\"/><path d=\"M10 14 21 3\"/><path d=\"M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6\"/>',\n eye: '<path d=\"M2.062 12.348a1 1 0 0 1 0-.696 10.75 10.75 0 0 1 19.876 0 1 1 0 0 1 0 .696 10.75 10.75 0 0 1-19.876 0\"/><circle cx=\"12\" cy=\"12\" r=\"3\"/>',\n \"eye-off\":\n '<path d=\"M10.733 5.076a10.744 10.744 0 0 1 11.205 6.575 1 1 0 0 1 0 .696 10.747 10.747 0 0 1-1.444 2.49\"/><path d=\"M14.084 14.158a3 3 0 0 1-4.242-4.242\"/><path d=\"M17.479 17.499a10.75 10.75 0 0 1-15.417-5.151 1 1 0 0 1 0-.696 10.75 10.75 0 0 1 4.446-5.143\"/><path d=\"m2 2 20 20\"/>',\n file: '<path d=\"M6 22a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h8a2.4 2.4 0 0 1 1.704.706l3.588 3.588A2.4 2.4 0 0 1 20 8v12a2 2 0 0 1-2 2z\"/><path d=\"M14 2v5a1 1 0 0 0 1 1h5\"/>',\n filter:\n '<path d=\"M10 20a1 1 0 0 0 .553.895l2 1A1 1 0 0 0 14 21v-7a2 2 0 0 1 .517-1.341L21.74 4.67A1 1 0 0 0 21 3H3a1 1 0 0 0-.742 1.67l7.225 7.989A2 2 0 0 1 10 14z\"/>',\n fingerprint:\n '<path d=\"M12 10a2 2 0 0 0-2 2c0 1.02-.1 2.51-.26 4\"/><path d=\"M14 13.12c0 2.38 0 6.38-1 8.88\"/><path d=\"M17.29 21.02c.12-.6.43-2.3.5-3.02\"/><path d=\"M2 12a10 10 0 0 1 18-6\"/><path d=\"M2 16h.01\"/><path d=\"M21.8 16c.2-2 .131-5.354 0-6\"/><path d=\"M5 19.5C5.5 18 6 15 6 12a6 6 0 0 1 .34-2\"/><path d=\"M8.65 22c.21-.66.45-1.32.57-2\"/><path d=\"M9 6.8a6 6 0 0 1 9 5.2v2\"/>',\n folder:\n '<path d=\"M20 20a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2h-7.9a2 2 0 0 1-1.69-.9L9.6 3.9A2 2 0 0 0 7.93 3H4a2 2 0 0 0-2 2v13a2 2 0 0 0 2 2Z\"/>',\n globe:\n '<circle cx=\"12\" cy=\"12\" r=\"10\"/><path d=\"M12 2a14.5 14.5 0 0 0 0 20 14.5 14.5 0 0 0 0-20\"/><path d=\"M2 12h20\"/>',\n \"grip-vertical\":\n '<circle cx=\"9\" cy=\"12\" r=\"1\" fill=\"currentColor\" stroke=\"none\"/><circle cx=\"9\" cy=\"5\" r=\"1\" fill=\"currentColor\" stroke=\"none\"/><circle cx=\"9\" cy=\"19\" r=\"1\" fill=\"currentColor\" stroke=\"none\"/><circle cx=\"15\" cy=\"12\" r=\"1\" fill=\"currentColor\" stroke=\"none\"/><circle cx=\"15\" cy=\"5\" r=\"1\" fill=\"currentColor\" stroke=\"none\"/><circle cx=\"15\" cy=\"19\" r=\"1\" fill=\"currentColor\" stroke=\"none\"/>',\n heart:\n '<path d=\"M2 9.5a5.5 5.5 0 0 1 9.591-3.676.56.56 0 0 0 .818 0A5.49 5.49 0 0 1 22 9.5c0 2.29-1.5 4-3 5.5l-5.492 5.313a2 2 0 0 1-3 .019L5 15c-1.5-1.5-3-3.2-3-5.5\"/>',\n home: '<path d=\"M15 21v-8a1 1 0 0 0-1-1h-4a1 1 0 0 0-1 1v8\"/><path d=\"M3 10a2 2 0 0 1 .709-1.528l7-6a2 2 0 0 1 2.582 0l7 6A2 2 0 0 1 21 10v9a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2z\"/>',\n image:\n '<rect width=\"18\" height=\"18\" x=\"3\" y=\"3\" rx=\"2\" ry=\"2\"/><circle cx=\"9\" cy=\"9\" r=\"2\"/><path d=\"m21 15-3.086-3.086a2 2 0 0 0-2.828 0L6 21\"/>',\n info: '<circle cx=\"12\" cy=\"12\" r=\"10\"/><path d=\"M12 16v-4\"/><path d=\"M12 8h.01\"/>',\n insights: '<path d=\"M3 3v16a2 2 0 0 0 2 2h16\"/><path d=\"m19 9-5 5-4-4-3 3\"/>',\n italic:\n '<line x1=\"19\" x2=\"10\" y1=\"4\" y2=\"4\"/><line x1=\"14\" x2=\"5\" y1=\"20\" y2=\"20\"/><line x1=\"15\" x2=\"9\" y1=\"4\" y2=\"20\"/>',\n key: '<path d=\"M2.586 17.414A2 2 0 0 0 2 18.828V21a1 1 0 0 0 1 1h3a1 1 0 0 0 1-1v-1a1 1 0 0 1 1-1h1a1 1 0 0 0 1-1v-1a1 1 0 0 1 1-1h.172a2 2 0 0 0 1.414-.586l.814-.814a6.5 6.5 0 1 0-4-4z\"/><circle cx=\"16.5\" cy=\"7.5\" r=\".5\" fill=\"currentColor\"/>',\n link: '<path d=\"M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71\"/><path d=\"M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71\"/>',\n list: '<path d=\"M3 5h.01\"/><path d=\"M3 12h.01\"/><path d=\"M3 19h.01\"/><path d=\"M8 5h13\"/><path d=\"M8 12h13\"/><path d=\"M8 19h13\"/>',\n \"list-ordered\":\n '<path d=\"M11 5h10\"/><path d=\"M11 12h10\"/><path d=\"M11 19h10\"/><path d=\"M4 4h1v5\"/><path d=\"M4 9h2\"/><path d=\"M6.5 20H3.4c0-1 2.6-1.925 2.6-3.5a1.5 1.5 0 0 0-2.6-1.02\"/>',\n loader: '<path d=\"M21 12a9 9 0 1 1-6.219-8.56\"/>',\n lock: '<rect width=\"18\" height=\"11\" x=\"3\" y=\"11\" rx=\"2\" ry=\"2\"/><path d=\"M7 11V7a5 5 0 0 1 10 0v4\"/>',\n \"log-in\":\n '<path d=\"m10 17 5-5-5-5\"/><path d=\"M15 12H3\"/><path d=\"M15 3h4a2 2 0 0 1 2 2v14a2 2 0 0 1-2 2h-4\"/>',\n \"log-out\":\n '<path d=\"m16 17 5-5-5-5\"/><path d=\"M21 12H9\"/><path d=\"M9 21H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h4\"/>',\n mail: '<path d=\"m22 7-8.991 5.727a2 2 0 0 1-2.009 0L2 7\"/><rect x=\"2\" y=\"4\" width=\"20\" height=\"16\" rx=\"2\"/>',\n menu: '<path d=\"M4 5h16\"/><path d=\"M4 12h16\"/><path d=\"M4 19h16\"/>',\n minus: '<path d=\"M5 12h14\"/>',\n moon: '<path d=\"M20.985 12.486a9 9 0 1 1-9.473-9.472c.405-.022.617.46.402.803a6 6 0 0 0 8.268 8.268c.344-.215.825-.004.803.401\"/>',\n network:\n '<rect x=\"16\" y=\"16\" width=\"6\" height=\"6\" rx=\"1\"/><rect x=\"2\" y=\"16\" width=\"6\" height=\"6\" rx=\"1\"/><rect x=\"9\" y=\"2\" width=\"6\" height=\"6\" rx=\"1\"/><path d=\"M5 16v-3a1 1 0 0 1 1-1h12a1 1 0 0 1 1 1v3\"/><path d=\"M12 12V8\"/>',\n paperclip:\n '<path d=\"m16 6-8.414 8.586a2 2 0 0 0 2.829 2.829l8.414-8.586a4 4 0 1 0-5.657-5.657l-8.379 8.551a6 6 0 1 0 8.485 8.485l8.379-8.551\"/>',\n pencil:\n '<path d=\"M21.174 6.812a1 1 0 0 0-3.986-3.987L3.842 16.174a2 2 0 0 0-.5.83l-1.321 4.352a.5.5 0 0 0 .623.622l4.353-1.32a2 2 0 0 0 .83-.497z\"/><path d=\"m15 5 4 4\"/>',\n phone:\n '<path d=\"M13.832 16.568a1 1 0 0 0 1.213-.303l.355-.465A2 2 0 0 1 17 15h3a2 2 0 0 1 2 2v3a2 2 0 0 1-2 2A18 18 0 0 1 2 4a2 2 0 0 1 2-2h3a2 2 0 0 1 2 2v3a2 2 0 0 1-.8 1.6l-.468.351a1 1 0 0 0-.292 1.233 14 14 0 0 0 6.392 6.384\"/>',\n play: '<path d=\"M5 5a2 2 0 0 1 3.008-1.728l11.997 6.998a2 2 0 0 1 .003 3.458l-12 7A2 2 0 0 1 5 19z\" fill=\"currentColor\" stroke=\"none\"/>',\n plus: '<path d=\"M5 12h14\"/><path d=\"M12 5v14\"/>',\n policy:\n '<path d=\"M20 13c0 5-3.5 7.5-7.66 8.95a1 1 0 0 1-.67-.01C7.5 20.5 4 18 4 13V6a1 1 0 0 1 1-1c2 0 4.5-1.2 6.24-2.72a1.17 1.17 0 0 1 1.52 0C14.51 3.81 17 5 19 5a1 1 0 0 1 1 1z\"/><path d=\"m9 12 2 2 4-4\"/>',\n refresh:\n '<path d=\"M3 12a9 9 0 0 1 9-9 9.75 9.75 0 0 1 6.74 2.74L21 8\"/><path d=\"M21 3v5h-5\"/><path d=\"M21 12a9 9 0 0 1-9 9 9.75 9.75 0 0 1-6.74-2.74L3 16\"/><path d=\"M8 16H3v5\"/>',\n rocket:\n '<path d=\"M12 15v5s3.03-.55 4-2c1.08-1.62 0-5 0-5\"/><path d=\"M4.5 16.5c-1.5 1.26-2 5-2 5s3.74-.5 5-2c.71-.84.7-2.13-.09-2.91a2.18 2.18 0 0 0-2.91-.09\"/><path d=\"M9 12a22 22 0 0 1 2-3.95A12.88 12.88 0 0 1 22 2c0 2.72-.78 7.5-6 11a22.4 22.4 0 0 1-4 2z\"/><path d=\"M9 12H4s.55-3.03 2-4c1.62-1.08 5 .05 5 .05\"/>',\n search: '<path d=\"m21 21-4.34-4.34\"/><circle cx=\"11\" cy=\"11\" r=\"8\"/>',\n \"search-off\":\n '<path d=\"m13.5 8.5-5 5\"/><path d=\"m8.5 8.5 5 5\"/><circle cx=\"11\" cy=\"11\" r=\"8\"/><path d=\"m21 21-4.3-4.3\"/>',\n send: '<path d=\"M14.536 21.686a.5.5 0 0 0 .937-.024l6.5-19a.496.496 0 0 0-.635-.635l-19 6.5a.5.5 0 0 0-.024.937l7.93 3.18a2 2 0 0 1 1.112 1.11z\"/><path d=\"m21.854 2.147-10.94 10.939\"/>',\n server:\n '<rect width=\"20\" height=\"8\" x=\"2\" y=\"2\" rx=\"2\" ry=\"2\"/><rect width=\"20\" height=\"8\" x=\"2\" y=\"14\" rx=\"2\" ry=\"2\"/><line x1=\"6\" x2=\"6.01\" y1=\"6\" y2=\"6\"/><line x1=\"6\" x2=\"6.01\" y1=\"18\" y2=\"18\"/>',\n settings:\n '<path d=\"M9.671 4.136a2.34 2.34 0 0 1 4.659 0 2.34 2.34 0 0 0 3.319 1.915 2.34 2.34 0 0 1 2.33 4.033 2.34 2.34 0 0 0 0 3.831 2.34 2.34 0 0 1-2.33 4.033 2.34 2.34 0 0 0-3.319 1.915 2.34 2.34 0 0 1-4.659 0 2.34 2.34 0 0 0-3.32-1.915 2.34 2.34 0 0 1-2.33-4.033 2.34 2.34 0 0 0 0-3.831A2.34 2.34 0 0 1 6.35 6.051a2.34 2.34 0 0 0 3.319-1.915\"/><circle cx=\"12\" cy=\"12\" r=\"3\"/>',\n shield:\n '<path d=\"M20 13c0 5-3.5 7.5-7.66 8.95a1 1 0 0 1-.67-.01C7.5 20.5 4 18 4 13V6a1 1 0 0 1 1-1c2 0 4.5-1.2 6.24-2.72a1.17 1.17 0 0 1 1.52 0C14.51 3.81 17 5 19 5a1 1 0 0 1 1 1z\"/>',\n ship: '<path d=\"M12 10.189V14\"/><path d=\"M12 2v3\"/><path d=\"M19 13V7a2 2 0 0 0-2-2H7a2 2 0 0 0-2 2v6\"/><path d=\"M19.38 20A11.6 11.6 0 0 0 21 14l-8.188-3.639a2 2 0 0 0-1.624 0L3 14a11.6 11.6 0 0 0 2.81 7.76\"/><path d=\"M2 21c.6.5 1.2 1 2.5 1 2.5 0 2.5-2 5-2 1.3 0 1.9.5 2.5 1s1.2 1 2.5 1c2.5 0 2.5-2 5-2 1.3 0 1.9.5 2.5 1\"/>',\n sparkle:\n '<path d=\"M11.017 2.814a1 1 0 0 1 1.966 0l1.051 5.558a2 2 0 0 0 1.594 1.594l5.558 1.051a1 1 0 0 1 0 1.966l-5.558 1.051a2 2 0 0 0-1.594 1.594l-1.051 5.558a1 1 0 0 1-1.966 0l-1.051-5.558a2 2 0 0 0-1.594-1.594l-5.558-1.051a1 1 0 0 1 0-1.966l5.558-1.051a2 2 0 0 0 1.594-1.594z\"/><path d=\"M20 2v4\"/><path d=\"M22 4h-4\"/><circle cx=\"4\" cy=\"20\" r=\"2\"/>',\n speed: '<path d=\"m12 14 4-4\"/><path d=\"M3.34 19a10 10 0 1 1 17.32 0\"/>',\n star: '<path d=\"M11.525 2.295a.53.53 0 0 1 .95 0l2.31 4.679a2.123 2.123 0 0 0 1.595 1.16l5.166.756a.53.53 0 0 1 .294.904l-3.736 3.638a2.123 2.123 0 0 0-.611 1.878l.882 5.14a.53.53 0 0 1-.771.56l-4.618-2.428a2.122 2.122 0 0 0-1.973 0L6.396 21.01a.53.53 0 0 1-.77-.56l.881-5.139a2.122 2.122 0 0 0-.611-1.879L2.16 9.795a.53.53 0 0 1 .294-.906l5.165-.755a2.122 2.122 0 0 0 1.597-1.16z\"/>',\n sun: '<circle cx=\"12\" cy=\"12\" r=\"4\"/><path d=\"M12 2v2\"/><path d=\"M12 20v2\"/><path d=\"m4.93 4.93 1.41 1.41\"/><path d=\"m17.66 17.66 1.41 1.41\"/><path d=\"M2 12h2\"/><path d=\"M20 12h2\"/><path d=\"m6.34 17.66-1.41 1.41\"/><path d=\"m19.07 4.93-1.41 1.41\"/>',\n terminal: '<path d=\"M12 19h8\"/><path d=\"m4 17 6-6-6-6\"/>',\n trash:\n '<path d=\"M10 11v6\"/><path d=\"M14 11v6\"/><path d=\"M19 6v14a2 2 0 0 1-2 2H7a2 2 0 0 1-2-2V6\"/><path d=\"M3 6h18\"/><path d=\"M8 6V4a2 2 0 0 1 2-2h4a2 2 0 0 1 2 2v2\"/>',\n \"trending-up\": '<path d=\"M16 7h6v6\"/><path d=\"m22 7-8.5 8.5-5-5L2 17\"/>',\n underline:\n '<path d=\"M6 4v6a6 6 0 0 0 12 0V4\"/><line x1=\"4\" x2=\"20\" y1=\"20\" y2=\"20\"/>',\n upload:\n '<path d=\"M12 3v12\"/><path d=\"m17 8-5-5-5 5\"/><path d=\"M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4\"/>',\n user: '<path d=\"M19 21v-2a4 4 0 0 0-4-4H9a4 4 0 0 0-4 4v2\"/><circle cx=\"12\" cy=\"7\" r=\"4\"/>',\n \"user-shield\":\n '<path d=\"M20 13c0 5-3.5 7.5-7.66 8.95a1 1 0 0 1-.67-.01C7.5 20.5 4 18 4 13V6a1 1 0 0 1 1-1c2 0 4.5-1.2 6.24-2.72a1.17 1.17 0 0 1 1.52 0C14.51 3.81 17 5 19 5a1 1 0 0 1 1 1z\"/><path d=\"M6.376 18.91a6 6 0 0 1 11.249.003\"/><circle cx=\"12\" cy=\"11\" r=\"4\"/>',\n x: '<path d=\"M18 6 6 18\"/><path d=\"m6 6 12 12\"/>',\n} as const;\n\nexport type LucideIconName = keyof typeof LUCIDE_ICON_PATHS;\n","/**\n * DEML branded icon paths — optimized SVG geometry (not sourced from Lucide).\n * Use via viking-icon name=\"deml\" | \"deml-compact\" | \"deml-lockup\".\n */\nexport const VIKING_BRAND_ICON_PATHS = {\n /** Primary bar-chart mark in rounded frame (outline). */\n deml: '<rect x=\"3\" y=\"3\" width=\"18\" height=\"18\" rx=\"2\"/><path d=\"M8 17V13M12 17V8M16 17V11\"/>',\n /** Compact monogram for favicons and dense Drakkar shell. */\n \"deml-compact\":\n '<rect x=\"4\" y=\"4\" width=\"16\" height=\"16\" rx=\"3\"/><path d=\"M9 16V12M12 16V9M15 16V13\"/>',\n /** Lockup mark with baseline accent bar. */\n \"deml-lockup\":\n '<rect x=\"3\" y=\"3\" width=\"18\" height=\"14\" rx=\"2\"/><path d=\"M8 17V13M12 17V8M16 17V11\"/><path d=\"M3 20h18\"/>',\n} as const;\n\n/** Drakkar — Viking-UI / site shell brand marks (Lucide ship, build-time inlined). */\nexport const VIKING_DRAKKAR_ICON_PATHS = {\n /** Primary Drakkar longship mark (outline). */\n drakkar:\n '<path d=\"M12 10.189V14\"/><path d=\"M12 2v3\"/><path d=\"M19 13V7a2 2 0 0 0-2-2H7a2 2 0 0 0-2 2v6\"/><path d=\"M19.38 20A11.6 11.6 0 0 0 21 14l-8.188-3.639a2 2 0 0 0-1.624 0L3 14a11.6 11.6 0 0 0 2.81 7.76\"/><path d=\"M2 21c.6.5 1.2 1 2.5 1 2.5 0 2.5-2 5-2 1.3 0 1.9.5 2.5 1s1.2 1 2.5 1c2.5 0 2.5-2 5-2 1.3 0 1.9.5 2.5 1\"/>',\n /** Compact tile for favicons and dense navbar chrome. */\n \"drakkar-compact\":\n '<rect x=\"3\" y=\"3\" width=\"18\" height=\"18\" rx=\"2\"/><path d=\"M12 10.189V14\"/><path d=\"M12 2v3\"/><path d=\"M19 13V7a2 2 0 0 0-2-2H7a2 2 0 0 0-2 2v6\"/><path d=\"M19.38 20A11.6 11.6 0 0 0 21 14l-8.188-3.639a2 2 0 0 0-1.624 0L3 14a11.6 11.6 0 0 0 2.81 7.76\"/><path d=\"M2 21c.6.5 1.2 1 2.5 1 2.5 0 2.5-2 5-2 1.3 0 1.9.5 2.5 1s1.2 1 2.5 1c2.5 0 2.5-2 5-2 1.3 0 1.9.5 2.5 1\"/>',\n /** Lockup mark with baseline accent bar. */\n \"drakkar-lockup\":\n '<path d=\"M12 10.189V14\"/><path d=\"M12 2v3\"/><path d=\"M19 13V7a2 2 0 0 0-2-2H7a2 2 0 0 0-2 2v6\"/><path d=\"M19.38 20A11.6 11.6 0 0 0 21 14l-8.188-3.639a2 2 0 0 0-1.624 0L3 14a11.6 11.6 0 0 0 2.81 7.76\"/><path d=\"M2 21c.6.5 1.2 1 2.5 1 2.5 0 2.5-2 5-2 1.3 0 1.9.5 2.5 1s1.2 1 2.5 1c2.5 0 2.5-2 5-2 1.3 0 1.9.5 2.5 1\"/><path d=\"M3 21h18\"/>',\n} as const;\n\n/** Filled-path overrides for DEML brand marks. */\nexport const VIKING_BRAND_ICON_FILLED_PATHS: Partial<\n Record<keyof typeof VIKING_BRAND_ICON_PATHS, string>\n> = {\n deml: '<path d=\"M5 4a1 1 0 0 1 1-1h12a1 1 0 0 1 1 1v14a1 1 0 0 1-1 1H6a1 1 0 0 1-1-1V4zM8 13h2.5v4H8v-4zM12 8h2.5v9H12V8zM16 11h2.5v6H16v-6z\"/>',\n \"deml-compact\":\n '<path d=\"M6 5a1 1 0 0 1 1-1h10a1 1 0 0 1 1 1v12a1 1 0 0 1-1 1H7a1 1 0 0 1-1-1V5zM9 12h1.5v4H9v-4zM12 9h1.5v7H12V9zM15 11h1.5v5H15v-5z\"/>',\n \"deml-lockup\":\n '<path d=\"M4 4a1 1 0 0 1 1-1h14a1 1 0 0 1 1 1v11a1 1 0 0 1-1 1H5a1 1 0 0 1-1-1V4zM8 13h2.5v4H8v-4zM12 8h2.5v9H12V8zM16 11h2.5v6H16v-6z\"/><rect x=\"3\" y=\"19\" width=\"18\" height=\"2\" rx=\"1\"/>',\n};\n\n/** Filled-path overrides for Drakkar brand marks. */\nexport const VIKING_DRAKKAR_ICON_FILLED_PATHS: Partial<\n Record<keyof typeof VIKING_DRAKKAR_ICON_PATHS, string>\n> = {\n drakkar:\n '<path d=\"M7 5h10a2 2 0 0 1 2 2v3.5L20.8 14.2l-7.8-3.5a1.8 1.8 0 0 0-1.4 0L3.2 14.2a10.5 10.5 0 0 0 2.6 7.2L5.2 13V7a2 2 0 0 0-2-2z\"/><rect x=\"10.85\" y=\"2\" width=\"2.3\" height=\"12\" rx=\"0.4\"/>',\n \"drakkar-compact\":\n '<path d=\"M3 3h18a2 2 0 0 1 2 2v18a2 2 0 0 1-2 2H3a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2z\"/><path d=\"M7.5 12.5 12 9.8l4.5 2.7v2.2c0 .8-.5 1.4-1.2 1.7L12 17.8l-3.3-1.6c-.7-.3-1.2-.9-1.2-1.7v-2.2z\"/><rect x=\"11\" y=\"6\" width=\"2\" height=\"5.5\" rx=\"0.35\"/>',\n \"drakkar-lockup\":\n '<path d=\"M7 5h10a2 2 0 0 1 2 2v3.5L20.8 14.2l-7.8-3.5a1.8 1.8 0 0 0-1.4 0L3.2 14.2a10.5 10.5 0 0 0 2.6 7.2L5.2 13V7a2 2 0 0 0-2-2z\"/><rect x=\"10.85\" y=\"2\" width=\"2.3\" height=\"12\" rx=\"0.4\"/><rect x=\"3\" y=\"20\" width=\"18\" height=\"2\" rx=\"1\"/>',\n};\n\nexport type VikingBrandIconName = keyof typeof VIKING_BRAND_ICON_PATHS;\n\nexport type VikingDrakkarIconName = keyof typeof VIKING_DRAKKAR_ICON_PATHS;\n\nexport const VIKING_BRAND_ICON_NAMES_LIST = Object.keys(\n VIKING_BRAND_ICON_PATHS,\n) as VikingBrandIconName[];\n\nexport const VIKING_DRAKKAR_ICON_NAMES_LIST = Object.keys(\n VIKING_DRAKKAR_ICON_PATHS,\n) as VikingDrakkarIconName[];\n","/** Official platform brand colors — exception for recognizable integration marks (same policy as Google/Apple in viking-icon). */\nexport const VIKING_INTEGRATION_BRAND_COLORS = {\n kubernetes: \"#326CE5\",\n tensorflow: \"#FF6F00\",\n pytorch: \"#EE4C2C\",\n \"apache-spark\": \"#E25A1C\",\n databricks: \"#FF3621\",\n \"aws-redshift\": \"#8C4FFF\",\n} as const;\n\nexport type VikingIntegrationBrandName =\n keyof typeof VIKING_INTEGRATION_BRAND_COLORS;\n\nexport const VIKING_INTEGRATION_BRAND_NAMES = Object.keys(\n VIKING_INTEGRATION_BRAND_COLORS,\n) as VikingIntegrationBrandName[];\n\nexport const isIntegrationBrandIcon = (\n name: string,\n): name is VikingIntegrationBrandName =>\n (VIKING_INTEGRATION_BRAND_NAMES as readonly string[]).includes(name);\n\n/**\n * Official product logo paths (24×24 viewBox) sourced from Simple Icons (CC0).\n * Inlined at build time — no runtime icon font or CDN.\n */\nconst VIKING_INTEGRATION_BRAND_PATHS: Record<\n VikingIntegrationBrandName,\n string\n> = {\n kubernetes:\n \"M10.204 14.35l.007.01-.999 2.413a5.171 5.171 0 0 1-2.075-2.597l2.578-.437.004.005a.44.44 0 0 1 .484.606zm-.833-2.129a.44.44 0 0 0 .173-.756l.002-.011L7.585 9.7a5.143 5.143 0 0 0-.73 3.255l2.514-.725.002-.009zm1.145-1.98a.44.44 0 0 0 .699-.337l.01-.005.15-2.62a5.144 5.144 0 0 0-3.01 1.442l2.147 1.523.004-.002zm.76 2.75l.723.349.722-.347.18-.78-.5-.623h-.804l-.5.623.179.779zm1.5-3.095a.44.44 0 0 0 .7.336l.008.003 2.134-1.513a5.188 5.188 0 0 0-2.992-1.442l.148 2.615.002.001zm10.876 5.97l-5.773 7.181a1.6 1.6 0 0 1-1.248.594l-9.261.003a1.6 1.6 0 0 1-1.247-.596l-5.776-7.18a1.583 1.583 0 0 1-.307-1.34L2.1 5.573c.108-.47.425-.864.863-1.073L11.305.513a1.606 1.606 0 0 1 1.385 0l8.345 3.985c.438.209.755.604.863 1.073l2.062 8.955c.108.47-.005.963-.308 1.34zm-3.289-2.057c-.042-.01-.103-.026-.145-.034-.174-.033-.315-.025-.479-.038-.35-.037-.638-.067-.895-.148-.105-.04-.18-.165-.216-.216l-.201-.059a6.45 6.45 0 0 0-.105-2.332 6.465 6.465 0 0 0-.936-2.163c.052-.047.15-.133.177-.159.008-.09.001-.183.094-.282.197-.185.444-.338.743-.522.142-.084.273-.137.415-.242.032-.024.076-.062.11-.089.24-.191.295-.52.123-.736-.172-.216-.506-.236-.745-.045-.034.027-.08.062-.111.088-.134.116-.217.23-.33.35-.246.25-.45.458-.673.609-.097.056-.239.037-.303.033l-.19.135a6.545 6.545 0 0 0-4.146-2.003l-.012-.223c-.065-.062-.143-.115-.163-.25-.022-.268.015-.557.057-.905.023-.163.061-.298.068-.475.001-.04-.001-.099-.001-.142 0-.306-.224-.555-.5-.555-.275 0-.499.249-.499.555l.001.014c0 .041-.002.092 0 .128.006.177.044.312.067.475.042.348.078.637.056.906a.545.545 0 0 1-.162.258l-.012.211a6.424 6.424 0 0 0-4.166 2.003 8.373 8.373 0 0 1-.18-.128c-.09.012-.18.04-.297-.029-.223-.15-.427-.358-.673-.608-.113-.12-.195-.234-.329-.349-.03-.026-.077-.062-.111-.088a.594.594 0 0 0-.348-.132.481.481 0 0 0-.398.176c-.172.216-.117.546.123.737l.007.005.104.083c.142.105.272.159.414.242.299.185.546.338.743.522.076.082.09.226.1.288l.16.143a6.462 6.462 0 0 0-1.02 4.506l-.208.06c-.055.072-.133.184-.215.217-.257.081-.546.11-.895.147-.164.014-.305.006-.48.039-.037.007-.09.02-.133.03l-.004.002-.007.002c-.295.071-.484.342-.423.608.061.267.349.429.645.365l.007-.001.01-.003.129-.029c.17-.046.294-.113.448-.172.33-.118.604-.217.87-.256.112-.009.23.069.288.101l.217-.037a6.5 6.5 0 0 0 2.88 3.596l-.09.218c.033.084.069.199.044.282-.097.252-.263.517-.452.813-.091.136-.185.242-.268.399-.02.037-.045.095-.064.134-.128.275-.034.591.213.71.248.12.556-.007.69-.282v-.002c.02-.039.046-.09.062-.127.07-.162.094-.301.144-.458.132-.332.205-.68.387-.897.05-.06.13-.082.215-.105l.113-.205a6.453 6.453 0 0 0 4.609.012l.106.192c.086.028.18.042.256.155.136.232.229.507.342.84.05.156.074.295.145.457.016.037.043.09.062.129.133.276.442.402.69.282.247-.118.341-.435.213-.71-.02-.039-.045-.096-.065-.134-.083-.156-.177-.261-.268-.398-.19-.296-.346-.541-.443-.793-.04-.13.007-.21.038-.294-.018-.022-.059-.144-.083-.202a6.499 6.499 0 0 0 2.88-3.622c.064.01.176.03.213.038.075-.05.144-.114.28-.104.266.039.54.138.87.256.154.06.277.128.448.173.036.01.088.019.13.028l.009.003.007.001c.297.064.584-.098.645-.365.06-.266-.128-.537-.423-.608zM16.4 9.701l-1.95 1.746v.005a.44.44 0 0 0 .173.757l.003.01 2.526.728a5.199 5.199 0 0 0-.108-1.674A5.208 5.208 0 0 0 16.4 9.7zm-4.013 5.325a.437.437 0 0 0-.404-.232.44.44 0 0 0-.372.233h-.002l-1.268 2.292a5.164 5.164 0 0 0 3.326.003l-1.27-2.296h-.01zm1.888-1.293a.44.44 0 0 0-.27.036.44.44 0 0 0-.214.572l-.003.004 1.01 2.438a5.15 5.15 0 0 0 2.081-2.615l-2.6-.44-.004.005z\",\n tensorflow:\n \"M1.292 5.856L11.54 0v24l-4.095-2.378V7.603l-6.168 3.564.015-5.31zm21.43 5.311l-.014-5.31L12.46 0v24l4.095-2.378V14.87l3.092 1.788-.018-4.618-3.074-1.756V7.603l6.168 3.564z\",\n pytorch:\n \"M12.005 0L4.952 7.053a9.865 9.865 0 000 14.022 9.866 9.866 0 0014.022 0c3.984-3.9 3.986-10.205.085-14.023l-1.744 1.743c2.904 2.905 2.904 7.634 0 10.538s-7.634 2.904-10.538 0-2.904-7.634 0-10.538l4.647-4.646.582-.665zm3.568 3.899a1.327 1.327 0 00-1.327 1.327 1.327 1.327 0 001.327 1.328A1.327 1.327 0 0016.9 5.226 1.327 1.327 0 0015.573 3.9z\",\n \"apache-spark\":\n \"M10.812 0c-.425.013-.845.215-1.196.605a3.593 3.593 0 00-.493.722c-.355.667-.425 1.415-.556 2.143a551.9 551.9 0 00-.726 4.087c-.027.16-.096.227-.244.273C5.83 8.386 4.06 8.94 2.3 9.514c-.387.125-.773.289-1.114.506-1.042.665-1.196 1.753-.415 2.71.346.422.79.715 1.284.936 1.1.49 2.202.976 3.3 1.47.019.01.036.013.053.019h-.004l1.306.535c0 .023.002.045 0 .073-.2 2.03-.39 4.063-.58 6.095-.04.419-.012.831.134 1.23.317.87 1.065 1.148 1.881.701.372-.204.666-.497.937-.818 1.372-1.623 2.746-3.244 4.113-4.872.111-.133.205-.15.363-.098.349.117.697.231 1.045.347h.001c.02.012.045.02.073.03l.142.042c1.248.416 2.68.775 3.929 1.19.4.132.622.164 1.045.098.311-.048.592-.062.828-.236.602-.33.995-.957.988-1.682-.005-.427-.154-.813-.35-1.186-.82-1.556-1.637-3.113-2.461-4.666-.078-.148-.076-.243.037-.375 1.381-1.615 2.756-3.236 4.133-4.855.272-.32.513-.658.653-1.058.308-.878-.09-1.57-1-1.741a2.783 2.783 0 00-1.235.069c-1.974.521-3.947 1.041-5.918 1.57-.175.047-.26.015-.355-.144a353.08 353.08 0 00-2.421-4.018 4.61 4.61 0 00-.652-.849c-.371-.37-.802-.549-1.227-.536zm.172 3.703a.592.592 0 01.189.211c.87 1.446 1.742 2.89 2.609 4.338.07.118.135.16.277.121 1.525-.41 3.052-.813 4.579-1.217.367-.098.735-.193 1.103-.289a.399.399 0 01-.1.2c-1.259 1.48-2.516 2.962-3.779 4.438-.11.13-.12.22-.04.37.937 1.803 1.768 3.309 2.498 4.76l-3.696-1.019c-.538-.18-1.077-.358-1.615-.539-.163-.055-.25-.03-.36.1-1.248 1.488-2.504 2.97-3.759 4.454a.398.398 0 01-.18.132c.035-.378.068-.757.104-1.136.149-1.572.297-3.144.451-4.716-.03-.318.117-.405-.322-.545-1.493-.593-3.346-1.321-4.816-1.905a.595.595 0 01.24-.134c1.797-.57 3.595-1.14 5.394-1.705.127-.04.199-.092.211-.233.013-.148.05-.294.076-.441.241-1.363.483-2.726.726-4.088.068-.386.14-.771.21-1.157z\",\n databricks:\n \"M.95 14.184L12 20.403l9.919-5.55v2.21L12 22.662l-10.484-5.96-.565.308v.77L12 24l11.05-6.218v-4.317l-.515-.309L12 19.118l-9.867-5.653v-2.21L12 16.805l11.05-6.218V6.32l-.515-.308L12 11.974 2.647 6.681 12 1.388l7.76 4.368.668-.411v-.566L12 0 .95 6.27v.72L12 13.207l9.919-5.55v2.26L12 15.52 1.516 9.56l-.565.308Z\",\n \"aws-redshift\":\n \"M16.639 9.932a.822.822 0 0 1-.822-.82.823.823 0 0 1 1.645 0c0 .452-.37.82-.823.82m-2.086 4.994a.823.823 0 0 1-.822-.822.822.822 0 0 1 1.645 0 .822.822 0 0 1-.823.822m-5.004-.833a.822.822 0 1 1 .002-1.644.822.822 0 0 1-.002 1.644m-2.083 4.578a.823.823 0 0 1-.823-.82.823.823 0 0 1 1.645 0c0 .452-.37.82-.822.82m9.173-11.236a1.68 1.68 0 0 0-1.68 1.676c0 .566.285 1.066.718 1.37l-.782 1.982a1.674 1.674 0 0 0-1.923 1.104l-1.753-.398a1.675 1.675 0 0 0-3.348.103c0 .432.169.823.438 1.12l-.764 1.79c-.028-.001-.053-.008-.08-.008a1.68 1.68 0 0 0-1.68 1.676 1.68 1.68 0 0 0 3.36 0c0-.593-.312-1.112-.778-1.41l.674-1.579c.161.052.33.088.508.088.661 0 1.228-.386 1.502-.94l1.856.42a1.68 1.68 0 0 0 3.327-.325c0-.5-.224-.943-.574-1.25l.822-2.083c.053.005.104.016.157.016a1.68 1.68 0 0 0 1.68-1.676 1.68 1.68 0 0 0-1.68-1.676M12 23.145c-4.17 0-7.286-1.252-7.286-2.37V4.79C6.14 5.938 9.131 6.547 12 6.547c2.869 0 5.86-.609 7.286-1.756v15.983c0 1.12-3.116 2.37-7.286 2.37M12 .856c4.293 0 7.286 1.274 7.286 2.419 0 1.143-2.993 2.418-7.286 2.418-4.293 0-7.286-1.275-7.286-2.418C4.714 2.129 7.707.855 12 .855m8.143 2.419C20.143 1.147 15.947 0 12 0 8.052 0 3.857 1.147 3.857 3.274l.002.01h-.002v17.49C3.857 22.87 8.052 24 12 24c3.947 0 8.143-1.13 8.143-3.226V3.284h-.002l.002-.01\",\n};\n\nconst integrationBrandSvg = (name: VikingIntegrationBrandName): string => {\n const fill = VIKING_INTEGRATION_BRAND_COLORS[name];\n const d = VIKING_INTEGRATION_BRAND_PATHS[name];\n return `<path fill=\"${fill}\" d=\"${d}\"/>`;\n};\n\n/** Multi-path brand SVG markup (24×24 viewBox) — official product logos at brand hue. */\nexport const VIKING_INTEGRATION_BRAND_SVGS: Record<\n VikingIntegrationBrandName,\n string\n> = {\n kubernetes: integrationBrandSvg(\"kubernetes\"),\n tensorflow: integrationBrandSvg(\"tensorflow\"),\n pytorch: integrationBrandSvg(\"pytorch\"),\n \"apache-spark\": integrationBrandSvg(\"apache-spark\"),\n databricks: integrationBrandSvg(\"databricks\"),\n \"aws-redshift\": integrationBrandSvg(\"aws-redshift\"),\n};\n\n/** Path markup for icon registry / viking-icon-paths.json sync. */\nexport const VIKING_INTEGRATION_ICON_PATHS = Object.fromEntries(\n (\n Object.entries(VIKING_INTEGRATION_BRAND_PATHS) as [\n VikingIntegrationBrandName,\n string,\n ][]\n ).map(([name, d]) => [name, `<path d=\"${d}\"/>`]),\n) as Record<VikingIntegrationBrandName, string>;\n\nexport type VikingIntegrationIconName = VikingIntegrationBrandName;\n\nexport const VIKING_INTEGRATION_ICON_NAMES_LIST =\n VIKING_INTEGRATION_BRAND_NAMES;\n","/**\n * Zero-dependency inline SVG icon registry (24×24 stroke icons).\n * Lucide paths are synced at build time; DEML brand marks are custom artwork.\n */\nimport { LUCIDE_ICON_PATHS } from \"./lucide-paths.generated\";\nimport {\n VIKING_BRAND_ICON_FILLED_PATHS,\n VIKING_BRAND_ICON_PATHS,\n VIKING_BRAND_ICON_NAMES_LIST,\n VIKING_DRAKKAR_ICON_FILLED_PATHS,\n VIKING_DRAKKAR_ICON_PATHS,\n VIKING_DRAKKAR_ICON_NAMES_LIST,\n} from \"./brand-icons\";\nimport {\n VIKING_INTEGRATION_ICON_PATHS,\n VIKING_INTEGRATION_ICON_NAMES_LIST,\n} from \"./integration-brand-icons\";\n\nexport {\n VIKING_DRAKKAR_ICON_NAMES_LIST,\n VIKING_BRAND_ICON_NAMES_LIST,\n} from \"./brand-icons\";\nexport {\n VIKING_INTEGRATION_ICON_NAMES_LIST,\n type VikingIntegrationIconName,\n} from \"./integration-brand-icons\";\n\nexport type VikingIconName = keyof typeof VIKING_ICON_PATHS;\n\nexport type VikingIconSizePreset = \"sm\" | \"md\" | \"lg\";\n\nexport type VikingIconVariant = \"outline\" | \"filled\";\n\n/** Semantic color tokens resolved to CSS custom properties. */\nexport type VikingIconColorToken =\n | \"inherit\"\n | \"accent\"\n | \"success\"\n | \"warning\"\n | \"danger\"\n | \"info\"\n | \"muted\"\n | \"text\";\n\n/** Pixel sizes for sm / md / lg presets. */\nexport const VIKING_ICON_SIZE_PRESETS: Record<VikingIconSizePreset, number> = {\n sm: 16,\n md: 20,\n lg: 24,\n} as const;\n\n/** Custom icons not covered by Lucide (hub topology, ML model tile, OAuth stubs). */\nconst VIKING_CUSTOM_ICON_PATHS = {\n hub: '<circle cx=\"12\" cy=\"12\" r=\"3\"/><path d=\"M12 3v3M12 18v3M3 12h3M18 12h3M5.6 5.6l2.1 2.1M16.3 16.3l2.1 2.1M18.4 5.6l-2.1 2.1M7.7 16.3l-2.1 2.1\"/>',\n model:\n '<rect x=\"4\" y=\"8\" width=\"16\" height=\"10\" rx=\"2\"/><path d=\"M8 8V6a4 4 0 0 1 8 0v2\"/>',\n google:\n '<path d=\"M12 11.2v2.4h6.6c-.3 1.5-1.8 4.4-6.6 4.4-4 0-7.2-3.3-7.2-7.3S8 3.4 12 3.4c2.3 0 3.9 1 4.8 1.8l3.2-3.1C17.5.8 14.9 0 12 0 5.4 0 0 5.4 0 12s5.4 12 12 12c6.9 0 11.5-4.8 11.5-11.6 0-.8-.1-1.4-.2-1.9H12z\"/>',\n apple:\n '<path d=\"M16.365 12.14c.02 2.53 2.21 3.38 2.23 3.39-.02.07-.35 1.21-1.16 2.4-.7 1.02-1.43 2.03-2.58 2.05-1.13.02-1.49-.67-2.78-.67-1.29 0-1.69.65-2.75.69-1.11.04-1.95-1.12-2.66-2.13-1.44-2.08-2.54-5.87-1.07-8.43.73-1.27 2.04-2.08 3.46-2.1 1.08-.02 2.1.72 2.78.72.67 0 2.14-.89 3.61-.76.61.03 2.33.25 3.44 1.88-.09.06-2.05 1.2-2.03 3.55M13.75 3.64c.59-.71 1-1.7.89-2.68-.86.03-1.9.57-2.52 1.28-.55.63-1.03 1.65-.9 2.62.95.07 1.92-.49 2.53-1.22\"/>',\n} as const;\n\nexport const VIKING_ICON_PATHS = {\n ...LUCIDE_ICON_PATHS,\n ...VIKING_BRAND_ICON_PATHS,\n ...VIKING_DRAKKAR_ICON_PATHS,\n ...VIKING_INTEGRATION_ICON_PATHS,\n ...VIKING_CUSTOM_ICON_PATHS,\n} as const;\n\n/** Filled-path overrides used when variant=\"filled\" (brand marks, solid shapes). */\nexport const VIKING_ICON_FILLED_PATHS: Partial<Record<VikingIconName, string>> =\n {\n ...VIKING_BRAND_ICON_FILLED_PATHS,\n ...VIKING_DRAKKAR_ICON_FILLED_PATHS,\n };\n\n/** Legacy Material Icons ligature names → Viking icon registry keys. */\nexport const MATERIAL_ICON_ALIASES: Record<string, VikingIconName> = {\n analytics: \"deml\",\n security: \"shield\",\n link: \"link\",\n visibility: \"eye\",\n shield: \"shield\",\n trending_up: \"trending-up\",\n lock: \"lock\",\n fingerprint: \"fingerprint\",\n gpp_maybe: \"shield\",\n verified_user: \"user-shield\",\n bolt: \"bolt\",\n cloud: \"cloud\",\n lan: \"network\",\n hub: \"hub\",\n speed: \"speed\",\n rocket_launch: \"rocket\",\n insights: \"insights\",\n check: \"check\",\n description: \"file\",\n vpn_key: \"key\",\n policy: \"policy\",\n bug_report: \"bug\",\n search: \"search\",\n chevron_left: \"chevron-left\",\n chevron_right: \"chevron-right\",\n verified: \"check-circle\",\n warning: \"alert-triangle\",\n close: \"x\",\n account_balance: \"building\",\n send: \"send\",\n check_circle: \"check-circle\",\n play_circle: \"play\",\n input: \"terminal\",\n model_training: \"model\",\n auto_awesome: \"sparkle\",\n error_outline: \"alert-circle\",\n home: \"home\",\n cookie: \"cookie\",\n search_off: \"search-off\",\n person_add: \"user\",\n storage: \"aws-redshift\",\n data_object: \"aws-redshift\",\n memory: \"tensorflow\",\n psychology: \"pytorch\",\n dns: \"server\",\n login: \"log-in\",\n};\n\n/** Icons always rendered with fill (play triangle, dot grids). */\nexport const VIKING_FILLED_ICON_NAMES = [\n \"play\",\n \"dots-horizontal\",\n \"dots-vertical\",\n \"grip-vertical\",\n] as const satisfies readonly VikingIconName[];\n\n/** OAuth / vendor marks rendered with official brand artwork in viking-icon. */\nexport const VIKING_BRAND_ICON_NAMES = [\n \"google\",\n \"apple\",\n ...VIKING_BRAND_ICON_NAMES_LIST,\n] as const satisfies readonly VikingIconName[];\n\nconst VIKING_ICON_COLOR_TOKENS: Record<\n Exclude<VikingIconColorToken, \"inherit\">,\n string\n> = {\n accent: \"var(--viking-accent)\",\n success: \"var(--viking-success)\",\n warning: \"var(--viking-warning)\",\n danger: \"var(--viking-danger)\",\n info: \"var(--viking-info)\",\n muted: \"var(--viking-text-muted)\",\n text: \"var(--viking-text)\",\n};\n\nexport const vikingIconViewBox = (_name: VikingIconName): string => \"0 0 24 24\";\n\n/** Resolve pixel size from preset or explicit value. */\nexport const resolveVikingIconSize = (\n size: number | undefined,\n preset: VikingIconSizePreset | null | undefined,\n): number => {\n if (preset) {\n return VIKING_ICON_SIZE_PRESETS[preset];\n }\n return size ?? VIKING_ICON_SIZE_PRESETS.lg;\n};\n\n/** Resolve semantic color token or raw CSS value for icon tinting. */\nexport const resolveVikingIconColor = (\n color: VikingIconColorToken | string | undefined,\n): string | undefined => {\n if (!color || color === \"inherit\") {\n return undefined;\n }\n if (color in VIKING_ICON_COLOR_TOKENS) {\n return VIKING_ICON_COLOR_TOKENS[\n color as Exclude<VikingIconColorToken, \"inherit\">\n ];\n }\n return color;\n};\n\nconst VIKING_ICON_PATH_KEYS = new Set(Object.keys(VIKING_ICON_PATHS));\n\n/** Resolve a Viking or legacy Material icon name to a registry key. */\nexport const resolveVikingIcon = (name: string): VikingIconName => {\n const normalized = name.trim().toLowerCase().replace(/\\s+/g, \"_\");\n if (VIKING_ICON_PATH_KEYS.has(normalized)) {\n return normalized as VikingIconName;\n }\n const alias = MATERIAL_ICON_ALIASES[normalized];\n if (alias) {\n return alias;\n }\n return \"info\";\n};\n\nexport const VIKING_ICON_NAMES = Object.keys(\n VIKING_ICON_PATHS,\n) as VikingIconName[];\n\n/** Lucide-sourced icon names (for docs and showcase grouping). */\nexport const VIKING_LUCIDE_ICON_NAMES = Object.keys(\n LUCIDE_ICON_PATHS,\n) as (keyof typeof LUCIDE_ICON_PATHS)[];\n","import { Directive, Provider, Type, forwardRef, signal } from \"@angular/core\";\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from \"@angular/forms\";\n\n/** Registers a component as a ControlValueAccessor. */\nexport const provideVikingCva = (component: Type<unknown>): Provider => ({\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => component),\n multi: true,\n});\n\n/** Shared ControlValueAccessor plumbing for Viking-Material form controls. */\n@Directive()\nexport abstract class VikingControl<T> implements ControlValueAccessor {\n protected onChange: (value: T) => void = () => {};\n protected onTouched: () => void = () => {};\n\n /** Disabled state driven by Angular forms (setDisabledState). */\n readonly formDisabled = signal(false);\n\n abstract writeValue(value: T): void;\n\n registerOnChange(fn: (value: T) => void): void {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n\n setDisabledState(isDisabled: boolean): void {\n this.formDisabled.set(isDisabled);\n }\n}\n","/** Attaches constructable stylesheet to a shadow root (with fallback). */\nexport const attachShadowStyles = (shadow: ShadowRoot, css: string): void => {\n if (\n \"adoptedStyleSheets\" in Document.prototype &&\n \"replaceSync\" in CSSStyleSheet.prototype\n ) {\n const sheet = new CSSStyleSheet();\n sheet.replaceSync(css);\n shadow.adoptedStyleSheets = [sheet];\n return;\n }\n\n const style = document.createElement(\"style\");\n style.textContent = css;\n shadow.append(style);\n};\n\n/** Reads a boolean attribute presence/value. */\nexport const readBoolAttr = (el: HTMLElement, name: string): boolean =>\n el.hasAttribute(name) && el.getAttribute(name) !== \"false\";\n\n/** Safely sets form value when ElementInternals is fully supported (e.g. not in jsdom). */\nexport const setFormValue = (\n internals: ElementInternals | null,\n value: string,\n): void => {\n if (internals && typeof internals.setFormValue === \"function\") {\n internals.setFormValue(value);\n }\n};\n\n/** Attaches ElementInternals where available without breaking older WebKit or test DOMs. */\nexport const attachElementInternals = (\n el: HTMLElement,\n): ElementInternals | null => {\n const attachInternals = (\n el as HTMLElement & { attachInternals?: () => ElementInternals }\n ).attachInternals;\n return typeof attachInternals === \"function\"\n ? attachInternals.call(el)\n : null;\n};\n\n/** Opens a native dialog when showModal is available. */\nexport const showModalDialog = (dialog: HTMLDialogElement | null): void => {\n if (dialog && typeof dialog.showModal === \"function\" && !dialog.open) {\n dialog.showModal();\n }\n};\n\n/** Closes a native dialog when close is available. */\nexport const closeModalDialog = (dialog: HTMLDialogElement | null): void => {\n if (dialog && typeof dialog.close === \"function\" && dialog.open) {\n dialog.close();\n }\n};\n","export const HTMLElementBase: typeof HTMLElement =\n typeof HTMLElement === \"undefined\"\n ? (class {} as unknown as typeof HTMLElement)\n : HTMLElement;\n\n/** Stable unique id for associating labels and controls. */\nexport const vikingWcUid = (prefix: string): string =>\n `${prefix}-${Math.random().toString(36).slice(2, 9)}`;\n\n/** Escape text for safe innerHTML insertion. */\nexport const escapeHtml = (value: string): string => {\n const entities: Record<string, string> = {\n \"&\": \"&\",\n \"<\": \"<\",\n \">\": \">\",\n '\"': \""\",\n \"'\": \"'\",\n };\n\n return value.replace(\n /[&<>\"']/g,\n (character) => entities[character] ?? character,\n );\n};\n\n/** Platform modifier label for keyboard shortcut hints. */\nexport const modKeyLabel = (): string =>\n typeof navigator !== \"undefined\" &&\n /Mac|iPhone|iPad/i.test(navigator.platform)\n ? \"⌘\"\n : \"Ctrl\";\n\n/** Register a custom element when the runtime supports it (skip during SSR/prerender). */\nexport const defineCustomElement = (\n tag: string,\n ctor: CustomElementConstructor,\n): void => {\n if (typeof customElements === \"undefined\" || customElements.get(tag)) {\n return;\n }\n customElements.define(tag, ctor);\n};\n\n/** Register an alias tag with a fresh subclass; customElements disallows reusing constructors. */\nexport const defineCustomElementAlias = <T extends CustomElementConstructor>(\n tag: string,\n ctor: T,\n): void => {\n if (typeof customElements === \"undefined\" || customElements.get(tag)) {\n return;\n }\n customElements.define(tag, class extends ctor {});\n};\n","/**\n * AUTO-GENERATED by scripts/sync_lucide_icons.mjs — do not edit by hand.\n * Lucide paths are inlined at build time; lucide is a devDependency only.\n * @see https://lucide.dev\n */\nexport const LUCIDE_ICON_PATHS = {\n \"alert-circle\":\n '<circle cx=\"12\" cy=\"12\" r=\"10\"/><line x1=\"12\" x2=\"12\" y1=\"8\" y2=\"12\"/><line x1=\"12\" x2=\"12.01\" y1=\"16\" y2=\"16\"/>',\n \"alert-triangle\":\n '<path d=\"m21.73 18-8-14a2 2 0 0 0-3.48 0l-8 14A2 2 0 0 0 4 21h16a2 2 0 0 0 1.73-3\"/><path d=\"M12 9v4\"/><path d=\"M12 17h.01\"/>',\n \"arrow-left\": '<path d=\"m12 19-7-7 7-7\"/><path d=\"M19 12H5\"/>',\n \"arrow-right\": '<path d=\"M5 12h14\"/><path d=\"m12 5 7 7-7 7\"/>',\n \"arrow-up-right\": '<path d=\"M7 7h10v10\"/><path d=\"M7 17 17 7\"/>',\n \"bar-chart\":\n '<path d=\"M3 3v16a2 2 0 0 0 2 2h16\"/><path d=\"M18 17V9\"/><path d=\"M13 17V5\"/><path d=\"M8 17v-3\"/>',\n bell: '<path d=\"M10.268 21a2 2 0 0 0 3.464 0\"/><path d=\"M3.262 15.326A1 1 0 0 0 4 17h16a1 1 0 0 0 .74-1.673C19.41 13.956 18 12.499 18 8A6 6 0 0 0 6 8c0 4.499-1.411 5.956-2.738 7.326\"/>',\n bold: '<path d=\"M6 12h9a4 4 0 0 1 0 8H7a1 1 0 0 1-1-1V5a1 1 0 0 1 1-1h7a4 4 0 0 1 0 8\"/>',\n bolt: '<path d=\"M4 14a1 1 0 0 1-.78-1.63l9.9-10.2a.5.5 0 0 1 .86.46l-1.92 6.02A1 1 0 0 0 13 10h7a1 1 0 0 1 .78 1.63l-9.9 10.2a.5.5 0 0 1-.86-.46l1.92-6.02A1 1 0 0 0 11 14z\"/>',\n brain:\n '<path d=\"M12 18V5\"/><path d=\"M15 13a4.17 4.17 0 0 1-3-4 4.17 4.17 0 0 1-3 4\"/><path d=\"M17.598 6.5A3 3 0 1 0 12 5a3 3 0 1 0-5.598 1.5\"/><path d=\"M17.997 5.125a4 4 0 0 1 2.526 5.77\"/><path d=\"M18 18a4 4 0 0 0 2-7.464\"/><path d=\"M19.967 17.483A4 4 0 1 1 12 18a4 4 0 1 1-7.967-.517\"/><path d=\"M6 18a4 4 0 0 1-2-7.464\"/><path d=\"M6.003 5.125a4 4 0 0 0-2.526 5.77\"/>',\n bug: '<path d=\"M12 20v-9\"/><path d=\"M14 7a4 4 0 0 1 4 4v3a6 6 0 0 1-12 0v-3a4 4 0 0 1 4-4z\"/><path d=\"M14.12 3.88 16 2\"/><path d=\"M21 21a4 4 0 0 0-3.81-4\"/><path d=\"M21 5a4 4 0 0 1-3.55 3.97\"/><path d=\"M22 13h-4\"/><path d=\"M3 21a4 4 0 0 1 3.81-4\"/><path d=\"M3 5a4 4 0 0 0 3.55 3.97\"/><path d=\"M6 13H2\"/><path d=\"m8 2 1.88 1.88\"/><path d=\"M9 7.13V6a3 3 0 1 1 6 0v1.13\"/>',\n building:\n '<path d=\"M12 10h.01\"/><path d=\"M12 14h.01\"/><path d=\"M12 6h.01\"/><path d=\"M16 10h.01\"/><path d=\"M16 14h.01\"/><path d=\"M16 6h.01\"/><path d=\"M8 10h.01\"/><path d=\"M8 14h.01\"/><path d=\"M8 6h.01\"/><path d=\"M9 22v-3a1 1 0 0 1 1-1h4a1 1 0 0 1 1 1v3\"/><rect x=\"4\" y=\"2\" width=\"16\" height=\"20\" rx=\"2\"/>',\n calendar:\n '<path d=\"M8 2v4\"/><path d=\"M16 2v4\"/><rect width=\"18\" height=\"18\" x=\"3\" y=\"4\" rx=\"2\"/><path d=\"M3 10h18\"/>',\n check: '<path d=\"M20 6 9 17l-5-5\"/>',\n \"check-circle\": '<circle cx=\"12\" cy=\"12\" r=\"10\"/><path d=\"m9 12 2 2 4-4\"/>',\n \"chevron-down\": '<path d=\"m6 9 6 6 6-6\"/>',\n \"chevron-left\": '<path d=\"m15 18-6-6 6-6\"/>',\n \"chevron-right\": '<path d=\"m9 18 6-6-6-6\"/>',\n \"chevron-up\": '<path d=\"m18 15-6-6-6 6\"/>',\n chip: '<path d=\"M12 20v2\"/><path d=\"M12 2v2\"/><path d=\"M17 20v2\"/><path d=\"M17 2v2\"/><path d=\"M2 12h2\"/><path d=\"M2 17h2\"/><path d=\"M2 7h2\"/><path d=\"M20 12h2\"/><path d=\"M20 17h2\"/><path d=\"M20 7h2\"/><path d=\"M7 20v2\"/><path d=\"M7 2v2\"/><rect x=\"4\" y=\"4\" width=\"16\" height=\"16\" rx=\"2\"/><rect x=\"8\" y=\"8\" width=\"8\" height=\"8\" rx=\"1\"/>',\n clock: '<circle cx=\"12\" cy=\"12\" r=\"10\"/><path d=\"M12 6v6l4 2\"/>',\n cloud: '<path d=\"M17.5 19H9a7 7 0 1 1 6.71-9h1.79a4.5 4.5 0 1 1 0 9Z\"/>',\n cookie:\n '<path d=\"M12 2a10 10 0 1 0 10 10 4 4 0 0 1-5-5 4 4 0 0 1-5-5\"/><path d=\"M8.5 8.5v.01\"/><path d=\"M16 15.5v.01\"/><path d=\"M12 12v.01\"/><path d=\"M11 17v.01\"/><path d=\"M7 14v.01\"/>',\n copy: '<rect width=\"14\" height=\"14\" x=\"8\" y=\"8\" rx=\"2\" ry=\"2\"/><path d=\"M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2\"/>',\n \"dots-horizontal\":\n '<circle cx=\"12\" cy=\"12\" r=\"1\" fill=\"currentColor\" stroke=\"none\"/><circle cx=\"19\" cy=\"12\" r=\"1\" fill=\"currentColor\" stroke=\"none\"/><circle cx=\"5\" cy=\"12\" r=\"1\" fill=\"currentColor\" stroke=\"none\"/>',\n \"dots-vertical\":\n '<circle cx=\"12\" cy=\"12\" r=\"1\" fill=\"currentColor\" stroke=\"none\"/><circle cx=\"12\" cy=\"5\" r=\"1\" fill=\"currentColor\" stroke=\"none\"/><circle cx=\"12\" cy=\"19\" r=\"1\" fill=\"currentColor\" stroke=\"none\"/>',\n download:\n '<path d=\"M12 15V3\"/><path d=\"M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4\"/><path d=\"m7 10 5 5 5-5\"/>',\n external:\n '<path d=\"M15 3h6v6\"/><path d=\"M10 14 21 3\"/><path d=\"M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6\"/>',\n eye: '<path d=\"M2.062 12.348a1 1 0 0 1 0-.696 10.75 10.75 0 0 1 19.876 0 1 1 0 0 1 0 .696 10.75 10.75 0 0 1-19.876 0\"/><circle cx=\"12\" cy=\"12\" r=\"3\"/>',\n \"eye-off\":\n '<path d=\"M10.733 5.076a10.744 10.744 0 0 1 11.205 6.575 1 1 0 0 1 0 .696 10.747 10.747 0 0 1-1.444 2.49\"/><path d=\"M14.084 14.158a3 3 0 0 1-4.242-4.242\"/><path d=\"M17.479 17.499a10.75 10.75 0 0 1-15.417-5.151 1 1 0 0 1 0-.696 10.75 10.75 0 0 1 4.446-5.143\"/><path d=\"m2 2 20 20\"/>',\n file: '<path d=\"M6 22a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h8a2.4 2.4 0 0 1 1.704.706l3.588 3.588A2.4 2.4 0 0 1 20 8v12a2 2 0 0 1-2 2z\"/><path d=\"M14 2v5a1 1 0 0 0 1 1h5\"/>',\n filter:\n '<path d=\"M10 20a1 1 0 0 0 .553.895l2 1A1 1 0 0 0 14 21v-7a2 2 0 0 1 .517-1.341L21.74 4.67A1 1 0 0 0 21 3H3a1 1 0 0 0-.742 1.67l7.225 7.989A2 2 0 0 1 10 14z\"/>',\n fingerprint:\n '<path d=\"M12 10a2 2 0 0 0-2 2c0 1.02-.1 2.51-.26 4\"/><path d=\"M14 13.12c0 2.38 0 6.38-1 8.88\"/><path d=\"M17.29 21.02c.12-.6.43-2.3.5-3.02\"/><path d=\"M2 12a10 10 0 0 1 18-6\"/><path d=\"M2 16h.01\"/><path d=\"M21.8 16c.2-2 .131-5.354 0-6\"/><path d=\"M5 19.5C5.5 18 6 15 6 12a6 6 0 0 1 .34-2\"/><path d=\"M8.65 22c.21-.66.45-1.32.57-2\"/><path d=\"M9 6.8a6 6 0 0 1 9 5.2v2\"/>',\n folder:\n '<path d=\"M20 20a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2h-7.9a2 2 0 0 1-1.69-.9L9.6 3.9A2 2 0 0 0 7.93 3H4a2 2 0 0 0-2 2v13a2 2 0 0 0 2 2Z\"/>',\n globe:\n '<circle cx=\"12\" cy=\"12\" r=\"10\"/><path d=\"M12 2a14.5 14.5 0 0 0 0 20 14.5 14.5 0 0 0 0-20\"/><path d=\"M2 12h20\"/>',\n \"grip-vertical\":\n '<circle cx=\"9\" cy=\"12\" r=\"1\" fill=\"currentColor\" stroke=\"none\"/><circle cx=\"9\" cy=\"5\" r=\"1\" fill=\"currentColor\" stroke=\"none\"/><circle cx=\"9\" cy=\"19\" r=\"1\" fill=\"currentColor\" stroke=\"none\"/><circle cx=\"15\" cy=\"12\" r=\"1\" fill=\"currentColor\" stroke=\"none\"/><circle cx=\"15\" cy=\"5\" r=\"1\" fill=\"currentColor\" stroke=\"none\"/><circle cx=\"15\" cy=\"19\" r=\"1\" fill=\"currentColor\" stroke=\"none\"/>',\n heart:\n '<path d=\"M2 9.5a5.5 5.5 0 0 1 9.591-3.676.56.56 0 0 0 .818 0A5.49 5.49 0 0 1 22 9.5c0 2.29-1.5 4-3 5.5l-5.492 5.313a2 2 0 0 1-3 .019L5 15c-1.5-1.5-3-3.2-3-5.5\"/>',\n home: '<path d=\"M15 21v-8a1 1 0 0 0-1-1h-4a1 1 0 0 0-1 1v8\"/><path d=\"M3 10a2 2 0 0 1 .709-1.528l7-6a2 2 0 0 1 2.582 0l7 6A2 2 0 0 1 21 10v9a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2z\"/>',\n image:\n '<rect width=\"18\" height=\"18\" x=\"3\" y=\"3\" rx=\"2\" ry=\"2\"/><circle cx=\"9\" cy=\"9\" r=\"2\"/><path d=\"m21 15-3.086-3.086a2 2 0 0 0-2.828 0L6 21\"/>',\n info: '<circle cx=\"12\" cy=\"12\" r=\"10\"/><path d=\"M12 16v-4\"/><path d=\"M12 8h.01\"/>',\n insights: '<path d=\"M3 3v16a2 2 0 0 0 2 2h16\"/><path d=\"m19 9-5 5-4-4-3 3\"/>',\n italic:\n '<line x1=\"19\" x2=\"10\" y1=\"4\" y2=\"4\"/><line x1=\"14\" x2=\"5\" y1=\"20\" y2=\"20\"/><line x1=\"15\" x2=\"9\" y1=\"4\" y2=\"20\"/>',\n key: '<path d=\"M2.586 17.414A2 2 0 0 0 2 18.828V21a1 1 0 0 0 1 1h3a1 1 0 0 0 1-1v-1a1 1 0 0 1 1-1h1a1 1 0 0 0 1-1v-1a1 1 0 0 1 1-1h.172a2 2 0 0 0 1.414-.586l.814-.814a6.5 6.5 0 1 0-4-4z\"/><circle cx=\"16.5\" cy=\"7.5\" r=\".5\" fill=\"currentColor\"/>',\n link: '<path d=\"M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71\"/><path d=\"M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71\"/>',\n list: '<path d=\"M3 5h.01\"/><path d=\"M3 12h.01\"/><path d=\"M3 19h.01\"/><path d=\"M8 5h13\"/><path d=\"M8 12h13\"/><path d=\"M8 19h13\"/>',\n \"list-ordered\":\n '<path d=\"M11 5h10\"/><path d=\"M11 12h10\"/><path d=\"M11 19h10\"/><path d=\"M4 4h1v5\"/><path d=\"M4 9h2\"/><path d=\"M6.5 20H3.4c0-1 2.6-1.925 2.6-3.5a1.5 1.5 0 0 0-2.6-1.02\"/>',\n loader: '<path d=\"M21 12a9 9 0 1 1-6.219-8.56\"/>',\n lock: '<rect width=\"18\" height=\"11\" x=\"3\" y=\"11\" rx=\"2\" ry=\"2\"/><path d=\"M7 11V7a5 5 0 0 1 10 0v4\"/>',\n \"log-in\":\n '<path d=\"m10 17 5-5-5-5\"/><path d=\"M15 12H3\"/><path d=\"M15 3h4a2 2 0 0 1 2 2v14a2 2 0 0 1-2 2h-4\"/>',\n \"log-out\":\n '<path d=\"m16 17 5-5-5-5\"/><path d=\"M21 12H9\"/><path d=\"M9 21H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h4\"/>',\n mail: '<path d=\"m22 7-8.991 5.727a2 2 0 0 1-2.009 0L2 7\"/><rect x=\"2\" y=\"4\" width=\"20\" height=\"16\" rx=\"2\"/>',\n menu: '<path d=\"M4 5h16\"/><path d=\"M4 12h16\"/><path d=\"M4 19h16\"/>',\n minus: '<path d=\"M5 12h14\"/>',\n moon: '<path d=\"M20.985 12.486a9 9 0 1 1-9.473-9.472c.405-.022.617.46.402.803a6 6 0 0 0 8.268 8.268c.344-.215.825-.004.803.401\"/>',\n network:\n '<rect x=\"16\" y=\"16\" width=\"6\" height=\"6\" rx=\"1\"/><rect x=\"2\" y=\"16\" width=\"6\" height=\"6\" rx=\"1\"/><rect x=\"9\" y=\"2\" width=\"6\" height=\"6\" rx=\"1\"/><path d=\"M5 16v-3a1 1 0 0 1 1-1h12a1 1 0 0 1 1 1v3\"/><path d=\"M12 12V8\"/>',\n paperclip:\n '<path d=\"m16 6-8.414 8.586a2 2 0 0 0 2.829 2.829l8.414-8.586a4 4 0 1 0-5.657-5.657l-8.379 8.551a6 6 0 1 0 8.485 8.485l8.379-8.551\"/>',\n pencil:\n '<path d=\"M21.174 6.812a1 1 0 0 0-3.986-3.987L3.842 16.174a2 2 0 0 0-.5.83l-1.321 4.352a.5.5 0 0 0 .623.622l4.353-1.32a2 2 0 0 0 .83-.497z\"/><path d=\"m15 5 4 4\"/>',\n phone:\n '<path d=\"M13.832 16.568a1 1 0 0 0 1.213-.303l.355-.465A2 2 0 0 1 17 15h3a2 2 0 0 1 2 2v3a2 2 0 0 1-2 2A18 18 0 0 1 2 4a2 2 0 0 1 2-2h3a2 2 0 0 1 2 2v3a2 2 0 0 1-.8 1.6l-.468.351a1 1 0 0 0-.292 1.233 14 14 0 0 0 6.392 6.384\"/>',\n play: '<path d=\"M5 5a2 2 0 0 1 3.008-1.728l11.997 6.998a2 2 0 0 1 .003 3.458l-12 7A2 2 0 0 1 5 19z\" fill=\"currentColor\" stroke=\"none\"/>',\n plus: '<path d=\"M5 12h14\"/><path d=\"M12 5v14\"/>',\n policy:\n '<path d=\"M20 13c0 5-3.5 7.5-7.66 8.95a1 1 0 0 1-.67-.01C7.5 20.5 4 18 4 13V6a1 1 0 0 1 1-1c2 0 4.5-1.2 6.24-2.72a1.17 1.17 0 0 1 1.52 0C14.51 3.81 17 5 19 5a1 1 0 0 1 1 1z\"/><path d=\"m9 12 2 2 4-4\"/>',\n refresh:\n '<path d=\"M3 12a9 9 0 0 1 9-9 9.75 9.75 0 0 1 6.74 2.74L21 8\"/><path d=\"M21 3v5h-5\"/><path d=\"M21 12a9 9 0 0 1-9 9 9.75 9.75 0 0 1-6.74-2.74L3 16\"/><path d=\"M8 16H3v5\"/>',\n rocket:\n '<path d=\"M12 15v5s3.03-.55 4-2c1.08-1.62 0-5 0-5\"/><path d=\"M4.5 16.5c-1.5 1.26-2 5-2 5s3.74-.5 5-2c.71-.84.7-2.13-.09-2.91a2.18 2.18 0 0 0-2.91-.09\"/><path d=\"M9 12a22 22 0 0 1 2-3.95A12.88 12.88 0 0 1 22 2c0 2.72-.78 7.5-6 11a22.4 22.4 0 0 1-4 2z\"/><path d=\"M9 12H4s.55-3.03 2-4c1.62-1.08 5 .05 5 .05\"/>',\n search: '<path d=\"m21 21-4.34-4.34\"/><circle cx=\"11\" cy=\"11\" r=\"8\"/>',\n \"search-off\":\n '<path d=\"m13.5 8.5-5 5\"/><path d=\"m8.5 8.5 5 5\"/><circle cx=\"11\" cy=\"11\" r=\"8\"/><path d=\"m21 21-4.3-4.3\"/>',\n send: '<path d=\"M14.536 21.686a.5.5 0 0 0 .937-.024l6.5-19a.496.496 0 0 0-.635-.635l-19 6.5a.5.5 0 0 0-.024.937l7.93 3.18a2 2 0 0 1 1.112 1.11z\"/><path d=\"m21.854 2.147-10.94 10.939\"/>',\n server:\n '<rect width=\"20\" height=\"8\" x=\"2\" y=\"2\" rx=\"2\" ry=\"2\"/><rect width=\"20\" height=\"8\" x=\"2\" y=\"14\" rx=\"2\" ry=\"2\"/><line x1=\"6\" x2=\"6.01\" y1=\"6\" y2=\"6\"/><line x1=\"6\" x2=\"6.01\" y1=\"18\" y2=\"18\"/>',\n settings:\n '<path d=\"M9.671 4.136a2.34 2.34 0 0 1 4.659 0 2.34 2.34 0 0 0 3.319 1.915 2.34 2.34 0 0 1 2.33 4.033 2.34 2.34 0 0 0 0 3.831 2.34 2.34 0 0 1-2.33 4.033 2.34 2.34 0 0 0-3.319 1.915 2.34 2.34 0 0 1-4.659 0 2.34 2.34 0 0 0-3.32-1.915 2.34 2.34 0 0 1-2.33-4.033 2.34 2.34 0 0 0 0-3.831A2.34 2.34 0 0 1 6.35 6.051a2.34 2.34 0 0 0 3.319-1.915\"/><circle cx=\"12\" cy=\"12\" r=\"3\"/>',\n shield:\n '<path d=\"M20 13c0 5-3.5 7.5-7.66 8.95a1 1 0 0 1-.67-.01C7.5 20.5 4 18 4 13V6a1 1 0 0 1 1-1c2 0 4.5-1.2 6.24-2.72a1.17 1.17 0 0 1 1.52 0C14.51 3.81 17 5 19 5a1 1 0 0 1 1 1z\"/>',\n ship: '<path d=\"M12 10.189V14\"/><path d=\"M12 2v3\"/><path d=\"M19 13V7a2 2 0 0 0-2-2H7a2 2 0 0 0-2 2v6\"/><path d=\"M19.38 20A11.6 11.6 0 0 0 21 14l-8.188-3.639a2 2 0 0 0-1.624 0L3 14a11.6 11.6 0 0 0 2.81 7.76\"/><path d=\"M2 21c.6.5 1.2 1 2.5 1 2.5 0 2.5-2 5-2 1.3 0 1.9.5 2.5 1s1.2 1 2.5 1c2.5 0 2.5-2 5-2 1.3 0 1.9.5 2.5 1\"/>',\n sparkle:\n '<path d=\"M11.017 2.814a1 1 0 0 1 1.966 0l1.051 5.558a2 2 0 0 0 1.594 1.594l5.558 1.051a1 1 0 0 1 0 1.966l-5.558 1.051a2 2 0 0 0-1.594 1.594l-1.051 5.558a1 1 0 0 1-1.966 0l-1.051-5.558a2 2 0 0 0-1.594-1.594l-5.558-1.051a1 1 0 0 1 0-1.966l5.558-1.051a2 2 0 0 0 1.594-1.594z\"/><path d=\"M20 2v4\"/><path d=\"M22 4h-4\"/><circle cx=\"4\" cy=\"20\" r=\"2\"/>',\n speed: '<path d=\"m12 14 4-4\"/><path d=\"M3.34 19a10 10 0 1 1 17.32 0\"/>',\n star: '<path d=\"M11.525 2.295a.53.53 0 0 1 .95 0l2.31 4.679a2.123 2.123 0 0 0 1.595 1.16l5.166.756a.53.53 0 0 1 .294.904l-3.736 3.638a2.123 2.123 0 0 0-.611 1.878l.882 5.14a.53.53 0 0 1-.771.56l-4.618-2.428a2.122 2.122 0 0 0-1.973 0L6.396 21.01a.53.53 0 0 1-.77-.56l.881-5.139a2.122 2.122 0 0 0-.611-1.879L2.16 9.795a.53.53 0 0 1 .294-.906l5.165-.755a2.122 2.122 0 0 0 1.597-1.16z\"/>',\n sun: '<circle cx=\"12\" cy=\"12\" r=\"4\"/><path d=\"M12 2v2\"/><path d=\"M12 20v2\"/><path d=\"m4.93 4.93 1.41 1.41\"/><path d=\"m17.66 17.66 1.41 1.41\"/><path d=\"M2 12h2\"/><path d=\"M20 12h2\"/><path d=\"m6.34 17.66-1.41 1.41\"/><path d=\"m19.07 4.93-1.41 1.41\"/>',\n terminal: '<path d=\"M12 19h8\"/><path d=\"m4 17 6-6-6-6\"/>',\n trash:\n '<path d=\"M10 11v6\"/><path d=\"M14 11v6\"/><path d=\"M19 6v14a2 2 0 0 1-2 2H7a2 2 0 0 1-2-2V6\"/><path d=\"M3 6h18\"/><path d=\"M8 6V4a2 2 0 0 1 2-2h4a2 2 0 0 1 2 2v2\"/>',\n \"trending-up\": '<path d=\"M16 7h6v6\"/><path d=\"m22 7-8.5 8.5-5-5L2 17\"/>',\n underline:\n '<path d=\"M6 4v6a6 6 0 0 0 12 0V4\"/><line x1=\"4\" x2=\"20\" y1=\"20\" y2=\"20\"/>',\n upload:\n '<path d=\"M12 3v12\"/><path d=\"m17 8-5-5-5 5\"/><path d=\"M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4\"/>',\n user: '<path d=\"M19 21v-2a4 4 0 0 0-4-4H9a4 4 0 0 0-4 4v2\"/><circle cx=\"12\" cy=\"7\" r=\"4\"/>',\n \"user-shield\":\n '<path d=\"M20 13c0 5-3.5 7.5-7.66 8.95a1 1 0 0 1-.67-.01C7.5 20.5 4 18 4 13V6a1 1 0 0 1 1-1c2 0 4.5-1.2 6.24-2.72a1.17 1.17 0 0 1 1.52 0C14.51 3.81 17 5 19 5a1 1 0 0 1 1 1z\"/><path d=\"M6.376 18.91a6 6 0 0 1 11.249.003\"/><circle cx=\"12\" cy=\"11\" r=\"4\"/>',\n x: '<path d=\"M18 6 6 18\"/><path d=\"m6 6 12 12\"/>',\n} as const;\n\nexport type LucideIconName = keyof typeof LUCIDE_ICON_PATHS;\n","/**\n * DEML branded icon paths — optimized SVG geometry (not sourced from Lucide).\n * Use via viking-icon name=\"deml\" | \"deml-compact\" | \"deml-lockup\".\n */\nexport const VIKING_BRAND_ICON_PATHS = {\n /** Primary bar-chart mark in rounded frame (outline). */\n deml: '<rect x=\"3\" y=\"3\" width=\"18\" height=\"18\" rx=\"2\"/><path d=\"M8 17V13M12 17V8M16 17V11\"/>',\n /** Compact monogram for favicons and dense Drakkar shell. */\n \"deml-compact\":\n '<rect x=\"4\" y=\"4\" width=\"16\" height=\"16\" rx=\"3\"/><path d=\"M9 16V12M12 16V9M15 16V13\"/>',\n /** Lockup mark with baseline accent bar. */\n \"deml-lockup\":\n '<rect x=\"3\" y=\"3\" width=\"18\" height=\"14\" rx=\"2\"/><path d=\"M8 17V13M12 17V8M16 17V11\"/><path d=\"M3 20h18\"/>',\n} as const;\n\n/** Drakkar — Viking-UI / site shell brand marks (Lucide ship, build-time inlined). */\nexport const VIKING_DRAKKAR_ICON_PATHS = {\n /** Primary Drakkar longship mark (outline). */\n drakkar:\n '<path d=\"M12 10.189V14\"/><path d=\"M12 2v3\"/><path d=\"M19 13V7a2 2 0 0 0-2-2H7a2 2 0 0 0-2 2v6\"/><path d=\"M19.38 20A11.6 11.6 0 0 0 21 14l-8.188-3.639a2 2 0 0 0-1.624 0L3 14a11.6 11.6 0 0 0 2.81 7.76\"/><path d=\"M2 21c.6.5 1.2 1 2.5 1 2.5 0 2.5-2 5-2 1.3 0 1.9.5 2.5 1s1.2 1 2.5 1c2.5 0 2.5-2 5-2 1.3 0 1.9.5 2.5 1\"/>',\n /** Compact tile for favicons and dense navbar chrome. */\n \"drakkar-compact\":\n '<rect x=\"3\" y=\"3\" width=\"18\" height=\"18\" rx=\"2\"/><path d=\"M12 10.189V14\"/><path d=\"M12 2v3\"/><path d=\"M19 13V7a2 2 0 0 0-2-2H7a2 2 0 0 0-2 2v6\"/><path d=\"M19.38 20A11.6 11.6 0 0 0 21 14l-8.188-3.639a2 2 0 0 0-1.624 0L3 14a11.6 11.6 0 0 0 2.81 7.76\"/><path d=\"M2 21c.6.5 1.2 1 2.5 1 2.5 0 2.5-2 5-2 1.3 0 1.9.5 2.5 1s1.2 1 2.5 1c2.5 0 2.5-2 5-2 1.3 0 1.9.5 2.5 1\"/>',\n /** Lockup mark with baseline accent bar. */\n \"drakkar-lockup\":\n '<path d=\"M12 10.189V14\"/><path d=\"M12 2v3\"/><path d=\"M19 13V7a2 2 0 0 0-2-2H7a2 2 0 0 0-2 2v6\"/><path d=\"M19.38 20A11.6 11.6 0 0 0 21 14l-8.188-3.639a2 2 0 0 0-1.624 0L3 14a11.6 11.6 0 0 0 2.81 7.76\"/><path d=\"M2 21c.6.5 1.2 1 2.5 1 2.5 0 2.5-2 5-2 1.3 0 1.9.5 2.5 1s1.2 1 2.5 1c2.5 0 2.5-2 5-2 1.3 0 1.9.5 2.5 1\"/><path d=\"M3 21h18\"/>',\n} as const;\n\n/** Filled-path overrides for DEML brand marks. */\nexport const VIKING_BRAND_ICON_FILLED_PATHS: Partial<\n Record<keyof typeof VIKING_BRAND_ICON_PATHS, string>\n> = {\n deml: '<path d=\"M5 4a1 1 0 0 1 1-1h12a1 1 0 0 1 1 1v14a1 1 0 0 1-1 1H6a1 1 0 0 1-1-1V4zM8 13h2.5v4H8v-4zM12 8h2.5v9H12V8zM16 11h2.5v6H16v-6z\"/>',\n \"deml-compact\":\n '<path d=\"M6 5a1 1 0 0 1 1-1h10a1 1 0 0 1 1 1v12a1 1 0 0 1-1 1H7a1 1 0 0 1-1-1V5zM9 12h1.5v4H9v-4zM12 9h1.5v7H12V9zM15 11h1.5v5H15v-5z\"/>',\n \"deml-lockup\":\n '<path d=\"M4 4a1 1 0 0 1 1-1h14a1 1 0 0 1 1 1v11a1 1 0 0 1-1 1H5a1 1 0 0 1-1-1V4zM8 13h2.5v4H8v-4zM12 8h2.5v9H12V8zM16 11h2.5v6H16v-6z\"/><rect x=\"3\" y=\"19\" width=\"18\" height=\"2\" rx=\"1\"/>',\n};\n\n/** Filled-path overrides for Drakkar brand marks. */\nexport const VIKING_DRAKKAR_ICON_FILLED_PATHS: Partial<\n Record<keyof typeof VIKING_DRAKKAR_ICON_PATHS, string>\n> = {\n drakkar:\n '<path d=\"M7 5h10a2 2 0 0 1 2 2v3.5L20.8 14.2l-7.8-3.5a1.8 1.8 0 0 0-1.4 0L3.2 14.2a10.5 10.5 0 0 0 2.6 7.2L5.2 13V7a2 2 0 0 0-2-2z\"/><rect x=\"10.85\" y=\"2\" width=\"2.3\" height=\"12\" rx=\"0.4\"/>',\n \"drakkar-compact\":\n '<path d=\"M3 3h18a2 2 0 0 1 2 2v18a2 2 0 0 1-2 2H3a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2z\"/><path d=\"M7.5 12.5 12 9.8l4.5 2.7v2.2c0 .8-.5 1.4-1.2 1.7L12 17.8l-3.3-1.6c-.7-.3-1.2-.9-1.2-1.7v-2.2z\"/><rect x=\"11\" y=\"6\" width=\"2\" height=\"5.5\" rx=\"0.35\"/>',\n \"drakkar-lockup\":\n '<path d=\"M7 5h10a2 2 0 0 1 2 2v3.5L20.8 14.2l-7.8-3.5a1.8 1.8 0 0 0-1.4 0L3.2 14.2a10.5 10.5 0 0 0 2.6 7.2L5.2 13V7a2 2 0 0 0-2-2z\"/><rect x=\"10.85\" y=\"2\" width=\"2.3\" height=\"12\" rx=\"0.4\"/><rect x=\"3\" y=\"20\" width=\"18\" height=\"2\" rx=\"1\"/>',\n};\n\nexport type VikingBrandIconName = keyof typeof VIKING_BRAND_ICON_PATHS;\n\nexport type VikingDrakkarIconName = keyof typeof VIKING_DRAKKAR_ICON_PATHS;\n\nexport const VIKING_BRAND_ICON_NAMES_LIST = Object.keys(\n VIKING_BRAND_ICON_PATHS,\n) as VikingBrandIconName[];\n\nexport const VIKING_DRAKKAR_ICON_NAMES_LIST = Object.keys(\n VIKING_DRAKKAR_ICON_PATHS,\n) as VikingDrakkarIconName[];\n","/** Official platform brand colors — exception for recognizable integration marks (same policy as Google/Apple in viking-icon). */\nexport const VIKING_INTEGRATION_BRAND_COLORS = {\n kubernetes: \"#326CE5\",\n tensorflow: \"#FF6F00\",\n pytorch: \"#EE4C2C\",\n \"apache-spark\": \"#E25A1C\",\n databricks: \"#FF3621\",\n \"aws-redshift\": \"#8C4FFF\",\n} as const;\n\nexport type VikingIntegrationBrandName =\n keyof typeof VIKING_INTEGRATION_BRAND_COLORS;\n\nexport const VIKING_INTEGRATION_BRAND_NAMES = Object.keys(\n VIKING_INTEGRATION_BRAND_COLORS,\n) as VikingIntegrationBrandName[];\n\nexport const isIntegrationBrandIcon = (\n name: string,\n): name is VikingIntegrationBrandName =>\n (VIKING_INTEGRATION_BRAND_NAMES as readonly string[]).includes(name);\n\n/**\n * Official product logo paths (24×24 viewBox) sourced from Simple Icons (CC0).\n * Inlined at build time — no runtime icon font or CDN.\n */\nconst VIKING_INTEGRATION_BRAND_PATHS: Record<\n VikingIntegrationBrandName,\n string\n> = {\n kubernetes:\n \"M10.204 14.35l.007.01-.999 2.413a5.171 5.171 0 0 1-2.075-2.597l2.578-.437.004.005a.44.44 0 0 1 .484.606zm-.833-2.129a.44.44 0 0 0 .173-.756l.002-.011L7.585 9.7a5.143 5.143 0 0 0-.73 3.255l2.514-.725.002-.009zm1.145-1.98a.44.44 0 0 0 .699-.337l.01-.005.15-2.62a5.144 5.144 0 0 0-3.01 1.442l2.147 1.523.004-.002zm.76 2.75l.723.349.722-.347.18-.78-.5-.623h-.804l-.5.623.179.779zm1.5-3.095a.44.44 0 0 0 .7.336l.008.003 2.134-1.513a5.188 5.188 0 0 0-2.992-1.442l.148 2.615.002.001zm10.876 5.97l-5.773 7.181a1.6 1.6 0 0 1-1.248.594l-9.261.003a1.6 1.6 0 0 1-1.247-.596l-5.776-7.18a1.583 1.583 0 0 1-.307-1.34L2.1 5.573c.108-.47.425-.864.863-1.073L11.305.513a1.606 1.606 0 0 1 1.385 0l8.345 3.985c.438.209.755.604.863 1.073l2.062 8.955c.108.47-.005.963-.308 1.34zm-3.289-2.057c-.042-.01-.103-.026-.145-.034-.174-.033-.315-.025-.479-.038-.35-.037-.638-.067-.895-.148-.105-.04-.18-.165-.216-.216l-.201-.059a6.45 6.45 0 0 0-.105-2.332 6.465 6.465 0 0 0-.936-2.163c.052-.047.15-.133.177-.159.008-.09.001-.183.094-.282.197-.185.444-.338.743-.522.142-.084.273-.137.415-.242.032-.024.076-.062.11-.089.24-.191.295-.52.123-.736-.172-.216-.506-.236-.745-.045-.034.027-.08.062-.111.088-.134.116-.217.23-.33.35-.246.25-.45.458-.673.609-.097.056-.239.037-.303.033l-.19.135a6.545 6.545 0 0 0-4.146-2.003l-.012-.223c-.065-.062-.143-.115-.163-.25-.022-.268.015-.557.057-.905.023-.163.061-.298.068-.475.001-.04-.001-.099-.001-.142 0-.306-.224-.555-.5-.555-.275 0-.499.249-.499.555l.001.014c0 .041-.002.092 0 .128.006.177.044.312.067.475.042.348.078.637.056.906a.545.545 0 0 1-.162.258l-.012.211a6.424 6.424 0 0 0-4.166 2.003 8.373 8.373 0 0 1-.18-.128c-.09.012-.18.04-.297-.029-.223-.15-.427-.358-.673-.608-.113-.12-.195-.234-.329-.349-.03-.026-.077-.062-.111-.088a.594.594 0 0 0-.348-.132.481.481 0 0 0-.398.176c-.172.216-.117.546.123.737l.007.005.104.083c.142.105.272.159.414.242.299.185.546.338.743.522.076.082.09.226.1.288l.16.143a6.462 6.462 0 0 0-1.02 4.506l-.208.06c-.055.072-.133.184-.215.217-.257.081-.546.11-.895.147-.164.014-.305.006-.48.039-.037.007-.09.02-.133.03l-.004.002-.007.002c-.295.071-.484.342-.423.608.061.267.349.429.645.365l.007-.001.01-.003.129-.029c.17-.046.294-.113.448-.172.33-.118.604-.217.87-.256.112-.009.23.069.288.101l.217-.037a6.5 6.5 0 0 0 2.88 3.596l-.09.218c.033.084.069.199.044.282-.097.252-.263.517-.452.813-.091.136-.185.242-.268.399-.02.037-.045.095-.064.134-.128.275-.034.591.213.71.248.12.556-.007.69-.282v-.002c.02-.039.046-.09.062-.127.07-.162.094-.301.144-.458.132-.332.205-.68.387-.897.05-.06.13-.082.215-.105l.113-.205a6.453 6.453 0 0 0 4.609.012l.106.192c.086.028.18.042.256.155.136.232.229.507.342.84.05.156.074.295.145.457.016.037.043.09.062.129.133.276.442.402.69.282.247-.118.341-.435.213-.71-.02-.039-.045-.096-.065-.134-.083-.156-.177-.261-.268-.398-.19-.296-.346-.541-.443-.793-.04-.13.007-.21.038-.294-.018-.022-.059-.144-.083-.202a6.499 6.499 0 0 0 2.88-3.622c.064.01.176.03.213.038.075-.05.144-.114.28-.104.266.039.54.138.87.256.154.06.277.128.448.173.036.01.088.019.13.028l.009.003.007.001c.297.064.584-.098.645-.365.06-.266-.128-.537-.423-.608zM16.4 9.701l-1.95 1.746v.005a.44.44 0 0 0 .173.757l.003.01 2.526.728a5.199 5.199 0 0 0-.108-1.674A5.208 5.208 0 0 0 16.4 9.7zm-4.013 5.325a.437.437 0 0 0-.404-.232.44.44 0 0 0-.372.233h-.002l-1.268 2.292a5.164 5.164 0 0 0 3.326.003l-1.27-2.296h-.01zm1.888-1.293a.44.44 0 0 0-.27.036.44.44 0 0 0-.214.572l-.003.004 1.01 2.438a5.15 5.15 0 0 0 2.081-2.615l-2.6-.44-.004.005z\",\n tensorflow:\n \"M1.292 5.856L11.54 0v24l-4.095-2.378V7.603l-6.168 3.564.015-5.31zm21.43 5.311l-.014-5.31L12.46 0v24l4.095-2.378V14.87l3.092 1.788-.018-4.618-3.074-1.756V7.603l6.168 3.564z\",\n pytorch:\n \"M12.005 0L4.952 7.053a9.865 9.865 0 000 14.022 9.866 9.866 0 0014.022 0c3.984-3.9 3.986-10.205.085-14.023l-1.744 1.743c2.904 2.905 2.904 7.634 0 10.538s-7.634 2.904-10.538 0-2.904-7.634 0-10.538l4.647-4.646.582-.665zm3.568 3.899a1.327 1.327 0 00-1.327 1.327 1.327 1.327 0 001.327 1.328A1.327 1.327 0 0016.9 5.226 1.327 1.327 0 0015.573 3.9z\",\n \"apache-spark\":\n \"M10.812 0c-.425.013-.845.215-1.196.605a3.593 3.593 0 00-.493.722c-.355.667-.425 1.415-.556 2.143a551.9 551.9 0 00-.726 4.087c-.027.16-.096.227-.244.273C5.83 8.386 4.06 8.94 2.3 9.514c-.387.125-.773.289-1.114.506-1.042.665-1.196 1.753-.415 2.71.346.422.79.715 1.284.936 1.1.49 2.202.976 3.3 1.47.019.01.036.013.053.019h-.004l1.306.535c0 .023.002.045 0 .073-.2 2.03-.39 4.063-.58 6.095-.04.419-.012.831.134 1.23.317.87 1.065 1.148 1.881.701.372-.204.666-.497.937-.818 1.372-1.623 2.746-3.244 4.113-4.872.111-.133.205-.15.363-.098.349.117.697.231 1.045.347h.001c.02.012.045.02.073.03l.142.042c1.248.416 2.68.775 3.929 1.19.4.132.622.164 1.045.098.311-.048.592-.062.828-.236.602-.33.995-.957.988-1.682-.005-.427-.154-.813-.35-1.186-.82-1.556-1.637-3.113-2.461-4.666-.078-.148-.076-.243.037-.375 1.381-1.615 2.756-3.236 4.133-4.855.272-.32.513-.658.653-1.058.308-.878-.09-1.57-1-1.741a2.783 2.783 0 00-1.235.069c-1.974.521-3.947 1.041-5.918 1.57-.175.047-.26.015-.355-.144a353.08 353.08 0 00-2.421-4.018 4.61 4.61 0 00-.652-.849c-.371-.37-.802-.549-1.227-.536zm.172 3.703a.592.592 0 01.189.211c.87 1.446 1.742 2.89 2.609 4.338.07.118.135.16.277.121 1.525-.41 3.052-.813 4.579-1.217.367-.098.735-.193 1.103-.289a.399.399 0 01-.1.2c-1.259 1.48-2.516 2.962-3.779 4.438-.11.13-.12.22-.04.37.937 1.803 1.768 3.309 2.498 4.76l-3.696-1.019c-.538-.18-1.077-.358-1.615-.539-.163-.055-.25-.03-.36.1-1.248 1.488-2.504 2.97-3.759 4.454a.398.398 0 01-.18.132c.035-.378.068-.757.104-1.136.149-1.572.297-3.144.451-4.716-.03-.318.117-.405-.322-.545-1.493-.593-3.346-1.321-4.816-1.905a.595.595 0 01.24-.134c1.797-.57 3.595-1.14 5.394-1.705.127-.04.199-.092.211-.233.013-.148.05-.294.076-.441.241-1.363.483-2.726.726-4.088.068-.386.14-.771.21-1.157z\",\n databricks:\n \"M.95 14.184L12 20.403l9.919-5.55v2.21L12 22.662l-10.484-5.96-.565.308v.77L12 24l11.05-6.218v-4.317l-.515-.309L12 19.118l-9.867-5.653v-2.21L12 16.805l11.05-6.218V6.32l-.515-.308L12 11.974 2.647 6.681 12 1.388l7.76 4.368.668-.411v-.566L12 0 .95 6.27v.72L12 13.207l9.919-5.55v2.26L12 15.52 1.516 9.56l-.565.308Z\",\n \"aws-redshift\":\n \"M16.639 9.932a.822.822 0 0 1-.822-.82.823.823 0 0 1 1.645 0c0 .452-.37.82-.823.82m-2.086 4.994a.823.823 0 0 1-.822-.822.822.822 0 0 1 1.645 0 .822.822 0 0 1-.823.822m-5.004-.833a.822.822 0 1 1 .002-1.644.822.822 0 0 1-.002 1.644m-2.083 4.578a.823.823 0 0 1-.823-.82.823.823 0 0 1 1.645 0c0 .452-.37.82-.822.82m9.173-11.236a1.68 1.68 0 0 0-1.68 1.676c0 .566.285 1.066.718 1.37l-.782 1.982a1.674 1.674 0 0 0-1.923 1.104l-1.753-.398a1.675 1.675 0 0 0-3.348.103c0 .432.169.823.438 1.12l-.764 1.79c-.028-.001-.053-.008-.08-.008a1.68 1.68 0 0 0-1.68 1.676 1.68 1.68 0 0 0 3.36 0c0-.593-.312-1.112-.778-1.41l.674-1.579c.161.052.33.088.508.088.661 0 1.228-.386 1.502-.94l1.856.42a1.68 1.68 0 0 0 3.327-.325c0-.5-.224-.943-.574-1.25l.822-2.083c.053.005.104.016.157.016a1.68 1.68 0 0 0 1.68-1.676 1.68 1.68 0 0 0-1.68-1.676M12 23.145c-4.17 0-7.286-1.252-7.286-2.37V4.79C6.14 5.938 9.131 6.547 12 6.547c2.869 0 5.86-.609 7.286-1.756v15.983c0 1.12-3.116 2.37-7.286 2.37M12 .856c4.293 0 7.286 1.274 7.286 2.419 0 1.143-2.993 2.418-7.286 2.418-4.293 0-7.286-1.275-7.286-2.418C4.714 2.129 7.707.855 12 .855m8.143 2.419C20.143 1.147 15.947 0 12 0 8.052 0 3.857 1.147 3.857 3.274l.002.01h-.002v17.49C3.857 22.87 8.052 24 12 24c3.947 0 8.143-1.13 8.143-3.226V3.284h-.002l.002-.01\",\n};\n\nconst integrationBrandSvg = (name: VikingIntegrationBrandName): string => {\n const fill = VIKING_INTEGRATION_BRAND_COLORS[name];\n const d = VIKING_INTEGRATION_BRAND_PATHS[name];\n return `<path fill=\"${fill}\" d=\"${d}\"/>`;\n};\n\n/** Multi-path brand SVG markup (24×24 viewBox) — official product logos at brand hue. */\nexport const VIKING_INTEGRATION_BRAND_SVGS: Record<\n VikingIntegrationBrandName,\n string\n> = {\n kubernetes: integrationBrandSvg(\"kubernetes\"),\n tensorflow: integrationBrandSvg(\"tensorflow\"),\n pytorch: integrationBrandSvg(\"pytorch\"),\n \"apache-spark\": integrationBrandSvg(\"apache-spark\"),\n databricks: integrationBrandSvg(\"databricks\"),\n \"aws-redshift\": integrationBrandSvg(\"aws-redshift\"),\n};\n\n/** Path markup for icon registry / viking-icon-paths.json sync. */\nexport const VIKING_INTEGRATION_ICON_PATHS = Object.fromEntries(\n (\n Object.entries(VIKING_INTEGRATION_BRAND_PATHS) as [\n VikingIntegrationBrandName,\n string,\n ][]\n ).map(([name, d]) => [name, `<path d=\"${d}\"/>`]),\n) as Record<VikingIntegrationBrandName, string>;\n\nexport type VikingIntegrationIconName = VikingIntegrationBrandName;\n\nexport const VIKING_INTEGRATION_ICON_NAMES_LIST =\n VIKING_INTEGRATION_BRAND_NAMES;\n","/**\n * Zero-dependency inline SVG icon registry (24×24 stroke icons).\n * Lucide paths are synced at build time; DEML brand marks are custom artwork.\n */\nimport { LUCIDE_ICON_PATHS } from \"./lucide-paths.generated\";\nimport {\n VIKING_BRAND_ICON_FILLED_PATHS,\n VIKING_BRAND_ICON_PATHS,\n VIKING_BRAND_ICON_NAMES_LIST,\n VIKING_DRAKKAR_ICON_FILLED_PATHS,\n VIKING_DRAKKAR_ICON_PATHS,\n VIKING_DRAKKAR_ICON_NAMES_LIST,\n} from \"./brand-icons\";\nimport {\n VIKING_INTEGRATION_ICON_PATHS,\n VIKING_INTEGRATION_ICON_NAMES_LIST,\n} from \"./integration-brand-icons\";\n\nexport {\n VIKING_DRAKKAR_ICON_NAMES_LIST,\n VIKING_BRAND_ICON_NAMES_LIST,\n} from \"./brand-icons\";\nexport {\n VIKING_INTEGRATION_ICON_NAMES_LIST,\n type VikingIntegrationIconName,\n} from \"./integration-brand-icons\";\n\nexport type VikingIconName = keyof typeof VIKING_ICON_PATHS;\n\nexport type VikingIconSizePreset = \"sm\" | \"md\" | \"lg\";\n\nexport type VikingIconVariant = \"outline\" | \"filled\";\n\n/** Semantic color tokens resolved to CSS custom properties. */\nexport type VikingIconColorToken =\n | \"inherit\"\n | \"accent\"\n | \"success\"\n | \"warning\"\n | \"danger\"\n | \"info\"\n | \"muted\"\n | \"text\";\n\n/** Pixel sizes for sm / md / lg presets. */\nexport const VIKING_ICON_SIZE_PRESETS: Record<VikingIconSizePreset, number> = {\n sm: 16,\n md: 20,\n lg: 24,\n} as const;\n\n/** Custom icons not covered by Lucide (hub topology, ML model tile, OAuth stubs). */\nconst VIKING_CUSTOM_ICON_PATHS = {\n hub: '<circle cx=\"12\" cy=\"12\" r=\"3\"/><path d=\"M12 3v3M12 18v3M3 12h3M18 12h3M5.6 5.6l2.1 2.1M16.3 16.3l2.1 2.1M18.4 5.6l-2.1 2.1M7.7 16.3l-2.1 2.1\"/>',\n model:\n '<rect x=\"4\" y=\"8\" width=\"16\" height=\"10\" rx=\"2\"/><path d=\"M8 8V6a4 4 0 0 1 8 0v2\"/>',\n google:\n '<path d=\"M12 11.2v2.4h6.6c-.3 1.5-1.8 4.4-6.6 4.4-4 0-7.2-3.3-7.2-7.3S8 3.4 12 3.4c2.3 0 3.9 1 4.8 1.8l3.2-3.1C17.5.8 14.9 0 12 0 5.4 0 0 5.4 0 12s5.4 12 12 12c6.9 0 11.5-4.8 11.5-11.6 0-.8-.1-1.4-.2-1.9H12z\"/>',\n apple:\n '<path d=\"M16.365 12.14c.02 2.53 2.21 3.38 2.23 3.39-.02.07-.35 1.21-1.16 2.4-.7 1.02-1.43 2.03-2.58 2.05-1.13.02-1.49-.67-2.78-.67-1.29 0-1.69.65-2.75.69-1.11.04-1.95-1.12-2.66-2.13-1.44-2.08-2.54-5.87-1.07-8.43.73-1.27 2.04-2.08 3.46-2.1 1.08-.02 2.1.72 2.78.72.67 0 2.14-.89 3.61-.76.61.03 2.33.25 3.44 1.88-.09.06-2.05 1.2-2.03 3.55M13.75 3.64c.59-.71 1-1.7.89-2.68-.86.03-1.9.57-2.52 1.28-.55.63-1.03 1.65-.9 2.62.95.07 1.92-.49 2.53-1.22\"/>',\n} as const;\n\nexport const VIKING_ICON_PATHS = {\n ...LUCIDE_ICON_PATHS,\n ...VIKING_BRAND_ICON_PATHS,\n ...VIKING_DRAKKAR_ICON_PATHS,\n ...VIKING_INTEGRATION_ICON_PATHS,\n ...VIKING_CUSTOM_ICON_PATHS,\n} as const;\n\n/** Filled-path overrides used when variant=\"filled\" (brand marks, solid shapes). */\nexport const VIKING_ICON_FILLED_PATHS: Partial<Record<VikingIconName, string>> =\n {\n ...VIKING_BRAND_ICON_FILLED_PATHS,\n ...VIKING_DRAKKAR_ICON_FILLED_PATHS,\n };\n\n/** Legacy Material Icons ligature names → Viking icon registry keys. */\nexport const MATERIAL_ICON_ALIASES: Record<string, VikingIconName> = {\n analytics: \"deml\",\n security: \"shield\",\n link: \"link\",\n visibility: \"eye\",\n shield: \"shield\",\n trending_up: \"trending-up\",\n lock: \"lock\",\n fingerprint: \"fingerprint\",\n gpp_maybe: \"shield\",\n verified_user: \"user-shield\",\n bolt: \"bolt\",\n cloud: \"cloud\",\n lan: \"network\",\n hub: \"hub\",\n speed: \"speed\",\n rocket_launch: \"rocket\",\n insights: \"insights\",\n check: \"check\",\n description: \"file\",\n vpn_key: \"key\",\n policy: \"policy\",\n bug_report: \"bug\",\n search: \"search\",\n chevron_left: \"chevron-left\",\n chevron_right: \"chevron-right\",\n verified: \"check-circle\",\n warning: \"alert-triangle\",\n close: \"x\",\n account_balance: \"building\",\n send: \"send\",\n check_circle: \"check-circle\",\n play_circle: \"play\",\n input: \"terminal\",\n model_training: \"model\",\n auto_awesome: \"sparkle\",\n error_outline: \"alert-circle\",\n home: \"home\",\n cookie: \"cookie\",\n search_off: \"search-off\",\n person_add: \"user\",\n storage: \"aws-redshift\",\n data_object: \"aws-redshift\",\n memory: \"tensorflow\",\n psychology: \"pytorch\",\n dns: \"server\",\n login: \"log-in\",\n};\n\n/** Icons always rendered with fill (play triangle, dot grids). */\nexport const VIKING_FILLED_ICON_NAMES = [\n \"play\",\n \"dots-horizontal\",\n \"dots-vertical\",\n \"grip-vertical\",\n] as const satisfies readonly VikingIconName[];\n\n/** OAuth / vendor marks rendered with official brand artwork in viking-icon. */\nexport const VIKING_BRAND_ICON_NAMES = [\n \"google\",\n \"apple\",\n ...VIKING_BRAND_ICON_NAMES_LIST,\n] as const satisfies readonly VikingIconName[];\n\nconst VIKING_ICON_COLOR_TOKENS: Record<\n Exclude<VikingIconColorToken, \"inherit\">,\n string\n> = {\n accent: \"var(--viking-accent)\",\n success: \"var(--viking-success)\",\n warning: \"var(--viking-warning)\",\n danger: \"var(--viking-danger)\",\n info: \"var(--viking-info)\",\n muted: \"var(--viking-text-muted)\",\n text: \"var(--viking-text)\",\n};\n\nexport const vikingIconViewBox = (_name: VikingIconName): string => \"0 0 24 24\";\n\n/** Resolve pixel size from preset or explicit value. */\nexport const resolveVikingIconSize = (\n size: number | undefined,\n preset: VikingIconSizePreset | null | undefined,\n): number => {\n if (preset) {\n return VIKING_ICON_SIZE_PRESETS[preset];\n }\n return size ?? VIKING_ICON_SIZE_PRESETS.lg;\n};\n\n/** Resolve semantic color token or raw CSS value for icon tinting. */\nexport const resolveVikingIconColor = (\n color: VikingIconColorToken | string | undefined,\n): string | undefined => {\n if (!color || color === \"inherit\") {\n return undefined;\n }\n if (color in VIKING_ICON_COLOR_TOKENS) {\n return VIKING_ICON_COLOR_TOKENS[\n color as Exclude<VikingIconColorToken, \"inherit\">\n ];\n }\n return color;\n};\n\nconst VIKING_ICON_PATH_KEYS = new Set(Object.keys(VIKING_ICON_PATHS));\n\n/** Resolve a Viking or legacy Material icon name to a registry key. */\nexport const resolveVikingIcon = (name: string): VikingIconName => {\n const normalized = name.trim().toLowerCase().replace(/\\s+/g, \"_\");\n if (VIKING_ICON_PATH_KEYS.has(normalized)) {\n return normalized as VikingIconName;\n }\n const alias = MATERIAL_ICON_ALIASES[normalized];\n if (alias) {\n return alias;\n }\n return \"info\";\n};\n\nexport const VIKING_ICON_NAMES = Object.keys(\n VIKING_ICON_PATHS,\n) as VikingIconName[];\n\n/** Lucide-sourced icon names (for docs and showcase grouping). */\nexport const VIKING_LUCIDE_ICON_NAMES = Object.keys(\n LUCIDE_ICON_PATHS,\n) as (keyof typeof LUCIDE_ICON_PATHS)[];\n","import {\n resolveVikingIcon,\n VIKING_FILLED_ICON_NAMES,\n VIKING_ICON_FILLED_PATHS,\n VIKING_ICON_PATHS,\n type VikingIconName,\n} from \"../../lib/core/icons\";\n\nconst FILLED_ICON_SET = new Set<string>(VIKING_FILLED_ICON_NAMES);\n\n/**\n * Renders a zero-dependency inline SVG icon for Web Components.\n * Uses the same registry as `viking-icon` in Angular.\n */\nexport const renderInlineIcon = (\n name: string,\n size = 16,\n className = \"viking-wc-icon\",\n): string => {\n const resolved = resolveVikingIcon(name);\n const filled = FILLED_ICON_SET.has(resolved);\n const paths = filled\n ? (VIKING_ICON_FILLED_PATHS[resolved as VikingIconName] ??\n VIKING_ICON_PATHS[resolved])\n : VIKING_ICON_PATHS[resolved];\n\n if (filled) {\n return `<svg class=\"${className}\" width=\"${size}\" height=\"${size}\" viewBox=\"0 0 24 24\" fill=\"currentColor\" fill-rule=\"evenodd\" aria-hidden=\"true\">${paths}</svg>`;\n }\n\n return `<svg class=\"${className}\" width=\"${size}\" height=\"${size}\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\">${paths}</svg>`;\n};\n\n/** Default tone → icon mapping shared by callout and badge surfaces. */\nexport const TONE_ICON_NAMES: Record<string, string> = {\n accent: \"info\",\n secondary: \"info\",\n success: \"check-circle\",\n warning: \"alert-triangle\",\n danger: \"alert-circle\",\n info: \"info\",\n muted: \"info\",\n subtle: \"info\",\n};\n","/**\n * Shadow DOM styles for Viking-UI Web Components.\n * All values reference --viking-* tokens inherited from the document :root.\n */\n\nexport const VIKING_BUTTON_STYLES = `\n:host {\n display: inline-flex;\n font-family: var(--viking-font-family);\n}\n\n:host([full-width]) {\n display: flex;\n width: 100%;\n}\n\n:host([full-width]) .viking-btn {\n width: 100%;\n min-width: 0;\n}\n\n:host([compact]) .viking-btn {\n min-width: 0;\n}\n\n:host([square]) {\n flex: 0 0 auto;\n}\n\n.viking-btn {\n font-family: inherit;\n font-size: var(--viking-font-size-ui, var(--viking-font-size-sm));\n font-weight: var(--viking-font-weight-semibold);\n letter-spacing: var(--viking-letter-spacing-wide);\n line-height: var(--viking-line-height-snug);\n display: inline-flex;\n align-items: center;\n justify-content: center;\n gap: var(--viking-space-1);\n min-height: var(--viking-control-height);\n padding: 0 var(--viking-control-padding-x);\n border-radius: var(--viking-radius);\n border: 1px solid transparent;\n cursor: pointer;\n text-decoration: none;\n transition: var(--viking-transition-interactive);\n width: auto;\n min-width: var(--viking-btn-min-width, 120px);\n white-space: nowrap;\n position: relative;\n user-select: none;\n -webkit-tap-highlight-color: transparent;\n box-sizing: border-box;\n}\n\n.viking-btn:focus-visible {\n outline: var(--viking-ring-width) solid var(--viking-ring);\n outline-offset: var(--viking-ring-offset);\n z-index: 1;\n}\n\n.viking-btn:disabled,\n.viking-btn[aria-busy='true'] {\n opacity: var(--viking-state-disabled-opacity);\n cursor: not-allowed;\n transform: none !important;\n box-shadow: none !important;\n}\n\n.viking-btn-sm {\n min-height: var(--viking-control-height-sm);\n padding: 0 var(--viking-space-2);\n font-size: var(--viking-font-size-xs);\n min-width: auto;\n}\n\n.viking-btn-xs {\n min-height: var(--viking-control-height-xs);\n padding: 0 var(--viking-space-1);\n font-size: var(--viking-font-size-xs);\n min-width: auto;\n}\n\n.viking-btn-square {\n display: inline-grid;\n place-items: center;\n width: var(--viking-control-height);\n min-width: var(--viking-control-height);\n max-width: var(--viking-control-height);\n height: var(--viking-control-height);\n min-height: var(--viking-control-height);\n padding: 0;\n line-height: 1;\n}\n\n.viking-btn-square.viking-btn-sm {\n width: var(--viking-control-height-sm);\n min-width: var(--viking-control-height-sm);\n max-width: var(--viking-control-height-sm);\n height: var(--viking-control-height-sm);\n min-height: var(--viking-control-height-sm);\n}\n\n.viking-btn-square.viking-btn-xs {\n width: var(--viking-control-height-xs);\n min-width: var(--viking-control-height-xs);\n max-width: var(--viking-control-height-xs);\n height: var(--viking-control-height-xs);\n min-height: var(--viking-control-height-xs);\n}\n\n.viking-btn-square .viking-btn-label {\n display: inline-grid;\n place-items: center;\n width: 100%;\n height: 100%;\n line-height: 1;\n}\n\n.viking-btn-square ::slotted(*) {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n margin: 0;\n line-height: 1;\n}\n\n.viking-btn-square ::slotted(svg),\n.viking-btn-square ::slotted([data-viking-icon]) {\n width: var(--viking-icon-size-md, 20px);\n height: var(--viking-icon-size-md, 20px);\n}\n\n.viking-btn-outline {\n background: var(--viking-surface);\n color: var(--viking-text);\n border-color: var(--viking-border-strong);\n box-shadow: var(--viking-shadow-sm);\n}\n\n.viking-btn-outline:hover:not(:disabled):not([aria-busy='true']) {\n background: var(--viking-surface-alt);\n border-color: color-mix(in srgb, var(--viking-accent) 45%, var(--viking-border-strong));\n box-shadow: var(--viking-shadow-md);\n transform: translateY(var(--viking-state-hover-lift));\n}\n\n.viking-btn-primary {\n background: var(--viking-accent);\n color: var(--viking-accent-content);\n border-color: color-mix(in srgb, var(--viking-accent) 82%, var(--viking-black));\n box-shadow: var(--viking-shadow-sm);\n}\n\n.viking-btn-primary:hover:not(:disabled):not([aria-busy='true']) {\n background: var(--viking-accent-hover);\n border-color: var(--viking-accent-hover);\n box-shadow: var(--viking-shadow-hover);\n transform: translateY(var(--viking-state-hover-lift));\n}\n\n.viking-btn-secondary {\n background: var(--viking-accent-secondary);\n color: var(--viking-accent-secondary-content);\n border-color: color-mix(in srgb, var(--viking-accent-secondary) 82%, var(--viking-black));\n box-shadow: var(--viking-shadow-sm);\n}\n\n.viking-btn-secondary:hover:not(:disabled):not([aria-busy='true']) {\n background: var(--viking-accent-secondary-hover);\n border-color: var(--viking-accent-secondary-hover);\n box-shadow: var(--viking-shadow-hover);\n transform: translateY(var(--viking-state-hover-lift));\n}\n\n.viking-btn-filled {\n background: var(--viking-surface-alt);\n color: var(--viking-text);\n border-color: var(--viking-border);\n box-shadow: var(--viking-shadow-xs);\n}\n\n.viking-btn-filled:hover:not(:disabled):not([aria-busy='true']) {\n border-color: color-mix(in srgb, var(--viking-accent) 45%, var(--viking-border));\n background: color-mix(in srgb, var(--viking-accent) 8%, var(--viking-surface-alt));\n box-shadow: var(--viking-shadow-sm);\n transform: translateY(var(--viking-state-hover-lift));\n}\n\n.viking-btn-danger {\n background: var(--viking-danger);\n color: var(--viking-on-danger);\n border-color: color-mix(in srgb, var(--viking-danger) 85%, var(--viking-black));\n box-shadow: var(--viking-shadow-sm);\n}\n\n.viking-btn-danger:hover:not(:disabled):not([aria-busy='true']) {\n background: color-mix(in srgb, var(--viking-danger) 88%, var(--viking-white));\n box-shadow: var(--viking-shadow-hover);\n transform: translateY(var(--viking-state-hover-lift));\n}\n\n.viking-btn-ghost {\n background: transparent;\n color: var(--viking-text);\n min-width: auto;\n box-shadow: none;\n border-color: transparent;\n}\n\n.viking-btn-ghost:hover:not(:disabled):not([aria-busy='true']) {\n background: var(--viking-accent-soft);\n color: var(--viking-accent-strong);\n}\n\n.viking-btn-subtle {\n background: transparent;\n color: var(--viking-text-muted);\n border-color: var(--viking-border-subtle);\n min-width: auto;\n box-shadow: none;\n}\n\n.viking-btn-subtle:hover:not(:disabled):not([aria-busy='true']) {\n color: var(--viking-text);\n background: var(--viking-accent-soft);\n border-color: var(--viking-border-strong);\n}\n\n.viking-btn:active:not(:disabled):not([aria-busy='true']) {\n transform: translateY(0) scale(var(--viking-state-active-scale));\n}\n\n.viking-btn-label {\n display: inline-flex;\n align-items: center;\n line-height: inherit;\n}\n\n.viking-btn-spinner {\n width: 1.125rem;\n height: 1.125rem;\n border: 2px solid currentColor;\n border-right-color: transparent;\n border-radius: 50%;\n animation: viking-spin 0.8s linear infinite;\n}\n\n@keyframes viking-spin {\n to { transform: rotate(360deg); }\n}\n\n@media (prefers-reduced-motion: reduce) {\n .viking-btn-spinner { animation-duration: 0.01ms; }\n .viking-btn { transition-duration: 0.01ms; }\n}\n`;\n\nexport const VIKING_INPUT_STYLES = `\n:host {\n display: block;\n font-family: var(--viking-font-family);\n}\n\n.viking-input-shell {\n display: flex;\n align-items: center;\n gap: var(--viking-space-1);\n min-height: var(--viking-control-height);\n padding: 0 var(--viking-space-2);\n font-family: inherit;\n font-size: var(--viking-font-size);\n color: var(--viking-text);\n background: var(--viking-surface-alt);\n border: 1px solid var(--viking-border);\n border-radius: var(--viking-radius-sm);\n box-shadow: var(--viking-shadow-xs);\n transition: var(--viking-transition-interactive);\n width: 100%;\n min-width: 0;\n box-sizing: border-box;\n}\n\n.viking-input-shell:hover:not(.viking-disabled):not(.viking-loading) {\n border-color: color-mix(in srgb, var(--viking-accent) 35%, var(--viking-border-strong));\n box-shadow: var(--viking-shadow-sm);\n}\n\n.viking-input-shell:focus-within:not(.viking-loading) {\n outline: var(--viking-ring-width) solid var(--viking-ring);\n outline-offset: var(--viking-ring-offset);\n border-color: var(--viking-accent);\n box-shadow: var(--viking-shadow-sm);\n}\n\n.viking-input-shell.viking-disabled,\n.viking-input-shell.viking-loading {\n opacity: var(--viking-state-disabled-opacity);\n}\n\n.viking-input-shell.viking-loading {\n cursor: wait;\n}\n\n.viking-input-native {\n flex: 1;\n min-width: 0;\n width: 100%;\n border: none;\n outline: none !important;\n background: transparent;\n color: var(--viking-text);\n font-family: inherit;\n font-size: inherit;\n padding: 0;\n}\n\n.viking-input-native::placeholder {\n color: var(--viking-text-muted);\n}\n\ninput {\n flex: 1;\n min-width: 0;\n border: none;\n outline: none !important;\n background: transparent;\n color: var(--viking-text);\n font-family: inherit;\n font-size: inherit;\n padding: 0;\n}\n\ninput::placeholder {\n color: var(--viking-text-muted);\n}\n\ninput:disabled {\n cursor: not-allowed;\n}\n\n.viking-input-clear {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n min-width: var(--viking-touch-target-comfort, 44px);\n min-height: var(--viking-touch-target-comfort, 44px);\n border: none;\n background: transparent;\n color: var(--viking-text-muted);\n cursor: pointer;\n padding: var(--viking-space-half);\n border-radius: var(--viking-radius-pill);\n transition: var(--viking-transition-interactive);\n flex-shrink: 0;\n -webkit-tap-highlight-color: transparent;\n}\n\n.viking-input-clear:hover {\n color: var(--viking-text);\n background: var(--viking-accent-soft);\n}\n\n.viking-input-clear:focus-visible {\n outline: var(--viking-ring-width) solid var(--viking-ring);\n outline-offset: var(--viking-ring-offset);\n}\n\n.viking-input-spinner {\n width: 1rem;\n height: 1rem;\n border: 2px solid var(--viking-text-muted);\n border-right-color: transparent;\n border-radius: 50%;\n animation: viking-spin 0.8s linear infinite;\n flex-shrink: 0;\n}\n\n@keyframes viking-spin {\n to { transform: rotate(360deg); }\n}\n`;\n\nexport const VIKING_FIELD_STYLES = `\n:host {\n display: block;\n font-family: var(--viking-font-family);\n color: var(--viking-text);\n min-width: 0;\n}\n\n:host([hidden]) {\n display: none;\n}\n\n:host([width='full']) {\n width: 100%;\n}\n\n:host([width='half']) {\n width: 100%;\n max-width: var(--viking-select-half-max-width, min(100%, 24rem));\n}\n\n.viking-field {\n display: flex;\n flex-direction: column;\n gap: var(--viking-space-1);\n}\n\n.viking-field-label-row {\n display: flex;\n align-items: baseline;\n justify-content: space-between;\n gap: var(--viking-space-2);\n}\n\n.viking-field-label {\n display: inline-flex;\n align-items: center;\n gap: var(--viking-space-half);\n font-size: var(--viking-font-size-ui);\n font-weight: var(--viking-font-weight-bold);\n color: var(--viking-text);\n line-height: var(--viking-line-height-snug);\n cursor: pointer;\n}\n\n.viking-field-required {\n color: var(--viking-danger-text);\n}\n\n.viking-field-control {\n min-width: 0;\n}\n\n.viking-field-description,\n.viking-field-error {\n margin: 0;\n font-size: var(--viking-font-size-xs);\n line-height: var(--viking-line-height-relaxed);\n}\n\n.viking-field-description {\n color: var(--viking-text-muted);\n}\n\n.viking-field-error {\n color: var(--viking-danger-text);\n}\n`;\n\nexport const VIKING_BADGE_STYLES = `\n:host {\n display: inline-flex;\n align-items: center;\n gap: var(--viking-space-half);\n padding: var(--viking-space-half) var(--viking-space-1);\n font-family: var(--viking-font-family);\n font-size: var(--viking-font-size-xs);\n font-weight: var(--viking-font-weight-semibold);\n letter-spacing: var(--viking-letter-spacing-wide);\n line-height: var(--viking-line-height-snug);\n border-radius: var(--viking-radius-pill);\n border: 1px solid var(--viking-border);\n background: var(--viking-surface-alt);\n color: var(--viking-text);\n white-space: nowrap;\n transition: var(--viking-transition-interactive);\n box-shadow: var(--viking-shadow-xs);\n}\n\n:host([size='sm']) {\n padding: 0 var(--viking-space-1);\n font-size: var(--viking-font-size-2xs);\n}\n\n:host([tone='accent']) {\n background: var(--viking-accent);\n border-color: color-mix(in srgb, var(--viking-accent) 80%, var(--viking-black));\n color: var(--viking-accent-content);\n box-shadow: var(--viking-shadow-sm);\n}\n\n:host([tone='secondary']) {\n background: color-mix(in srgb, var(--viking-accent-secondary) 16%, var(--viking-surface));\n border-color: color-mix(in srgb, var(--viking-accent-secondary) 55%, transparent);\n color: var(--viking-accent-secondary);\n}\n\n:host([tone='success']) {\n background: color-mix(in srgb, var(--viking-success) 16%, var(--viking-surface));\n border-color: color-mix(in srgb, var(--viking-success) 55%, transparent);\n color: var(--viking-success);\n}\n\n:host([tone='warning']) {\n background: color-mix(in srgb, var(--viking-warning) 18%, var(--viking-surface));\n border-color: color-mix(in srgb, var(--viking-warning) 55%, transparent);\n color: var(--viking-warning);\n}\n\n:host([tone='danger']) {\n background: color-mix(in srgb, var(--viking-danger) 14%, var(--viking-surface));\n border-color: color-mix(in srgb, var(--viking-danger) 50%, transparent);\n color: var(--viking-danger-text);\n}\n\n:host([tone='info']) {\n background: color-mix(in srgb, var(--viking-info) 14%, var(--viking-surface));\n border-color: color-mix(in srgb, var(--viking-info) 50%, transparent);\n color: var(--viking-info);\n}\n\n:host([tone='muted']),\n:host([tone='subtle']) {\n color: var(--viking-text-muted);\n background: var(--viking-surface);\n border-color: var(--viking-border-subtle);\n}\n\n.viking-wc-icon {\n flex-shrink: 0;\n}\n\n.viking-badge-remove {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n min-width: var(--viking-touch-target-comfort, 44px);\n min-height: var(--viking-touch-target-comfort, 44px);\n border: none;\n background: transparent;\n color: currentColor;\n cursor: pointer;\n padding: var(--viking-space-half);\n border-radius: var(--viking-radius-pill);\n transition: var(--viking-transition-interactive);\n margin-left: calc(var(--viking-space-half) * -1);\n}\n\n.viking-badge-remove:hover {\n background: color-mix(in srgb, currentColor 12%, transparent);\n}\n\n.viking-badge-remove:focus-visible {\n outline: var(--viking-ring-width) solid var(--viking-ring);\n outline-offset: var(--viking-ring-offset);\n}\n`;\n\nexport const VIKING_CALLOUT_STYLES = `\n:host {\n display: block;\n font-family: var(--viking-font-family);\n}\n\n:host([hidden]) {\n display: none;\n}\n\n.viking-callout {\n display: flex;\n align-items: flex-start;\n gap: var(--viking-space-2);\n padding: var(--viking-space-2);\n border-radius: var(--viking-radius-lg);\n border: 1px solid var(--viking-border);\n border-left-width: 3px;\n background: var(--viking-surface-alt);\n color: var(--viking-text);\n font-size: var(--viking-font-size-sm);\n box-shadow: var(--viking-shadow-sm);\n}\n\n.viking-callout-icon {\n flex-shrink: 0;\n margin-top: 2px;\n color: var(--viking-text-muted);\n}\n\n.viking-callout-body {\n flex: 1;\n min-width: 0;\n}\n\n.viking-callout-heading {\n margin: 0 0 var(--viking-space-half);\n font-size: var(--viking-font-size-ui);\n font-weight: var(--viking-font-weight-bold);\n color: var(--viking-text);\n}\n\n.viking-callout-text {\n margin: 0;\n color: var(--viking-text);\n line-height: var(--viking-line-height-relaxed);\n}\n\n.viking-callout-close {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n min-width: var(--viking-touch-target-comfort, 44px);\n min-height: var(--viking-touch-target-comfort, 44px);\n border: none;\n background: transparent;\n color: var(--viking-text-muted);\n cursor: pointer;\n padding: var(--viking-space-half);\n border-radius: var(--viking-radius);\n transition: var(--viking-transition-interactive);\n flex-shrink: 0;\n}\n\n.viking-callout-close:hover {\n color: var(--viking-text);\n background: color-mix(in srgb, currentColor 8%, transparent);\n}\n\n.viking-callout-close:focus-visible {\n outline: var(--viking-ring-width) solid var(--viking-ring);\n outline-offset: var(--viking-ring-offset);\n}\n\n.viking-callout-accent {\n border-color: var(--viking-accent);\n border-left-color: var(--viking-accent);\n background: var(--viking-accent-soft);\n}\n\n.viking-callout-accent .viking-callout-icon {\n color: var(--viking-accent);\n}\n\n.viking-callout-secondary {\n border-color: color-mix(in srgb, var(--viking-accent-secondary) 45%, transparent);\n border-left-color: var(--viking-accent-secondary);\n background: var(--viking-accent-secondary-soft);\n}\n\n.viking-callout-secondary .viking-callout-icon {\n color: var(--viking-accent-secondary);\n}\n\n.viking-callout-info {\n border-color: color-mix(in srgb, var(--viking-info) 45%, transparent);\n border-left-color: var(--viking-info);\n background: color-mix(in srgb, var(--viking-info) 10%, var(--viking-surface));\n}\n\n.viking-callout-info .viking-callout-icon {\n color: var(--viking-info);\n}\n\n.viking-callout-success {\n border-color: color-mix(in srgb, var(--viking-success) 45%, transparent);\n border-left-color: var(--viking-success);\n background: color-mix(in srgb, var(--viking-success) 10%, var(--viking-surface));\n}\n\n.viking-callout-success .viking-callout-icon {\n color: var(--viking-success);\n}\n\n.viking-callout-warning {\n border-color: color-mix(in srgb, var(--viking-warning) 45%, transparent);\n border-left-color: var(--viking-warning);\n background: color-mix(in srgb, var(--viking-warning) 12%, var(--viking-surface));\n}\n\n.viking-callout-warning .viking-callout-icon {\n color: var(--viking-warning);\n}\n\n.viking-callout-danger {\n border-color: var(--viking-danger);\n border-left-color: var(--viking-danger);\n background: color-mix(in srgb, var(--viking-crimson-600) 22%, var(--viking-surface));\n color: var(--viking-white);\n}\n\n.viking-callout-danger .viking-callout-icon {\n color: var(--viking-crimson-400);\n}\n\n.viking-callout-danger .viking-callout-text {\n color: var(--viking-white);\n}\n`;\n\nexport const VIKING_SELECT_STYLES = `\n:host {\n display: block;\n font-family: var(--viking-font-family);\n min-width: 0;\n}\n\n:host([width='full']) {\n width: 100%;\n}\n\n:host([width='half']) {\n width: 100%;\n max-width: var(--viking-select-half-max-width, min(100%, 24rem));\n}\n\n.viking-field {\n display: flex;\n flex-direction: column;\n gap: var(--viking-space-1);\n}\n\n.viking-field-label {\n font-size: var(--viking-font-size-ui);\n font-weight: var(--viking-font-weight-bold);\n color: var(--viking-text);\n}\n\n.viking-field-description {\n margin: 0;\n font-size: var(--viking-font-size-xs);\n color: var(--viking-text-muted);\n}\n\n.viking-field-error {\n margin: 0;\n font-size: var(--viking-font-size-xs);\n color: var(--viking-danger);\n}\n\n.viking-select-native {\n width: 100%;\n min-height: var(--viking-control-height);\n padding: 0 var(--viking-space-2);\n border: 1px solid var(--viking-border-strong);\n border-radius: var(--viking-radius);\n background: var(--viking-surface);\n color: var(--viking-text);\n font-family: inherit;\n font-size: var(--viking-font-size);\n cursor: pointer;\n transition: var(--viking-transition-interactive);\n box-shadow: var(--viking-shadow-sm);\n}\n\n.viking-select-native:hover:not(:disabled) {\n border-color: var(--viking-accent-strong);\n box-shadow: var(--viking-shadow-md);\n}\n\n.viking-select-native:focus-visible {\n outline: var(--viking-ring-width) solid var(--viking-ring);\n outline-offset: var(--viking-ring-offset);\n}\n\n.viking-select-native:disabled {\n opacity: var(--viking-state-disabled-opacity);\n cursor: not-allowed;\n}\n\n.viking-select-native[aria-invalid='true'] {\n border-color: var(--viking-danger);\n}\n`;\n\nexport const VIKING_MODAL_STYLES = `\n:host {\n display: contents;\n}\n\n.viking-modal-backdrop {\n position: fixed;\n inset: 0;\n z-index: var(--viking-z-overlay, 10001);\n display: flex;\n align-items: center;\n justify-content: center;\n padding: var(--viking-space-3);\n background: var(--viking-overlay-backdrop);\n backdrop-filter: blur(8px);\n -webkit-backdrop-filter: blur(8px);\n border: none;\n animation: viking-backdrop-in var(--viking-duration-fast) var(--viking-ease-out);\n}\n\n.viking-modal-panel {\n display: flex;\n flex-direction: column;\n gap: var(--viking-space-2);\n width: min(522px, calc(100vw - var(--viking-space-4)));\n max-height: calc(100vh - var(--viking-space-6));\n padding: var(--viking-space-3);\n border: 1px solid var(--viking-border-strong);\n border-radius: var(--viking-radius-lg);\n background: var(--viking-surface);\n color: var(--viking-text);\n box-shadow: var(--viking-shadow-lg);\n font-family: var(--viking-font-family);\n position: relative;\n overflow: hidden;\n animation: viking-modal-in var(--viking-duration) var(--viking-ease-default);\n}\n\n.viking-modal-panel::before {\n content: '';\n position: absolute;\n inset: 0 0 auto;\n height: 1px;\n background: linear-gradient(\n 90deg,\n transparent,\n color-mix(in srgb, var(--viking-metallic-200) 22%, transparent),\n transparent\n );\n pointer-events: none;\n}\n\n.viking-modal-header {\n display: flex;\n align-items: flex-start;\n justify-content: space-between;\n gap: var(--viking-space-2);\n padding-bottom: var(--viking-space-1);\n border-bottom: 1px solid var(--viking-border-subtle);\n}\n\n.viking-modal-heading {\n margin: 0;\n font-size: var(--viking-font-size-md);\n font-weight: var(--viking-font-weight-bold);\n letter-spacing: var(--viking-letter-spacing-tight);\n color: var(--viking-text);\n line-height: var(--viking-line-height-tight);\n}\n\n.viking-modal-close {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n min-width: var(--viking-touch-target-comfort, 44px);\n min-height: var(--viking-touch-target-comfort, 44px);\n border: 1px solid transparent;\n background: transparent;\n color: var(--viking-text-muted);\n cursor: pointer;\n border-radius: var(--viking-radius);\n transition: var(--viking-transition-interactive);\n flex-shrink: 0;\n}\n\n.viking-modal-close:hover {\n color: var(--viking-text);\n background: var(--viking-accent-soft);\n border-color: var(--viking-border-subtle);\n}\n\n.viking-modal-close:focus-visible {\n outline: var(--viking-ring-width) solid var(--viking-ring);\n outline-offset: var(--viking-ring-offset);\n}\n\n.viking-modal-body {\n overflow-y: auto;\n color: var(--viking-text-muted);\n font-size: var(--viking-font-size);\n line-height: var(--viking-line-height-relaxed);\n}\n\n.viking-modal-footer {\n display: flex;\n flex-wrap: wrap;\n gap: var(--viking-space-2);\n justify-content: flex-end;\n padding-top: var(--viking-space-2);\n border-top: 1px solid var(--viking-border-subtle);\n}\n\n.viking-modal-footer:empty {\n display: none;\n}\n\n@keyframes viking-backdrop-in {\n from { opacity: 0; }\n to { opacity: 1; }\n}\n\n@keyframes viking-modal-in {\n from {\n opacity: 0;\n transform: translateY(var(--viking-space-1)) scale(0.98);\n }\n to {\n opacity: 1;\n transform: translateY(0) scale(1);\n }\n}\n\n@media (prefers-reduced-motion: reduce) {\n .viking-modal-backdrop,\n .viking-modal-panel {\n animation: none;\n }\n}\n`;\n\nexport const VIKING_SEARCH_PALETTE_STYLES = `\n:host {\n display: contents;\n}\n\n.viking-search-palette-backdrop {\n position: fixed;\n inset: 0;\n z-index: var(--viking-z-overlay, 10001);\n display: flex;\n align-items: flex-start;\n justify-content: center;\n padding: 10vh var(--viking-space-2) var(--viking-space-2);\n background: var(--viking-overlay-backdrop);\n backdrop-filter: blur(8px);\n -webkit-backdrop-filter: blur(8px);\n border: none;\n animation: viking-backdrop-in var(--viking-duration-fast) var(--viking-ease-out);\n}\n\n.viking-search-palette-backdrop:not([open]) {\n display: none !important;\n pointer-events: none;\n}\n\n.viking-search-palette {\n display: flex;\n flex-direction: column;\n background: var(--viking-surface-raised, var(--viking-surface));\n border: 1px solid var(--viking-border-strong);\n border-radius: var(--viking-radius-lg);\n box-shadow: var(--viking-shadow-lg);\n overflow: hidden;\n max-width: 600px;\n width: min(100%, 600px);\n margin: 0 auto;\n font-family: var(--viking-font-family);\n color: var(--viking-text);\n animation: viking-modal-in var(--viking-duration) var(--viking-ease-default);\n position: relative;\n isolation: isolate;\n}\n\n.viking-search-palette::before {\n content: '';\n position: absolute;\n inset: 0 0 auto;\n height: 1px;\n background: linear-gradient(\n 90deg,\n transparent,\n color-mix(in srgb, var(--viking-metallic-200) 22%, transparent),\n transparent\n );\n pointer-events: none;\n z-index: 1;\n}\n\n.viking-search-palette-header {\n display: flex;\n align-items: center;\n padding: var(--viking-space-2);\n border-bottom: 1px solid var(--viking-border);\n gap: var(--viking-space-1);\n background: color-mix(in srgb, var(--viking-bg) 26%, var(--viking-surface-raised));\n}\n\n.viking-search-palette-header:focus-within {\n border-bottom-color: var(--viking-accent);\n box-shadow: inset 0 -2px 0 var(--viking-accent-soft);\n}\n\n.viking-search-palette-icon {\n color: var(--viking-text-muted);\n flex-shrink: 0;\n}\n\n.viking-search-palette-input {\n flex: 1;\n background: none;\n border: none;\n outline: none;\n font-size: calc(var(--viking-font-size) * 1.05);\n color: var(--viking-text);\n font-family: inherit;\n min-width: 0;\n}\n\n.viking-search-palette-input::placeholder {\n color: var(--viking-text-muted);\n}\n\n.viking-search-palette-close {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n min-width: var(--viking-touch-target-comfort, 44px);\n min-height: var(--viking-touch-target-comfort, 44px);\n border: none;\n background: transparent;\n color: var(--viking-text-muted);\n cursor: pointer;\n padding: var(--viking-space-half);\n border-radius: var(--viking-radius);\n transition: var(--viking-transition-interactive);\n flex-shrink: 0;\n}\n\n.viking-search-palette-close:hover {\n color: var(--viking-text);\n background: var(--viking-accent-soft);\n}\n\n.viking-search-palette-close:focus-visible {\n outline: var(--viking-ring-width) solid var(--viking-ring);\n outline-offset: var(--viking-ring-offset);\n}\n\n.viking-search-palette-body {\n max-height: 50vh;\n overflow-y: auto;\n padding: var(--viking-space-2);\n}\n\n.viking-search-palette-footer {\n display: flex;\n align-items: center;\n justify-content: center;\n gap: var(--viking-space-1);\n padding: var(--viking-space-1) var(--viking-space-2);\n border-top: 1px solid var(--viking-border);\n font-size: calc(var(--viking-font-size) * 0.85);\n color: var(--viking-text-muted);\n}\n\n.viking-kbd {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n min-width: 1.5rem;\n padding: 2px 6px;\n font-family: inherit;\n font-size: calc(var(--viking-font-size) * 0.75);\n border-radius: calc(var(--viking-radius) / 2);\n border: 1px solid var(--viking-border);\n background: var(--viking-surface-alt);\n}\n\n.viking-search-results {\n display: flex;\n flex-direction: column;\n gap: var(--viking-space-1);\n}\n\n.viking-search-group-label {\n margin: var(--viking-space-1) 0 var(--viking-space-half);\n padding: 0 var(--viking-space-1);\n font-size: var(--viking-font-size-2xs);\n font-weight: var(--viking-font-weight-semibold);\n letter-spacing: var(--viking-letter-spacing-caps);\n text-transform: uppercase;\n color: var(--viking-text-muted);\n}\n\n.viking-search-result {\n display: flex;\n align-items: center;\n min-height: var(--viking-control-height-sm, 36px);\n padding: var(--viking-space-1) var(--viking-space-2);\n border-radius: var(--viking-radius);\n background: var(--viking-surface-alt);\n border: 1px solid var(--viking-border-subtle);\n cursor: pointer;\n transition: var(--viking-transition-interactive);\n gap: var(--viking-space-1);\n text-decoration: none;\n color: inherit;\n}\n\n.viking-search-result:hover,\n.viking-search-result.is-selected {\n background: color-mix(in srgb, var(--viking-accent) 10%, var(--viking-surface-alt));\n border-color: color-mix(in srgb, var(--viking-accent) 42%, var(--viking-border-strong));\n box-shadow: var(--viking-shadow-sm);\n}\n\n.viking-search-result:focus-visible {\n outline: var(--viking-ring-width) solid var(--viking-ring);\n outline-offset: var(--viking-ring-offset);\n}\n\n.viking-search-result-title {\n font-size: var(--viking-font-size-sm);\n font-weight: var(--viking-font-weight-semibold);\n color: var(--viking-text);\n}\n\n.viking-search-result-snippet {\n font-size: var(--viking-font-size-xs);\n color: var(--viking-text-muted);\n}\n\n.viking-search-empty {\n padding: var(--viking-space-3);\n text-align: center;\n color: var(--viking-text-muted);\n font-size: var(--viking-font-size-sm);\n}\n\n@keyframes viking-backdrop-in {\n from { opacity: 0; }\n to { opacity: 1; }\n}\n\n@keyframes viking-modal-in {\n from {\n opacity: 0;\n transform: translateY(var(--viking-space-1)) scale(0.98);\n }\n to {\n opacity: 1;\n transform: translateY(0) scale(1);\n }\n}\n\n@media (prefers-reduced-motion: reduce) {\n .viking-search-palette-backdrop,\n .viking-search-palette {\n animation: none;\n }\n}\n`;\n","import { attachShadowStyles } from \"../core/base\";\nimport {\n defineCustomElement,\n defineCustomElementAlias,\n HTMLElementBase,\n} from \"../core/dom\";\nimport { renderInlineIcon, TONE_ICON_NAMES } from \"../core/icons-inline\";\nimport { VIKING_BADGE_STYLES } from \"../core/styles\";\nimport type { VikingWcTone } from \"../core/types\";\n\nconst TONES = new Set<VikingWcTone>([\n \"accent\",\n \"secondary\",\n \"success\",\n \"warning\",\n \"danger\",\n \"info\",\n \"muted\",\n \"subtle\",\n]);\n\n/**\n * Framework-agnostic Viking badge Web Component.\n * Tag: `viking-badge` (legacy alias: `viking-badge-wc`)\n *\n * @attr tone - Semantic color: accent | secondary | success | warning | danger | info | muted\n * @attr size - Compact density: sm\n * @attr icon - Viking icon registry name (pairs with label for a11y)\n * @attr removable - Shows remove control; dispatches `viking-removed`\n *\n * @example\n * <viking-badge-wc tone=\"success\" icon=\"check\">Healthy</viking-badge-wc>\n */\nexport class VikingBadgeWc extends HTMLElementBase {\n static readonly tag = \"viking-badge\";\n static readonly legacyTag = \"viking-badge-wc\";\n\n static get observedAttributes(): string[] {\n return [\"tone\", \"size\", \"icon\", \"removable\"];\n }\n\n private readonly shadow: ShadowRoot;\n\n constructor() {\n super();\n this.shadow = this.attachShadow({ mode: \"open\" });\n attachShadowStyles(this.shadow, VIKING_BADGE_STYLES);\n }\n\n connectedCallback(): void {\n this.render();\n }\n\n attributeChangedCallback(): void {\n if (this.isConnected) {\n this.render();\n }\n }\n\n private get tone(): VikingWcTone | null {\n const value = (this.getAttribute(\"tone\") ?? \"\") as VikingWcTone;\n return TONES.has(value) ? value : null;\n }\n\n private get size(): \"sm\" | null {\n return this.getAttribute(\"size\") === \"sm\" ? \"sm\" : null;\n }\n\n private get removable(): boolean {\n return (\n this.hasAttribute(\"removable\") &&\n this.getAttribute(\"removable\") !== \"false\"\n );\n }\n\n private readonly onRemove = (): void => {\n this.dispatchEvent(\n new CustomEvent(\"viking-removed\", { bubbles: true, composed: true }),\n );\n };\n\n private render(): void {\n const tone = this.tone;\n if (tone && this.getAttribute(\"tone\") !== tone) {\n this.setAttribute(\"tone\", tone);\n } else if (!tone && this.hasAttribute(\"tone\")) {\n this.removeAttribute(\"tone\");\n }\n\n const size = this.size;\n if (size && this.getAttribute(\"size\") !== size) {\n this.setAttribute(\"size\", size);\n } else if (!size && this.hasAttribute(\"size\")) {\n this.removeAttribute(\"size\");\n }\n\n const iconName =\n this.getAttribute(\"icon\") ?? (tone ? TONE_ICON_NAMES[tone] : null);\n const iconMarkup = iconName ? renderInlineIcon(iconName, 16) : \"\";\n\n this.shadow.innerHTML = `\n ${iconMarkup}\n <span part=\"label\"><slot></slot></span>\n ${this.removable ? `<button type=\"button\" class=\"viking-badge-remove\" part=\"remove\" aria-label=\"Remove\">${renderInlineIcon(\"x\", 14)}</button>` : \"\"}\n `;\n\n this.shadow\n .querySelector(\".viking-badge-remove\")\n ?.addEventListener(\"click\", this.onRemove);\n }\n}\n\nexport const registerVikingBadgeWc = (): void => {\n defineCustomElement(VikingBadgeWc.tag, VikingBadgeWc);\n defineCustomElementAlias(VikingBadgeWc.legacyTag, VikingBadgeWc);\n};\n","import { attachShadowStyles, readBoolAttr } from \"../core/base\";\nimport {\n defineCustomElement,\n defineCustomElementAlias,\n escapeHtml,\n HTMLElementBase,\n} from \"../core/dom\";\nimport { VIKING_BUTTON_STYLES } from \"../core/styles\";\n\nconst VARIANTS = new Set([\n \"outline\",\n \"primary\",\n \"secondary\",\n \"filled\",\n \"danger\",\n \"ghost\",\n \"subtle\",\n]);\n\nconst SIZES = new Set([\"sm\", \"xs\"]);\n\n/**\n * Framework-agnostic Viking button Web Component.\n * Tag: `viking-button` (legacy alias: `viking-button-wc`)\n *\n * @example\n * <viking-button variant=\"primary\">Launch</viking-button>\n */\nexport class VikingButtonWc extends HTMLElementBase {\n static readonly tag = \"viking-button\";\n static readonly legacyTag = \"viking-button-wc\";\n\n static get observedAttributes(): string[] {\n return [\n \"variant\",\n \"size\",\n \"type\",\n \"disabled\",\n \"loading\",\n \"href\",\n \"target\",\n \"aria-label\",\n \"aria-busy\",\n \"square\",\n \"full-width\",\n \"compact\",\n ];\n }\n\n private readonly shadow: ShadowRoot;\n private control: HTMLButtonElement | HTMLAnchorElement | null = null;\n\n constructor() {\n super();\n this.shadow = this.attachShadow({ mode: \"open\" });\n attachShadowStyles(this.shadow, VIKING_BUTTON_STYLES);\n }\n\n connectedCallback(): void {\n this.render();\n this.syncHostSemantics();\n this.control?.addEventListener(\"click\", this.onClick);\n }\n\n disconnectedCallback(): void {\n this.control?.removeEventListener(\"click\", this.onClick);\n }\n\n attributeChangedCallback(): void {\n if (this.isConnected) {\n this.render();\n this.syncHostSemantics();\n }\n }\n\n private readonly onClick = (event: Event): void => {\n if (this.disabled || this.loading) {\n event.preventDefault();\n event.stopPropagation();\n return;\n }\n this.dispatchEvent(\n new CustomEvent(\"viking-press\", {\n bubbles: true,\n composed: true,\n detail: event,\n }),\n );\n };\n\n private get variant(): string {\n const value = this.getAttribute(\"variant\") ?? \"outline\";\n return VARIANTS.has(value) ? value : \"outline\";\n }\n\n private get size(): string | null {\n const value = this.getAttribute(\"size\");\n return value && SIZES.has(value) ? value : null;\n }\n\n private get disabled(): boolean {\n return readBoolAttr(this, \"disabled\");\n }\n\n private get loading(): boolean {\n return readBoolAttr(this, \"loading\");\n }\n\n private get square(): boolean {\n return readBoolAttr(this, \"square\");\n }\n\n private syncHostSemantics(): void {\n if (!this.hasAttribute(\"role\")) {\n this.setAttribute(\"role\", this.getAttribute(\"href\") ? \"link\" : \"button\");\n }\n }\n\n private render(): void {\n const href = this.getAttribute(\"href\");\n const isLink = Boolean(href);\n const tag = isLink ? \"a\" : \"button\";\n\n const classes = [\n \"viking-btn\",\n `viking-btn-${this.variant}`,\n this.size ? `viking-btn-${this.size}` : \"\",\n this.square ? \"viking-btn-square\" : \"\",\n ]\n .filter(Boolean)\n .join(\" \");\n\n const label = this.getAttribute(\"aria-label\") ?? \"\";\n const busy =\n this.getAttribute(\"aria-busy\") === \"true\" || this.loading ? \"true\" : null;\n const type = escapeHtml(this.getAttribute(\"type\") ?? \"button\");\n const hrefValue = href ? escapeHtml(href) : \"\";\n const target = this.getAttribute(\"target\");\n const safeTarget = target ? escapeHtml(target) : \"\";\n\n this.shadow.innerHTML = `\n <${tag}\n class=\"${classes}\"\n part=\"control\"\n ${isLink ? `href=\"${hrefValue}\"` : `type=\"${type}\"`}\n ${isLink && safeTarget ? `target=\"${safeTarget}\"` : \"\"}\n ${isLink && target === \"_blank\" ? 'rel=\"noopener noreferrer\"' : \"\"}\n ${this.disabled || this.loading ? \"disabled\" : \"\"}\n ${label ? `aria-label=\"${escapeHtml(label)}\"` : \"\"}\n ${busy ? `aria-busy=\"${busy}\"` : \"\"}\n ${this.disabled && isLink ? 'aria-disabled=\"true\" tabindex=\"-1\"' : \"\"}\n >\n ${this.loading ? '<span class=\"viking-btn-spinner\" aria-hidden=\"true\"></span>' : \"\"}\n <span class=\"viking-btn-label\" part=\"label\"><slot></slot></span>\n </${tag}>\n `;\n\n this.control = this.shadow.querySelector(tag);\n }\n}\n\nexport const registerVikingButtonWc = (): void => {\n defineCustomElement(VikingButtonWc.tag, VikingButtonWc);\n defineCustomElementAlias(VikingButtonWc.legacyTag, VikingButtonWc);\n};\n","import { attachShadowStyles } from \"../core/base\";\nimport {\n defineCustomElement,\n defineCustomElementAlias,\n escapeHtml,\n HTMLElementBase,\n} from \"../core/dom\";\nimport { renderInlineIcon, TONE_ICON_NAMES } from \"../core/icons-inline\";\nimport { VIKING_CALLOUT_STYLES } from \"../core/styles\";\nimport type { VikingWcTone } from \"../core/types\";\n\nconst TONES = new Set<VikingWcTone>([\n \"accent\",\n \"secondary\",\n \"success\",\n \"warning\",\n \"danger\",\n \"info\",\n \"muted\",\n]);\n\n/**\n * Framework-agnostic Viking callout Web Component.\n * Tag: `viking-callout` (legacy alias: `viking-callout-wc`)\n *\n * @attr tone - Semantic tone (default: info)\n * @attr heading - Bold callout title\n * @attr icon - Override leading icon from the Viking registry\n * @attr dismissible - Shows dismiss control; dispatches `viking-close`\n *\n * @example\n * <viking-callout-wc tone=\"warning\" heading=\"Degraded worker\">Lag exceeds 3s.</viking-callout-wc>\n */\nexport class VikingCalloutWc extends HTMLElementBase {\n static readonly tag = \"viking-callout\";\n static readonly legacyTag = \"viking-callout-wc\";\n\n static get observedAttributes(): string[] {\n return [\"tone\", \"heading\", \"icon\", \"dismissible\", \"hidden\"];\n }\n\n private readonly shadow: ShadowRoot;\n\n constructor() {\n super();\n this.shadow = this.attachShadow({ mode: \"open\" });\n attachShadowStyles(this.shadow, VIKING_CALLOUT_STYLES);\n }\n\n connectedCallback(): void {\n this.render();\n }\n\n attributeChangedCallback(): void {\n if (this.isConnected) {\n this.render();\n }\n }\n\n private get tone(): VikingWcTone {\n const value = (this.getAttribute(\"tone\") ?? \"info\") as VikingWcTone;\n return TONES.has(value) ? value : \"info\";\n }\n\n private get dismissible(): boolean {\n return (\n this.hasAttribute(\"dismissible\") &&\n this.getAttribute(\"dismissible\") !== \"false\"\n );\n }\n\n private readonly onDismiss = (): void => {\n this.setAttribute(\"hidden\", \"\");\n this.dispatchEvent(\n new CustomEvent(\"viking-close\", { bubbles: true, composed: true }),\n );\n };\n\n private render(): void {\n const heading = this.getAttribute(\"heading\") ?? \"\";\n const iconName =\n this.getAttribute(\"icon\") ?? TONE_ICON_NAMES[this.tone] ?? \"info\";\n const iconMarkup = renderInlineIcon(iconName, 22, \"viking-callout-icon\");\n\n this.shadow.innerHTML = `\n <div class=\"viking-callout viking-callout-${this.tone}\" role=\"note\" part=\"surface\">\n <span part=\"icon\">${iconMarkup}</span>\n <div class=\"viking-callout-body\" part=\"body\">\n ${heading ? `<p class=\"viking-callout-heading\" part=\"heading\">${escapeHtml(heading)}</p>` : \"\"}\n <div class=\"viking-callout-text\" part=\"text\"><slot></slot></div>\n </div>\n ${this.dismissible ? `<button type=\"button\" class=\"viking-callout-close\" part=\"close\" aria-label=\"Dismiss\">${renderInlineIcon(\"x\", 18)}</button>` : \"\"}\n </div>\n `;\n\n this.shadow\n .querySelector(\".viking-callout-close\")\n ?.addEventListener(\"click\", this.onDismiss);\n }\n}\n\nexport const registerVikingCalloutWc = (): void => {\n defineCustomElement(VikingCalloutWc.tag, VikingCalloutWc);\n defineCustomElementAlias(VikingCalloutWc.legacyTag, VikingCalloutWc);\n};\n","import {\n defineCustomElement,\n defineCustomElementAlias,\n HTMLElementBase,\n} from \"../core/dom\";\n\n/**\n * Framework-agnostic Viking card Web Component (light DOM — inherits global viking-card CSS).\n * Tag: `viking-card` (legacy alias: `viking-card-wc`)\n *\n * Uses light DOM so slotted content inherits `viking-card`, `viking-card-header`, and related\n * classes from the synced static CSS bundle.\n *\n * @attr compact - Applies `viking-card-compact` padding\n * @attr interactive - Hover lift for clickable cards\n * @attr title - Accessible name when the card is a landmark region\n *\n * @example\n * <viking-card-wc compact title=\"Event throughput\">\n * <div class=\"viking-card-header\">\n * <h3 class=\"viking-heading viking-heading-sm\">Event throughput</h3>\n * </div>\n * <p class=\"viking-text-muted\">8.2K events/sec</p>\n * </viking-card-wc>\n */\nexport class VikingCardWc extends HTMLElementBase {\n static readonly tag = \"viking-card\";\n static readonly legacyTag = \"viking-card-wc\";\n\n static get observedAttributes(): string[] {\n return [\"compact\", \"interactive\", \"title\"];\n }\n\n connectedCallback(): void {\n this.syncClasses();\n }\n\n attributeChangedCallback(): void {\n if (this.isConnected) {\n this.syncClasses();\n }\n }\n\n private syncClasses(): void {\n this.classList.add(\"viking-card\");\n this.classList.toggle(\"viking-card-compact\", this.hasAttribute(\"compact\"));\n this.classList.toggle(\n \"viking-card-interactive\",\n this.hasAttribute(\"interactive\"),\n );\n\n const title = this.getAttribute(\"title\");\n if (title) {\n this.setAttribute(\"role\", \"region\");\n this.setAttribute(\"aria-label\", title);\n } else {\n this.removeAttribute(\"role\");\n this.removeAttribute(\"aria-label\");\n }\n }\n}\n\nexport const registerVikingCardWc = (): void => {\n defineCustomElement(VikingCardWc.tag, VikingCardWc);\n defineCustomElementAlias(VikingCardWc.legacyTag, VikingCardWc);\n};\n","import { attachShadowStyles, readBoolAttr } from \"../core/base\";\nimport {\n defineCustomElement,\n defineCustomElementAlias,\n escapeHtml,\n HTMLElementBase,\n vikingWcUid,\n} from \"../core/dom\";\nimport { VIKING_FIELD_STYLES } from \"../core/styles\";\n\n/**\n * Framework-agnostic Viking field stack Web Component.\n * Tag: `viking-field` (legacy alias: `viking-field-wc`)\n *\n * @attr label - Visible field label\n * @attr description - Helper text below the control\n * @attr error - Validation message; sets aria-invalid on the slotted control\n * @attr required - Adds a non-color-only required marker\n * @attr width - full | half\n *\n * @slot default - Form control, usually `viking-input`, `viking-select`, or native input/select\n */\nexport class VikingFieldWc extends HTMLElementBase {\n static readonly tag = \"viking-field\";\n static readonly legacyTag = \"viking-field-wc\";\n\n static get observedAttributes(): string[] {\n return [\"label\", \"description\", \"error\", \"required\", \"width\"];\n }\n\n private readonly shadow: ShadowRoot;\n private readonly labelId = vikingWcUid(\"viking-field-label\");\n private readonly descriptionId = vikingWcUid(\"viking-field-description\");\n private readonly errorId = vikingWcUid(\"viking-field-error\");\n private slotEl: HTMLSlotElement | null = null;\n\n constructor() {\n super();\n this.shadow = this.attachShadow({ mode: \"open\" });\n attachShadowStyles(this.shadow, VIKING_FIELD_STYLES);\n }\n\n connectedCallback(): void {\n this.render();\n this.syncControlA11y();\n }\n\n disconnectedCallback(): void {\n this.slotEl?.removeEventListener(\"slotchange\", this.syncControlA11y);\n }\n\n attributeChangedCallback(): void {\n if (this.isConnected) {\n this.render();\n this.syncControlA11y();\n }\n }\n\n private get control(): HTMLElement | null {\n const assigned = this.slotEl?.assignedElements({ flatten: true }) ?? [];\n return (\n assigned.find(\n (node): node is HTMLElement => node instanceof HTMLElement,\n ) ?? null\n );\n }\n\n private readonly focusControl = (): void => {\n const control = this.control as HTMLElement & { focus?: () => void };\n control?.focus?.();\n };\n\n private readonly syncControlA11y = (): void => {\n const control = this.control;\n if (!control) {\n return;\n }\n\n const description = [\n this.getAttribute(\"description\") ?? \"\",\n this.getAttribute(\"error\") ?? \"\",\n ]\n .filter(Boolean)\n .join(\" \");\n\n const label = this.getAttribute(\"label\") ?? \"\";\n if (label && !control.hasAttribute(\"aria-label\")) {\n control.setAttribute(\"aria-label\", label);\n }\n if (description) {\n control.setAttribute(\"aria-description\", description);\n } else {\n control.removeAttribute(\"aria-description\");\n }\n\n if (this.getAttribute(\"error\")) {\n control.setAttribute(\"aria-invalid\", \"true\");\n control.setAttribute(\"error\", this.getAttribute(\"error\") ?? \"\");\n } else {\n control.removeAttribute(\"aria-invalid\");\n if (control.getAttribute(\"error\") === \"\") {\n control.removeAttribute(\"error\");\n }\n }\n\n if (readBoolAttr(this, \"required\")) {\n control.setAttribute(\"required\", \"\");\n }\n };\n\n private render(): void {\n const label = this.getAttribute(\"label\") ?? \"\";\n const description = this.getAttribute(\"description\") ?? \"\";\n const error = this.getAttribute(\"error\") ?? \"\";\n const required = readBoolAttr(this, \"required\");\n\n this.shadow.innerHTML = `\n <div class=\"viking-field\" part=\"field\" role=\"group\" aria-labelledby=\"${this.labelId}\">\n ${\n label\n ? `<div class=\"viking-field-label-row\" part=\"label-row\">\n <span class=\"viking-field-label\" part=\"label\" id=\"${this.labelId}\">\n <span>${escapeHtml(label)}</span>\n ${required ? `<span class=\"viking-field-required\" aria-label=\"required\">*</span>` : \"\"}\n </span>\n </div>`\n : `<span id=\"${this.labelId}\" hidden>Form field</span>`\n }\n <div class=\"viking-field-control\" part=\"control\"><slot></slot></div>\n ${\n description\n ? `<p id=\"${this.descriptionId}\" class=\"viking-field-description\" part=\"description\">${escapeHtml(description)}</p>`\n : \"\"\n }\n ${\n error\n ? `<p id=\"${this.errorId}\" class=\"viking-field-error\" part=\"error\" role=\"alert\">${escapeHtml(error)}</p>`\n : \"\"\n }\n </div>\n `;\n\n this.slotEl = this.shadow.querySelector(\"slot\");\n this.slotEl?.addEventListener(\"slotchange\", this.syncControlA11y);\n this.shadow\n .querySelector(\".viking-field-label\")\n ?.addEventListener(\"click\", this.focusControl);\n }\n}\n\nexport const registerVikingFieldWc = (): void => {\n defineCustomElement(VikingFieldWc.tag, VikingFieldWc);\n defineCustomElementAlias(VikingFieldWc.legacyTag, VikingFieldWc);\n};\n","import {\n attachElementInternals,\n attachShadowStyles,\n readBoolAttr,\n setFormValue,\n} from \"../core/base\";\nimport {\n defineCustomElement,\n defineCustomElementAlias,\n escapeHtml,\n HTMLElementBase,\n} from \"../core/dom\";\nimport { VIKING_INPUT_STYLES } from \"../core/styles\";\n\n/**\n * Framework-agnostic Viking input Web Component with form association.\n * Tag: `viking-input` (legacy alias: `viking-input-wc`)\n *\n * @example\n * <viking-input placeholder=\"Email\" name=\"email\" type=\"email\"></viking-input>\n */\nexport class VikingInputWc extends HTMLElementBase {\n static readonly formAssociated = true;\n static readonly tag = \"viking-input\";\n static readonly legacyTag = \"viking-input-wc\";\n\n static get observedAttributes(): string[] {\n return [\n \"type\",\n \"placeholder\",\n \"value\",\n \"disabled\",\n \"loading\",\n \"clearable\",\n \"name\",\n \"autocomplete\",\n \"required\",\n \"readonly\",\n \"minlength\",\n \"maxlength\",\n \"pattern\",\n \"error\",\n \"aria-label\",\n \"aria-describedby\",\n \"bare\",\n ];\n }\n\n private readonly shadow: ShadowRoot;\n private readonly internals: ElementInternals | null;\n private input: HTMLInputElement | null = null;\n\n constructor() {\n super();\n this.shadow = this.attachShadow({ mode: \"open\" });\n this.internals = attachElementInternals(this);\n attachShadowStyles(this.shadow, VIKING_INPUT_STYLES);\n }\n\n connectedCallback(): void {\n this.render();\n this.syncFormValue();\n }\n\n attributeChangedCallback(name: string): void {\n if (!this.isConnected) {\n return;\n }\n if (name === \"value\" && this.input) {\n this.input.value = this.getAttribute(\"value\") ?? \"\";\n this.syncFormValue();\n return;\n }\n this.render();\n }\n\n get value(): string {\n return this.input?.value ?? this.getAttribute(\"value\") ?? \"\";\n }\n\n set value(next: string) {\n const normalized = next ?? \"\";\n this.setAttribute(\"value\", normalized);\n if (this.input) {\n this.input.value = normalized;\n }\n this.syncFormValue();\n }\n\n private get disabled(): boolean {\n return readBoolAttr(this, \"disabled\");\n }\n\n private get loading(): boolean {\n return readBoolAttr(this, \"loading\");\n }\n\n private get clearable(): boolean {\n return readBoolAttr(this, \"clearable\");\n }\n\n private get bare(): boolean {\n return readBoolAttr(this, \"bare\");\n }\n\n private readonly onInput = (): void => {\n const next = this.input?.value ?? \"\";\n this.setAttribute(\"value\", next);\n this.syncFormValue();\n this.dispatchEvent(new Event(\"input\", { bubbles: true, composed: true }));\n this.dispatchEvent(new Event(\"change\", { bubbles: true, composed: true }));\n };\n\n private readonly onBlur = (): void => {\n this.dispatchEvent(new Event(\"blur\", { bubbles: true, composed: true }));\n };\n\n private readonly onClear = (): void => {\n this.value = \"\";\n this.input?.focus();\n this.dispatchEvent(\n new CustomEvent(\"viking-cleared\", { bubbles: true, composed: true }),\n );\n this.dispatchEvent(new Event(\"input\", { bubbles: true, composed: true }));\n };\n\n private syncFormValue(): void {\n setFormValue(this.internals, this.value);\n }\n\n private render(): void {\n const shellClasses = [\n \"viking-input-shell\",\n this.disabled ? \"viking-disabled\" : \"\",\n this.loading ? \"viking-loading\" : \"\",\n ]\n .filter(Boolean)\n .join(\" \");\n\n const type = escapeHtml(this.getAttribute(\"type\") ?? \"text\");\n const rawPlaceholder = this.getAttribute(\"placeholder\") ?? \"\";\n const placeholder = escapeHtml(rawPlaceholder);\n const value = escapeHtml(this.getAttribute(\"value\") ?? \"\");\n const label =\n this.getAttribute(\"aria-label\") ?? (rawPlaceholder || \"Text input\");\n const autocomplete = escapeHtml(this.getAttribute(\"autocomplete\") ?? \"\");\n const describedBy = escapeHtml(this.getAttribute(\"aria-describedby\") ?? \"\");\n const minLength = escapeHtml(this.getAttribute(\"minlength\") ?? \"\");\n const maxLength = escapeHtml(this.getAttribute(\"maxlength\") ?? \"\");\n const pattern = escapeHtml(this.getAttribute(\"pattern\") ?? \"\");\n const error = this.getAttribute(\"error\") ?? \"\";\n const required = readBoolAttr(this, \"required\");\n const readonly = readBoolAttr(this, \"readonly\");\n const showClear =\n this.clearable && value.length > 0 && !this.loading && !this.bare;\n const nativeAttrs = `\n ${this.disabled || this.loading ? \"disabled\" : \"\"}\n ${required ? \"required\" : \"\"}\n ${readonly ? \"readonly\" : \"\"}\n aria-label=\"${escapeHtml(label)}\"\n ${describedBy ? `aria-describedby=\"${describedBy}\"` : \"\"}\n ${this.loading ? 'aria-busy=\"true\"' : \"\"}\n ${error ? 'aria-invalid=\"true\"' : \"\"}\n ${autocomplete ? `autocomplete=\"${autocomplete}\"` : \"\"}\n ${minLength ? `minlength=\"${minLength}\"` : \"\"}\n ${maxLength ? `maxlength=\"${maxLength}\"` : \"\"}\n ${pattern ? `pattern=\"${pattern}\"` : \"\"}\n `;\n\n if (this.bare) {\n this.shadow.innerHTML = `\n <input\n part=\"input\"\n class=\"viking-input-native\"\n type=\"${type}\"\n placeholder=\"${placeholder}\"\n value=\"${value}\"\n ${nativeAttrs}\n />\n `;\n } else {\n this.shadow.innerHTML = `\n <div class=\"${shellClasses}\" part=\"shell\">\n <slot name=\"leading\"></slot>\n <input\n part=\"input\"\n type=\"${type}\"\n placeholder=\"${placeholder}\"\n value=\"${value}\"\n ${nativeAttrs}\n />\n ${this.loading ? '<span class=\"viking-input-spinner\" aria-hidden=\"true\"></span>' : \"\"}\n ${showClear ? '<button type=\"button\" class=\"viking-input-clear\" aria-label=\"Clear input\" part=\"clear\">×</button>' : \"\"}\n <slot name=\"trailing\"></slot>\n </div>\n `;\n }\n\n this.input = this.shadow.querySelector(\"input\");\n this.input?.addEventListener(\"input\", this.onInput);\n this.input?.addEventListener(\"blur\", this.onBlur);\n\n const clearBtn = this.shadow.querySelector(\".viking-input-clear\");\n clearBtn?.addEventListener(\"click\", this.onClear);\n }\n}\n\nexport const registerVikingInputWc = (): void => {\n defineCustomElement(VikingInputWc.tag, VikingInputWc);\n defineCustomElementAlias(VikingInputWc.legacyTag, VikingInputWc);\n};\n","import {\n attachShadowStyles,\n closeModalDialog,\n showModalDialog,\n} from \"../core/base\";\nimport {\n defineCustomElement,\n defineCustomElementAlias,\n escapeHtml,\n HTMLElementBase,\n} from \"../core/dom\";\nimport { renderInlineIcon } from \"../core/icons-inline\";\nimport { VIKING_MODAL_STYLES } from \"../core/styles\";\n\n/**\n * Framework-agnostic modal Web Component using native `<dialog>` semantics.\n * Tag: `viking-modal` (legacy aliases: `viking-modal-wc`, `viking-dialog`)\n *\n * @attr open - When present, shows the modal\n * @attr title - Dialog title for aria-label / heading\n * @attr dismissible - Allow Escape and backdrop click to close (default: true)\n *\n * @slot default - Modal body content\n * @slot actions - Footer action buttons\n *\n * @method openModal() - Programmatically open\n * @method closeModal() - Programmatically close\n *\n * @event viking-close - Fired when the dialog closes\n *\n * @example\n * <viking-modal title=\"Confirm deploy\">\n * <p>Push v2.0.0 to production?</p>\n * <viking-button slot=\"actions\" variant=\"primary\">Deploy</viking-button>\n * </viking-modal>\n */\nexport class VikingModalWc extends HTMLElementBase {\n static readonly tag = \"viking-modal\";\n static readonly legacyTag = \"viking-modal-wc\";\n static readonly dialogTag = \"viking-dialog\";\n\n static get observedAttributes(): string[] {\n return [\"open\", \"title\", \"dismissible\"];\n }\n\n private readonly shadow: ShadowRoot;\n private dialogEl: HTMLDialogElement | null = null;\n\n constructor() {\n super();\n this.shadow = this.attachShadow({ mode: \"open\" });\n attachShadowStyles(this.shadow, VIKING_MODAL_STYLES);\n }\n\n connectedCallback(): void {\n this.render();\n this.syncOpen();\n this.dialogEl?.addEventListener(\"close\", this.onClose);\n this.dialogEl?.addEventListener(\"click\", this.onBackdropClick);\n }\n\n disconnectedCallback(): void {\n this.dialogEl?.removeEventListener(\"close\", this.onClose);\n this.dialogEl?.removeEventListener(\"click\", this.onBackdropClick);\n }\n\n attributeChangedCallback(name: string): void {\n if (!this.isConnected) {\n return;\n }\n if (name === \"open\") {\n this.syncOpen();\n return;\n }\n if (name === \"title\") {\n this.updateTitle();\n return;\n }\n if (name === \"dismissible\") {\n this.render();\n this.syncOpen();\n }\n }\n\n /** Opens the modal dialog. */\n openModal(): void {\n this.setAttribute(\"open\", \"\");\n this.syncOpen();\n }\n\n /** Closes the modal dialog. */\n closeModal(): void {\n this.removeAttribute(\"open\");\n closeModalDialog(this.dialogEl);\n }\n\n /** @deprecated Use openModal() */\n open(): void {\n this.openModal();\n }\n\n /** @deprecated Use closeModal() */\n close(): void {\n this.closeModal();\n }\n\n private get dismissible(): boolean {\n return this.getAttribute(\"dismissible\") !== \"false\";\n }\n\n private readonly onClose = (): void => {\n this.removeAttribute(\"open\");\n this.dispatchEvent(\n new CustomEvent(\"viking-close\", { bubbles: true, composed: true }),\n );\n };\n\n private readonly onBackdropClick = (event: MouseEvent): void => {\n if (!this.dismissible) {\n return;\n }\n if (event.target === this.dialogEl) {\n this.closeModal();\n }\n };\n\n private syncOpen(): void {\n if (!this.dialogEl) {\n return;\n }\n const shouldOpen = this.hasAttribute(\"open\");\n if (shouldOpen && !this.dialogEl.open) {\n showModalDialog(this.dialogEl);\n queueMicrotask(() => {\n const closeBtn = this.shadow.querySelector<HTMLButtonElement>(\n \".viking-modal-close\",\n );\n (closeBtn ?? this.dialogEl)?.focus();\n });\n } else if (!shouldOpen && this.dialogEl.open) {\n closeModalDialog(this.dialogEl);\n }\n }\n\n private updateTitle(): void {\n const title = this.getAttribute(\"title\") ?? \"Dialog\";\n const heading = this.shadow.querySelector(\".viking-modal-heading\");\n if (heading) {\n heading.textContent = title;\n }\n this.dialogEl?.setAttribute(\"aria-label\", title);\n }\n\n private render(): void {\n const title = this.getAttribute(\"title\") ?? \"Dialog\";\n\n this.shadow.innerHTML = `\n <dialog class=\"viking-modal-backdrop\" aria-label=\"${escapeHtml(title)}\" aria-modal=\"true\">\n <div class=\"viking-modal-panel\" part=\"panel\" role=\"document\">\n <header class=\"viking-modal-header\" part=\"header\">\n <h2 class=\"viking-modal-heading\" part=\"title\">${escapeHtml(title)}</h2>\n ${this.dismissible ? `<button type=\"button\" class=\"viking-modal-close\" part=\"close\" aria-label=\"Close dialog\">${renderInlineIcon(\"x\", 20)}</button>` : \"\"}\n </header>\n <div class=\"viking-modal-body\" part=\"body\"><slot></slot></div>\n <footer class=\"viking-modal-footer\" part=\"footer\"><slot name=\"actions\"></slot></footer>\n </div>\n </dialog>\n `;\n\n this.dialogEl = this.shadow.querySelector(\"dialog\");\n this.shadow\n .querySelector(\".viking-modal-close\")\n ?.addEventListener(\"click\", () => this.closeModal());\n this.dialogEl?.addEventListener(\"keydown\", (event) => {\n if (event.key === \"Escape\" && this.dismissible) {\n event.preventDefault();\n this.closeModal();\n }\n });\n }\n}\n\nexport const registerVikingModalWc = (): void => {\n defineCustomElement(VikingModalWc.tag, VikingModalWc);\n defineCustomElementAlias(VikingModalWc.legacyTag, VikingModalWc);\n defineCustomElementAlias(VikingModalWc.dialogTag, VikingModalWc);\n};\n","import {\n attachShadowStyles,\n readBoolAttr,\n closeModalDialog,\n showModalDialog,\n} from \"../core/base\";\nimport {\n defineCustomElement,\n defineCustomElementAlias,\n escapeHtml,\n HTMLElementBase,\n modKeyLabel,\n vikingWcUid,\n} from \"../core/dom\";\nimport { renderInlineIcon } from \"../core/icons-inline\";\nimport { VIKING_SEARCH_PALETTE_STYLES } from \"../core/styles\";\nimport type { VikingSearchPaletteItem } from \"../core/types\";\n\nexport type { VikingSearchPaletteItem };\n\nconst parseItems = (el: HTMLElement): VikingSearchPaletteItem[] => {\n const raw = el.getAttribute(\"items\");\n if (!raw) {\n return [];\n }\n try {\n const parsed = JSON.parse(raw) as VikingSearchPaletteItem[];\n return Array.isArray(parsed) ? parsed : [];\n } catch {\n return [];\n }\n};\n\nconst matchesQuery = (\n item: VikingSearchPaletteItem,\n query: string,\n): boolean => {\n const haystack = [\n item.title,\n item.snippet ?? \"\",\n item.group ?? \"\",\n item.href,\n ...(item.keywords ?? []),\n ]\n .join(\" \")\n .toLowerCase();\n return haystack.includes(query);\n};\n\nconst filterItems = (\n items: VikingSearchPaletteItem[],\n query: string,\n): VikingSearchPaletteItem[] => {\n const q = query.trim().toLowerCase();\n if (!q) {\n return items;\n }\n return items.filter((item) => matchesQuery(item, q));\n};\n\nconst groupItems = (\n items: VikingSearchPaletteItem[],\n): { group: string | null; items: VikingSearchPaletteItem[] }[] => {\n const groups = new Map<string | null, VikingSearchPaletteItem[]>();\n items.forEach((item) => {\n const key = item.group ?? null;\n const bucket = groups.get(key) ?? [];\n bucket.push(item);\n groups.set(key, bucket);\n });\n return Array.from(groups.entries()).map(([group, grouped]) => ({\n group,\n items: grouped,\n }));\n};\n\n/**\n * Framework-agnostic command palette / search overlay Web Component.\n * Tag: `viking-command-palette`\n * Aliases: `viking-search-palette`, `viking-search-palette-wc`\n *\n * @attr open - When present, shows the palette\n * @attr global-shortcut - Bind ⌘K / Ctrl+K to open\n * @attr placeholder - Search input placeholder\n * @attr items - JSON array of `{ title, href, snippet?, group? }`\n *\n * @method openPalette() - Programmatically open\n * @method closePalette() - Programmatically close\n *\n * @event viking-close - Palette closed\n * @event viking-query - `{ detail: { query: string } }` on input\n * @event viking-select - `{ detail: { item } }` when a result is activated\n *\n * @example\n * <viking-command-palette\n * global-shortcut\n * items='[{\"title\":\"Components\",\"href\":\"/components\",\"group\":\"Docs\"}]'\n * ></viking-command-palette>\n */\nexport class VikingSearchPaletteWc extends HTMLElementBase {\n static readonly tag = \"viking-command-palette\";\n static readonly searchTag = \"viking-search-palette\";\n static readonly legacyTag = \"viking-search-palette-wc\";\n\n static get observedAttributes(): string[] {\n return [\"open\", \"placeholder\", \"items\", \"global-shortcut\"];\n }\n\n private readonly shadow: ShadowRoot;\n private dialogEl: HTMLDialogElement | null = null;\n private inputEl: HTMLInputElement | null = null;\n private resultsEl: HTMLDivElement | null = null;\n private globalKeyHandler: ((event: KeyboardEvent) => void) | null = null;\n private readonly resultsId = vikingWcUid(\"viking-search-results\");\n private readonly inputId = vikingWcUid(\"viking-search-input\");\n private query = \"\";\n private activeIndex = 0;\n private flatResults: VikingSearchPaletteItem[] = [];\n\n constructor() {\n super();\n this.shadow = this.attachShadow({ mode: \"open\" });\n attachShadowStyles(this.shadow, VIKING_SEARCH_PALETTE_STYLES);\n }\n\n connectedCallback(): void {\n this.render();\n this.syncOpen();\n this.bindGlobalShortcut();\n this.dialogEl?.addEventListener(\"close\", this.onClose);\n this.dialogEl?.addEventListener(\"click\", this.onBackdropClick);\n this.inputEl?.addEventListener(\"input\", this.onInput);\n this.inputEl?.addEventListener(\"keydown\", this.onInputKeydown);\n }\n\n disconnectedCallback(): void {\n this.dialogEl?.removeEventListener(\"close\", this.onClose);\n this.dialogEl?.removeEventListener(\"click\", this.onBackdropClick);\n this.inputEl?.removeEventListener(\"input\", this.onInput);\n this.inputEl?.removeEventListener(\"keydown\", this.onInputKeydown);\n this.unbindGlobalShortcut();\n }\n\n attributeChangedCallback(name: string): void {\n if (!this.isConnected) {\n return;\n }\n if (name === \"open\") {\n this.syncOpen();\n }\n if (name === \"global-shortcut\") {\n this.unbindGlobalShortcut();\n this.bindGlobalShortcut();\n }\n if (name === \"items\" || name === \"placeholder\") {\n if (name === \"placeholder\" && this.inputEl) {\n const placeholder =\n this.getAttribute(\"placeholder\") ??\n \"Search documentation, dashboard, API…\";\n this.inputEl.placeholder = placeholder;\n this.inputEl.setAttribute(\"aria-label\", placeholder);\n } else {\n this.renderResults();\n }\n }\n }\n\n /** Opens the command palette. */\n openPalette(): void {\n this.setAttribute(\"open\", \"\");\n this.syncOpen();\n }\n\n /** Closes the command palette. */\n closePalette(): void {\n this.removeAttribute(\"open\");\n closeModalDialog(this.dialogEl);\n }\n\n /** Sets the query string and re-renders filtered results. */\n search(query: string): void {\n this.query = query;\n if (this.inputEl) {\n this.inputEl.value = query;\n }\n this.activeIndex = 0;\n this.renderResults();\n this.dispatchEvent(\n new CustomEvent(\"viking-query\", {\n bubbles: true,\n composed: true,\n detail: { query: this.query },\n }),\n );\n }\n\n private readonly onClose = (): void => {\n this.removeAttribute(\"open\");\n this.query = \"\";\n this.activeIndex = 0;\n if (this.inputEl) {\n this.inputEl.value = \"\";\n }\n this.dispatchEvent(\n new CustomEvent(\"viking-close\", { bubbles: true, composed: true }),\n );\n };\n\n private readonly onBackdropClick = (event: MouseEvent): void => {\n if (event.target === this.dialogEl) {\n this.closePalette();\n }\n };\n\n private readonly onInput = (event: Event): void => {\n this.query =\n (event.target as HTMLInputElement).value ?? this.inputEl?.value ?? \"\";\n this.activeIndex = 0;\n this.renderResults();\n this.dispatchEvent(\n new CustomEvent(\"viking-query\", {\n bubbles: true,\n composed: true,\n detail: { query: this.query },\n }),\n );\n };\n\n private readonly onInputKeydown = (event: KeyboardEvent): void => {\n if (this.flatResults.length === 0) {\n if (event.key === \"Escape\") {\n event.preventDefault();\n this.closePalette();\n }\n return;\n }\n\n if (event.key === \"ArrowDown\") {\n event.preventDefault();\n this.activeIndex = Math.min(\n this.flatResults.length - 1,\n this.activeIndex + 1,\n );\n this.renderResults();\n this.scrollActiveIntoView();\n return;\n }\n\n if (event.key === \"ArrowUp\") {\n event.preventDefault();\n this.activeIndex = Math.max(0, this.activeIndex - 1);\n this.renderResults();\n this.scrollActiveIntoView();\n return;\n }\n\n if (event.key === \"Enter\") {\n event.preventDefault();\n const item = this.flatResults[this.activeIndex];\n if (item) {\n this.activateItem(item);\n }\n }\n };\n\n private bindGlobalShortcut(): void {\n if (!readBoolAttr(this, \"global-shortcut\")) {\n return;\n }\n this.globalKeyHandler = (event: KeyboardEvent) => {\n if ((event.metaKey || event.ctrlKey) && event.key.toLowerCase() === \"k\") {\n event.preventDefault();\n if (this.hasAttribute(\"open\")) {\n this.closePalette();\n } else {\n this.openPalette();\n }\n }\n };\n document.addEventListener(\"keydown\", this.globalKeyHandler);\n }\n\n private unbindGlobalShortcut(): void {\n if (this.globalKeyHandler) {\n document.removeEventListener(\"keydown\", this.globalKeyHandler);\n this.globalKeyHandler = null;\n }\n }\n\n private syncOpen(): void {\n if (!this.dialogEl) {\n return;\n }\n const shouldOpen = this.hasAttribute(\"open\");\n if (shouldOpen && !this.dialogEl.open) {\n this.dialogEl.removeAttribute(\"aria-hidden\");\n showModalDialog(this.dialogEl);\n this.activeIndex = 0;\n this.renderResults();\n queueMicrotask(() => this.inputEl?.focus());\n } else if (!shouldOpen && this.dialogEl.open) {\n closeModalDialog(this.dialogEl);\n this.dialogEl.setAttribute(\"aria-hidden\", \"true\");\n } else if (!shouldOpen) {\n this.dialogEl.setAttribute(\"aria-hidden\", \"true\");\n }\n }\n\n private scrollActiveIntoView(): void {\n const active = this.resultsEl?.querySelector(\n \".viking-search-result.is-selected\",\n );\n active?.scrollIntoView({ block: \"nearest\" });\n }\n\n private activateItem(item: VikingSearchPaletteItem): void {\n this.dispatchEvent(\n new CustomEvent(\"viking-select\", {\n bubbles: true,\n composed: true,\n detail: { item },\n }),\n );\n this.closePalette();\n\n if (item.action === \"cookie-settings\") {\n const widgets = (\n globalThis as { DemlWidgets?: { openCookieSettings?: () => void } }\n ).DemlWidgets;\n widgets?.openCookieSettings?.();\n return;\n }\n\n if (item.action === \"bug-report\") {\n const widgets = (\n globalThis as { DemlWidgets?: { openBugReport?: () => void } }\n ).DemlWidgets;\n if (widgets?.openBugReport) {\n widgets.openBugReport();\n return;\n }\n }\n\n if (item.href && item.href !== \"#\") {\n window.location.assign(item.href);\n }\n }\n\n private renderResults(): void {\n if (!this.resultsEl) {\n return;\n }\n\n const items = parseItems(this);\n const q = this.query.trim().toLowerCase();\n const filtered = filterItems(items, q);\n this.flatResults = filtered;\n\n if (filtered.length === 0) {\n const q = this.query.trim();\n this.resultsEl.innerHTML = `<p class=\"viking-search-empty\" role=\"status\">${q ? \"No results found\" : \"Start typing to search…\"}</p>`;\n this.inputEl?.removeAttribute(\"aria-activedescendant\");\n return;\n }\n\n if (this.activeIndex >= filtered.length) {\n this.activeIndex = filtered.length - 1;\n }\n\n let resultIndex = 0;\n const grouped = groupItems(filtered);\n\n const markup = grouped\n .map(({ group, items: groupItemsList }) => {\n const groupLabel = group\n ? `<p class=\"viking-search-group-label\" role=\"presentation\">${escapeHtml(group)}</p>`\n : \"\";\n const rows = groupItemsList\n .map((item) => {\n const id = `${this.resultsId}-result-${resultIndex}`;\n const selected = resultIndex === this.activeIndex;\n resultIndex += 1;\n return `\n <a\n id=\"${id}\"\n class=\"viking-search-result${selected ? \" is-selected\" : \"\"}\"\n role=\"option\"\n aria-selected=\"${selected}\"\n href=\"${escapeHtml(item.href)}\"\n part=\"result\"\n data-index=\"${resultIndex - 1}\"\n >\n <div>\n <div class=\"viking-search-result-title\">${escapeHtml(item.title)}</div>\n ${item.snippet ? `<div class=\"viking-search-result-snippet\">${escapeHtml(item.snippet)}</div>` : \"\"}\n </div>\n </a>`;\n })\n .join(\"\");\n return `${groupLabel}${rows}`;\n })\n .join(\"\");\n\n this.resultsEl.innerHTML = `<div class=\"viking-search-results\" id=\"${this.resultsId}\" role=\"listbox\" aria-label=\"Search results\">${markup}</div>`;\n\n const activeId = `${this.resultsId}-result-${this.activeIndex}`;\n this.inputEl?.setAttribute(\"aria-activedescendant\", activeId);\n this.inputEl?.setAttribute(\"role\", \"combobox\");\n this.inputEl?.setAttribute(\"aria-expanded\", \"true\");\n this.inputEl?.setAttribute(\"aria-controls\", this.resultsId);\n\n this.resultsEl.querySelectorAll(\".viking-search-result\").forEach((node) => {\n node.addEventListener(\"click\", (event) => {\n event.preventDefault();\n const index = Number((node as HTMLElement).dataset[\"index\"] ?? 0);\n const item = this.flatResults[index];\n if (item) {\n this.activateItem(item);\n }\n });\n node.addEventListener(\"mouseenter\", () => {\n const index = Number((node as HTMLElement).dataset[\"index\"] ?? 0);\n this.activeIndex = index;\n this.renderResults();\n });\n });\n }\n\n private render(): void {\n const placeholder =\n this.getAttribute(\"placeholder\") ??\n \"Search documentation, dashboard, API…\";\n const mod = modKeyLabel();\n\n this.shadow.innerHTML = `\n <dialog class=\"viking-search-palette-backdrop\" aria-label=\"Search\" aria-hidden=\"true\">\n <div class=\"viking-search-palette\" part=\"panel\" role=\"document\">\n <div class=\"viking-search-palette-header\" part=\"header\">\n <span class=\"viking-search-palette-icon\" aria-hidden=\"true\">${renderInlineIcon(\"search\", 24)}</span>\n <input\n id=\"${this.inputId}\"\n type=\"search\"\n class=\"viking-search-palette-input\"\n part=\"input\"\n placeholder=\"${escapeHtml(placeholder)}\"\n aria-label=\"${escapeHtml(placeholder)}\"\n aria-autocomplete=\"list\"\n autocomplete=\"off\"\n spellcheck=\"false\"\n />\n <button type=\"button\" class=\"viking-search-palette-close\" part=\"close\" aria-label=\"Close search\">${renderInlineIcon(\"x\", 20)}</button>\n </div>\n <div class=\"viking-search-palette-body\" part=\"body\">\n <slot></slot>\n <div class=\"viking-search-results-host\"></div>\n </div>\n <footer class=\"viking-search-palette-footer\" part=\"footer\">\n <span class=\"viking-kbd\">${mod}</span><span class=\"viking-kbd\">K</span> toggle ·\n <span class=\"viking-kbd\">↑</span><span class=\"viking-kbd\">↓</span> navigate ·\n <span class=\"viking-kbd\">Enter</span> open ·\n <span class=\"viking-kbd\">Esc</span> close\n </footer>\n </div>\n </dialog>\n `;\n\n this.dialogEl = this.shadow.querySelector(\"dialog\");\n this.inputEl = this.shadow.querySelector(\"input\");\n this.resultsEl = this.shadow.querySelector(\".viking-search-results-host\");\n\n this.shadow\n .querySelector(\".viking-search-palette-close\")\n ?.addEventListener(\"click\", () => this.closePalette());\n\n this.dialogEl?.addEventListener(\"keydown\", (event) => {\n if (event.key === \"Escape\") {\n event.preventDefault();\n this.closePalette();\n }\n });\n }\n}\n\nexport const registerVikingSearchPaletteWc = (): void => {\n defineCustomElement(VikingSearchPaletteWc.tag, VikingSearchPaletteWc);\n defineCustomElementAlias(\n VikingSearchPaletteWc.searchTag,\n VikingSearchPaletteWc,\n );\n defineCustomElementAlias(\n VikingSearchPaletteWc.legacyTag,\n VikingSearchPaletteWc,\n );\n};\n","import { VikingIconName } from \"../core/icons\";\n\n/**\n * Drakkar — the Viking longship that carries the site shell (navbar, footer, nav links)\n * across marketing, app, and backend surfaces.\n */\n\n/** Which DEML surface the Drakkar shell is rendering on (navbar + footer). */\nexport type SiteDrakkarContext = \"app\" | \"marketing\" | \"backend\" | \"docs\";\n\nexport interface SiteUrls {\n app: string;\n marketing: string;\n backend: string;\n}\n\nexport interface SiteNavLink {\n id: string;\n label: string;\n icon: VikingIconName;\n appHref: string;\n marketingHref: string;\n external?: boolean;\n requireAuth?: boolean;\n /** Routes served by deml.app — resolved to absolute app URLs off-app. */\n platform?: boolean;\n}\n\nexport interface SiteFooterLink {\n label: string;\n appHref: string;\n marketingHref: string;\n external?: boolean;\n action?: \"cookie-settings\" | \"bug-report\";\n /** Routes served by deml.app — resolved to absolute app URLs off-app. */\n platform?: boolean;\n}\n\nexport interface SiteFooterColumn {\n title: string;\n links: SiteFooterLink[];\n}\n\n/** Primary navbar links (desktop + mobile). Shown on every surface. */\nexport const SITE_NAV_LINKS: readonly SiteNavLink[] = [\n {\n id: \"explore\",\n label: \"Explore\",\n icon: \"globe\",\n appHref: \"/explore\",\n marketingHref: \"/explore\",\n platform: true,\n },\n {\n id: \"documentation\",\n label: \"Documentation\",\n icon: \"file\",\n appHref: \"https://dataengineeringformachinelearning.com/documentation/\",\n marketingHref: \"/documentation\",\n },\n {\n id: \"dashboard\",\n label: \"Dashboard\",\n icon: \"home\",\n appHref: \"/dashboard\",\n marketingHref: \"/dashboard\",\n requireAuth: true,\n platform: true,\n },\n {\n id: \"sites\",\n label: \"Sites\",\n icon: \"building\",\n appHref: \"/settings\",\n marketingHref: \"/settings\",\n requireAuth: true,\n platform: true,\n },\n {\n id: \"account\",\n label: \"Account\",\n icon: \"user\",\n appHref: \"/account\",\n marketingHref: \"/account\",\n requireAuth: true,\n platform: true,\n },\n] as const;\n\nexport const SITE_FOOTER_COLUMNS: readonly SiteFooterColumn[] = [\n {\n title: \"Platform\",\n links: [\n {\n label: \"Explore\",\n appHref: \"/explore\",\n marketingHref: \"/explore\",\n platform: true,\n },\n {\n label: \"Dashboard\",\n appHref: \"/dashboard\",\n marketingHref: \"/dashboard\",\n platform: true,\n },\n {\n label: \"Sites\",\n appHref: \"/settings\",\n marketingHref: \"/settings\",\n platform: true,\n },\n {\n label: \"Account\",\n appHref: \"/account\",\n marketingHref: \"/account\",\n platform: true,\n },\n {\n label: \"Platform Status\",\n appHref: \"/status/platform-status\",\n marketingHref: \"/status/platform-status\",\n platform: true,\n },\n ],\n },\n {\n title: \"Resources\",\n links: [\n {\n label: \"Documentation\",\n appHref: \"https://dataengineeringformachinelearning.com/documentation/\",\n marketingHref: \"/documentation\",\n },\n {\n label: \"Whitepaper\",\n appHref: \"https://dataengineeringformachinelearning.com/whitepaper/\",\n marketingHref: \"/whitepaper\",\n },\n {\n label: \"Book\",\n appHref: \"https://dataengineeringformachinelearning.com/book/\",\n marketingHref: \"/book\",\n },\n ],\n },\n {\n title: \"Support\",\n links: [\n {\n label: \"Platform Status\",\n appHref: \"/status/platform-status\",\n marketingHref: \"/status/platform-status\",\n platform: true,\n },\n {\n label: \"Report a Bug\",\n appHref: \"#\",\n marketingHref: \"#\",\n action: \"bug-report\",\n },\n ],\n },\n {\n title: \"Legal & Compliance\",\n links: [\n {\n label: \"Privacy Policy\",\n appHref: \"https://dataengineeringformachinelearning.com/privacy/\",\n marketingHref: \"/privacy\",\n },\n {\n label: \"Terms of Service\",\n appHref: \"https://dataengineeringformachinelearning.com/terms/\",\n marketingHref: \"/terms\",\n },\n {\n label: \"SOC2 Compliance\",\n appHref: \"https://dataengineeringformachinelearning.com/compliance/\",\n marketingHref: \"/compliance\",\n },\n {\n label: \"GDPR Compliance\",\n appHref: \"https://dataengineeringformachinelearning.com/privacy/#gdpr\",\n marketingHref: \"/privacy#gdpr\",\n },\n {\n label: \"Cookie Settings\",\n appHref: \"#\",\n marketingHref: \"#\",\n action: \"cookie-settings\",\n },\n ],\n },\n] as const;\n\nexport const BUG_REPORT_QUERY = \"reportBug=1\";\nexport const COOKIE_SETTINGS_QUERY = \"cookieSettings=1\";\n\nconst isAbsoluteUrl = (href: string): boolean => /^https?:\\/\\//i.test(href);\n\nconst joinBase = (base: string, path: string): string => {\n if (isAbsoluteUrl(path)) {\n return path;\n }\n const normalizedBase = base.replace(/\\/$/, \"\");\n const normalizedPath = path.startsWith(\"/\") ? path : `/${path}`;\n return `${normalizedBase}${normalizedPath}`;\n};\n\nexport const bugReportHref = (urls: SiteUrls): string =>\n `${joinBase(urls.app, \"/\")}?${BUG_REPORT_QUERY}`;\n\nexport const cookieSettingsHref = (urls: SiteUrls): string =>\n `${joinBase(urls.marketing, \"/\")}?${COOKIE_SETTINGS_QUERY}`;\n\nconst resolveMarketingContentHref = (href: string, urls: SiteUrls): string => {\n if (isAbsoluteUrl(href)) {\n return href;\n }\n if (href.startsWith(\"mailto:\")) {\n return href;\n }\n return href.startsWith(\"/\") ? href : joinBase(urls.marketing, href);\n};\n\nconst resolvePlatformHref = (\n href: string,\n context: SiteDrakkarContext,\n urls: SiteUrls,\n): string => {\n if (context === \"app\") {\n return href;\n }\n return joinBase(urls.app, href);\n};\n\nexport const resolveNavHref = (\n link: SiteNavLink,\n context: SiteDrakkarContext,\n urls: SiteUrls,\n): string => {\n if (link.platform) {\n return resolvePlatformHref(link.appHref, context, urls);\n }\n if (context === \"app\") {\n return link.appHref;\n }\n return resolveMarketingContentHref(link.marketingHref, urls);\n};\n\nexport const resolveFooterHref = (\n link: SiteFooterLink,\n context: SiteDrakkarContext,\n urls: SiteUrls,\n): string => {\n if (link.action === \"bug-report\") {\n return context === \"app\" ? \"#\" : bugReportHref(urls);\n }\n if (link.action === \"cookie-settings\") {\n return cookieSettingsHref(urls);\n }\n if (link.platform) {\n return resolvePlatformHref(link.appHref, context, urls);\n }\n if (context === \"app\") {\n return link.appHref;\n }\n return resolveMarketingContentHref(link.marketingHref, urls);\n};\n\nexport const resolveBrandHref = (\n context: SiteDrakkarContext,\n urls: SiteUrls,\n): string => {\n if (context === \"marketing\") {\n return \"/\";\n }\n return urls.marketing;\n};\n\n/** Navbar links; auth-gated entries appear only when the session is active. */\nexport const visibleNavLinks = (\n links: readonly SiteNavLink[],\n isAuthenticated = false,\n): SiteNavLink[] =>\n links.filter((link) => !link.requireAuth || isAuthenticated);\n\nexport const isAppRouterPath = (href: string): boolean =>\n !isAbsoluteUrl(href) && href.startsWith(\"/\");\n\nexport const DEFAULT_SITE_URLS: SiteUrls = {\n app: \"https://deml.app\",\n marketing: \"https://dataengineeringformachinelearning.com\",\n backend: \"https://backend.deml.app\",\n};\n","import type {\n SiteDrakkarContext,\n SiteFooterLink,\n SiteNavLink,\n SiteUrls,\n} from \"./site-drakkar.config\";\nimport {\n SITE_FOOTER_COLUMNS,\n SITE_NAV_LINKS,\n bugReportHref,\n cookieSettingsHref,\n resolveFooterHref,\n resolveNavHref,\n} from \"./site-drakkar.config\";\n\n/** Curated command-palette entry for cross-surface navigation. */\nexport type SuiteSearchItem = {\n title: string;\n href: string;\n snippet?: string;\n group?: string;\n keywords?: string[];\n action?: \"cookie-settings\" | \"bug-report\";\n};\n\nconst dedupeItems = (items: SuiteSearchItem[]): SuiteSearchItem[] => {\n const seen = new Set<string>();\n return items.filter((item) => {\n const key = `${item.title}:${item.href}:${item.action ?? \"\"}`;\n if (seen.has(key)) {\n return false;\n }\n seen.add(key);\n return true;\n });\n};\n\nconst navItem = (\n link: SiteNavLink,\n context: SiteDrakkarContext,\n urls: SiteUrls,\n): SuiteSearchItem => ({\n title: link.label,\n href: resolveNavHref(link, context, urls),\n snippet: `Open ${link.label}`,\n group: \"Platform\",\n keywords: [link.id, link.label.toLowerCase(), \"navigate\", \"go\"],\n});\n\nconst footerItem = (\n link: SiteFooterLink,\n columnTitle: string,\n context: SiteDrakkarContext,\n urls: SiteUrls,\n): SuiteSearchItem => {\n if (link.action === \"cookie-settings\") {\n return {\n title: link.label,\n href: cookieSettingsHref(urls),\n snippet: \"Manage analytics and cookie preferences\",\n group: columnTitle,\n keywords: [\"cookies\", \"consent\", \"privacy\", \"gdpr\"],\n action: \"cookie-settings\",\n };\n }\n\n if (link.action === \"bug-report\") {\n return {\n title: link.label,\n href: context === \"app\" ? \"#\" : bugReportHref(urls),\n snippet: \"Submit a product issue or regression\",\n group: columnTitle,\n keywords: [\"bug\", \"issue\", \"support\", \"feedback\"],\n action: \"bug-report\",\n };\n }\n\n return {\n title: link.label,\n href: resolveFooterHref(link, context, urls),\n snippet: `Open ${link.label}`,\n group: columnTitle,\n keywords: [link.label.toLowerCase(), columnTitle.toLowerCase()],\n };\n};\n\n/** Static entries that are not derived from Drakkar nav/footer config. */\nconst SUITE_SEARCH_EXTRAS: readonly Omit<SuiteSearchItem, \"href\">[] = [\n {\n title: \"Viking-UI Components\",\n snippet: \"Browse the design system showcase\",\n group: \"Resources\",\n keywords: [\"viking\", \"ui\", \"design system\", \"components\", \"showcase\"],\n },\n {\n title: \"Design tokens\",\n snippet: \"Canonical --viking-* token matrix\",\n group: \"Resources\",\n keywords: [\"tokens\", \"theme\", \"css\", \"variables\"],\n },\n {\n title: \"API reference\",\n snippet: \"OpenAPI schema and REST endpoints\",\n group: \"Resources\",\n keywords: [\"api\", \"openapi\", \"swagger\", \"rest\"],\n },\n];\n\nconst resolveExtraHref = (\n extra: (typeof SUITE_SEARCH_EXTRAS)[number],\n context: SiteDrakkarContext,\n urls: SiteUrls,\n): string => {\n switch (extra.title) {\n case \"Viking-UI Components\":\n return \"https://ui.dataengineeringformachinelearning.com/components\";\n case \"Design tokens\":\n return \"https://ui.dataengineeringformachinelearning.com/tokens\";\n case \"API reference\":\n return `${urls.backend.replace(/\\/$/, \"\")}/api/docs`;\n default:\n return context === \"app\" ? urls.app : urls.marketing;\n }\n};\n\n/** Viking-UI docs site entries (ui.dataengineeringformachinelearning.com). */\nconst DOCS_SEARCH_EXTRAS: readonly SuiteSearchItem[] = [\n {\n title: \"Components\",\n href: \"/components\",\n snippet: \"Browse all documented primitives\",\n group: \"Viking-UI\",\n keywords: [\"components\", \"showcase\", \"registry\"],\n },\n {\n title: \"Playground\",\n href: \"/playground\",\n snippet: \"Live Web Component sandbox\",\n group: \"Viking-UI\",\n keywords: [\"playground\", \"sandbox\", \"demo\"],\n },\n {\n title: \"Architecture\",\n href: \"/architecture\",\n snippet: \"CSS + WC + Angular layers\",\n group: \"Viking-UI\",\n keywords: [\"architecture\", \"layers\", \"web component\"],\n },\n {\n title: \"Design tokens\",\n href: \"/tokens\",\n snippet: \"Canonical --viking-* token matrix\",\n group: \"Viking-UI\",\n keywords: [\"tokens\", \"theme\", \"css\", \"variables\"],\n },\n {\n title: \"Theming\",\n href: \"/theming\",\n snippet: \"Light/dark mode and sync pipeline\",\n group: \"Viking-UI\",\n keywords: [\"theming\", \"dark\", \"light\", \"mode\"],\n },\n {\n title: \"Framework guides\",\n href: \"/frameworks\",\n snippet: \"Angular, Astro, Django setup\",\n group: \"Viking-UI\",\n keywords: [\"frameworks\", \"angular\", \"astro\", \"django\"],\n },\n {\n title: \"Contributing\",\n href: \"/contributing\",\n snippet: \"Extend the Viking-UI kit\",\n group: \"Viking-UI\",\n keywords: [\"contributing\", \"extend\", \"primitives\"],\n },\n];\n\nconst resolveDocsHref = (href: string, docsOrigin: string): string =>\n href.startsWith(\"http\")\n ? href\n : `${docsOrigin.replace(/\\/$/, \"\")}${href.startsWith(\"/\") ? href : `/${href}`}`;\n\n/**\n * Builds curated command-palette links for deml.app, marketing, backend, and docs.\n * Used by the static widget and Angular `viking-suite-search-palette`.\n */\nexport const buildSuiteSearchItems = (\n context: SiteDrakkarContext,\n urls: SiteUrls,\n options?: { docsOrigin?: string },\n): SuiteSearchItem[] => {\n const paletteContext = context === \"docs\" ? \"marketing\" : context;\n\n const items: SuiteSearchItem[] = [\n ...SITE_NAV_LINKS.map((link) => navItem(link, paletteContext, urls)),\n ...SITE_FOOTER_COLUMNS.flatMap((column) =>\n column.links.map((link) =>\n footerItem(link, column.title, paletteContext, urls),\n ),\n ),\n ...SUITE_SEARCH_EXTRAS.map((extra) => ({\n ...extra,\n href: resolveExtraHref(extra, paletteContext, urls),\n })),\n ];\n\n if (context === \"app\") {\n items.push(\n {\n title: \"Settings\",\n href: \"/settings\",\n snippet: \"Workspace domains, billing, and security\",\n group: \"Platform\",\n keywords: [\"settings\", \"sites\", \"workspace\", \"configuration\"],\n },\n {\n title: \"Billing & subscription\",\n href: \"/settings/billing\",\n snippet: \"Manage plan, invoices, and payment methods\",\n group: \"Platform\",\n keywords: [\"billing\", \"stripe\", \"subscription\", \"payment\"],\n },\n {\n title: \"Security settings\",\n href: \"/settings/security\",\n snippet: \"Keys, sessions, and access controls\",\n group: \"Platform\",\n keywords: [\"security\", \"keys\", \"auth\", \"rbac\"],\n },\n );\n }\n\n if (context === \"docs\") {\n const docsOrigin =\n options?.docsOrigin ?? \"https://ui.dataengineeringformachinelearning.com\";\n items.push(\n ...DOCS_SEARCH_EXTRAS.map((extra) => ({\n ...extra,\n href: resolveDocsHref(extra.href, docsOrigin),\n })),\n );\n }\n\n return dedupeItems(items);\n};\n","import {\n DEFAULT_SITE_URLS,\n type SiteDrakkarContext,\n type SiteUrls,\n} from \"../../lib/site-drakkar/site-drakkar.config\";\nimport { buildSuiteSearchItems } from \"../../lib/site-drakkar/suite-search-items\";\nimport { readBoolAttr } from \"../core/base\";\nimport {\n defineCustomElement,\n defineCustomElementAlias,\n HTMLElementBase,\n} from \"../core/dom\";\nimport {\n VikingSearchPaletteWc,\n registerVikingSearchPaletteWc,\n type VikingSearchPaletteItem,\n} from \"../search-palette/viking-search-palette-wc\";\n\nconst VALID_CONTEXTS = new Set<SiteDrakkarContext>([\n \"app\",\n \"marketing\",\n \"backend\",\n \"docs\",\n]);\n\nconst detectContext = (): SiteDrakkarContext => {\n const explicit = document.documentElement.getAttribute(\"data-deml-context\");\n if (explicit && VALID_CONTEXTS.has(explicit as SiteDrakkarContext)) {\n return explicit as SiteDrakkarContext;\n }\n\n const host = window.location.hostname;\n if (host.startsWith(\"ui.\")) {\n return \"docs\";\n }\n if (host.includes(\"deml.app\") && !host.startsWith(\"backend.\")) {\n return \"app\";\n }\n if (host.startsWith(\"backend.\")) {\n return \"backend\";\n }\n return \"marketing\";\n};\n\nconst readUrls = (el: HTMLElement): SiteUrls => {\n const env = (globalThis as { __DEML?: Partial<SiteUrls> }).__DEML ?? {};\n return {\n app: el.getAttribute(\"app-url\") ?? env.app ?? DEFAULT_SITE_URLS.app,\n marketing:\n el.getAttribute(\"marketing-url\") ??\n env.marketing ??\n DEFAULT_SITE_URLS.marketing,\n backend:\n el.getAttribute(\"backend-url\") ??\n env.backend ??\n DEFAULT_SITE_URLS.backend,\n };\n};\n\nconst readContext = (el: HTMLElement): SiteDrakkarContext => {\n const raw = el.getAttribute(\"context\");\n if (raw && VALID_CONTEXTS.has(raw as SiteDrakkarContext)) {\n return raw as SiteDrakkarContext;\n }\n return detectContext();\n};\n\n/**\n * Unified cross-suite command palette Web Component.\n * Tag: `viking-suite-command-palette`\n * Aliases: `viking-suite-search-palette`, `viking-suite-search-palette-wc`\n *\n * Curated ⌘K navigation for marketing, docs, deml.app, and backend surfaces.\n * Composes `viking-command-palette` with suite links from site-drakkar config.\n *\n * @attr context - Surface: app | marketing | backend | docs (auto-detected when omitted)\n * @attr app-url - Override deml.app origin\n * @attr marketing-url - Override marketing origin\n * @attr backend-url - Override backend origin\n * @attr global-shortcut - Bind ⌘K / Ctrl+K (default: on)\n * @attr placeholder - Search input placeholder\n *\n * @method openPalette() - Programmatically open\n * @method closePalette() - Programmatically close\n *\n * @example\n * <viking-suite-command-palette context=\"marketing\" global-shortcut></viking-suite-command-palette>\n */\nexport class VikingSuiteSearchPaletteWc extends HTMLElementBase {\n static readonly tag = \"viking-suite-command-palette\";\n static readonly searchTag = \"viking-suite-search-palette\";\n static readonly legacyTag = \"viking-suite-search-palette-wc\";\n\n static get observedAttributes(): string[] {\n return [\n \"context\",\n \"app-url\",\n \"marketing-url\",\n \"backend-url\",\n \"placeholder\",\n \"global-shortcut\",\n ];\n }\n\n private paletteEl: VikingSearchPaletteWc | null = null;\n private itemsLoaded = false;\n\n connectedCallback(): void {\n registerVikingSearchPaletteWc();\n this.ensurePalette();\n void this.loadItems();\n }\n\n attributeChangedCallback(name: string): void {\n if (!this.isConnected) {\n return;\n }\n if (name === \"placeholder\" && this.paletteEl) {\n const placeholder =\n this.getAttribute(\"placeholder\") ??\n \"Search documentation, dashboard, settings…\";\n this.paletteEl.setAttribute(\"placeholder\", placeholder);\n return;\n }\n if (name === \"global-shortcut\" && this.paletteEl) {\n if (\n readBoolAttr(this, \"global-shortcut\") ||\n !this.hasAttribute(\"global-shortcut\")\n ) {\n this.paletteEl.setAttribute(\"global-shortcut\", \"\");\n } else {\n this.paletteEl.removeAttribute(\"global-shortcut\");\n }\n return;\n }\n if (\n name === \"context\" ||\n name === \"app-url\" ||\n name === \"marketing-url\" ||\n name === \"backend-url\"\n ) {\n void this.loadItems(true);\n }\n }\n\n /** Opens the unified command palette. */\n openPalette(): void {\n this.ensurePalette();\n void this.loadItems().then(() => this.paletteEl?.openPalette());\n }\n\n /** Closes the unified command palette. */\n closePalette(): void {\n this.paletteEl?.closePalette();\n }\n\n private ensurePalette(): void {\n if (this.paletteEl) {\n return;\n }\n\n this.paletteEl = document.createElement(\n \"viking-command-palette\",\n ) as VikingSearchPaletteWc;\n this.paletteEl.id = \"deml-command-palette\";\n\n const placeholder =\n this.getAttribute(\"placeholder\") ??\n \"Search documentation, dashboard, settings…\";\n this.paletteEl.setAttribute(\"placeholder\", placeholder);\n\n if (\n readBoolAttr(this, \"global-shortcut\") ||\n !this.hasAttribute(\"global-shortcut\")\n ) {\n this.paletteEl.setAttribute(\"global-shortcut\", \"\");\n }\n\n this.append(this.paletteEl);\n }\n\n private async loadItems(force = false): Promise<void> {\n if (!this.paletteEl || (this.itemsLoaded && !force)) {\n return;\n }\n\n const context = readContext(this);\n const urls = readUrls(this);\n let items: VikingSearchPaletteItem[] = buildSuiteSearchItems(\n context,\n urls,\n {\n docsOrigin: window.location.origin,\n },\n );\n\n try {\n const response = await fetch(\"/assets/site-drakkar.json\", {\n cache: \"no-cache\",\n });\n if (response.ok) {\n const drakkar = (await response.json()) as {\n navLinks?: unknown[];\n footerColumns?: unknown[];\n };\n if (drakkar.navLinks?.length || drakkar.footerColumns?.length) {\n items = buildSuiteSearchItems(context, urls, {\n docsOrigin: window.location.origin,\n });\n }\n }\n } catch {\n // Bundled config is authoritative when JSON is unavailable.\n }\n\n this.paletteEl.setAttribute(\"items\", JSON.stringify(items));\n this.itemsLoaded = true;\n }\n}\n\nexport const registerVikingSuiteSearchPaletteWc = (): void => {\n defineCustomElement(\n VikingSuiteSearchPaletteWc.tag,\n VikingSuiteSearchPaletteWc,\n );\n defineCustomElementAlias(\n VikingSuiteSearchPaletteWc.searchTag,\n VikingSuiteSearchPaletteWc,\n );\n defineCustomElementAlias(\n VikingSuiteSearchPaletteWc.legacyTag,\n VikingSuiteSearchPaletteWc,\n );\n};\n","import { attachShadowStyles } from \"../core/base\";\nimport { defineCustomElement, HTMLElementBase } from \"../core/dom\";\n\nconst VIKING_THEME_TOGGLE_STYLES = `\n:host {\n display: inline-flex;\n}\n\n.theme-toggle-btn {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n width: var(--viking-control-height, 40px);\n height: var(--viking-control-height, 40px);\n min-width: var(--viking-control-height, 40px);\n padding: 0;\n border: 1px solid color-mix(in srgb, var(--viking-accent, var(--viking-accent)) 32%, var(--viking-border-strong, var(--viking-border)));\n border-radius: var(--viking-radius);\n background: color-mix(in srgb, var(--viking-accent, var(--viking-accent)) 8%, var(--viking-surface));\n color: var(--viking-accent-strong, var(--viking-ring));\n box-shadow: var(--viking-shadow-sm);\n cursor: pointer;\n transition: var(--viking-transition-interactive);\n -webkit-tap-highlight-color: transparent;\n}\n\n.theme-toggle-btn:hover {\n border-color: var(--viking-accent-strong, var(--viking-ring));\n background: color-mix(in srgb, var(--viking-accent, var(--viking-accent)) 14%, var(--viking-surface-alt));\n color: var(--viking-accent-strong, var(--viking-ring));\n box-shadow: var(--viking-shadow-md);\n}\n\n.theme-toggle-btn:focus-visible {\n outline: var(--viking-ring-width, 2px) solid var(--viking-ring);\n outline-offset: var(--viking-ring-offset, 2px);\n}\n\n.theme-toggle-btn:active {\n transform: scale(var(--viking-state-active-scale, 0.98));\n}\n\n.theme-icon {\n display: none;\n}\n\n.theme-icon.is-visible {\n display: block;\n}\n`;\n\nconst applyTheme = (theme: \"light\" | \"dark\"): void => {\n document.documentElement.setAttribute(\"data-theme\", theme);\n document.documentElement.classList.toggle(\"dark\", theme === \"dark\");\n localStorage.setItem(\"theme\", theme);\n};\n\nconst readTheme = (): \"light\" | \"dark\" => {\n const saved = localStorage.getItem(\"theme\");\n if (saved === \"light\" || saved === \"dark\") return saved;\n return window.matchMedia(\"(prefers-color-scheme: dark)\").matches\n ? \"dark\"\n : \"light\";\n};\n\n/**\n * Framework-agnostic theme toggle Web Component.\n * Tag: `viking-theme-toggle-wc`\n */\nexport class VikingThemeToggleWc extends HTMLElementBase {\n static readonly tag = \"viking-theme-toggle-wc\";\n\n private readonly shadow: ShadowRoot;\n private button: HTMLButtonElement | null = null;\n private sunIcon: SVGElement | null = null;\n private moonIcon: SVGElement | null = null;\n\n constructor() {\n super();\n this.shadow = this.attachShadow({ mode: \"open\" });\n attachShadowStyles(this.shadow, VIKING_THEME_TOGGLE_STYLES);\n }\n\n connectedCallback(): void {\n if (!this.hasAttribute(\"role\")) {\n this.setAttribute(\"role\", \"button\");\n }\n this.render();\n this.syncIcons();\n this.button?.addEventListener(\"click\", this.onClick);\n }\n\n disconnectedCallback(): void {\n this.button?.removeEventListener(\"click\", this.onClick);\n }\n\n private readonly onClick = (): void => {\n const next = readTheme() === \"light\" ? \"dark\" : \"light\";\n applyTheme(next);\n this.syncIcons();\n this.dispatchEvent(\n new CustomEvent(\"viking-theme-change\", {\n bubbles: true,\n composed: true,\n detail: { theme: next },\n }),\n );\n };\n\n private syncIcons = (): void => {\n const isLight = readTheme() === \"light\";\n this.sunIcon?.classList.toggle(\"is-visible\", isLight);\n this.moonIcon?.classList.toggle(\"is-visible\", !isLight);\n };\n\n private render(): void {\n const label =\n this.getAttribute(\"aria-label\") ?? \"Toggle light and dark theme\";\n this.shadow.innerHTML = `\n <button type=\"button\" class=\"theme-toggle-btn\" part=\"control\" aria-label=\"${label}\">\n <svg class=\"theme-icon theme-icon-sun\" width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" aria-hidden=\"true\">\n <circle cx=\"12\" cy=\"12\" r=\"4\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"/>\n <path stroke=\"currentColor\" stroke-width=\"2\" d=\"M12 2v2M12 20v2M4.93 4.93l1.41 1.41M17.66 17.66l1.41 1.41M2 12h2M20 12h2M4.93 19.07l1.41-1.41M17.66 6.34l1.41-1.41\"/>\n </svg>\n <svg class=\"theme-icon theme-icon-moon\" width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" aria-hidden=\"true\">\n <path fill=\"currentColor\" d=\"M21 12.79A9 9 0 1111.21 3 7 7 0 0021 12.79z\"/>\n </svg>\n </button>\n `;\n this.button = this.shadow.querySelector(\"button\");\n this.sunIcon = this.shadow.querySelector(\".theme-icon-sun\");\n this.moonIcon = this.shadow.querySelector(\".theme-icon-moon\");\n }\n}\n\nexport const registerVikingThemeToggleWc = (): void => {\n defineCustomElement(VikingThemeToggleWc.tag, VikingThemeToggleWc);\n};\n","import {\n DEFAULT_SITE_URLS,\n type SiteDrakkarContext,\n type SiteUrls,\n resolveBrandHref,\n resolveNavHref,\n SITE_NAV_LINKS,\n visibleNavLinks,\n} from \"../../lib/site-drakkar/site-drakkar.config\";\nimport { attachShadowStyles, readBoolAttr } from \"../core/base\";\nimport {\n defineCustomElement,\n escapeHtml,\n HTMLElementBase,\n modKeyLabel,\n} from \"../core/dom\";\nimport { renderInlineIcon } from \"../core/icons-inline\";\nimport {\n registerVikingSuiteSearchPaletteWc,\n type VikingSuiteSearchPaletteWc,\n} from \"../suite-search-palette/viking-suite-search-palette-wc\";\nimport { registerVikingThemeToggleWc } from \"../theme-toggle/viking-theme-toggle-wc\";\n\nconst VALID_CONTEXTS = new Set<SiteDrakkarContext>([\n \"app\",\n \"marketing\",\n \"backend\",\n \"docs\",\n]);\n\nconst VIKING_SUITE_HEADER_STYLES = `\n:host {\n display: block;\n position: sticky;\n top: 0;\n z-index: var(--viking-z-sticky, 50);\n color: var(--viking-text);\n font-family: var(--viking-font-family);\n}\n\n* {\n box-sizing: border-box;\n}\n\n.suite-header {\n width: 100%;\n min-height: var(--viking-navbar-height, var(--viking-space-8));\n background: var(--viking-surface);\n border-bottom: var(--viking-border-width, 1px) solid var(--viking-border);\n box-shadow: var(--viking-shadow-xs);\n isolation: isolate;\n}\n\n.suite-header__bar {\n display: grid;\n grid-template-columns: minmax(max-content, auto) minmax(0, 1fr) max-content;\n align-items: center;\n gap: var(--viking-space-1);\n width: 100%;\n max-width: var(--viking-container-max-width);\n min-height: var(--viking-navbar-height, var(--viking-space-8));\n margin-inline: auto;\n padding-inline: var(--viking-page-gutter);\n}\n\n.suite-header__brand {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n gap: var(--viking-space-1);\n min-width: 0;\n min-height: var(--viking-control-height);\n color: var(--viking-text);\n text-decoration: none;\n border-radius: var(--viking-radius);\n}\n\n.suite-header__brand:focus-visible,\n.suite-header__link:focus-visible,\n.suite-header__icon-button:focus-visible,\n.suite-header__auth-link:focus-visible,\n.suite-header__user-trigger:focus-visible,\n.suite-header__menu-link:focus-visible,\n.suite-header__menu-button:focus-visible {\n outline: var(--viking-ring-width) solid var(--viking-ring);\n outline-offset: var(--viking-ring-offset);\n}\n\n.suite-header__mark {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: var(--viking-space-4);\n height: var(--viking-space-4);\n color: var(--viking-accent);\n flex: 0 0 auto;\n}\n\n.suite-header__lockup {\n display: none;\n min-width: 0;\n color: var(--viking-text);\n font-size: var(--viking-font-size-sm);\n font-weight: var(--viking-font-weight-bold);\n line-height: var(--viking-line-height-tight);\n letter-spacing: var(--viking-letter-spacing-caps);\n text-transform: uppercase;\n white-space: nowrap;\n}\n\n.suite-header__nav {\n display: none;\n align-items: center;\n justify-content: center;\n gap: var(--viking-space-half);\n min-width: 0;\n overflow: hidden;\n}\n\n.suite-header__link {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n gap: var(--viking-space-half);\n min-width: 0;\n height: var(--viking-control-height);\n padding-inline: var(--viking-space-1-5);\n color: var(--viking-text-muted);\n border-radius: var(--viking-radius) var(--viking-radius) 0 0;\n font-size: var(--viking-font-size-sm);\n font-weight: var(--viking-font-weight-semibold);\n line-height: var(--viking-line-height-none);\n letter-spacing: var(--viking-letter-spacing-caps);\n text-decoration: none;\n text-transform: uppercase;\n white-space: nowrap;\n transition: var(--viking-transition-interactive);\n}\n\n.suite-header__link:hover,\n.suite-header__link[aria-current='page'] {\n color: var(--viking-text);\n background: var(--viking-surface-alt);\n}\n\n.suite-header__actions {\n display: inline-flex;\n align-items: center;\n justify-content: flex-end;\n gap: var(--viking-space-1);\n min-width: 0;\n}\n\n.suite-header__icon-button,\n.suite-header__menu-button,\n.suite-header__user-trigger,\n.suite-header__auth-link {\n min-height: var(--viking-control-height);\n border: var(--viking-border-width, 1px) solid var(--viking-border-strong);\n border-radius: var(--viking-radius);\n background: var(--viking-surface);\n color: var(--viking-text);\n box-shadow: var(--viking-shadow-sm);\n cursor: pointer;\n font-family: inherit;\n transition: var(--viking-transition-interactive);\n -webkit-tap-highlight-color: transparent;\n}\n\n.suite-header__icon-button,\n.suite-header__menu-button {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: var(--viking-control-height);\n min-width: var(--viking-control-height);\n padding: 0;\n}\n\n.suite-header__icon-button:hover,\n.suite-header__menu-button:hover,\n.suite-header__user-trigger:hover,\n.suite-header__auth-link:hover {\n border-color: var(--viking-accent-strong);\n background: var(--viking-surface-alt);\n box-shadow: var(--viking-shadow-md);\n}\n\n.suite-header__auth-link {\n display: none;\n align-items: center;\n justify-content: center;\n gap: var(--viking-space-half);\n min-width: max-content;\n padding-inline: var(--viking-space-2);\n background: var(--viking-accent);\n border-color: var(--viking-accent);\n color: var(--viking-accent-content);\n font-size: var(--viking-font-size-sm);\n font-weight: var(--viking-font-weight-bold);\n line-height: var(--viking-line-height-none);\n letter-spacing: var(--viking-letter-spacing-caps);\n text-decoration: none;\n text-transform: uppercase;\n}\n\n.suite-header__auth-link:hover {\n background: var(--viking-accent-hover);\n color: var(--viking-accent-content);\n}\n\n.suite-header__user {\n position: relative;\n display: none;\n}\n\n.suite-header__user-trigger {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n gap: var(--viking-space-1);\n min-width: max-content;\n padding-inline: var(--viking-space-1);\n}\n\n.suite-header__avatar {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: var(--viking-space-3);\n height: var(--viking-space-3);\n border-radius: var(--viking-radius-full);\n background: var(--viking-accent-soft);\n color: var(--viking-accent-strong);\n}\n\n.suite-header__user-text {\n display: none;\n max-width: var(--viking-space-16);\n overflow: hidden;\n color: var(--viking-text);\n font-size: var(--viking-font-size-sm);\n font-weight: var(--viking-font-weight-semibold);\n line-height: var(--viking-line-height-tight);\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n.suite-header__menu {\n position: absolute;\n inset-block-start: calc(100% + var(--viking-space-1));\n inset-inline-end: 0;\n display: none;\n min-width: var(--viking-space-24);\n padding: var(--viking-space-1);\n background: var(--viking-surface);\n border: var(--viking-border-width, 1px) solid var(--viking-border-strong);\n border-radius: var(--viking-radius);\n box-shadow: var(--viking-shadow-lg);\n}\n\n.suite-header__user[data-open='true'] .suite-header__menu {\n display: grid;\n gap: var(--viking-space-half);\n}\n\n.suite-header__menu-label {\n padding: var(--viking-space-1);\n color: var(--viking-text-muted);\n font-size: var(--viking-font-size-xs);\n line-height: var(--viking-line-height-tight);\n}\n\n.suite-header__menu-label strong {\n display: block;\n color: var(--viking-text);\n font-size: var(--viking-font-size-sm);\n}\n\n.suite-header__menu-link,\n.suite-header__menu-button {\n display: inline-flex;\n align-items: center;\n justify-content: flex-start;\n gap: var(--viking-space-1);\n width: 100%;\n min-height: var(--viking-control-height);\n padding-inline: var(--viking-space-1);\n background: transparent;\n border: 0;\n border-radius: var(--viking-radius-sm);\n box-shadow: none;\n color: var(--viking-text);\n font: inherit;\n text-align: start;\n text-decoration: none;\n}\n\n.suite-header__menu-link:hover,\n.suite-header__menu-button:hover {\n background: var(--viking-surface-alt);\n}\n\n.suite-header__mobile {\n display: none;\n width: 100%;\n max-width: var(--viking-container-max-width);\n margin-inline: auto;\n padding: 0 var(--viking-page-gutter) var(--viking-space-2);\n}\n\n.suite-header[data-menu-open='true'] .suite-header__mobile {\n display: grid;\n gap: var(--viking-space-1);\n}\n\n.suite-header__mobile .suite-header__link,\n.suite-header__mobile .suite-header__auth-link,\n.suite-header__mobile .suite-header__menu-button {\n display: inline-flex;\n justify-content: flex-start;\n width: 100%;\n border-radius: var(--viking-radius);\n}\n\n.suite-header__mobile .suite-header__auth-link {\n justify-content: center;\n margin-block-start: var(--viking-space-1);\n}\n\nviking-suite-command-palette {\n display: contents;\n}\n\n@media (min-width: 520px) {\n .suite-header__lockup,\n .suite-header__user-text {\n display: inline;\n }\n}\n\n@media (min-width: 768px) {\n .suite-header__bar {\n padding-inline: var(--viking-page-gutter-lg);\n }\n\n .suite-header__nav {\n display: flex;\n }\n\n .suite-header__auth-link,\n .suite-header__user {\n display: inline-flex;\n }\n\n .suite-header__menu-button {\n display: none;\n }\n}\n`;\n\nconst detectContext = (): SiteDrakkarContext => {\n const explicit = document.documentElement.getAttribute(\"data-deml-context\");\n if (explicit && VALID_CONTEXTS.has(explicit as SiteDrakkarContext)) {\n return explicit as SiteDrakkarContext;\n }\n\n const host = window.location.hostname;\n if (host.startsWith(\"ui.\")) {\n return \"docs\";\n }\n if (host.startsWith(\"backend.\")) {\n return \"backend\";\n }\n if (host.includes(\"deml.app\")) {\n return \"app\";\n }\n return \"marketing\";\n};\n\nconst readContext = (el: HTMLElement): SiteDrakkarContext => {\n const raw = el.getAttribute(\"context\");\n if (raw && VALID_CONTEXTS.has(raw as SiteDrakkarContext)) {\n return raw as SiteDrakkarContext;\n }\n return detectContext();\n};\n\nconst readUrls = (el: HTMLElement): SiteUrls => {\n const env = (globalThis as { __DEML?: Partial<SiteUrls> }).__DEML ?? {};\n return {\n app: el.getAttribute(\"app-url\") ?? env.app ?? DEFAULT_SITE_URLS.app,\n marketing:\n el.getAttribute(\"marketing-url\") ??\n env.marketing ??\n DEFAULT_SITE_URLS.marketing,\n backend:\n el.getAttribute(\"backend-url\") ??\n env.backend ??\n DEFAULT_SITE_URLS.backend,\n };\n};\n\nconst isCurrentHref = (href: string): boolean => {\n try {\n const url = new URL(href, window.location.origin);\n return (\n url.origin === window.location.origin &&\n url.pathname === window.location.pathname\n );\n } catch {\n return false;\n }\n};\n\n/**\n * Unified framework-agnostic DEML suite header.\n * Tag: `viking-suite-header`\n *\n * @attr context - Surface: app | marketing | backend | docs (auto-detected when omitted)\n * @attr authenticated - Render the user menu instead of Sign In\n * @attr user-name - Display name for the authenticated user menu\n * @attr user-email - Secondary user menu label\n * @attr sign-in-href - Fallback href for static Sign In navigation\n */\nexport class VikingSuiteHeaderWc extends HTMLElementBase {\n static readonly tag = \"viking-suite-header\";\n\n static get observedAttributes(): string[] {\n return [\n \"context\",\n \"app-url\",\n \"marketing-url\",\n \"backend-url\",\n \"authenticated\",\n \"user-name\",\n \"user-email\",\n \"sign-in-href\",\n \"dashboard-href\",\n ];\n }\n\n private readonly shadow: ShadowRoot;\n private menuOpen = false;\n private userMenuOpen = false;\n private paletteEl: VikingSuiteSearchPaletteWc | null = null;\n\n constructor() {\n super();\n this.shadow = this.attachShadow({ mode: \"open\" });\n attachShadowStyles(this.shadow, VIKING_SUITE_HEADER_STYLES);\n }\n\n connectedCallback(): void {\n registerVikingThemeToggleWc();\n registerVikingSuiteSearchPaletteWc();\n this.render();\n document.addEventListener(\"click\", this.onDocumentClick);\n }\n\n disconnectedCallback(): void {\n document.removeEventListener(\"click\", this.onDocumentClick);\n }\n\n attributeChangedCallback(): void {\n if (this.isConnected) {\n this.render();\n }\n }\n\n openSearch(): void {\n this.paletteEl?.openPalette();\n this.dispatchEvent(\n new CustomEvent(\"viking-search-open\", { bubbles: true, composed: true }),\n );\n }\n\n private readonly onDocumentClick = (event: MouseEvent): void => {\n if (event.composedPath().includes(this)) {\n return;\n }\n if (this.menuOpen || this.userMenuOpen) {\n this.menuOpen = false;\n this.userMenuOpen = false;\n this.syncOpenState();\n }\n };\n\n private readonly onSearchClick = (): void => {\n this.openSearch();\n };\n\n private readonly onMenuClick = (): void => {\n this.menuOpen = !this.menuOpen;\n this.syncOpenState();\n };\n\n private readonly onUserClick = (): void => {\n this.userMenuOpen = !this.userMenuOpen;\n this.syncOpenState();\n };\n\n private readonly onSignInClick = (event: Event): void => {\n const signInEvent = new CustomEvent(\"viking-sign-in\", {\n bubbles: true,\n cancelable: true,\n composed: true,\n detail: event,\n });\n this.dispatchEvent(signInEvent);\n if (signInEvent.defaultPrevented) {\n event.preventDefault();\n }\n };\n\n private readonly onSignOutClick = (): void => {\n this.userMenuOpen = false;\n this.menuOpen = false;\n this.syncOpenState();\n this.dispatchEvent(\n new CustomEvent(\"viking-sign-out\", { bubbles: true, composed: true }),\n );\n };\n\n private syncOpenState(): void {\n const header = this.shadow.querySelector<HTMLElement>(\".suite-header\");\n const menuButton =\n this.shadow.querySelector<HTMLButtonElement>(\"[data-menu-toggle]\");\n const user = this.shadow.querySelector<HTMLElement>(\".suite-header__user\");\n const userButton =\n this.shadow.querySelector<HTMLButtonElement>(\"[data-user-toggle]\");\n header?.setAttribute(\"data-menu-open\", String(this.menuOpen));\n menuButton?.setAttribute(\"aria-expanded\", String(this.menuOpen));\n user?.setAttribute(\"data-open\", String(this.userMenuOpen));\n userButton?.setAttribute(\"aria-expanded\", String(this.userMenuOpen));\n }\n\n private renderNavLinks(\n context: SiteDrakkarContext,\n urls: SiteUrls,\n authenticated: boolean,\n ): string {\n return visibleNavLinks(SITE_NAV_LINKS, authenticated)\n .map((link) => {\n const href = resolveNavHref(link, context, urls);\n const current = isCurrentHref(href) ? ' aria-current=\"page\"' : \"\";\n return `\n <a class=\"suite-header__link\" href=\"${escapeHtml(href)}\"${current}>\n ${renderInlineIcon(link.icon, 16, \"suite-header__link-icon\")}\n <span>${escapeHtml(link.label)}</span>\n </a>\n `;\n })\n .join(\"\");\n }\n\n private renderAuth(\n urls: SiteUrls,\n authenticated: boolean,\n mobile = false,\n ): string {\n if (!authenticated) {\n const signInHref =\n this.getAttribute(\"sign-in-href\") ?? `${urls.app}/login`;\n return `\n <a class=\"suite-header__auth-link\" href=\"${escapeHtml(signInHref)}\" data-sign-in>\n <span>Sign In</span>\n ${renderInlineIcon(\"arrow-right\", 16, \"suite-header__auth-icon\")}\n </a>\n `;\n }\n\n if (mobile) {\n return `\n <a class=\"suite-header__menu-link\" href=\"${escapeHtml(this.getDashboardHref(urls))}\">\n ${renderInlineIcon(\"home\", 16, \"suite-header__menu-icon\")}\n <span>Dashboard</span>\n </a>\n <button class=\"suite-header__menu-button\" type=\"button\" data-sign-out>\n ${renderInlineIcon(\"log-out\", 16, \"suite-header__menu-icon\")}\n <span>Sign Out</span>\n </button>\n `;\n }\n\n const userName = this.getAttribute(\"user-name\") ?? \"Account\";\n const userEmail = this.getAttribute(\"user-email\") ?? \"\";\n return `\n <div class=\"suite-header__user\" data-open=\"${String(this.userMenuOpen)}\">\n <button\n class=\"suite-header__user-trigger\"\n type=\"button\"\n aria-haspopup=\"menu\"\n aria-expanded=\"${String(this.userMenuOpen)}\"\n data-user-toggle\n >\n <span class=\"suite-header__avatar\" aria-hidden=\"true\">\n ${renderInlineIcon(\"user\", 16, \"suite-header__avatar-icon\")}\n </span>\n <span class=\"suite-header__user-text\">${escapeHtml(userName)}</span>\n ${renderInlineIcon(\"chevron-down\", 16, \"suite-header__chevron\")}\n </button>\n <div class=\"suite-header__menu\" role=\"menu\">\n <div class=\"suite-header__menu-label\">\n <strong>${escapeHtml(userName)}</strong>\n ${userEmail ? `<span>${escapeHtml(userEmail)}</span>` : \"\"}\n </div>\n <a class=\"suite-header__menu-link\" role=\"menuitem\" href=\"${escapeHtml(\n this.getDashboardHref(urls),\n )}\">\n ${renderInlineIcon(\"home\", 16, \"suite-header__menu-icon\")}\n <span>Dashboard</span>\n </a>\n <button class=\"suite-header__menu-button\" type=\"button\" role=\"menuitem\" data-sign-out>\n ${renderInlineIcon(\"log-out\", 16, \"suite-header__menu-icon\")}\n <span>Sign Out</span>\n </button>\n </div>\n </div>\n `;\n }\n\n private getDashboardHref(urls: SiteUrls): string {\n return this.getAttribute(\"dashboard-href\") ?? `${urls.app}/dashboard`;\n }\n\n private render(): void {\n const context = readContext(this);\n const urls = readUrls(this);\n const authenticated = readBoolAttr(this, \"authenticated\");\n const navLinks = this.renderNavLinks(context, urls, authenticated);\n const brandHref = resolveBrandHref(context, urls);\n const shortcut = `${modKeyLabel()}K`;\n\n this.shadow.innerHTML = `\n <header class=\"suite-header\" data-menu-open=\"${String(this.menuOpen)}\">\n <div class=\"suite-header__bar\">\n <a class=\"suite-header__brand\" href=\"${escapeHtml(\n brandHref,\n )}\" aria-label=\"Data Engineering for Machine Learning home\">\n <span class=\"suite-header__mark\" aria-hidden=\"true\">\n ${renderInlineIcon(\"drakkar\", 28, \"suite-header__brand-icon\")}\n </span>\n <span class=\"suite-header__lockup\">DEML</span>\n </a>\n\n <nav class=\"suite-header__nav\" aria-label=\"Main navigation\">\n ${navLinks}\n </nav>\n\n <div class=\"suite-header__actions\">\n <button\n class=\"suite-header__icon-button\"\n type=\"button\"\n aria-label=\"Open command palette (${shortcut})\"\n title=\"Open command palette (${shortcut})\"\n data-search-trigger\n >\n ${renderInlineIcon(\"search\", 18, \"suite-header__action-icon\")}\n </button>\n ${this.renderAuth(urls, authenticated)}\n <viking-theme-toggle-wc></viking-theme-toggle-wc>\n <button\n class=\"suite-header__menu-button\"\n type=\"button\"\n aria-label=\"Toggle navigation menu\"\n aria-expanded=\"${String(this.menuOpen)}\"\n data-menu-toggle\n >\n ${renderInlineIcon(this.menuOpen ? \"x\" : \"menu\", 18, \"suite-header__action-icon\")}\n </button>\n </div>\n </div>\n\n <nav class=\"suite-header__mobile\" aria-label=\"Mobile navigation\">\n ${navLinks}\n ${this.renderAuth(urls, authenticated, true)}\n </nav>\n </header>\n <viking-suite-command-palette\n context=\"${context}\"\n app-url=\"${escapeHtml(urls.app)}\"\n marketing-url=\"${escapeHtml(urls.marketing)}\"\n backend-url=\"${escapeHtml(urls.backend)}\"\n global-shortcut\n ></viking-suite-command-palette>\n `;\n\n this.paletteEl = this.shadow.querySelector(\"viking-suite-command-palette\");\n this.shadow\n .querySelector(\"[data-search-trigger]\")\n ?.addEventListener(\"click\", this.onSearchClick);\n this.shadow\n .querySelector(\"[data-menu-toggle]\")\n ?.addEventListener(\"click\", this.onMenuClick);\n this.shadow\n .querySelector(\"[data-user-toggle]\")\n ?.addEventListener(\"click\", this.onUserClick);\n this.shadow\n .querySelectorAll(\"[data-sign-in]\")\n .forEach((control) =>\n control.addEventListener(\"click\", this.onSignInClick),\n );\n this.shadow\n .querySelectorAll(\"[data-sign-out]\")\n .forEach((control) =>\n control.addEventListener(\"click\", this.onSignOutClick),\n );\n }\n}\n\nexport const registerVikingSuiteHeaderWc = (): void => {\n defineCustomElement(VikingSuiteHeaderWc.tag, VikingSuiteHeaderWc);\n};\n","import {\n attachElementInternals,\n attachShadowStyles,\n setFormValue,\n} from \"../core/base\";\nimport {\n defineCustomElement,\n defineCustomElementAlias,\n escapeHtml,\n HTMLElementBase,\n vikingWcUid,\n} from \"../core/dom\";\nimport { VIKING_SELECT_STYLES } from \"../core/styles\";\n\n/**\n * Framework-agnostic native select Web Component with form association.\n * Tag: `viking-select` (legacy alias: `viking-select-wc`)\n *\n * Place `<option>` elements as light DOM children; they are mirrored into the shadow select.\n *\n * @attr label - Visible field label\n * @attr name - Form field name (participates in form submission via ElementInternals)\n * @attr value - Selected option value\n * @attr placeholder - Placeholder option text when no value is selected\n * @attr description - Helper text below the control\n * @attr error - Validation message; sets aria-invalid\n * @attr width - full | half (default: half)\n * @attr disabled - Disables the control\n * @attr required - Marks field as required\n *\n * @event viking-change - `{ detail: { value: string } }`\n *\n * @example\n * <viking-select-wc label=\"Retention\" name=\"retention\" value=\"30d\">\n * <option value=\"7d\">7 days</option>\n * <option value=\"30d\">30 days</option>\n * </viking-select-wc>\n */\nexport class VikingSelectWc extends HTMLElementBase {\n static readonly formAssociated = true;\n static readonly tag = \"viking-select\";\n static readonly legacyTag = \"viking-select-wc\";\n\n static get observedAttributes(): string[] {\n return [\n \"label\",\n \"name\",\n \"value\",\n \"placeholder\",\n \"description\",\n \"error\",\n \"width\",\n \"disabled\",\n \"required\",\n ];\n }\n\n private readonly shadow: ShadowRoot;\n private readonly internals: ElementInternals | null;\n private selectEl: HTMLSelectElement | null = null;\n private optionObserver: MutationObserver | null = null;\n private readonly controlId = vikingWcUid(\"viking-select\");\n\n constructor() {\n super();\n this.shadow = this.attachShadow({ mode: \"open\" });\n this.internals = attachElementInternals(this);\n attachShadowStyles(this.shadow, VIKING_SELECT_STYLES);\n }\n\n connectedCallback(): void {\n this.render();\n this.syncOptions();\n this.observeOptions();\n this.selectEl?.addEventListener(\"change\", this.onChange);\n }\n\n disconnectedCallback(): void {\n this.selectEl?.removeEventListener(\"change\", this.onChange);\n this.optionObserver?.disconnect();\n this.optionObserver = null;\n }\n\n attributeChangedCallback(name: string): void {\n if (!this.isConnected) {\n return;\n }\n if (name === \"value\" && this.selectEl) {\n this.selectEl.value = this.getAttribute(\"value\") ?? \"\";\n this.syncFormValue();\n return;\n }\n if (name === \"error\" || name === \"description\" || name === \"label\") {\n this.render();\n this.syncOptions();\n return;\n }\n this.render();\n this.syncOptions();\n }\n\n get value(): string {\n return this.selectEl?.value ?? this.getAttribute(\"value\") ?? \"\";\n }\n\n set value(next: string) {\n this.setAttribute(\"value\", next);\n if (this.selectEl) {\n this.selectEl.value = next;\n }\n this.syncFormValue();\n }\n\n private readonly onChange = (): void => {\n const value = this.selectEl?.value ?? \"\";\n this.setAttribute(\"value\", value);\n this.syncFormValue();\n this.dispatchEvent(\n new CustomEvent(\"viking-change\", {\n bubbles: true,\n composed: true,\n detail: { value },\n }),\n );\n };\n\n private syncFormValue(): void {\n setFormValue(this.internals, this.value);\n }\n\n private observeOptions(): void {\n this.optionObserver?.disconnect();\n this.optionObserver = new MutationObserver(() => this.syncOptions());\n this.optionObserver.observe(this, {\n childList: true,\n subtree: true,\n characterData: true,\n });\n }\n\n private render(): void {\n const label = this.getAttribute(\"label\") ?? \"\";\n const name = this.getAttribute(\"name\") ?? \"\";\n const disabled = this.hasAttribute(\"disabled\");\n const required = this.hasAttribute(\"required\");\n const error = this.getAttribute(\"error\") ?? \"\";\n const description = this.getAttribute(\"description\") ?? \"\";\n const describedBy = [\n description && `${this.controlId}-desc`,\n error && `${this.controlId}-error`,\n ]\n .filter(Boolean)\n .join(\" \");\n\n this.shadow.innerHTML = `\n <div class=\"viking-field\" part=\"field\">\n ${label ? `<label class=\"viking-field-label\" part=\"label\" for=\"${this.controlId}\">${escapeHtml(label)}</label>` : \"\"}\n <select\n id=\"${this.controlId}\"\n class=\"viking-select-native\"\n part=\"control\"\n ${name ? `name=\"${escapeHtml(name)}\"` : \"\"}\n ${disabled ? \"disabled\" : \"\"}\n ${required ? \"required\" : \"\"}\n ${error ? 'aria-invalid=\"true\"' : \"\"}\n ${describedBy ? `aria-describedby=\"${describedBy}\"` : \"\"}\n ></select>\n ${description ? `<p id=\"${this.controlId}-desc\" class=\"viking-field-description\" part=\"description\">${escapeHtml(description)}</p>` : \"\"}\n ${error ? `<p id=\"${this.controlId}-error\" class=\"viking-field-error\" part=\"error\" role=\"alert\">${escapeHtml(error)}</p>` : \"\"}\n </div>\n `;\n\n this.selectEl = this.shadow.querySelector(\"select\");\n const value = this.getAttribute(\"value\");\n if (this.selectEl && value) {\n this.selectEl.value = value;\n }\n this.syncFormValue();\n }\n\n private syncOptions(): void {\n if (!this.selectEl) {\n return;\n }\n\n const currentValue = this.selectEl.value;\n this.selectEl.innerHTML = \"\";\n const options = this.querySelectorAll(\"option\");\n\n if (options.length === 0) {\n const placeholder = this.getAttribute(\"placeholder\") ?? \"Select…\";\n const opt = document.createElement(\"option\");\n opt.value = \"\";\n opt.textContent = placeholder;\n opt.disabled = true;\n opt.selected = !this.getAttribute(\"value\");\n this.selectEl.append(opt);\n return;\n }\n\n options.forEach((opt) => {\n this.selectEl?.append(opt.cloneNode(true));\n });\n\n const value = this.getAttribute(\"value\");\n if (value) {\n this.selectEl.value = value;\n } else if (currentValue) {\n this.selectEl.value = currentValue;\n }\n this.syncFormValue();\n }\n}\n\nexport const registerVikingSelectWc = (): void => {\n defineCustomElement(VikingSelectWc.tag, VikingSelectWc);\n defineCustomElementAlias(VikingSelectWc.legacyTag, VikingSelectWc);\n};\n","import { registerVikingBadgeWc } from \"./badge/viking-badge-wc\";\nimport { registerVikingButtonWc } from \"./button/viking-button-wc\";\nimport { registerVikingCalloutWc } from \"./callout/viking-callout-wc\";\nimport { registerVikingCardWc } from \"./card/viking-card-wc\";\nimport { registerVikingFieldWc } from \"./field/viking-field-wc\";\nimport { registerVikingInputWc } from \"./input/viking-input-wc\";\nimport { registerVikingModalWc } from \"./modal/viking-modal-wc\";\nimport { registerVikingSearchPaletteWc } from \"./search-palette/viking-search-palette-wc\";\nimport { registerVikingSuiteHeaderWc } from \"./suite-header/viking-suite-header-wc\";\nimport { registerVikingSuiteSearchPaletteWc } from \"./suite-search-palette/viking-suite-search-palette-wc\";\nimport { registerVikingSelectWc } from \"./select/viking-select-wc\";\nimport { registerVikingThemeToggleWc } from \"./theme-toggle/viking-theme-toggle-wc\";\n\nexport { VikingBadgeWc, registerVikingBadgeWc } from \"./badge/viking-badge-wc\";\nexport {\n VikingButtonWc,\n registerVikingButtonWc,\n} from \"./button/viking-button-wc\";\nexport {\n VikingCalloutWc,\n registerVikingCalloutWc,\n} from \"./callout/viking-callout-wc\";\nexport { VikingCardWc, registerVikingCardWc } from \"./card/viking-card-wc\";\nexport { VikingFieldWc, registerVikingFieldWc } from \"./field/viking-field-wc\";\nexport { VikingInputWc, registerVikingInputWc } from \"./input/viking-input-wc\";\nexport { VikingModalWc, registerVikingModalWc } from \"./modal/viking-modal-wc\";\nexport {\n VikingSearchPaletteWc,\n registerVikingSearchPaletteWc,\n type VikingSearchPaletteItem,\n} from \"./search-palette/viking-search-palette-wc\";\nexport {\n VikingSuiteSearchPaletteWc,\n registerVikingSuiteSearchPaletteWc,\n} from \"./suite-search-palette/viking-suite-search-palette-wc\";\nexport {\n VikingSuiteHeaderWc,\n registerVikingSuiteHeaderWc,\n} from \"./suite-header/viking-suite-header-wc\";\nexport {\n VikingSelectWc,\n registerVikingSelectWc,\n} from \"./select/viking-select-wc\";\nexport {\n VikingThemeToggleWc,\n registerVikingThemeToggleWc,\n} from \"./theme-toggle/viking-theme-toggle-wc\";\nexport type { VikingWcTone } from \"./core/types\";\n\n/** Register all Viking-UI Web Components. Safe to call multiple times. */\nexport const registerVikingElements = (): void => {\n registerVikingButtonWc();\n registerVikingFieldWc();\n registerVikingInputWc();\n registerVikingBadgeWc();\n registerVikingCalloutWc();\n registerVikingCardWc();\n registerVikingSelectWc();\n registerVikingModalWc();\n registerVikingSearchPaletteWc();\n registerVikingSuiteHeaderWc();\n registerVikingSuiteSearchPaletteWc();\n registerVikingThemeToggleWc();\n};\n\n// Auto-register when loaded as a script bundle (Astro, Django, static HTML).\nif (typeof globalThis !== \"undefined\" && typeof document !== \"undefined\") {\n if (document.readyState === \"loading\") {\n document.addEventListener(\"DOMContentLoaded\", registerVikingElements);\n } else {\n registerVikingElements();\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n input,\n} from \"@angular/core\";\nimport { DomSanitizer, SafeHtml } from \"@angular/platform-browser\";\nimport {\n VIKING_FILLED_ICON_NAMES,\n VIKING_ICON_FILLED_PATHS,\n VIKING_ICON_PATHS,\n resolveVikingIcon,\n resolveVikingIconColor,\n resolveVikingIconSize,\n vikingIconViewBox,\n VikingIconColorToken,\n VikingIconName,\n VikingIconSizePreset,\n VikingIconVariant,\n VIKING_DRAKKAR_ICON_NAMES_LIST,\n} from \"../../core/icons\";\nimport {\n isIntegrationBrandIcon,\n VIKING_INTEGRATION_BRAND_SVGS,\n type VikingIntegrationBrandName,\n} from \"../../core/integration-brand-icons\";\n\nconst VIKING_FILLED_ICON_SET = new Set<string>(VIKING_FILLED_ICON_NAMES);\nconst VIKING_DRAKKAR_ICON_SET = new Set<string>(VIKING_DRAKKAR_ICON_NAMES_LIST);\n\n/**\n * viking-icon — themeable inline SVG icon (Lucide-sourced registry + DEML brand marks).\n * Zero runtime dependencies; paths are inlined at build time from Lucide.\n *\n * @example Outline with semantic color\n * ```html\n * <viking-icon name=\"search\" sizePreset=\"md\" color=\"accent\" />\n * ```\n *\n * @example Brand mark (outline)\n * ```html\n * <viking-icon name=\"drakkar\" [size]=\"28\" color=\"accent\" />\n * ```\n */\n@Component({\n selector: \"viking-icon\",\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n \"[class.viking-icon-spin]\": \"spin()\",\n \"[class.viking-icon-filled]\": \"isFilled()\",\n \"[class.viking-icon-outline]\": \"!isFilled()\",\n \"[class.viking-icon-brand-drakkar]\": \"isDrakkarBrand()\",\n \"[class.viking-icon-sm]\": 'sizePreset() === \"sm\"',\n \"[class.viking-icon-md]\": 'sizePreset() === \"md\"',\n \"[class.viking-icon-lg]\":\n 'sizePreset() === \"lg\" || (!sizePreset() && !size())',\n \"[class.viking-icon-backdrop]\": \"backdrop()\",\n \"[class.viking-icon-backdrop-success]\":\n \"backdrop() && backdropTone() === 'success'\",\n \"[class.viking-icon-backdrop-warning]\":\n \"backdrop() && backdropTone() === 'warning'\",\n \"[class.viking-icon-backdrop-danger]\":\n \"backdrop() && backdropTone() === 'danger'\",\n \"[class.viking-icon-backdrop-info]\":\n \"backdrop() && backdropTone() === 'info'\",\n \"[style.color]\": \"resolvedColor()\",\n \"aria-hidden\": \"true\",\n },\n template: `\n @if (resolvedName() === \"google\") {\n <svg\n class=\"viking-icon-svg viking-icon-brand\"\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 48 48\"\n [style.width.px]=\"resolvedSize()\"\n [style.height.px]=\"resolvedSize()\"\n aria-hidden=\"true\"\n >\n <path\n fill=\"#EA4335\"\n d=\"M24 9.5c3.54 0 6.71 1.22 9.21 3.6l6.85-6.85C35.9 2.38 30.47 0 24 0 14.62 0 6.51 5.38 2.56 13.22l7.98 6.19C12.43 13.72 17.74 9.5 24 9.5z\"\n />\n <path\n fill=\"#4285F4\"\n d=\"M46.5 24c0-1.55-.15-3.24-.47-4.77H24v9.03h12.75c-.55 2.83-2.13 5.23-4.53 6.82l7.02 5.44C43.35 36.56 46.5 30.82 46.5 24z\"\n />\n <path\n fill=\"#FBBC05\"\n d=\"M10.54 28.59c-.48-1.45-.76-2.99-.76-4.59s.27-3.14.76-4.59l-7.98-6.19C.92 16.46 0 20.12 0 24s.92 7.54 2.56 10.78l7.98-6.19z\"\n />\n <path\n fill=\"#34A853\"\n d=\"M24 48c6.48 0 11.93-2.13 15.89-5.81l-7.02-5.44c-1.99 1.33-4.51 2.15-7.87 2.15-6.26 0-11.57-4.22-13.46-9.91l-7.98 6.19C6.51 42.62 14.62 48 24 48z\"\n />\n </svg>\n } @else if (resolvedName() === \"apple\") {\n <svg\n class=\"viking-icon-svg viking-icon-brand\"\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\"\n fill=\"currentColor\"\n [style.width.px]=\"resolvedSize()\"\n [style.height.px]=\"resolvedSize()\"\n aria-hidden=\"true\"\n >\n <path\n d=\"M16.365 12.14c.02 2.53 2.21 3.38 2.23 3.39-.02.07-.35 1.21-1.16 2.4-.7 1.02-1.43 2.03-2.58 2.05-1.13.02-1.49-.67-2.78-.67-1.29 0-1.69.65-2.75.69-1.11.04-1.95-1.12-2.66-2.13-1.44-2.08-2.54-5.87-1.07-8.43.73-1.27 2.04-2.08 3.46-2.1 1.08-.02 2.1.72 2.78.72.67 0 2.14-.89 3.61-.76.61.03 2.33.25 3.44 1.88-.09.06-2.05 1.2-2.03 3.55M13.75 3.64c.59-.71 1-1.7.89-2.68-.86.03-1.9.57-2.52 1.28-.55.63-1.03 1.65-.9 2.62.95.07 1.92-.49 2.53-1.22\"\n />\n </svg>\n } @else if (isIntegrationBrand()) {\n <svg\n class=\"viking-icon-svg viking-icon-brand viking-icon-integration-brand\"\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\"\n [style.width.px]=\"resolvedSize()\"\n [style.height.px]=\"resolvedSize()\"\n aria-hidden=\"true\"\n >\n <g [innerHTML]=\"integrationBrandSvg()\"></g>\n </svg>\n } @else {\n <svg\n class=\"viking-icon-svg\"\n xmlns=\"http://www.w3.org/2000/svg\"\n [attr.viewBox]=\"viewBox()\"\n [attr.fill]=\"isFilled() ? 'currentColor' : 'none'\"\n [attr.fill-rule]=\"isFilled() ? 'evenodd' : null\"\n [attr.stroke]=\"isFilled() ? 'none' : 'currentColor'\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n [style.width.px]=\"resolvedSize()\"\n [style.height.px]=\"resolvedSize()\"\n >\n <!-- innerHTML on <g> — binding on <svg> throws NotYetImplemented under SSR (domino). -->\n <g [innerHTML]=\"paths()\"></g>\n </svg>\n }\n `,\n styles: [\n `\n :host {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n line-height: 0;\n color: inherit;\n }\n\n :host(.viking-icon-outline) .viking-icon-svg {\n --viking-icon-stroke-width: 1.75;\n stroke-width: var(--viking-icon-stroke-width);\n shape-rendering: geometricPrecision;\n }\n\n :host(.viking-icon-outline.viking-icon-brand-drakkar) .viking-icon-svg {\n --viking-icon-stroke-width: 1.5;\n }\n\n :host(.viking-icon-sm) .viking-icon-svg {\n --viking-icon-stroke-width: 1.5;\n }\n\n :host(.viking-icon-lg) .viking-icon-svg {\n --viking-icon-stroke-width: 1.75;\n }\n\n :host(.viking-icon-filled) .viking-icon-svg {\n stroke: none;\n }\n\n :host(.viking-icon-spin) svg {\n animation: viking-icon-rotate 0.9s linear infinite;\n }\n\n :host(.viking-icon-backdrop) {\n padding: var(--viking-icon-backdrop-padding, var(--viking-space-half));\n border-radius: var(--viking-radius-lg);\n background: var(--viking-accent-soft);\n color: var(--viking-accent-strong);\n box-shadow: var(--viking-shadow-sm);\n }\n\n :host(.viking-icon-backdrop-success) {\n background: color-mix(in srgb, var(--viking-success) 14%, transparent);\n color: var(--viking-success);\n }\n\n :host(.viking-icon-backdrop-warning) {\n background: color-mix(in srgb, var(--viking-warning) 14%, transparent);\n color: var(--viking-warning);\n }\n\n :host(.viking-icon-backdrop-danger) {\n background: color-mix(in srgb, var(--viking-danger) 14%, transparent);\n color: var(--viking-danger);\n }\n\n :host(.viking-icon-backdrop-info) {\n background: color-mix(in srgb, var(--viking-info) 14%, transparent);\n color: var(--viking-info);\n }\n\n @keyframes viking-icon-rotate {\n to {\n transform: rotate(360deg);\n }\n }\n `,\n ],\n})\nexport class VikingIcon {\n readonly name = input.required<VikingIconName | string>();\n /** Explicit pixel size — overridden by sizePreset when set. */\n readonly size = input<number | undefined>(undefined);\n /** sm (16px) · md (20px) · lg (24px) */\n readonly sizePreset = input<VikingIconSizePreset | null>(null);\n /** outline (stroke) or filled (solid) */\n readonly variant = input<VikingIconVariant>(\"outline\");\n /** Semantic token (accent, success, …) or any CSS color value. */\n readonly color = input<VikingIconColorToken | string | undefined>(undefined);\n /** Renders icon inside a padded tokenized backdrop (matches viking-icon-badge). */\n readonly backdrop = input<boolean>(false);\n readonly backdropTone = input<\n \"default\" | \"success\" | \"warning\" | \"danger\" | \"info\"\n >(\"default\");\n readonly spin = input<boolean>(false);\n\n protected readonly resolvedName = computed(() =>\n resolveVikingIcon(this.name()),\n );\n\n protected readonly resolvedSize = computed(() =>\n resolveVikingIconSize(this.size(), this.sizePreset()),\n );\n\n protected readonly resolvedColor = computed(() =>\n resolveVikingIconColor(this.color()),\n );\n\n protected readonly viewBox = computed(() =>\n vikingIconViewBox(this.resolvedName()),\n );\n\n protected readonly isFilled = computed(() => {\n const name = this.resolvedName();\n if (name === \"google\" || name === \"apple\" || isIntegrationBrandIcon(name)) {\n return false;\n }\n if (this.variant() === \"filled\") {\n return true;\n }\n return VIKING_FILLED_ICON_SET.has(name);\n });\n\n protected readonly isDrakkarBrand = computed(() =>\n VIKING_DRAKKAR_ICON_SET.has(this.resolvedName()),\n );\n\n protected readonly isIntegrationBrand = computed(() =>\n isIntegrationBrandIcon(this.resolvedName()),\n );\n\n protected readonly integrationBrandSvg = computed<SafeHtml>(() => {\n const name = this.resolvedName() as VikingIntegrationBrandName;\n return this.sanitizer.bypassSecurityTrustHtml(\n VIKING_INTEGRATION_BRAND_SVGS[name] ?? \"\",\n );\n });\n\n protected readonly paths = computed<SafeHtml>(() => {\n const name = this.resolvedName();\n const html =\n this.isFilled() && VIKING_ICON_FILLED_PATHS[name]\n ? VIKING_ICON_FILLED_PATHS[name]\n : (VIKING_ICON_PATHS[name] ?? \"\");\n return this.sanitizer.bypassSecurityTrustHtml(html);\n });\n\n constructor(private readonly sanitizer: DomSanitizer) {}\n}\n\n/** Alias for consumers expecting VikingIconComponent. */\nexport { VikingIcon as VikingIconComponent };\n","import {\n ChangeDetectionStrategy,\n Component,\n CUSTOM_ELEMENTS_SCHEMA,\n computed,\n input,\n output,\n} from \"@angular/core\";\nimport { VikingIcon } from \"../icon/icon\";\nimport { VikingIconName } from \"../../core/icons\";\nimport { VikingSize } from \"../../core/types\";\nimport { registerVikingElements } from \"../../web/index\";\n\nregisterVikingElements();\n\nexport type VikingButtonVariant =\n | \"outline\"\n | \"primary\"\n | \"secondary\"\n | \"filled\"\n | \"danger\"\n | \"ghost\"\n | \"subtle\";\n\n/**\n * viking-button — thin Angular wrapper around `viking-button-wc`.\n * Variants: outline (default), primary, filled, danger, ghost, subtle.\n */\n@Component({\n selector: \"viking-button\",\n imports: [VikingIcon],\n schemas: [CUSTOM_ELEMENTS_SCHEMA],\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n \"[style.pointer-events]\": \"disabled() ? 'none' : null\",\n \"[class.viking-full]\": \"fullWidth()\",\n \"[class.viking-compact]\": \"compact()\",\n },\n template: `\n <viking-button-wc\n [attr.variant]=\"variant()\"\n [attr.size]=\"size() === 'base' ? null : size()\"\n [attr.type]=\"type()\"\n [attr.disabled]=\"disabled() || loading() ? '' : null\"\n [attr.aria-busy]=\"loading() ? 'true' : null\"\n [attr.href]=\"href()\"\n [attr.target]=\"target()\"\n [attr.aria-label]=\"label() || null\"\n [attr.square]=\"square() ? '' : null\"\n [attr.full-width]=\"fullWidth() ? '' : null\"\n [attr.compact]=\"compact() ? '' : null\"\n (viking-press)=\"onPress($event)\"\n >\n @if (loading()) {\n <viking-icon name=\"loader\" [size]=\"iconSize()\" [spin]=\"true\" />\n } @else if (icon()) {\n <viking-icon [name]=\"icon()!\" [size]=\"iconSize()\" />\n }\n <span class=\"viking-btn-label\"><ng-content /></span>\n @if (iconTrailing()) {\n <viking-icon [name]=\"iconTrailing()!\" [size]=\"iconSize()\" />\n }\n @if (kbd()) {\n <kbd class=\"viking-btn-kbd\">{{ kbd() }}</kbd>\n }\n </viking-button-wc>\n `,\n styleUrl: \"./button.scss\",\n})\nexport class VikingButton {\n readonly variant = input<VikingButtonVariant>(\"outline\");\n readonly size = input<VikingSize>(\"base\");\n readonly type = input<\"button\" | \"submit\">(\"button\");\n readonly icon = input<VikingIconName | null>(null);\n readonly iconTrailing = input<VikingIconName | null>(null);\n readonly disabled = input<boolean>(false);\n readonly loading = input<boolean>(false);\n readonly square = input<boolean>(false);\n readonly fullWidth = input<boolean>(false);\n readonly compact = input<boolean>(false);\n readonly href = input<string | null>(null);\n readonly target = input<string | null>(null);\n readonly kbd = input<string | null>(null);\n readonly label = input<string>(\"\");\n\n readonly pressed = output<MouseEvent>();\n\n protected readonly iconSize = computed(() =>\n this.size() === \"base\" ? 22 : 18,\n );\n\n protected onPress = (event: Event): void => {\n const detail = (event as CustomEvent<MouseEvent>).detail;\n if (detail) {\n this.pressed.emit(detail);\n }\n };\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n ViewEncapsulation,\n computed,\n input,\n output,\n} from \"@angular/core\";\nimport { VikingIcon } from \"../icon/icon\";\n\n/**\n * viking-theme-toggle — navbar utility control for light/dark theme switching.\n * Uses `.theme-toggle-btn` styles from viking-ui.css (static-navbar.scss).\n */\n@Component({\n selector: \"viking-theme-toggle\",\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n imports: [VikingIcon],\n host: { class: \"viking-theme-toggle-host\" },\n template: `\n <button\n type=\"button\"\n class=\"theme-toggle-btn\"\n aria-label=\"Toggle light and dark theme\"\n (click)=\"toggle.emit()\"\n >\n <viking-icon [name]=\"icon()\" [size]=\"20\" />\n </button>\n `,\n})\nexport class VikingThemeToggle {\n readonly theme = input<\"light\" | \"dark\">(\"dark\");\n readonly toggle = output<void>();\n\n protected readonly icon = computed(() =>\n this.theme() === \"dark\" ? \"sun\" : \"moon\",\n );\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n ViewEncapsulation,\n computed,\n input,\n output,\n signal,\n} from \"@angular/core\";\nimport { RouterLink, RouterLinkActive } from \"@angular/router\";\nimport { VikingButton } from \"../button/button\";\nimport { VikingIcon } from \"../icon/icon\";\nimport { VikingThemeToggle } from \"../theme-toggle/theme-toggle\";\nimport {\n DEFAULT_SITE_URLS,\n isAppRouterPath,\n resolveBrandHref,\n resolveNavHref,\n SITE_NAV_LINKS,\n SiteDrakkarContext,\n SiteUrls,\n visibleNavLinks,\n} from \"./site-drakkar.config\";\n\n/**\n * viking-site-navbar — canonical site header shared across DEML surfaces.\n * Uses `.navbar` markup + viking-ui.css (same structure as marketing/backend static HTML).\n */\n@Component({\n selector: \"viking-site-navbar\",\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n imports: [\n RouterLink,\n RouterLinkActive,\n VikingButton,\n VikingIcon,\n VikingThemeToggle,\n ],\n styleUrl: \"./site-navbar.scss\",\n template: `\n <header class=\"navbar\">\n <div class=\"navbar-content\">\n <div class=\"navbar-left\">\n @if (context() === \"app\") {\n <a\n [href]=\"brandHref()\"\n class=\"navbar-brand\"\n aria-label=\"Go to marketing homepage\"\n (click)=\"onBrandClick($event)\"\n >\n <viking-icon\n name=\"drakkar\"\n [size]=\"28\"\n color=\"accent\"\n class=\"brand-icon navbar-logo\"\n />\n </a>\n } @else {\n <a\n [href]=\"brandHref()\"\n class=\"navbar-brand\"\n aria-label=\"Go to homepage\"\n >\n <viking-icon\n name=\"drakkar\"\n [size]=\"28\"\n color=\"accent\"\n class=\"brand-icon navbar-logo\"\n />\n </a>\n }\n </div>\n\n <nav class=\"navbar-center desktop-nav\" aria-label=\"Main navigation\">\n @for (link of navLinks(); track link.id) {\n @if (context() === \"app\" && isAppRouterPath(link.appHref)) {\n <a\n [routerLink]=\"link.appHref\"\n routerLinkActive=\"active\"\n [routerLinkActiveOptions]=\"{\n exact: link.appHref === '/explore',\n }\"\n class=\"nav-btn\"\n >\n <viking-icon [name]=\"link.icon\" [size]=\"16\" />\n <span>{{ link.label }}</span>\n </a>\n } @else {\n <a [href]=\"resolveHref(link)\" class=\"nav-btn\">\n <viking-icon [name]=\"link.icon\" [size]=\"16\" />\n <span>{{ link.label }}</span>\n </a>\n }\n }\n </nav>\n\n <div class=\"navbar-right\">\n @if (showSearch()) {\n <div class=\"navbar-search\" role=\"search\">\n <viking-button\n variant=\"outline\"\n [square]=\"true\"\n [compact]=\"true\"\n icon=\"search\"\n label=\"Open search (⌘K)\"\n (pressed)=\"openSearch()\"\n />\n </div>\n }\n\n <div class=\"desktop-auth\">\n @if (!isAuthenticated()) {\n <viking-button\n variant=\"primary\"\n icon=\"arrow-right\"\n (pressed)=\"login.emit()\"\n >\n Sign In\n </viking-button>\n } @else {\n <viking-button\n variant=\"primary\"\n icon=\"home\"\n [href]=\"urls().app + '/dashboard'\"\n >\n Dashboard\n </viking-button>\n <viking-button variant=\"ghost\" (pressed)=\"logout.emit()\"\n >Sign Out</viking-button\n >\n }\n </div>\n\n <viking-theme-toggle\n [theme]=\"theme()\"\n (toggle)=\"themeToggle.emit()\"\n />\n\n <viking-button\n variant=\"outline\"\n [square]=\"true\"\n class=\"menu-toggle-btn\"\n [icon]=\"mobileMenuOpen() ? 'x' : 'menu'\"\n [label]=\"\n mobileMenuOpen()\n ? 'Close navigation menu'\n : 'Toggle navigation menu'\n \"\n (pressed)=\"toggleMobileMenu()\"\n />\n </div>\n </div>\n\n <nav\n class=\"mobile-menu\"\n [class.open]=\"mobileMenuOpen()\"\n aria-label=\"Mobile navigation\"\n >\n @for (link of navLinks(); track link.id + \"-mobile\") {\n @if (context() === \"app\" && isAppRouterPath(link.appHref)) {\n <a\n [routerLink]=\"link.appHref\"\n routerLinkActive=\"active\"\n [routerLinkActiveOptions]=\"{ exact: link.appHref === '/explore' }\"\n class=\"mobile-nav-btn\"\n (click)=\"closeMobileMenu()\"\n >\n <viking-icon [name]=\"link.icon\" [size]=\"16\" />\n <span>{{ link.label }}</span>\n </a>\n } @else {\n <a\n [href]=\"resolveHref(link)\"\n class=\"mobile-nav-btn\"\n (click)=\"closeMobileMenu()\"\n >\n <viking-icon [name]=\"link.icon\" [size]=\"16\" />\n <span>{{ link.label }}</span>\n </a>\n }\n }\n\n <div class=\"mobile-divider\"></div>\n\n @if (!isAuthenticated()) {\n <viking-button\n variant=\"primary\"\n icon=\"arrow-right\"\n class=\"mobile-auth-btn\"\n [fullWidth]=\"true\"\n (pressed)=\"login.emit(); closeMobileMenu()\"\n >\n Sign In\n </viking-button>\n } @else {\n <viking-button\n variant=\"primary\"\n icon=\"home\"\n class=\"mobile-auth-btn\"\n [fullWidth]=\"true\"\n [href]=\"urls().app + '/dashboard'\"\n (pressed)=\"closeMobileMenu()\"\n >\n Dashboard\n </viking-button>\n <viking-button\n variant=\"ghost\"\n class=\"mobile-auth-btn\"\n [fullWidth]=\"true\"\n (pressed)=\"logout.emit(); closeMobileMenu()\"\n >\n Sign Out\n </viking-button>\n }\n </nav>\n </header>\n `,\n})\nexport class VikingSiteNavbar {\n readonly context = input<SiteDrakkarContext>(\"app\");\n readonly urls = input<SiteUrls>(DEFAULT_SITE_URLS);\n readonly isAuthenticated = input<boolean>(false);\n readonly theme = input<\"light\" | \"dark\">(\"dark\");\n readonly showSearch = input<boolean>(false);\n\n readonly login = output<void>();\n readonly logout = output<void>();\n readonly themeToggle = output<void>();\n readonly searchOpen = output<void>();\n\n protected readonly mobileMenuOpen = signal(false);\n\n protected readonly navLinks = computed(() =>\n visibleNavLinks(SITE_NAV_LINKS, this.isAuthenticated()),\n );\n\n protected readonly brandHref = computed(() =>\n resolveBrandHref(this.context(), this.urls()),\n );\n\n protected resolveHref = (link: (typeof SITE_NAV_LINKS)[number]): string =>\n resolveNavHref(link, this.context(), this.urls());\n\n protected isAppRouterPath = isAppRouterPath;\n\n protected onBrandClick(event: MouseEvent): void {\n event.preventDefault();\n window.location.href = this.brandHref();\n }\n\n protected toggleMobileMenu(): void {\n this.mobileMenuOpen.update((open) => !open);\n }\n\n protected closeMobileMenu(): void {\n this.mobileMenuOpen.set(false);\n }\n\n protected openSearch(): void {\n this.searchOpen.emit();\n const widgets = (\n globalThis as { DemlWidgets?: { openSearch?: () => void } }\n ).DemlWidgets;\n widgets?.openSearch?.();\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n ViewEncapsulation,\n} from \"@angular/core\";\n\n/**\n * viking-footer — site-wide Drakkar footer shell. Project directory columns and bottom row via slots.\n * Static apps (marketing, backend) use the same class names from viking-ui.css.\n */\n@Component({\n selector: \"viking-footer\",\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n host: { class: \"viking-footer-host\" },\n template: `\n <footer class=\"viking-footer mega-footer\">\n <div class=\"viking-footer-content footer-content\">\n <ng-content select=\"[vikingFooterDirectory]\" />\n <section class=\"viking-footer-bottom footer-bottom\">\n <ng-content select=\"[vikingFooterBottom]\" />\n </section>\n </div>\n </footer>\n `,\n styleUrl: \"./footer.scss\",\n})\nexport class VikingFooter {}\n","import {\n ChangeDetectionStrategy,\n Component,\n input,\n output,\n} from \"@angular/core\";\nimport { RouterLink } from \"@angular/router\";\nimport { VikingFooter } from \"../footer/footer\";\nimport {\n cookieSettingsHref,\n DEFAULT_SITE_URLS,\n isAppRouterPath,\n resolveFooterHref,\n SITE_FOOTER_COLUMNS,\n SiteDrakkarContext,\n SiteFooterLink,\n SiteUrls,\n} from \"./site-drakkar.config\";\n\n/**\n * viking-site-footer — canonical site footer shared across DEML surfaces.\n */\n@Component({\n selector: \"viking-site-footer\",\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [RouterLink, VikingFooter],\n template: `\n <viking-footer>\n <nav\n vikingFooterDirectory\n class=\"viking-footer-directory footer-directory\"\n aria-label=\"Footer Directory\"\n >\n @for (column of columns; track column.title) {\n <div class=\"footer-column\">\n <h3 class=\"footer-column-title\">{{ column.title }}</h3>\n <ul class=\"footer-list\">\n @for (link of column.links; track link.label) {\n <li>\n @if (link.action === \"cookie-settings\") {\n @if (context() === \"marketing\") {\n <a href=\"#\" (click)=\"onCookieSettings($event)\">{{\n link.label\n }}</a>\n } @else {\n <a [href]=\"cookieSettingsUrl()\">{{ link.label }}</a>\n }\n } @else if (link.action === \"bug-report\") {\n @if (context() === \"app\") {\n <a href=\"#\" (click)=\"onBugReport($event)\">{{\n link.label\n }}</a>\n } @else {\n <a [href]=\"resolveHref(link)\">{{ link.label }}</a>\n }\n } @else if (context() === \"app\" && isAppRoute(link)) {\n <a [routerLink]=\"link.appHref\">{{ link.label }}</a>\n } @else {\n <a [href]=\"resolveHref(link)\">{{ link.label }}</a>\n }\n </li>\n }\n </ul>\n </div>\n }\n </nav>\n\n <ng-container vikingFooterBottom>\n <div class=\"footer-badges-top\">\n <span\n class=\"usa-badge viking-usa-badge\"\n id=\"usa-badge\"\n (mouseenter)=\"usaBadgeHover.emit($event)\"\n >\n <span\n class=\"usa-badge-icon viking-usa-badge-icon\"\n aria-hidden=\"true\"\n >🇺🇸</span\n >\n <span>Made in the U.S.A</span>\n </span>\n </div>\n\n <div class=\"footer-compliance-row\">\n <div class=\"copyright-info\">\n <span class=\"copyright-text\">\n Copyright © {{ year() }} Data Engineering for Machine Learning by\n <a\n href=\"https://joealongi.dev/\"\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n >Joe Alongi</a\n >. All rights reserved.\n </span>\n </div>\n </div>\n </ng-container>\n </viking-footer>\n `,\n})\nexport class VikingSiteFooter {\n readonly context = input<SiteDrakkarContext>(\"app\");\n readonly urls = input<SiteUrls>(DEFAULT_SITE_URLS);\n readonly year = input<number>(new Date().getFullYear());\n\n readonly cookieSettings = output<Event>();\n readonly bugReport = output<Event>();\n readonly usaBadgeHover = output<MouseEvent>();\n\n protected readonly columns = SITE_FOOTER_COLUMNS;\n\n protected readonly cookieSettingsUrl = () => cookieSettingsHref(this.urls());\n\n protected resolveHref = (link: SiteFooterLink): string =>\n resolveFooterHref(link, this.context(), this.urls());\n\n protected isAppRoute = (link: SiteFooterLink): boolean =>\n !link.action && isAppRouterPath(link.appHref);\n\n protected onCookieSettings(event: Event): void {\n event.preventDefault();\n this.cookieSettings.emit(event);\n }\n\n protected onBugReport(event: Event): void {\n event.preventDefault();\n this.bugReport.emit(event);\n }\n}\n","import { ChangeDetectionStrategy, Component, input } from \"@angular/core\";\n\n/**\n * viking-app-header — sticky application header with brand, nav, actions, and mobile menu slots.\n * Styles live in the component library so all apps share one navbar implementation.\n */\n@Component({\n selector: \"viking-app-header\",\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <header class=\"viking-app-header\">\n <div class=\"viking-app-header-content\">\n <div class=\"viking-app-header-left\">\n <ng-content select=\"[vikingAppHeaderBrand]\" />\n </div>\n <nav\n class=\"viking-app-header-center viking-app-header-desktop-nav\"\n aria-label=\"Main navigation\"\n >\n <ng-content select=\"[vikingAppHeaderNav]\" />\n </nav>\n <div class=\"viking-app-header-right\">\n <div class=\"viking-app-header-desktop-auth\">\n <ng-content select=\"[vikingAppHeaderAuth]\" />\n </div>\n <ng-content select=\"[vikingAppHeaderActions]\" />\n </div>\n </div>\n <nav\n class=\"viking-app-header-mobile\"\n [class.viking-open]=\"mobileMenuOpen()\"\n [attr.aria-label]=\"mobileMenuLabel()\"\n >\n <ng-content select=\"[vikingAppHeaderMobile]\" />\n </nav>\n </header>\n `,\n styleUrl: \"./app-header.scss\",\n})\nexport class VikingAppHeader {\n readonly mobileMenuOpen = input<boolean>(false);\n readonly mobileMenuLabel = input<string>(\"Mobile navigation\");\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n ViewEncapsulation,\n input,\n output,\n} from \"@angular/core\";\n\n/**\n * viking-app-sidebar — dashboard sidebar shell styles (project nav markup inside).\n * Width is driven by the `--viking-sidebar-width` CSS variable on the host.\n */\n@Component({\n selector: \"viking-app-sidebar\",\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n host: {\n class: \"viking-app-sidebar-host\",\n \"[style.--viking-sidebar-width.px]\": \"collapsed() ? null : width()\",\n },\n template: `<ng-content />`,\n styleUrl: \"./app-sidebar.scss\",\n})\nexport class VikingAppSidebar {\n readonly collapsed = input<boolean>(false);\n readonly dragging = input<boolean>(false);\n readonly width = input<number>(260);\n readonly resizeStart = output<MouseEvent>();\n}\n","let counter = 0;\n\n/** Generates a stable, unique DOM id for label/control associations. */\nexport const vikingUid = (prefix: string): string => {\n counter += 1;\n return `${prefix}-${counter}`;\n};\n","import {\n ChangeDetectionStrategy,\n Component,\n Optional,\n input,\n model,\n} from \"@angular/core\";\nimport { VikingIcon } from \"../icon/icon\";\nimport { vikingUid } from \"../../core/uid\";\n\n/**\n * viking-accordion — collapsible content panels.\n * Set exclusive to allow only one open item at a time.\n */\n@Component({\n selector: \"viking-accordion\",\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `<ng-content />`,\n styles: [\n `\n :host {\n display: block;\n border: 1px solid var(--viking-border);\n border-radius: var(--viking-radius);\n background: var(--viking-surface);\n overflow: hidden;\n }\n :host ::ng-deep viking-accordion-item:not(:last-child) {\n border-bottom: 1px solid var(--viking-border);\n }\n `,\n ],\n})\nexport class VikingAccordion {\n readonly exclusive = input<boolean>(false);\n\n private openItem: VikingAccordionItem | null = null;\n\n /** Called by items when they open, to enforce exclusive mode. */\n readonly notifyOpened = (item: VikingAccordionItem): void => {\n if (this.exclusive() && this.openItem && this.openItem !== item) {\n this.openItem.expanded.set(false);\n }\n this.openItem = item;\n };\n}\n\n/** A single expandable section within viking-accordion. */\n@Component({\n selector: \"viking-accordion-item\",\n imports: [VikingIcon],\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <button\n type=\"button\"\n class=\"viking-accordion-trigger\"\n [attr.aria-expanded]=\"expanded()\"\n [attr.aria-controls]=\"panelId\"\n (click)=\"toggle()\"\n >\n <span class=\"viking-accordion-heading\">{{ heading() }}</span>\n <viking-icon\n [name]=\"expanded() ? 'chevron-up' : 'chevron-down'\"\n [size]=\"18\"\n />\n </button>\n @if (expanded()) {\n <div class=\"viking-accordion-panel\" [id]=\"panelId\">\n <ng-content />\n </div>\n }\n `,\n styles: [\n `\n :host {\n display: block;\n }\n .viking-accordion-trigger {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: var(--viking-space-2);\n width: 100%;\n border: none;\n background: transparent;\n color: var(--viking-text);\n font-family: var(--viking-font-family);\n font-size: var(--viking-font-size-ui);\n font-weight: 700;\n padding: var(--viking-space-2);\n cursor: pointer;\n text-align: left;\n transition: var(--viking-transition);\n }\n .viking-accordion-trigger:hover {\n background: var(--viking-accent-soft);\n }\n .viking-accordion-trigger:focus-visible {\n outline: var(--viking-ring-width) solid var(--viking-ring);\n outline-offset: -3px;\n }\n .viking-accordion-panel {\n padding: 0 var(--viking-space-2) var(--viking-space-2);\n color: var(--viking-text-muted);\n font-family: var(--viking-font-family);\n font-size: var(--viking-font-size);\n line-height: 1.6;\n }\n `,\n ],\n})\nexport class VikingAccordionItem {\n constructor(@Optional() private readonly accordion: VikingAccordion | null) {}\n\n readonly heading = input.required<string>();\n readonly expanded = model<boolean>(false);\n\n protected readonly panelId = vikingUid(\"viking-accordion-panel\");\n\n protected toggle = (): void => {\n this.expanded.update((value) => !value);\n if (this.expanded()) {\n this.accordion?.notifyOpened(this);\n }\n };\n}\n","import { ChangeDetectionStrategy, Component, input } from \"@angular/core\";\n\n/**\n * viking-separator — horizontal/vertical rule with optional label\n *.\n */\n@Component({\n selector: \"viking-separator\",\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n role: \"separator\",\n \"[attr.aria-orientation]\": \"orientation()\",\n \"[class.viking-vertical]\": \"orientation() === 'vertical'\",\n },\n template: `\n @if (text() && orientation() === \"horizontal\") {\n <span class=\"viking-separator-line\" aria-hidden=\"true\"></span>\n <span class=\"viking-separator-text\">{{ text() }}</span>\n <span class=\"viking-separator-line\" aria-hidden=\"true\"></span>\n } @else {\n <span class=\"viking-separator-line\" aria-hidden=\"true\"></span>\n }\n `,\n styles: [\n `\n :host {\n display: flex;\n align-items: center;\n gap: var(--viking-space-2);\n width: 100%;\n }\n :host(.viking-vertical) {\n width: auto;\n align-self: stretch;\n }\n .viking-separator-line {\n flex: 1;\n border-top: 1px solid var(--viking-border);\n }\n :host(.viking-vertical) .viking-separator-line {\n flex: none;\n border-top: none;\n border-left: 1px solid var(--viking-border);\n height: 100%;\n min-height: var(--viking-space-3);\n }\n .viking-separator-text {\n font-family: var(--viking-font-family);\n font-size: var(--viking-font-size);\n color: var(--viking-text-muted);\n white-space: nowrap;\n }\n `,\n ],\n})\nexport class VikingSeparator {\n readonly orientation = input<\"horizontal\" | \"vertical\">(\"horizontal\");\n readonly text = input<string>(\"\");\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n input,\n output,\n} from \"@angular/core\";\nimport { VikingButton } from \"../button/button\";\nimport { VikingSeparator } from \"../separator/separator\";\n\n/**\n * viking-auth-panel — access portal / sign-in layout template.\n * Full-width stacked actions, Google + Apple OAuth row, WCAG-friendly structure.\n */\n@Component({\n selector: \"viking-auth-panel\",\n imports: [VikingButton, VikingSeparator],\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: { class: \"viking-auth-panel-host\" },\n template: `\n <section class=\"viking-auth-panel\" aria-labelledby=\"viking-auth-title\">\n <header class=\"viking-auth-header\">\n @if (tag()) {\n <div class=\"viking-auth-tag-row\">\n <span class=\"viking-auth-tag\">{{ tag() }}</span>\n </div>\n }\n <h1 id=\"viking-auth-title\" class=\"viking-auth-title\">{{ title() }}</h1>\n @if (subtitle()) {\n <p class=\"viking-auth-subtitle\">{{ subtitle() }}</p>\n }\n </header>\n\n <div class=\"viking-auth-body\">\n <ng-content />\n </div>\n\n <ng-content select=\"[vikingAuthLinks]\" />\n\n @if (showSocial()) {\n <viking-separator text=\"or\" />\n <div\n class=\"viking-auth-social\"\n role=\"group\"\n aria-label=\"Social sign-in\"\n >\n <viking-button\n variant=\"outline\"\n type=\"button\"\n icon=\"google\"\n [fullWidth]=\"true\"\n [loading]=\"socialLoading()\"\n [disabled]=\"socialLoading()\"\n (pressed)=\"googleSignIn.emit()\"\n >\n Sign In with Google\n </viking-button>\n <viking-button\n variant=\"outline\"\n type=\"button\"\n icon=\"apple\"\n [fullWidth]=\"true\"\n [loading]=\"socialLoading()\"\n [disabled]=\"socialLoading()\"\n (pressed)=\"appleSignIn.emit()\"\n >\n Sign In with Apple\n </viking-button>\n </div>\n }\n\n <footer class=\"viking-auth-footer\">\n <ng-content select=\"[vikingAuthFooter]\" />\n </footer>\n </section>\n `,\n styles: [\n `\n :host {\n display: block;\n width: 100%;\n max-width: 520px;\n margin-inline: auto;\n font-family: var(--viking-font-family);\n }\n .viking-auth-panel {\n display: flex;\n flex-direction: column;\n gap: var(--viking-space-4);\n width: 100%;\n padding: var(--viking-card-padding);\n background: var(--viking-surface);\n border: 1px solid var(--viking-border);\n border-radius: var(--viking-radius-lg);\n box-shadow: var(--viking-shadow-md);\n position: relative;\n overflow: hidden;\n }\n .viking-auth-panel::before {\n content: \"\";\n position: absolute;\n inset: 0 0 auto;\n height: 1px;\n background: linear-gradient(\n 90deg,\n transparent,\n color-mix(in srgb, var(--viking-metallic-200) 22%, transparent),\n transparent\n );\n pointer-events: none;\n }\n .viking-auth-header {\n display: flex;\n flex-direction: column;\n gap: var(--viking-space-2);\n margin-bottom: var(--viking-space-2);\n }\n .viking-auth-tag-row {\n display: flex;\n align-items: center;\n }\n .viking-auth-tag {\n display: inline-flex;\n align-items: center;\n gap: var(--viking-space-1);\n font-size: var(--viking-font-size-ui);\n font-weight: 700;\n letter-spacing: 0.08em;\n text-transform: uppercase;\n color: var(--viking-text-muted);\n padding: var(--viking-space-1) var(--viking-space-2);\n border: 1px solid var(--viking-border);\n border-radius: var(--viking-radius-pill);\n background: var(--viking-surface);\n box-shadow: var(--viking-shadow-sm);\n }\n .viking-auth-tag::before {\n content: \"\";\n width: var(--viking-space-1);\n height: var(--viking-space-1);\n border-radius: 50%;\n background: var(--viking-accent);\n flex-shrink: 0;\n }\n .viking-auth-title {\n margin: 0;\n font-size: var(--viking-font-size-xl);\n font-weight: 700;\n letter-spacing: var(--header-letter-spacing, -0.02em);\n color: var(--viking-text);\n line-height: var(--viking-line-height-tight);\n }\n .viking-auth-subtitle {\n margin: 0;\n font-size: var(--viking-font-size);\n line-height: 1.6;\n color: var(--viking-text-muted);\n }\n .viking-auth-body {\n display: flex;\n flex-direction: column;\n gap: var(--viking-space-3);\n width: 100%;\n }\n :host ::ng-deep .viking-auth-stack {\n display: flex;\n flex-direction: column;\n gap: var(--viking-space-3);\n width: 100%;\n }\n :host ::ng-deep .viking-auth-stack viking-callout {\n width: 100%;\n }\n :host ::ng-deep .viking-auth-stack .login-form,\n :host ::ng-deep .login-form {\n display: flex;\n flex-direction: column;\n gap: var(--viking-space-3);\n width: 100%;\n }\n .viking-auth-social {\n display: flex;\n flex-direction: column;\n gap: var(--viking-space-3);\n width: 100%;\n }\n .viking-auth-footer {\n display: flex;\n flex-direction: column;\n gap: var(--viking-space-3);\n width: 100%;\n margin-top: var(--viking-space-4);\n padding-top: var(--viking-space-4);\n border-top: 1px solid var(--viking-border);\n }\n :host ::ng-deep [vikingAuthFooter] {\n display: flex;\n flex-direction: column;\n gap: var(--viking-space-3);\n width: 100%;\n }\n :host ::ng-deep [vikingAuthFooter] viking-button .viking-btn {\n min-width: 0;\n }\n :host ::ng-deep [vikingAuthLinks].viking-auth-links,\n :host ::ng-deep .viking-auth-links {\n display: flex;\n flex-direction: column;\n gap: var(--viking-space-2);\n width: 100%;\n }\n :host ::ng-deep viking-field {\n width: 100%;\n }\n `,\n ],\n})\nexport class VikingAuthPanel {\n readonly tag = input(\"Access Portal\");\n readonly title = input.required<string>();\n readonly subtitle = input(\n \"Secure entry to the DEML (DATA ENGINEERING FOR MACHINE LEARNING).\",\n );\n readonly showSocial = input(true);\n readonly socialLoading = input(false);\n\n readonly googleSignIn = output<void>();\n readonly appleSignIn = output<void>();\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n computed,\n input,\n model,\n output,\n signal,\n} from \"@angular/core\";\nimport { VikingControl, provideVikingCva } from \"../core/cva\";\nimport { VikingIcon } from \"../icon/icon\";\nimport { vikingUid } from \"../../core/uid\";\n\n/**\n * viking-autocomplete — text input with filtered suggestions\n *. ControlValueAccessor-compatible.\n */\n@Component({\n selector: \"viking-autocomplete\",\n imports: [VikingIcon],\n providers: [provideVikingCva(VikingAutocomplete)],\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: { \"(document:click)\": \"onDocumentClick($event)\" },\n template: `\n <div class=\"viking-control viking-autocomplete-shell\">\n <viking-icon class=\"viking-autocomplete-icon\" name=\"search\" [size]=\"20\" />\n <input\n type=\"text\"\n role=\"combobox\"\n [placeholder]=\"placeholder()\"\n [value]=\"value()\"\n [disabled]=\"disabled() || formDisabled()\"\n [attr.aria-expanded]=\"open()\"\n [attr.aria-controls]=\"panelId\"\n [attr.aria-label]=\"label() || placeholder() || 'Autocomplete'\"\n aria-autocomplete=\"list\"\n (input)=\"onInput($event)\"\n (focus)=\"open.set(true)\"\n (keydown)=\"onKeydown($event)\"\n (blur)=\"onTouched()\"\n />\n </div>\n @if (open() && filtered().length > 0) {\n <div class=\"viking-autocomplete-panel\" role=\"listbox\" [id]=\"panelId\">\n @for (item of filtered(); track item; let index = $index) {\n <button\n type=\"button\"\n role=\"option\"\n class=\"viking-autocomplete-option\"\n [class.viking-active]=\"index === activeIndex()\"\n [attr.aria-selected]=\"index === activeIndex()\"\n (mousedown)=\"$event.preventDefault()\"\n (click)=\"pick(item)\"\n (mouseenter)=\"activeIndex.set(index)\"\n >\n {{ item }}\n </button>\n }\n </div>\n }\n `,\n styles: [\n `\n :host {\n position: relative;\n display: block;\n }\n .viking-autocomplete-shell {\n display: flex;\n align-items: center;\n gap: var(--viking-space-1);\n min-height: var(--viking-control-height);\n padding: 0 var(--viking-space-2);\n background: var(--viking-surface);\n border: 1px solid var(--viking-border-strong);\n border-radius: var(--viking-radius);\n box-shadow: var(--viking-shadow-sm);\n transition: var(--viking-transition);\n }\n .viking-autocomplete-shell:focus-within {\n outline: var(--viking-ring-width) solid var(--viking-ring);\n outline-offset: var(--viking-ring-offset);\n }\n .viking-autocomplete-icon {\n color: var(--viking-text-muted);\n }\n input {\n flex: 1;\n min-width: 0;\n border: none;\n outline: none;\n background: transparent;\n color: var(--viking-text);\n font-family: var(--viking-font-family);\n font-size: var(--viking-font-size);\n }\n input::placeholder {\n color: var(--viking-text-muted);\n }\n .viking-autocomplete-panel {\n position: absolute;\n top: calc(100% + var(--viking-space-1));\n left: 0;\n right: 0;\n display: flex;\n flex-direction: column;\n gap: 2px;\n margin: 0;\n padding: var(--viking-space-1);\n background: var(--viking-surface);\n border: 1px solid var(--viking-border-strong);\n border-radius: var(--viking-radius);\n box-shadow: var(--viking-shadow-md);\n z-index: var(--viking-z-overlay);\n max-height: 288px;\n overflow: auto;\n }\n .viking-autocomplete-option {\n padding: var(--viking-space-1);\n border: none;\n background: transparent;\n text-align: left;\n width: 100%;\n border-radius: calc(var(--viking-radius) / 1.5);\n font-family: var(--viking-font-family);\n font-size: var(--viking-font-size);\n color: var(--viking-text);\n cursor: pointer;\n }\n .viking-autocomplete-option:focus-visible {\n outline: var(--viking-ring-width) solid var(--viking-ring);\n outline-offset: -2px;\n }\n .viking-active {\n background: var(--viking-accent-soft);\n }\n `,\n ],\n})\nexport class VikingAutocomplete extends VikingControl<string> {\n readonly suggestions = input.required<string[]>();\n readonly value = model<string>(\"\");\n readonly placeholder = input<string>(\"\");\n readonly label = input<string>(\"\");\n readonly disabled = input<boolean>(false);\n\n readonly selected = output<string>();\n\n constructor(private readonly host: ElementRef<HTMLElement>) {\n super();\n }\n\n protected readonly open = signal(false);\n protected readonly activeIndex = signal(0);\n protected readonly panelId = vikingUid(\"viking-autocomplete-panel\");\n\n protected readonly filtered = computed(() => {\n const query = this.value().toLowerCase().trim();\n if (!query) {\n return this.suggestions();\n }\n return this.suggestions().filter((item) =>\n item.toLowerCase().includes(query),\n );\n });\n\n writeValue(value: string): void {\n this.value.set(value ?? \"\");\n }\n\n protected onInput = (event: Event): void => {\n const next = (event.target as HTMLInputElement).value;\n this.value.set(next);\n this.onChange(next);\n this.open.set(true);\n this.activeIndex.set(0);\n };\n\n protected pick = (item: string): void => {\n this.value.set(item);\n this.onChange(item);\n this.selected.emit(item);\n this.open.set(false);\n };\n\n protected onKeydown = (event: KeyboardEvent): void => {\n if (!this.open()) {\n return;\n }\n const items = this.filtered();\n switch (event.key) {\n case \"ArrowDown\":\n event.preventDefault();\n this.activeIndex.update((index) =>\n Math.min(items.length - 1, index + 1),\n );\n break;\n case \"ArrowUp\":\n event.preventDefault();\n this.activeIndex.update((index) => Math.max(0, index - 1));\n break;\n case \"Enter\":\n if (items[this.activeIndex()]) {\n event.preventDefault();\n this.pick(items[this.activeIndex()]);\n }\n break;\n case \"Escape\":\n this.open.set(false);\n break;\n }\n };\n\n protected onDocumentClick = (event: Event): void => {\n if (\n this.open() &&\n !this.host.nativeElement.contains(event.target as Node)\n ) {\n this.open.set(false);\n }\n };\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n input,\n signal,\n} from \"@angular/core\";\nimport { VikingTone } from \"../../core/types\";\n\n/**\n * viking-avatar — image or initials avatar with optional status indicator\n *.\n */\n@Component({\n selector: \"viking-avatar\",\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n \"[style.width.px]\": \"size()\",\n \"[style.height.px]\": \"size()\",\n \"[class.viking-avatar-square]\": \"square()\",\n },\n template: `\n @if (src() && !imageFailed()) {\n <img [src]=\"src()\" [alt]=\"name()\" (error)=\"imageFailed.set(true)\" />\n } @else {\n <span class=\"viking-avatar-initials\">\n {{ initials() }}\n </span>\n }\n @if (status()) {\n <span\n class=\"viking-avatar-status\"\n [class]=\"'viking-status-' + status()\"\n role=\"status\"\n >\n <span class=\"viking-visually-hidden\">{{ status() }}</span>\n </span>\n }\n `,\n styles: [\n `\n :host {\n position: relative;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n border-radius: var(--viking-radius-pill);\n background: var(--viking-surface-alt);\n border: 1px solid var(--viking-border);\n overflow: visible;\n flex-shrink: 0;\n }\n :host(.viking-avatar-square) {\n border-radius: var(--viking-radius);\n }\n img {\n width: 100%;\n height: 100%;\n object-fit: cover;\n border-radius: inherit;\n }\n .viking-avatar-initials {\n font-family: var(--viking-font-family);\n font-size: var(--viking-font-size-ui);\n font-weight: 600;\n color: var(--viking-text);\n text-transform: uppercase;\n letter-spacing: 0.02em;\n user-select: none;\n }\n .viking-avatar-status {\n position: absolute;\n right: -1px;\n bottom: -1px;\n width: 27%;\n height: 27%;\n min-width: 9px;\n min-height: 9px;\n border-radius: var(--viking-radius-pill);\n border: 2px solid var(--viking-surface);\n }\n .viking-status-success {\n background: var(--viking-success);\n }\n .viking-status-warning {\n background: var(--viking-warning);\n }\n .viking-status-danger {\n background: var(--viking-danger);\n }\n .viking-status-accent {\n background: var(--viking-accent);\n }\n .viking-status-muted {\n background: var(--viking-text-muted);\n }\n .viking-visually-hidden {\n position: absolute;\n width: 1px;\n height: 1px;\n overflow: hidden;\n clip: rect(0 0 0 0);\n white-space: nowrap;\n }\n `,\n ],\n})\nexport class VikingAvatar {\n readonly src = input<string | null>(null);\n readonly name = input<string>(\"\");\n readonly size = input<number>(45);\n readonly square = input<boolean>(false);\n readonly status = input<VikingTone | null>(null);\n\n protected readonly imageFailed = signal(false);\n\n protected readonly initials = computed(() => {\n const parts = this.name().trim().split(/\\s+/).filter(Boolean);\n if (parts.length === 0) {\n return \"?\";\n }\n const first = parts[0].charAt(0);\n const last = parts.length > 1 ? parts[parts.length - 1].charAt(0) : \"\";\n return `${first}${last}`;\n });\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n input,\n output,\n} from \"@angular/core\";\nimport { VikingIcon } from \"../icon/icon\";\nimport { VikingIconName } from \"../../core/icons\";\nimport { VikingSize, VikingTone } from \"../../core/types\";\n\n/**\n * viking-badge — status pill.\n * Tones map to THEME.md semantic colors only.\n */\n@Component({\n selector: \"viking-badge\",\n imports: [VikingIcon],\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: { \"[class]\": \"hostClass()\" },\n template: `\n @if (icon()) {\n <viking-icon [name]=\"icon()!\" [size]=\"16\" />\n }\n <ng-content />\n @if (removable()) {\n <button\n type=\"button\"\n class=\"viking-badge-remove\"\n aria-label=\"Remove\"\n (click)=\"removed.emit()\"\n >\n <viking-icon name=\"x\" [size]=\"14\" />\n </button>\n }\n `,\n styles: [\n `\n :host {\n display: inline-flex;\n align-items: center;\n gap: var(--viking-space-half);\n font-family: var(--viking-font-family);\n font-size: var(--viking-font-size-xs);\n font-weight: var(--viking-font-weight-semibold);\n letter-spacing: var(--viking-letter-spacing-wide);\n line-height: var(--viking-line-height-snug);\n padding: var(--viking-space-half) var(--viking-space-1);\n border-radius: var(--viking-radius-pill);\n border: 1px solid var(--viking-border);\n background: var(--viking-surface-alt);\n color: var(--viking-text);\n white-space: nowrap;\n transition: var(--viking-transition-interactive);\n box-shadow: var(--viking-shadow-xs);\n }\n :host(.viking-badge-sm) {\n padding: 0 var(--viking-space-1);\n font-size: var(--viking-font-size-2xs);\n }\n :host(.viking-badge-accent) {\n background: var(--viking-accent);\n border-color: color-mix(\n in srgb,\n var(--viking-accent) 80%,\n var(--viking-black)\n );\n color: var(--viking-accent-content);\n box-shadow: var(--viking-shadow-sm);\n }\n :host(.viking-badge-secondary) {\n background: color-mix(\n in srgb,\n var(--viking-accent-secondary) 16%,\n var(--viking-surface)\n );\n border-color: color-mix(\n in srgb,\n var(--viking-accent-secondary) 55%,\n transparent\n );\n color: var(--viking-accent-secondary);\n }\n :host(.viking-badge-success) {\n background: color-mix(\n in srgb,\n var(--viking-success) 16%,\n var(--viking-surface)\n );\n border-color: color-mix(\n in srgb,\n var(--viking-success) 55%,\n transparent\n );\n color: var(--viking-success);\n }\n :host(.viking-badge-warning) {\n background: color-mix(\n in srgb,\n var(--viking-warning) 18%,\n var(--viking-surface)\n );\n border-color: color-mix(\n in srgb,\n var(--viking-warning) 55%,\n transparent\n );\n color: var(--viking-warning);\n }\n :host(.viking-badge-danger) {\n background: color-mix(\n in srgb,\n var(--viking-danger) 14%,\n var(--viking-surface)\n );\n border-color: color-mix(in srgb, var(--viking-danger) 50%, transparent);\n color: var(--viking-danger-text);\n }\n :host(.viking-badge-info) {\n background: color-mix(\n in srgb,\n var(--viking-info) 14%,\n var(--viking-surface)\n );\n border-color: color-mix(in srgb, var(--viking-info) 50%, transparent);\n color: var(--viking-info);\n }\n :host(.viking-badge-muted) {\n color: var(--viking-text-muted);\n background: var(--viking-surface);\n border-color: var(--viking-border-subtle);\n }\n .viking-badge-remove {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n min-width: var(--viking-touch-target-comfort);\n min-height: var(--viking-touch-target-comfort);\n border: none;\n background: transparent;\n color: currentColor;\n cursor: pointer;\n padding: var(--viking-space-half);\n border-radius: var(--viking-radius-pill);\n transition: var(--viking-transition-interactive);\n margin-left: calc(var(--viking-space-half) * -1);\n position: relative;\n }\n .viking-badge-remove::before {\n content: \"\";\n position: absolute;\n inset: 50%;\n width: var(--viking-touch-target-min);\n height: var(--viking-touch-target-min);\n transform: translate(-50%, -50%);\n }\n .viking-badge-remove:hover {\n background: color-mix(in srgb, currentColor 12%, transparent);\n }\n .viking-badge-remove:focus-visible {\n outline: var(--viking-ring-width) solid var(--viking-ring);\n outline-offset: var(--viking-ring-offset);\n }\n .viking-badge-remove:active {\n transform: scale(var(--viking-state-active-scale));\n }\n `,\n ],\n})\nexport class VikingBadge {\n readonly tone = input<VikingTone | \"neutral\">(\"neutral\");\n readonly size = input<VikingSize>(\"base\");\n readonly icon = input<VikingIconName | null>(null);\n readonly removable = input<boolean>(false);\n\n readonly removed = output<void>();\n\n protected readonly hostClass = computed(() => ({\n [`viking-badge-${this.tone()}`]: this.tone() !== \"neutral\",\n \"viking-badge-sm\": this.size() !== \"base\",\n }));\n}\n","import { ChangeDetectionStrategy, Component, input } from \"@angular/core\";\n\n/** viking-bar — vertical bar for mock charts and decorative grids. */\n@Component({\n selector: \"viking-bar\",\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: \"viking-bar\",\n \"[style.--viking-bar-height.%]\": \"height()\",\n },\n template: \"\",\n styles: [\n `\n :host {\n display: block;\n flex: 1;\n height: calc(var(--viking-bar-height, 50) * 1%);\n background: linear-gradient(\n 180deg,\n var(--viking-accent),\n var(--viking-accent-strong, var(--viking-info))\n );\n border-radius: 4px 4px 0 0;\n opacity: 0.85;\n }\n `,\n ],\n})\nexport class VikingBar {\n readonly height = input<number>(50);\n}\n","import { ChangeDetectionStrategy, Component, input } from \"@angular/core\";\nimport { VikingIcon } from \"../icon/icon\";\n\n/**\n * viking-brand — logo + wordmark lockup.\n * Project a custom logo (img/svg) or fall back to a monogram tile.\n */\n@Component({\n selector: \"viking-brand\",\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [VikingIcon],\n template: `\n @if (logoSrc()) {\n <img\n class=\"viking-brand-logo\"\n [src]=\"logoSrc()\"\n [alt]=\"name() + ' logo'\"\n />\n } @else {\n <viking-icon\n name=\"drakkar\"\n [size]=\"28\"\n color=\"accent\"\n class=\"viking-brand-mark-icon\"\n />\n }\n <span class=\"viking-brand-name\">{{ name() }}</span>\n <ng-content />\n `,\n styles: [\n `\n :host {\n display: inline-flex;\n align-items: center;\n gap: var(--viking-space-1);\n font-family: var(--viking-font-family);\n color: var(--viking-text);\n text-decoration: none;\n }\n .viking-brand-logo {\n height: var(--viking-space-3);\n width: auto;\n }\n .viking-brand-mark-icon {\n color: var(--viking-accent);\n flex-shrink: 0;\n }\n .viking-brand-name {\n font-weight: 700;\n font-size: var(--viking-font-size-ui);\n letter-spacing: var(--header-letter-spacing, -0.02em);\n white-space: nowrap;\n }\n `,\n ],\n})\nexport class VikingBrand {\n readonly name = input.required<string>();\n readonly logoSrc = input<string | null>(null);\n}\n","import { ChangeDetectionStrategy, Component, input } from \"@angular/core\";\nimport { VikingIcon } from \"../icon/icon\";\n\nexport interface VikingBreadcrumb {\n label: string;\n href?: string;\n}\n\n/**\n * viking-breadcrumbs — hierarchy navigation.\n */\n@Component({\n selector: \"viking-breadcrumbs\",\n imports: [VikingIcon],\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <nav aria-label=\"Breadcrumb\">\n <ol class=\"viking-breadcrumbs\">\n @for (item of items(); track item.label; let last = $last) {\n <li class=\"viking-breadcrumb\">\n @if (item.href && !last) {\n <a [href]=\"item.href\">{{ item.label }}</a>\n } @else {\n <span [attr.aria-current]=\"last ? 'page' : null\">{{\n item.label\n }}</span>\n }\n @if (!last) {\n <viking-icon name=\"chevron-right\" [size]=\"16\" />\n }\n </li>\n }\n </ol>\n </nav>\n `,\n styles: [\n `\n .viking-breadcrumbs {\n display: flex;\n align-items: center;\n flex-wrap: wrap;\n gap: var(--viking-space-1);\n margin: 0;\n padding: 0;\n list-style: none;\n font-family: var(--viking-font-family);\n font-size: var(--viking-font-size);\n }\n .viking-breadcrumb {\n display: inline-flex;\n align-items: center;\n gap: var(--viking-space-1);\n color: var(--viking-text-muted);\n }\n .viking-breadcrumb a {\n color: var(--viking-text-muted);\n text-decoration: none;\n border-bottom: 1px solid transparent;\n padding: var(--viking-space-half) 0;\n transition: var(--viking-transition-interactive);\n }\n .viking-breadcrumb a:hover {\n color: var(--viking-accent-strong);\n border-bottom-color: var(--viking-accent-strong);\n }\n .viking-breadcrumb a:focus-visible {\n color: var(--viking-accent-strong);\n outline: var(--viking-ring-width) solid var(--viking-ring);\n outline-offset: var(--viking-ring-offset);\n border-radius: var(--viking-radius-xs);\n }\n .viking-breadcrumb span[aria-current=\"page\"] {\n color: var(--viking-text);\n font-weight: var(--viking-font-weight-semibold);\n }\n `,\n ],\n})\nexport class VikingBreadcrumbs {\n readonly items = input.required<VikingBreadcrumb[]>();\n}\n","import { ChangeDetectionStrategy, Component } from \"@angular/core\";\n\n/**\n * viking-button-group — fuses buttons with shared borders\n *.\n */\n@Component({\n selector: \"viking-button-group\",\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: { role: \"group\" },\n template: `<ng-content />`,\n styles: [\n `\n :host {\n display: inline-flex;\n border-radius: var(--viking-radius);\n box-shadow: var(--viking-shadow-sm);\n overflow: hidden;\n }\n :host ::ng-deep viking-button:not(:first-child) .viking-btn {\n border-top-left-radius: 0;\n border-bottom-left-radius: 0;\n margin-left: -1px;\n }\n :host ::ng-deep viking-button:not(:last-child) .viking-btn {\n border-top-right-radius: 0;\n border-bottom-right-radius: 0;\n }\n :host ::ng-deep viking-button .viking-btn {\n box-shadow: none;\n min-width: 0;\n }\n :host ::ng-deep viking-button .viking-btn:hover,\n :host ::ng-deep viking-button .viking-btn:focus-visible {\n z-index: 1;\n }\n `,\n ],\n})\nexport class VikingButtonGroup {}\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n model,\n signal,\n} from \"@angular/core\";\nimport { VikingControl, provideVikingCva } from \"../core/cva\";\nimport { VikingIcon } from \"../icon/icon\";\n\ninterface CalendarDay {\n iso: string;\n day: number;\n inMonth: boolean;\n isToday: 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];\n\nconst WEEKDAYS = [\"Su\", \"Mo\", \"Tu\", \"We\", \"Th\", \"Fr\", \"Sa\"];\n\nconst toIso = (date: Date): string =>\n `${date.getFullYear()}-${String(date.getMonth() + 1).padStart(2, \"0\")}-${String(date.getDate()).padStart(2, \"0\")}`;\n\n/**\n * viking-calendar — month-grid date selection.\n * Value is an ISO date string (YYYY-MM-DD). ControlValueAccessor-compatible.\n */\n@Component({\n selector: \"viking-calendar\",\n imports: [VikingIcon],\n providers: [provideVikingCva(VikingCalendar)],\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <div class=\"viking-calendar\">\n <div class=\"viking-calendar-header\">\n <button\n type=\"button\"\n class=\"viking-calendar-nav\"\n aria-label=\"Previous month\"\n (click)=\"move(-1)\"\n >\n <viking-icon name=\"chevron-left\" [size]=\"18\" />\n </button>\n <span class=\"viking-calendar-title\" aria-live=\"polite\">{{\n title()\n }}</span>\n <button\n type=\"button\"\n class=\"viking-calendar-nav\"\n aria-label=\"Next month\"\n (click)=\"move(1)\"\n >\n <viking-icon name=\"chevron-right\" [size]=\"18\" />\n </button>\n </div>\n <div\n class=\"viking-calendar-grid\"\n role=\"group\"\n [attr.aria-label]=\"title()\"\n >\n @for (weekday of weekdays; track weekday) {\n <span class=\"viking-calendar-weekday\" aria-hidden=\"true\">{{\n weekday\n }}</span>\n }\n @for (day of days(); track day.iso) {\n <button\n type=\"button\"\n class=\"viking-calendar-day\"\n [class.viking-outside]=\"!day.inMonth\"\n [class.viking-today]=\"day.isToday\"\n [class.viking-selected]=\"day.iso === value()\"\n [attr.aria-label]=\"day.iso\"\n [attr.aria-pressed]=\"day.iso === value()\"\n (click)=\"pick(day)\"\n >\n {{ day.day }}\n </button>\n }\n </div>\n </div>\n `,\n styles: [\n `\n .viking-calendar {\n display: inline-block;\n padding: var(--viking-space-2);\n background: var(--viking-surface);\n border: 1px solid var(--viking-border);\n border-radius: var(--viking-radius);\n font-family: var(--viking-font-family);\n }\n .viking-calendar-header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: var(--viking-space-1);\n margin-bottom: var(--viking-space-1);\n }\n .viking-calendar-title {\n font-size: var(--viking-font-size);\n font-weight: 600;\n color: var(--viking-text);\n }\n .viking-calendar-nav {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n min-width: var(--viking-touch-target-comfort);\n min-height: var(--viking-touch-target-comfort);\n border: 1px solid var(--viking-border);\n background: transparent;\n color: var(--viking-text-muted);\n border-radius: var(--viking-radius-sm);\n padding: var(--viking-space-half);\n cursor: pointer;\n transition: var(--viking-transition-interactive);\n -webkit-tap-highlight-color: transparent;\n }\n .viking-calendar-nav:hover {\n color: var(--viking-text);\n border-color: var(--viking-accent-strong);\n background: var(--viking-accent-soft);\n }\n .viking-calendar-nav:active {\n transform: scale(var(--viking-state-active-scale));\n }\n .viking-calendar-nav:focus-visible {\n outline: var(--viking-ring-width) solid var(--viking-ring);\n outline-offset: var(--viking-ring-offset);\n }\n .viking-calendar-grid {\n display: grid;\n grid-template-columns: repeat(7, 1fr);\n gap: var(--viking-space-half);\n }\n .viking-calendar-weekday {\n text-align: center;\n font-size: var(--viking-font-size);\n color: var(--viking-text-muted);\n padding: calc(var(--viking-space-1) / 2);\n }\n .viking-calendar-day {\n width: 100%;\n aspect-ratio: 1;\n min-width: var(--viking-control-height-sm);\n min-height: var(--viking-control-height-sm);\n display: inline-flex;\n align-items: center;\n justify-content: center;\n border: 1px solid transparent;\n background: transparent;\n color: var(--viking-text);\n border-radius: var(--viking-radius-sm);\n font-family: var(--viking-font-family);\n font-size: var(--viking-font-size-sm);\n cursor: pointer;\n transition: var(--viking-transition-interactive);\n font-variant-numeric: tabular-nums;\n -webkit-tap-highlight-color: transparent;\n }\n .viking-calendar-day:hover:not(.viking-selected) {\n background: var(--viking-accent-soft);\n }\n .viking-calendar-day:active:not(.viking-selected) {\n transform: scale(var(--viking-state-active-scale));\n }\n .viking-calendar-day:focus-visible {\n outline: var(--viking-ring-width) solid var(--viking-ring);\n outline-offset: var(--viking-ring-offset);\n }\n .viking-outside {\n color: var(--viking-text-muted);\n }\n .viking-today {\n border-color: var(--viking-accent-strong);\n }\n .viking-selected {\n background: var(--viking-accent);\n color: var(--viking-accent-content);\n font-weight: 600;\n }\n `,\n ],\n})\nexport class VikingCalendar extends VikingControl<string | null> {\n readonly value = model<string | null>(null);\n\n protected readonly weekdays = WEEKDAYS;\n protected readonly viewDate = signal(new Date());\n\n protected readonly title = computed(() => {\n const view = this.viewDate();\n return `${MONTHS[view.getMonth()]} ${view.getFullYear()}`;\n });\n\n protected readonly days = computed<CalendarDay[]>(() => {\n const view = this.viewDate();\n const year = view.getFullYear();\n const month = view.getMonth();\n const firstOfMonth = new Date(year, month, 1);\n const start = new Date(year, month, 1 - firstOfMonth.getDay());\n const todayIso = toIso(new Date());\n return Array.from({ length: 42 }, (_, index) => {\n const date = new Date(\n start.getFullYear(),\n start.getMonth(),\n start.getDate() + index,\n );\n const iso = toIso(date);\n return {\n iso,\n day: date.getDate(),\n inMonth: date.getMonth() === month,\n isToday: iso === todayIso,\n };\n });\n });\n\n writeValue(value: string | null): void {\n this.value.set(value);\n if (value) {\n const [year, month] = value.split(\"-\").map(Number);\n this.viewDate.set(new Date(year, month - 1, 1));\n }\n }\n\n protected move = (delta: number): void => {\n this.viewDate.update(\n (view) => new Date(view.getFullYear(), view.getMonth() + delta, 1),\n );\n };\n\n protected pick = (day: CalendarDay): void => {\n this.value.set(day.iso);\n this.onChange(day.iso);\n this.onTouched();\n };\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n input,\n output,\n signal,\n} from \"@angular/core\";\nimport { VikingIcon } from \"../icon/icon\";\nimport { VikingIconName } from \"../../core/icons\";\nimport { VikingTone } from \"../../core/types\";\n\nconst TONE_ICONS: Record<string, VikingIconName> = {\n accent: \"info\",\n secondary: \"info\",\n success: \"check-circle\",\n warning: \"alert-triangle\",\n danger: \"alert-circle\",\n info: \"info\",\n muted: \"info\",\n};\n\n/**\n * viking-callout — highlighted message block.\n */\n@Component({\n selector: \"viking-callout\",\n imports: [VikingIcon],\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n role: \"note\",\n \"[class]\": \"'viking-callout-' + tone()\",\n \"[style.display]\": \"dismissed() ? 'none' : null\",\n },\n template: `\n <viking-icon\n class=\"viking-callout-icon\"\n [name]=\"resolvedIcon()\"\n [size]=\"22\"\n />\n <div class=\"viking-callout-body\">\n @if (heading()) {\n <p class=\"viking-callout-heading\">{{ heading() }}</p>\n }\n <div class=\"viking-callout-text\"><ng-content /></div>\n </div>\n @if (dismissible()) {\n <button\n type=\"button\"\n class=\"viking-callout-close\"\n aria-label=\"Dismiss\"\n (click)=\"dismiss()\"\n >\n <viking-icon name=\"x\" [size]=\"18\" />\n </button>\n }\n `,\n styles: [\n `\n :host {\n display: flex;\n align-items: flex-start;\n gap: var(--viking-space-2);\n padding: var(--viking-space-2);\n border-radius: var(--viking-radius-lg);\n border: 1px solid var(--viking-border);\n border-left-width: 3px;\n background: var(--viking-surface-alt);\n color: var(--viking-text);\n font-family: var(--viking-font-family);\n font-size: var(--viking-font-size-sm);\n box-shadow: var(--viking-shadow-sm);\n animation: viking-fade-in var(--viking-duration)\n var(--viking-ease-default);\n }\n .viking-callout-icon {\n margin-top: 2px;\n color: var(--viking-text-muted);\n }\n :host(.viking-callout-accent) {\n border-color: var(--viking-accent);\n border-left-color: var(--viking-accent);\n background: var(--viking-accent-soft);\n }\n :host(.viking-callout-accent) .viking-callout-icon {\n color: var(--viking-accent);\n }\n :host(.viking-callout-secondary) {\n border-color: color-mix(\n in srgb,\n var(--viking-accent-secondary) 45%,\n transparent\n );\n border-left-color: var(--viking-accent-secondary);\n background: var(--viking-accent-secondary-soft);\n }\n :host(.viking-callout-secondary) .viking-callout-icon {\n color: var(--viking-accent-secondary);\n }\n :host(.viking-callout-info) {\n border-color: color-mix(in srgb, var(--viking-info) 45%, transparent);\n border-left-color: var(--viking-info);\n background: color-mix(\n in srgb,\n var(--viking-info) 10%,\n var(--viking-surface)\n );\n }\n :host(.viking-callout-info) .viking-callout-icon {\n color: var(--viking-info);\n }\n :host(.viking-callout-success) {\n border-color: color-mix(\n in srgb,\n var(--viking-success) 45%,\n transparent\n );\n border-left-color: var(--viking-success);\n background: color-mix(\n in srgb,\n var(--viking-success) 10%,\n var(--viking-surface)\n );\n }\n :host(.viking-callout-success) .viking-callout-icon {\n color: var(--viking-success);\n }\n :host(.viking-callout-warning) {\n border-color: color-mix(\n in srgb,\n var(--viking-warning) 45%,\n transparent\n );\n border-left-color: var(--viking-warning);\n background: color-mix(\n in srgb,\n var(--viking-warning) 12%,\n var(--viking-surface)\n );\n }\n :host(.viking-callout-warning) .viking-callout-icon {\n color: var(--viking-warning);\n }\n :host(.viking-callout-danger) {\n border-color: var(--viking-danger);\n border-left-color: var(--viking-danger);\n background: color-mix(\n in srgb,\n var(--viking-crimson-600) 22%,\n var(--viking-surface)\n );\n color: var(--viking-white);\n }\n :host(.viking-callout-danger) .viking-callout-icon {\n color: var(--viking-crimson-400);\n }\n :host(.viking-callout-danger) .viking-callout-text {\n color: var(--viking-white);\n }\n .viking-callout-body {\n flex: 1;\n min-width: 0;\n }\n .viking-callout-heading {\n margin: 0 0 calc(var(--viking-space-1) / 2);\n font-size: var(--viking-font-size-ui);\n font-weight: 700;\n }\n .viking-callout-text {\n color: var(--viking-text);\n line-height: 1.55;\n }\n .viking-callout-close {\n border: none;\n background: transparent;\n color: var(--viking-text-muted);\n cursor: pointer;\n padding: var(--viking-space-half);\n border-radius: var(--viking-radius);\n display: inline-flex;\n transition: var(--viking-transition-interactive);\n }\n .viking-callout-close:hover {\n color: var(--viking-text);\n background: color-mix(in srgb, currentColor 8%, transparent);\n }\n .viking-callout-close:focus-visible {\n outline: var(--viking-ring-width) solid var(--viking-ring);\n outline-offset: 1px;\n }\n `,\n ],\n})\nexport class VikingCallout {\n readonly tone = input<VikingTone>(\"accent\");\n readonly heading = input<string>(\"\");\n readonly icon = input<VikingIconName | null>(null);\n readonly dismissible = input<boolean>(false);\n\n readonly closed = output<void>();\n\n protected readonly dismissed = signal(false);\n protected readonly resolvedIcon = computed<VikingIconName>(\n () => this.icon() ?? TONE_ICONS[this.tone()] ?? \"info\",\n );\n\n protected dismiss = (): void => {\n this.dismissed.set(true);\n this.closed.emit();\n };\n}\n","import { ChangeDetectionStrategy, Component, input } from \"@angular/core\";\n\n/**\n * viking-skeleton — loading placeholder.\n */\n@Component({\n selector: \"viking-skeleton\",\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n \"aria-hidden\": \"true\",\n \"[class.viking-skeleton-circle]\": \"shape() === 'circle'\",\n \"[style.width]\": \"width()\",\n \"[style.height]\": \"height()\",\n },\n template: ``,\n styles: [\n `\n :host {\n display: block;\n border-radius: var(--viking-radius-sm);\n background: linear-gradient(\n 100deg,\n var(--viking-surface-alt) 38%,\n color-mix(\n in srgb,\n var(--viking-text-muted) 10%,\n var(--viking-surface-alt)\n )\n 50%,\n var(--viking-surface-alt) 62%\n );\n background-size: 200% 100%;\n animation: viking-shimmer 1.6s ease-in-out infinite;\n }\n :host(.viking-skeleton-circle) {\n border-radius: var(--viking-radius-pill);\n }\n @media (prefers-reduced-motion: reduce) {\n :host {\n animation: none;\n background: var(--viking-surface-alt);\n }\n }\n `,\n ],\n})\nexport class VikingSkeleton {\n readonly shape = input<\"line\" | \"rect\" | \"circle\">(\"line\");\n readonly width = input<string>(\"100%\");\n readonly height = input<string>(\"var(--viking-font-size-sm)\");\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n input,\n} from \"@angular/core\";\nimport { VikingSkeleton } from \"../skeleton/skeleton\";\n\n/**\n * viking-card — surface container.\n * Compose with viking-card-header / viking-card-footer for structured layouts.\n */\n@Component({\n selector: \"viking-card\",\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n \"[class.viking-card-interactive]\": \"interactive()\",\n \"[class.viking-card-loading]\": \"loading()\",\n \"[class.viking-card-compact]\": \"compact()\",\n \"[attr.aria-busy]\": \"loading() ? 'true' : null\",\n \"[attr.tabindex]\": \"interactive() ? 0 : null\",\n \"[attr.role]\": \"interactive() ? 'button' : null\",\n \"(keydown.enter)\": \"onActivate($event)\",\n \"(keydown.space)\": \"onActivate($event)\",\n },\n template: `\n @if (loading()) {\n <div class=\"viking-card-skeleton\" aria-hidden=\"true\">\n <viking-skeleton height=\"var(--viking-font-size-lg)\" width=\"45%\" />\n <viking-skeleton height=\"var(--viking-font-size-sm)\" width=\"80%\" />\n <viking-skeleton height=\"var(--viking-font-size-sm)\" width=\"65%\" />\n </div>\n } @else {\n <ng-content />\n }\n `,\n imports: [VikingSkeleton],\n styles: [\n `\n :host {\n display: block;\n background: var(--viking-surface-recipe, var(--viking-surface));\n border: 1px solid var(--viking-border);\n border-radius: var(--viking-radius-lg);\n box-shadow: var(--viking-shadow-sm);\n padding: var(--viking-card-padding, var(--viking-space-3));\n color: var(--viking-text);\n transition: var(--viking-transition-interactive);\n position: relative;\n overflow: hidden;\n min-width: 0;\n }\n :host(.viking-card-headerless) .viking-card-header,\n :host(.viking-card-headerless) viking-card-header {\n display: none;\n }\n :host::before {\n content: \"\";\n position: absolute;\n inset: 0 0 auto;\n height: 1px;\n background: linear-gradient(\n 90deg,\n transparent,\n color-mix(\n in srgb,\n var(--viking-metallic-200)\n var(--viking-surface-hairline-strength, 22%),\n transparent\n ),\n transparent\n );\n pointer-events: none;\n }\n :host(.viking-card-interactive) {\n cursor: pointer;\n }\n :host(.viking-card-interactive):hover {\n border-color: var(--viking-accent-strong);\n box-shadow: var(--viking-shadow-hover);\n transform: translateY(var(--viking-state-hover-lift));\n }\n :host(.viking-card-interactive):active {\n transform: translateY(0) scale(var(--viking-state-active-scale));\n box-shadow: var(--viking-shadow-md);\n }\n :host(.viking-card-interactive):focus-visible {\n outline: var(--viking-ring-width) solid var(--viking-ring);\n outline-offset: var(--viking-ring-offset);\n }\n :host(.viking-card-loading) {\n pointer-events: none;\n }\n :host(.viking-card-compact) {\n padding: var(--viking-card-padding-compact, var(--viking-space-2));\n }\n .viking-card-skeleton {\n display: flex;\n flex-direction: column;\n gap: var(--viking-space-1-5);\n }\n `,\n ],\n})\nexport class VikingCard {\n readonly interactive = input<boolean>(false);\n readonly loading = input<boolean>(false);\n readonly compact = input<boolean>(false);\n\n constructor(private readonly host: ElementRef<HTMLElement>) {}\n\n protected onActivate = (event: Event): void => {\n if (!this.interactive() || this.loading()) {\n return;\n }\n event.preventDefault();\n this.host.nativeElement.click();\n };\n}\n\n/** Header row for viking-card. */\n@Component({\n selector: \"viking-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(--viking-space-2);\n padding-bottom: var(--viking-space-2);\n margin-bottom: var(--viking-space-2);\n border-bottom: 1px solid var(--viking-border-subtle);\n }\n /* Support slotted left meta + right actions uniformly */\n :host ::ng-deep > * {\n display: inline-flex;\n align-items: center;\n }\n\n :host ::ng-deep viking-card-title {\n flex: 1 1 auto;\n min-width: 0;\n }\n `,\n ],\n})\nexport class VikingCardHeader {}\n\n/** Footer row for viking-card. */\n@Component({\n selector: \"viking-card-footer\",\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `<ng-content />`,\n styles: [\n `\n :host {\n display: flex;\n align-items: center;\n gap: var(--viking-space-2);\n padding-top: var(--viking-space-2);\n margin-top: var(--viking-space-2);\n border-top: 1px solid var(--viking-border-subtle);\n }\n `,\n ],\n})\nexport class VikingCardFooter {}\n","import { ChangeDetectionStrategy, Component, input } from \"@angular/core\";\nimport { VikingIcon } from \"../icon/icon\";\nimport {\n VikingIconColorToken,\n VikingIconName,\n VikingIconSizePreset,\n} from \"../../core/icons\";\n\nexport type VikingIconBadgeTone =\n | \"default\"\n | \"success\"\n | \"warning\"\n | \"danger\"\n | \"info\";\n\n/**\n * viking-icon-badge — consistent icon backdrop for empty states, callouts, and metric headers.\n */\n@Component({\n selector: \"viking-icon-badge\",\n imports: [VikingIcon],\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: \"viking-icon-badge\",\n \"[class.viking-icon-badge-success]\": \"tone() === 'success'\",\n \"[class.viking-icon-badge-warning]\": \"tone() === 'warning'\",\n \"[class.viking-icon-badge-danger]\": \"tone() === 'danger'\",\n \"[class.viking-icon-badge-info]\": \"tone() === 'info'\",\n \"[attr.aria-hidden]\": 'decorative() ? \"true\" : null',\n },\n template: `\n <viking-icon\n [name]=\"icon()\"\n [size]=\"size()\"\n [sizePreset]=\"sizePreset()\"\n [color]=\"color()\"\n [variant]=\"variant()\"\n />\n `,\n styles: [\n `\n :host {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n width: var(--viking-icon-badge-size, var(--viking-space-6));\n height: var(--viking-icon-badge-size, var(--viking-space-6));\n padding: var(--viking-icon-badge-padding, var(--viking-space-half));\n box-sizing: border-box;\n border-radius: var(--viking-radius-lg);\n background: var(--viking-accent-soft);\n color: var(--viking-accent-strong);\n box-shadow: var(--viking-shadow-sm);\n }\n\n :host(.viking-icon-badge-success) {\n background: color-mix(in srgb, var(--viking-success) 14%, transparent);\n color: var(--viking-success);\n }\n\n :host(.viking-icon-badge-warning) {\n background: color-mix(in srgb, var(--viking-warning) 14%, transparent);\n color: var(--viking-warning);\n }\n\n :host(.viking-icon-badge-danger) {\n background: color-mix(in srgb, var(--viking-danger) 14%, transparent);\n color: var(--viking-danger);\n }\n\n :host(.viking-icon-badge-info) {\n background: color-mix(in srgb, var(--viking-info) 14%, transparent);\n color: var(--viking-info);\n }\n `,\n ],\n})\nexport class VikingIconBadge {\n readonly icon = input.required<VikingIconName>();\n readonly tone = input<VikingIconBadgeTone>(\"default\");\n readonly size = input<number | undefined>(28);\n readonly sizePreset = input<VikingIconSizePreset | null>(null);\n readonly color = input<VikingIconColorToken | string | undefined>(undefined);\n readonly variant = input<\"outline\" | \"filled\">(\"outline\");\n readonly decorative = input<boolean>(true);\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n input,\n} from \"@angular/core\";\n\n/**\n * viking-heading — consistent heading sizes.\n */\n@Component({\n selector: \"viking-heading\",\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n role: \"heading\",\n \"[attr.aria-level]\": \"ariaLevel()\",\n \"[class]\": \"hostClass()\",\n },\n template: `<ng-content />`,\n styles: [\n `\n :host {\n display: block;\n font-family: var(--viking-font-family);\n font-weight: 600;\n color: var(--viking-text);\n letter-spacing: var(--header-letter-spacing, -0.02em);\n font-size: var(--viking-font-size-ui);\n line-height: 1.25;\n }\n :host(.viking-heading-sm) {\n font-size: var(--viking-font-size-sm);\n }\n :host(.viking-heading-lg) {\n font-size: var(--viking-font-size);\n }\n :host(.viking-heading-xl) {\n font-size: var(--viking-font-size-lg);\n font-weight: 700;\n }\n `,\n ],\n})\nexport class VikingHeading {\n readonly size = input<\"sm\" | \"base\" | \"lg\" | \"xl\">(\"base\");\n readonly level = input<1 | 2 | 3 | 4>(3);\n\n protected readonly ariaLevel = computed(() => this.level());\n protected readonly hostClass = computed(\n () => `viking-heading-${this.size()}`,\n );\n}\n","import { ChangeDetectionStrategy, Component, input } from \"@angular/core\";\nimport { VikingIconBadge, VikingIconBadgeTone } from \"../icon-badge/icon-badge\";\nimport { VikingIconName } from \"../../core/icons\";\nimport { VikingHeading } from \"../typography/heading\";\n\n/**\n * viking-card-title — card header title row with tokenized icon badge + heading.\n * Compose inside viking-card-header for premium, consistent section titles.\n */\n@Component({\n selector: \"viking-card-title\",\n imports: [VikingIconBadge, VikingHeading],\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: { class: \"viking-card-title\" },\n template: `\n <viking-icon-badge [icon]=\"icon()\" [tone]=\"tone()\" [size]=\"iconSize()\" />\n <viking-heading [level]=\"level()\" [size]=\"size()\">\n <ng-content />\n </viking-heading>\n `,\n styles: [\n `\n :host {\n display: flex;\n align-items: center;\n gap: var(--viking-space-1);\n flex: 1 1 auto;\n min-width: 0;\n margin: 0;\n }\n\n :host ::ng-deep viking-heading {\n display: block;\n flex: 1 1 auto;\n min-width: 0;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n margin: 0;\n }\n `,\n ],\n})\nexport class VikingCardTitle {\n readonly icon = input.required<VikingIconName>();\n readonly tone = input<VikingIconBadgeTone>(\"default\");\n readonly level = input<1 | 2 | 3 | 4>(2);\n readonly size = input<\"sm\" | \"base\" | \"lg\" | \"xl\">(\"xl\");\n readonly iconSize = input<number>(20);\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n contentChildren,\n signal,\n viewChild,\n} from \"@angular/core\";\nimport { VikingIcon } from \"../icon/icon\";\n\n/** A single slide inside viking-carousel. */\n@Component({\n selector: \"viking-carousel-slide\",\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: { role: \"group\", \"aria-roledescription\": \"slide\" },\n template: `<ng-content />`,\n styles: [\n `\n :host {\n flex: 0 0 100%;\n scroll-snap-align: start;\n display: block;\n box-sizing: border-box;\n }\n `,\n ],\n})\nexport class VikingCarouselSlide {}\n\n/**\n * viking-carousel — scroll-snap slideshow.\n */\n@Component({\n selector: \"viking-carousel\",\n imports: [VikingIcon],\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: { \"aria-roledescription\": \"carousel\" },\n template: `\n <div\n class=\"viking-carousel-viewport\"\n #viewport\n tabindex=\"0\"\n role=\"group\"\n aria-label=\"Carousel slides\"\n (scroll)=\"onScroll()\"\n >\n <ng-content />\n </div>\n <div class=\"viking-carousel-controls\">\n <button\n type=\"button\"\n class=\"viking-carousel-nav\"\n aria-label=\"Previous slide\"\n [disabled]=\"index() <= 0\"\n (click)=\"goTo(index() - 1)\"\n >\n <viking-icon name=\"chevron-left\" [size]=\"18\" />\n </button>\n <div class=\"viking-carousel-dots\">\n @for (slide of slides(); track $index) {\n <button\n type=\"button\"\n class=\"viking-carousel-dot\"\n [class.viking-active]=\"$index === index()\"\n [attr.aria-label]=\"'Go to slide ' + ($index + 1)\"\n [attr.aria-current]=\"$index === index()\"\n (click)=\"goTo($index)\"\n ></button>\n }\n </div>\n <button\n type=\"button\"\n class=\"viking-carousel-nav\"\n aria-label=\"Next slide\"\n [disabled]=\"index() >= slides().length - 1\"\n (click)=\"goTo(index() + 1)\"\n >\n <viking-icon name=\"chevron-right\" [size]=\"18\" />\n </button>\n </div>\n `,\n styles: [\n `\n :host {\n display: block;\n }\n .viking-carousel-viewport {\n display: flex;\n overflow-x: auto;\n scroll-snap-type: x mandatory;\n scroll-behavior: smooth;\n border-radius: var(--viking-radius);\n border: 1px solid var(--viking-border);\n background: var(--viking-surface);\n scrollbar-width: none;\n }\n .viking-carousel-viewport::-webkit-scrollbar {\n display: none;\n }\n .viking-carousel-viewport:focus-visible {\n outline: var(--viking-ring-width) solid var(--viking-ring);\n outline-offset: var(--viking-ring-offset);\n }\n .viking-carousel-controls {\n display: flex;\n align-items: center;\n justify-content: center;\n gap: var(--viking-space-2);\n margin-top: var(--viking-space-1);\n }\n .viking-carousel-nav {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n min-width: var(--viking-touch-target-comfort);\n min-height: var(--viking-touch-target-comfort);\n border: 1px solid var(--viking-border-strong);\n background: var(--viking-surface);\n color: var(--viking-text);\n border-radius: var(--viking-radius-pill);\n padding: var(--viking-space-1);\n cursor: pointer;\n transition: var(--viking-transition-interactive);\n -webkit-tap-highlight-color: transparent;\n }\n .viking-carousel-nav:hover:not(:disabled) {\n border-color: var(--viking-accent-strong);\n background: var(--viking-accent-soft);\n box-shadow: var(--viking-shadow-sm);\n transform: translateY(var(--viking-state-hover-lift));\n }\n .viking-carousel-nav:active:not(:disabled) {\n transform: translateY(0) scale(var(--viking-state-active-scale));\n }\n .viking-carousel-nav:focus-visible {\n outline: var(--viking-ring-width) solid var(--viking-ring);\n outline-offset: var(--viking-ring-offset);\n }\n .viking-carousel-nav:disabled {\n opacity: 0.45;\n cursor: not-allowed;\n }\n .viking-carousel-dots {\n display: flex;\n gap: var(--viking-space-1);\n }\n .viking-carousel-dot {\n position: relative;\n width: var(--viking-space-1);\n height: var(--viking-space-1);\n border-radius: var(--viking-radius-pill);\n border: 1px solid var(--viking-border-strong);\n background: var(--viking-surface-alt);\n cursor: pointer;\n padding: 0;\n transition: var(--viking-transition-interactive);\n -webkit-tap-highlight-color: transparent;\n }\n .viking-carousel-dot::before {\n content: \"\";\n position: absolute;\n inset: 50%;\n width: var(--viking-touch-target-min);\n height: var(--viking-touch-target-min);\n transform: translate(-50%, -50%);\n }\n .viking-carousel-dot:hover:not(.viking-active) {\n border-color: var(--viking-accent-strong);\n background: var(--viking-accent-soft);\n }\n .viking-carousel-dot.viking-active {\n background: var(--viking-accent);\n border-color: var(--viking-accent);\n box-shadow: 0 0 0 2px var(--viking-accent-soft);\n }\n .viking-carousel-dot:focus-visible {\n outline: var(--viking-ring-width) solid var(--viking-ring);\n outline-offset: var(--viking-ring-offset);\n }\n `,\n ],\n})\nexport class VikingCarousel {\n private readonly viewport =\n viewChild.required<ElementRef<HTMLElement>>(\"viewport\");\n\n protected readonly slides = contentChildren(VikingCarouselSlide);\n protected readonly index = signal(0);\n\n protected goTo = (target: number): void => {\n const clamped = Math.min(this.slides().length - 1, Math.max(0, target));\n const element = this.viewport().nativeElement;\n element.scrollTo({\n left: clamped * element.clientWidth,\n behavior: \"smooth\",\n });\n this.index.set(clamped);\n };\n\n protected onScroll = (): void => {\n const element = this.viewport().nativeElement;\n if (element.clientWidth > 0) {\n this.index.set(Math.round(element.scrollLeft / element.clientWidth));\n }\n };\n}\n","/** Visible index window for chart zoom/pan (inclusive start, exclusive end). */\nexport interface ChartZoomWindow {\n start: number;\n end: number;\n}\n\nexport const fullChartWindow = (count: number): ChartZoomWindow => ({\n start: 0,\n end: Math.max(count, 1),\n});\n\n/** Clamp zoom window to valid bounds with a minimum visible span. */\nexport const clampChartWindow = (\n window: ChartZoomWindow,\n count: number,\n minSpan = 3,\n): ChartZoomWindow => {\n if (count <= 0) {\n return { start: 0, end: 0 };\n }\n const span = Math.max(minSpan, Math.min(count, window.end - window.start));\n let start = Math.max(0, Math.min(window.start, count - span));\n let end = start + span;\n if (end > count) {\n end = count;\n start = Math.max(0, end - span);\n }\n return { start, end };\n};\n\n/** Wheel delta → narrower/wider window centered on cursor fraction (0–1). */\nexport const zoomChartWindow = (\n current: ChartZoomWindow,\n count: number,\n cursorFraction: number,\n deltaY: number,\n minSpan = 3,\n): ChartZoomWindow => {\n if (count <= minSpan) {\n return fullChartWindow(count);\n }\n const span = current.end - current.start;\n const factor = deltaY < 0 ? 0.85 : 1.15;\n const nextSpan = Math.max(\n minSpan,\n Math.min(count, Math.round(span * factor)),\n );\n const anchor = current.start + span * cursorFraction;\n const raw: ChartZoomWindow = {\n start: Math.round(anchor - nextSpan * cursorFraction),\n end: Math.round(anchor - nextSpan * cursorFraction) + nextSpan,\n };\n return clampChartWindow(raw, count, minSpan);\n};\n\n/** Drag delta in data points → pan window. */\nexport const panChartWindow = (\n current: ChartZoomWindow,\n count: number,\n deltaPoints: number,\n minSpan = 3,\n): ChartZoomWindow =>\n clampChartWindow(\n { start: current.start - deltaPoints, end: current.end - deltaPoints },\n count,\n minSpan,\n );\n\n/** Slice series rows and category labels for the active window. */\nexport const sliceChartData = <T>(values: T[], window: ChartZoomWindow): T[] =>\n values.slice(window.start, window.end);\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n effect,\n input,\n signal,\n} from \"@angular/core\";\nimport {\n VikingChartCurve,\n VikingChartKind,\n VikingChartSeries,\n VikingDonutSegment,\n VikingTone,\n} from \"../../core/types\";\nimport {\n ChartZoomWindow,\n clampChartWindow,\n fullChartWindow,\n panChartWindow,\n sliceChartData,\n zoomChartWindow,\n} from \"./chart-zoom\";\n\ninterface ChartPath {\n name: string;\n tone: VikingTone;\n line: string;\n area: string;\n}\n\ninterface ChartPoint {\n x: number;\n y: number;\n tone: VikingTone;\n}\n\ninterface BarRect {\n x: number;\n y: number;\n width: number;\n height: number;\n tone: VikingTone;\n radiusTop: boolean;\n}\n\ninterface DonutSlice {\n label: string;\n tone: VikingTone;\n path: string;\n}\n\ninterface AxisLabel {\n x: number;\n y: number;\n text: string;\n anchor: \"start\" | \"middle\" | \"end\";\n}\n\ninterface TickMark {\n x: number;\n y1: number;\n y2: number;\n}\n\ninterface Gutter {\n top: number;\n right: number;\n bottom: number;\n left: number;\n}\n\nconst TONE_VARS: Record<VikingTone, string> = {\n accent: \"var(--viking-accent)\",\n secondary: \"var(--viking-accent-secondary)\",\n success: \"var(--viking-success)\",\n warning: \"var(--viking-warning)\",\n danger: \"var(--viking-danger)\",\n info: \"var(--viking-info)\",\n muted: \"var(--viking-text-muted)\",\n};\n\nconst WIDTH = 720;\nconst HEIGHT_DEFAULT = 240;\nconst HEIGHT_COMPACT = 200;\nconst HEIGHT_FILL = 400;\nconst HEIGHT_FILL_LINE = 240;\nconst HEIGHT_SPARKLINE = 48;\nconst BAR_WIDTH_MIN = 12;\nconst BAR_WIDTH_MAX = 96;\nconst SINGLE_BAR_WIDTH = 72;\nconst BAR_MIN_VISIBLE_HEIGHT_DEFAULT = 4;\nconst LABEL_MAX_DEFAULT = 10;\nconst LABEL_MAX_FILL = 18;\n\nconst resolveBarWidth = (\n slotWidth: number,\n count: number,\n widthPercent: number,\n): number => {\n if (count <= 1) {\n return SINGLE_BAR_WIDTH;\n }\n return Math.min(\n BAR_WIDTH_MAX,\n Math.max(BAR_WIDTH_MIN, slotWidth * (widthPercent / 100)),\n );\n};\n\nconst resolveBarHeight = (\n value: number,\n normalized: number,\n plotHeight: number,\n minVisible: number,\n): number => {\n if (value === 0) {\n return minVisible;\n }\n return Math.max(normalized * plotHeight, 0);\n};\n\nconst formatTick = (value: number): string => {\n if (value >= 1_000_000) {\n return `${(value / 1_000_000).toFixed(1)}M`;\n }\n if (value >= 10_000) {\n return `${Math.round(value / 1000)}K`;\n }\n if (value >= 1000) {\n return `${(value / 1000).toFixed(1)}K`;\n }\n if (Number.isInteger(value)) {\n return `${value}`;\n }\n return value.toFixed(value < 10 ? 1 : 0);\n};\n\nconst truncateLabel = (label: string, max = 10): string =>\n label.length > max ? `${label.slice(0, max - 1)}…` : label;\n\nconst parseGutter = (\n value: number | string | undefined,\n sparkline: boolean,\n): Gutter => {\n if (sparkline) {\n return { top: 0, right: 0, bottom: 0, left: 0 };\n }\n if (value === undefined || value === null) {\n return { top: 12, right: 20, bottom: 36, left: 48 };\n }\n if (typeof value === \"number\") {\n return { top: value, right: value, bottom: value, left: value };\n }\n const parts = value\n .trim()\n .split(/\\s+/)\n .map((part) => Number(part));\n if (parts.length === 1) {\n return { top: parts[0], right: parts[0], bottom: parts[0], left: parts[0] };\n }\n if (parts.length === 2) {\n return { top: parts[0], right: parts[1], bottom: parts[0], left: parts[1] };\n }\n if (parts.length === 3) {\n return { top: parts[0], right: parts[1], bottom: parts[2], left: parts[1] };\n }\n return { top: parts[0], right: parts[1], bottom: parts[2], left: parts[3] };\n};\n\nconst buildLinearPath = (points: { x: number; y: number }[]): string => {\n if (points.length === 0) {\n return \"\";\n }\n return `M${points.map((point) => `${point.x.toFixed(1)},${point.y.toFixed(1)}`).join(\" L\")}`;\n};\n\nconst buildSmoothPath = (points: { x: number; y: number }[]): string => {\n if (points.length < 3) {\n return buildLinearPath(points);\n }\n let path = `M${points[0].x.toFixed(1)},${points[0].y.toFixed(1)}`;\n for (let index = 0; index < points.length - 1; index += 1) {\n const current = points[index];\n const next = points[index + 1];\n const previous = points[index - 1] ?? current;\n const after = points[index + 2] ?? next;\n const cp1x = current.x + (next.x - previous.x) / 6;\n const cp1y = current.y + (next.y - previous.y) / 6;\n const cp2x = next.x - (after.x - current.x) / 6;\n const cp2y = next.y - (after.y - current.y) / 6;\n path += ` C${cp1x.toFixed(1)},${cp1y.toFixed(1)} ${cp2x.toFixed(1)},${cp2y.toFixed(1)} ${next.x.toFixed(1)},${next.y.toFixed(1)}`;\n }\n return path;\n};\n\n/**\n * viking-chart — zero-dependency native SVG charts styled after Viking UI.\n */\n@Component({\n selector: \"viking-chart\",\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n \"[class.viking-chart-fill-host]\": \"fill()\",\n \"[class.viking-chart-sparkline-host]\": \"kind() === 'sparkline'\",\n },\n template: `\n <figure\n class=\"viking-chart\"\n [class.viking-chart-fill]=\"fill()\"\n [class.viking-chart-compact]=\"compact() && !fill()\"\n [class.viking-chart-sparkline]=\"isSparkline()\"\n [class.viking-chart-has-legend]=\"legendVisible()\"\n [attr.aria-labelledby]=\"label() ? 'viking-chart-label-' + chartId : null\"\n [attr.aria-describedby]=\"\n summary() ? 'viking-chart-summary-' + chartId : null\n \"\n >\n @if (label()) {\n <figcaption class=\"sr-only\" [id]=\"'viking-chart-label-' + chartId\">\n {{ label() }}\n </figcaption>\n }\n @if (summary()) {\n <p class=\"sr-only\" [id]=\"'viking-chart-summary-' + chartId\">\n {{ summary() }}\n </p>\n }\n <div\n class=\"viking-chart-viewport\"\n [class.viking-chart-zoomable]=\"\n zoomable() && !isSparkline() && kind() !== 'donut'\n \"\n (wheel)=\"onWheel($event)\"\n (dblclick)=\"resetZoom()\"\n (pointerdown)=\"onPanStart($event)\"\n (pointermove)=\"onPanMove($event)\"\n (pointerup)=\"onPanEnd()\"\n (pointerleave)=\"onPanEnd()\"\n (pointercancel)=\"onPanEnd()\"\n >\n <svg\n [attr.viewBox]=\"'0 0 ' + width + ' ' + height()\"\n preserveAspectRatio=\"xMidYMid meet\"\n shape-rendering=\"geometricPrecision\"\n role=\"img\"\n [attr.aria-label]=\"label() || 'Chart'\"\n aria-hidden=\"true\"\n >\n @if (kind() === \"donut\") {\n @for (slice of donutSlices(); track slice.label) {\n <path\n class=\"viking-chart-donut-slice\"\n [attr.d]=\"slice.path\"\n [style.fill]=\"toneVar(slice.tone)\"\n />\n }\n @if (donutSlices().length > 0) {\n <circle\n class=\"viking-chart-donut-hole\"\n [attr.cx]=\"width / 2\"\n [attr.cy]=\"plotCy()\"\n [attr.r]=\"donutInnerRadius()\"\n />\n <text\n class=\"viking-chart-donut-total\"\n [attr.x]=\"width / 2\"\n [attr.y]=\"plotCy()\"\n text-anchor=\"middle\"\n dominant-baseline=\"central\"\n >\n {{ donutTotalLabel() }}\n </text>\n }\n } @else {\n <defs>\n <clipPath id=\"viking-plot-clip\">\n <rect\n [attr.x]=\"resolvedGutter().left\"\n [attr.y]=\"plotTop()\"\n [attr.width]=\"\n width - resolvedGutter().left - resolvedGutter().right\n \"\n [attr.height]=\"plotBottom() - plotTop()\"\n />\n </clipPath>\n </defs>\n @if (!isSparkline()) {\n @for (line of gridLines(); track line) {\n <line\n class=\"viking-chart-grid\"\n [attr.x1]=\"resolvedGutter().left\"\n [attr.x2]=\"width - resolvedGutter().right\"\n [attr.y1]=\"line\"\n [attr.y2]=\"line\"\n ></line>\n }\n <line\n class=\"viking-chart-axis-line\"\n [attr.x1]=\"resolvedGutter().left\"\n [attr.x2]=\"width - resolvedGutter().right\"\n [attr.y1]=\"plotBottom()\"\n [attr.y2]=\"plotBottom()\"\n ></line>\n @for (tick of yAxisLabels(); track tick.text + tick.y) {\n <text\n class=\"viking-chart-axis-y\"\n [attr.x]=\"resolvedGutter().left - 10\"\n [attr.y]=\"tick.y\"\n [attr.text-anchor]=\"tick.anchor\"\n dominant-baseline=\"middle\"\n >\n {{ tick.text }}\n </text>\n }\n @for (tick of xAxisLabels(); track tick.text + tick.x) {\n <text\n class=\"viking-chart-axis-x\"\n [attr.x]=\"tick.x\"\n [attr.y]=\"height() - 10\"\n [attr.text-anchor]=\"tick.anchor\"\n >\n {{ tick.text }}\n </text>\n }\n @for (mark of xTickMarks(); track mark.x) {\n <line\n class=\"viking-chart-tick\"\n [attr.x1]=\"mark.x\"\n [attr.x2]=\"mark.x\"\n [attr.y1]=\"mark.y1\"\n [attr.y2]=\"mark.y2\"\n ></line>\n }\n }\n @if (isBarKind()) {\n @for (\n bar of barRects();\n track bar.x + \"-\" + bar.y + \"-\" + bar.tone\n ) {\n <rect\n class=\"viking-chart-bar\"\n [attr.x]=\"bar.x\"\n [attr.y]=\"bar.y\"\n [attr.width]=\"bar.width\"\n [attr.height]=\"bar.height\"\n [style.fill]=\"toneVar(bar.tone)\"\n [attr.rx]=\"bar.radiusTop ? barRadius() : 0\"\n [attr.ry]=\"bar.radiusTop ? barRadius() : 0\"\n />\n }\n } @else {\n <g clip-path=\"url(#viking-plot-clip)\">\n @for (path of paths(); track path.name) {\n @if (renderArea()) {\n <path\n class=\"viking-chart-area\"\n [attr.d]=\"path.area\"\n [style.fill]=\"toneVar(path.tone)\"\n ></path>\n }\n <path\n class=\"viking-chart-line\"\n [attr.d]=\"path.line\"\n [style.stroke]=\"toneVar(path.tone)\"\n ></path>\n }\n @if (renderPoints()) {\n @for (\n point of linePoints();\n track point.x + \"-\" + point.y + \"-\" + point.tone\n ) {\n <circle\n class=\"viking-chart-point\"\n [attr.cx]=\"point.x\"\n [attr.cy]=\"point.y\"\n [attr.r]=\"pointRadius()\"\n [style.fill]=\"toneVar(point.tone)\"\n />\n }\n }\n </g>\n }\n }\n </svg>\n @if (zoomActive()) {\n <button\n type=\"button\"\n class=\"viking-chart-zoom-reset\"\n (click)=\"resetZoom()\"\n >\n Reset zoom\n </button>\n }\n </div>\n @if (legendVisible()) {\n <figcaption class=\"viking-chart-legend\">\n @if (kind() === \"donut\") {\n @for (item of segments(); track item.label) {\n @if (item.value > 0) {\n <span class=\"viking-chart-legend-item\">\n <span\n class=\"viking-chart-swatch\"\n [style.background]=\"toneVar(item.tone ?? 'accent')\"\n ></span>\n {{ item.label }}\n </span>\n }\n }\n } @else {\n @for (item of series(); track item.name) {\n <span class=\"viking-chart-legend-item\">\n <span\n class=\"viking-chart-swatch\"\n [style.background]=\"toneVar(item.tone ?? 'accent')\"\n ></span>\n {{ item.name }}\n </span>\n }\n }\n </figcaption>\n }\n </figure>\n `,\n styles: [\n `\n :host {\n display: block;\n width: 100%;\n }\n :host(.viking-chart-fill-host) {\n display: flex;\n flex-direction: column;\n flex: 1 1 auto;\n min-height: var(\n --viking-chart-fill-min-height,\n clamp(18rem, 36vw, 20rem)\n );\n height: 100%;\n }\n :host(.viking-chart-sparkline-host) {\n display: inline-block;\n width: auto;\n max-width: 100%;\n }\n :host(.viking-chart-wide) {\n display: block;\n width: 100%;\n }\n .viking-chart {\n margin: 0;\n font-family: var(--viking-font-family);\n overflow: hidden;\n width: 100%;\n max-width: 100%;\n container-type: inline-size;\n }\n .viking-chart:not(.viking-chart-fill):not(.viking-chart-sparkline) {\n aspect-ratio: var(--viking-chart-ratio, 3 / 1);\n min-height: var(--viking-chart-min-height, clamp(9.5rem, 22vw, 12rem));\n max-height: var(--viking-chart-max-height, clamp(13rem, 36vw, 17.5rem));\n height: auto;\n }\n .viking-chart-fill {\n flex: 1 1 auto;\n display: flex;\n flex-direction: column;\n align-items: stretch;\n justify-content: center;\n min-height: var(\n --viking-chart-fill-min-height,\n clamp(12rem, 28vw, 16rem)\n );\n max-height: var(\n --viking-chart-fill-max-height,\n clamp(14rem, 32vw, 18rem)\n );\n height: 100%;\n --viking-chart-axis-size: 13px;\n }\n .viking-chart-sparkline {\n width: 5rem;\n aspect-ratio: 3 / 1;\n }\n :host(.viking-chart-wide) .viking-chart-sparkline {\n width: 100%;\n aspect-ratio: auto;\n height: var(--viking-chart-sparkline-height, 2.5rem);\n }\n .viking-chart-viewport {\n position: relative;\n width: 100%;\n flex: 1 1 auto;\n display: flex;\n align-items: center;\n justify-content: center;\n min-height: 0;\n }\n .viking-chart-viewport.viking-chart-zoomable {\n cursor: grab;\n touch-action: none;\n }\n .viking-chart-viewport.viking-chart-zoomable:active {\n cursor: grabbing;\n }\n .viking-chart-zoom-reset {\n position: absolute;\n top: var(--viking-space-half);\n right: var(--viking-space-half);\n z-index: 2;\n padding: var(--viking-space-half) var(--viking-space-1);\n font-size: var(--viking-font-size-sm);\n font-family: var(--viking-font-family);\n color: var(--viking-text-muted);\n background: color-mix(in srgb, var(--viking-surface) 88%, transparent);\n border: 1px solid var(--viking-border);\n border-radius: var(--viking-radius-md);\n cursor: pointer;\n }\n .viking-chart-zoom-reset:focus-visible {\n outline: 2px solid var(--viking-ring);\n outline-offset: 2px;\n }\n svg {\n display: block;\n width: 100%;\n height: auto;\n max-width: 100%;\n background: transparent;\n overflow: visible;\n -webkit-backface-visibility: hidden;\n backface-visibility: hidden;\n }\n .viking-chart:not(.viking-chart-fill):not(.viking-chart-sparkline) svg {\n min-height: var(--viking-chart-min-height, clamp(9.5rem, 22vw, 12rem));\n max-height: var(--viking-chart-max-height, clamp(13rem, 36vw, 17.5rem));\n aspect-ratio: 720 / 240;\n }\n .viking-chart-fill svg {\n width: 100%;\n height: auto;\n min-height: 0;\n max-height: min(\n 100%,\n var(--viking-chart-fill-max-height, clamp(14rem, 32vw, 18rem))\n );\n aspect-ratio: 720 / 400;\n }\n .viking-chart-fill:not(.viking-chart-has-legend) svg {\n aspect-ratio: 720 / 240;\n }\n .viking-chart-sparkline svg {\n min-height: 0;\n border: none;\n }\n .viking-chart-compact svg {\n max-height: min(\n var(--viking-chart-max-height, clamp(13rem, 36vw, 17.5rem)),\n 13.75rem\n );\n }\n .viking-chart-grid {\n stroke: color-mix(in srgb, var(--viking-border) 55%, transparent);\n stroke-width: 1;\n }\n .viking-chart-axis-line,\n .viking-chart-tick {\n stroke: color-mix(in srgb, var(--viking-border) 85%, transparent);\n stroke-width: 1;\n }\n .viking-chart-axis-y,\n .viking-chart-axis-x {\n fill: var(--viking-text-muted);\n font-size: max(11px, var(--viking-chart-axis-size, 12px));\n font-family: var(--viking-font-family);\n }\n .viking-chart-line {\n fill: none;\n stroke-width: 2;\n stroke-linecap: round;\n stroke-linejoin: round;\n vector-effect: non-scaling-stroke;\n }\n .viking-chart-fill .viking-chart-line {\n stroke-width: 2.5;\n }\n .viking-chart-area {\n opacity: 0.32;\n stroke: none;\n }\n .viking-chart-fill .viking-chart-area {\n opacity: 0.38;\n }\n .viking-chart-point {\n stroke: var(--viking-surface);\n stroke-width: 2;\n vector-effect: non-scaling-stroke;\n }\n .viking-chart-bar {\n opacity: 1;\n }\n .viking-chart-donut-slice {\n stroke: var(--viking-surface);\n stroke-width: 2;\n }\n .viking-chart-donut-hole {\n fill: var(--viking-surface);\n }\n .viking-chart-donut-total {\n fill: var(--viking-text);\n font-size: max(12px, min(16px, 3.5cqw));\n font-weight: 700;\n font-family: var(--viking-font-family);\n }\n .viking-chart-fill .viking-chart-donut-total {\n font-size: max(16px, min(24px, 5cqw));\n }\n .viking-chart-legend {\n display: flex;\n flex-wrap: wrap;\n justify-content: center;\n gap: var(--viking-space-2) var(--viking-space-3);\n margin-top: var(--viking-space-2);\n font-size: calc(var(--viking-font-size) * 0.9);\n color: var(--viking-text-muted);\n }\n .viking-chart-fill .viking-chart-legend {\n margin-top: var(--viking-space-3);\n }\n .viking-chart-legend-item {\n display: inline-flex;\n align-items: center;\n gap: calc(var(--viking-space-1) / 1.5);\n line-height: 1.2;\n }\n .viking-chart-swatch {\n width: 10px;\n height: 10px;\n border-radius: 999px;\n display: inline-block;\n flex-shrink: 0;\n }\n .sr-only {\n position: absolute !important;\n width: 1px !important;\n height: 1px !important;\n padding: 0 !important;\n margin: -1px !important;\n overflow: hidden !important;\n clip: rect(0, 0, 0, 0) !important;\n white-space: nowrap !important;\n border: 0 !important;\n }\n `,\n ],\n})\nexport class VikingChart {\n protected readonly chartId = `vc-${Math.random().toString(36).slice(2, 9)}`;\n\n readonly kind = input<VikingChartKind>(\"line\");\n readonly series = input<VikingChartSeries[]>([{ name: \"Series\", data: [] }]);\n readonly categories = input<string[]>([]);\n readonly segments = input<VikingDonutSegment[]>([]);\n readonly label = input<string>(\"\");\n readonly showArea = input<boolean>(false);\n readonly compact = input<boolean>(false);\n readonly fill = input<boolean>(false);\n readonly curve = input<VikingChartCurve>(\"smooth\");\n readonly showPoints = input<boolean>(false);\n readonly pointRadius = input<number>(4);\n readonly barWidth = input<number>(85);\n readonly barRadius = input<number>(6);\n readonly barMinHeight = input<number>(BAR_MIN_VISIBLE_HEIGHT_DEFAULT);\n readonly gutter = input<number | string | undefined>(undefined);\n readonly tickCount = input<number>(4);\n readonly showLegend = input<boolean | undefined>(undefined);\n readonly summary = input<string>(\"\");\n /** Enable wheel zoom + drag pan on line/bar charts (Flux-style interaction). */\n readonly zoomable = input<boolean>(false);\n\n private readonly zoomWindow = signal<ChartZoomWindow | null>(null);\n private panStartX: number | null = null;\n private panStartWindow: ChartZoomWindow | null = null;\n\n constructor() {\n effect(() => {\n const count = this.series()[0]?.data.length ?? 0;\n if (count === 0) {\n this.zoomWindow.set(null);\n }\n });\n }\n\n /** Slice series/categories to the active zoom window. */\n protected readonly dataWindow = computed(() => {\n const count = this.series()[0]?.data.length ?? 0;\n const zoom = this.zoomWindow();\n if (\n !this.zoomable() ||\n !zoom ||\n this.isSparkline() ||\n this.kind() === \"donut\"\n ) {\n return fullChartWindow(count);\n }\n return clampChartWindow(zoom, count);\n });\n\n protected readonly effectiveSeries = computed(() => {\n const window = this.dataWindow();\n return this.series().map((item) => ({\n ...item,\n data: sliceChartData(item.data, window),\n }));\n });\n\n protected readonly effectiveCategories = computed(() =>\n sliceChartData(this.categories(), this.dataWindow()),\n );\n\n protected readonly zoomActive = computed(() => {\n const count = this.series()[0]?.data.length ?? 0;\n const window = this.dataWindow();\n return (\n this.zoomable() && count > 0 && (window.start > 0 || window.end < count)\n );\n });\n\n protected resetZoom = (): void => {\n this.zoomWindow.set(null);\n };\n\n protected onWheel = (event: WheelEvent): void => {\n if (!this.zoomable() || this.isSparkline() || this.kind() === \"donut\") {\n return;\n }\n event.preventDefault();\n const count = this.series()[0]?.data.length ?? 0;\n if (count <= 3) {\n return;\n }\n const current = this.zoomWindow() ?? fullChartWindow(count);\n const rect = (event.currentTarget as HTMLElement).getBoundingClientRect();\n const fraction = Math.min(\n 1,\n Math.max(0, (event.clientX - rect.left) / rect.width),\n );\n this.zoomWindow.set(\n zoomChartWindow(current, count, fraction, event.deltaY),\n );\n };\n\n protected onPanStart = (event: PointerEvent): void => {\n if (\n !this.zoomable() ||\n this.isSparkline() ||\n this.kind() === \"donut\" ||\n event.button !== 0\n ) {\n return;\n }\n const count = this.series()[0]?.data.length ?? 0;\n if (count <= 3) {\n return;\n }\n this.panStartX = event.clientX;\n this.panStartWindow = this.zoomWindow() ?? fullChartWindow(count);\n (event.currentTarget as HTMLElement).setPointerCapture(event.pointerId);\n };\n\n protected onPanMove = (event: PointerEvent): void => {\n if (this.panStartX === null || !this.panStartWindow) {\n return;\n }\n const count = this.series()[0]?.data.length ?? 0;\n const rect = (event.currentTarget as HTMLElement).getBoundingClientRect();\n const span = this.panStartWindow.end - this.panStartWindow.start;\n const deltaPx = event.clientX - this.panStartX;\n const deltaPoints = Math.round((deltaPx / rect.width) * span);\n this.zoomWindow.set(\n panChartWindow(this.panStartWindow, count, deltaPoints),\n );\n };\n\n protected onPanEnd = (): void => {\n this.panStartX = null;\n this.panStartWindow = null;\n };\n\n protected readonly width = WIDTH;\n\n protected readonly isSparkline = computed(() => this.kind() === \"sparkline\");\n\n protected readonly resolvedGutter = computed(() => {\n if (this.gutter() !== undefined && this.gutter() !== null) {\n return parseGutter(this.gutter(), this.isSparkline());\n }\n if (this.fill() && !this.isSparkline()) {\n return { top: 8, right: 8, bottom: 28, left: 36 };\n }\n return parseGutter(undefined, this.isSparkline());\n });\n\n protected readonly legendVisible = computed(() => {\n const explicit = this.showLegend();\n if (explicit !== undefined) {\n return explicit;\n }\n const kind = this.kind();\n if (kind === \"donut\") {\n return this.segments().some((item) => item.value > 0);\n }\n if (kind === \"sparkline\") {\n return false;\n }\n if (kind === \"grouped-bar\" || kind === \"stacked-bar\") {\n return this.series().length > 0;\n }\n return this.series().length > 1;\n });\n\n protected readonly height = computed(() => {\n if (this.isSparkline()) {\n return HEIGHT_SPARKLINE;\n }\n if (this.fill()) {\n if (this.kind() === \"donut\") {\n return WIDTH;\n }\n if (this.isLineKind()) {\n return HEIGHT_FILL_LINE;\n }\n return HEIGHT_FILL;\n }\n return this.compact() ? HEIGHT_COMPACT : HEIGHT_DEFAULT;\n });\n\n protected readonly preserveAspectRatio = computed(() => \"xMidYMid meet\");\n\n protected readonly plotBottom = computed(\n () => this.height() - this.resolvedGutter().bottom,\n );\n protected readonly plotTop = computed(() => this.resolvedGutter().top);\n protected readonly plotCy = computed(() => this.height() / 2);\n\n protected readonly donutInnerRadius = computed(() => {\n const plotH = this.plotBottom() - this.plotTop();\n const plotW =\n WIDTH - this.resolvedGutter().left - this.resolvedGutter().right;\n const outer = Math.min(plotW, plotH) / 2 - 6;\n return outer * 0.58;\n });\n\n protected readonly isBarKind = computed(() => {\n const kind = this.kind();\n return kind === \"bar\" || kind === \"grouped-bar\" || kind === \"stacked-bar\";\n });\n\n protected readonly isLineKind = computed(() => {\n const kind = this.kind();\n return kind === \"line\" || kind === \"area\";\n });\n\n protected readonly renderArea = computed(\n () => this.kind() === \"area\" || this.showArea() || this.isSparkline(),\n );\n\n protected readonly renderPoints = computed(\n () => this.showPoints() && !this.isSparkline() && !this.isBarKind(),\n );\n\n protected toneVar = (tone: VikingTone): string => TONE_VARS[tone];\n\n protected readonly valueRange = computed(() => {\n const kind = this.kind();\n const series = this.effectiveSeries();\n\n if (kind === \"stacked-bar\") {\n const count = series[0]?.data.length ?? 0;\n const sums = Array.from({ length: count }, (_, index) =>\n series.reduce((sum, item) => sum + (item.data[index] ?? 0), 0),\n );\n if (sums.length === 0) {\n return { min: 0, max: 1 };\n }\n const max = Math.max(...sums);\n return { min: 0, max: max || 1 };\n }\n\n const all = series.flatMap((item) => item.data);\n if (all.length === 0) {\n return { min: 0, max: 1 };\n }\n const dataMin = Math.min(...all);\n const dataMax = Math.max(...all);\n\n if (this.isSparkline()) {\n if (dataMax === dataMin) {\n const pad = Math.max(Math.abs(dataMax) * 0.12, 0.5);\n return { min: dataMax - pad, max: dataMax + pad };\n }\n const padding = Math.max((dataMax - dataMin) * 0.12, 0.5);\n return { min: dataMin - padding, max: dataMax + padding };\n }\n\n const min = Math.min(0, ...all);\n const max = Math.max(...all);\n return { min, max: max === min ? max + 1 : max };\n });\n\n protected readonly gridLines = computed(() => {\n const bottom = this.plotBottom();\n const top = this.plotTop();\n const count = this.tickCount();\n const lines: number[] = [];\n for (let index = 0; index <= count; index += 1) {\n lines.push(top + ((bottom - top) * index) / count);\n }\n return lines;\n });\n\n protected readonly yAxisLabels = computed<AxisLabel[]>(() => {\n const { min, max } = this.valueRange();\n const bottom = this.plotBottom();\n const top = this.plotTop();\n const count = this.tickCount();\n const labels: AxisLabel[] = [];\n\n for (let index = 0; index <= count; index += 1) {\n const value = max - ((max - min) * index) / count;\n const y = top + ((bottom - top) * index) / count;\n labels.push({ x: 0, y, text: formatTick(value), anchor: \"end\" });\n }\n\n return labels;\n });\n\n protected readonly xAxisLabels = computed<AxisLabel[]>(() => {\n if (this.kind() === \"donut\" || this.isSparkline()) {\n return [];\n }\n\n const primary = this.effectiveSeries()[0];\n const count = primary?.data.length ?? 0;\n if (count === 0) {\n return [];\n }\n\n const cats = this.effectiveCategories();\n const plotWidth =\n WIDTH - this.resolvedGutter().left - this.resolvedGutter().right;\n const maxLabels = this.fill() ? 8 : 6;\n const labelMax = this.fill() ? LABEL_MAX_FILL : LABEL_MAX_DEFAULT;\n const step = Math.max(1, Math.ceil(count / maxLabels));\n const labels: AxisLabel[] = [];\n\n for (let index = 0; index < count; index += step) {\n const x =\n this.resolvedGutter().left +\n (count === 1\n ? plotWidth / 2\n : (index / Math.max(1, count - 1)) * plotWidth);\n const text = cats[index]\n ? truncateLabel(cats[index], labelMax)\n : `${index + 1}`;\n labels.push({ x, y: this.height(), text, anchor: \"middle\" });\n }\n\n if ((count - 1) % step !== 0 && count > 1) {\n const last = count - 1;\n const x =\n this.resolvedGutter().left +\n (last / Math.max(1, count - 1)) * plotWidth;\n const text = cats[last]\n ? truncateLabel(cats[last], labelMax)\n : `${last + 1}`;\n if (!labels.some((item) => item.text === text)) {\n labels.push({ x, y: this.height(), text, anchor: \"middle\" });\n }\n }\n\n return labels;\n });\n\n protected readonly xTickMarks = computed<TickMark[]>(() => {\n const bottom = this.plotBottom();\n return this.xAxisLabels().map((label) => ({\n x: label.x,\n y1: bottom,\n y2: bottom + 5,\n }));\n });\n\n protected readonly paths = computed<ChartPath[]>(() => {\n const all = this.effectiveSeries().flatMap((item) => item.data);\n if (all.length === 0) {\n return [];\n }\n\n const { min, max } = this.valueRange();\n const range = max - min || 1;\n const bottom = this.plotBottom();\n const top = this.plotTop();\n const plotHeight = bottom - top;\n const plotWidth =\n WIDTH - this.resolvedGutter().left - this.resolvedGutter().right;\n const buildPath =\n this.curve() === \"smooth\" ? buildSmoothPath : buildLinearPath;\n\n return this.effectiveSeries().map((item) => {\n const points = item.data.map((value, index) => {\n const x =\n this.resolvedGutter().left +\n (index / Math.max(1, item.data.length - 1)) * plotWidth;\n const y = bottom - ((value - min) / range) * plotHeight;\n return { x, y };\n });\n const line = buildPath(points);\n const area = `${line} L${WIDTH - this.resolvedGutter().right},${bottom} L${this.resolvedGutter().left},${bottom} Z`;\n return { name: item.name, tone: item.tone ?? \"accent\", line, area };\n });\n });\n\n protected readonly linePoints = computed<ChartPoint[]>(() => {\n const all = this.effectiveSeries().flatMap((item) => item.data);\n if (all.length === 0) {\n return [];\n }\n\n const { min, max } = this.valueRange();\n const range = max - min || 1;\n const bottom = this.plotBottom();\n const top = this.plotTop();\n const plotHeight = bottom - top;\n const plotWidth =\n WIDTH - this.resolvedGutter().left - this.resolvedGutter().right;\n\n return this.effectiveSeries().flatMap((item) =>\n item.data.map((value, index) => {\n const x =\n this.resolvedGutter().left +\n (index / Math.max(1, item.data.length - 1)) * plotWidth;\n const y = bottom - ((value - min) / range) * plotHeight;\n return { x, y, tone: item.tone ?? \"accent\" };\n }),\n );\n });\n\n protected readonly barRects = computed<BarRect[]>(() => {\n const kind = this.kind();\n if (kind === \"stacked-bar\") {\n return this.stackedBarRects();\n }\n if (kind === \"grouped-bar\") {\n return this.groupedBarRects();\n }\n return this.singleBarRects();\n });\n\n private readonly singleBarRects = computed<BarRect[]>(() => {\n const primary = this.effectiveSeries()[0];\n if (!primary?.data.length) {\n return [];\n }\n\n const { min, max } = this.valueRange();\n const range = max - min || 1;\n const bottom = this.plotBottom();\n const top = this.plotTop();\n const plotHeight = bottom - top;\n const plotWidth =\n WIDTH - this.resolvedGutter().left - this.resolvedGutter().right;\n const widthPercent = this.barWidth();\n const slotWidth = plotWidth / primary.data.length;\n const barWidth = resolveBarWidth(\n slotWidth,\n primary.data.length,\n widthPercent,\n );\n\n const minVisible = this.barMinHeight();\n\n return primary.data.map((value, index) => {\n const normalized = (value - min) / range;\n const height = resolveBarHeight(\n value,\n normalized,\n plotHeight,\n minVisible,\n );\n const x =\n this.resolvedGutter().left +\n index * slotWidth +\n (slotWidth - barWidth) / 2;\n const y = bottom - height;\n return {\n x,\n y,\n width: barWidth,\n height,\n tone: primary.tone ?? \"accent\",\n radiusTop: true,\n };\n });\n });\n\n private readonly groupedBarRects = computed<BarRect[]>(() => {\n const series = this.effectiveSeries();\n const count = series[0]?.data.length ?? 0;\n if (!count) {\n return [];\n }\n\n const { min, max } = this.valueRange();\n const range = max - min || 1;\n const bottom = this.plotBottom();\n const top = this.plotTop();\n const plotHeight = bottom - top;\n const plotWidth =\n WIDTH - this.resolvedGutter().left - this.resolvedGutter().right;\n const groupWidth = plotWidth / count;\n const widthPercent = this.barWidth();\n const groupBarWidth = resolveBarWidth(groupWidth, count, widthPercent);\n const barWidth = Math.max(3, groupBarWidth / series.length);\n const rects: BarRect[] = [];\n\n for (let index = 0; index < count; index += 1) {\n const groupStart = this.resolvedGutter().left + index * groupWidth;\n const groupInner = groupBarWidth;\n const groupOffset = (groupWidth - groupInner) / 2;\n\n const minVisible = this.barMinHeight();\n\n series.forEach((item, seriesIndex) => {\n const value = item.data[index] ?? 0;\n const normalized = (value - min) / range;\n const height = resolveBarHeight(\n value,\n normalized,\n plotHeight,\n minVisible,\n );\n const x = groupStart + groupOffset + seriesIndex * barWidth;\n const y = bottom - height;\n rects.push({\n x,\n y,\n width: Math.max(3, barWidth - 2),\n height,\n tone: item.tone ?? \"accent\",\n radiusTop: true,\n });\n });\n }\n\n return rects;\n });\n\n private readonly stackedBarRects = computed<BarRect[]>(() => {\n const series = this.effectiveSeries();\n const count = series[0]?.data.length ?? 0;\n if (!count) {\n return [];\n }\n\n const { max } = this.valueRange();\n const range = max || 1;\n const bottom = this.plotBottom();\n const top = this.plotTop();\n const plotHeight = bottom - top;\n const plotWidth =\n WIDTH - this.resolvedGutter().left - this.resolvedGutter().right;\n const widthPercent = this.barWidth();\n const slotWidth = plotWidth / count;\n const barWidth = resolveBarWidth(slotWidth, count, widthPercent);\n const rects: BarRect[] = [];\n\n for (let index = 0; index < count; index += 1) {\n let cursor = bottom;\n const x =\n this.resolvedGutter().left +\n index * slotWidth +\n (slotWidth - barWidth) / 2;\n\n series.forEach((item, seriesIndex) => {\n const value = item.data[index] ?? 0;\n const height = Math.max(0, (value / range) * plotHeight);\n cursor -= height;\n rects.push({\n x,\n y: cursor,\n width: barWidth,\n height,\n tone: item.tone ?? \"accent\",\n radiusTop: seriesIndex === series.length - 1,\n });\n });\n }\n\n return rects;\n });\n\n protected readonly donutTotalLabel = computed(() => {\n const total = this.segments()\n .filter((item) => item.value > 0)\n .reduce((sum, item) => sum + item.value, 0);\n return formatTick(total);\n });\n\n protected readonly donutSlices = computed<DonutSlice[]>(() => {\n const items = this.segments().filter((item) => item.value > 0);\n const total = items.reduce((sum, item) => sum + item.value, 0);\n if (total <= 0) {\n return [];\n }\n\n const cx = WIDTH / 2;\n const cy = this.plotCy();\n const plotH = this.plotBottom() - this.plotTop();\n const plotW =\n WIDTH - this.resolvedGutter().left - this.resolvedGutter().right;\n const outer = Math.min(plotW, plotH) / 2 - 6;\n const inner = outer * 0.58;\n let cursor = -Math.PI / 2;\n\n return items.map((item) => {\n const angle = (item.value / total) * Math.PI * 2;\n const start = cursor;\n const end = cursor + angle;\n cursor = end;\n\n if (items.length === 1) {\n const path = [\n `M ${cx - outer} ${cy}`,\n `A ${outer} ${outer} 0 1 1 ${cx + outer} ${cy}`,\n `A ${outer} ${outer} 0 1 1 ${cx - outer} ${cy}`,\n `M ${cx - inner} ${cy}`,\n `A ${inner} ${inner} 0 1 0 ${cx + inner} ${cy}`,\n `A ${inner} ${inner} 0 1 0 ${cx - inner} ${cy}`,\n \"Z\",\n ].join(\" \");\n return { label: item.label, tone: item.tone ?? \"accent\", path };\n }\n\n const x1 = cx + outer * Math.cos(start);\n const y1 = cy + outer * Math.sin(start);\n const x2 = cx + outer * Math.cos(end);\n const y2 = cy + outer * Math.sin(end);\n const x3 = cx + inner * Math.cos(end);\n const y3 = cy + inner * Math.sin(end);\n const x4 = cx + inner * Math.cos(start);\n const y4 = cy + inner * Math.sin(start);\n const large = angle > Math.PI ? 1 : 0;\n const path = `M ${x1} ${y1} A ${outer} ${outer} 0 ${large} 1 ${x2} ${y2} L ${x3} ${y3} A ${inner} ${inner} 0 ${large} 0 ${x4} ${y4} Z`;\n return { label: item.label, tone: item.tone ?? \"accent\", path };\n });\n });\n}\n","import { ChangeDetectionStrategy, Component, input } from \"@angular/core\";\nimport { vikingUid } from \"../../core/uid\";\n\n/**\n * viking-field — label / description / error wrapper for any control\n *.\n * The projected control is associated with the label by wrapping.\n */\n@Component({\n selector: \"viking-field\",\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: { \"[class.viking-field-invalid]\": \"!!error()\" },\n template: `\n <!-- The projected control lives inside the label, which associates it implicitly. -->\n <!-- eslint-disable-next-line @angular-eslint/template/label-has-associated-control -->\n <label class=\"viking-field-label-wrap\">\n @if (label()) {\n <span class=\"viking-field-label\" [id]=\"labelId\">\n {{ label() }}\n @if (required()) {\n <span class=\"viking-field-required\" aria-hidden=\"true\">*</span>\n }\n </span>\n }\n <ng-content />\n </label>\n @if (description() && !error()) {\n <p class=\"viking-field-description\" [id]=\"descriptionId\">\n {{ description() }}\n </p>\n }\n @if (error()) {\n <p class=\"viking-field-error\" [id]=\"errorId\" role=\"alert\">\n {{ error() }}\n </p>\n }\n `,\n styles: [\n `\n :host {\n display: block;\n font-family: var(--viking-font-family);\n }\n :host(.viking-field-invalid) {\n animation: viking-shake var(--viking-duration-slow)\n var(--viking-ease-default);\n }\n .viking-field-label-wrap {\n display: flex;\n flex-direction: column;\n gap: var(--viking-space-half);\n }\n .viking-field-label {\n font-size: var(--viking-font-size-sm);\n font-weight: var(--viking-font-weight-semibold);\n color: var(--viking-text);\n letter-spacing: var(--viking-letter-spacing-wide);\n line-height: var(--viking-line-height-tight);\n }\n .viking-field-required {\n color: var(--viking-danger);\n margin-left: 2px;\n }\n .viking-field-description,\n .viking-field-error {\n margin: var(--viking-space-half) 0 0;\n font-size: var(--viking-font-size-sm);\n line-height: var(--viking-line-height-normal);\n }\n .viking-field-description {\n color: var(--viking-text-muted);\n }\n .viking-field-error {\n color: var(--viking-danger-text, var(--viking-danger));\n font-weight: var(--viking-font-weight-semibold);\n display: flex;\n align-items: center;\n gap: var(--viking-space-half);\n }\n .viking-field-error::before {\n content: \"\";\n width: 6px;\n height: 6px;\n border-radius: var(--viking-radius-pill);\n background: var(--viking-danger);\n flex-shrink: 0;\n }\n :host(.viking-field-invalid) ::ng-deep .viking-control {\n border-color: var(--viking-danger);\n box-shadow: 0 0 0 1px\n color-mix(in srgb, var(--viking-danger) 25%, transparent);\n }\n :host ::ng-deep viking-select,\n :host ::ng-deep viking-native-select {\n display: block;\n width: 100%;\n min-width: 0;\n }\n `,\n ],\n})\nexport class VikingField {\n readonly label = input<string>(\"\");\n readonly description = input<string>(\"\");\n readonly error = input<string>(\"\");\n readonly required = input<boolean>(false);\n\n protected readonly descriptionId = vikingUid(\"viking-field-description\");\n protected readonly errorId = vikingUid(\"viking-field-error\");\n protected readonly labelId = vikingUid(\"viking-field-label\");\n}\n","import { ChangeDetectionStrategy, Component, input } from \"@angular/core\";\n\n/**\n * viking-spinner — clinical loading indicator.\n */\n@Component({\n selector: \"viking-spinner\",\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n role: \"status\",\n \"aria-live\": \"polite\",\n \"[attr.aria-label]\": \"label()\",\n },\n template: `\n <svg\n class=\"viking-spinner-svg\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n [attr.width]=\"size()\"\n [attr.height]=\"size()\"\n aria-hidden=\"true\"\n >\n <circle class=\"viking-spinner-track\" cx=\"12\" cy=\"12\" r=\"9\" />\n <circle\n class=\"viking-spinner-arc\"\n cx=\"12\"\n cy=\"12\"\n r=\"9\"\n stroke-linecap=\"round\"\n />\n </svg>\n `,\n styles: [\n `\n :host {\n display: inline-flex;\n color: var(--viking-accent);\n }\n\n .viking-spinner-svg {\n --viking-spinner-stroke: 2;\n shape-rendering: geometricPrecision;\n }\n\n .viking-spinner-track,\n .viking-spinner-arc {\n fill: none;\n stroke-width: var(--viking-spinner-stroke);\n }\n\n .viking-spinner-track {\n stroke: color-mix(in srgb, currentColor 14%, transparent);\n }\n\n .viking-spinner-arc {\n stroke: currentColor;\n stroke-dasharray: 42 84;\n transform-origin: center;\n animation: viking-spin var(--viking-duration-slow)\n var(--viking-ease-default) infinite;\n }\n\n @media (prefers-reduced-motion: reduce) {\n .viking-spinner-arc {\n animation: none;\n stroke-dasharray: 56 84;\n }\n }\n `,\n ],\n})\nexport class VikingSpinner {\n readonly size = input<number>(20);\n readonly label = input<string>(\"Loading\");\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n CUSTOM_ELEMENTS_SCHEMA,\n input,\n model,\n output,\n} from \"@angular/core\";\nimport { VikingControl, provideVikingCva } from \"../core/cva\";\nimport { VikingIcon } from \"../icon/icon\";\nimport { VikingIconName } from \"../../core/icons\";\nimport { VikingSpinner } from \"../spinner/spinner\";\nimport { registerVikingElements } from \"../../web/index\";\nimport type { VikingInputWc } from \"../../web/input/viking-input-wc\";\n\nregisterVikingElements();\n\n/**\n * viking-input — thin Angular wrapper around `viking-input-wc`.\n * ControlValueAccessor-compatible.\n */\n@Component({\n selector: \"viking-input\",\n imports: [VikingIcon, VikingSpinner],\n schemas: [CUSTOM_ELEMENTS_SCHEMA],\n providers: [provideVikingCva(VikingInput)],\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <viking-input-wc\n [attr.type]=\"type()\"\n [attr.placeholder]=\"placeholder()\"\n [attr.value]=\"value()\"\n [attr.disabled]=\"isDisabled() ? '' : null\"\n [attr.loading]=\"loading() ? '' : null\"\n [attr.clearable]=\"clearable() ? '' : null\"\n [attr.autocomplete]=\"autocomplete() || null\"\n [attr.aria-label]=\"label() || placeholder() || 'Text input'\"\n (input)=\"onWcInput($event)\"\n (blur)=\"onTouched()\"\n (viking-cleared)=\"clear()\"\n >\n @if (icon()) {\n <viking-icon\n slot=\"leading\"\n class=\"viking-input-icon\"\n [name]=\"icon()!\"\n [size]=\"20\"\n />\n }\n @if (loading()) {\n <viking-spinner slot=\"trailing\" [size]=\"16\" label=\"Loading input\" />\n } @else if (iconTrailing()) {\n <viking-icon\n slot=\"trailing\"\n class=\"viking-input-icon\"\n [name]=\"iconTrailing()!\"\n [size]=\"20\"\n />\n }\n @if (kbd()) {\n <kbd slot=\"trailing\" class=\"viking-input-kbd\">{{ kbd() }}</kbd>\n }\n </viking-input-wc>\n `,\n styles: [\n `\n :host {\n display: block;\n }\n .viking-input-icon {\n color: var(--viking-text-muted);\n }\n .viking-input-kbd {\n font-family: var(--viking-font-family-mono);\n font-size: var(--viking-font-size-xs);\n color: var(--viking-text-muted);\n background: var(--viking-surface-alt);\n border: 1px solid var(--viking-border);\n border-radius: var(--viking-radius-xs);\n padding: 0 var(--viking-space-half);\n line-height: 1.4;\n }\n `,\n ],\n})\nexport class VikingInput extends VikingControl<string> {\n readonly value = model<string>(\"\");\n readonly type = input<string>(\"text\");\n readonly placeholder = input<string>(\"\");\n readonly label = input<string>(\"\");\n readonly icon = input<VikingIconName | null>(null);\n readonly iconTrailing = input<VikingIconName | null>(null);\n readonly kbd = input<string | null>(null);\n readonly clearable = input<boolean>(false);\n readonly loading = input<boolean>(false);\n readonly disabled = input<boolean>(false);\n readonly autocomplete = input<string>(\"\");\n\n readonly cleared = output<void>();\n\n protected isDisabled = (): boolean => this.disabled() || this.formDisabled();\n\n writeValue(value: string): void {\n this.value.set(value ?? \"\");\n }\n\n protected onWcInput = (event: Event): void => {\n const wc = event.currentTarget as VikingInputWc | null;\n const next = wc?.value ?? this.value();\n this.value.set(next);\n this.onChange(next);\n };\n\n protected clear = (): void => {\n this.value.set(\"\");\n this.onChange(\"\");\n this.cleared.emit();\n };\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n effect,\n input,\n model,\n viewChild,\n} from \"@angular/core\";\nimport { VikingIcon } from \"../icon/icon\";\n\n/**\n * viking-modal — dialog built on the native <dialog> element\n *. Toggle via the `open` model.\n */\n@Component({\n selector: \"viking-modal\",\n imports: [VikingIcon],\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <dialog\n #dialog\n class=\"viking-modal\"\n tabindex=\"-1\"\n [attr.aria-label]=\"heading() || 'Dialog'\"\n (close)=\"open.set(false)\"\n (click)=\"onBackdropClick($event)\"\n (keydown.escape)=\"dismissible() && open.set(false)\"\n >\n <div class=\"viking-modal-surface\">\n <header class=\"viking-modal-header\">\n @if (heading()) {\n <h2 class=\"viking-modal-heading\">{{ heading() }}</h2>\n }\n @if (dismissible()) {\n <button\n type=\"button\"\n class=\"viking-modal-close\"\n aria-label=\"Close dialog\"\n (click)=\"open.set(false)\"\n >\n <viking-icon name=\"x\" [size]=\"20\" />\n </button>\n }\n </header>\n <div class=\"viking-modal-body\"><ng-content /></div>\n <footer class=\"viking-modal-footer\">\n <ng-content select=\"[vikingModalActions]\" />\n </footer>\n </div>\n </dialog>\n `,\n styles: [\n `\n .viking-modal {\n padding: 0;\n border: 1px solid var(--viking-border-strong);\n border-radius: var(--viking-radius-lg);\n background: var(--viking-surface);\n color: var(--viking-text);\n box-shadow: var(--viking-shadow-lg);\n width: min(522px, calc(100vw - var(--viking-space-4)));\n animation: viking-modal-in var(--viking-duration)\n var(--viking-ease-default);\n overflow: hidden;\n }\n .viking-modal::backdrop {\n background: var(--viking-overlay-backdrop);\n backdrop-filter: blur(8px);\n animation: viking-backdrop-in var(--viking-duration-fast)\n var(--viking-ease-default);\n }\n .viking-modal-surface {\n display: flex;\n flex-direction: column;\n padding: var(--viking-space-3);\n gap: var(--viking-space-2);\n font-family: var(--viking-font-family);\n position: relative;\n }\n .viking-modal-surface::before {\n content: \"\";\n position: absolute;\n inset: 0 0 auto;\n height: 1px;\n background: linear-gradient(\n 90deg,\n transparent,\n color-mix(in srgb, var(--viking-metallic-200) 22%, transparent),\n transparent\n );\n pointer-events: none;\n }\n .viking-modal-header {\n display: flex;\n align-items: flex-start;\n justify-content: space-between;\n gap: var(--viking-space-2);\n padding-bottom: var(--viking-space-1);\n border-bottom: 1px solid var(--viking-border-subtle);\n }\n .viking-modal-heading {\n margin: 0;\n font-size: var(--viking-font-size-md);\n font-weight: var(--viking-font-weight-bold);\n letter-spacing: var(--viking-letter-spacing-tight);\n color: var(--viking-text);\n line-height: var(--viking-line-height-tight);\n }\n .viking-modal-close {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: var(--viking-control-height-sm);\n height: var(--viking-control-height-sm);\n border: 1px solid transparent;\n background: transparent;\n color: var(--viking-text-muted);\n cursor: pointer;\n padding: 0;\n border-radius: var(--viking-radius);\n transition: var(--viking-transition-interactive);\n flex-shrink: 0;\n }\n .viking-modal-close:hover {\n color: var(--viking-text);\n background: var(--viking-accent-soft);\n border-color: var(--viking-border-subtle);\n }\n .viking-modal-close:active {\n transform: scale(var(--viking-state-active-scale));\n }\n .viking-modal-close:focus-visible {\n outline: var(--viking-ring-width) solid var(--viking-ring);\n outline-offset: var(--viking-ring-offset);\n }\n .viking-modal-body {\n font-size: var(--viking-font-size);\n line-height: var(--viking-line-height-relaxed);\n color: var(--viking-text-muted);\n animation: viking-fade-in var(--viking-duration)\n var(--viking-ease-default);\n }\n .viking-modal-footer {\n display: flex;\n flex-wrap: wrap;\n justify-content: flex-end;\n align-items: center;\n gap: var(--viking-space-2);\n padding-top: var(--viking-space-2);\n border-top: 1px solid var(--viking-border-subtle);\n }\n .viking-modal-footer:empty {\n display: none;\n }\n /* Projected action wrappers keep buttons in a single slot — spread gap inside */\n :host ::ng-deep .viking-modal-footer [vikingModalActions] {\n display: flex;\n flex-wrap: nowrap;\n justify-content: flex-end;\n align-items: center;\n gap: var(--viking-space-2);\n width: 100%;\n }\n @media (prefers-reduced-motion: reduce) {\n .viking-modal {\n animation: none;\n }\n .viking-modal::backdrop {\n animation: none;\n }\n .viking-modal-body {\n animation: none;\n }\n }\n `,\n ],\n})\nexport class VikingModal {\n private readonly dialogRef =\n viewChild.required<ElementRef<HTMLDialogElement>>(\"dialog\");\n\n readonly open = model<boolean>(false);\n readonly heading = input<string>(\"\");\n readonly dismissible = input<boolean>(true);\n\n constructor(host: ElementRef<HTMLElement>) {\n effect(() => {\n const dialog = this.dialogRef().nativeElement;\n // showModal is unavailable during SSR; the dialog stays closed there.\n if (typeof dialog.showModal !== \"function\") {\n return;\n }\n if (this.open() && host.nativeElement.isConnected && !dialog.open) {\n dialog.showModal();\n } else if (!this.open() && dialog.open) {\n dialog.close();\n }\n });\n }\n\n protected onBackdropClick = (event: MouseEvent): void => {\n if (this.dismissible() && event.target === this.dialogRef().nativeElement) {\n this.open.set(false);\n }\n };\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n input,\n} from \"@angular/core\";\n\n/**\n * viking-text — body text with semantic variants.\n */\n@Component({\n selector: \"viking-text\",\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: { \"[class]\": \"hostClass()\" },\n template: `<ng-content />`,\n styles: [\n `\n :host {\n display: block;\n font-family: var(--viking-font-family);\n font-size: var(--viking-font-size);\n line-height: 1.65;\n color: var(--viking-text);\n }\n :host(.viking-text-inline) {\n display: inline;\n }\n :host(.viking-text-muted) {\n color: var(--viking-text-muted);\n }\n :host(.viking-text-strong) {\n font-weight: 600;\n }\n :host(.viking-text-accent) {\n color: var(--viking-accent);\n font-weight: 500;\n }\n `,\n ],\n})\nexport class VikingText {\n readonly variant = input<\"default\" | \"muted\" | \"strong\" | \"accent\">(\n \"default\",\n );\n readonly inline = input<boolean>(false);\n\n protected readonly hostClass = computed(() => ({\n [`viking-text-${this.variant()}`]: this.variant() !== \"default\",\n \"viking-text-inline\": this.inline(),\n }));\n}\n","import { Injectable, signal } from \"@angular/core\";\n\nexport type VikingDialogKind = \"confirm\" | \"search\" | \"onboarding\";\n\nexport interface VikingConfirmDialogData {\n title?: string;\n message: string;\n type?: \"alert\" | \"confirm\" | \"prompt\";\n confirmText?: string;\n confirmBtnText?: string;\n confirmBtnColor?: \"primary\" | \"warn\" | \"accent\";\n}\n\nexport interface VikingDialogState {\n kind: VikingDialogKind;\n data?: VikingConfirmDialogData & { force?: boolean };\n}\n\n/** Programmatic confirm / prompt / overlay orchestration for Viking-UI modals. */\n@Injectable({ providedIn: \"root\" })\nexport class VikingDialogService {\n readonly active = signal<VikingDialogState | null>(null);\n\n private confirmResolver: ((value: boolean) => void) | null = null;\n private onboardingResolver: ((value: boolean | undefined) => void) | null =\n null;\n\n openConfirm(data: VikingConfirmDialogData): Promise<boolean> {\n this.closeActive(false);\n return new Promise<boolean>((resolve) => {\n this.confirmResolver = resolve;\n this.active.set({ kind: \"confirm\", data });\n });\n }\n\n resolveConfirm(result: boolean): void {\n this.confirmResolver?.(result);\n this.confirmResolver = null;\n this.active.set(null);\n }\n\n openSearch(): void {\n if (this.active()?.kind === \"search\") {\n return;\n }\n this.closeActive(false);\n this.active.set({ kind: \"search\" });\n }\n\n closeSearch(): void {\n if (this.active()?.kind === \"search\") {\n this.active.set(null);\n }\n }\n\n openOnboarding(force = false): Promise<boolean | undefined> {\n this.closeActive(false);\n return new Promise<boolean | undefined>((resolve) => {\n this.onboardingResolver = resolve;\n this.active.set({ kind: \"onboarding\", data: { message: \"\", force } });\n });\n }\n\n resolveOnboarding(result?: boolean): void {\n this.onboardingResolver?.(result);\n this.onboardingResolver = null;\n this.active.set(null);\n }\n\n closeActive(cancelPending = true): void {\n if (cancelPending) {\n this.confirmResolver?.(false);\n this.onboardingResolver?.(undefined);\n }\n this.confirmResolver = null;\n this.onboardingResolver = null;\n this.active.set(null);\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n signal,\n} from \"@angular/core\";\nimport { FormsModule } from \"@angular/forms\";\nimport { VikingButton } from \"../button/button\";\nimport { VikingField } from \"../field/field\";\nimport { VikingIcon } from \"../icon/icon\";\nimport { VikingInput } from \"../input/input\";\nimport { VikingModal } from \"../modal/modal\";\nimport { VikingText } from \"../typography/text\";\nimport type { VikingIconName } from \"../../core/icons\";\nimport { VikingConfirmDialogData, VikingDialogService } from \"./dialog.service\";\n\n/**\n * viking-confirm-dialog — alert / confirm / prompt modal wired to VikingDialogService.\n */\n@Component({\n selector: \"viking-confirm-dialog\",\n imports: [\n FormsModule,\n VikingModal,\n VikingButton,\n VikingField,\n VikingInput,\n VikingText,\n VikingIcon,\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n @if (data(); as dialogData) {\n <viking-modal\n [open]=\"open()\"\n [heading]=\"heading()\"\n (openChange)=\"onOpenChange($event)\"\n >\n <div class=\"viking-confirm-body\">\n <div class=\"viking-confirm-title-row\">\n <viking-icon [name]=\"iconName()\" [size]=\"24\" />\n <viking-text>{{ dialogData.message }}</viking-text>\n </div>\n @if (dialogData.type === \"prompt\" && dialogData.confirmText) {\n <viking-field\n label=\"Verification text\"\n [description]=\"'Type ' + dialogData.confirmText + ' to proceed'\"\n >\n <viking-input\n [ngModel]=\"inputValue()\"\n (ngModelChange)=\"inputValue.set($event)\"\n autocomplete=\"off\"\n (keyup.enter)=\"onConfirm()\"\n />\n </viking-field>\n }\n </div>\n <div vikingModalActions>\n @if (dialogData.type !== \"alert\") {\n <viking-button variant=\"outline\" (pressed)=\"onCancel()\"\n >Cancel</viking-button\n >\n }\n <viking-button\n [variant]=\"\n dialogData.confirmBtnColor === 'warn' ? 'danger' : 'primary'\n \"\n [disabled]=\"!isValid()\"\n [icon]=\"\n dialogData.type === 'alert'\n ? 'check-circle'\n : dialogData.confirmBtnColor === 'warn'\n ? 'trash'\n : 'check'\n \"\n (pressed)=\"onConfirm()\"\n >\n {{\n dialogData.confirmBtnText ||\n (dialogData.type === \"alert\" ? \"OK\" : \"Confirm\")\n }}\n </viking-button>\n </div>\n </viking-modal>\n }\n `,\n styles: [\n `\n .viking-confirm-body {\n display: flex;\n flex-direction: column;\n gap: var(--viking-space-2);\n }\n .viking-confirm-title-row {\n display: flex;\n align-items: center;\n gap: var(--viking-space-2);\n }\n `,\n ],\n})\nexport class VikingConfirmDialog {\n constructor(private readonly vikingDialog: VikingDialogService) {}\n\n protected readonly inputValue = signal<string>(\"\");\n\n protected readonly data = computed(() => {\n const active = this.vikingDialog.active();\n return active?.kind === \"confirm\"\n ? (active.data as VikingConfirmDialogData)\n : null;\n });\n\n protected readonly open = computed(() => this.data() !== null);\n\n protected readonly heading = computed(() => {\n const data = this.data();\n if (!data) return \"\";\n return (\n data.title ??\n (data.type === \"alert\"\n ? \"Notice\"\n : data.type === \"prompt\"\n ? \"Verification Required\"\n : \"Confirm Action\")\n );\n });\n\n protected readonly iconName = computed((): VikingIconName => {\n const data = this.data();\n if (!data) return \"info\";\n if (data.type === \"alert\") return \"info\";\n if (data.confirmBtnColor === \"warn\") return \"alert-triangle\";\n return \"info\";\n });\n\n protected readonly isValid = computed(() => {\n const data = this.data();\n if (!data || data.type !== \"prompt\" || !data.confirmText) {\n return true;\n }\n return this.inputValue() === data.confirmText;\n });\n\n protected onCancel = (): void => {\n this.inputValue.set(\"\");\n this.vikingDialog.resolveConfirm(false);\n };\n\n protected onConfirm = (): void => {\n if (!this.isValid()) return;\n this.inputValue.set(\"\");\n this.vikingDialog.resolveConfirm(true);\n };\n\n protected onOpenChange = (next: boolean): void => {\n if (!next) {\n this.onCancel();\n }\n };\n}\n\nexport type { VikingConfirmDialogData };\n","import { ChangeDetectionStrategy, Component, input } from \"@angular/core\";\n\n/**\n * viking-chart-card-header — shared label / value / trend header for analytics chart cards.\n */\n@Component({\n selector: \"viking-chart-card-header\",\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: { class: \"chart-custom-header\" },\n template: `\n <div class=\"chart-custom-title\">{{ title() }}</div>\n @if (hasData()) {\n <div class=\"chart-custom-value\">{{ value() }}</div>\n @if (trend()) {\n <div class=\"chart-custom-trend\">{{ trend() }}</div>\n }\n } @else {\n <div class=\"chart-custom-value chart-value-muted\">{{ emptyLabel() }}</div>\n }\n `,\n styles: [\n `\n :host {\n display: flex;\n flex-direction: column;\n align-items: flex-start;\n gap: var(--viking-space-half, 4px);\n padding: var(--viking-space-2, 16px) var(--viking-space-3, 24px)\n var(--viking-space-1, 8px);\n width: 100%;\n box-sizing: border-box;\n flex-shrink: 0;\n border-bottom: 1px solid var(--viking-border-subtle);\n margin-bottom: 0;\n }\n\n .chart-custom-title {\n color: var(--viking-text-muted, var(--text-muted));\n font-size: var(--viking-font-size-ui, 14px);\n font-family: var(--viking-font-family);\n letter-spacing: var(--viking-letter-spacing-wide, 0.025em);\n font-weight: var(--viking-font-weight-semibold, 600);\n margin: 0;\n }\n\n .chart-custom-value {\n color: var(--viking-text, var(--text-color));\n font-size: var(--viking-font-size-lg, 20px);\n font-family: var(--viking-font-family);\n font-weight: var(--viking-font-weight-bold, 700);\n line-height: var(--viking-line-height-tight, 1.25);\n margin: 0;\n }\n\n .chart-custom-trend {\n color: var(--color-primary);\n font-size: var(--viking-font-size-sm, 14px);\n font-family: var(--viking-font-family);\n font-weight: var(--viking-font-weight-semibold, 600);\n letter-spacing: 0.02em;\n margin: 0;\n }\n\n .chart-value-muted {\n font-size: 1.125rem !important;\n font-weight: var(--viking-font-weight-semibold, 600) !important;\n color: var(--text-muted) !important;\n letter-spacing: var(--viking-letter-spacing-caps, 0.05em);\n text-transform: uppercase;\n }\n `,\n ],\n})\nexport class VikingChartCardHeader {\n readonly title = input.required<string>();\n readonly value = input<string>(\"\");\n readonly emptyLabel = input<string>(\"Awaiting signal\");\n readonly trend = input<string>(\"\");\n readonly hasData = input<boolean>(false);\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n ViewEncapsulation,\n input,\n} from \"@angular/core\";\nimport { VikingIcon } from \"../icon/icon\";\nimport { VikingIconName } from \"../../core/icons\";\n\n/**\n * viking-icon-heading — icon + title row with shared vertical alignment.\n * Use in bento cards, integration tiles, and docs panels.\n */\n@Component({\n selector: \"viking-icon-heading\",\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n imports: [VikingIcon],\n host: {\n class: \"viking-icon-heading\",\n \"[class.viking-icon-heading--lg]\": 'size() === \"lg\"',\n },\n template: `\n <span class=\"viking-icon-heading__icon\" aria-hidden=\"true\">\n <viking-icon [name]=\"icon()\" [size]=\"24\" color=\"accent\" />\n </span>\n @if (headingLevel() === \"h2\") {\n <h2 class=\"viking-icon-heading__title\"><ng-content /></h2>\n } @else {\n <h3 class=\"viking-icon-heading__title\"><ng-content /></h3>\n }\n `,\n})\nexport class VikingIconHeading {\n readonly icon = input.required<VikingIconName>();\n readonly size = input<\"md\" | \"lg\">(\"md\");\n readonly headingLevel = input<\"h2\" | \"h3\">(\"h3\");\n}\n","import { ChangeDetectionStrategy, Component, input } from \"@angular/core\";\nimport { VikingIconBadge } from \"../icon-badge/icon-badge\";\nimport { VikingIconName } from \"../../core/icons\";\n\nexport type VikingChartEmptyTone = \"default\" | \"secure\";\nexport type VikingChartEmptyLayout = \"fill\" | \"overlay\" | \"compact\" | \"inline\";\n\n/**\n * viking-chart-empty-state — standardized dashed “waiting for data” overlay for chart panels.\n * Fills its parent chart body by default; use layout=\"overlay\" for map/canvas stacks.\n */\n@Component({\n selector: \"viking-chart-empty-state\",\n imports: [VikingIconBadge],\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n role: \"status\",\n class: \"viking-chart-empty-state empty-chart-state\",\n \"[class.is-secure]\": \"tone() === 'secure'\",\n \"[class.compact]\": \"layout() === 'compact'\",\n \"[class.viking-chart-empty-overlay]\": \"layout() === 'overlay'\",\n \"[class.viking-chart-empty-fill]\": \"layout() === 'fill'\",\n \"[class.viking-chart-empty-inline]\": \"layout() === 'inline'\",\n },\n template: `\n <viking-icon-badge\n [icon]=\"icon()\"\n [tone]=\"tone() === 'secure' ? 'success' : 'default'\"\n />\n <h3 class=\"empty-title\">{{ title() }}</h3>\n <p class=\"empty-subtitle\">{{ description() }}</p>\n <div class=\"viking-chart-empty-actions\">\n <ng-content />\n </div>\n `,\n styles: [\n `\n :host {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n text-align: center;\n width: 100%;\n box-sizing: border-box;\n padding: var(--viking-space-4) var(--viking-space-3);\n border-radius: var(--viking-radius-lg);\n background: var(--viking-surface-alt);\n border: 1px dashed var(--viking-border-strong);\n box-shadow: var(--viking-shadow-inner);\n gap: var(--viking-space-2);\n animation: viking-fade-in var(--viking-duration)\n var(--viking-ease-default);\n }\n\n :host(.viking-chart-empty-fill) {\n flex: 1 1 auto;\n min-height: var(\n --viking-chart-empty-min-height,\n var(--viking-chart-fill-min-height, clamp(16rem, 32vw, 17.5rem))\n );\n }\n\n viking-icon-badge {\n margin-bottom: var(--viking-space-2);\n }\n\n .empty-title {\n margin: 0 0 var(--viking-space-1) 0;\n font-size: var(--viking-font-size-md);\n font-weight: var(--viking-font-weight-semibold);\n letter-spacing: var(--viking-letter-spacing-caps);\n text-transform: uppercase;\n color: var(--viking-text);\n line-height: var(--viking-line-height-tight);\n }\n\n :host(.viking-chart-empty-overlay) {\n position: absolute;\n inset: 0;\n z-index: 1;\n min-height: 100%;\n margin: 0;\n background: color-mix(\n in srgb,\n var(--viking-surface-alt) 94%,\n transparent\n );\n }\n\n :host(.compact) {\n min-height: 160px;\n padding: var(--viking-space-3);\n }\n\n :host(.viking-chart-empty-inline) {\n border: none;\n background: transparent;\n box-shadow: none;\n min-height: auto;\n flex: 1 1 auto;\n justify-content: center;\n padding: var(--viking-space-4) var(--viking-space-2);\n }\n\n :host(.is-secure) .viking-icon-badge {\n background: color-mix(in srgb, var(--viking-success) 14%, transparent);\n color: var(--viking-success);\n }\n\n .empty-subtitle {\n margin: 0;\n font-size: var(--viking-font-size);\n color: var(--viking-text-muted);\n line-height: var(--viking-line-height-relaxed);\n max-width: 28rem;\n }\n\n .viking-chart-empty-actions {\n display: flex;\n flex-wrap: wrap;\n align-items: center;\n justify-content: center;\n gap: var(--viking-space-2);\n margin-top: var(--viking-space-2);\n }\n\n .viking-chart-empty-actions:empty {\n display: none;\n }\n\n @media (prefers-reduced-motion: reduce) {\n :host {\n animation: none;\n }\n }\n `,\n ],\n})\nexport class VikingChartEmptyState {\n readonly title = input.required<string>();\n readonly description = input.required<string>();\n readonly icon = input<VikingIconName>(\"globe\");\n readonly tone = input<VikingChartEmptyTone>(\"default\");\n readonly layout = input<VikingChartEmptyLayout>(\"fill\");\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n input,\n} from \"@angular/core\";\n\nexport type VikingChartPanelSize = \"large\" | \"medium\";\nexport type VikingChartPanelBody = \"default\" | \"origin-map\";\n\n/**\n * viking-chart-panel — outlined analytics card shell with consistent header/body rhythm.\n */\n@Component({\n selector: \"viking-chart-panel\",\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: \"status-card-outlined viking-chart-panel\",\n \"[class.viking-chart-panel-large]\": \"size() === 'large'\",\n \"[class.viking-chart-panel-medium]\": \"size() === 'medium'\",\n \"[class.viking-chart-panel-origin-map]\": \"body() === 'origin-map'\",\n },\n template: `\n <ng-content select=\"viking-chart-card-header\" />\n <div [class]=\"bodyClasses()\">\n <ng-content />\n </div>\n `,\n styles: [\n `\n :host {\n display: flex;\n flex-direction: column;\n position: relative;\n overflow: hidden;\n min-width: 0;\n }\n\n :host(.viking-chart-panel-large) {\n min-height: var(--viking-chart-panel-min-height-lg, 30rem);\n }\n\n :host(.viking-chart-panel-medium) {\n min-height: var(--viking-chart-panel-min-height-md, 26rem);\n }\n\n .viking-chart-panel-body {\n flex: 1 1 auto;\n display: flex;\n flex-direction: column;\n position: relative;\n overflow: hidden;\n padding: 0 var(--viking-panel-padding, var(--viking-space-3))\n var(--viking-panel-padding, var(--viking-space-3));\n box-sizing: border-box;\n }\n\n :host(.viking-chart-panel-large) .viking-chart-panel-body {\n --viking-chart-empty-min-height: var(\n --viking-chart-empty-min-height-lg,\n 20rem\n );\n --viking-chart-fill-min-height: var(\n --viking-chart-fill-min-height-lg,\n clamp(20rem, 40vw, 22rem)\n );\n min-height: var(--viking-chart-panel-body-min-height-lg, 25rem);\n }\n\n :host(.viking-chart-panel-medium) .viking-chart-panel-body {\n --viking-chart-empty-min-height: var(\n --viking-chart-empty-min-height,\n clamp(18rem, 36vw, 20rem)\n );\n --viking-chart-fill-min-height: var(\n --viking-chart-fill-min-height,\n clamp(18rem, 36vw, 20rem)\n );\n min-height: var(--viking-chart-panel-body-min-height-md, 22rem);\n }\n\n :host(.viking-chart-panel-medium.viking-chart-panel-origin-map)\n .viking-chart-panel-body,\n :host(.viking-chart-panel-medium)\n .viking-chart-panel-body.origin-map-container {\n --viking-chart-empty-min-height: var(\n --viking-chart-map-min-height,\n 22.5rem\n );\n min-height: var(--viking-chart-map-min-height, 22.5rem);\n }\n\n :host(.viking-chart-panel-origin-map) ::ng-deep .origin-map-canvas {\n flex: 1 1 auto;\n height: var(--viking-chart-map-min-height, 22.5rem);\n min-height: var(--viking-chart-map-min-height, 22.5rem);\n width: 100%;\n display: block;\n border-radius: var(--viking-radius-md, 8px);\n z-index: 0;\n }\n\n :host(.viking-chart-panel-origin-map)\n ::ng-deep\n .origin-map-canvas:not(.viking-map-ready) {\n position: absolute;\n visibility: hidden;\n pointer-events: none;\n }\n\n :host(.viking-chart-panel-origin-map)\n ::ng-deep\n .origin-map-canvas.viking-map-ready {\n position: relative;\n visibility: visible;\n }\n `,\n ],\n})\nexport class VikingChartPanel {\n readonly size = input<VikingChartPanelSize>(\"medium\");\n readonly body = input<VikingChartPanelBody>(\"default\");\n\n protected readonly bodyClasses = computed(() => {\n const sizeClass =\n this.size() === \"large\"\n ? \"chart-container-large\"\n : \"chart-container-medium\";\n const bodyVariant =\n this.body() === \"origin-map\" ? \" origin-map-container\" : \"\";\n return `card-body-clean viking-chart-panel-body ${sizeClass}${bodyVariant}`;\n });\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n input,\n model,\n} from \"@angular/core\";\nimport { VikingControl, provideVikingCva } from \"../core/cva\";\nimport { VikingIcon } from \"../icon/icon\";\n\n/**\n * viking-checkbox — custom checkbox.\n * ControlValueAccessor-compatible.\n */\n@Component({\n selector: \"viking-checkbox\",\n imports: [VikingIcon],\n providers: [provideVikingCva(VikingCheckbox)],\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <label\n class=\"viking-checkbox\"\n [class.viking-disabled]=\"disabled() || formDisabled()\"\n >\n <span\n class=\"viking-checkbox-box\"\n [class.viking-checked]=\"checked() || indeterminate()\"\n >\n <input\n type=\"checkbox\"\n [checked]=\"checked()\"\n [indeterminate]=\"indeterminate()\"\n [disabled]=\"disabled() || formDisabled()\"\n (change)=\"toggle($event)\"\n (blur)=\"onTouched()\"\n />\n @if (indeterminate()) {\n <viking-icon name=\"minus\" [size]=\"14\" />\n } @else if (checked()) {\n <viking-icon name=\"check\" [size]=\"14\" />\n }\n </span>\n <span class=\"viking-checkbox-content\">\n <span class=\"viking-checkbox-label\"><ng-content /></span>\n @if (description()) {\n <span class=\"viking-checkbox-description\">{{ description() }}</span>\n }\n </span>\n </label>\n `,\n styles: [\n `\n :host {\n display: block;\n font-family: var(--viking-font-family);\n }\n .viking-checkbox {\n display: inline-flex;\n align-items: flex-start;\n gap: var(--viking-space-1);\n cursor: pointer;\n }\n .viking-disabled {\n opacity: var(--viking-state-disabled-opacity);\n cursor: not-allowed;\n }\n .viking-checkbox-box {\n position: relative;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: var(--viking-space-2);\n height: var(--viking-space-2);\n margin-top: 2px;\n border: 1px solid var(--viking-border-strong);\n border-radius: var(--viking-radius-xs);\n background: var(--viking-surface);\n color: var(--viking-accent-content);\n transition: var(--viking-transition-interactive);\n flex-shrink: 0;\n box-shadow: var(--viking-shadow-xs);\n }\n /* The native input fills the visual box so clicks and focus land on it. */\n .viking-checkbox-box input {\n position: absolute;\n inset: 0;\n width: 100%;\n height: 100%;\n margin: 0;\n opacity: 0;\n cursor: pointer;\n }\n .viking-checkbox:hover:not(.viking-disabled) .viking-checkbox-box {\n border-color: var(--viking-accent-strong);\n }\n .viking-checkbox-box.viking-checked {\n background: var(--viking-accent);\n border-color: color-mix(\n in srgb,\n var(--viking-accent) 80%,\n var(--viking-black)\n );\n box-shadow: var(--viking-shadow-sm);\n }\n .viking-checkbox-box:has(input:focus-visible) {\n outline: var(--viking-ring-width) solid var(--viking-ring);\n outline-offset: var(--viking-ring-offset);\n }\n .viking-checkbox-content {\n display: flex;\n flex-direction: column;\n }\n .viking-checkbox-label {\n font-size: var(--viking-font-size);\n color: var(--viking-text);\n line-height: 1.45;\n }\n .viking-checkbox-description {\n font-size: var(--viking-font-size);\n color: var(--viking-text-muted);\n }\n `,\n ],\n})\nexport class VikingCheckbox extends VikingControl<boolean> {\n readonly checked = model<boolean>(false);\n readonly indeterminate = input<boolean>(false);\n readonly disabled = input<boolean>(false);\n readonly description = input<string>(\"\");\n\n writeValue(value: boolean): void {\n this.checked.set(!!value);\n }\n\n protected toggle = (event: Event): void => {\n const next = (event.target as HTMLInputElement).checked;\n this.checked.set(next);\n this.onChange(next);\n };\n}\n","/** Fixed series palette — keep in sync with viking-tokens.json and THEME.md §8.4 */\nexport const VIKING_SERIES_PRESETS = [\n \"var(--viking-electric-500)\",\n \"var(--viking-crimson-600)\",\n \"var(--viking-green-500)\",\n \"var(--viking-gold-500)\",\n \"var(--viking-crimson-500)\",\n \"var(--viking-blue-500)\",\n \"var(--viking-charcoal-700)\",\n \"var(--viking-metallic-500)\",\n] as const;\n\nexport const VIKING_SERIES_DEFAULT = VIKING_SERIES_PRESETS[0];\n\nexport type VikingSeriesPreset = (typeof VIKING_SERIES_PRESETS)[number];\n","import {\n ChangeDetectionStrategy,\n Component,\n input,\n model,\n} from \"@angular/core\";\nimport { VikingControl, provideVikingCva } from \"../core/cva\";\nimport { VikingIcon } from \"../icon/icon\";\nimport {\n VIKING_SERIES_DEFAULT,\n VIKING_SERIES_PRESETS,\n} from \"../../tokens/series-presets\";\n\n/**\n * viking-color-picker — swatch presets + custom color input\n *. ControlValueAccessor-compatible.\n * Default presets are the THEME.md palette.\n */\n@Component({\n selector: \"viking-color-picker\",\n imports: [VikingIcon],\n providers: [provideVikingCva(VikingColorPicker)],\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <div\n class=\"viking-color-picker\"\n role=\"group\"\n [attr.aria-label]=\"label() || 'Color picker'\"\n >\n @for (preset of presets(); track preset) {\n <button\n type=\"button\"\n class=\"viking-color-swatch\"\n [class.viking-selected]=\"preset === value()\"\n [style.background]=\"preset\"\n [attr.aria-label]=\"'Color ' + preset\"\n [attr.aria-pressed]=\"preset === value()\"\n (click)=\"pick(preset)\"\n >\n @if (preset === value()) {\n <viking-icon name=\"check\" [size]=\"16\" />\n }\n </button>\n }\n <label class=\"viking-color-custom\" [style.background]=\"value()\">\n <input\n type=\"color\"\n [value]=\"value()\"\n [disabled]=\"disabled() || formDisabled()\"\n aria-label=\"Custom color\"\n (input)=\"onInput($event)\"\n />\n <viking-icon name=\"pencil\" [size]=\"16\" />\n </label>\n <code class=\"viking-color-value\">{{ value() }}</code>\n </div>\n `,\n styles: [\n `\n .viking-color-picker {\n display: flex;\n align-items: center;\n flex-wrap: wrap;\n gap: var(--viking-space-1);\n font-family: var(--viking-font-family);\n }\n .viking-color-swatch,\n .viking-color-custom {\n position: relative;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: var(--viking-space-4);\n height: var(--viking-space-4);\n border: 1px solid var(--viking-border-strong);\n border-radius: var(--viking-radius-sm);\n cursor: pointer;\n color: var(--viking-accent-content);\n transition: var(--viking-transition-interactive);\n padding: 0;\n box-shadow: var(--viking-shadow-xs);\n }\n .viking-color-swatch:hover,\n .viking-color-custom:hover {\n transform: scale(1.08);\n border-color: var(--viking-accent-strong);\n box-shadow: var(--viking-shadow-sm);\n z-index: 1;\n }\n .viking-selected {\n border-color: var(--viking-text);\n box-shadow:\n var(--viking-shadow-sm),\n 0 0 0 2px color-mix(in srgb, var(--viking-accent) 35%, transparent),\n inset 0 1px 0 rgba(255, 255, 255, 0.12);\n transform: scale(1.04);\n }\n .viking-color-swatch:focus-visible,\n .viking-color-custom:focus-within {\n outline: var(--viking-ring-width) solid var(--viking-ring);\n outline-offset: var(--viking-ring-offset);\n }\n /* The native input fills the swatch so clicks and focus land on it. */\n .viking-color-custom input {\n position: absolute;\n inset: 0;\n width: 100%;\n height: 100%;\n margin: 0;\n opacity: 0;\n cursor: pointer;\n }\n .viking-color-value {\n font-family: var(--viking-font-family-mono);\n font-size: var(--viking-font-size-sm);\n color: var(--viking-text-muted);\n background: var(--viking-surface-alt);\n border: 1px solid var(--viking-border-subtle);\n border-radius: var(--viking-radius-xs);\n padding: var(--viking-space-half) var(--viking-space-1);\n font-variant-numeric: tabular-nums;\n letter-spacing: 0.02em;\n text-transform: uppercase;\n }\n `,\n ],\n})\nexport class VikingColorPicker extends VikingControl<string> {\n readonly value = model<string>(VIKING_SERIES_DEFAULT);\n readonly label = input<string>(\"\");\n readonly disabled = input<boolean>(false);\n /** Preset swatches — THEME.md Series color palette (premium charcoal / teal / crimson). */\n readonly presets = input<string[]>([...VIKING_SERIES_PRESETS]);\n\n writeValue(value: string): void {\n this.value.set(value || VIKING_SERIES_DEFAULT);\n }\n\n protected pick = (color: string): void => {\n this.value.set(color);\n this.onChange(color);\n this.onTouched();\n };\n\n protected onInput = (event: Event): void => {\n this.pick((event.target as HTMLInputElement).value);\n };\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n computed,\n effect,\n input,\n model,\n output,\n signal,\n viewChild,\n} from \"@angular/core\";\nimport { VikingIcon } from \"../icon/icon\";\nimport { VikingCommandItem } from \"../../core/types\";\n\n/**\n * viking-command — command palette.\n * Toggle with the `open` model; emits `executed` when an item is chosen.\n */\n@Component({\n selector: \"viking-command\",\n imports: [VikingIcon],\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: { \"(keydown.escape)\": \"open.set(false)\" },\n template: `\n @if (open()) {\n <button\n type=\"button\"\n class=\"viking-command-backdrop\"\n aria-label=\"Close command palette\"\n (click)=\"open.set(false)\"\n ></button>\n <div class=\"viking-command\" role=\"dialog\" aria-label=\"Command palette\">\n <div class=\"viking-command-search\">\n <viking-icon name=\"search\" [size]=\"20\" />\n <input\n #queryInput\n type=\"text\"\n [placeholder]=\"placeholder()\"\n [value]=\"query()\"\n aria-label=\"Search commands\"\n (input)=\"onQuery($event)\"\n (keydown)=\"onKeydown($event)\"\n />\n <kbd>esc</kbd>\n </div>\n <div class=\"viking-command-list\" role=\"listbox\">\n @for (group of groups(); track group.name) {\n <p class=\"viking-command-group\">{{ group.name }}</p>\n @for (item of group.items; track item.id) {\n <button\n type=\"button\"\n role=\"option\"\n class=\"viking-command-item\"\n [class.viking-active]=\"item.id === activeId()\"\n [attr.aria-selected]=\"item.id === activeId()\"\n (click)=\"run(item)\"\n (mouseenter)=\"activeId.set(item.id)\"\n >\n @if (item.icon) {\n <viking-icon [name]=\"item.icon\" [size]=\"18\" />\n }\n <span class=\"viking-command-label\">{{ item.label }}</span>\n @if (item.kbd) {\n <kbd>{{ item.kbd }}</kbd>\n }\n </button>\n }\n }\n @if (filtered().length === 0) {\n <p class=\"viking-command-empty\">No results for “{{ query() }}”</p>\n }\n </div>\n </div>\n }\n `,\n styles: [\n `\n .viking-command-backdrop {\n position: fixed;\n inset: 0;\n border: none;\n background: var(--viking-overlay-backdrop, rgba(49, 57, 60, 0.55));\n backdrop-filter: blur(4px);\n z-index: var(--viking-z-overlay);\n cursor: default;\n }\n .viking-command {\n position: fixed;\n top: 12vh;\n left: 50%;\n transform: translateX(-50%);\n width: min(576px, calc(100vw - var(--viking-space-4)));\n background: var(--viking-surface);\n border: 1px solid var(--viking-border-strong);\n border-radius: var(--viking-radius);\n box-shadow: var(--viking-shadow-md);\n z-index: calc(var(--viking-z-overlay) + 1);\n font-family: var(--viking-font-family);\n overflow: hidden;\n }\n .viking-command-search {\n display: flex;\n align-items: center;\n gap: var(--viking-space-1);\n padding: var(--viking-space-2);\n border-bottom: 1px solid var(--viking-border);\n color: var(--viking-text-muted);\n transition: var(--viking-transition-colors);\n }\n .viking-command-search:focus-within {\n border-bottom-color: var(--viking-accent);\n box-shadow: inset 0 -2px 0 var(--viking-accent-soft);\n }\n .viking-command-search input {\n flex: 1;\n min-width: 0;\n border: none;\n outline: none;\n background: transparent;\n color: var(--viking-text);\n font-family: var(--viking-font-family);\n font-size: var(--viking-font-size);\n }\n kbd {\n font-family: var(--viking-font-family);\n font-size: var(--viking-font-size);\n color: var(--viking-text-muted);\n background: var(--viking-surface-alt);\n border: 1px solid var(--viking-border);\n border-radius: calc(var(--viking-radius) / 2);\n padding: 0 var(--viking-space-1);\n line-height: 1.4;\n }\n .viking-command-list {\n max-height: 342px;\n overflow: auto;\n padding: var(--viking-space-1);\n }\n .viking-command-group {\n margin: var(--viking-space-1) var(--viking-space-1) 3px;\n font-size: var(--viking-font-size);\n font-weight: 600;\n text-transform: uppercase;\n letter-spacing: 0.06em;\n color: var(--viking-text-muted);\n }\n .viking-command-item {\n display: flex;\n align-items: center;\n gap: var(--viking-space-1);\n width: 100%;\n min-height: var(--viking-control-height-sm);\n border: none;\n background: transparent;\n color: var(--viking-text);\n font-family: var(--viking-font-family);\n font-size: var(--viking-font-size);\n padding: var(--viking-space-1) var(--viking-space-1-5);\n border-radius: var(--viking-radius-sm);\n cursor: pointer;\n text-align: left;\n transition: var(--viking-transition-interactive);\n }\n .viking-command-item:hover:not(.viking-active),\n .viking-command-item.viking-active {\n background: var(--viking-accent-soft);\n }\n .viking-command-item:focus-visible {\n outline: var(--viking-ring-width) solid var(--viking-ring);\n outline-offset: var(--viking-ring-offset);\n }\n .viking-command-item:active {\n transform: scale(var(--viking-state-active-scale));\n }\n .viking-command-label {\n flex: 1;\n }\n .viking-command-empty {\n margin: 0;\n padding: var(--viking-space-2);\n color: var(--viking-text-muted);\n font-size: var(--viking-font-size);\n text-align: center;\n }\n `,\n ],\n})\nexport class VikingCommand {\n readonly items = input.required<VikingCommandItem[]>();\n readonly open = model<boolean>(false);\n readonly placeholder = input<string>(\"Type a command or search…\");\n\n readonly executed = output<VikingCommandItem>();\n\n private readonly queryInput =\n viewChild<ElementRef<HTMLInputElement>>(\"queryInput\");\n\n protected readonly query = signal(\"\");\n protected readonly activeId = signal<string>(\"\");\n\n constructor() {\n effect(() => {\n if (this.open()) {\n this.query.set(\"\");\n this.activeId.set(this.items()[0]?.id ?? \"\");\n queueMicrotask(() => this.queryInput()?.nativeElement.focus());\n }\n });\n }\n\n protected readonly filtered = computed(() => {\n const query = this.query().toLowerCase().trim();\n if (!query) {\n return this.items();\n }\n return this.items().filter((item) =>\n item.label.toLowerCase().includes(query),\n );\n });\n\n protected readonly groups = computed(() => {\n const map = new Map<string, VikingCommandItem[]>();\n for (const item of this.filtered()) {\n const group = item.group ?? \"Commands\";\n map.set(group, [...(map.get(group) ?? []), item]);\n }\n return [...map.entries()].map(([name, items]) => ({ name, items }));\n });\n\n protected onQuery = (event: Event): void => {\n this.query.set((event.target as HTMLInputElement).value);\n this.activeId.set(this.filtered()[0]?.id ?? \"\");\n };\n\n protected run = (item: VikingCommandItem): void => {\n this.executed.emit(item);\n this.open.set(false);\n this.query.set(\"\");\n };\n\n protected onKeydown = (event: KeyboardEvent): void => {\n const items = this.filtered();\n const index = items.findIndex((item) => item.id === this.activeId());\n if (event.key === \"ArrowDown\") {\n event.preventDefault();\n this.activeId.set(items[Math.min(items.length - 1, index + 1)]?.id ?? \"\");\n } else if (event.key === \"ArrowUp\") {\n event.preventDefault();\n this.activeId.set(items[Math.max(0, index - 1)]?.id ?? \"\");\n } else if (event.key === \"Enter\") {\n const active =\n items.find((item) => item.id === this.activeId()) ?? items[0];\n if (active) {\n event.preventDefault();\n this.run(active);\n }\n }\n };\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n input,\n model,\n output,\n} from \"@angular/core\";\nimport { VikingIcon } from \"../icon/icon\";\n\n/**\n * viking-composer — message composer with attachments and send action\n *.\n */\n@Component({\n selector: \"viking-composer\",\n imports: [VikingIcon],\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <div class=\"viking-composer\">\n <textarea\n rows=\"1\"\n [placeholder]=\"placeholder()\"\n [value]=\"value()\"\n [disabled]=\"disabled()\"\n [attr.aria-label]=\"placeholder() || 'Message'\"\n (input)=\"onInput($event)\"\n (keydown)=\"onKeydown($event)\"\n ></textarea>\n <div class=\"viking-composer-actions\">\n <div class=\"viking-composer-tools\">\n @if (allowAttachments()) {\n <button\n type=\"button\"\n class=\"viking-composer-tool\"\n aria-label=\"Attach file\"\n (click)=\"attach.emit()\"\n >\n <viking-icon name=\"paperclip\" [size]=\"20\" />\n </button>\n }\n <ng-content />\n </div>\n <button\n type=\"button\"\n class=\"viking-composer-send\"\n aria-label=\"Send message\"\n [disabled]=\"disabled() || !value().trim()\"\n (click)=\"send()\"\n >\n <viking-icon name=\"send\" [size]=\"18\" />\n <span>Send</span>\n </button>\n </div>\n </div>\n `,\n styles: [\n `\n .viking-composer {\n display: flex;\n flex-direction: column;\n background: var(--viking-surface);\n border: 1px solid var(--viking-border-strong);\n border-radius: var(--viking-radius);\n box-shadow: var(--viking-shadow-sm);\n transition: var(--viking-transition);\n font-family: var(--viking-font-family);\n }\n .viking-composer:focus-within {\n outline: var(--viking-ring-width) solid var(--viking-ring);\n outline-offset: var(--viking-ring-offset);\n }\n textarea {\n border: none;\n outline: none;\n resize: none;\n background: transparent;\n color: var(--viking-text);\n font-family: var(--viking-font-family);\n font-size: var(--viking-font-size);\n line-height: 1.55;\n padding: var(--viking-space-2);\n min-height: var(--viking-space-5);\n }\n textarea::placeholder {\n color: var(--viking-text-muted);\n }\n .viking-composer-actions {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: var(--viking-space-1);\n padding: var(--viking-space-1) var(--viking-space-2)\n var(--viking-space-1) var(--viking-space-1);\n border-top: 1px solid var(--viking-border);\n }\n .viking-composer-tools {\n display: flex;\n align-items: center;\n gap: calc(var(--viking-space-1) / 2);\n }\n .viking-composer-tool {\n display: inline-flex;\n border: none;\n background: transparent;\n color: var(--viking-text-muted);\n cursor: pointer;\n padding: var(--viking-space-1);\n border-radius: calc(var(--viking-radius) / 1.5);\n transition: var(--viking-transition);\n }\n .viking-composer-tool:hover {\n color: var(--viking-text);\n background: var(--viking-accent-soft);\n }\n .viking-composer-tool:focus-visible {\n outline: var(--viking-ring-width) solid var(--viking-ring);\n outline-offset: 1px;\n }\n .viking-composer-send {\n display: inline-flex;\n align-items: center;\n gap: calc(var(--viking-space-1) / 1.5);\n border: 1px solid var(--viking-accent);\n background: var(--viking-accent);\n color: var(--viking-accent-content);\n font-family: var(--viking-font-family);\n /* >= 18.67px bold qualifies as WCAG large text (3:1 on accent fill). */\n font-size: calc(var(--viking-font-size) * 1.05);\n font-weight: 700;\n padding: calc(var(--viking-space-1) / 1.5) var(--viking-space-2);\n border-radius: var(--viking-radius);\n cursor: pointer;\n transition: var(--viking-transition);\n }\n .viking-composer-send:hover:not(:disabled) {\n background: var(--viking-accent-strong);\n border-color: var(--viking-accent-strong);\n }\n .viking-composer-send:focus-visible {\n outline: var(--viking-ring-width) solid var(--viking-ring);\n outline-offset: var(--viking-ring-offset);\n }\n .viking-composer-send:disabled {\n opacity: var(--viking-state-disabled-opacity);\n cursor: not-allowed;\n }\n `,\n ],\n})\nexport class VikingComposer {\n readonly value = model<string>(\"\");\n readonly placeholder = input<string>(\"Write a message…\");\n readonly disabled = input<boolean>(false);\n readonly allowAttachments = input<boolean>(true);\n\n readonly sent = output<string>();\n readonly attach = output<void>();\n\n protected onInput = (event: Event): void => {\n const el = event.target as HTMLTextAreaElement;\n this.value.set(el.value);\n el.style.height = \"auto\";\n el.style.height = `${el.scrollHeight}px`;\n };\n\n protected onKeydown = (event: KeyboardEvent): void => {\n if (event.key === \"Enter\" && (event.metaKey || event.ctrlKey)) {\n event.preventDefault();\n this.send();\n }\n };\n\n protected send = (): void => {\n const message = this.value().trim();\n if (message) {\n this.sent.emit(message);\n this.value.set(\"\");\n }\n };\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n signal,\n} from \"@angular/core\";\n\n/**\n * viking-context — right-click context menu.\n * Wrap the target content and project menu content with the `vikingMenu` attribute\n * (typically viking-menu-item elements).\n */\n@Component({\n selector: \"viking-context\",\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n \"(contextmenu)\": \"onContextMenu($event)\",\n \"(document:click)\": \"closed()\",\n \"(keydown.escape)\": \"closed()\",\n },\n template: `\n <ng-content />\n @if (open()) {\n <div\n class=\"viking-context-menu\"\n role=\"menu\"\n [style.left.px]=\"position().x\"\n [style.top.px]=\"position().y\"\n >\n <ng-content select=\"[vikingMenu]\" />\n </div>\n }\n `,\n styles: [\n `\n :host {\n display: block;\n position: relative;\n }\n .viking-context-menu {\n position: absolute;\n min-width: 198px;\n padding: var(--viking-space-1);\n background: var(--viking-surface);\n border: 1px solid var(--viking-border-strong);\n border-radius: var(--viking-radius);\n box-shadow: var(--viking-shadow-md);\n z-index: var(--viking-z-overlay);\n display: flex;\n flex-direction: column;\n gap: 2px;\n }\n `,\n ],\n})\nexport class VikingContext {\n protected readonly open = signal(false);\n protected readonly position = signal({ x: 0, y: 0 });\n\n constructor(private readonly host: ElementRef<HTMLElement>) {}\n\n protected onContextMenu = (event: MouseEvent): void => {\n event.preventDefault();\n const rect = this.host.nativeElement.getBoundingClientRect();\n this.position.set({\n x: event.clientX - rect.left,\n y: event.clientY - rect.top,\n });\n this.open.set(true);\n };\n\n protected closed = (): void => {\n this.open.set(false);\n };\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n input,\n model,\n signal,\n} from \"@angular/core\";\nimport { VikingControl, provideVikingCva } from \"../core/cva\";\nimport { VikingCalendar } from \"../calendar/calendar\";\nimport { VikingIcon } from \"../icon/icon\";\n\n/**\n * viking-date-picker — input + calendar popover.\n * Value is an ISO date string (YYYY-MM-DD). ControlValueAccessor-compatible.\n */\n@Component({\n selector: \"viking-date-picker\",\n imports: [VikingCalendar, VikingIcon],\n providers: [provideVikingCva(VikingDatePicker)],\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n \"(document:click)\": \"onDocumentClick($event)\",\n \"(keydown.escape)\": \"open.set(false)\",\n },\n template: `\n <button\n type=\"button\"\n class=\"viking-control viking-date-trigger\"\n [disabled]=\"disabled() || formDisabled()\"\n [attr.aria-expanded]=\"open()\"\n [attr.aria-label]=\"label() || placeholder()\"\n aria-haspopup=\"dialog\"\n (click)=\"open.set(!open())\"\n >\n <viking-icon name=\"calendar\" [size]=\"20\" />\n <span\n class=\"viking-date-value\"\n [class.viking-date-placeholder]=\"!value()\"\n >\n {{ value() || placeholder() }}\n </span>\n <viking-icon\n [name]=\"open() ? 'chevron-up' : 'chevron-down'\"\n [size]=\"18\"\n />\n </button>\n @if (open()) {\n <div class=\"viking-date-panel\" role=\"dialog\" aria-label=\"Choose date\">\n <viking-calendar [value]=\"value()\" (valueChange)=\"pick($event)\" />\n </div>\n }\n `,\n styles: [\n `\n :host {\n position: relative;\n display: block;\n }\n .viking-date-trigger {\n display: flex;\n align-items: center;\n gap: var(--viking-space-1);\n width: 100%;\n min-height: var(--viking-control-height);\n padding: 0 var(--viking-space-2);\n background: var(--viking-surface);\n border: 1px solid var(--viking-border-strong);\n border-radius: var(--viking-radius);\n box-shadow: var(--viking-shadow-sm);\n color: var(--viking-text-muted);\n font-family: var(--viking-font-family);\n font-size: var(--viking-font-size);\n cursor: pointer;\n transition: var(--viking-transition);\n text-align: left;\n }\n .viking-date-trigger:hover:not(:disabled) {\n border-color: var(--viking-accent-strong);\n }\n .viking-date-trigger:focus-visible {\n outline: var(--viking-ring-width) solid var(--viking-ring);\n outline-offset: var(--viking-ring-offset);\n }\n .viking-date-trigger:disabled {\n opacity: var(--viking-state-disabled-opacity);\n cursor: not-allowed;\n }\n .viking-date-value {\n flex: 1;\n color: var(--viking-text);\n font-variant-numeric: tabular-nums;\n }\n .viking-date-placeholder {\n color: var(--viking-text-muted);\n }\n .viking-date-panel {\n position: absolute;\n top: calc(100% + var(--viking-space-1));\n left: 0;\n z-index: var(--viking-z-overlay);\n box-shadow: var(--viking-shadow-md);\n border-radius: var(--viking-radius);\n }\n `,\n ],\n})\nexport class VikingDatePicker extends VikingControl<string | null> {\n readonly value = model<string | null>(null);\n readonly placeholder = input<string>(\"Select date\");\n readonly label = input<string>(\"\");\n readonly disabled = input<boolean>(false);\n\n protected readonly open = signal(false);\n\n constructor(private readonly host: ElementRef<HTMLElement>) {\n super();\n }\n\n writeValue(value: string | null): void {\n this.value.set(value);\n }\n\n protected pick = (iso: string | null): void => {\n this.value.set(iso);\n this.onChange(iso);\n this.onTouched();\n this.open.set(false);\n };\n\n protected onDocumentClick = (event: Event): void => {\n if (\n this.open() &&\n !this.host.nativeElement.contains(event.target as Node)\n ) {\n this.open.set(false);\n }\n };\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n Optional,\n input,\n model,\n output,\n} from \"@angular/core\";\nimport { VikingIcon } from \"../icon/icon\";\nimport { VikingIconName } from \"../../core/icons\";\n\n/**\n * viking-dropdown — expandable menu.\n * Project the trigger with `vikingTrigger`; fill the menu with viking-menu-item.\n */\n@Component({\n selector: \"viking-dropdown\",\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n \"(click)\": \"onHostClick($event)\",\n \"(document:click)\": \"onDocumentClick($event)\",\n \"(keydown.escape)\": \"open.set(false)\",\n },\n template: `\n <span class=\"viking-dropdown-trigger\">\n <ng-content select=\"[vikingTrigger]\" />\n </span>\n @if (open()) {\n <div\n class=\"viking-dropdown-menu\"\n [class.viking-dropdown-end]=\"align() === 'end'\"\n role=\"menu\"\n >\n <ng-content />\n </div>\n }\n `,\n styles: [\n `\n :host {\n position: relative;\n display: inline-block;\n }\n .viking-dropdown-trigger {\n display: inline-flex;\n }\n .viking-dropdown-menu {\n position: absolute;\n top: calc(100% + var(--viking-space-1));\n left: 0;\n min-width: 216px;\n padding: var(--viking-space-1);\n background: var(--viking-surface);\n border: 1px solid var(--viking-border-strong);\n border-radius: var(--viking-radius);\n box-shadow: var(--viking-shadow-md);\n z-index: var(--viking-z-overlay);\n display: flex;\n flex-direction: column;\n gap: 2px;\n }\n .viking-dropdown-end {\n left: auto;\n right: 0;\n }\n `,\n ],\n})\nexport class VikingDropdown {\n readonly open = model<boolean>(false);\n readonly align = input<\"start\" | \"end\">(\"start\");\n\n constructor(private readonly host: ElementRef<HTMLElement>) {}\n\n /** Closes the menu; called by viking-menu-item on selection. */\n readonly close = (): void => {\n this.open.set(false);\n };\n\n /** Toggles when the (focusable, projected) trigger is activated. */\n protected onHostClick = (event: Event): void => {\n const trigger = this.host.nativeElement.querySelector(\n \".viking-dropdown-trigger\",\n );\n if (trigger?.contains(event.target as Node)) {\n this.open.update((value) => !value);\n }\n };\n\n protected onDocumentClick = (event: Event): void => {\n if (\n this.open() &&\n !this.host.nativeElement.contains(event.target as Node)\n ) {\n this.open.set(false);\n }\n };\n}\n\n/**\n * viking-menu-item — action row inside viking-dropdown / viking-context menus.\n */\n@Component({\n selector: \"viking-menu-item\",\n imports: [VikingIcon],\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <button\n type=\"button\"\n role=\"menuitem\"\n class=\"viking-menu-item\"\n [class.viking-menu-item-danger]=\"danger()\"\n [disabled]=\"disabled()\"\n (click)=\"select($event)\"\n >\n @if (icon()) {\n <viking-icon [name]=\"icon()!\" [size]=\"18\" />\n }\n <span class=\"viking-menu-item-label\"><ng-content /></span>\n @if (kbd()) {\n <kbd class=\"viking-menu-item-kbd\">{{ kbd() }}</kbd>\n }\n </button>\n `,\n styles: [\n `\n :host {\n display: block;\n }\n .viking-menu-item {\n display: flex;\n align-items: center;\n gap: var(--viking-space-1);\n width: 100%;\n border: none;\n background: transparent;\n color: var(--viking-text);\n font-family: var(--viking-font-family);\n font-size: var(--viking-font-size-ui);\n font-weight: 600;\n padding: var(--viking-space-1) var(--viking-space-1);\n border-radius: calc(var(--viking-radius) / 1.5);\n cursor: pointer;\n text-align: left;\n transition: var(--viking-transition);\n }\n .viking-menu-item:hover:not(:disabled) {\n background: var(--viking-accent-soft);\n }\n .viking-menu-item:focus-visible {\n outline: var(--viking-ring-width) solid var(--viking-ring);\n outline-offset: -2px;\n }\n .viking-menu-item:disabled {\n opacity: var(--viking-state-disabled-opacity);\n cursor: not-allowed;\n }\n .viking-menu-item-danger {\n color: var(--viking-danger);\n }\n .viking-menu-item-label {\n flex: 1;\n white-space: nowrap;\n }\n .viking-menu-item-kbd {\n font-family: var(--viking-font-family);\n font-size: var(--viking-font-size-ui);\n color: var(--viking-text-muted);\n }\n `,\n ],\n})\nexport class VikingMenuItem {\n constructor(@Optional() private readonly dropdown: VikingDropdown | null) {}\n\n readonly icon = input<VikingIconName | null>(null);\n readonly kbd = input<string | null>(null);\n readonly danger = input<boolean>(false);\n readonly disabled = input<boolean>(false);\n\n readonly selected = output<MouseEvent>();\n\n protected select = (event: MouseEvent): void => {\n this.selected.emit(event);\n this.dropdown?.close();\n };\n}\n","import { ChangeDetectionStrategy, Component, input } from \"@angular/core\";\nimport { VikingIcon } from \"../icon/icon\";\nimport { VikingIconName } from \"../../core/icons\";\n\n/**\n * viking-empty-state — reusable empty / zero-data placeholder.\n */\n@Component({\n selector: \"viking-empty-state\",\n imports: [VikingIcon],\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: { role: \"status\" },\n template: `\n <div class=\"viking-empty-state-inner\">\n @if (icon()) {\n <div class=\"viking-empty-state-icon\" aria-hidden=\"true\">\n <viking-icon [name]=\"icon()!\" [size]=\"iconSize()\" />\n </div>\n }\n @if (heading()) {\n <p class=\"viking-empty-state-heading\">{{ heading() }}</p>\n }\n @if (description()) {\n <p class=\"viking-empty-state-description\">{{ description() }}</p>\n }\n <div class=\"viking-empty-state-actions\">\n <ng-content />\n </div>\n </div>\n `,\n styles: [\n `\n :host {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 100%;\n padding: var(--viking-space-4) var(--viking-space-3);\n font-family: var(--viking-font-family);\n animation: viking-fade-in var(--viking-duration)\n var(--viking-ease-default);\n }\n .viking-empty-state-inner {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n text-align: center;\n gap: 0;\n max-width: 28rem;\n }\n .viking-empty-state-icon {\n display: flex;\n align-items: center;\n justify-content: center;\n width: var(--viking-space-7);\n height: var(--viking-space-7);\n border-radius: var(--viking-radius-lg);\n background: var(--viking-accent-soft);\n color: var(--viking-accent-strong);\n box-shadow: var(--viking-shadow-sm);\n border: 1px solid\n color-mix(in srgb, var(--viking-accent) 18%, transparent);\n margin-bottom: var(--viking-space-2);\n }\n .viking-empty-state-heading {\n margin: 0 0 var(--viking-space-1) 0;\n font-size: var(--viking-font-size-md);\n font-weight: var(--viking-font-weight-semibold);\n letter-spacing: var(--viking-letter-spacing-caps);\n text-transform: uppercase;\n color: var(--viking-text);\n line-height: var(--viking-line-height-tight);\n }\n .viking-empty-state-description {\n margin: 0;\n font-size: var(--viking-font-size);\n color: var(--viking-text-muted);\n line-height: var(--viking-line-height-relaxed);\n }\n .viking-empty-state-actions {\n display: flex;\n flex-wrap: wrap;\n align-items: center;\n justify-content: center;\n gap: var(--viking-space-2);\n margin-top: var(--viking-space-2);\n }\n .viking-empty-state-actions:empty {\n display: none;\n }\n `,\n ],\n})\nexport class VikingEmptyState {\n readonly heading = input<string>(\"\");\n readonly description = input<string>(\"\");\n readonly icon = input<VikingIconName | null>(\"folder\");\n readonly iconSize = input<number>(28);\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n afterNextRender,\n input,\n model,\n viewChild,\n} from \"@angular/core\";\nimport { VikingControl, provideVikingCva } from \"../core/cva\";\nimport { VikingIcon } from \"../icon/icon\";\nimport { VikingIconName } from \"../../core/icons\";\n\ninterface EditorAction {\n icon: VikingIconName;\n command: string;\n label: string;\n}\n\nconst ACTIONS: EditorAction[] = [\n { icon: \"bold\", command: \"bold\", label: \"Bold\" },\n { icon: \"italic\", command: \"italic\", label: \"Italic\" },\n { icon: \"underline\", command: \"underline\", label: \"Underline\" },\n { icon: \"list\", command: \"insertUnorderedList\", label: \"Bulleted list\" },\n {\n icon: \"list-ordered\",\n command: \"insertOrderedList\",\n label: \"Numbered list\",\n },\n];\n\n/**\n * viking-editor — lightweight rich text editor.\n * Zero-dependency contenteditable with a formatting toolbar.\n * Value is HTML. ControlValueAccessor-compatible.\n */\n@Component({\n selector: \"viking-editor\",\n imports: [VikingIcon],\n providers: [provideVikingCva(VikingEditor)],\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <div class=\"viking-editor\">\n <div\n class=\"viking-editor-toolbar\"\n role=\"toolbar\"\n aria-label=\"Text formatting\"\n >\n @for (action of actions; track action.command) {\n <button\n type=\"button\"\n class=\"viking-editor-btn\"\n [attr.aria-label]=\"action.label\"\n (mousedown)=\"$event.preventDefault()\"\n (click)=\"exec(action.command)\"\n >\n <viking-icon [name]=\"action.icon\" [size]=\"18\" />\n </button>\n }\n </div>\n <div\n #surface\n class=\"viking-editor-surface\"\n contenteditable=\"true\"\n role=\"textbox\"\n aria-multiline=\"true\"\n [attr.aria-label]=\"label() || 'Rich text editor'\"\n [attr.data-placeholder]=\"placeholder()\"\n (input)=\"onInput()\"\n (blur)=\"onTouched()\"\n ></div>\n </div>\n `,\n styles: [\n `\n .viking-editor {\n border: 1px solid var(--viking-border-strong);\n border-radius: var(--viking-radius);\n background: var(--viking-surface);\n box-shadow: var(--viking-shadow-sm);\n font-family: var(--viking-font-family);\n transition: var(--viking-transition);\n }\n .viking-editor:focus-within {\n outline: var(--viking-ring-width) solid var(--viking-ring);\n outline-offset: var(--viking-ring-offset);\n }\n .viking-editor-toolbar {\n display: flex;\n gap: 2px;\n padding: var(--viking-space-1);\n border-bottom: 1px solid var(--viking-border);\n }\n .viking-editor-btn {\n display: inline-flex;\n border: none;\n background: transparent;\n color: var(--viking-text-muted);\n cursor: pointer;\n padding: calc(var(--viking-space-1) / 1.5);\n border-radius: calc(var(--viking-radius) / 1.5);\n transition: var(--viking-transition);\n }\n .viking-editor-btn:hover {\n color: var(--viking-text);\n background: var(--viking-accent-soft);\n }\n .viking-editor-btn:focus-visible {\n outline: var(--viking-ring-width) solid var(--viking-ring);\n outline-offset: 1px;\n }\n .viking-editor-surface {\n min-height: 126px;\n padding: var(--viking-space-2);\n color: var(--viking-text);\n font-size: var(--viking-font-size);\n line-height: 1.6;\n outline: none;\n }\n .viking-editor-surface:empty::before {\n content: attr(data-placeholder);\n color: var(--viking-text-muted);\n pointer-events: none;\n }\n `,\n ],\n})\nexport class VikingEditor extends VikingControl<string> {\n private readonly surface =\n viewChild.required<ElementRef<HTMLElement>>(\"surface\");\n private readonly document: Document;\n\n readonly value = model<string>(\"\");\n readonly placeholder = input<string>(\"Start writing…\");\n readonly label = input<string>(\"\");\n\n protected readonly actions = ACTIONS;\n\n constructor(elementRef: ElementRef<HTMLElement>) {\n super();\n this.document = elementRef.nativeElement.ownerDocument;\n afterNextRender(() => {\n if (this.value()) {\n this.surface().nativeElement.innerHTML = this.value();\n }\n });\n }\n\n writeValue(value: string): void {\n this.value.set(value ?? \"\");\n const surface = this.surface?.();\n if (surface) {\n surface.nativeElement.innerHTML = value ?? \"\";\n }\n }\n\n protected exec = (command: string): void => {\n this.surface().nativeElement.focus();\n // execCommand is deprecated but remains the only zero-dependency way to\n // apply inline formatting to a contenteditable selection.\n this.document.execCommand(command, false);\n this.onInput();\n };\n\n protected onInput = (): void => {\n const html = this.surface().nativeElement.innerHTML;\n this.value.set(html);\n this.onChange(html);\n };\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n input,\n output,\n} from \"@angular/core\";\nimport { VikingIcon } from \"../icon/icon\";\nimport { VikingIconName } from \"../../core/icons\";\n\n/**\n * viking-fab — floating action button (fixed bottom-right).\n */\n@Component({\n selector: \"viking-fab\",\n imports: [VikingIcon],\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <button\n type=\"button\"\n class=\"viking-fab\"\n [attr.aria-label]=\"label()\"\n [disabled]=\"disabled()\"\n (click)=\"pressed.emit($event)\"\n >\n <viking-icon [name]=\"icon()\" [size]=\"24\" />\n </button>\n `,\n styles: [\n `\n :host {\n display: contents;\n }\n .viking-fab {\n position: fixed;\n bottom: var(--viking-space-3);\n right: var(--viking-space-3);\n width: var(--viking-space-7);\n height: var(--viking-space-7);\n border-radius: var(--viking-radius-pill);\n background: var(--viking-accent);\n color: var(--viking-accent-content);\n border: 1px solid\n color-mix(in srgb, var(--viking-accent) 80%, var(--viking-black));\n box-shadow: var(--viking-shadow-md);\n cursor: pointer;\n z-index: var(--viking-z-overlay);\n display: flex;\n align-items: center;\n justify-content: center;\n transition: var(--viking-transition-interactive);\n }\n .viking-fab:hover:not(:disabled) {\n transform: translateY(var(--viking-state-hover-lift));\n box-shadow: var(--viking-shadow-hover);\n background: var(--viking-accent-hover);\n }\n .viking-fab:active:not(:disabled) {\n transform: translateY(0) scale(var(--viking-state-active-scale));\n }\n .viking-fab:focus-visible {\n outline: var(--viking-ring-width) solid var(--viking-ring);\n outline-offset: var(--viking-ring-offset);\n }\n .viking-fab:disabled {\n opacity: var(--viking-state-disabled-opacity);\n cursor: not-allowed;\n }\n `,\n ],\n})\nexport class VikingFab {\n readonly icon = input.required<VikingIconName>();\n readonly label = input.required<string>();\n readonly disabled = input<boolean>(false);\n readonly pressed = output<MouseEvent>();\n}\n","import { ChangeDetectionStrategy, Component, input } from \"@angular/core\";\nimport { VikingIcon } from \"../icon/icon\";\nimport { VikingIconName } from \"../../core/icons\";\n\nexport type VikingFormSectionLayout = \"inline\" | \"stack\" | \"status\";\n\n/**\n * viking-form-panel — groups related form sections inside a card without nested outlines.\n */\n@Component({\n selector: \"viking-form-panel\",\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: { class: \"viking-form-panel\" },\n template: `<ng-content />`,\n styles: [\n `\n :host {\n display: flex;\n flex-direction: column;\n gap: 0;\n width: 100%;\n min-width: 0;\n }\n :host ::ng-deep viking-form-section + viking-form-section {\n border-top: 1px solid var(--viking-border-subtle);\n margin-top: var(--viking-space-3);\n padding-top: var(--viking-space-3);\n }\n `,\n ],\n})\nexport class VikingFormPanel {}\n\n/**\n * viking-form-section — standard dashboard form row: heading, fields, and actions.\n * Use inside viking-form-panel (or a card body) to avoid nested bordered sub-forms.\n */\n@Component({\n selector: \"viking-form-section\",\n imports: [VikingIcon],\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: \"viking-form-section\",\n \"[class.viking-form-section-inline]\": \"layout() === 'inline'\",\n \"[class.viking-form-section-stack]\": \"layout() === 'stack'\",\n \"[class.viking-form-section-status]\": \"layout() === 'status'\",\n },\n template: `\n <header class=\"viking-form-section-header\">\n @if (icon()) {\n <viking-icon\n [name]=\"icon()!\"\n [size]=\"16\"\n class=\"viking-form-section-icon\"\n />\n }\n <h3 class=\"viking-form-section-title\">{{ heading() }}</h3>\n </header>\n\n <div class=\"viking-form-section-body\">\n <div class=\"viking-form-section-fields\">\n <ng-content />\n </div>\n <div class=\"viking-form-section-actions\">\n <ng-content select=\"[vikingFormActions]\" />\n </div>\n </div>\n\n <div class=\"viking-form-section-footer\">\n <ng-content select=\"[vikingFormFooter]\" />\n </div>\n `,\n styles: [\n `\n :host {\n display: flex;\n flex-direction: column;\n gap: var(--viking-space-2);\n width: 100%;\n min-width: 0;\n font-family: var(--viking-font-family);\n }\n\n .viking-form-section-header {\n display: flex;\n align-items: center;\n gap: var(--viking-space-1);\n min-width: 0;\n }\n\n .viking-form-section-icon {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 24px;\n height: 24px;\n border-radius: var(--viking-radius-sm);\n background: var(--viking-accent-soft);\n color: var(--viking-accent-strong);\n flex-shrink: 0;\n }\n\n .viking-form-section-title {\n margin: 0;\n font-size: var(--viking-font-size-ui);\n font-weight: var(--viking-font-weight-semibold);\n letter-spacing: var(--viking-letter-spacing-caps);\n text-transform: uppercase;\n color: var(--viking-text);\n line-height: var(--viking-line-height-tight);\n }\n\n .viking-form-section-body {\n display: flex;\n flex-direction: column;\n align-items: stretch;\n gap: var(--viking-space-2);\n width: 100%;\n min-width: 0;\n }\n\n .viking-form-section-fields {\n display: flex;\n flex-direction: column;\n gap: var(--viking-space-2);\n min-width: 0;\n flex: 1;\n }\n\n .viking-form-section-actions {\n display: flex;\n flex-direction: column;\n align-items: stretch;\n gap: var(--viking-space-1);\n flex-shrink: 0;\n }\n\n .viking-form-section-actions:empty {\n display: none;\n }\n\n .viking-form-section-footer:empty {\n display: none;\n }\n\n .viking-form-section-footer:not(:empty) {\n display: flex;\n flex-direction: column;\n gap: var(--viking-space-1);\n }\n\n :host(.viking-form-section-inline) .viking-form-section-body {\n @media (min-width: 601px) {\n flex-direction: row;\n align-items: flex-end;\n }\n }\n\n :host(.viking-form-section-inline) .viking-form-section-actions {\n @media (min-width: 601px) {\n align-items: center;\n justify-content: flex-end;\n width: auto;\n }\n }\n\n :host(.viking-form-section-status) .viking-form-section-body {\n @media (min-width: 601px) {\n flex-direction: row;\n align-items: flex-start;\n justify-content: space-between;\n }\n }\n\n :host(.viking-form-section-status) .viking-form-section-fields {\n flex-direction: row;\n align-items: flex-start;\n gap: var(--viking-space-1, 8px);\n }\n\n :host(.viking-form-section-status) .viking-form-section-actions {\n @media (min-width: 601px) {\n align-items: flex-start;\n padding-top: 1px;\n margin-left: auto;\n }\n }\n\n :host ::ng-deep viking-field {\n width: 100%;\n min-width: 0;\n }\n `,\n ],\n})\nexport class VikingFormSection {\n readonly heading = input.required<string>();\n readonly icon = input<VikingIconName | null>(null);\n readonly layout = input<VikingFormSectionLayout>(\"inline\");\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n input,\n output,\n signal,\n} from \"@angular/core\";\nimport { VikingIcon } from \"../icon/icon\";\n\n/**\n * viking-file-upload — drag & drop file zone.\n */\n@Component({\n selector: \"viking-file-upload\",\n imports: [VikingIcon],\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <label\n class=\"viking-upload-zone\"\n [class.viking-dragover]=\"dragOver()\"\n (dragover)=\"onDragOver($event)\"\n (dragleave)=\"dragOver.set(false)\"\n (drop)=\"onDrop($event)\"\n >\n <input\n type=\"file\"\n [accept]=\"accept()\"\n [multiple]=\"multiple()\"\n [disabled]=\"disabled()\"\n [attr.aria-label]=\"heading()\"\n (change)=\"onSelect($event)\"\n />\n <viking-icon name=\"upload\" [size]=\"27\" />\n <span class=\"viking-upload-heading\">{{ heading() }}</span>\n <span class=\"viking-upload-hint\">{{ hint() }}</span>\n </label>\n @if (fileList().length > 0) {\n <ul class=\"viking-upload-list\">\n @for (file of fileList(); track file.name) {\n <li class=\"viking-upload-file\">\n <viking-icon name=\"file\" [size]=\"18\" />\n <span class=\"viking-upload-name\">{{ file.name }}</span>\n <span class=\"viking-upload-size\">{{ formatSize(file.size) }}</span>\n <button\n type=\"button\"\n class=\"viking-upload-remove\"\n [attr.aria-label]=\"'Remove ' + file.name\"\n (click)=\"removeFile(file)\"\n >\n <viking-icon name=\"x\" [size]=\"16\" />\n </button>\n </li>\n }\n </ul>\n }\n `,\n styles: [\n `\n :host {\n display: block;\n font-family: var(--viking-font-family);\n }\n .viking-upload-zone {\n position: relative;\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n gap: var(--viking-space-1);\n padding: var(--viking-space-4) var(--viking-space-2);\n border: 2px dashed var(--viking-border-strong);\n border-radius: var(--viking-radius);\n background: var(--viking-surface);\n color: var(--viking-text-muted);\n cursor: pointer;\n transition: var(--viking-transition);\n text-align: center;\n }\n .viking-upload-zone:hover,\n .viking-dragover {\n border-color: var(--viking-accent);\n background: var(--viking-accent-soft);\n color: var(--viking-accent);\n }\n .viking-upload-zone:focus-within {\n outline: var(--viking-ring-width) solid var(--viking-ring);\n outline-offset: var(--viking-ring-offset);\n }\n /* The native input fills the drop zone so clicks and focus land on it. */\n input {\n position: absolute;\n inset: 0;\n width: 100%;\n height: 100%;\n margin: 0;\n opacity: 0;\n cursor: pointer;\n }\n .viking-upload-heading {\n font-size: var(--viking-font-size);\n font-weight: 600;\n color: var(--viking-text);\n }\n .viking-upload-hint {\n font-size: var(--viking-font-size);\n color: var(--viking-text-muted);\n }\n .viking-upload-list {\n list-style: none;\n margin: var(--viking-space-1) 0 0;\n padding: 0;\n display: flex;\n flex-direction: column;\n gap: calc(var(--viking-space-1) / 2);\n }\n .viking-upload-file {\n display: flex;\n align-items: center;\n gap: var(--viking-space-1);\n padding: var(--viking-space-1);\n border: 1px solid var(--viking-border);\n border-radius: var(--viking-radius);\n background: var(--viking-surface);\n font-size: var(--viking-font-size);\n color: var(--viking-text);\n }\n .viking-upload-name {\n flex: 1;\n min-width: 0;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n }\n .viking-upload-size {\n color: var(--viking-text-muted);\n font-variant-numeric: tabular-nums;\n }\n .viking-upload-remove {\n display: inline-flex;\n border: none;\n background: transparent;\n color: var(--viking-text-muted);\n cursor: pointer;\n padding: 3px;\n border-radius: var(--viking-radius-pill);\n }\n .viking-upload-remove:hover {\n color: var(--viking-danger);\n }\n .viking-upload-remove:focus-visible {\n outline: var(--viking-ring-width) solid var(--viking-ring);\n outline-offset: 1px;\n }\n `,\n ],\n})\nexport class VikingFileUpload {\n readonly heading = input<string>(\"Drop files here or click to browse\");\n readonly hint = input<string>(\"\");\n readonly accept = input<string>(\"\");\n readonly multiple = input<boolean>(true);\n readonly disabled = input<boolean>(false);\n\n readonly filesChanged = output<File[]>();\n\n protected readonly dragOver = signal(false);\n protected readonly fileList = signal<File[]>([]);\n\n protected onDragOver = (event: DragEvent): void => {\n event.preventDefault();\n this.dragOver.set(true);\n };\n\n protected onDrop = (event: DragEvent): void => {\n event.preventDefault();\n this.dragOver.set(false);\n this.addFiles(Array.from(event.dataTransfer?.files ?? []));\n };\n\n protected onSelect = (event: Event): void => {\n this.addFiles(Array.from((event.target as HTMLInputElement).files ?? []));\n };\n\n protected removeFile = (file: File): void => {\n this.fileList.update((list) => list.filter((item) => item !== file));\n this.filesChanged.emit(this.fileList());\n };\n\n protected formatSize = (bytes: number): string => {\n if (bytes < 1024) {\n return `${bytes} B`;\n }\n if (bytes < 1024 * 1024) {\n return `${(bytes / 1024).toFixed(1)} KB`;\n }\n return `${(bytes / (1024 * 1024)).toFixed(1)} MB`;\n };\n\n private addFiles(files: File[]): void {\n if (files.length === 0) {\n return;\n }\n this.fileList.update((list) =>\n this.multiple() ? [...list, ...files] : files.slice(0, 1),\n );\n this.filesChanged.emit(this.fileList());\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n input,\n} from \"@angular/core\";\n\n/** viking-gauge-arc — semicircle gauge fill driven by value / max. */\n@Component({\n selector: \"viking-gauge-arc\",\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: \"viking-gauge-arc\",\n \"aria-hidden\": \"true\",\n \"[class.viking-gauge-arc-amber]\": \"tone() === 'amber'\",\n \"[class.viking-gauge-arc-danger]\": \"tone() === 'danger'\",\n \"[class.viking-gauge-arc-primary]\": \"tone() === 'primary'\",\n },\n template: `\n <svg class=\"viking-gauge-arc-svg\" viewBox=\"0 0 100 60\" fill=\"none\">\n <path class=\"viking-gauge-arc-bg\" d=\"M10 50A40 40 0 0 1 90 50\" />\n <path\n class=\"viking-gauge-arc-fill\"\n d=\"M10 50A40 40 0 0 1 90 50\"\n [attr.stroke-dasharray]=\"strokeDasharray()\"\n />\n </svg>\n `,\n styles: [\n `\n :host {\n display: block;\n width: 100%;\n color: var(--viking-accent);\n }\n\n .viking-gauge-arc-svg {\n width: 100%;\n height: auto;\n overflow: visible;\n shape-rendering: geometricPrecision;\n }\n\n .viking-gauge-arc-bg,\n .viking-gauge-arc-fill {\n fill: none;\n stroke-width: 8;\n stroke-linecap: round;\n }\n\n .viking-gauge-arc-bg {\n stroke: color-mix(in srgb, var(--viking-text-muted) 25%, transparent);\n }\n\n .viking-gauge-arc-fill {\n stroke: currentColor;\n transition: stroke-dasharray 0.4s var(--viking-ease-default);\n }\n\n :host(.viking-gauge-arc-amber) {\n color: var(--viking-warning);\n }\n\n :host(.viking-gauge-arc-danger) {\n color: var(--viking-danger);\n }\n\n :host(.viking-gauge-arc-primary) {\n color: var(--viking-accent);\n }\n `,\n ],\n})\nexport class VikingGaugeArc {\n readonly value = input.required<number>();\n readonly max = input<number>(100);\n readonly circumference = input<number>(125.66);\n readonly tone = input<\"accent\" | \"amber\" | \"danger\" | \"primary\">(\"accent\");\n\n protected readonly strokeDasharray = computed(() => {\n const pct = Math.max(0, Math.min(1, this.value() / this.max()));\n const filled = pct * this.circumference();\n return `${filled} ${this.circumference()}`;\n });\n}\n","import { ChangeDetectionStrategy, Component, input } from \"@angular/core\";\nimport { VikingIcon } from \"../icon/icon\";\nimport { VikingIconName } from \"../../core/icons\";\n\n/** viking-hud-panel — bordered dashboard panel with icon header. */\n@Component({\n selector: \"viking-hud-panel\",\n imports: [VikingIcon],\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: \"viking-hud-panel panel-section\",\n },\n template: `\n <div class=\"viking-hud-panel-header panel-header\">\n @if (icon()) {\n <viking-icon [name]=\"icon()!\" [size]=\"20\" class=\"panel-icon\" />\n }\n <h2 class=\"viking-hud-panel-title\">{{ title() }}</h2>\n <ng-content select=\"[vikingHudPanelBadge]\" />\n </div>\n <ng-content />\n `,\n})\nexport class VikingHudPanel {\n readonly title = input.required<string>();\n readonly icon = input<VikingIconName | null>(null);\n}\n","import { ChangeDetectionStrategy, Component, input } from \"@angular/core\";\nimport { VikingIcon } from \"../icon/icon\";\nimport { VikingIconName } from \"../../core/icons\";\nimport { VikingTone } from \"../../core/types\";\n\n/**\n * viking-icon-text — icon aligned beside a title and optional description.\n * Use for status rows (MFA enrolled, connected accounts, subscription state).\n */\n@Component({\n selector: \"viking-icon-text\",\n imports: [VikingIcon],\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: \"viking-icon-text\",\n \"[class.viking-icon-text--muted]\": \"tone() === 'muted'\",\n },\n template: `\n <span\n class=\"viking-icon-text-icon\"\n [class]=\"'viking-icon-text-icon--' + tone()\"\n >\n @if (icon()) {\n <viking-icon [name]=\"icon()!\" [size]=\"iconSize()\" />\n } @else {\n <ng-content select=\"[vikingIconTextIcon]\" />\n }\n </span>\n <span class=\"viking-icon-text-body\">\n <strong class=\"viking-icon-text-title\">{{ title() }}</strong>\n @if (description()) {\n <span class=\"viking-icon-text-desc\">{{ description() }}</span>\n } @else {\n <ng-content select=\"[vikingIconTextDesc]\" />\n }\n </span>\n `,\n styles: [\n `\n :host {\n display: inline-flex;\n align-items: flex-start;\n gap: var(--viking-space-1-5, 12px);\n min-width: 0;\n flex: 1;\n font-family: var(--viking-font-family);\n }\n\n .viking-icon-text-icon {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n width: 24px;\n height: 24px;\n margin-top: 1px;\n border-radius: var(--viking-radius-sm);\n background: var(--viking-accent-soft);\n color: var(--viking-text-muted);\n }\n\n .viking-icon-text-icon--success {\n color: var(--viking-success);\n background: color-mix(in srgb, var(--viking-success) 14%, transparent);\n }\n\n .viking-icon-text-icon--info {\n color: var(--viking-info);\n background: color-mix(in srgb, var(--viking-info) 14%, transparent);\n }\n\n .viking-icon-text-icon--warning {\n color: var(--viking-warning);\n background: color-mix(in srgb, var(--viking-warning) 14%, transparent);\n }\n\n .viking-icon-text-icon--danger {\n color: var(--viking-danger);\n background: color-mix(in srgb, var(--viking-danger) 14%, transparent);\n }\n\n .viking-icon-text-icon--accent {\n color: var(--viking-accent-strong);\n background: var(--viking-accent-soft);\n }\n\n .viking-icon-text-body {\n display: flex;\n flex-direction: column;\n gap: var(--viking-space-half, 4px);\n min-width: 0;\n padding-top: 1px;\n }\n\n .viking-icon-text-title {\n display: block;\n font-size: var(--viking-font-size, 16px);\n font-weight: var(--viking-font-weight-semibold, 600);\n color: var(--viking-text);\n line-height: var(--viking-line-height-tight, 1.25);\n }\n\n .viking-icon-text-desc {\n display: block;\n margin: 0;\n font-size: var(--viking-font-size-sm, 14px);\n font-weight: var(--viking-font-weight-regular, 400);\n color: var(--viking-text-muted);\n line-height: var(--viking-line-height-relaxed, 1.625);\n }\n `,\n ],\n})\nexport class VikingIconText {\n readonly icon = input<VikingIconName | null>(null);\n readonly title = input.required<string>();\n readonly description = input<string>(\"\");\n readonly tone = input<VikingTone>(\"muted\");\n readonly iconSize = input<number>(16);\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n model,\n output,\n signal,\n} from \"@angular/core\";\nimport { VikingIcon } from \"../icon/icon\";\nimport { VikingBadge } from \"../badge/badge\";\nimport {\n VikingKanbanCard,\n VikingKanbanColumn,\n VikingKanbanMove,\n} from \"../../core/types\";\n\n/**\n * viking-kanban — drag & drop board.\n * Native HTML5 drag and drop; emits `moved` and updates the `columns` model.\n */\n@Component({\n selector: \"viking-kanban\",\n imports: [VikingIcon, VikingBadge],\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <div\n class=\"viking-kanban\"\n role=\"group\"\n aria-label=\"Kanban board\"\n tabindex=\"0\"\n >\n @for (column of columns(); track column.id) {\n <section\n class=\"viking-kanban-column\"\n [attr.aria-label]=\"column.title\"\n [class.viking-drop-target]=\"dropColumnId() === column.id\"\n (dragover)=\"onDragOver($event, column.id)\"\n (dragleave)=\"dropColumnId.set(null)\"\n (drop)=\"onDrop($event, column.id)\"\n >\n <header class=\"viking-kanban-header\">\n <span class=\"viking-kanban-title\">{{ column.title }}</span>\n <viking-badge size=\"sm\">{{ column.cards.length }}</viking-badge>\n </header>\n <div class=\"viking-kanban-cards\">\n @for (card of column.cards; track card.id) {\n <article\n class=\"viking-kanban-card\"\n draggable=\"true\"\n [class.viking-dragging]=\"draggingId() === card.id\"\n (dragstart)=\"onDragStart(card, column.id)\"\n (dragend)=\"resetDrag()\"\n >\n <div class=\"viking-kanban-card-header\">\n <span class=\"viking-kanban-card-title\">{{ card.title }}</span>\n <viking-icon\n class=\"viking-kanban-grip\"\n name=\"grip-vertical\"\n [size]=\"16\"\n />\n </div>\n @if (card.description) {\n <p class=\"viking-kanban-card-text\">{{ card.description }}</p>\n }\n </article>\n }\n </div>\n </section>\n }\n </div>\n `,\n styles: [\n `\n .viking-kanban:focus-visible {\n outline: var(--viking-ring-width) solid var(--viking-ring);\n outline-offset: var(--viking-ring-offset);\n }\n .viking-kanban {\n display: grid;\n grid-auto-flow: column;\n grid-auto-columns: minmax(234px, 1fr);\n gap: var(--viking-space-2);\n overflow-x: auto;\n padding-bottom: var(--viking-space-1);\n font-family: var(--viking-font-family);\n }\n .viking-kanban-column {\n background: var(--viking-surface-alt);\n border: 1px solid var(--viking-border);\n border-radius: var(--viking-radius);\n padding: var(--viking-space-1);\n transition: var(--viking-transition);\n }\n .viking-drop-target {\n border-color: var(--viking-accent);\n background: var(--viking-accent-soft);\n }\n .viking-kanban-header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: var(--viking-space-1);\n padding: var(--viking-space-1);\n }\n .viking-kanban-title {\n font-size: var(--viking-font-size);\n font-weight: 600;\n color: var(--viking-text);\n text-transform: uppercase;\n letter-spacing: 0.04em;\n }\n .viking-kanban-cards {\n display: flex;\n flex-direction: column;\n gap: var(--viking-space-1);\n min-height: var(--viking-space-4);\n }\n .viking-kanban-card {\n background: var(--viking-surface);\n border: 1px solid var(--viking-border);\n border-radius: calc(var(--viking-radius) / 1.2);\n box-shadow: var(--viking-shadow-sm);\n padding: var(--viking-space-1) var(--viking-space-2);\n cursor: grab;\n transition: var(--viking-transition);\n }\n .viking-kanban-card:hover {\n border-color: var(--viking-accent-strong);\n }\n .viking-dragging {\n opacity: 0.45;\n }\n .viking-kanban-card-header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: var(--viking-space-1);\n }\n .viking-kanban-card-title {\n font-size: var(--viking-font-size);\n font-weight: 600;\n color: var(--viking-text);\n }\n .viking-kanban-grip {\n color: var(--viking-text-muted);\n }\n .viking-kanban-card-text {\n margin: 3px 0 0;\n font-size: var(--viking-font-size);\n color: var(--viking-text-muted);\n line-height: 1.45;\n }\n `,\n ],\n})\nexport class VikingKanban {\n readonly columns = model<VikingKanbanColumn[]>([]);\n\n readonly moved = output<VikingKanbanMove>();\n\n protected readonly draggingId = signal<string | null>(null);\n protected readonly dropColumnId = signal<string | null>(null);\n\n private dragSource: { card: VikingKanbanCard; columnId: string } | null =\n null;\n\n protected onDragStart = (card: VikingKanbanCard, columnId: string): void => {\n this.dragSource = { card, columnId };\n this.draggingId.set(card.id);\n };\n\n protected onDragOver = (event: DragEvent, columnId: string): void => {\n event.preventDefault();\n this.dropColumnId.set(columnId);\n };\n\n protected onDrop = (event: DragEvent, toColumnId: string): void => {\n event.preventDefault();\n const source = this.dragSource;\n this.resetDrag();\n if (!source || source.columnId === toColumnId) {\n return;\n }\n this.columns.update((columns) =>\n columns.map((column) => {\n if (column.id === source.columnId) {\n return {\n ...column,\n cards: column.cards.filter((card) => card.id !== source.card.id),\n };\n }\n if (column.id === toColumnId) {\n return { ...column, cards: [...column.cards, source.card] };\n }\n return column;\n }),\n );\n const target = this.columns().find((column) => column.id === toColumnId);\n this.moved.emit({\n cardId: source.card.id,\n fromColumnId: source.columnId,\n toColumnId,\n toIndex: (target?.cards.length ?? 1) - 1,\n });\n };\n\n protected resetDrag = (): void => {\n this.draggingId.set(null);\n this.dropColumnId.set(null);\n this.dragSource = null;\n };\n}\n","import { ChangeDetectionStrategy, Component } from \"@angular/core\";\n\n/**\n * viking-kbd — keyboard hint chip.\n */\n@Component({\n selector: \"viking-kbd\",\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `<ng-content />`,\n styles: [\n `\n :host {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n font-family: var(--viking-font-family);\n font-size: var(--viking-font-size-ui);\n font-weight: 600;\n line-height: 1.2;\n color: var(--viking-text-muted);\n background: var(--viking-surface-alt);\n border: 1px solid var(--viking-border);\n border-radius: calc(var(--viking-radius) / 2);\n padding: 2px var(--viking-space-1);\n min-width: 1.5rem;\n box-shadow: inset 0 -1px 0\n color-mix(in srgb, var(--viking-border) 65%, transparent);\n }\n `,\n ],\n})\nexport class VikingKbd {}\n","import { ChangeDetectionStrategy, Component, input } from \"@angular/core\";\n\n/**\n * viking-label — accessible form label.\n */\n@Component({\n selector: \"viking-label\",\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <label class=\"viking-label\" [attr.for]=\"htmlFor() || null\">\n <ng-content />\n @if (required()) {\n <span class=\"viking-label-required\" aria-hidden=\"true\">*</span>\n }\n </label>\n `,\n styles: [\n `\n .viking-label {\n display: inline-flex;\n align-items: center;\n gap: calc(var(--viking-space-1) / 4);\n font-family: var(--viking-font-family);\n font-size: var(--viking-font-size-ui);\n font-weight: 600;\n color: var(--viking-text);\n letter-spacing: 0.01em;\n line-height: 1.3;\n }\n .viking-label-required {\n color: var(--viking-accent);\n }\n `,\n ],\n})\nexport class VikingLabel {\n readonly htmlFor = input<string>(\"\");\n readonly required = input<boolean>(false);\n}\n","import { ChangeDetectionStrategy, Component, input } from \"@angular/core\";\nimport { VikingSpinner } from \"../spinner/spinner\";\n\n/**\n * viking-loading-overlay — blocks interaction with a centered spinner.\n * Use on cards, panels, or full-page surfaces during async operations.\n */\n@Component({\n selector: \"viking-loading-overlay\",\n imports: [VikingSpinner],\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n role: \"status\",\n \"aria-live\": \"polite\",\n \"[attr.aria-label]\": \"label()\",\n \"[class.viking-loading-overlay-full]\": \"full()\",\n },\n template: `\n <div class=\"viking-loading-overlay-backdrop\" aria-hidden=\"true\"></div>\n <div class=\"viking-loading-overlay-content\">\n <viking-spinner [size]=\"spinnerSize()\" [label]=\"label()\" />\n @if (message()) {\n <p class=\"viking-loading-overlay-message\">{{ message() }}</p>\n }\n </div>\n `,\n styles: [\n `\n :host {\n position: absolute;\n inset: 0;\n z-index: 2;\n display: flex;\n align-items: center;\n justify-content: center;\n border-radius: inherit;\n animation: viking-fade-in var(--viking-duration-fast)\n var(--viking-ease-out);\n }\n :host(.viking-loading-overlay-full) {\n position: fixed;\n z-index: var(--viking-z-overlay);\n border-radius: 0;\n }\n .viking-loading-overlay-backdrop {\n position: absolute;\n inset: 0;\n background: color-mix(in srgb, var(--viking-bg) 55%, transparent);\n backdrop-filter: blur(2px);\n border-radius: inherit;\n }\n .viking-loading-overlay-content {\n position: relative;\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: var(--viking-space-1);\n padding: var(--viking-space-2);\n }\n .viking-loading-overlay-message {\n margin: 0;\n font-family: var(--viking-font-family);\n font-size: var(--viking-font-size-sm);\n color: var(--viking-text-muted);\n text-align: center;\n }\n @media (prefers-reduced-motion: reduce) {\n :host {\n animation: none;\n }\n }\n `,\n ],\n})\nexport class VikingLoadingOverlay {\n readonly label = input<string>(\"Loading\");\n readonly message = input<string>(\"\");\n readonly spinnerSize = input<number>(28);\n readonly full = input<boolean>(false);\n}\n","import { ChangeDetectionStrategy, Component, input } from \"@angular/core\";\n\n/** viking-metric-row — responsive grid row for HUD metric cards. */\n@Component({\n selector: \"viking-metric-row\",\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `<div class=\"viking-metric-row hud-metrics\"><ng-content /></div>`,\n})\nexport class VikingMetricRow {}\n\n/** viking-metric-card — single KPI tile in a metric row. */\n@Component({\n selector: \"viking-metric-card\",\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: \"viking-metric-card metric-card col-span-4 col-span-md-4\",\n \"[class.viking-metric-card-warning]\": \"variant() === 'warning'\",\n \"[class.warning]\": \"variant() === 'warning'\",\n \"[class.viking-metric-card-critical]\": \"variant() === 'critical'\",\n \"[class.critical]\": \"variant() === 'critical'\",\n },\n template: `\n <span class=\"viking-metric-label metric-label\">{{ label() }}</span>\n <span class=\"viking-metric-value metric-value\"\n ><ng-content />{{ value() }}</span\n >\n `,\n})\nexport class VikingMetricCard {\n readonly label = input.required<string>();\n readonly value = input<string | number>(\"\");\n readonly variant = input<\"default\" | \"warning\" | \"critical\">(\"default\");\n}\n","import { ChangeDetectionStrategy, Component } from \"@angular/core\";\n\n/**\n * viking-menubar — horizontal application menu bar.\n */\n@Component({\n selector: \"viking-menubar\",\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n role: \"menubar\",\n class: \"viking-menubar\",\n },\n template: `<ng-content />`,\n styles: [\n `\n :host {\n display: flex;\n flex-wrap: wrap;\n align-items: center;\n gap: var(--viking-space-1);\n padding: var(--viking-space-1);\n border: 1px solid var(--viking-border);\n border-radius: var(--viking-radius);\n background: var(--viking-surface);\n font-family: var(--viking-font-family);\n }\n :host ::ng-deep .viking-menubar-item,\n :host ::ng-deep button[role=\"menuitem\"] {\n font-size: var(--viking-font-size-ui);\n font-weight: 600;\n display: inline-flex;\n align-items: center;\n gap: var(--viking-space-1);\n min-height: var(--viking-control-height-sm);\n padding: 0 var(--viking-space-2);\n border: 1px solid transparent;\n border-radius: var(--viking-radius);\n background: transparent;\n color: var(--viking-text);\n cursor: pointer;\n transition: var(--viking-transition);\n }\n :host ::ng-deep .viking-menubar-item:hover,\n :host ::ng-deep button[role=\"menuitem\"]:hover {\n background: var(--viking-accent-soft);\n color: var(--viking-accent);\n }\n :host ::ng-deep .viking-menubar-item:focus-visible,\n :host ::ng-deep button[role=\"menuitem\"]:focus-visible {\n outline: var(--viking-ring-width) solid var(--viking-ring);\n outline-offset: var(--viking-ring-offset);\n }\n `,\n ],\n})\nexport class VikingMenubar {}\n\n/**\n * viking-menubar-item — menu item trigger for viking-menubar.\n */\n@Component({\n selector: \"viking-menubar-item\",\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <button type=\"button\" role=\"menuitem\" class=\"viking-menubar-item\">\n <ng-content />\n </button>\n `,\n styles: [\n `\n :host {\n display: inline-flex;\n }\n `,\n ],\n})\nexport class VikingMenubarItem {}\n","import {\n ChangeDetectionStrategy,\n Component,\n input,\n model,\n} from \"@angular/core\";\nimport { VikingControl, provideVikingCva } from \"../core/cva\";\nimport { VikingSelectOption } from \"../../core/types\";\nimport type { VikingSelectWidth } from \"../select/select\";\nimport { vikingUid } from \"../../core/uid\";\n\n/**\n * viking-native-select — styled native <select>.\n */\n@Component({\n selector: \"viking-native-select\",\n providers: [provideVikingCva(VikingNativeSelect)],\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n \"[class.viking-native-select-full]\": \"width() === 'full'\",\n \"[class.viking-native-select-half]\": \"width() === 'half'\",\n },\n template: `\n <label\n class=\"viking-native-select\"\n [class.viking-disabled]=\"disabled() || formDisabled()\"\n >\n @if (label()) {\n <span class=\"viking-native-select-label\">{{ label() }}</span>\n }\n <select\n class=\"viking-native-select-control\"\n [id]=\"selectId\"\n [disabled]=\"disabled() || formDisabled()\"\n [value]=\"value() ?? ''\"\n (change)=\"onSelectChange($event)\"\n (blur)=\"onTouched()\"\n >\n @if (placeholder()) {\n <option value=\"\" disabled [selected]=\"!value()\">\n {{ placeholder() }}\n </option>\n }\n @for (option of options(); track option.label) {\n <option [value]=\"option.value\" [disabled]=\"option.disabled\">\n {{ option.label }}\n </option>\n }\n </select>\n </label>\n `,\n styles: [\n `\n :host {\n display: block;\n min-width: 0;\n font-family: var(--viking-font-family);\n }\n :host(.viking-native-select-full) {\n width: 100%;\n }\n :host(.viking-native-select-half) {\n width: 100%;\n max-width: var(--viking-select-half-max-width, min(100%, 24rem));\n }\n .viking-native-select {\n display: flex;\n flex-direction: column;\n gap: var(--viking-space-1);\n }\n .viking-native-select-label {\n font-size: var(--viking-font-size-ui);\n font-weight: 700;\n color: var(--viking-text);\n }\n .viking-native-select-control {\n width: 100%;\n min-height: var(--viking-control-height);\n padding: 0 var(--viking-space-2);\n font-size: var(--viking-font-size);\n color: var(--viking-text);\n background: var(--viking-surface);\n border: 1px solid var(--viking-border-strong);\n border-radius: var(--viking-radius);\n cursor: pointer;\n transition: var(--viking-transition);\n }\n .viking-native-select-control:hover:not(:disabled) {\n border-color: var(--viking-accent-strong);\n }\n .viking-native-select-control:focus-visible {\n outline: var(--viking-ring-width) solid var(--viking-ring);\n outline-offset: var(--viking-ring-offset);\n }\n .viking-disabled .viking-native-select-control {\n opacity: var(--viking-state-disabled-opacity);\n cursor: not-allowed;\n }\n `,\n ],\n})\nexport class VikingNativeSelect extends VikingControl<string | number | null> {\n readonly label = input(\"\");\n readonly placeholder = input(\"\");\n readonly options = input<VikingSelectOption[]>([]);\n readonly disabled = input(false);\n readonly width = input<VikingSelectWidth>(\"half\");\n\n readonly value = model<string | number | null>(null);\n\n protected readonly selectId = vikingUid(\"viking-native-select\");\n\n writeValue(value: string | number | null): void {\n this.value.set(value);\n }\n\n protected onSelectChange = (event: Event): void => {\n const raw = (event.target as HTMLSelectElement).value;\n const match = this.options().find((o) => String(o.value) === raw);\n const next = (match?.value ?? raw) as string | number;\n this.value.set(next);\n this.onChange(next);\n };\n}\n","import { ChangeDetectionStrategy, Component, input } from \"@angular/core\";\n\nexport interface VikingNavItem {\n label: string;\n href?: string;\n active?: boolean;\n disabled?: boolean;\n}\n\n/**\n * viking-navigation-menu — primary nav links with active indicator.\n */\n@Component({\n selector: \"viking-navigation-menu\",\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n role: \"navigation\",\n class: \"viking-navigation-menu\",\n \"[attr.aria-label]\": \"label()\",\n },\n template: `\n <ul class=\"viking-nav-list\" role=\"list\">\n @for (item of items(); track item.label) {\n <li class=\"viking-nav-item\" role=\"listitem\">\n @if (item.href && !item.disabled) {\n <a\n class=\"viking-nav-link\"\n [class.viking-active]=\"item.active\"\n [href]=\"item.href\"\n [attr.aria-current]=\"item.active ? 'page' : null\"\n >\n {{ item.label }}\n </a>\n } @else {\n <span\n class=\"viking-nav-link\"\n [class.viking-active]=\"item.active\"\n [class.viking-disabled]=\"item.disabled\"\n [attr.aria-disabled]=\"item.disabled ? 'true' : null\"\n >\n {{ item.label }}\n </span>\n }\n </li>\n }\n </ul>\n `,\n styles: [\n `\n :host {\n display: block;\n font-family: var(--viking-font-family);\n }\n .viking-nav-list {\n display: flex;\n flex-wrap: wrap;\n align-items: center;\n gap: var(--viking-space-half);\n margin: 0;\n padding: var(--viking-space-half);\n list-style: none;\n border: 1px solid var(--viking-border);\n border-radius: var(--viking-radius-lg);\n background: color-mix(\n in srgb,\n var(--viking-surface-alt) 80%,\n var(--viking-surface)\n );\n box-shadow: var(--viking-shadow-sm);\n }\n .viking-nav-link {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n min-height: var(--viking-control-height-sm);\n min-width: var(--viking-btn-min-width, 120px);\n padding: 0 var(--viking-space-2);\n font-size: var(--viking-font-size-sm);\n font-weight: var(--viking-font-weight-semibold);\n color: var(--viking-text-muted);\n text-decoration: none;\n border-radius: var(--viking-radius);\n border: 1px solid transparent;\n transition: var(--viking-transition-interactive);\n position: relative;\n }\n a.viking-nav-link:hover {\n color: var(--viking-text);\n background: var(--viking-accent-soft);\n border-color: var(--viking-border-subtle);\n }\n a.viking-nav-link:focus-visible {\n outline: var(--viking-ring-width) solid var(--viking-ring);\n outline-offset: var(--viking-ring-offset);\n }\n .viking-nav-link.viking-active {\n color: var(--viking-accent-content);\n background: var(--viking-accent);\n border-color: color-mix(\n in srgb,\n var(--viking-accent) 80%,\n var(--viking-black)\n );\n box-shadow: var(--viking-shadow-sm);\n }\n .viking-nav-link.viking-disabled {\n opacity: var(--viking-state-disabled-opacity);\n cursor: not-allowed;\n }\n `,\n ],\n})\nexport class VikingNavigationMenu {\n readonly label = input(\"Main\");\n readonly items = input<VikingNavItem[]>([]);\n}\n","import { ChangeDetectionStrategy, Component, input } from \"@angular/core\";\nimport { NgTemplateOutlet } from \"@angular/common\";\nimport { VikingIcon } from \"../icon/icon\";\nimport { VikingIconName } from \"../../core/icons\";\n\n/**\n * viking-navbar — horizontal navigation container.\n * Compose with viking-navbar-item and any other inline content.\n */\n@Component({\n selector: \"viking-navbar\",\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: { \"[attr.aria-label]\": \"label()\" },\n template: `<nav class=\"viking-navbar\" [attr.aria-label]=\"label()\">\n <ng-content />\n </nav>`,\n styles: [\n `\n :host {\n display: block;\n }\n .viking-navbar {\n display: flex;\n align-items: center;\n gap: var(--viking-space-half);\n flex-wrap: wrap;\n padding: var(--viking-space-half);\n background: color-mix(in srgb, var(--viking-surface) 96%, transparent);\n border: 1px solid var(--viking-border);\n border-radius: var(--viking-radius-lg);\n box-shadow: var(--viking-shadow-sm);\n }\n `,\n ],\n})\nexport class VikingNavbar {\n readonly label = input<string>(\"Primary\");\n}\n\n/** Navigation link/button inside viking-navbar. */\n@Component({\n selector: \"viking-navbar-item\",\n imports: [VikingIcon, NgTemplateOutlet],\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <ng-template #content>\n @if (icon()) {\n <viking-icon [name]=\"icon()!\" [size]=\"18\" />\n }\n <ng-content />\n </ng-template>\n\n @if (href()) {\n <a\n class=\"viking-navbar-item\"\n [href]=\"href()\"\n [class.viking-current]=\"current()\"\n [attr.aria-current]=\"current() ? 'page' : null\"\n >\n <ng-container *ngTemplateOutlet=\"content\" />\n </a>\n } @else {\n <button\n type=\"button\"\n class=\"viking-navbar-item\"\n [class.viking-current]=\"current()\"\n >\n <ng-container *ngTemplateOutlet=\"content\" />\n </button>\n }\n `,\n styles: [\n `\n :host {\n display: inline-flex;\n }\n .viking-navbar-item {\n display: inline-flex;\n align-items: center;\n gap: var(--viking-space-1);\n border: 1px solid transparent;\n background: transparent;\n color: var(--viking-text-muted);\n font-family: var(--viking-font-family);\n font-size: var(--viking-font-size-sm);\n font-weight: var(--viking-font-weight-medium);\n padding: var(--viking-space-1) var(--viking-space-1-5);\n border-radius: var(--viking-radius);\n text-decoration: none;\n cursor: pointer;\n transition: var(--viking-transition-interactive);\n position: relative;\n }\n .viking-navbar-item:hover {\n color: var(--viking-text);\n background: var(--viking-accent-soft);\n }\n .viking-navbar-item:focus-visible {\n outline: var(--viking-ring-width) solid var(--viking-ring);\n outline-offset: var(--viking-ring-offset);\n }\n .viking-current {\n color: var(--viking-text);\n font-weight: var(--viking-font-weight-semibold);\n background: var(--viking-accent-soft);\n }\n .viking-current::after {\n content: \"\";\n position: absolute;\n bottom: 0;\n left: var(--viking-space-1);\n right: var(--viking-space-1);\n height: 2px;\n border-radius: var(--viking-radius-pill);\n background: var(--viking-accent);\n }\n `,\n ],\n})\nexport class VikingNavbarItem {\n readonly href = input<string | null>(null);\n readonly icon = input<VikingIconName | null>(null);\n readonly current = input<boolean>(false);\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n computed,\n input,\n model,\n output,\n} from \"@angular/core\";\nimport { VikingControl, provideVikingCva } from \"../core/cva\";\n\n/**\n * viking-otp-input — one-time-passcode input.\n * Auto-advances between cells and supports paste. ControlValueAccessor-compatible.\n */\n@Component({\n selector: \"viking-otp-input\",\n providers: [provideVikingCva(VikingOtpInput)],\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n \"[class.viking-otp-centered]\": \"centered()\",\n },\n template: `\n <div\n class=\"viking-otp\"\n role=\"group\"\n [attr.aria-label]=\"label() || 'One-time passcode'\"\n >\n @for (index of indexes(); track index) {\n <input\n class=\"viking-otp-cell\"\n type=\"text\"\n inputmode=\"numeric\"\n autocomplete=\"one-time-code\"\n maxlength=\"1\"\n [value]=\"value().charAt(index) || ''\"\n [disabled]=\"disabled() || formDisabled()\"\n [attr.aria-label]=\"'Digit ' + (index + 1)\"\n (input)=\"onCellInput($event, index)\"\n (keydown)=\"onKeydown($event, index)\"\n (paste)=\"onPaste($event)\"\n (blur)=\"onTouched()\"\n />\n }\n </div>\n `,\n styles: [\n `\n .viking-otp {\n display: flex;\n gap: var(--viking-space-1);\n }\n :host(.viking-otp-centered) .viking-otp {\n justify-content: center;\n width: 100%;\n gap: var(--viking-space-2);\n }\n .viking-otp-cell {\n width: var(--viking-control-height);\n height: var(--viking-control-height);\n text-align: center;\n font-family: var(--viking-font-family);\n font-size: var(--viking-font-size-lg);\n font-weight: var(--viking-font-weight-semibold);\n color: var(--viking-text);\n background: var(--viking-surface-alt);\n border: 1px solid var(--viking-border);\n border-radius: var(--viking-radius-sm);\n box-shadow: var(--viking-shadow-xs);\n transition: var(--viking-transition-interactive);\n font-variant-numeric: tabular-nums;\n }\n .viking-otp-cell:hover:not(:disabled) {\n border-color: color-mix(\n in srgb,\n var(--viking-accent) 35%,\n var(--viking-border-strong)\n );\n box-shadow: var(--viking-shadow-sm);\n }\n .viking-otp-cell:focus-visible {\n outline: var(--viking-ring-width) solid var(--viking-ring);\n outline-offset: var(--viking-ring-offset);\n border-color: var(--viking-accent);\n }\n .viking-otp-cell:disabled {\n opacity: var(--viking-state-disabled-opacity);\n }\n `,\n ],\n})\nexport class VikingOtpInput extends VikingControl<string> {\n readonly length = input<number>(6);\n readonly value = model<string>(\"\");\n readonly label = input<string>(\"\");\n readonly disabled = input<boolean>(false);\n readonly centered = input<boolean>(false);\n\n readonly completed = output<string>();\n\n constructor(private readonly host: ElementRef<HTMLElement>) {\n super();\n }\n\n protected readonly indexes = computed(() =>\n Array.from({ length: this.length() }, (_, index) => index),\n );\n\n writeValue(value: string): void {\n this.value.set(value ?? \"\");\n }\n\n private commit(next: string): void {\n this.value.set(next);\n this.onChange(next);\n if (next.length === this.length()) {\n this.completed.emit(next);\n }\n }\n\n private focusCell(index: number): void {\n const cells =\n this.host.nativeElement.querySelectorAll<HTMLInputElement>(\n \".viking-otp-cell\",\n );\n cells[Math.min(this.length() - 1, Math.max(0, index))]?.focus();\n }\n\n protected onCellInput = (event: Event, index: number): void => {\n const char = (event.target as HTMLInputElement).value\n .replace(/\\D/g, \"\")\n .slice(-1);\n const chars = this.value().padEnd(this.length(), \" \").split(\"\");\n chars[index] = char || \" \";\n this.commit(chars.join(\"\").trimEnd().replace(/ /g, \"\"));\n if (char) {\n this.focusCell(index + 1);\n }\n };\n\n protected onKeydown = (event: KeyboardEvent, index: number): void => {\n if (\n event.key === \"Backspace\" &&\n !(event.target as HTMLInputElement).value\n ) {\n this.focusCell(index - 1);\n } else if (event.key === \"ArrowLeft\") {\n this.focusCell(index - 1);\n } else if (event.key === \"ArrowRight\") {\n this.focusCell(index + 1);\n }\n };\n\n protected onPaste = (event: ClipboardEvent): void => {\n event.preventDefault();\n const digits = (event.clipboardData?.getData(\"text\") ?? \"\")\n .replace(/\\D/g, \"\")\n .slice(0, this.length());\n if (digits) {\n this.commit(digits);\n this.focusCell(digits.length - 1);\n }\n };\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n input,\n output,\n signal,\n} from \"@angular/core\";\nimport { VikingControl, provideVikingCva } from \"../core/cva\";\nimport { vikingUid } from \"../../core/uid\";\nimport { VikingOtpInput } from \"../otp-input/otp-input\";\n\n/**\n * viking-verification-code-field — labeled, centered OTP entry for MFA and phone verification flows.\n */\n@Component({\n selector: \"viking-verification-code-field\",\n imports: [VikingOtpInput],\n providers: [provideVikingCva(VikingVerificationCodeField)],\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: \"viking-verification-code-field\",\n \"[class.viking-verification-code-field-invalid]\": \"!!error()\",\n },\n template: `\n <fieldset class=\"viking-verification-code-fieldset\">\n @if (label()) {\n <legend class=\"viking-verification-code-label\" [id]=\"labelId\">\n {{ label() }}\n @if (required()) {\n <span class=\"viking-verification-code-required\" aria-hidden=\"true\"\n >*</span\n >\n }\n </legend>\n }\n <div class=\"viking-verification-code-control\">\n <viking-otp-input\n [length]=\"length()\"\n [value]=\"value()\"\n (valueChange)=\"onValueChange($event)\"\n [disabled]=\"disabled() || formDisabled()\"\n [label]=\"label()\"\n [centered]=\"true\"\n (completed)=\"completed.emit($event)\"\n />\n </div>\n </fieldset>\n @if (description() && !error()) {\n <p class=\"viking-verification-code-description\" [id]=\"descriptionId\">\n {{ description() }}\n </p>\n }\n @if (error()) {\n <p class=\"viking-verification-code-error\" [id]=\"errorId\" role=\"alert\">\n {{ error() }}\n </p>\n }\n `,\n styles: [\n `\n :host {\n display: block;\n width: 100%;\n font-family: var(--viking-font-family);\n }\n\n :host(.viking-verification-code-field-invalid) {\n animation: viking-shake var(--viking-duration-slow)\n var(--viking-ease-default);\n }\n\n .viking-verification-code-fieldset {\n margin: 0;\n padding: 0;\n border: 0;\n min-width: 0;\n width: 100%;\n }\n\n .viking-verification-code-label {\n display: block;\n width: 100%;\n margin-bottom: var(--viking-space-1);\n padding: 0;\n font-size: var(--viking-font-size-sm);\n font-weight: var(--viking-font-weight-semibold);\n color: var(--viking-text);\n letter-spacing: var(--viking-letter-spacing-wide);\n line-height: var(--viking-line-height-tight);\n text-align: center;\n }\n\n .viking-verification-code-required {\n color: var(--viking-danger);\n margin-left: 2px;\n }\n\n .viking-verification-code-control {\n display: flex;\n justify-content: center;\n width: 100%;\n }\n\n .viking-verification-code-description,\n .viking-verification-code-error {\n margin: var(--viking-space-1) 0 0;\n font-size: var(--viking-font-size-sm);\n line-height: var(--viking-line-height-normal);\n text-align: center;\n }\n\n .viking-verification-code-description {\n color: var(--viking-text-muted);\n }\n\n .viking-verification-code-error {\n color: var(--viking-danger-text, var(--viking-danger));\n font-weight: var(--viking-font-weight-semibold);\n }\n `,\n ],\n})\nexport class VikingVerificationCodeField extends VikingControl<string> {\n readonly length = input<number>(6);\n readonly label = input<string>(\"Verification Code\");\n readonly description = input<string>(\"\");\n readonly error = input<string>(\"\");\n readonly required = input<boolean>(false);\n readonly disabled = input<boolean>(false);\n\n readonly completed = output<string>();\n\n protected readonly value = signal<string>(\"\");\n protected readonly labelId = vikingUid(\"viking-verification-code-label\");\n protected readonly descriptionId = vikingUid(\n \"viking-verification-code-description\",\n );\n protected readonly errorId = vikingUid(\"viking-verification-code-error\");\n\n writeValue(value: string): void {\n this.value.set(value ?? \"\");\n }\n\n protected onValueChange = (next: string): void => {\n this.value.set(next);\n this.onChange(next);\n this.onTouched();\n };\n}\n","import { ChangeDetectionStrategy, Component, input } from \"@angular/core\";\nimport { Params, RouterLink } from \"@angular/router\";\nimport { VikingIcon } from \"../icon/icon\";\n\n/**\n * viking-page-back-link — consistent dashboard back navigation with fixed spacing\n * below the control so page titles never sit flush against the link.\n */\n@Component({\n selector: \"viking-page-back-link\",\n imports: [RouterLink, VikingIcon],\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: \"viking-page-back-link-host\",\n },\n template: `\n <nav\n class=\"viking-page-back-nav page-back-nav\"\n [attr.aria-label]=\"navLabel()\"\n >\n <a\n class=\"viking-page-back-link back-link\"\n [routerLink]=\"route()\"\n [queryParams]=\"queryParams()\"\n [attr.aria-label]=\"label()\"\n >\n <viking-icon name=\"arrow-left\" [size]=\"18\" color=\"accent\" />\n <span>{{ label() }}</span>\n </a>\n </nav>\n `,\n styles: [\n `\n :host {\n display: block;\n width: 100%;\n }\n\n .viking-page-back-nav {\n margin: 0;\n padding: 0;\n }\n\n .viking-page-back-link {\n display: inline-flex;\n align-items: center;\n gap: var(--viking-space-1);\n padding: var(--viking-space-half) 0;\n font-family: var(--viking-font-family);\n font-size: var(--viking-font-size-sm);\n font-weight: var(--viking-font-weight-semibold);\n color: var(--viking-accent-strong);\n text-decoration: none;\n border-radius: var(--viking-radius-xs);\n transition: var(--viking-transition-interactive);\n }\n\n .viking-page-back-link:hover {\n color: var(--viking-accent);\n }\n\n .viking-page-back-link:focus-visible {\n outline: var(--viking-ring-width) solid var(--viking-ring);\n outline-offset: var(--viking-ring-offset);\n }\n `,\n ],\n})\nexport class VikingPageBackLink {\n readonly route = input<string | readonly string[]>(\"/dashboard\");\n readonly queryParams = input<Params | null>(null);\n readonly label = input<string>(\"Back to Dashboard\");\n readonly navLabel = input<string>(\"Return to dashboard\");\n}\n","import { ChangeDetectionStrategy, Component, input } from \"@angular/core\";\nimport { Params } from \"@angular/router\";\nimport { VikingPageBackLink } from \"../page-back-link/page-back-link\";\n\n/**\n * viking-page-header — unified HUD page title block (tag, title, subtitle) with\n * optional back navigation and action slots.\n */\n@Component({\n selector: \"viking-page-header\",\n imports: [VikingPageBackLink],\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n \"[class.viking-page-header-sidebar]\": \"layout() === 'sidebar'\",\n },\n template: `\n <header\n class=\"viking-page-header\"\n [class.dashboard-topbar]=\"layout() === 'sidebar'\"\n [class.hud-header]=\"layout() === 'hud'\"\n >\n <div class=\"viking-page-header-main title-group topbar-left\">\n @if (backTo()) {\n <viking-page-back-link\n [route]=\"backTo()!\"\n [queryParams]=\"backQueryParams()\"\n [label]=\"backLabel()\"\n [navLabel]=\"backNavLabel()\"\n />\n } @else {\n <ng-content select=\"[vikingPageHeaderBack]\" />\n }\n\n <div class=\"viking-page-header-title-block\">\n @if (tag()) {\n <div class=\"section-tag-row\">\n <span class=\"section-tag viking-page-header-tag\">{{\n tag()\n }}</span>\n </div>\n }\n <h1 class=\"viking-page-header-title hud-title page-title\">\n {{ title() }}\n </h1>\n @if (subtitle()) {\n <p\n class=\"viking-page-header-subtitle hud-subtitle page-description\"\n >\n {{ subtitle() }}\n </p>\n }\n <ng-content select=\"[vikingPageHeaderExtra]\" />\n </div>\n </div>\n <div class=\"viking-page-header-actions topbar-right\">\n <ng-content select=\"[vikingPageHeaderActions]\" />\n </div>\n </header>\n `,\n})\nexport class VikingPageHeader {\n readonly tag = input<string>(\"\");\n readonly title = input.required<string>();\n readonly subtitle = input<string>(\"\");\n readonly layout = input<\"hud\" | \"sidebar\">(\"hud\");\n readonly backTo = input<string | readonly string[] | null>(null);\n readonly backQueryParams = input<Params | null>(null);\n readonly backLabel = input<string>(\"Back to Dashboard\");\n readonly backNavLabel = input<string>(\"Return to dashboard\");\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n input,\n model,\n} from \"@angular/core\";\nimport { VikingIcon } from \"../icon/icon\";\n\n/**\n * viking-pagination — page navigation.\n */\n@Component({\n selector: \"viking-pagination\",\n imports: [VikingIcon],\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <nav class=\"viking-pagination\" aria-label=\"Pagination\">\n <button\n type=\"button\"\n class=\"viking-page-btn\"\n aria-label=\"Previous page\"\n [disabled]=\"page() <= 1\"\n (click)=\"goTo(page() - 1)\"\n >\n <viking-icon name=\"chevron-left\" [size]=\"18\" />\n </button>\n @for (item of pageItems(); track $index) {\n @if (item === null) {\n <span class=\"viking-page-ellipsis\" aria-hidden=\"true\">…</span>\n } @else {\n <button\n type=\"button\"\n class=\"viking-page-btn\"\n [class.viking-page-current]=\"item === page()\"\n [attr.aria-current]=\"item === page() ? 'page' : null\"\n [attr.aria-label]=\"'Page ' + item\"\n (click)=\"goTo(item)\"\n >\n {{ item }}\n </button>\n }\n }\n <button\n type=\"button\"\n class=\"viking-page-btn\"\n aria-label=\"Next page\"\n [disabled]=\"page() >= totalPages()\"\n (click)=\"goTo(page() + 1)\"\n >\n <viking-icon name=\"chevron-right\" [size]=\"18\" />\n </button>\n </nav>\n `,\n styles: [\n `\n .viking-pagination {\n display: flex;\n align-items: center;\n gap: calc(var(--viking-space-1) / 2);\n flex-wrap: wrap;\n }\n .viking-page-btn {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n min-width: var(--viking-control-height-sm);\n height: var(--viking-control-height-sm);\n padding: 0 var(--viking-space-1);\n border: 1px solid var(--viking-border-subtle);\n border-radius: var(--viking-radius);\n background: var(--viking-surface);\n color: var(--viking-text);\n font-family: var(--viking-font-family);\n font-size: var(--viking-font-size-sm);\n font-weight: var(--viking-font-weight-medium);\n cursor: pointer;\n transition: var(--viking-transition-interactive);\n font-variant-numeric: tabular-nums;\n box-shadow: var(--viking-shadow-xs);\n }\n .viking-page-btn:hover:not(:disabled):not(.viking-page-current) {\n background: var(--viking-accent-soft);\n border-color: var(--viking-accent-strong);\n transform: translateY(var(--viking-state-hover-lift));\n }\n .viking-page-btn:active:not(:disabled):not(.viking-page-current) {\n transform: translateY(0) scale(var(--viking-state-active-scale));\n }\n .viking-page-btn:focus-visible {\n outline: var(--viking-ring-width) solid var(--viking-ring);\n outline-offset: var(--viking-ring-offset);\n }\n .viking-page-btn:disabled {\n opacity: var(--viking-state-disabled-opacity);\n cursor: not-allowed;\n }\n .viking-page-current {\n background: var(--viking-accent);\n border-color: color-mix(\n in srgb,\n var(--viking-accent) 80%,\n var(--viking-black)\n );\n color: var(--viking-accent-content);\n font-size: var(--viking-font-size-sm);\n font-weight: var(--viking-font-weight-bold);\n box-shadow: var(--viking-shadow-sm);\n }\n .viking-page-ellipsis {\n color: var(--viking-text-muted);\n padding: 0 var(--viking-space-1);\n font-size: var(--viking-font-size);\n }\n `,\n ],\n})\nexport class VikingPagination {\n readonly page = model<number>(1);\n readonly totalPages = input.required<number>();\n\n /** Windowed page list with null entries marking ellipses. */\n protected readonly pageItems = computed<(number | null)[]>(() => {\n const total = this.totalPages();\n const current = this.page();\n if (total <= 7) {\n return Array.from({ length: total }, (_, index) => index + 1);\n }\n const pages = new Set<number>([\n 1,\n 2,\n total - 1,\n total,\n current - 1,\n current,\n current + 1,\n ]);\n const sorted = [...pages]\n .filter((value) => value >= 1 && value <= total)\n .sort((a, b) => a - b);\n const items: (number | null)[] = [];\n let previous = 0;\n for (const value of sorted) {\n if (value - previous > 1) {\n items.push(null);\n }\n items.push(value);\n previous = value;\n }\n return items;\n });\n\n protected goTo = (target: number): void => {\n const clamped = Math.min(this.totalPages(), Math.max(1, target));\n this.page.set(clamped);\n };\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n input,\n model,\n signal,\n} from \"@angular/core\";\nimport { VikingControl, provideVikingCva } from \"../core/cva\";\nimport { VikingIcon } from \"../icon/icon\";\n\n/**\n * viking-pillbox — multi-value tag input.\n * Type and press Enter (or comma) to add pills. ControlValueAccessor-compatible.\n */\n@Component({\n selector: \"viking-pillbox\",\n imports: [VikingIcon],\n providers: [provideVikingCva(VikingPillbox)],\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <div\n class=\"viking-control viking-pillbox\"\n [class.viking-disabled]=\"disabled() || formDisabled()\"\n role=\"group\"\n [attr.aria-label]=\"label() || 'Tags'\"\n >\n @for (pill of values(); track pill) {\n <span class=\"viking-pill\">\n {{ pill }}\n <button\n type=\"button\"\n class=\"viking-pill-remove\"\n [attr.aria-label]=\"'Remove ' + pill\"\n [disabled]=\"disabled() || formDisabled()\"\n (click)=\"remove(pill)\"\n >\n <viking-icon name=\"x\" [size]=\"13\" />\n </button>\n </span>\n }\n <input\n type=\"text\"\n [placeholder]=\"values().length === 0 ? placeholder() : ''\"\n [value]=\"draft()\"\n [disabled]=\"disabled() || formDisabled()\"\n [attr.aria-label]=\"label() || placeholder() || 'Add tag'\"\n (input)=\"draft.set($any($event.target).value)\"\n (keydown)=\"onKeydown($event)\"\n (blur)=\"onTouched()\"\n />\n </div>\n `,\n styles: [\n `\n .viking-pillbox {\n display: flex;\n align-items: center;\n flex-wrap: wrap;\n gap: calc(var(--viking-space-1) / 1.5);\n min-height: var(--viking-control-height);\n padding: calc(var(--viking-space-1) / 1.5) var(--viking-space-1);\n background: var(--viking-surface);\n border: 1px solid var(--viking-border-strong);\n border-radius: var(--viking-radius);\n box-shadow: var(--viking-shadow-sm);\n transition: var(--viking-transition);\n cursor: text;\n }\n .viking-pillbox:focus-within {\n outline: var(--viking-ring-width) solid var(--viking-ring);\n outline-offset: var(--viking-ring-offset);\n }\n .viking-disabled {\n opacity: var(--viking-state-disabled-opacity);\n }\n .viking-pill {\n display: inline-flex;\n align-items: center;\n gap: 5px;\n font-family: var(--viking-font-family);\n font-size: var(--viking-font-size);\n font-weight: 500;\n color: var(--viking-text);\n background: var(--viking-accent-soft);\n border: 1px solid var(--viking-accent-strong);\n border-radius: var(--viking-radius-pill);\n padding: 2px var(--viking-space-1);\n line-height: 1.35;\n }\n .viking-pill-remove {\n display: inline-flex;\n border: none;\n background: transparent;\n color: var(--viking-text-muted);\n cursor: pointer;\n padding: 2px;\n border-radius: var(--viking-radius-pill);\n }\n .viking-pill-remove:hover {\n color: var(--viking-danger);\n }\n .viking-pill-remove:focus-visible {\n outline: var(--viking-ring-width) solid var(--viking-ring);\n outline-offset: 1px;\n }\n input {\n flex: 1;\n min-width: 108px;\n border: none;\n outline: none;\n background: transparent;\n color: var(--viking-text);\n font-family: var(--viking-font-family);\n font-size: var(--viking-font-size);\n padding: calc(var(--viking-space-1) / 2);\n }\n input::placeholder {\n color: var(--viking-text-muted);\n }\n `,\n ],\n})\nexport class VikingPillbox extends VikingControl<string[]> {\n readonly values = model<string[]>([]);\n readonly placeholder = input<string>(\"Add a tag…\");\n readonly label = input<string>(\"\");\n readonly disabled = input<boolean>(false);\n\n protected readonly draft = signal(\"\");\n\n writeValue(value: string[]): void {\n this.values.set(value ?? []);\n }\n\n protected onKeydown = (event: KeyboardEvent): void => {\n if (event.key === \"Enter\" || event.key === \",\") {\n event.preventDefault();\n const next = this.draft().trim().replace(/,$/, \"\");\n if (next && !this.values().includes(next)) {\n this.values.update((list) => [...list, next]);\n this.onChange(this.values());\n }\n this.draft.set(\"\");\n } else if (\n event.key === \"Backspace\" &&\n !this.draft() &&\n this.values().length > 0\n ) {\n this.remove(this.values()[this.values().length - 1]);\n }\n };\n\n protected remove = (pill: string): void => {\n this.values.update((list) => list.filter((item) => item !== pill));\n this.onChange(this.values());\n };\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n input,\n model,\n} from \"@angular/core\";\n\n/**\n * viking-popover — anchored floating panel.\n * Project the trigger with the `vikingTrigger` attribute; everything else becomes\n * the panel content. Closes on Escape or outside interaction.\n */\n@Component({\n selector: \"viking-popover\",\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n \"(click)\": \"onHostClick($event)\",\n \"(document:click)\": \"onDocumentClick($event)\",\n \"(keydown.escape)\": \"open.set(false)\",\n },\n template: `\n <span class=\"viking-popover-trigger\">\n <ng-content select=\"[vikingTrigger]\" />\n </span>\n @if (open()) {\n <div\n class=\"viking-popover-panel\"\n [class.viking-popover-end]=\"align() === 'end'\"\n role=\"dialog\"\n >\n <ng-content />\n </div>\n }\n `,\n styles: [\n `\n :host {\n position: relative;\n display: inline-block;\n }\n .viking-popover-trigger {\n display: inline-flex;\n }\n .viking-popover-panel {\n position: absolute;\n top: calc(100% + var(--viking-space-1));\n left: 0;\n min-width: 234px;\n max-width: 90vw;\n background: var(--viking-surface);\n border: 1px solid var(--viking-border-strong);\n border-radius: var(--viking-radius);\n box-shadow: var(--viking-shadow-md);\n padding: var(--viking-space-2);\n z-index: var(--viking-z-overlay);\n font-family: var(--viking-font-family);\n font-size: var(--viking-font-size-ui);\n color: var(--viking-text);\n }\n .viking-popover-end {\n left: auto;\n right: 0;\n }\n `,\n ],\n})\nexport class VikingPopover {\n readonly open = model<boolean>(false);\n readonly align = input<\"start\" | \"end\">(\"start\");\n\n constructor(private readonly host: ElementRef<HTMLElement>) {}\n\n /** Toggles when the (focusable, projected) trigger is activated. */\n protected onHostClick = (event: Event): void => {\n const trigger = this.host.nativeElement.querySelector(\n \".viking-popover-trigger\",\n );\n if (trigger?.contains(event.target as Node)) {\n this.open.update((value) => !value);\n }\n };\n\n protected onDocumentClick = (event: Event): void => {\n if (\n this.open() &&\n !this.host.nativeElement.contains(event.target as Node)\n ) {\n this.open.set(false);\n }\n };\n}\n","import { ChangeDetectionStrategy, Component, input } from \"@angular/core\";\nimport { VikingAvatar } from \"../avatar/avatar\";\nimport { VikingTone } from \"../../core/types\";\n\n/**\n * viking-profile — user identity block.\n * Project actions (e.g. viking-button) as content.\n */\n@Component({\n selector: \"viking-profile\",\n imports: [VikingAvatar],\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <viking-avatar\n [src]=\"avatarSrc()\"\n [name]=\"name()\"\n [size]=\"45\"\n [status]=\"status()\"\n />\n <div class=\"viking-profile-identity\">\n <span class=\"viking-profile-name\">{{ name() }}</span>\n @if (detail()) {\n <span class=\"viking-profile-detail\">{{ detail() }}</span>\n }\n </div>\n <div class=\"viking-profile-actions\"><ng-content /></div>\n `,\n styles: [\n `\n :host {\n display: flex;\n align-items: center;\n gap: var(--viking-space-2);\n font-family: var(--viking-font-family);\n }\n .viking-profile-identity {\n display: flex;\n flex-direction: column;\n min-width: 0;\n flex: 1;\n }\n .viking-profile-name {\n font-size: var(--viking-font-size);\n font-weight: 600;\n color: var(--viking-text);\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n }\n .viking-profile-detail {\n font-size: var(--viking-font-size);\n color: var(--viking-text-muted);\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n }\n .viking-profile-actions {\n display: flex;\n align-items: center;\n gap: var(--viking-space-1);\n }\n .viking-profile-actions:empty {\n display: none;\n }\n `,\n ],\n})\nexport class VikingProfile {\n readonly name = input.required<string>();\n readonly detail = input<string>(\"\");\n readonly avatarSrc = input<string | null>(null);\n readonly status = input<VikingTone | null>(null);\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n input,\n} from \"@angular/core\";\nimport { VikingTone } from \"../../core/types\";\n\n/**\n * viking-progress — determinate/indeterminate progress bar\n *.\n */\n@Component({\n selector: \"viking-progress\",\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n @if (label()) {\n <div class=\"viking-progress-header\">\n <span class=\"viking-progress-label\">{{ label() }}</span>\n @if (!indeterminate()) {\n <span class=\"viking-progress-value\">{{ clamped() }}%</span>\n }\n </div>\n }\n <div\n class=\"viking-progress-track\"\n role=\"progressbar\"\n [attr.aria-label]=\"label() || 'Progress'\"\n [attr.aria-valuemin]=\"0\"\n [attr.aria-valuemax]=\"100\"\n [attr.aria-valuenow]=\"indeterminate() ? null : clamped()\"\n >\n <div\n class=\"viking-progress-bar\"\n [class.viking-indeterminate]=\"indeterminate()\"\n [class]=\"'viking-bar-' + tone()\"\n [style.width.%]=\"indeterminate() ? 40 : clamped()\"\n ></div>\n </div>\n `,\n styles: [\n `\n :host {\n display: block;\n font-family: var(--viking-font-family);\n }\n .viking-progress-header {\n display: flex;\n justify-content: space-between;\n gap: var(--viking-space-2);\n margin-bottom: calc(var(--viking-space-1) / 2);\n font-size: var(--viking-font-size);\n }\n .viking-progress-label {\n color: var(--viking-text);\n font-weight: 500;\n }\n .viking-progress-value {\n color: var(--viking-text-muted);\n font-variant-numeric: tabular-nums;\n }\n .viking-progress-track {\n position: relative;\n height: var(--viking-space-1);\n border-radius: var(--viking-radius-pill);\n background: var(--viking-surface-alt);\n border: 1px solid var(--viking-border);\n overflow: hidden;\n }\n .viking-progress-bar {\n height: 100%;\n border-radius: var(--viking-radius-pill);\n background: var(--viking-accent);\n transition: width 0.3s ease;\n }\n .viking-bar-secondary {\n background: var(--viking-accent-secondary);\n }\n .viking-bar-success {\n background: var(--viking-success);\n }\n .viking-bar-info {\n background: var(--viking-info);\n }\n .viking-bar-warning {\n background: var(--viking-warning);\n }\n .viking-bar-danger {\n background: var(--viking-danger);\n }\n .viking-bar-muted {\n background: var(--viking-text-muted);\n }\n .viking-indeterminate {\n position: absolute;\n animation: viking-progress-slide 1.2s ease-in-out infinite;\n }\n @keyframes viking-progress-slide {\n from {\n left: -40%;\n }\n to {\n left: 100%;\n }\n }\n @media (prefers-reduced-motion: reduce) {\n .viking-indeterminate {\n animation-duration: 2.4s;\n }\n }\n `,\n ],\n})\nexport class VikingProgress {\n readonly value = input<number>(0);\n readonly label = input<string>(\"\");\n readonly tone = input<VikingTone>(\"accent\");\n readonly indeterminate = input<boolean>(false);\n\n protected readonly clamped = computed(() =>\n Math.min(100, Math.max(0, Math.round(this.value()))),\n );\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n input,\n model,\n} from \"@angular/core\";\nimport { VikingControl, provideVikingCva } from \"../core/cva\";\nimport { VikingSelectOption } from \"../../core/types\";\nimport { vikingUid } from \"../../core/uid\";\n\n/**\n * viking-radio-group — radio group.\n * ControlValueAccessor-compatible; options-driven for symmetry with viking-select.\n */\n@Component({\n selector: \"viking-radio-group\",\n providers: [provideVikingCva(VikingRadioGroup)],\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n role: \"radiogroup\",\n \"[attr.aria-label]\": \"label() || null\",\n \"[class.viking-radio-row]\": \"orientation() === 'horizontal'\",\n },\n template: `\n @for (option of options(); track option.label) {\n <label\n class=\"viking-radio\"\n [class.viking-disabled]=\"\n option.disabled || disabled() || formDisabled()\n \"\n >\n <span\n class=\"viking-radio-dot\"\n [class.viking-checked]=\"option.value === value()\"\n >\n <input\n type=\"radio\"\n [name]=\"groupName\"\n [checked]=\"option.value === value()\"\n [disabled]=\"option.disabled || disabled() || formDisabled()\"\n (change)=\"select(option)\"\n (blur)=\"onTouched()\"\n />\n </span>\n <span class=\"viking-radio-label\">{{ option.label }}</span>\n </label>\n }\n `,\n styles: [\n `\n :host {\n display: flex;\n flex-direction: column;\n gap: var(--viking-space-1);\n font-family: var(--viking-font-family);\n }\n :host(.viking-radio-row) {\n flex-direction: row;\n flex-wrap: wrap;\n gap: var(--viking-space-2);\n }\n .viking-radio {\n display: inline-flex;\n align-items: center;\n gap: var(--viking-space-1);\n cursor: pointer;\n }\n .viking-disabled {\n opacity: var(--viking-state-disabled-opacity);\n cursor: not-allowed;\n }\n .viking-radio-dot {\n position: relative;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: var(--viking-space-2);\n height: var(--viking-space-2);\n border-radius: var(--viking-radius-pill);\n border: 1px solid var(--viking-border-strong);\n background: var(--viking-surface);\n transition: var(--viking-transition);\n flex-shrink: 0;\n box-sizing: border-box;\n }\n /* The native input fills the visual dot so clicks and focus land on it. */\n .viking-radio-dot input {\n position: absolute;\n inset: 0;\n width: 100%;\n height: 100%;\n margin: 0;\n opacity: 0;\n cursor: pointer;\n }\n .viking-radio:hover:not(.viking-disabled) .viking-radio-dot {\n border-color: var(--viking-accent-strong);\n }\n .viking-radio-dot.viking-checked {\n border-color: var(--viking-accent);\n border-width: 5px;\n background: var(--viking-accent-content);\n }\n .viking-radio-dot:has(input:focus-visible) {\n outline: var(--viking-ring-width) solid var(--viking-ring);\n outline-offset: var(--viking-ring-offset);\n }\n .viking-radio-label {\n font-size: var(--viking-font-size);\n color: var(--viking-text);\n }\n `,\n ],\n})\nexport class VikingRadioGroup extends VikingControl<unknown> {\n readonly options = input.required<VikingSelectOption[]>();\n readonly value = model<unknown>(null);\n readonly label = input<string>(\"\");\n readonly disabled = input<boolean>(false);\n readonly orientation = input<\"vertical\" | \"horizontal\">(\"vertical\");\n\n protected readonly groupName = vikingUid(\"viking-radio\");\n\n writeValue(value: unknown): void {\n this.value.set(value);\n }\n\n protected select = (option: VikingSelectOption): void => {\n this.value.set(option.value);\n this.onChange(option.value);\n };\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n input,\n} from \"@angular/core\";\n\n/** viking-ring-gauge — circular progress ring for health/score displays. */\n@Component({\n selector: \"viking-ring-gauge\",\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: \"viking-ring-gauge\",\n \"aria-hidden\": \"true\",\n \"[attr.data-status]\": \"status()\",\n },\n template: `\n <svg class=\"viking-ring-gauge-svg\" viewBox=\"0 0 120 120\" fill=\"none\">\n <circle class=\"viking-ring-bg\" cx=\"60\" cy=\"60\" r=\"52\" />\n <circle\n class=\"viking-ring-fill\"\n cx=\"60\"\n cy=\"60\"\n r=\"52\"\n stroke-linecap=\"round\"\n [attr.stroke-dasharray]=\"strokeDasharray()\"\n />\n </svg>\n `,\n styles: [\n `\n :host {\n display: block;\n width: 100%;\n height: 100%;\n color: var(--viking-accent);\n }\n\n .viking-ring-gauge-svg {\n width: 100%;\n height: 100%;\n shape-rendering: geometricPrecision;\n }\n\n .viking-ring-bg,\n .viking-ring-fill {\n fill: none;\n stroke-width: 10;\n transform: rotate(-90deg);\n transform-origin: 50% 50%;\n }\n\n .viking-ring-bg {\n stroke: color-mix(in srgb, var(--viking-text-muted) 20%, transparent);\n }\n\n .viking-ring-fill {\n stroke: currentColor;\n transition: stroke-dasharray 0.4s var(--viking-ease-default);\n }\n `,\n ],\n})\nexport class VikingRingGauge {\n readonly value = input.required<number>();\n readonly max = input<number>(100);\n readonly circumference = input<number>(327);\n readonly status = input<string>(\"\");\n\n protected readonly strokeDasharray = computed(() => {\n const pct = Math.max(0, Math.min(1, this.value() / this.max()));\n const filled = pct * this.circumference();\n return `${filled} ${this.circumference()}`;\n });\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n effect,\n input,\n model,\n output,\n viewChild,\n} from \"@angular/core\";\nimport { VikingIcon } from \"../icon/icon\";\nimport { VikingKbd } from \"../kbd/kbd\";\n\n/**\n * viking-search-palette — command-palette style search overlay (Product Hunt / Algolia inspired).\n * Project custom result lists into the body slot; ⌘K / Ctrl+K wired by host app static widget.\n */\n@Component({\n selector: \"viking-search-palette\",\n imports: [VikingIcon, VikingKbd],\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: { \"(keydown.escape)\": \"close()\" },\n template: `\n @if (open()) {\n <div\n class=\"viking-search-palette-backdrop\"\n role=\"presentation\"\n tabindex=\"-1\"\n (click)=\"close()\"\n (keydown.escape)=\"close()\"\n >\n <div\n class=\"viking-search-palette\"\n role=\"dialog\"\n aria-label=\"Search\"\n tabindex=\"-1\"\n (click)=\"$event.stopPropagation()\"\n (keydown)=\"$event.stopPropagation()\"\n >\n <div class=\"viking-search-palette-header\">\n <viking-icon name=\"search\" [size]=\"24\" />\n <input\n #queryInput\n type=\"text\"\n class=\"viking-search-palette-input\"\n [placeholder]=\"placeholder()\"\n [value]=\"query()\"\n [attr.aria-label]=\"placeholder()\"\n (input)=\"onQueryInput($event)\"\n />\n <button\n type=\"button\"\n class=\"viking-search-palette-close\"\n aria-label=\"Close search\"\n (click)=\"close()\"\n >\n <viking-icon name=\"x\" [size]=\"20\" />\n </button>\n </div>\n <div\n class=\"viking-search-palette-body\"\n tabindex=\"-1\"\n (keydown)=\"paletteKeydown.emit($event)\"\n >\n <ng-content />\n </div>\n <footer class=\"viking-search-palette-footer\">\n <ng-content select=\"[vikingSearchPaletteFooter]\" />\n <span class=\"viking-search-palette-shortcut\">\n <viking-kbd>{{ modKey() }}</viking-kbd\n ><viking-kbd>K</viking-kbd> toggle · <viking-kbd>↑</viking-kbd\n ><viking-kbd>↓</viking-kbd> navigate ·\n <viking-kbd>Enter</viking-kbd> open ·\n <viking-kbd>Esc</viking-kbd> close\n </span>\n </footer>\n </div>\n </div>\n }\n `,\n styleUrl: \"./search-palette.scss\",\n})\nexport class VikingSearchPalette {\n readonly open = model<boolean>(false);\n readonly query = model<string>(\"\");\n readonly placeholder = input<string>(\"Search...\");\n readonly paletteKeydown = output<KeyboardEvent>();\n\n private readonly queryInput =\n viewChild<ElementRef<HTMLInputElement>>(\"queryInput\");\n\n constructor() {\n effect(() => {\n if (this.open()) {\n queueMicrotask(() => this.queryInput()?.nativeElement.focus());\n }\n });\n }\n\n protected onQueryInput(event: Event): void {\n this.query.set((event.target as HTMLInputElement).value);\n }\n\n protected close(): void {\n this.open.set(false);\n }\n\n /** Platform modifier label for footer shortcut hint. */\n protected modKey = (): string =>\n typeof navigator !== \"undefined\" &&\n /Mac|iPhone|iPad/i.test(navigator.platform)\n ? \"⌘\"\n : \"Ctrl\";\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n computed,\n input,\n model,\n signal,\n} from \"@angular/core\";\nimport { VikingControl, provideVikingCva } from \"../core/cva\";\nimport { VikingIcon } from \"../icon/icon\";\nimport { VikingSelectOption } from \"../../core/types\";\n\nexport type VikingSelectWidth = \"full\" | \"half\";\n\n/**\n * viking-select — custom listbox select.\n * ControlValueAccessor-compatible with full keyboard support.\n */\n@Component({\n selector: \"viking-select\",\n imports: [VikingIcon],\n providers: [provideVikingCva(VikingSelect)],\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n \"(document:click)\": \"onDocumentClick($event)\",\n \"[class.viking-select-full]\": \"width() === 'full'\",\n \"[class.viking-select-half]\": \"width() === 'half'\",\n },\n template: `\n <button\n type=\"button\"\n class=\"viking-control viking-select-trigger\"\n [disabled]=\"disabled() || formDisabled()\"\n [attr.aria-expanded]=\"open()\"\n [attr.aria-label]=\"label() || placeholder()\"\n aria-haspopup=\"listbox\"\n (click)=\"toggle()\"\n (keydown)=\"onKeydown($event)\"\n >\n <span\n class=\"viking-select-value\"\n [class.viking-select-placeholder]=\"!selectedLabel()\"\n >\n {{ selectedLabel() || placeholder() }}\n </span>\n <viking-icon\n [name]=\"open() ? 'chevron-up' : 'chevron-down'\"\n [size]=\"18\"\n />\n </button>\n @if (open()) {\n <div\n class=\"viking-select-panel\"\n role=\"listbox\"\n [attr.aria-label]=\"label() || placeholder()\"\n >\n @for (option of options(); track option.label; let index = $index) {\n <button\n type=\"button\"\n role=\"option\"\n class=\"viking-select-option\"\n [class.viking-active]=\"index === activeIndex()\"\n [class.viking-selected]=\"option.value === value()\"\n [disabled]=\"option.disabled\"\n [attr.aria-selected]=\"option.value === value()\"\n (click)=\"pick(option)\"\n (mouseenter)=\"activeIndex.set(index)\"\n >\n <span class=\"viking-select-option-label\">{{ option.label }}</span>\n @if (option.value === value()) {\n <viking-icon name=\"check\" [size]=\"16\" />\n }\n </button>\n }\n </div>\n }\n `,\n styles: [\n `\n :host {\n position: relative;\n display: block;\n min-width: 0;\n }\n :host(.viking-select-full) {\n width: 100%;\n }\n :host(.viking-select-half) {\n width: 100%;\n max-width: var(--viking-select-half-max-width, min(100%, 24rem));\n }\n .viking-select-value {\n min-width: 0;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n }\n .viking-select-trigger {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: var(--viking-space-1);\n width: 100%;\n min-height: var(--viking-control-height);\n padding: 0 var(--viking-space-2);\n background: var(--viking-surface);\n border: 1px solid var(--viking-border-strong);\n border-radius: var(--viking-radius);\n box-shadow: var(--viking-shadow-sm);\n color: var(--viking-text);\n font-family: var(--viking-font-family);\n font-size: var(--viking-font-size);\n cursor: pointer;\n transition: var(--viking-transition-interactive);\n text-align: left;\n }\n .viking-select-trigger:hover:not(:disabled) {\n border-color: var(--viking-accent-strong);\n box-shadow: var(--viking-shadow-md);\n }\n .viking-select-trigger:focus-visible {\n outline: var(--viking-ring-width) solid var(--viking-ring);\n outline-offset: var(--viking-ring-offset);\n }\n .viking-select-trigger:disabled {\n opacity: var(--viking-state-disabled-opacity);\n cursor: not-allowed;\n }\n .viking-select-placeholder {\n color: var(--viking-text-muted);\n }\n .viking-select-panel {\n position: absolute;\n top: calc(100% + var(--viking-space-half));\n left: 0;\n width: 100%;\n min-width: 100%;\n max-width: 100%;\n box-sizing: border-box;\n display: flex;\n flex-direction: column;\n gap: 2px;\n margin: 0;\n padding: var(--viking-space-1);\n background-color: var(\n --viking-select-panel-bg,\n var(--viking-surface-raised)\n );\n border: 1px solid var(--viking-border-strong);\n border-radius: var(--viking-radius);\n box-shadow: var(--viking-shadow-lg);\n z-index: var(--viking-z-overlay);\n max-height: 315px;\n overflow: auto;\n isolation: isolate;\n animation: viking-slide-up var(--viking-duration-fast)\n var(--viking-ease-default);\n }\n .viking-select-option {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: var(--viking-space-1);\n padding: var(--viking-space-1) var(--viking-space-1-5);\n border: none;\n background: transparent;\n text-align: left;\n width: 100%;\n min-width: 0;\n border-radius: var(--viking-radius-sm);\n font-family: var(--viking-font-family);\n font-size: var(--viking-font-size-sm);\n color: var(--viking-text);\n cursor: pointer;\n transition: var(--viking-transition-interactive);\n }\n .viking-select-option-label {\n min-width: 0;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n }\n .viking-select-option:disabled {\n opacity: var(--viking-state-disabled-opacity);\n cursor: not-allowed;\n }\n .viking-select-option:focus-visible {\n outline: var(--viking-ring-width) solid var(--viking-ring);\n outline-offset: -2px;\n }\n .viking-active {\n background: var(--viking-accent-soft);\n color: var(--viking-text);\n }\n .viking-selected {\n font-weight: var(--viking-font-weight-semibold);\n color: var(--viking-accent-strong);\n background: color-mix(\n in srgb,\n var(--viking-accent) 14%,\n var(--viking-select-panel-bg, var(--viking-surface-raised))\n );\n }\n `,\n ],\n})\nexport class VikingSelect extends VikingControl<unknown> {\n readonly options = input.required<VikingSelectOption[]>();\n readonly value = model<unknown>(null);\n readonly placeholder = input<string>(\"Select…\");\n readonly label = input<string>(\"\");\n readonly disabled = input<boolean>(false);\n readonly width = input<VikingSelectWidth>(\"half\");\n\n constructor(private readonly host: ElementRef<HTMLElement>) {\n super();\n }\n\n protected readonly open = signal(false);\n protected readonly activeIndex = signal(0);\n\n protected readonly selectedLabel = computed(\n () =>\n this.options().find((option) => option.value === this.value())?.label ??\n \"\",\n );\n\n writeValue(value: unknown): void {\n this.value.set(value);\n }\n\n protected toggle = (): void => {\n this.open.update((value) => !value);\n if (this.open()) {\n const index = this.options().findIndex(\n (option) => option.value === this.value(),\n );\n this.activeIndex.set(Math.max(0, index));\n }\n };\n\n protected pick = (option: VikingSelectOption): void => {\n if (option.disabled) {\n return;\n }\n this.value.set(option.value);\n this.onChange(option.value);\n this.onTouched();\n this.open.set(false);\n };\n\n protected onKeydown = (event: KeyboardEvent): void => {\n const options = this.options();\n if (!this.open()) {\n if ([\"ArrowDown\", \"ArrowUp\", \"Enter\", \" \"].includes(event.key)) {\n event.preventDefault();\n this.toggle();\n }\n return;\n }\n switch (event.key) {\n case \"ArrowDown\":\n event.preventDefault();\n this.activeIndex.update((index) =>\n Math.min(options.length - 1, index + 1),\n );\n break;\n case \"ArrowUp\":\n event.preventDefault();\n this.activeIndex.update((index) => Math.max(0, index - 1));\n break;\n case \"Enter\":\n case \" \":\n event.preventDefault();\n this.pick(options[this.activeIndex()]);\n break;\n case \"Escape\":\n this.open.set(false);\n break;\n }\n };\n\n protected onDocumentClick = (event: Event): void => {\n if (\n this.open() &&\n !this.host.nativeElement.contains(event.target as Node)\n ) {\n this.open.set(false);\n }\n };\n}\n","import { ChangeDetectionStrategy, Component, input } from \"@angular/core\";\n\n/**\n * viking-scroll-area — constrained scroll region with clinical scrollbar styling.\n */\n@Component({\n selector: \"viking-scroll-area\",\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: \"viking-scroll-area\",\n \"[style.max-height]\": \"maxHeight()\",\n \"[style.max-width]\": \"maxWidth()\",\n },\n template: `<div class=\"viking-scroll-area-viewport\" tabindex=\"0\">\n <ng-content />\n </div>`,\n styles: [\n `\n :host {\n display: block;\n overflow: hidden;\n border: 1px solid var(--viking-border);\n border-radius: var(--viking-radius);\n background: var(--viking-surface);\n }\n .viking-scroll-area-viewport {\n max-height: inherit;\n overflow: auto;\n padding: var(--viking-space-2);\n font-family: var(--viking-font-family);\n font-size: var(--viking-font-size);\n color: var(--viking-text);\n scrollbar-width: thin;\n scrollbar-color: var(--viking-accent-strong) var(--viking-surface-alt);\n }\n .viking-scroll-area-viewport:focus-visible {\n outline: var(--viking-ring-width) solid var(--viking-ring);\n outline-offset: calc(-1 * var(--viking-ring-offset));\n }\n .viking-scroll-area-viewport::-webkit-scrollbar {\n width: 8px;\n height: 8px;\n }\n .viking-scroll-area-viewport::-webkit-scrollbar-thumb {\n background: var(--viking-accent-strong);\n border-radius: var(--viking-radius-pill);\n }\n .viking-scroll-area-viewport::-webkit-scrollbar-track {\n background: var(--viking-surface-alt);\n }\n `,\n ],\n})\nexport class VikingScrollArea {\n readonly maxHeight = input<string>(\"240px\");\n readonly maxWidth = input<string>(\"100%\");\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n effect,\n inject,\n input,\n model,\n viewChild,\n} from \"@angular/core\";\nimport { VikingIcon } from \"../icon/icon\";\n\nexport type VikingSheetSide = \"left\" | \"right\";\n\n/**\n * viking-sheet — slide-over panel.\n */\n@Component({\n selector: \"viking-sheet\",\n imports: [VikingIcon],\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <dialog\n #dialog\n class=\"viking-sheet\"\n [class.viking-sheet-left]=\"side() === 'left'\"\n tabindex=\"-1\"\n [attr.aria-label]=\"heading() || 'Panel'\"\n (close)=\"open.set(false)\"\n (click)=\"onBackdropClick($event)\"\n (keydown.escape)=\"dismissible() && open.set(false)\"\n >\n <div class=\"viking-sheet-surface\">\n <header class=\"viking-sheet-header\">\n @if (heading()) {\n <h2 class=\"viking-sheet-heading\">{{ heading() }}</h2>\n }\n @if (dismissible()) {\n <button\n type=\"button\"\n class=\"viking-sheet-close\"\n aria-label=\"Close panel\"\n (click)=\"open.set(false)\"\n >\n <viking-icon name=\"x\" [size]=\"20\" />\n </button>\n }\n </header>\n <div class=\"viking-sheet-body\"><ng-content /></div>\n <footer class=\"viking-sheet-footer\">\n <ng-content select=\"[vikingSheetActions]\" />\n </footer>\n </div>\n </dialog>\n `,\n styles: [\n `\n .viking-sheet {\n margin: 0;\n padding: 0;\n border: none;\n background: transparent;\n max-width: none;\n max-height: none;\n width: 100%;\n height: 100%;\n position: fixed;\n inset: 0;\n }\n .viking-sheet::backdrop {\n background: var(--viking-overlay-backdrop);\n backdrop-filter: blur(6px);\n animation: viking-backdrop-in var(--viking-duration-fast)\n var(--viking-ease-default);\n }\n .viking-sheet-surface {\n position: fixed;\n top: 0;\n right: 0;\n display: flex;\n flex-direction: column;\n width: min(420px, 100vw);\n height: 100%;\n background: var(--viking-surface);\n border-left: 1px solid var(--viking-border-strong);\n box-shadow: var(--viking-shadow-lg);\n font-family: var(--viking-font-family);\n animation: viking-slide-in-right var(--viking-duration)\n var(--viking-ease-default);\n }\n .viking-sheet-left .viking-sheet-surface {\n right: auto;\n left: 0;\n border-left: none;\n border-right: 1px solid var(--viking-border-strong);\n }\n .viking-sheet-header {\n display: flex;\n align-items: flex-start;\n justify-content: space-between;\n gap: var(--viking-space-2);\n padding: var(--viking-space-2);\n border-bottom: 1px solid var(--viking-border);\n }\n .viking-sheet-heading {\n margin: 0;\n font-size: var(--viking-font-size-ui);\n font-weight: 700;\n letter-spacing: var(--header-letter-spacing, -0.02em);\n }\n .viking-sheet-close {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: var(--viking-control-height-sm);\n height: var(--viking-control-height-sm);\n border: 1px solid transparent;\n background: transparent;\n color: var(--viking-text-muted);\n cursor: pointer;\n padding: 0;\n border-radius: var(--viking-radius);\n transition: var(--viking-transition-interactive);\n }\n .viking-sheet-close:hover {\n color: var(--viking-text);\n background: var(--viking-accent-soft);\n border-color: var(--viking-border-subtle);\n }\n .viking-sheet-close:active {\n transform: scale(var(--viking-state-active-scale));\n }\n .viking-sheet-close:focus-visible {\n outline: var(--viking-ring-width) solid var(--viking-ring);\n outline-offset: var(--viking-ring-offset);\n }\n .viking-sheet-body {\n flex: 1;\n overflow: auto;\n padding: var(--viking-space-2);\n font-size: var(--viking-font-size);\n color: var(--viking-text);\n line-height: 1.6;\n }\n .viking-sheet-footer {\n display: flex;\n flex-wrap: wrap;\n gap: var(--viking-space-2);\n justify-content: flex-end;\n align-items: center;\n padding: var(--viking-space-2);\n border-top: 1px solid var(--viking-border);\n }\n :host ::ng-deep .viking-sheet-footer [vikingSheetActions] {\n display: flex;\n flex-wrap: wrap;\n justify-content: flex-end;\n align-items: center;\n gap: var(--viking-space-2);\n width: 100%;\n }\n `,\n ],\n})\nexport class VikingSheet {\n readonly open = model(false);\n readonly heading = input(\"\");\n readonly dismissible = input(true);\n readonly side = input<VikingSheetSide>(\"right\");\n\n private readonly dialogRef =\n viewChild.required<ElementRef<HTMLDialogElement>>(\"dialog\");\n\n constructor() {\n effect(() => {\n const dialog = this.dialogRef().nativeElement;\n if (this.open() && !dialog.open) {\n dialog.showModal();\n } else if (!this.open() && dialog.open) {\n dialog.close();\n }\n });\n }\n\n protected onBackdropClick = (event: MouseEvent): void => {\n if (!this.dismissible()) return;\n const dialog = this.dialogRef().nativeElement;\n if (event.target === dialog) {\n this.open.set(false);\n }\n };\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n input,\n output,\n ViewEncapsulation,\n} from \"@angular/core\";\nimport { RouterLink, RouterLinkActive } from \"@angular/router\";\n\n/**\n * viking-sidebar-nav — composable sidebar navigation container.\n */\n@Component({\n selector: \"viking-sidebar-nav\",\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n host: {\n class: \"viking-sidebar-nav\",\n role: \"navigation\",\n },\n template: `<ng-content />`,\n styleUrl: \"./sidebar-nav.scss\",\n})\nexport class VikingSidebarNav {}\n\n/**\n * viking-sidebar-nav-link — router-aware sidebar nav item.\n */\n@Component({\n selector: \"viking-sidebar-nav-link\",\n imports: [RouterLink, RouterLinkActive],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n host: {\n class: \"viking-sidebar-nav-link\",\n },\n template: `\n <a\n [routerLink]=\"routerLink()\"\n routerLinkActive=\"viking-sidebar-nav-link-active\"\n [routerLinkActiveOptions]=\"routerLinkActiveOptions()\"\n [title]=\"title()\"\n [attr.aria-label]=\"title() || null\"\n >\n <ng-content />\n </a>\n `,\n styleUrl: \"./sidebar-nav.scss\",\n})\nexport class VikingSidebarNavLink {\n readonly routerLink = input.required<string | string[]>();\n readonly routerLinkActiveOptions = input<{ exact: boolean }>({ exact: true });\n readonly title = input<string>(\"\");\n}\n\n/**\n * viking-sidebar-nav-tree — expandable tree section within sidebar nav.\n */\n@Component({\n selector: \"viking-sidebar-nav-tree\",\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n host: { class: \"viking-sidebar-nav-tree\" },\n template: `<ng-content />`,\n styleUrl: \"./sidebar-nav.scss\",\n})\nexport class VikingSidebarNavTree {}\n\n/**\n * viking-sidebar-nav-tree-header — collapsible tree section header.\n */\n@Component({\n selector: \"viking-sidebar-nav-tree-header\",\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n host: {\n class: \"viking-sidebar-nav-tree-header\",\n role: \"button\",\n tabindex: \"0\",\n \"[attr.aria-expanded]\": \"expanded()\",\n \"(click)\": \"onToggle()\",\n \"(keydown.enter)\": \"onToggle()\",\n \"(keydown.space)\": \"onSpace($event)\",\n },\n template: `\n <span class=\"viking-sidebar-nav-tree-label\">{{ label() }}</span>\n <ng-content select=\"[vikingSidebarTreeArrow]\" />\n `,\n styleUrl: \"./sidebar-nav.scss\",\n})\nexport class VikingSidebarNavTreeHeader {\n readonly label = input.required<string>();\n readonly expanded = input<boolean>(true);\n readonly toggled = output<void>();\n\n protected onToggle = (): void => {\n this.toggled.emit();\n };\n\n protected onSpace = (event: Event): void => {\n event.preventDefault();\n this.onToggle();\n };\n}\n\n/**\n * viking-sidebar-nav-tree-children — tree item list container.\n */\n@Component({\n selector: \"viking-sidebar-nav-tree-children\",\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n host: { class: \"viking-sidebar-nav-tree-children\" },\n template: `<ng-content />`,\n styleUrl: \"./sidebar-nav.scss\",\n})\nexport class VikingSidebarNavTreeChildren {}\n\nexport type VikingSidebarNavTreeItemVariant = \"default\" | \"empty\" | \"accent\";\n\n/**\n * viking-sidebar-nav-tree-item — selectable tree leaf or action row.\n */\n@Component({\n selector: \"viking-sidebar-nav-tree-item\",\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n host: {\n class: \"viking-sidebar-nav-tree-item\",\n role: \"button\",\n tabindex: \"0\",\n \"[class.viking-sidebar-nav-tree-item-active]\": \"active()\",\n \"[class.viking-sidebar-nav-tree-item-empty]\": \"variant() === 'empty'\",\n \"[class.viking-sidebar-nav-tree-item-accent]\": \"variant() === 'accent'\",\n \"(click)\": \"onActivate($event)\",\n \"(keydown.enter)\": \"onActivate($event)\",\n \"(keydown.space)\": \"onSpace($event)\",\n },\n template: `<ng-content />`,\n styleUrl: \"./sidebar-nav.scss\",\n})\nexport class VikingSidebarNavTreeItem {\n readonly active = input<boolean>(false);\n readonly variant = input<VikingSidebarNavTreeItemVariant>(\"default\");\n readonly activated = output<void>();\n\n protected onActivate = (event: Event): void => {\n if (this.variant() === \"empty\") {\n return;\n }\n this.activated.emit();\n };\n\n protected onSpace = (event: Event): void => {\n event.preventDefault();\n this.onActivate(event);\n };\n}\n","import { ChangeDetectionStrategy, Component, input } from \"@angular/core\";\nimport { VikingIcon } from \"../icon/icon\";\nimport type { VikingIconName } from \"../../core/icons\";\n\n/**\n * viking-status-metric-row — icon + title/subtitle + value row for status cards.\n */\n@Component({\n selector: \"viking-status-metric-row\",\n imports: [VikingIcon],\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: { class: \"viking-status-metric-row ml-stat-panel\" },\n template: `\n <div class=\"stat-info\">\n <viking-icon\n [name]=\"icon()\"\n [size]=\"22\"\n color=\"accent\"\n [backdrop]=\"true\"\n />\n <div>\n <span class=\"stat-title\">{{ title() }}</span>\n @if (subtitle()) {\n <span class=\"stat-subtitle\">{{ subtitle() }}</span>\n }\n </div>\n </div>\n <div class=\"stat-value-container\">\n <span class=\"stat-value\"><ng-content />{{ value() }}</span>\n </div>\n `,\n styles: [\n `\n :host {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: var(--viking-space-2);\n padding: var(--viking-space-2);\n border: 1px solid var(--viking-border);\n border-radius: var(--viking-radius-lg);\n background: var(--viking-surface);\n }\n .stat-info {\n display: flex;\n align-items: center;\n gap: var(--viking-space-2);\n min-width: 0;\n }\n .stat-title {\n display: block;\n font-size: var(--viking-font-size-sm);\n font-weight: var(--viking-font-weight-semibold);\n color: var(--viking-text);\n }\n .stat-subtitle {\n display: block;\n font-size: var(--viking-font-size-sm);\n color: var(--viking-text-muted);\n }\n .stat-value {\n font-size: calc(var(--viking-font-size) * 1.25);\n font-weight: 700;\n color: var(--viking-text);\n }\n `,\n ],\n})\nexport class VikingStatusMetricRow {\n readonly icon = input.required<VikingIconName>();\n readonly title = input.required<string>();\n readonly subtitle = input<string>(\"\");\n readonly value = input<string | number>(\"\");\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n input,\n model,\n} from \"@angular/core\";\nimport { VikingControl, provideVikingCva } from \"../core/cva\";\n\n/**\n * viking-slider — range slider.\n * ControlValueAccessor-compatible.\n */\n@Component({\n selector: \"viking-slider\",\n providers: [provideVikingCva(VikingSlider)],\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <div class=\"viking-slider-header\">\n @if (label()) {\n <span class=\"viking-slider-label\">{{ label() }}</span>\n }\n @if (showValue()) {\n <output class=\"viking-slider-value\">{{ value() }}</output>\n }\n </div>\n <input\n type=\"range\"\n [min]=\"min()\"\n [max]=\"max()\"\n [step]=\"step()\"\n [value]=\"value()\"\n [disabled]=\"disabled() || formDisabled()\"\n [attr.aria-label]=\"label() || 'Slider'\"\n [style.--viking-slider-fill.%]=\"fillPercent()\"\n (input)=\"onInput($event)\"\n (blur)=\"onTouched()\"\n />\n `,\n styles: [\n `\n :host {\n display: block;\n font-family: var(--viking-font-family);\n }\n .viking-slider-header {\n display: flex;\n justify-content: space-between;\n gap: var(--viking-space-2);\n margin-bottom: calc(var(--viking-space-1) / 2);\n font-size: var(--viking-font-size);\n }\n .viking-slider-label {\n color: var(--viking-text);\n font-weight: 500;\n }\n .viking-slider-value {\n color: var(--viking-text-muted);\n font-variant-numeric: tabular-nums;\n }\n input[type=\"range\"] {\n appearance: none;\n width: 100%;\n height: var(--viking-space-1);\n border-radius: var(--viking-radius-pill);\n border: 1px solid var(--viking-border);\n background: linear-gradient(\n to right,\n var(--viking-accent) var(--viking-slider-fill, 0%),\n var(--viking-surface-alt) var(--viking-slider-fill, 0%)\n );\n cursor: pointer;\n margin: var(--viking-space-1) 0;\n }\n input[type=\"range\"]:disabled {\n opacity: var(--viking-state-disabled-opacity);\n cursor: not-allowed;\n }\n input[type=\"range\"]::-webkit-slider-thumb {\n appearance: none;\n width: var(--viking-space-2);\n height: var(--viking-space-2);\n border-radius: var(--viking-radius-pill);\n background: var(--viking-surface);\n border: 2px solid var(--viking-accent);\n box-shadow: var(--viking-shadow-sm);\n transition: transform 0.15s ease;\n }\n input[type=\"range\"]::-webkit-slider-thumb:hover {\n transform: scale(1.15);\n }\n input[type=\"range\"]::-moz-range-thumb {\n width: var(--viking-space-2);\n height: var(--viking-space-2);\n border-radius: var(--viking-radius-pill);\n background: var(--viking-surface);\n border: 2px solid var(--viking-accent);\n box-shadow: var(--viking-shadow-sm);\n }\n input[type=\"range\"]:focus-visible {\n outline: var(--viking-ring-width) solid var(--viking-ring);\n outline-offset: var(--viking-ring-offset);\n }\n `,\n ],\n})\nexport class VikingSlider extends VikingControl<number> {\n readonly value = model<number>(0);\n readonly min = input<number>(0);\n readonly max = input<number>(100);\n readonly step = input<number>(1);\n readonly label = input<string>(\"\");\n readonly showValue = input<boolean>(true);\n readonly disabled = input<boolean>(false);\n\n protected readonly fillPercent = computed(() => {\n const range = this.max() - this.min();\n if (range <= 0) {\n return 0;\n }\n return ((this.value() - this.min()) / range) * 100;\n });\n\n writeValue(value: number): void {\n this.value.set(Number(value ?? 0));\n }\n\n protected onInput = (event: Event): void => {\n const next = Number((event.target as HTMLInputElement).value);\n this.value.set(next);\n this.onChange(next);\n };\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n input,\n model,\n} from \"@angular/core\";\nimport { VikingControl, provideVikingCva } from \"../core/cva\";\n\n/**\n * viking-switch — toggle switch.\n * ControlValueAccessor-compatible.\n */\n@Component({\n selector: \"viking-switch\",\n providers: [provideVikingCva(VikingSwitch)],\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <label\n class=\"viking-switch\"\n [class.viking-disabled]=\"disabled() || formDisabled()\"\n >\n <span class=\"viking-switch-track\" [class.viking-checked]=\"checked()\">\n <input\n type=\"checkbox\"\n role=\"switch\"\n [checked]=\"checked()\"\n [disabled]=\"disabled() || formDisabled()\"\n (change)=\"toggle($event)\"\n (blur)=\"onTouched()\"\n />\n <span class=\"viking-switch-thumb\"></span>\n </span>\n <span class=\"viking-switch-content\">\n <span class=\"viking-switch-label\"><ng-content /></span>\n @if (description()) {\n <span class=\"viking-switch-description\">{{ description() }}</span>\n }\n </span>\n </label>\n `,\n styles: [\n `\n :host {\n display: block;\n font-family: var(--viking-font-family);\n }\n .viking-switch {\n display: inline-flex;\n align-items: flex-start;\n gap: var(--viking-space-1);\n cursor: pointer;\n }\n .viking-disabled {\n opacity: var(--viking-state-disabled-opacity);\n cursor: not-allowed;\n }\n .viking-switch-track {\n position: relative;\n display: inline-flex;\n align-items: center;\n width: var(--viking-space-4);\n height: calc(var(--viking-space-2) + 2px);\n padding: 2px;\n margin-top: 3px;\n border-radius: var(--viking-radius-pill);\n background: var(--viking-surface-alt);\n border: 1px solid var(--viking-border-strong);\n transition: var(--viking-transition-interactive);\n flex-shrink: 0;\n box-sizing: border-box;\n }\n /* The native input fills the visual track so clicks and focus land on it. */\n .viking-switch-track input {\n position: absolute;\n inset: 0;\n width: 100%;\n height: 100%;\n margin: 0;\n opacity: 0;\n cursor: pointer;\n }\n .viking-switch-thumb {\n width: 14px;\n height: 14px;\n border-radius: var(--viking-radius-pill);\n background: var(--viking-text-muted);\n transition: var(--viking-transition-transform);\n }\n .viking-switch-track.viking-checked {\n background: var(--viking-accent);\n border-color: var(--viking-accent);\n }\n .viking-switch-track.viking-checked .viking-switch-thumb {\n background: var(--viking-accent-content);\n transform: translateX(calc(var(--viking-space-4) - 22px));\n }\n .viking-switch-track:has(input:focus-visible) {\n outline: var(--viking-ring-width) solid var(--viking-ring);\n outline-offset: var(--viking-ring-offset);\n }\n .viking-switch-content {\n display: flex;\n flex-direction: column;\n }\n .viking-switch-label {\n font-size: var(--viking-font-size);\n color: var(--viking-text);\n line-height: 1.45;\n }\n .viking-switch-description {\n font-size: var(--viking-font-size);\n color: var(--viking-text-muted);\n }\n `,\n ],\n})\nexport class VikingSwitch extends VikingControl<boolean> {\n readonly checked = model<boolean>(false);\n readonly disabled = input<boolean>(false);\n readonly description = input<string>(\"\");\n\n writeValue(value: boolean): void {\n this.checked.set(!!value);\n }\n\n protected toggle = (event: Event): void => {\n const next = (event.target as HTMLInputElement).checked;\n this.checked.set(next);\n this.onChange(next);\n };\n}\n","import { ChangeDetectionStrategy, Component, input } from \"@angular/core\";\nimport { VikingEmptyState } from \"../empty-state/empty-state\";\nimport { VikingSkeleton } from \"../skeleton/skeleton\";\n\n/**\n * viking-table — clinical data table wrapper.\n */\n@Component({\n selector: \"viking-table\",\n imports: [VikingEmptyState, VikingSkeleton],\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: \"viking-table-wrap\",\n \"[class.viking-table-compact]\": \"compact()\",\n \"[class.viking-table-striped]\": \"striped()\",\n \"[class.viking-table-loading]\": \"loading()\",\n \"[attr.aria-busy]\": \"loading() ? 'true' : null\",\n },\n template: `\n @if (loading()) {\n <div class=\"viking-table-loading-state\" aria-hidden=\"true\">\n @for (row of [1, 2, 3, 4]; track row) {\n <viking-skeleton height=\"44px\" />\n }\n </div>\n } @else if (emptyMessage()) {\n <viking-empty-state\n [heading]=\"emptyMessage()\"\n [description]=\"emptyDescription()\"\n icon=\"search-off\"\n />\n } @else {\n <table class=\"viking-table\">\n <ng-content />\n </table>\n }\n `,\n styles: [\n `\n :host {\n display: block;\n width: 100%;\n overflow-x: auto;\n border: 1px solid var(--viking-border);\n border-radius: var(--viking-radius-lg);\n background: var(--viking-surface);\n box-shadow: var(--viking-shadow-sm);\n transition: var(--viking-transition-colors);\n position: relative;\n }\n :host::before {\n content: \"\";\n position: absolute;\n inset: 0 0 auto;\n height: 1px;\n background: linear-gradient(\n 90deg,\n transparent,\n color-mix(in srgb, var(--viking-metallic-200) 18%, transparent),\n transparent\n );\n pointer-events: none;\n z-index: 1;\n }\n .viking-table-loading-state {\n display: flex;\n flex-direction: column;\n gap: var(--viking-space-1);\n padding: var(--viking-space-2);\n }\n .viking-table {\n width: 100%;\n border-collapse: collapse;\n font-family: var(--viking-font-family);\n font-size: var(--viking-font-size-sm);\n color: var(--viking-text);\n }\n :host ::ng-deep thead th {\n font-size: var(--viking-font-size-xs);\n font-weight: var(--viking-font-weight-bold);\n text-align: left;\n letter-spacing: var(--viking-letter-spacing-caps);\n text-transform: uppercase;\n color: var(--viking-text-muted);\n background: color-mix(\n in srgb,\n var(--viking-bg) 40%,\n var(--viking-surface)\n );\n padding: var(--viking-space-1-5) var(--viking-space-2);\n border-bottom: 1px solid var(--viking-border-strong);\n white-space: nowrap;\n }\n :host ::ng-deep tbody td {\n padding: var(--viking-space-1-5) var(--viking-space-2);\n border-bottom: 1px solid var(--viking-border-subtle);\n vertical-align: middle;\n transition: background-color var(--viking-duration-fast)\n var(--viking-ease-default);\n }\n :host ::ng-deep tbody tr:last-child td {\n border-bottom: none;\n }\n :host ::ng-deep tbody tr:hover td {\n background: var(--viking-accent-soft);\n }\n :host(.viking-table-striped) ::ng-deep tbody tr:nth-child(even) td {\n background: color-mix(\n in srgb,\n var(--viking-surface-alt) 50%,\n transparent\n );\n }\n :host(.viking-table-striped) ::ng-deep tbody tr:nth-child(even):hover td {\n background: var(--viking-accent-soft);\n }\n :host(.viking-table-compact) ::ng-deep thead th,\n :host(.viking-table-compact) ::ng-deep tbody td {\n padding: var(--viking-space-1) var(--viking-space-2);\n }\n @media (max-width: 640px) {\n :host ::ng-deep thead th,\n :host ::ng-deep tbody td {\n padding: var(--viking-space-1);\n font-size: var(--viking-font-size-xs);\n }\n }\n `,\n ],\n})\nexport class VikingTable {\n readonly compact = input(false);\n readonly striped = input(false);\n readonly loading = input(false);\n readonly emptyMessage = input<string>(\"\");\n readonly emptyDescription = input<string>(\"\");\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n contentChildren,\n InjectionToken,\n model,\n} from \"@angular/core\";\nimport { VikingTab } from \"./tab\";\n\nexport const VIKING_TABS = new InjectionToken<VikingTabs>(\"VIKING_TABS\");\n\n/**\n * viking-tabs — tablist container with roving keyboard navigation.\n */\n@Component({\n selector: \"viking-tabs\",\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [{ provide: VIKING_TABS, useExisting: VikingTabs }],\n host: { class: \"viking-tabs\" },\n template: `\n <div\n class=\"viking-tabs-list\"\n role=\"tablist\"\n (keydown)=\"onTabKeydown($event)\"\n >\n <ng-content select=\"viking-tab\" />\n </div>\n <ng-content select=\"viking-tab-panel\" />\n `,\n styles: [\n `\n :host {\n display: flex;\n flex-direction: column;\n gap: var(--viking-space-2);\n font-family: var(--viking-font-family);\n }\n .viking-tabs-list {\n display: flex;\n flex-wrap: wrap;\n gap: var(--viking-space-half);\n padding: var(--viking-space-half);\n border: 1px solid var(--viking-border);\n border-radius: var(--viking-radius-lg);\n background: color-mix(\n in srgb,\n var(--viking-surface-alt) 80%,\n var(--viking-surface)\n );\n box-shadow: var(--viking-shadow-sm);\n }\n @media (max-width: 767px) {\n .viking-tabs-list {\n flex-wrap: nowrap;\n overflow-x: auto;\n scroll-snap-type: x proximity;\n -webkit-overflow-scrolling: touch;\n scrollbar-width: none;\n }\n .viking-tabs-list::-webkit-scrollbar {\n display: none;\n }\n }\n `,\n ],\n})\nexport class VikingTabs {\n private readonly tabComponents = contentChildren(VikingTab);\n\n readonly value = model<string>(\"\");\n\n protected onTabKeydown = (event: KeyboardEvent): void => {\n const tabs = this.tabComponents().filter((tab) => !tab.disabled());\n if (tabs.length === 0) {\n return;\n }\n\n const currentIndex = tabs.findIndex((tab) => tab.value() === this.value());\n let nextIndex = currentIndex;\n\n switch (event.key) {\n case \"ArrowRight\":\n case \"ArrowDown\":\n event.preventDefault();\n nextIndex = (currentIndex + 1) % tabs.length;\n break;\n case \"ArrowLeft\":\n case \"ArrowUp\":\n event.preventDefault();\n nextIndex = (currentIndex - 1 + tabs.length) % tabs.length;\n break;\n case \"Home\":\n event.preventDefault();\n nextIndex = 0;\n break;\n case \"End\":\n event.preventDefault();\n nextIndex = tabs.length - 1;\n break;\n default:\n return;\n }\n\n const next = tabs[nextIndex];\n this.value.set(next.value());\n const button = document.getElementById(`viking-tab-${next.value()}`);\n button?.focus();\n };\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n Optional,\n computed,\n input,\n} from \"@angular/core\";\nimport { VIKING_TABS, VikingTabs } from \"./tabs\";\n\n/**\n * viking-tab — tab trigger button inside viking-tabs.\n */\n@Component({\n selector: \"viking-tab\",\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <button\n type=\"button\"\n role=\"tab\"\n class=\"viking-tab\"\n [class.viking-active]=\"active()\"\n [id]=\"tabId()\"\n [attr.aria-selected]=\"active()\"\n [attr.aria-controls]=\"panelId()\"\n [attr.tabindex]=\"active() ? 0 : -1\"\n [disabled]=\"disabled()\"\n (click)=\"select()\"\n >\n <ng-content />\n </button>\n `,\n styles: [\n `\n .viking-tab {\n font-family: var(--viking-font-family);\n font-size: var(--viking-font-size-sm);\n font-weight: var(--viking-font-weight-semibold);\n letter-spacing: var(--viking-letter-spacing-wide);\n display: inline-flex;\n align-items: center;\n justify-content: center;\n min-height: var(--viking-control-height-sm);\n min-width: var(--viking-btn-min-width, 120px);\n padding: 0 var(--viking-space-2);\n border: 1px solid transparent;\n border-radius: var(--viking-radius);\n background: transparent;\n color: var(--viking-text-muted);\n cursor: pointer;\n transition: var(--viking-transition-interactive);\n position: relative;\n -webkit-tap-highlight-color: transparent;\n }\n @media (max-width: 767px) {\n .viking-tab {\n min-height: var(--viking-control-height);\n flex: 1 1 auto;\n }\n }\n .viking-tab:hover:not(:disabled):not(.viking-active) {\n color: var(--viking-text);\n background: var(--viking-accent-soft);\n }\n .viking-tab:focus-visible {\n outline: var(--viking-ring-width) solid var(--viking-ring);\n outline-offset: var(--viking-ring-offset);\n }\n .viking-tab:active:not(:disabled) {\n transform: scale(var(--viking-state-active-scale));\n }\n .viking-tab.viking-active {\n color: var(--viking-accent-content);\n background: var(--viking-accent);\n border-color: color-mix(\n in srgb,\n var(--viking-accent) 80%,\n var(--viking-black)\n );\n box-shadow: var(--viking-shadow-sm);\n }\n .viking-tab:disabled {\n opacity: var(--viking-state-disabled-opacity);\n cursor: not-allowed;\n }\n `,\n ],\n})\nexport class VikingTab {\n constructor(@Optional() private readonly tabs: VikingTabs | null) {}\n\n readonly value = input.required<string>();\n readonly disabled = input(false);\n\n protected readonly tabId = computed(() => `viking-tab-${this.value()}`);\n protected readonly panelId = computed(\n () => `viking-tab-panel-${this.value()}`,\n );\n\n protected active = () => (this.tabs?.value() ?? \"\") === this.value();\n\n protected select = (): void => {\n if (this.disabled() || !this.tabs) {\n return;\n }\n this.tabs.value.set(this.value());\n };\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n Optional,\n computed,\n input,\n} from \"@angular/core\";\nimport { VIKING_TABS, VikingTabs } from \"./tabs\";\n\n/**\n * viking-tab-panel — tabpanel region inside viking-tabs.\n */\n@Component({\n selector: \"viking-tab-panel\",\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n role: \"tabpanel\",\n \"[attr.id]\": \"panelId()\",\n \"[attr.aria-labelledby]\": \"tabId()\",\n \"[attr.hidden]\": 'hidden() ? \"\" : null',\n \"[class.viking-hidden]\": \"hidden()\",\n },\n template: `<ng-content />`,\n styles: [\n `\n :host {\n display: block;\n padding: var(--viking-space-2);\n border: 1px solid var(--viking-border);\n border-radius: var(--viking-radius);\n background: var(--viking-surface);\n font-family: var(--viking-font-family);\n font-size: var(--viking-font-size);\n color: var(--viking-text);\n line-height: var(--viking-line-height-relaxed);\n animation: viking-fade-in var(--viking-duration-fast)\n var(--viking-ease-out);\n }\n :host(.viking-hidden) {\n display: none;\n }\n @media (prefers-reduced-motion: reduce) {\n :host {\n animation: none;\n }\n }\n `,\n ],\n})\nexport class VikingTabPanel {\n constructor(@Optional() private readonly tabs: VikingTabs | null) {}\n\n readonly value = input.required<string>();\n\n protected readonly panelId = computed(\n () => `viking-tab-panel-${this.value()}`,\n );\n protected readonly tabId = computed(() => `viking-tab-${this.value()}`);\n\n protected hidden = () => (this.tabs?.value() ?? \"\") !== this.value();\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n input,\n model,\n} from \"@angular/core\";\nimport { VikingControl, provideVikingCva } from \"../core/cva\";\n\n/**\n * viking-textarea — auto-growing textarea.\n * ControlValueAccessor-compatible.\n */\n@Component({\n selector: \"viking-textarea\",\n providers: [provideVikingCva(VikingTextarea)],\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <div\n class=\"viking-control viking-textarea-shell\"\n [class.viking-disabled]=\"isDisabled()\"\n >\n <textarea\n [rows]=\"rows()\"\n [placeholder]=\"placeholder()\"\n [value]=\"value()\"\n [disabled]=\"isDisabled()\"\n [attr.aria-label]=\"label() || placeholder() || 'Text area'\"\n [style.resize]=\"autoGrow() ? 'none' : 'vertical'\"\n (input)=\"onInput($event)\"\n (blur)=\"onTouched()\"\n ></textarea>\n </div>\n `,\n styles: [\n `\n :host {\n display: block;\n }\n .viking-textarea-shell {\n display: flex;\n width: 100%;\n padding: var(--viking-space-1-5) var(--viking-space-2);\n background: var(--viking-surface);\n border: 1px solid var(--viking-border-strong);\n border-radius: var(--viking-radius);\n box-shadow: var(--viking-shadow-sm);\n transition: var(--viking-transition-interactive);\n }\n .viking-textarea-shell:hover:not(.viking-disabled) {\n border-color: var(--viking-accent-strong);\n box-shadow: var(--viking-shadow-md);\n }\n .viking-textarea-shell:focus-within {\n outline: var(--viking-ring-width) solid var(--viking-ring);\n outline-offset: var(--viking-ring-offset);\n border-color: var(--viking-accent);\n }\n .viking-disabled {\n opacity: var(--viking-state-disabled-opacity);\n cursor: not-allowed;\n }\n textarea {\n width: 100%;\n box-sizing: border-box;\n border: none;\n outline: none !important;\n background: transparent;\n color: var(--viking-text);\n font-family: var(--viking-font-family);\n font-size: var(--viking-font-size);\n line-height: 1.55;\n padding: 0;\n }\n textarea::placeholder {\n color: var(--viking-text-muted);\n }\n `,\n ],\n})\nexport class VikingTextarea extends VikingControl<string> {\n readonly value = model<string>(\"\");\n readonly placeholder = input<string>(\"\");\n readonly label = input<string>(\"\");\n readonly rows = input<number>(3);\n readonly autoGrow = input<boolean>(true);\n readonly disabled = input<boolean>(false);\n\n protected isDisabled = (): boolean => this.disabled() || this.formDisabled();\n\n writeValue(value: string): void {\n this.value.set(value ?? \"\");\n }\n\n protected onInput = (event: Event): void => {\n const el = event.target as HTMLTextAreaElement;\n this.value.set(el.value);\n this.onChange(el.value);\n if (this.autoGrow()) {\n el.style.height = \"auto\";\n el.style.height = `${el.scrollHeight}px`;\n }\n };\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n InjectionToken,\n model,\n} from \"@angular/core\";\n\nexport const VIKING_TOGGLE_GROUP = new InjectionToken<VikingToggleGroup>(\n \"VIKING_TOGGLE_GROUP\",\n);\n\n/**\n * viking-toggle-group — exclusive or multi toggle cluster.\n */\n@Component({\n selector: \"viking-toggle-group\",\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [{ provide: VIKING_TOGGLE_GROUP, useExisting: VikingToggleGroup }],\n host: {\n role: \"group\",\n class: \"viking-toggle-group\",\n \"[class.viking-exclusive]\": \"exclusive()\",\n },\n template: `<ng-content />`,\n styles: [\n `\n :host {\n display: inline-flex;\n flex-wrap: wrap;\n gap: 0;\n border: 1px solid var(--viking-border-strong);\n border-radius: var(--viking-radius);\n overflow: hidden;\n box-shadow: var(--viking-shadow-sm);\n }\n :host ::ng-deep viking-toggle:not(:first-child) .viking-toggle {\n border-left: none;\n margin-left: -1px;\n border-radius: 0;\n }\n :host ::ng-deep viking-toggle:first-child .viking-toggle {\n border-top-right-radius: 0;\n border-bottom-right-radius: 0;\n }\n :host ::ng-deep viking-toggle:last-child .viking-toggle {\n border-top-left-radius: 0;\n border-bottom-left-radius: 0;\n }\n :host ::ng-deep viking-toggle .viking-toggle {\n min-width: var(--viking-btn-min-width, 120px);\n border-radius: 0;\n box-shadow: none;\n }\n `,\n ],\n})\nexport class VikingToggleGroup {\n readonly value = model<string>(\"\");\n readonly exclusive = model(true);\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n Optional,\n input,\n model,\n output,\n} from \"@angular/core\";\nimport { VIKING_TOGGLE_GROUP, VikingToggleGroup } from \"./toggle-group\";\n\n/**\n * viking-toggle — pressed-state button toggle.\n */\n@Component({\n selector: \"viking-toggle\",\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <button\n type=\"button\"\n class=\"viking-toggle\"\n [class.viking-pressed]=\"isPressed()\"\n [attr.aria-pressed]=\"isPressed()\"\n [disabled]=\"disabled()\"\n [attr.aria-label]=\"label() || null\"\n (click)=\"toggle()\"\n >\n <ng-content />\n </button>\n `,\n styles: [\n `\n :host {\n display: inline-flex;\n }\n .viking-toggle {\n font-family: var(--viking-font-family);\n font-size: var(--viking-font-size-ui);\n font-weight: 700;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n gap: var(--viking-space-1);\n min-height: var(--viking-control-height-sm);\n min-width: var(--viking-btn-min-width, 120px);\n padding: 0 var(--viking-space-2);\n border: 1px solid var(--viking-border-strong);\n border-radius: var(--viking-radius);\n background: var(--viking-surface);\n color: var(--viking-text);\n cursor: pointer;\n transition: var(--viking-transition);\n }\n .viking-toggle:hover:not(:disabled) {\n border-color: var(--viking-accent-strong);\n background: var(--viking-accent-soft);\n }\n .viking-toggle:focus-visible {\n outline: var(--viking-ring-width) solid var(--viking-ring);\n outline-offset: var(--viking-ring-offset);\n }\n .viking-toggle.viking-pressed {\n background: var(--viking-accent);\n border-color: var(--viking-accent);\n color: var(--viking-accent-content);\n }\n .viking-toggle:disabled {\n opacity: var(--viking-state-disabled-opacity);\n cursor: not-allowed;\n }\n `,\n ],\n})\nexport class VikingToggle {\n constructor(@Optional() private readonly group: VikingToggleGroup | null) {}\n\n readonly pressed = model(false);\n readonly value = input<string>(\"\");\n readonly disabled = input(false);\n readonly label = input(\"\");\n\n readonly toggled = output<boolean>();\n\n protected isPressed = (): boolean => {\n if (this.group && this.value()) {\n return this.group.value() === this.value();\n }\n return this.pressed();\n };\n\n protected toggle = (): void => {\n if (this.disabled()) return;\n if (this.group && this.value()) {\n this.group.value.set(this.value());\n this.toggled.emit(true);\n return;\n }\n const next = !this.pressed();\n this.pressed.set(next);\n this.toggled.emit(next);\n };\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n computed,\n input,\n model,\n signal,\n} from \"@angular/core\";\nimport { VikingControl, provideVikingCva } from \"../core/cva\";\nimport { VikingIcon } from \"../icon/icon\";\n\n/**\n * viking-time-picker — dropdown time selection.\n * Value is a 24h HH:MM string. ControlValueAccessor-compatible.\n */\n@Component({\n selector: \"viking-time-picker\",\n imports: [VikingIcon],\n providers: [provideVikingCva(VikingTimePicker)],\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n \"(document:click)\": \"onDocumentClick($event)\",\n \"(keydown.escape)\": \"open.set(false)\",\n },\n template: `\n <button\n type=\"button\"\n class=\"viking-control viking-time-trigger\"\n [disabled]=\"disabled() || formDisabled()\"\n [attr.aria-expanded]=\"open()\"\n [attr.aria-label]=\"label() || placeholder()\"\n aria-haspopup=\"listbox\"\n (click)=\"open.set(!open())\"\n >\n <viking-icon name=\"clock\" [size]=\"20\" />\n <span\n class=\"viking-time-value\"\n [class.viking-time-placeholder]=\"!value()\"\n >\n {{ value() || placeholder() }}\n </span>\n <viking-icon\n [name]=\"open() ? 'chevron-up' : 'chevron-down'\"\n [size]=\"18\"\n />\n </button>\n @if (open()) {\n <div class=\"viking-time-panel\" role=\"listbox\" aria-label=\"Choose time\">\n @for (slot of slots(); track slot) {\n <button\n type=\"button\"\n role=\"option\"\n class=\"viking-time-option\"\n [class.viking-selected]=\"slot === value()\"\n [attr.aria-selected]=\"slot === value()\"\n (click)=\"pick(slot)\"\n >\n {{ slot }}\n </button>\n }\n </div>\n }\n `,\n styles: [\n `\n :host {\n position: relative;\n display: block;\n }\n .viking-time-trigger {\n display: flex;\n align-items: center;\n gap: var(--viking-space-1);\n width: 100%;\n min-height: var(--viking-control-height);\n padding: 0 var(--viking-space-2);\n background: var(--viking-surface);\n border: 1px solid var(--viking-border-strong);\n border-radius: var(--viking-radius);\n box-shadow: var(--viking-shadow-sm);\n color: var(--viking-text-muted);\n font-family: var(--viking-font-family);\n font-size: var(--viking-font-size);\n cursor: pointer;\n transition: var(--viking-transition);\n text-align: left;\n }\n .viking-time-trigger:hover:not(:disabled) {\n border-color: var(--viking-accent-strong);\n }\n .viking-time-trigger:focus-visible {\n outline: var(--viking-ring-width) solid var(--viking-ring);\n outline-offset: var(--viking-ring-offset);\n }\n .viking-time-trigger:disabled {\n opacity: var(--viking-state-disabled-opacity);\n cursor: not-allowed;\n }\n .viking-time-value {\n flex: 1;\n color: var(--viking-text);\n font-variant-numeric: tabular-nums;\n }\n .viking-time-placeholder {\n color: var(--viking-text-muted);\n }\n .viking-time-panel {\n position: absolute;\n top: calc(100% + var(--viking-space-1));\n left: 0;\n right: 0;\n display: flex;\n flex-direction: column;\n gap: 2px;\n margin: 0;\n padding: var(--viking-space-1);\n background: var(--viking-surface);\n border: 1px solid var(--viking-border-strong);\n border-radius: var(--viking-radius);\n box-shadow: var(--viking-shadow-md);\n z-index: var(--viking-z-overlay);\n max-height: 279px;\n overflow: auto;\n }\n .viking-time-option {\n padding: var(--viking-space-1);\n border: none;\n background: transparent;\n text-align: left;\n width: 100%;\n border-radius: calc(var(--viking-radius) / 1.5);\n font-family: var(--viking-font-family);\n font-size: var(--viking-font-size);\n color: var(--viking-text);\n cursor: pointer;\n font-variant-numeric: tabular-nums;\n }\n .viking-time-option:focus-visible {\n outline: var(--viking-ring-width) solid var(--viking-ring);\n outline-offset: -2px;\n }\n .viking-time-option:hover {\n background: var(--viking-accent-soft);\n }\n .viking-selected {\n color: var(--viking-accent);\n font-weight: 600;\n }\n `,\n ],\n})\nexport class VikingTimePicker extends VikingControl<string | null> {\n readonly value = model<string | null>(null);\n readonly placeholder = input<string>(\"Select time\");\n readonly label = input<string>(\"\");\n readonly disabled = input<boolean>(false);\n /** Minute granularity for generated slots. */\n readonly stepMinutes = input<number>(30);\n\n constructor(private readonly host: ElementRef<HTMLElement>) {\n super();\n }\n\n protected readonly open = signal(false);\n\n protected readonly slots = computed<string[]>(() => {\n const step = Math.max(5, this.stepMinutes());\n const result: string[] = [];\n for (let minutes = 0; minutes < 24 * 60; minutes += step) {\n const hours = String(Math.floor(minutes / 60)).padStart(2, \"0\");\n const mins = String(minutes % 60).padStart(2, \"0\");\n result.push(`${hours}:${mins}`);\n }\n return result;\n });\n\n writeValue(value: string | null): void {\n this.value.set(value);\n }\n\n protected pick = (slot: string): void => {\n this.value.set(slot);\n this.onChange(slot);\n this.onTouched();\n this.open.set(false);\n };\n\n protected onDocumentClick = (event: Event): void => {\n if (\n this.open() &&\n !this.host.nativeElement.contains(event.target as Node)\n ) {\n this.open.set(false);\n }\n };\n}\n","import { ChangeDetectionStrategy, Component, input } from \"@angular/core\";\nimport { VikingIcon } from \"../icon/icon\";\nimport { VikingIconName } from \"../../core/icons\";\nimport { VikingTone } from \"../../core/types\";\n\n/**\n * viking-timeline — vertical event feed.\n * Compose with viking-timeline-item.\n */\n@Component({\n selector: \"viking-timeline\",\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: { role: \"list\" },\n template: `<ng-content />`,\n styles: [\n `\n :host {\n display: flex;\n flex-direction: column;\n }\n `,\n ],\n})\nexport class VikingTimeline {}\n\n/** A single event on viking-timeline. */\n@Component({\n selector: \"viking-timeline-item\",\n imports: [VikingIcon],\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: { role: \"listitem\" },\n template: `\n <div class=\"viking-timeline-item\">\n <div class=\"viking-timeline-rail\" aria-hidden=\"true\">\n <span\n class=\"viking-timeline-marker\"\n [class]=\"'viking-marker-' + tone()\"\n >\n @if (icon()) {\n <viking-icon [name]=\"icon()!\" [size]=\"14\" />\n }\n </span>\n <span class=\"viking-timeline-line\"></span>\n </div>\n <div class=\"viking-timeline-content\">\n <div class=\"viking-timeline-header\">\n <span class=\"viking-timeline-heading\">{{ heading() }}</span>\n @if (timestamp()) {\n <time class=\"viking-timeline-time\">{{ timestamp() }}</time>\n }\n </div>\n <div class=\"viking-timeline-body\"><ng-content /></div>\n </div>\n </div>\n `,\n styles: [\n `\n :host:last-child .viking-timeline-line {\n display: none;\n }\n .viking-timeline-item {\n display: flex;\n gap: var(--viking-space-2);\n font-family: var(--viking-font-family);\n }\n .viking-timeline-rail {\n display: flex;\n flex-direction: column;\n align-items: center;\n }\n .viking-timeline-marker {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: var(--viking-space-3);\n height: var(--viking-space-3);\n border-radius: var(--viking-radius-pill);\n border: 2px solid var(--viking-border-strong);\n background: var(--viking-surface);\n color: var(--viking-text-muted);\n flex-shrink: 0;\n }\n .viking-marker-accent {\n border-color: var(--viking-accent);\n color: var(--viking-accent);\n }\n .viking-marker-secondary {\n border-color: var(--viking-accent-secondary);\n color: var(--viking-accent-secondary);\n }\n .viking-marker-info {\n border-color: var(--viking-info);\n color: var(--viking-info);\n }\n .viking-marker-success {\n border-color: var(--viking-success);\n color: var(--viking-success);\n }\n .viking-marker-warning {\n border-color: var(--viking-warning);\n color: var(--viking-text);\n }\n .viking-marker-danger {\n border-color: var(--viking-danger);\n color: var(--viking-danger);\n }\n .viking-timeline-line {\n flex: 1;\n width: 2px;\n min-height: var(--viking-space-2);\n background: var(--viking-border);\n }\n .viking-timeline-content {\n flex: 1;\n padding-bottom: var(--viking-space-3);\n min-width: 0;\n }\n .viking-timeline-header {\n display: flex;\n align-items: baseline;\n justify-content: space-between;\n gap: var(--viking-space-2);\n flex-wrap: wrap;\n }\n .viking-timeline-heading {\n font-size: var(--viking-font-size);\n font-weight: 600;\n color: var(--viking-text);\n }\n .viking-timeline-time {\n font-size: var(--viking-font-size);\n color: var(--viking-text-muted);\n font-variant-numeric: tabular-nums;\n }\n .viking-timeline-body {\n margin-top: 3px;\n font-size: var(--viking-font-size);\n color: var(--viking-text-muted);\n line-height: 1.55;\n }\n .viking-timeline-body:empty {\n display: none;\n }\n `,\n ],\n})\nexport class VikingTimelineItem {\n readonly heading = input.required<string>();\n readonly timestamp = input<string>(\"\");\n readonly icon = input<VikingIconName | null>(null);\n readonly tone = input<VikingTone>(\"muted\");\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n Injectable,\n input,\n signal,\n} from \"@angular/core\";\nimport { VikingIcon } from \"../icon/icon\";\nimport { VikingIconName } from \"../../core/icons\";\nimport { VikingToastInstance, VikingToastOptions } from \"../../core/types\";\n\nconst TONE_ICONS: Record<string, VikingIconName> = {\n accent: \"info\",\n success: \"check-circle\",\n warning: \"alert-triangle\",\n danger: \"alert-circle\",\n muted: \"info\",\n};\n\n/**\n * VikingToastService — imperative toast API.\n * Render a single <viking-toaster> outlet near the app root.\n */\n@Injectable({ providedIn: \"root\" })\nexport class VikingToastService {\n private nextId = 1;\n readonly toasts = signal<VikingToastInstance[]>([]);\n\n readonly show = (options: VikingToastOptions): number => {\n const toast: VikingToastInstance = {\n id: this.nextId++,\n heading: options.heading ?? \"\",\n text: options.text,\n tone: options.tone ?? \"accent\",\n duration: options.duration ?? 4500,\n };\n this.toasts.update((list) => [...list, toast]);\n if (toast.duration > 0) {\n setTimeout(() => this.dismiss(toast.id), toast.duration);\n }\n return toast.id;\n };\n\n readonly dismiss = (id: number): void => {\n this.toasts.update((list) => list.filter((toast) => toast.id !== id));\n };\n}\n\n/**\n * viking-toaster — fixed-position outlet that renders active toasts.\n */\n@Component({\n selector: \"viking-toaster\",\n imports: [VikingIcon],\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: { \"[class.viking-toaster-top]\": \"position() === 'top-end'\" },\n template: `\n @for (toast of service.toasts(); track toast.id) {\n <div\n class=\"viking-toast\"\n [class]=\"'viking-toast-' + toast.tone\"\n role=\"status\"\n >\n <viking-icon\n class=\"viking-toast-icon\"\n [name]=\"toneIcon(toast.tone)\"\n [size]=\"20\"\n />\n <div class=\"viking-toast-body\">\n @if (toast.heading) {\n <p class=\"viking-toast-heading\">{{ toast.heading }}</p>\n }\n <p class=\"viking-toast-text\">{{ toast.text }}</p>\n </div>\n <button\n type=\"button\"\n class=\"viking-toast-close\"\n aria-label=\"Dismiss notification\"\n (click)=\"service.dismiss(toast.id)\"\n >\n <viking-icon name=\"x\" [size]=\"16\" />\n </button>\n </div>\n }\n `,\n styles: [\n `\n :host {\n position: fixed;\n bottom: var(--viking-space-3);\n right: var(--viking-space-3);\n display: flex;\n flex-direction: column;\n gap: var(--viking-space-1);\n z-index: var(--viking-z-toast);\n max-width: min(414px, calc(100vw - var(--viking-space-4)));\n }\n @media (max-width: 767px) {\n :host {\n bottom: var(--viking-space-2);\n right: var(--viking-space-2);\n left: var(--viking-space-2);\n max-width: none;\n }\n }\n :host(.viking-toaster-top) {\n bottom: auto;\n top: var(--viking-space-3);\n }\n .viking-toast {\n display: flex;\n align-items: flex-start;\n gap: var(--viking-space-1);\n padding: var(--viking-space-2);\n background: var(--viking-surface);\n border: 1px solid var(--viking-border-strong);\n border-radius: var(--viking-radius);\n box-shadow: var(--viking-shadow-md);\n font-family: var(--viking-font-family);\n animation: viking-toast-in var(--viking-duration) var(--viking-ease-out);\n }\n @keyframes viking-toast-in {\n from {\n transform: translateY(var(--viking-space-1));\n opacity: 0;\n }\n to {\n transform: translateY(0);\n opacity: 1;\n }\n }\n @media (prefers-reduced-motion: reduce) {\n .viking-toast {\n animation: none;\n }\n }\n .viking-toast-icon {\n margin-top: 2px;\n }\n .viking-toast-accent .viking-toast-icon {\n color: var(--viking-accent);\n }\n .viking-toast-success .viking-toast-icon {\n color: var(--viking-success);\n }\n .viking-toast-warning .viking-toast-icon {\n color: var(--viking-warning);\n }\n .viking-toast-danger .viking-toast-icon {\n color: var(--viking-danger);\n }\n .viking-toast-body {\n flex: 1;\n min-width: 0;\n }\n .viking-toast-heading {\n margin: 0;\n font-size: var(--viking-font-size);\n font-weight: 600;\n color: var(--viking-text);\n }\n .viking-toast-text {\n margin: 0;\n font-size: var(--viking-font-size);\n color: var(--viking-text-muted);\n line-height: 1.45;\n }\n .viking-toast-close {\n display: inline-flex;\n border: none;\n background: transparent;\n color: var(--viking-text-muted);\n cursor: pointer;\n padding: var(--viking-space-half);\n border-radius: var(--viking-radius-pill);\n transition: var(--viking-transition-interactive);\n }\n .viking-toast-close:hover {\n color: var(--viking-text);\n background: var(--viking-accent-soft);\n }\n .viking-toast-close:focus-visible {\n outline: var(--viking-ring-width) solid var(--viking-ring);\n outline-offset: 1px;\n }\n `,\n ],\n})\nexport class VikingToaster {\n readonly position = input<\"bottom-end\" | \"top-end\">(\"bottom-end\");\n\n constructor(protected readonly service: VikingToastService) {}\n\n protected toneIcon = (tone: string): VikingIconName =>\n TONE_ICONS[tone] ?? \"info\";\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n input,\n} from \"@angular/core\";\n\nexport type VikingUptimeStatus =\n | \"operational\"\n | \"partial_outage\"\n | \"major_outage\"\n | \"no_data\";\n\n/** viking-uptime-bar — timeline bar for uptime history visualizations. */\n@Component({\n selector: \"viking-uptime-bar\",\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: \"viking-uptime-bar\",\n \"[class.viking-uptime-partial]\": \"status() === 'partial_outage'\",\n \"[class.viking-uptime-major]\": \"status() === 'major_outage'\",\n \"[class.viking-uptime-nodata]\": \"status() === 'no_data'\",\n \"[attr.title]\": \"title()\",\n },\n template: \"\",\n styles: [\n `\n :host {\n display: block;\n width: 100%;\n height: 100%;\n border-radius: var(--viking-radius);\n background: var(--viking-success);\n }\n :host(.viking-uptime-partial) {\n height: 70%;\n align-self: flex-end;\n background: var(--viking-warning);\n }\n :host(.viking-uptime-major) {\n height: 40%;\n align-self: flex-end;\n background: var(--viking-danger);\n }\n :host(.viking-uptime-nodata) {\n background: var(--viking-text-muted);\n opacity: 0.35;\n }\n `,\n ],\n})\nexport class VikingUptimeBar {\n readonly status = input<VikingUptimeStatus>(\"operational\");\n readonly title = input<string>(\"\");\n}\n","import { ChangeDetectionStrategy, Component, input } from \"@angular/core\";\nimport { VikingBar } from \"../bar/bar\";\nimport { VikingButton } from \"../button/button\";\nimport { VikingChart } from \"../chart/chart\";\nimport { VikingChartSeries } from \"../../core/types\";\n\n/**\n * viking-whitepaper-cta — Polars-style animated research CTA with bar grid + sparkline.\n */\n@Component({\n selector: \"viking-whitepaper-cta\",\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [VikingBar, VikingButton, VikingChart],\n template: `\n <section class=\"viking-whitepaper-cta\" [attr.aria-labelledby]=\"headingId\">\n <div class=\"viking-whitepaper-cta-bg\" aria-hidden=\"true\">\n <div class=\"viking-whitepaper-polars-grid\">\n @for (bar of barHeights; track $index) {\n <viking-bar class=\"viking-whitepaper-polars-bar\" [height]=\"bar\" />\n }\n </div>\n <viking-chart\n kind=\"sparkline\"\n [series]=\"sparklineSeries\"\n label=\"Research activity trend\"\n class=\"viking-whitepaper-sparkline viking-chart-wide\"\n />\n </div>\n\n <div class=\"viking-whitepaper-cta-content\">\n <span class=\"viking-whitepaper-tag\">{{ tag() }}</span>\n <h2 [id]=\"headingId\" class=\"viking-whitepaper-title\">{{ title() }}</h2>\n <p class=\"viking-whitepaper-description\">{{ description() }}</p>\n <viking-button\n variant=\"primary\"\n [href]=\"href()\"\n [attr.target]=\"external() ? '_blank' : null\"\n [attr.rel]=\"external() ? 'noopener noreferrer' : null\"\n icon=\"file\"\n class=\"viking-whitepaper-btn\"\n >\n {{ buttonLabel() }}\n </viking-button>\n </div>\n </section>\n `,\n styleUrl: \"./whitepaper-cta.scss\",\n styles: [\n `\n :host {\n display: block;\n width: 100%;\n }\n `,\n ],\n})\nexport class VikingWhitepaperCta {\n readonly tag = input(\"Research & Architecture\");\n readonly title = input(\"The Whitepaper\");\n readonly description = input(\n \"Event projection patterns, threat mitigation algorithms, and the architecture powering symmetrical multi-tenant pipelines.\",\n );\n readonly buttonLabel = input(\"Read Whitepaper\");\n readonly href = input(\"/whitepaper\");\n readonly external = input(false);\n\n protected readonly headingId = \"viking-whitepaper-cta-title\";\n protected readonly barHeights = [\n 72, 45, 88, 56, 91, 38, 67, 82, 49, 76, 58, 94,\n ];\n protected readonly sparklineSeries: VikingChartSeries[] = [\n {\n name: \"Research\",\n tone: \"accent\",\n data: [12, 18, 15, 22, 28, 24, 32, 35, 30, 38, 42, 45],\n },\n ];\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n input,\n} from \"@angular/core\";\nimport { VikingProgress } from \"../progress/progress\";\n\nexport interface VikingWizardStep {\n id: string;\n label: string;\n}\n\n/**\n * viking-wizard — multi-step modal shell with progress and action slots.\n */\n@Component({\n selector: \"viking-wizard\",\n imports: [VikingProgress],\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: { class: \"viking-wizard\" },\n template: `\n <viking-progress [value]=\"progressPercent()\" />\n <p class=\"viking-wizard-step-label\">{{ activeStep().label }}</p>\n <div class=\"viking-wizard-body\">\n <ng-content />\n </div>\n <footer class=\"viking-wizard-actions\">\n <ng-content select=\"[vikingWizardActions]\" />\n </footer>\n `,\n styles: [\n `\n :host {\n display: flex;\n flex-direction: column;\n gap: var(--viking-space-2);\n font-family: var(--viking-font-family);\n }\n .viking-wizard-step-label {\n margin: 0;\n font-size: var(--viking-font-size-sm);\n font-weight: var(--viking-font-weight-semibold);\n color: var(--viking-text-muted);\n letter-spacing: var(--viking-letter-spacing-wide);\n text-transform: uppercase;\n }\n .viking-wizard-body {\n display: flex;\n flex-direction: column;\n gap: var(--viking-space-2);\n }\n .viking-wizard-actions {\n display: flex;\n flex-wrap: wrap;\n justify-content: flex-end;\n gap: var(--viking-space-1);\n padding-top: var(--viking-space-2);\n border-top: 1px solid var(--viking-border);\n }\n `,\n ],\n})\nexport class VikingWizard {\n readonly steps = input<VikingWizardStep[]>([]);\n readonly step = input<string>(\"\");\n\n protected readonly activeStep = computed(\n () =>\n this.steps().find((item) => item.id === this.step()) ??\n this.steps()[0] ?? { id: \"\", label: \"\" },\n );\n\n protected readonly progressPercent = computed(() => {\n const steps = this.steps();\n if (steps.length <= 1) return 100;\n const index = steps.findIndex((item) => item.id === this.step());\n return Math.round(((index + 1) / steps.length) * 100);\n });\n}\n","import {\n DOCUMENT,\n Directive,\n ElementRef,\n Inject,\n OnDestroy,\n input,\n} from \"@angular/core\";\n\nlet tooltipIdCounter = 0;\n\n/**\n * vikingTooltip — attribute directive tooltip.\n * Shows on hover and keyboard focus; positions itself relative to the host.\n */\n@Directive({\n selector: \"[vikingTooltip]\",\n host: {\n class: \"viking-tooltip-host viking-focus-ring\",\n \"(mouseenter)\": \"show()\",\n \"(mouseleave)\": \"hide()\",\n \"(focusin)\": \"show()\",\n \"(focusout)\": \"hide()\",\n \"(keydown.escape)\": \"hide()\",\n \"[attr.aria-describedby]\": \"visible() ? tooltipId : null\",\n },\n})\nexport class VikingTooltip implements OnDestroy {\n constructor(\n private readonly host: ElementRef<HTMLElement>,\n @Inject(DOCUMENT) private readonly document: Document,\n ) {}\n\n readonly vikingTooltip = input.required<string>();\n readonly tooltipPosition = input<\"top\" | \"bottom\" | \"left\" | \"right\">(\"top\");\n readonly tooltipKbd = input<string>(\"\");\n\n protected readonly tooltipId = `viking-tooltip-${++tooltipIdCounter}`;\n\n private element: HTMLElement | null = null;\n\n protected visible = (): boolean => this.element !== null;\n\n protected show = (): void => {\n if (this.element || !this.vikingTooltip()) {\n return;\n }\n const tip = this.document.createElement(\"div\");\n tip.id = this.tooltipId;\n tip.setAttribute(\"role\", \"tooltip\");\n tip.className = \"viking-tooltip\";\n\n const text = this.document.createElement(\"span\");\n text.className = \"viking-tooltip-text\";\n text.textContent = this.vikingTooltip();\n tip.appendChild(text);\n\n if (this.tooltipKbd()) {\n const kbd = this.document.createElement(\"kbd\");\n kbd.className = \"viking-tooltip-kbd\";\n kbd.textContent = this.tooltipKbd();\n tip.appendChild(kbd);\n }\n\n this.document.body.appendChild(tip);\n this.position(tip);\n this.element = tip;\n };\n\n private position = (tip: HTMLElement): void => {\n const anchor = this.host.nativeElement.getBoundingClientRect();\n const rect = tip.getBoundingClientRect();\n const gap =\n parseInt(\n getComputedStyle(this.document.documentElement).getPropertyValue(\n \"--viking-space-1\",\n ),\n 10,\n ) || 8;\n const edge =\n parseInt(\n getComputedStyle(this.document.documentElement).getPropertyValue(\n \"--viking-space-1\",\n ),\n 10,\n ) || 8;\n\n let left = anchor.left + anchor.width / 2 - rect.width / 2;\n let top = anchor.top - rect.height - gap;\n\n switch (this.tooltipPosition()) {\n case \"bottom\":\n top = anchor.bottom + gap;\n break;\n case \"left\":\n left = anchor.left - rect.width - gap;\n top = anchor.top + anchor.height / 2 - rect.height / 2;\n break;\n case \"right\":\n left = anchor.right + gap;\n top = anchor.top + anchor.height / 2 - rect.height / 2;\n break;\n default:\n break;\n }\n\n tip.style.left = `${Math.max(edge, Math.min(left, window.innerWidth - rect.width - edge))}px`;\n tip.style.top = `${Math.max(edge, top)}px`;\n };\n\n protected hide = (): void => {\n this.element?.remove();\n this.element = null;\n };\n\n ngOnDestroy(): void {\n this.hide();\n }\n}\n","import {\n AfterViewInit,\n ChangeDetectionStrategy,\n Component,\n CUSTOM_ELEMENTS_SCHEMA,\n ElementRef,\n OnInit,\n PLATFORM_ID,\n inject,\n input,\n viewChild,\n} from \"@angular/core\";\nimport { isPlatformBrowser } from \"@angular/common\";\nimport {\n DEFAULT_SITE_URLS,\n type SiteDrakkarContext,\n type SiteUrls,\n} from \"../site-drakkar/site-drakkar.config\";\nimport { registerVikingElements } from \"../../web/index\";\n\nregisterVikingElements();\n\n/**\n * viking-suite-search-palette — thin Angular wrapper around `viking-suite-command-palette`.\n * Unified ⌘K command palette for deml.app with curated suite navigation.\n */\n@Component({\n selector: \"viking-suite-search-palette\",\n schemas: [CUSTOM_ELEMENTS_SCHEMA],\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <viking-suite-command-palette\n #palette\n [attr.context]=\"context()\"\n [attr.app-url]=\"urls().app\"\n [attr.marketing-url]=\"urls().marketing\"\n [attr.backend-url]=\"urls().backend\"\n [attr.placeholder]=\"placeholder()\"\n [attr.global-shortcut]=\"bindShortcut() ? '' : 'false'\"\n />\n `,\n})\nexport class VikingSuiteSearchPalette implements OnInit, AfterViewInit {\n private readonly platformId = inject(PLATFORM_ID);\n\n readonly context = input<SiteDrakkarContext>(\"app\");\n readonly urls = input<SiteUrls>(DEFAULT_SITE_URLS);\n readonly placeholder = input<string>(\n \"Search documentation, dashboard, settings…\",\n );\n readonly bindShortcut = input<boolean>(true);\n\n /** Optional callback when the palette opens (e.g. SearchService bridge). */\n readonly onRegister =\n input<(handlers: { open: () => void; close: () => void }) => void>();\n\n private readonly paletteRef = viewChild<ElementRef<HTMLElement>>(\"palette\");\n\n ngOnInit(): void {\n this.onRegister()?.({\n open: () => this.openPalette(),\n close: () => this.closePalette(),\n });\n }\n\n ngAfterViewInit(): void {\n if (!isPlatformBrowser(this.platformId)) {\n return;\n }\n const widgets =\n (globalThis as { DemlWidgets?: Record<string, unknown> }).DemlWidgets ??\n {};\n (globalThis as { DemlWidgets?: Record<string, unknown> }).DemlWidgets = {\n ...widgets,\n openSearch: () => this.openPalette(),\n closeSearch: () => this.closePalette(),\n };\n }\n\n /** Opens the palette. */\n openPalette(): void {\n const el = this.paletteRef()?.nativeElement as HTMLElement & {\n openPalette?: () => void;\n };\n el?.openPalette?.();\n }\n\n /** Closes the palette and clears the query. */\n closePalette(): void {\n const el = this.paletteRef()?.nativeElement as HTMLElement & {\n closePalette?: () => void;\n };\n el?.closePalette?.();\n }\n}\n","/*\n * @dataengineeringformachinelearning/viking-ui — public API surface.\n * Viking-UI: DEML premium design system for Angular (THEME.md palette only).\n */\n\nexport * from \"./core/types\";\nexport {\n VIKING_ICON_NAMES,\n VIKING_ICON_PATHS,\n VIKING_ICON_SIZE_PRESETS,\n VIKING_BRAND_ICON_NAMES,\n VIKING_LUCIDE_ICON_NAMES,\n MATERIAL_ICON_ALIASES,\n resolveVikingIcon,\n resolveVikingIconColor,\n resolveVikingIconSize,\n type VikingIconName,\n vikingIconViewBox,\n type VikingIconSizePreset,\n} from \"./core/icons\";\nexport {\n VIKING_BRAND_ICON_PATHS,\n VIKING_BRAND_ICON_FILLED_PATHS,\n VIKING_BRAND_ICON_NAMES_LIST,\n VIKING_DRAKKAR_ICON_PATHS,\n VIKING_DRAKKAR_ICON_FILLED_PATHS,\n VIKING_DRAKKAR_ICON_NAMES_LIST,\n type VikingBrandIconName,\n type VikingDrakkarIconName,\n} from \"./core/brand-icons\";\nexport {\n type VikingChartCurve,\n type VikingChartKind,\n type VikingDonutSegment,\n type VikingCommandItem,\n type VikingSelectOption,\n} from \"./core/types\";\nexport { type VikingSeriesPreset } from \"./tokens/series-presets\";\nexport { VikingControl, provideVikingCva } from \"./lib/core/cva\";\n\n// Framework-agnostic Web Components + registration\nexport {\n VikingBadgeWc,\n VikingButtonWc,\n VikingCalloutWc,\n VikingCardWc,\n VikingInputWc,\n VikingModalWc,\n VikingSearchPaletteWc,\n VikingSelectWc,\n VikingSuiteSearchPaletteWc,\n VikingThemeToggleWc,\n registerVikingBadgeWc,\n registerVikingButtonWc,\n registerVikingCalloutWc,\n registerVikingCardWc,\n registerVikingInputWc,\n registerVikingModalWc,\n registerVikingSearchPaletteWc,\n registerVikingSelectWc,\n registerVikingSuiteSearchPaletteWc,\n registerVikingThemeToggleWc,\n registerVikingElements,\n type VikingSearchPaletteItem,\n type VikingWcTone,\n} from \"./web/index\";\n\n// Site-drakkar config + services (cross-surface).\nexport * from \"./lib/site-drakkar/site-drakkar.config\";\nexport * from \"./lib/site-drakkar/suite-search-items\";\n\n// Angular components\nexport * from \"./lib/site-drakkar/site-navbar\";\nexport * from \"./lib/site-drakkar/site-footer\";\nexport * from \"./lib/theme-toggle/theme-toggle\";\nexport * from \"./lib/app-header/app-header\";\nexport * from \"./lib/app-sidebar/app-sidebar\";\nexport * from \"./lib/accordion/accordion\";\nexport * from \"./lib/auth-panel/auth-panel\";\nexport * from \"./lib/autocomplete/autocomplete\";\nexport * from \"./lib/avatar/avatar\";\nexport * from \"./lib/badge/badge\";\nexport * from \"./lib/bar/bar\";\nexport * from \"./lib/brand/brand\";\nexport * from \"./lib/breadcrumbs/breadcrumbs\";\nexport * from \"./lib/button/button\";\nexport * from \"./lib/button/button-group\";\nexport * from \"./lib/calendar/calendar\";\nexport * from \"./lib/callout/callout\";\nexport * from \"./lib/card/card\";\nexport * from \"./lib/card/card-title\";\nexport * from \"./lib/carousel/carousel\";\nexport * from \"./lib/chart/chart\";\nexport * from \"./lib/chart/chart-zoom\";\nexport * from \"./lib/confirm-dialog/confirm-dialog\";\nexport * from \"./lib/confirm-dialog/dialog.service\";\nexport * from \"./lib/chart-card-header/chart-card-header\";\nexport * from \"./lib/icon-heading/icon-heading\";\nexport * from \"./lib/chart-empty-state/chart-empty-state\";\nexport * from \"./lib/chart-panel/chart-panel\";\nexport * from \"./lib/checkbox/checkbox\";\nexport * from \"./lib/color-picker/color-picker\";\nexport * from \"./lib/command/command\";\nexport * from \"./lib/composer/composer\";\nexport * from \"./lib/context/context\";\nexport * from \"./lib/date-picker/date-picker\";\nexport * from \"./lib/dropdown/dropdown\";\nexport * from \"./lib/empty-state/empty-state\";\nexport * from \"./lib/editor/editor\";\nexport * from \"./lib/fab/fab\";\nexport * from \"./lib/field/field\";\nexport * from \"./lib/footer/footer\";\nexport * from \"./lib/form-section/form-section\";\nexport * from \"./lib/file-upload/file-upload\";\nexport * from \"./lib/gauge-arc/gauge-arc\";\nexport * from \"./lib/hud-panel/hud-panel\";\nexport * from \"./lib/icon/icon\";\nexport * from \"./lib/icon-badge/icon-badge\";\nexport { VikingIconComponent } from \"./lib/icon/icon\";\nexport * from \"./lib/icon-text/icon-text\";\nexport * from \"./lib/input/input\";\nexport * from \"./lib/kanban/kanban\";\nexport * from \"./lib/kbd/kbd\";\nexport * from \"./lib/label/label\";\nexport * from \"./lib/loading-overlay/loading-overlay\";\nexport * from \"./lib/metric-card/metric-card\";\nexport * from \"./lib/menubar/menubar\";\nexport * from \"./lib/modal/modal\";\nexport * from \"./lib/native-select/native-select\";\nexport * from \"./lib/navigation-menu/navigation-menu\";\nexport type { VikingNavItem } from \"./lib/navigation-menu/navigation-menu\";\nexport * from \"./lib/navbar/navbar\";\nexport * from \"./lib/otp-input/otp-input\";\nexport * from \"./lib/verification-code-field/verification-code-field\";\nexport * from \"./lib/page-back-link/page-back-link\";\nexport * from \"./lib/page-header/page-header\";\nexport * from \"./lib/pagination/pagination\";\nexport * from \"./lib/pillbox/pillbox\";\nexport * from \"./lib/popover/popover\";\nexport * from \"./lib/profile/profile\";\nexport * from \"./lib/progress/progress\";\nexport * from \"./lib/radio/radio\";\nexport * from \"./lib/ring-gauge/ring-gauge\";\nexport * from \"./lib/search-palette/search-palette\";\nexport * from \"./lib/select/select\";\nexport * from \"./lib/separator/separator\";\nexport * from \"./lib/scroll-area/scroll-area\";\nexport * from \"./lib/sheet/sheet\";\nexport * from \"./lib/sidebar-nav/sidebar-nav\";\nexport * from \"./lib/skeleton/skeleton\";\nexport * from \"./lib/spinner/spinner\";\nexport * from \"./lib/status-metric-row/status-metric-row\";\nexport * from \"./lib/slider/slider\";\nexport * from \"./lib/switch/switch\";\nexport * from \"./lib/table/table\";\nexport * from \"./lib/tabs/tab\";\nexport * from \"./lib/tabs/tab-panel\";\nexport * from \"./lib/tabs/tabs\";\nexport * from \"./lib/textarea/textarea\";\nexport * from \"./lib/toggle/toggle\";\nexport * from \"./lib/toggle/toggle-group\";\nexport * from \"./lib/time-picker/time-picker\";\nexport * from \"./lib/timeline/timeline\";\nexport * from \"./lib/toast/toast\";\nexport * from \"./lib/uptime-bar/uptime-bar\";\nexport * from \"./lib/whitepaper-cta/whitepaper-cta\";\nexport * from \"./lib/wizard/wizard\";\nexport type { VikingUptimeStatus } from \"./lib/uptime-bar/uptime-bar\";\nexport * from \"./lib/tooltip/tooltip\";\nexport * from \"./lib/typography/heading\";\nexport * from \"./lib/typography/text\";\nexport * from \"./lib/suite-search-palette/suite-search-palette\";\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["LUCIDE_ICON_PATHS","VIKING_BRAND_ICON_PATHS","VIKING_DRAKKAR_ICON_PATHS","VIKING_BRAND_ICON_FILLED_PATHS","VIKING_DRAKKAR_ICON_FILLED_PATHS","VIKING_BRAND_ICON_NAMES_LIST","VIKING_DRAKKAR_ICON_NAMES_LIST","VIKING_INTEGRATION_BRAND_COLORS","VIKING_INTEGRATION_BRAND_NAMES","isIntegrationBrandIcon","VIKING_INTEGRATION_BRAND_PATHS","integrationBrandSvg","VIKING_INTEGRATION_BRAND_SVGS","VIKING_INTEGRATION_ICON_PATHS","VIKING_INTEGRATION_ICON_NAMES_LIST","VIKING_ICON_SIZE_PRESETS","VIKING_CUSTOM_ICON_PATHS","VIKING_ICON_PATHS","VIKING_ICON_FILLED_PATHS","MATERIAL_ICON_ALIASES","VIKING_FILLED_ICON_NAMES","VIKING_BRAND_ICON_NAMES","VIKING_ICON_COLOR_TOKENS","vikingIconViewBox","resolveVikingIconSize","resolveVikingIconColor","VIKING_ICON_PATH_KEYS","resolveVikingIcon","VIKING_ICON_NAMES","VIKING_LUCIDE_ICON_NAMES","TONES","VALID_CONTEXTS","detectContext","readUrls","readContext","TONE_ICONS","i1.VikingDialogService","i1.VikingTabs","i1.VikingToggleGroup"],"mappings":"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"}
|