@dataengineeringformachinelearning/viking-ui 1.0.1 → 3.0.0-alpha.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.
Files changed (129) hide show
  1. package/README.md +180 -37
  2. package/dist/deml-components.css +1122 -0
  3. package/dist/design-tokens.css +688 -0
  4. package/dist/elements/button/viking-button.d.ts +14 -0
  5. package/dist/elements/card/viking-card.d.ts +8 -0
  6. package/dist/elements/core/dom.d.ts +4 -0
  7. package/dist/elements/core/styles.d.ts +2 -0
  8. package/dist/elements/modal/viking-modal.d.ts +15 -0
  9. package/dist/fonts/inter/InterVariable-Italic.woff2 +0 -0
  10. package/dist/fonts/inter/InterVariable.woff2 +0 -0
  11. package/dist/index.d.ts +1 -0
  12. package/dist/index.js +4051 -0
  13. package/dist/lib/core/brand-icons.d.ts +29 -0
  14. package/dist/lib/core/icons.d.ts +132 -0
  15. package/dist/lib/core/integration-brand-icons.d.ts +18 -0
  16. package/dist/lib/core/lucide-paths.generated.d.ts +90 -0
  17. package/dist/lib/site-drakkar/site-drakkar.config.d.ts +50 -0
  18. package/dist/lib/site-drakkar/suite-search-items.d.ts +17 -0
  19. package/dist/viking-components.css +1837 -0
  20. package/dist/viking-tokens.json +318 -0
  21. package/dist/viking-ui-elements.js +1750 -0
  22. package/dist/viking-ui.css +1 -0
  23. package/dist/web/badge/viking-badge-wc.d.ts +28 -0
  24. package/dist/web/button/viking-button-wc.d.ts +28 -0
  25. package/dist/web/callout/viking-callout-wc.d.ts +27 -0
  26. package/dist/web/card/viking-card-wc.d.ts +29 -0
  27. package/dist/web/core/base.d.ts +12 -0
  28. package/dist/web/core/dom.d.ts +11 -0
  29. package/dist/web/core/icons-inline.d.ts +7 -0
  30. package/dist/web/core/styles.d.ts +12 -0
  31. package/dist/web/core/types.d.ts +10 -0
  32. package/dist/web/field/viking-field-wc.d.ts +32 -0
  33. package/dist/web/index.d.ts +15 -0
  34. package/dist/web/input/viking-input-wc.d.ts +32 -0
  35. package/dist/web/modal/viking-modal-wc.d.ts +50 -0
  36. package/dist/web/search-palette/viking-search-palette-wc.d.ts +64 -0
  37. package/dist/web/select/viking-select-wc.d.ts +48 -0
  38. package/dist/web/suite-header/viking-suite-header-wc.d.ts +36 -0
  39. package/dist/web/suite-search-palette/viking-suite-search-palette-wc.d.ts +39 -0
  40. package/dist/web/theme-toggle/viking-theme-toggle-wc.d.ts +19 -0
  41. package/dist/web/types.d.ts +40 -0
  42. package/dist/web-components/index.d.ts +1 -0
  43. package/dist/web-components.js +1750 -0
  44. package/dist/widget.js +1182 -0
  45. package/package.json +89 -30
  46. package/src/assets/fonts/inter/InterVariable-Italic.woff2 +0 -0
  47. package/src/assets/fonts/inter/InterVariable.woff2 +0 -0
  48. package/src/elements/button/viking-button.ts +201 -0
  49. package/src/elements/card/viking-card.ts +60 -0
  50. package/src/elements/core/dom.ts +33 -0
  51. package/src/elements/core/styles.ts +28 -0
  52. package/src/elements/modal/viking-modal.ts +154 -0
  53. package/src/index.ts +1 -0
  54. package/src/lib/core/brand-icons.ts +62 -0
  55. package/src/lib/core/icons.ts +206 -0
  56. package/src/lib/core/integration-brand-icons.ts +77 -0
  57. package/src/lib/core/lucide-paths.generated.ts +130 -0
  58. package/src/lib/site-drakkar/site-drakkar.config.ts +295 -0
  59. package/src/lib/site-drakkar/suite-search-items.ts +246 -0
  60. package/src/styles/_buttons.scss +301 -0
  61. package/src/styles/_component-primitives.scss +183 -0
  62. package/src/styles/_drakkar-buttons.scss +85 -0
  63. package/src/styles/_fonts.scss +22 -0
  64. package/src/styles/_forms.scss +66 -0
  65. package/src/styles/_input.scss +106 -0
  66. package/src/styles/_layout-enforcement.scss +166 -0
  67. package/src/styles/_layout-rhythm.scss +158 -0
  68. package/src/styles/_legacy-aliases.scss +212 -0
  69. package/src/styles/_series-colors.scss +24 -0
  70. package/src/styles/_static-primitives.scss +857 -0
  71. package/src/styles/_typography.scss +87 -0
  72. package/src/styles/_variables.scss +527 -0
  73. package/src/styles/components/a11y.scss +90 -0
  74. package/src/styles/components/badges.scss +102 -0
  75. package/src/styles/components/extracted-utilities.scss +459 -0
  76. package/src/styles/components/footer.scss +155 -0
  77. package/src/styles/components/icon-heading.scss +47 -0
  78. package/src/styles/components/icon-inline.scss +78 -0
  79. package/src/styles/components/layout.scss +59 -0
  80. package/src/styles/components/utilities.scss +131 -0
  81. package/src/styles/components/viking-inspired.scss +204 -0
  82. package/src/styles/components/whitepaper-cta.scss +130 -0
  83. package/src/styles/components-bundle.scss +9 -0
  84. package/src/styles/components.scss +175 -0
  85. package/src/styles/deml-components.scss +10 -0
  86. package/src/styles/index.scss +8 -0
  87. package/src/styles/layout-shell.scss +39 -11
  88. package/src/styles/page-shell.scss +663 -33
  89. package/src/styles/static-navbar.scss +862 -146
  90. package/src/styles/surfaces/backend.scss +142 -0
  91. package/src/styles/surfaces/docs-global.scss +73 -0
  92. package/src/styles/surfaces/docs-shell.scss +412 -0
  93. package/src/styles/surfaces/docs-showcase.scss +1051 -0
  94. package/src/styles/surfaces/marketing-cta.scss +62 -0
  95. package/src/styles/surfaces/marketing-docs-bento.scss +67 -0
  96. package/src/styles/surfaces/marketing-global.scss +748 -0
  97. package/src/styles/surfaces/marketing-landing.scss +1260 -0
  98. package/src/styles/surfaces/marketing-publication.scss +535 -0
  99. package/src/styles/surfaces/marketing-theme.scss +14 -0
  100. package/src/styles/surfaces/swagger-ui.scss +921 -0
  101. package/src/styles/tokens-export.scss +18 -0
  102. package/src/styles/tokens.scss +5 -0
  103. package/src/styles/viking-ui-bundle.scss +21 -2
  104. package/src/styles/viking-ui.scss +213 -51
  105. package/src/tokens/viking-tokens.json +318 -0
  106. package/src/web/badge/viking-badge-wc.ts +116 -0
  107. package/src/web/button/viking-button-wc.ts +165 -0
  108. package/src/web/callout/viking-callout-wc.ts +105 -0
  109. package/src/web/card/viking-card-wc.ts +66 -0
  110. package/src/web/core/base.ts +56 -0
  111. package/src/web/core/dom.ts +53 -0
  112. package/src/web/core/icons-inline.ts +44 -0
  113. package/src/web/core/styles.ts +1138 -0
  114. package/src/web/core/types.ts +19 -0
  115. package/src/web/field/viking-field-wc.ts +154 -0
  116. package/src/web/index.ts +73 -0
  117. package/src/web/input/viking-input-wc.ts +211 -0
  118. package/src/web/modal/viking-modal-wc.ts +187 -0
  119. package/src/web/search-palette/viking-search-palette-wc.ts +494 -0
  120. package/src/web/select/viking-select-wc.ts +218 -0
  121. package/src/web/suite-header/viking-suite-header-wc.ts +714 -0
  122. package/src/web/suite-search-palette/viking-suite-search-palette-wc.ts +234 -0
  123. package/src/web/theme-toggle/viking-theme-toggle-wc.ts +139 -0
  124. package/src/web/types.ts +37 -0
  125. package/src/web-components/index.ts +1 -0
  126. package/fesm2022/dataengineeringformachinelearning-viking-ui.mjs +0 -5949
  127. package/fesm2022/dataengineeringformachinelearning-viking-ui.mjs.map +0 -1
  128. package/types/dataengineeringformachinelearning-viking-ui.d.ts +0 -1374
  129. package/viking.manifest.json +0 -189
@@ -1 +0,0 @@
1
- {"version":3,"file":"dataengineeringformachinelearning-viking-ui.mjs","sources":["../../../projects/viking-ui/src/lib/core/icons.ts","../../../projects/viking-ui/src/lib/core/cva.ts","../../../projects/viking-ui/src/lib/app-header/app-header.ts","../../../projects/viking-ui/src/lib/app-sidebar/app-sidebar.ts","../../../projects/viking-ui/src/lib/icon/icon.ts","../../../projects/viking-ui/src/lib/core/uid.ts","../../../projects/viking-ui/src/lib/accordion/accordion.ts","../../../projects/viking-ui/src/lib/autocomplete/autocomplete.ts","../../../projects/viking-ui/src/lib/avatar/avatar.ts","../../../projects/viking-ui/src/lib/badge/badge.ts","../../../projects/viking-ui/src/lib/bar/bar.ts","../../../projects/viking-ui/src/lib/brand/brand.ts","../../../projects/viking-ui/src/lib/breadcrumbs/breadcrumbs.ts","../../../projects/viking-ui/src/lib/button/button.ts","../../../projects/viking-ui/src/lib/button/button-group.ts","../../../projects/viking-ui/src/lib/calendar/calendar.ts","../../../projects/viking-ui/src/lib/callout/callout.ts","../../../projects/viking-ui/src/lib/card/card.ts","../../../projects/viking-ui/src/lib/carousel/carousel.ts","../../../projects/viking-ui/src/lib/chart/chart.ts","../../../projects/viking-ui/src/lib/checkbox/checkbox.ts","../../../projects/viking-ui/src/lib/color-picker/color-picker.ts","../../../projects/viking-ui/src/lib/command/command.ts","../../../projects/viking-ui/src/lib/composer/composer.ts","../../../projects/viking-ui/src/lib/context/context.ts","../../../projects/viking-ui/src/lib/date-picker/date-picker.ts","../../../projects/viking-ui/src/lib/dropdown/dropdown.ts","../../../projects/viking-ui/src/lib/editor/editor.ts","../../../projects/viking-ui/src/lib/fab/fab.ts","../../../projects/viking-ui/src/lib/field/field.ts","../../../projects/viking-ui/src/lib/footer/footer.ts","../../../projects/viking-ui/src/lib/file-upload/file-upload.ts","../../../projects/viking-ui/src/lib/gauge-arc/gauge-arc.ts","../../../projects/viking-ui/src/lib/hud-panel/hud-panel.ts","../../../projects/viking-ui/src/lib/input/input.ts","../../../projects/viking-ui/src/lib/kanban/kanban.ts","../../../projects/viking-ui/src/lib/kbd/kbd.ts","../../../projects/viking-ui/src/lib/label/label.ts","../../../projects/viking-ui/src/lib/metric-card/metric-card.ts","../../../projects/viking-ui/src/lib/menubar/menubar.ts","../../../projects/viking-ui/src/lib/modal/modal.ts","../../../projects/viking-ui/src/lib/native-select/native-select.ts","../../../projects/viking-ui/src/lib/navigation-menu/navigation-menu.ts","../../../projects/viking-ui/src/lib/navbar/navbar.ts","../../../projects/viking-ui/src/lib/otp-input/otp-input.ts","../../../projects/viking-ui/src/lib/page-header/page-header.ts","../../../projects/viking-ui/src/lib/pagination/pagination.ts","../../../projects/viking-ui/src/lib/pillbox/pillbox.ts","../../../projects/viking-ui/src/lib/popover/popover.ts","../../../projects/viking-ui/src/lib/profile/profile.ts","../../../projects/viking-ui/src/lib/progress/progress.ts","../../../projects/viking-ui/src/lib/radio/radio.ts","../../../projects/viking-ui/src/lib/ring-gauge/ring-gauge.ts","../../../projects/viking-ui/src/lib/search-palette/search-palette.ts","../../../projects/viking-ui/src/lib/select/select.ts","../../../projects/viking-ui/src/lib/separator/separator.ts","../../../projects/viking-ui/src/lib/scroll-area/scroll-area.ts","../../../projects/viking-ui/src/lib/sheet/sheet.ts","../../../projects/viking-ui/src/lib/skeleton/skeleton.ts","../../../projects/viking-ui/src/lib/spinner/spinner.ts","../../../projects/viking-ui/src/lib/slider/slider.ts","../../../projects/viking-ui/src/lib/switch/switch.ts","../../../projects/viking-ui/src/lib/table/table.ts","../../../projects/viking-ui/src/lib/tabs/tabs.ts","../../../projects/viking-ui/src/lib/tabs/tab.ts","../../../projects/viking-ui/src/lib/tabs/tab-panel.ts","../../../projects/viking-ui/src/lib/textarea/textarea.ts","../../../projects/viking-ui/src/lib/toggle/toggle-group.ts","../../../projects/viking-ui/src/lib/toggle/toggle.ts","../../../projects/viking-ui/src/lib/time-picker/time-picker.ts","../../../projects/viking-ui/src/lib/timeline/timeline.ts","../../../projects/viking-ui/src/lib/toast/toast.ts","../../../projects/viking-ui/src/lib/uptime-bar/uptime-bar.ts","../../../projects/viking-ui/src/lib/tooltip/tooltip.ts","../../../projects/viking-ui/src/lib/typography/heading.ts","../../../projects/viking-ui/src/lib/typography/text.ts","../../../projects/viking-ui/src/public-api.ts","../../../projects/viking-ui/src/dataengineeringformachinelearning-viking-ui.ts"],"sourcesContent":["/**\n * Zero-dependency inline SVG icon registry (24x24 stroke icons).\n * Icons are original geometric paths — no third-party icon package required.\n */\nexport type VikingIconName = keyof typeof VIKING_ICON_PATHS;\n\nexport const VIKING_ICON_PATHS = {\n check: '<path d=\"M4 12.5 9.5 18 20 6.5\"/>',\n x: '<path d=\"M6 6l12 12M18 6 6 18\"/>',\n plus: '<path d=\"M12 5v14M5 12h14\"/>',\n minus: '<path d=\"M5 12h14\"/>',\n 'chevron-down': '<path d=\"m6 9 6 6 6-6\"/>',\n 'chevron-up': '<path d=\"m6 15 6-6 6 6\"/>',\n 'chevron-left': '<path d=\"m15 6-6 6 6 6\"/>',\n 'chevron-right': '<path d=\"m9 6 6 6-6 6\"/>',\n 'arrow-right': '<path d=\"M4 12h16M13 5l7 7-7 7\"/>',\n 'arrow-left': '<path d=\"M20 12H4M11 5l-7 7 7 7\"/>',\n 'arrow-up-right': '<path d=\"M7 17 17 7M8 7h9v9\"/>',\n search: '<circle cx=\"11\" cy=\"11\" r=\"7\"/><path d=\"m16.5 16.5 4.5 4.5\"/>',\n calendar: '<rect x=\"3\" y=\"5\" width=\"18\" height=\"16\" rx=\"2\"/><path d=\"M8 3v4M16 3v4M3 10h18\"/>',\n clock: '<circle cx=\"12\" cy=\"12\" r=\"9\"/><path d=\"M12 7v5l3 3\"/>',\n user: '<circle cx=\"12\" cy=\"8\" r=\"4\"/><path d=\"M4 21c0-4 3.6-6.5 8-6.5s8 2.5 8 6.5\"/>',\n settings:\n '<circle cx=\"12\" cy=\"12\" r=\"3\"/><path d=\"M12 2v3M12 19v3M2 12h3M19 12h3M4.9 4.9l2.1 2.1M17 17l2.1 2.1M19.1 4.9 17 7M7 17l-2.1 2.1\"/>',\n info: '<circle cx=\"12\" cy=\"12\" r=\"9\"/><path d=\"M12 11v5M12 8h.01\"/>',\n 'alert-triangle': '<path d=\"M12 3 2.5 20h19L12 3z\"/><path d=\"M12 10v4M12 17.5h.01\"/>',\n 'alert-circle': '<circle cx=\"12\" cy=\"12\" r=\"9\"/><path d=\"M12 8v5M12 16.5h.01\"/>',\n 'check-circle': '<circle cx=\"12\" cy=\"12\" r=\"9\"/><path d=\"m8 12.5 2.8 2.8L16.5 9\"/>',\n bell: '<path d=\"M6 9a6 6 0 0 1 12 0c0 5 2 6.5 2 6.5H4S6 14 6 9\"/><path d=\"M10 19.5a2.2 2.2 0 0 0 4 0\"/>',\n star: '<path d=\"m12 3 2.7 5.9 6.3.7-4.7 4.3 1.3 6.1L12 16.9 6.4 20l1.3-6.1L3 9.6l6.3-.7L12 3z\"/>',\n heart: '<path d=\"M12 20.5C5.5 16 3 12.5 3 9a5 5 0 0 1 9-3 5 5 0 0 1 9 3c0 3.5-2.5 7-9 11.5z\"/>',\n trash: '<path d=\"M4 7h16M9 7V4h6v3M6.5 7l1 13h9l1-13M10 11v6M14 11v6\"/>',\n pencil: '<path d=\"m4 20 .8-3.8L16.6 4.4a2 2 0 0 1 2.8 0l.2.2a2 2 0 0 1 0 2.8L7.8 19.2 4 20z\"/>',\n copy: '<rect x=\"8\" y=\"8\" width=\"13\" height=\"13\" rx=\"2\"/><path d=\"M16 8V5a2 2 0 0 0-2-2H5a2 2 0 0 0-2 2v9a2 2 0 0 0 2 2h3\"/>',\n upload: '<path d=\"M12 16V4M6 10l6-6 6 6M4 20h16\"/>',\n download: '<path d=\"M12 4v12M6 10l6 6 6-6M4 20h16\"/>',\n send: '<path d=\"M21 3 3 10.5l7 3.5 3.5 7L21 3z\"/><path d=\"M10 14 21 3\"/>',\n paperclip:\n '<path d=\"m20 11-8.5 8.5a5 5 0 0 1-7-7L13 4a3.5 3.5 0 0 1 5 5l-8.5 8.5a2 2 0 0 1-3-3L15 6\"/>',\n image:\n '<rect x=\"3\" y=\"4\" width=\"18\" height=\"16\" rx=\"2\"/><circle cx=\"9\" cy=\"10\" r=\"2\"/><path d=\"m3 18 5-5 4 4 3-3 6 6\"/>',\n file: '<path d=\"M14 3H6a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V9l-6-6z\"/><path d=\"M14 3v6h6\"/>',\n folder: '<path d=\"M3 7a2 2 0 0 1 2-2h4l2 2h8a2 2 0 0 1 2 2v9a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V7z\"/>',\n menu: '<path d=\"M4 7h16M4 12h16M4 17h16\"/>',\n 'dots-horizontal':\n '<circle cx=\"5\" cy=\"12\" r=\"1\" fill=\"currentColor\"/><circle cx=\"12\" cy=\"12\" r=\"1\" fill=\"currentColor\"/><circle cx=\"19\" cy=\"12\" r=\"1\" fill=\"currentColor\"/>',\n 'dots-vertical':\n '<circle cx=\"12\" cy=\"5\" r=\"1\" fill=\"currentColor\"/><circle cx=\"12\" cy=\"12\" r=\"1\" fill=\"currentColor\"/><circle cx=\"12\" cy=\"19\" r=\"1\" fill=\"currentColor\"/>',\n 'grip-vertical':\n '<circle cx=\"9\" cy=\"6\" r=\"1\" fill=\"currentColor\"/><circle cx=\"9\" cy=\"12\" r=\"1\" fill=\"currentColor\"/><circle cx=\"9\" cy=\"18\" r=\"1\" fill=\"currentColor\"/><circle cx=\"15\" cy=\"6\" r=\"1\" fill=\"currentColor\"/><circle cx=\"15\" cy=\"12\" r=\"1\" fill=\"currentColor\"/><circle cx=\"15\" cy=\"18\" r=\"1\" fill=\"currentColor\"/>',\n sun: '<circle cx=\"12\" cy=\"12\" r=\"4\"/><path d=\"M12 2v2M12 20v2M2 12h2M20 12h2M4.9 4.9l1.4 1.4M17.7 17.7l1.4 1.4M19.1 4.9l-1.4 1.4M6.3 17.7l-1.4 1.4\"/>',\n moon: '<path d=\"M20 14.5A8.5 8.5 0 0 1 9.5 4 8.5 8.5 0 1 0 20 14.5z\"/>',\n eye: '<path d=\"M2 12s3.5-6.5 10-6.5S22 12 22 12s-3.5 6.5-10 6.5S2 12 2 12z\"/><circle cx=\"12\" cy=\"12\" r=\"3\"/>',\n 'eye-off':\n '<path d=\"m4 4 16 16\"/><path d=\"M10.6 6.2A11 11 0 0 1 12 6c6.5 0 10 6 10 6a17.6 17.6 0 0 1-3 3.6M6.6 6.6C3.9 8.3 2 12 2 12s3.5 6.5 10 6.5c1.4 0 2.7-.3 3.9-.8\"/>',\n bold: '<path d=\"M7 5h6a3.5 3.5 0 0 1 0 7H7V5zM7 12h7a3.5 3.5 0 0 1 0 7H7v-7z\"/>',\n italic: '<path d=\"M10 5h9M5 19h9M14 5l-4 14\"/>',\n underline: '<path d=\"M6 4v6a6 6 0 0 0 12 0V4M5 20h14\"/>',\n list: '<path d=\"M9 6h12M9 12h12M9 18h12M4 6h.01M4 12h.01M4 18h.01\"/>',\n 'list-ordered':\n '<path d=\"M10 6h11M10 12h11M10 18h11\"/><path d=\"M4 5h1.5v4M3.8 9h3M3.5 14.5c0-1.2 3-1.4 3 0 0 1-3 1.7-3 3.2h3\"/>',\n link: '<path d=\"M10 14a4 4 0 0 1 0-5.7l3-3a4 4 0 0 1 5.7 5.7L17.2 12.5\"/><path d=\"M14 10a4 4 0 0 1 0 5.7l-3 3a4 4 0 0 1-5.7-5.7L6.8 11.5\"/>',\n home: '<path d=\"m3 11 9-8 9 8\"/><path d=\"M5 10v10h14V10\"/>',\n mail: '<rect x=\"3\" y=\"5\" width=\"18\" height=\"14\" rx=\"2\"/><path d=\"m3 7 9 6 9-6\"/>',\n lock: '<rect x=\"5\" y=\"11\" width=\"14\" height=\"9\" rx=\"2\"/><path d=\"M8 11V8a4 4 0 0 1 8 0v3\"/>',\n globe:\n '<circle cx=\"12\" cy=\"12\" r=\"9\"/><path d=\"M3 12h18\"/><ellipse cx=\"12\" cy=\"12\" rx=\"4\" ry=\"9\"/>',\n loader: '<path d=\"M12 3a9 9 0 1 0 9 9\"/>',\n sparkle: '<path d=\"m12 3 1.8 5.2L19 10l-5.2 1.8L12 17l-1.8-5.2L5 10l5.2-1.8L12 3z\"/>',\n external: '<path d=\"M14 5h5v5M19 5 10 14M19 13v6H5V5h6\"/>',\n filter: '<path d=\"M4 6h16M7 12h10M10 18h4\"/>',\n terminal: '<path d=\"m5 7 5 5-5 5M12 17h7\"/>',\n refresh: '<path d=\"M20 12a8 8 0 1 1-2.3-5.7\"/><path d=\"M20 3v4h-4\"/>',\n 'log-out': '<path d=\"M13 4H5v16h8\"/><path d=\"m17 8 4 4-4 4M9 12h12\"/>',\n shield: '<path d=\"M12 3 4.5 6v5c0 5 3 8.5 7.5 10 4.5-1.5 7.5-5 7.5-10V6L12 3z\"/>',\n 'bar-chart': '<path d=\"M4 4v16h16M8 16v-5M12 16V8M16 16v-3\"/>',\n phone:\n '<path d=\"M5 4h4l1.5 4L8 10a12 12 0 0 0 6 6l2-2.5L20 15v4a2 2 0 0 1-2 2A16 16 0 0 1 3 6a2 2 0 0 1 2-2z\"/>',\n} as const;\n\nexport const VIKING_ICON_NAMES = Object.keys(VIKING_ICON_PATHS) as VikingIconName[];\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","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=\"[fluxAppHeaderBrand]\" />\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=\"[fluxAppHeaderNav]\" />\n </nav>\n <div class=\"viking-app-header-right\">\n <div class=\"viking-app-header-desktop-auth\">\n <ng-content select=\"[fluxAppHeaderAuth]\" />\n </div>\n <ng-content select=\"[fluxAppHeaderActions]\" />\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=\"[fluxAppHeaderMobile]\" />\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","import { ChangeDetectionStrategy, Component, computed, inject, input } from '@angular/core';\nimport { DomSanitizer, SafeHtml } from '@angular/platform-browser';\nimport { VIKING_ICON_PATHS, VikingIconName } from '../core/icons';\n\n/**\n * viking-icon — inline SVG icon (https://fluxui.dev/components/icon).\n * Zero-dependency 24x24 stroke icons from the internal registry.\n */\n@Component({\n selector: 'viking-icon',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n '[class.viking-icon-spin]': 'spin()',\n 'aria-hidden': 'true',\n },\n template: `\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"1.8\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n [style.width.px]=\"size()\"\n [style.height.px]=\"size()\"\n [innerHTML]=\"paths()\"\n ></svg>\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 }\n :host(.viking-icon-spin) svg {\n animation: viking-icon-rotate 0.9s linear infinite;\n }\n @keyframes viking-icon-rotate {\n to {\n transform: rotate(360deg);\n }\n }\n `,\n ],\n})\nexport class VikingIcon {\n private readonly sanitizer = inject(DomSanitizer);\n\n readonly name = input.required<VikingIconName>();\n readonly size = input<number>(24);\n readonly spin = input<boolean>(false);\n\n protected readonly paths = computed<SafeHtml>(() =>\n // Registry content is a static, trusted constant defined inside this package.\n this.sanitizer.bypassSecurityTrustHtml(VIKING_ICON_PATHS[this.name()] ?? ''),\n );\n}\n","let counter = 0;\n\n/** Generates a stable, unique DOM id for label/control associations. */\nexport const fluxUid = (prefix: string): string => {\n counter += 1;\n return `${prefix}-${counter}`;\n};\n","import { ChangeDetectionStrategy, Component, inject, input, model } from '@angular/core';\nimport { VikingIcon } from '../icon/icon';\nimport { fluxUid } from '../core/uid';\n\n/**\n * viking-accordion — collapsible content panels (https://fluxui.dev/components/accordion).\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 [name]=\"expanded() ? 'chevron-up' : 'chevron-down'\" [size]=\"18\" />\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 private readonly accordion = inject(VikingAccordion, { optional: true });\n\n readonly heading = input.required<string>();\n readonly expanded = model<boolean>(false);\n\n protected readonly panelId = fluxUid('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 {\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n computed,\n inject,\n input,\n model,\n output,\n signal,\n} from '@angular/core';\nimport { VikingControl, provideVikingCva } from '../core/cva';\nimport { VikingIcon } from '../icon/icon';\nimport { fluxUid } from '../core/uid';\n\n/**\n * viking-autocomplete — text input with filtered suggestions\n * (https://fluxui.dev/components/autocomplete). 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 private readonly host = inject<ElementRef<HTMLElement>>(ElementRef);\n\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 protected readonly open = signal(false);\n protected readonly activeIndex = signal(0);\n protected readonly panelId = fluxUid('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 => item.toLowerCase().includes(query));\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 => Math.min(items.length - 1, index + 1));\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 (this.open() && !this.host.nativeElement.contains(event.target as Node)) {\n this.open.set(false);\n }\n };\n}\n","import { ChangeDetectionStrategy, Component, computed, input, signal } from '@angular/core';\nimport { VikingTone } from '../core/types';\n\n/**\n * viking-avatar — image or initials avatar with optional status indicator\n * (https://fluxui.dev/components/avatar).\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 class=\"viking-avatar-status\" [class]=\"'viking-status-' + status()\" role=\"status\">\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 { ChangeDetectionStrategy, Component, computed, input, output } 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 (https://fluxui.dev/components/badge).\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: calc(var(--viking-space-1) / 1.5);\n font-family: var(--viking-font-family);\n font-size: var(--viking-font-size-ui);\n font-weight: 700;\n line-height: 1.3;\n padding: calc(var(--viking-space-1) / 3) 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 }\n :host(.viking-badge-sm) {\n padding: 0 var(--viking-space-1);\n }\n :host(.viking-badge-accent) {\n background: var(--viking-accent);\n border-color: var(--viking-accent);\n color: var(--viking-accent-content);\n }\n :host(.viking-badge-success) {\n background: color-mix(in srgb, var(--viking-success) 18%, transparent);\n border-color: var(--viking-success);\n color: var(--viking-text);\n }\n :host(.viking-badge-warning) {\n background: color-mix(in srgb, var(--viking-warning) 22%, transparent);\n border-color: var(--viking-warning);\n color: var(--viking-text);\n }\n :host(.viking-badge-danger) {\n background: color-mix(in srgb, var(--viking-danger) 18%, transparent);\n border-color: var(--viking-danger);\n color: var(--viking-text);\n }\n :host(.viking-badge-muted) {\n color: var(--viking-text-muted);\n }\n .viking-badge-remove {\n display: inline-flex;\n align-items: center;\n border: none;\n background: transparent;\n color: currentColor;\n cursor: pointer;\n padding: 2px;\n border-radius: var(--viking-radius-pill);\n }\n .viking-badge-remove:hover {\n background: var(--viking-accent-soft);\n }\n .viking-badge-remove:focus-visible {\n outline: var(--viking-ring-width) solid var(--viking-ring);\n outline-offset: 1px;\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';\n\n/**\n * viking-brand — logo + wordmark lockup (https://fluxui.dev/components/brand).\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 template: `\n @if (logoSrc()) {\n <img class=\"viking-brand-logo\" [src]=\"logoSrc()\" [alt]=\"name() + ' logo'\" />\n } @else {\n <span class=\"viking-brand-mark\" aria-hidden=\"true\">{{ name().charAt(0) }}</span>\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 {\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);\n background: var(--viking-accent);\n color: var(--viking-accent-content);\n font-weight: 700;\n font-size: var(--viking-font-size-ui);\n text-transform: uppercase;\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 (https://fluxui.dev/components/breadcrumbs).\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\">{{ item.label }}</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 transition: var(--viking-transition);\n }\n .viking-breadcrumb a:hover,\n .viking-breadcrumb a:focus-visible {\n color: var(--viking-accent);\n border-bottom-color: var(--viking-accent);\n }\n .viking-breadcrumb a:focus-visible {\n outline: var(--viking-ring-width) solid var(--viking-ring);\n outline-offset: var(--viking-ring-offset);\n border-radius: 3px;\n }\n .viking-breadcrumb span[aria-current='page'] {\n color: var(--viking-text);\n font-weight: 600;\n }\n `,\n ],\n})\nexport class VikingBreadcrumbs {\n readonly items = input.required<VikingBreadcrumb[]>();\n}\n","import { ChangeDetectionStrategy, Component, computed, input, output } from '@angular/core';\nimport { NgTemplateOutlet } from '@angular/common';\nimport { VikingIcon } from '../icon/icon';\nimport { VikingIconName } from '../core/icons';\nimport { VikingSize } from '../core/types';\n\nexport type VikingButtonVariant = 'outline' | 'primary' | 'filled' | 'danger' | 'ghost' | 'subtle';\n\n/**\n * viking-button — composable button (https://fluxui.dev/components/button).\n * Variants: outline (default), primary, filled, danger, ghost, subtle.\n */\n@Component({\n selector: 'viking-button',\n imports: [VikingIcon, NgTemplateOutlet],\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: { '[style.pointer-events]': \"disabled() ? 'none' : null\" },\n template: `\n @if (href()) {\n <a\n class=\"viking-btn\"\n [class]=\"classes()\"\n [href]=\"href()\"\n [attr.target]=\"target()\"\n [attr.aria-label]=\"label() || null\"\n [attr.rel]=\"target() === '_blank' ? 'noopener noreferrer' : null\"\n >\n <ng-container *ngTemplateOutlet=\"content\"></ng-container>\n </a>\n } @else {\n <button\n class=\"viking-btn\"\n [class]=\"classes()\"\n [type]=\"type()\"\n [disabled]=\"disabled() || loading()\"\n [attr.aria-label]=\"label() || null\"\n [attr.aria-busy]=\"loading() ? 'true' : null\"\n (click)=\"pressed.emit($event)\"\n >\n <ng-container *ngTemplateOutlet=\"content\"></ng-container>\n </button>\n }\n\n <ng-template #content>\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 </ng-template>\n `,\n styles: [\n `\n :host {\n display: inline-flex;\n }\n :host(.viking-full) {\n display: flex;\n }\n :host(.viking-full) .viking-btn {\n width: 100%;\n }\n .viking-btn {\n font-family: var(--viking-font-family);\n font-size: var(--viking-font-size-ui);\n font-weight: 700;\n letter-spacing: 0.01em;\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);\n width: auto;\n min-width: var(--viking-btn-min-width, 120px);\n white-space: nowrap;\n }\n :host(.viking-full) .viking-btn {\n min-width: 0;\n }\n .viking-btn:focus-visible {\n outline: var(--viking-ring-width) solid var(--viking-ring);\n outline-offset: var(--viking-ring-offset);\n }\n .viking-btn:disabled {\n opacity: 0.55;\n cursor: not-allowed;\n }\n .viking-sm {\n min-height: var(--viking-control-height-sm);\n padding: 0 var(--viking-space-2);\n }\n .viking-xs {\n min-height: var(--viking-control-height-xs);\n padding: 0 var(--viking-space-1);\n }\n .viking-square {\n width: var(--viking-control-height);\n padding: 0;\n }\n .viking-square.viking-sm {\n width: var(--viking-control-height-sm);\n }\n .viking-square.viking-xs {\n width: var(--viking-control-height-xs);\n }\n .viking-square .viking-btn-label {\n display: none;\n }\n\n .viking-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 .viking-outline:hover:not(:disabled) {\n background: var(--viking-surface-alt);\n border-color: var(--viking-accent-strong);\n }\n .viking-primary {\n background: var(--viking-accent);\n color: var(--viking-accent-content);\n border-color: var(--viking-accent);\n box-shadow: var(--viking-shadow-sm);\n }\n .viking-primary:hover:not(:disabled) {\n background: var(--viking-accent-strong);\n border-color: var(--viking-accent-strong);\n border-bottom-color: var(--hover-color, #fdca40);\n }\n .viking-filled {\n background: var(--viking-surface-alt);\n color: var(--viking-text);\n border-color: var(--viking-border);\n }\n .viking-filled:hover:not(:disabled) {\n border-color: var(--viking-accent-strong);\n }\n .viking-danger {\n background: var(--viking-danger);\n color: var(--viking-on-danger, #31393c);\n border-color: var(--viking-danger);\n }\n .viking-danger:hover:not(:disabled) {\n opacity: 0.9;\n }\n .viking-ghost {\n background: transparent;\n color: var(--viking-text);\n }\n .viking-ghost:hover:not(:disabled) {\n background: var(--viking-accent-soft);\n }\n .viking-subtle {\n background: transparent;\n color: var(--viking-text-muted);\n border-color: var(--viking-border);\n }\n .viking-subtle:hover:not(:disabled) {\n color: var(--viking-text);\n background: var(--viking-accent-soft);\n border-color: var(--viking-border-strong);\n }\n\n .viking-btn-kbd {\n font-family: var(--viking-font-family);\n font-size: var(--viking-font-size-ui);\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 `,\n ],\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 href = input<string | null>(null);\n readonly target = input<string | null>(null);\n readonly kbd = input<string | null>(null);\n /** Accessible name; required for icon-only (square) buttons. */\n readonly label = input<string>('');\n\n readonly pressed = output<MouseEvent>();\n\n protected readonly iconSize = computed(() => (this.size() === 'base' ? 22 : 18));\n protected readonly classes = computed(() => ({\n [`viking-${this.variant()}`]: true,\n [`viking-${this.size()}`]: this.size() !== 'base',\n 'viking-square': this.square(),\n }));\n}\n","import { ChangeDetectionStrategy, Component } from '@angular/core';\n\n/**\n * viking-button-group — fuses buttons with shared borders\n * (https://fluxui.dev/components/button#button-groups).\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 }\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 }\n `,\n ],\n})\nexport class VikingButtonGroup {}\n","import { ChangeDetectionStrategy, Component, computed, model, signal } 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 (https://fluxui.dev/components/calendar).\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\">{{ title() }}</span>\n <button type=\"button\" class=\"viking-calendar-nav\" aria-label=\"Next month\" (click)=\"move(1)\">\n <viking-icon name=\"chevron-right\" [size]=\"18\" />\n </button>\n </div>\n <div class=\"viking-calendar-grid\" role=\"group\" [attr.aria-label]=\"title()\">\n @for (weekday of weekdays; track weekday) {\n <span class=\"viking-calendar-weekday\" aria-hidden=\"true\">{{ weekday }}</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 border: 1px solid var(--viking-border);\n background: transparent;\n color: var(--viking-text-muted);\n border-radius: calc(var(--viking-radius) / 1.5);\n padding: 5px;\n cursor: pointer;\n transition: var(--viking-transition);\n }\n .viking-calendar-nav:hover {\n color: var(--viking-text);\n border-color: var(--viking-accent-strong);\n }\n .viking-calendar-nav:focus-visible {\n outline: var(--viking-ring-width) solid var(--viking-ring);\n outline-offset: 1px;\n }\n .viking-calendar-grid {\n display: grid;\n grid-template-columns: repeat(7, 1fr);\n gap: 2px;\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: var(--viking-space-4);\n height: var(--viking-space-4);\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: calc(var(--viking-radius) / 1.5);\n font-family: var(--viking-font-family);\n font-size: var(--viking-font-size);\n cursor: pointer;\n transition: var(--viking-transition);\n font-variant-numeric: tabular-nums;\n }\n .viking-calendar-day:hover:not(.viking-selected) {\n background: var(--viking-accent-soft);\n }\n .viking-calendar-day:focus-visible {\n outline: var(--viking-ring-width) solid var(--viking-ring);\n outline-offset: 1px;\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(start.getFullYear(), start.getMonth(), start.getDate() + index);\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(view => new Date(view.getFullYear(), view.getMonth() + delta, 1));\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 { ChangeDetectionStrategy, Component, computed, input, output, signal } 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 success: 'check-circle',\n warning: 'alert-triangle',\n danger: 'alert-circle',\n muted: 'info',\n};\n\n/**\n * viking-callout — highlighted message block (https://fluxui.dev/components/callout).\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 class=\"viking-callout-icon\" [name]=\"resolvedIcon()\" [size]=\"22\" />\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 type=\"button\" class=\"viking-callout-close\" aria-label=\"Dismiss\" (click)=\"dismiss()\">\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);\n border: 1px solid var(--viking-border);\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);\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 background: var(--viking-accent-soft);\n }\n :host(.viking-callout-accent) .viking-callout-icon {\n color: var(--viking-accent);\n }\n :host(.viking-callout-success) {\n border-color: var(--viking-success);\n background: color-mix(in srgb, var(--viking-success) 10%, transparent);\n }\n :host(.viking-callout-success) .viking-callout-icon {\n color: var(--viking-success);\n }\n :host(.viking-callout-warning) {\n border-color: var(--viking-warning);\n background: color-mix(in srgb, var(--viking-warning) 14%, transparent);\n }\n :host(.viking-callout-danger) {\n border-color: var(--viking-danger);\n background: color-mix(in srgb, var(--viking-danger) 10%, transparent);\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: 4px;\n border-radius: var(--viking-radius);\n display: inline-flex;\n }\n .viking-callout-close:hover {\n color: var(--viking-text);\n background: var(--viking-accent-soft);\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-card — surface container (https://fluxui.dev/components/card).\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: { '[class.viking-card-interactive]': 'interactive()' },\n template: `<ng-content />`,\n styles: [\n `\n :host {\n display: block;\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-sm);\n padding: var(--viking-space-3);\n color: var(--viking-text);\n transition: var(--viking-transition);\n }\n :host(.viking-card-interactive):hover {\n border-color: var(--viking-accent-strong);\n box-shadow: var(--viking-shadow-md);\n transform: translateY(-2px);\n }\n `,\n ],\n})\nexport class VikingCard {\n readonly interactive = input<boolean>(false);\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);\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-1);\n padding-top: var(--viking-space-2);\n margin-top: var(--viking-space-2);\n border-top: 1px solid var(--viking-border);\n }\n `,\n ],\n})\nexport class VikingCardFooter {}\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 (https://fluxui.dev/components/carousel).\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 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);\n }\n .viking-carousel-nav:hover:not(:disabled) {\n border-color: var(--viking-accent-strong);\n background: var(--viking-accent-soft);\n }\n .viking-carousel-nav:focus-visible {\n outline: var(--viking-ring-width) solid var(--viking-ring);\n outline-offset: 1px;\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 width: 11px;\n height: 11px;\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);\n }\n .viking-carousel-dot.viking-active {\n background: var(--viking-accent);\n border-color: var(--viking-accent);\n }\n .viking-carousel-dot:focus-visible {\n outline: var(--viking-ring-width) solid var(--viking-ring);\n outline-offset: 1px;\n }\n `,\n ],\n})\nexport class VikingCarousel {\n private readonly viewport = 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({ left: clamped * element.clientWidth, behavior: 'smooth' });\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","import { ChangeDetectionStrategy, Component, computed, input } from '@angular/core';\nimport {\n VikingChartCurve,\n VikingChartKind,\n VikingChartSeries,\n VikingDonutSegment,\n VikingTone,\n} from '../core/types';\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 success: 'var(--viking-success)',\n warning: 'var(--viking-warning)',\n danger: 'var(--viking-danger)',\n muted: 'var(--viking-text-muted)',\n};\n\nconst WIDTH = 720;\nconst HEIGHT_DEFAULT = 240;\nconst HEIGHT_COMPACT = 200;\nconst HEIGHT_SPARKLINE = 48;\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 = (value: number | string | undefined, sparkline: boolean): 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 >\n <svg\n [attr.viewBox]=\"'0 0 ' + width + ' ' + height()\"\n preserveAspectRatio=\"xMidYMid meet\"\n role=\"img\"\n [attr.aria-label]=\"label() || 'Chart'\"\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 r=\"46\"\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]=\"width - resolvedGutter().left - resolvedGutter().right\"\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 (bar of barRects(); track bar.x + '-' + bar.y + '-' + bar.tone) {\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 (point of linePoints(); track point.x + '-' + point.y + '-' + point.tone) {\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 (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: 240px;\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 }\n .viking-chart:not(.viking-chart-fill):not(.viking-chart-sparkline) {\n aspect-ratio: 3 / 1;\n }\n .viking-chart-fill {\n flex: 1 1 auto;\n display: flex;\n flex-direction: column;\n min-height: 240px;\n height: 100%;\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: 3rem;\n }\n svg {\n display: block;\n width: 100%;\n height: 100%;\n min-height: 120px;\n background: transparent;\n overflow: visible;\n }\n .viking-chart-fill svg {\n flex: 1 1 auto;\n min-height: 200px;\n max-height: none;\n }\n .viking-chart-sparkline svg {\n min-height: 0;\n border: none;\n }\n .viking-chart-compact svg {\n max-height: 220px;\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: 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-area {\n opacity: 0.28;\n stroke: none;\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: 0.95;\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: 14px;\n font-weight: 700;\n font-family: var(--viking-font-family);\n }\n .viking-chart-legend {\n display: flex;\n flex-wrap: wrap;\n justify-content: center;\n gap: var(--viking-space-2);\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-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 `,\n ],\n})\nexport class VikingChart {\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>('linear');\n readonly showPoints = input<boolean>(false);\n readonly pointRadius = input<number>(4);\n readonly barWidth = input<number>(85);\n readonly barRadius = input<number>(4);\n readonly gutter = input<number | string | undefined>(undefined);\n readonly tickCount = input<number>(4);\n readonly showLegend = input<boolean | undefined>(undefined);\n\n protected readonly width = WIDTH;\n\n protected readonly isSparkline = computed(() => this.kind() === 'sparkline');\n\n protected readonly resolvedGutter = computed(() =>\n parseGutter(this.gutter(), 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 return this.compact() ? HEIGHT_COMPACT : HEIGHT_DEFAULT;\n });\n\n protected readonly plotBottom = computed(() => this.height() - this.resolvedGutter().bottom);\n protected readonly plotTop = computed(() => this.resolvedGutter().top);\n protected readonly plotCy = computed(() => this.height() / 2);\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 renderArea = computed(() => this.kind() === 'area' || this.showArea());\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.series();\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 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.series()[0];\n const count = primary?.data.length ?? 0;\n if (count === 0) {\n return [];\n }\n\n const cats = this.categories();\n const plotWidth = WIDTH - this.resolvedGutter().left - this.resolvedGutter().right;\n const maxLabels = 6;\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 ? plotWidth / 2 : (index / Math.max(1, count - 1)) * plotWidth);\n const text = cats[index] ? truncateLabel(cats[index]) : `${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 = this.resolvedGutter().left + (last / Math.max(1, count - 1)) * plotWidth;\n const text = cats[last] ? truncateLabel(cats[last]) : `${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.series().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 = WIDTH - this.resolvedGutter().left - this.resolvedGutter().right;\n const buildPath = this.curve() === 'smooth' ? buildSmoothPath : buildLinearPath;\n\n return this.series().map(item => {\n const points = item.data.map((value, index) => {\n const x =\n this.resolvedGutter().left + (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.series().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 = WIDTH - this.resolvedGutter().left - this.resolvedGutter().right;\n\n return this.series().flatMap(item =>\n item.data.map((value, index) => {\n const x =\n this.resolvedGutter().left + (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.series()[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 = WIDTH - this.resolvedGutter().left - this.resolvedGutter().right;\n const widthPercent = this.barWidth() / 100;\n const slotWidth = plotWidth / primary.data.length;\n const barWidth = Math.max(4, slotWidth * widthPercent);\n\n return primary.data.map((value, index) => {\n const normalized = (value - min) / range;\n const height = Math.max(0, normalized * plotHeight);\n const x = this.resolvedGutter().left + index * slotWidth + (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.series();\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 = WIDTH - this.resolvedGutter().left - this.resolvedGutter().right;\n const groupWidth = plotWidth / count;\n const widthPercent = this.barWidth() / 100;\n const barWidth = Math.max(3, (groupWidth * widthPercent) / 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 = groupWidth * widthPercent;\n const groupOffset = (groupWidth - groupInner) / 2;\n\n series.forEach((item, seriesIndex) => {\n const value = item.data[index] ?? 0;\n const normalized = (value - min) / range;\n const height = Math.max(0, normalized * plotHeight);\n const x = groupStart + groupOffset + seriesIndex * barWidth;\n const y = bottom - height;\n rects.push({\n x,\n y,\n width: barWidth - 1,\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.series();\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 = WIDTH - this.resolvedGutter().left - this.resolvedGutter().right;\n const widthPercent = this.barWidth() / 100;\n const slotWidth = plotWidth / count;\n const barWidth = Math.max(4, slotWidth * widthPercent);\n const rects: BarRect[] = [];\n\n for (let index = 0; index < count; index += 1) {\n let cursor = bottom;\n const x = this.resolvedGutter().left + index * slotWidth + (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 = 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, model } from '@angular/core';\nimport { VikingControl, provideVikingCva } from '../core/cva';\nimport { VikingIcon } from '../icon/icon';\n\n/**\n * viking-checkbox — custom checkbox (https://fluxui.dev/components/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 class=\"viking-checkbox\" [class.viking-disabled]=\"disabled() || formDisabled()\">\n <span class=\"viking-checkbox-box\" [class.viking-checked]=\"checked() || indeterminate()\">\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: 0.55;\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: 3px;\n border: 1px solid var(--viking-border-strong);\n border-radius: calc(var(--viking-radius) / 2);\n background: var(--viking-surface);\n color: var(--viking-accent-content);\n transition: var(--viking-transition);\n flex-shrink: 0;\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: var(--viking-accent);\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","import { ChangeDetectionStrategy, Component, input, model } from '@angular/core';\nimport { VikingControl, provideVikingCva } from '../core/cva';\nimport { VikingIcon } from '../icon/icon';\n\n/**\n * viking-color-picker — swatch presets + custom color input\n * (https://fluxui.dev/components/color-picker). 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 class=\"viking-color-picker\" role=\"group\" [attr.aria-label]=\"label() || 'Color picker'\">\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);\n cursor: pointer;\n color: var(--white, #ffffff);\n transition: var(--viking-transition);\n padding: 0;\n }\n .viking-color-swatch:hover,\n .viking-color-custom:hover {\n transform: scale(1.08);\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 .viking-selected {\n border-color: var(--viking-text);\n box-shadow: var(--viking-shadow-sm);\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-size: var(--viking-font-size);\n color: var(--viking-text-muted);\n background: transparent;\n padding: 0;\n font-variant-numeric: tabular-nums;\n }\n `,\n ],\n})\nexport class VikingColorPicker extends VikingControl<string> {\n readonly value = model<string>('#2176ff');\n readonly label = input<string>('');\n readonly disabled = input<boolean>(false);\n /** Preset swatches — defaults to the THEME.md palette. */\n readonly presets = input<string[]>(['#31393c', '#2176ff', '#33a1fd', '#fdca40', '#f79824']);\n\n writeValue(value: string): void {\n this.value.set(value || '#2176ff');\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 computed,\n input,\n model,\n output,\n signal,\n} from '@angular/core';\nimport { VikingIcon } from '../icon/icon';\nimport { VikingCommandItem } from '../core/types';\n\n/**\n * viking-command — command palette (https://fluxui.dev/components/command).\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 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 }\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 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);\n border-radius: calc(var(--viking-radius) / 1.5);\n cursor: pointer;\n text-align: left;\n }\n .viking-command-item.viking-active {\n background: var(--viking-accent-soft);\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 protected readonly query = signal('');\n protected readonly activeId = signal<string>('');\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 => item.label.toLowerCase().includes(query));\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 = 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 { ChangeDetectionStrategy, Component, input, model, output } from '@angular/core';\nimport { VikingIcon } from '../icon/icon';\n\n/**\n * viking-composer — message composer with attachments and send action\n * (https://fluxui.dev/components/composer).\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) var(--viking-space-1)\n 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: 0.55;\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 { ChangeDetectionStrategy, Component, ElementRef, inject, signal } from '@angular/core';\n\n/**\n * viking-context — right-click context menu (https://fluxui.dev/components/context).\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 private readonly host = inject<ElementRef<HTMLElement>>(ElementRef);\n\n protected readonly open = signal(false);\n protected readonly position = signal({ x: 0, y: 0 });\n\n protected onContextMenu = (event: MouseEvent): void => {\n event.preventDefault();\n const rect = this.host.nativeElement.getBoundingClientRect();\n this.position.set({ x: event.clientX - rect.left, y: event.clientY - rect.top });\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 inject,\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 (https://fluxui.dev/components/date-picker).\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 class=\"viking-date-value\" [class.viking-date-placeholder]=\"!value()\">\n {{ value() || placeholder() }}\n </span>\n <viking-icon [name]=\"open() ? 'chevron-up' : 'chevron-down'\" [size]=\"18\" />\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: 0.55;\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 private readonly host = inject<ElementRef<HTMLElement>>(ElementRef);\n\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 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 (this.open() && !this.host.nativeElement.contains(event.target as Node)) {\n this.open.set(false);\n }\n };\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n inject,\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 (https://fluxui.dev/components/dropdown).\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 class=\"viking-dropdown-menu\" [class.viking-dropdown-end]=\"align() === 'end'\" role=\"menu\">\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 private readonly host = inject<ElementRef<HTMLElement>>(ElementRef);\n\n readonly open = model<boolean>(false);\n readonly align = input<'start' | 'end'>('start');\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('.viking-dropdown-trigger');\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 (this.open() && !this.host.nativeElement.contains(event.target as Node)) {\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: 0.55;\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 private readonly dropdown = inject(VikingDropdown, { optional: true });\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 {\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n afterNextRender,\n inject,\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 { icon: 'list-ordered', command: 'insertOrderedList', label: 'Numbered list' },\n];\n\n/**\n * viking-editor — lightweight rich text editor (https://fluxui.dev/components/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 class=\"viking-editor-toolbar\" role=\"toolbar\" aria-label=\"Text formatting\">\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 = viewChild.required<ElementRef<HTMLElement>>('surface');\n private readonly document =\n inject<ElementRef<HTMLElement>>(ElementRef).nativeElement.ownerDocument;\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() {\n super();\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 { ChangeDetectionStrategy, Component, input, output } 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: calc(var(--viking-space-2) * 1.75);\n right: calc(var(--viking-space-2) * 1.75);\n width: 56px;\n height: 56px;\n border-radius: 50%;\n background: var(--viking-accent);\n color: var(--viking-accent-content);\n border: 1px solid var(--viking-border);\n box-shadow: var(--viking-shadow-sm);\n cursor: pointer;\n z-index: 999;\n display: flex;\n align-items: center;\n justify-content: center;\n transition:\n transform 0.2s cubic-bezier(0.4, 0, 0.2, 1),\n box-shadow 0.2s ease,\n filter 0.2s;\n }\n .viking-fab:hover:not(:disabled) {\n transform: scale(1.08);\n box-shadow: var(--viking-shadow-md);\n filter: brightness(1.1);\n }\n .viking-fab:active:not(:disabled) {\n transform: scale(0.95);\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: 0.55;\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 { fluxUid } from '../core/uid';\n\n/**\n * viking-field — label / description / error wrapper for any control\n * (https://fluxui.dev/components/field).\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\">\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\">{{ description() }}</p>\n }\n @if (error()) {\n <p class=\"viking-field-error\" [id]=\"errorId\" role=\"alert\">{{ error() }}</p>\n }\n `,\n styles: [\n `\n :host {\n display: block;\n font-family: var(--viking-font-family);\n }\n .viking-field-label-wrap {\n display: flex;\n flex-direction: column;\n gap: calc(var(--viking-space-1) / 1.5);\n }\n .viking-field-label {\n font-size: var(--viking-font-size);\n font-weight: 600;\n color: var(--viking-text);\n }\n .viking-field-required {\n color: var(--viking-danger);\n }\n .viking-field-description,\n .viking-field-error {\n margin: calc(var(--viking-space-1) / 1.5) 0 0;\n font-size: var(--viking-font-size);\n line-height: 1.45;\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: 600;\n }\n :host(.viking-field-invalid) ::ng-deep .viking-control {\n border-color: var(--viking-danger);\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 = fluxUid('viking-field-description');\n protected readonly errorId = fluxUid('viking-field-error');\n}\n","import { ChangeDetectionStrategy, Component, ViewEncapsulation } from '@angular/core';\n\n/**\n * viking-footer — site-wide footer chrome. 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=\"[fluxFooterDirectory]\" />\n <section class=\"viking-footer-bottom footer-bottom\">\n <ng-content select=\"[fluxFooterBottom]\" />\n </section>\n </div>\n </footer>\n `,\n styleUrl: './footer.scss',\n})\nexport class VikingFooter {}\n","import { ChangeDetectionStrategy, Component, input, output, signal } from '@angular/core';\nimport { VikingIcon } from '../icon/icon';\n\n/**\n * viking-file-upload — drag & drop file zone (https://fluxui.dev/components/file-upload).\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 => (this.multiple() ? [...list, ...files] : files.slice(0, 1)));\n this.filesChanged.emit(this.fileList());\n }\n}\n","import { ChangeDetectionStrategy, Component, computed, input } 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\">\n <path class=\"viking-gauge-arc-bg\" d=\"M 10 50 A 40 40 0 0 1 90 50\" />\n <path\n class=\"viking-gauge-arc-fill\"\n d=\"M 10 50 A 40 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 }\n .viking-gauge-arc-svg {\n width: 100%;\n height: auto;\n overflow: visible;\n }\n .viking-gauge-arc-bg,\n .viking-gauge-arc-fill {\n fill: none;\n stroke-width: 8;\n stroke-linecap: round;\n }\n .viking-gauge-arc-bg {\n stroke: color-mix(in srgb, var(--viking-text-muted) 25%, transparent);\n }\n .viking-gauge-arc-fill {\n stroke: var(--viking-accent);\n transition: stroke-dasharray 0.4s ease;\n }\n :host(.viking-gauge-arc-amber) .viking-gauge-arc-fill {\n stroke: var(--viking-warning);\n }\n :host(.viking-gauge-arc-danger) .viking-gauge-arc-fill {\n stroke: var(--viking-danger);\n }\n :host(.viking-gauge-arc-primary) .viking-gauge-arc-fill {\n stroke: 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=\"[fluxHudPanelBadge]\" />\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, model, output } from '@angular/core';\nimport { VikingControl, provideVikingCva } from '../core/cva';\nimport { VikingIcon } from '../icon/icon';\nimport { VikingIconName } from '../core/icons';\n\n/**\n * viking-input — text input with icons, kbd hint and clearable state\n * (https://fluxui.dev/components/input). ControlValueAccessor-compatible.\n */\n@Component({\n selector: 'viking-input',\n imports: [VikingIcon],\n providers: [provideVikingCva(VikingInput)],\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <div class=\"viking-control viking-input-shell\" [class.viking-disabled]=\"isDisabled()\">\n @if (icon()) {\n <viking-icon class=\"viking-input-icon\" [name]=\"icon()!\" [size]=\"20\" />\n }\n <input\n [type]=\"type()\"\n [placeholder]=\"placeholder()\"\n [value]=\"value()\"\n [disabled]=\"isDisabled()\"\n [attr.aria-label]=\"label() || placeholder() || 'Text input'\"\n [attr.autocomplete]=\"autocomplete() || null\"\n (input)=\"onInput($event)\"\n (blur)=\"onTouched()\"\n />\n @if (clearable() && value()) {\n <button type=\"button\" class=\"viking-input-clear\" aria-label=\"Clear input\" (click)=\"clear()\">\n <viking-icon name=\"x\" [size]=\"16\" />\n </button>\n }\n @if (kbd()) {\n <kbd class=\"viking-input-kbd\">{{ kbd() }}</kbd>\n }\n @if (iconTrailing()) {\n <viking-icon class=\"viking-input-icon\" [name]=\"iconTrailing()!\" [size]=\"20\" />\n }\n </div>\n `,\n styles: [\n `\n :host {\n display: block;\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 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-input-shell:hover:not(.viking-disabled) {\n border-color: var(--viking-accent-strong);\n }\n .viking-input-shell: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: 0.55;\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 padding: 0;\n }\n input::placeholder {\n color: var(--viking-text-muted);\n }\n .viking-input-icon {\n color: var(--viking-text-muted);\n }\n .viking-input-clear {\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-input-clear:hover {\n color: var(--viking-text);\n background: var(--viking-accent-soft);\n }\n .viking-input-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 `,\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 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 onInput = (event: Event): void => {\n const next = (event.target as HTMLInputElement).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 { ChangeDetectionStrategy, Component, model, output, signal } from '@angular/core';\nimport { VikingIcon } from '../icon/icon';\nimport { VikingBadge } from '../badge/badge';\nimport { VikingKanbanCard, VikingKanbanColumn, VikingKanbanMove } from '../core/types';\n\n/**\n * viking-kanban — drag & drop board (https://fluxui.dev/components/kanban).\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 class=\"viking-kanban\" role=\"group\" aria-label=\"Kanban board\" tabindex=\"0\">\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 class=\"viking-kanban-grip\" name=\"grip-vertical\" [size]=\"16\" />\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 = 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 { ...column, cards: column.cards.filter(card => card.id !== source.card.id) };\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 (Spartan-inspired, zero-dependency).\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 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 (Spartan-inspired).\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';\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\"><ng-content />{{ value() }}</span>\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 (Spartan-inspired).\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 ElementRef,\n effect,\n inject,\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 * (https://fluxui.dev/components/modal). 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\"><ng-content select=\"[vikingModalActions]\" /></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-md);\n width: min(522px, calc(100vw - var(--viking-space-4)));\n }\n .viking-modal::backdrop {\n background: var(--viking-overlay-backdrop, rgba(49, 57, 60, 0.55));\n backdrop-filter: blur(4px);\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 }\n .viking-modal-header {\n display: flex;\n align-items: flex-start;\n justify-content: space-between;\n gap: var(--viking-space-2);\n }\n .viking-modal-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-modal-close {\n display: inline-flex;\n border: none;\n background: transparent;\n color: var(--viking-text-muted);\n cursor: pointer;\n padding: 4px;\n border-radius: var(--viking-radius);\n }\n .viking-modal-close:hover {\n color: var(--viking-text);\n background: var(--viking-accent-soft);\n }\n .viking-modal-close:focus-visible {\n outline: var(--viking-ring-width) solid var(--viking-ring);\n outline-offset: 1px;\n }\n .viking-modal-body {\n font-size: var(--viking-font-size);\n line-height: 1.6;\n color: var(--viking-text-muted);\n }\n .viking-modal-footer {\n display: flex;\n justify-content: flex-end;\n gap: var(--viking-space-1);\n }\n .viking-modal-footer:empty {\n display: none;\n }\n `,\n ],\n})\nexport class VikingModal {\n private readonly dialogRef = 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() {\n const host = inject<ElementRef<HTMLElement>>(ElementRef);\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 { ChangeDetectionStrategy, Component, input, model } from '@angular/core';\nimport { VikingControl, provideVikingCva } from '../core/cva';\nimport { VikingSelectOption } from '../core/types';\nimport { fluxUid } from '../core/uid';\n\n/**\n * viking-native-select — styled native &lt;select&gt; (Spartan-inspired).\n */\n@Component({\n selector: 'viking-native-select',\n providers: [provideVikingCva(VikingNativeSelect)],\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <label class=\"viking-native-select\" [class.viking-disabled]=\"disabled() || formDisabled()\">\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()\">{{ placeholder() }}</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 font-family: var(--viking-font-family);\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: 0.55;\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\n readonly value = model<string | number | null>(null);\n\n protected readonly selectId = fluxUid('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 (Spartan-inspired).\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-1);\n margin: 0;\n padding: var(--viking-space-1);\n list-style: none;\n border: 1px solid var(--viking-border);\n border-radius: var(--viking-radius);\n background: var(--viking-surface-alt);\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-ui);\n font-weight: 700;\n color: var(--viking-text-muted);\n text-decoration: none;\n border-radius: var(--viking-radius);\n transition: var(--viking-transition);\n }\n a.viking-nav-link:hover {\n color: var(--viking-text);\n background: var(--viking-accent-soft);\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 }\n .viking-nav-link.viking-disabled {\n opacity: 0.55;\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 (https://fluxui.dev/components/navbar).\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()\"><ng-content /></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-1);\n flex-wrap: wrap;\n padding: var(--viking-space-1);\n background: var(--viking-surface);\n border: 1px solid var(--viking-border);\n border-radius: var(--viking-radius);\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 @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 type=\"button\" class=\"viking-navbar-item\" [class.viking-current]=\"current()\">\n <ng-container *ngTemplateOutlet=\"content\" />\n </button>\n }\n <ng-template #content>\n @if (icon()) {\n <viking-icon [name]=\"icon()!\" [size]=\"18\" />\n }\n <ng-content />\n </ng-template>\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: none;\n background: transparent;\n color: var(--viking-text-muted);\n font-family: var(--viking-font-family);\n font-size: var(--viking-font-size);\n font-weight: 500;\n padding: var(--viking-space-1) var(--viking-space-2);\n border-radius: calc(var(--viking-radius) / 1.5);\n text-decoration: none;\n cursor: pointer;\n transition: var(--viking-transition);\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: -2px;\n }\n .viking-current {\n color: var(--viking-text);\n font-weight: 700;\n background: var(--viking-accent-soft);\n box-shadow: inset 0 -2px 0 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 inject,\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 (https://fluxui.dev/components/otp-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 template: `\n <div class=\"viking-otp\" role=\"group\" [attr.aria-label]=\"label() || 'One-time passcode'\">\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 .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: 600;\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 box-shadow: var(--viking-shadow-sm);\n transition: var(--viking-transition);\n font-variant-numeric: tabular-nums;\n }\n .viking-otp-cell:hover:not(:disabled) {\n border-color: var(--viking-accent-strong);\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: 0.55;\n }\n `,\n ],\n})\nexport class VikingOtpInput extends VikingControl<string> {\n private readonly host = inject<ElementRef<HTMLElement>>(ElementRef);\n\n readonly length = input<number>(6);\n readonly value = model<string>('');\n readonly label = input<string>('');\n readonly disabled = input<boolean>(false);\n\n readonly completed = output<string>();\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 = this.host.nativeElement.querySelectorAll<HTMLInputElement>('.viking-otp-cell');\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.replace(/\\D/g, '').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 (event.key === 'Backspace' && !(event.target as HTMLInputElement).value) {\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 { ChangeDetectionStrategy, Component, input } from '@angular/core';\n\n/**\n * viking-page-header — unified HUD / topbar header for dashboard pages.\n */\n@Component({\n selector: 'viking-page-header',\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 <ng-content select=\"[fluxPageHeaderBack]\" />\n @if (tag()) {\n <div class=\"section-tag-row\">\n <span class=\"section-tag viking-page-header-tag\">{{ tag() }}</span>\n </div>\n }\n <h1 class=\"viking-page-header-title hud-title page-title\">{{ title() }}</h1>\n @if (subtitle()) {\n <p class=\"viking-page-header-subtitle hud-subtitle page-description\">{{ subtitle() }}</p>\n }\n <ng-content select=\"[fluxPageHeaderExtra]\" />\n </div>\n <div class=\"viking-page-header-actions topbar-right\">\n <ng-content select=\"[fluxPageHeaderActions]\" />\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}\n","import { ChangeDetectionStrategy, Component, computed, input, model } from '@angular/core';\nimport { VikingIcon } from '../icon/icon';\n\n/**\n * viking-pagination — page navigation (https://fluxui.dev/components/pagination).\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 transparent;\n border-radius: var(--viking-radius);\n background: transparent;\n color: var(--viking-text);\n font-family: var(--viking-font-family);\n font-size: var(--viking-font-size);\n font-weight: 500;\n cursor: pointer;\n transition: var(--viking-transition);\n font-variant-numeric: tabular-nums;\n }\n .viking-page-btn:hover:not(:disabled):not(.viking-page-current) {\n background: var(--viking-accent-soft);\n }\n .viking-page-btn:focus-visible {\n outline: var(--viking-ring-width) solid var(--viking-ring);\n outline-offset: 1px;\n }\n .viking-page-btn:disabled {\n opacity: 0.45;\n cursor: not-allowed;\n }\n .viking-page-current {\n background: var(--viking-accent);\n border-color: var(--viking-accent);\n color: var(--viking-accent-content);\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 }\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>([1, 2, total - 1, total, current - 1, current, current + 1]);\n const sorted = [...pages].filter(value => value >= 1 && value <= total).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 { ChangeDetectionStrategy, Component, input, model, signal } from '@angular/core';\nimport { VikingControl, provideVikingCva } from '../core/cva';\nimport { VikingIcon } from '../icon/icon';\n\n/**\n * viking-pillbox — multi-value tag input (https://fluxui.dev/components/pillbox).\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: 0.55;\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 (event.key === 'Backspace' && !this.draft() && this.values().length > 0) {\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 inject,\n input,\n model,\n} from '@angular/core';\n\n/**\n * viking-popover — anchored floating panel (https://fluxui.dev/components/popover).\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 private readonly host = inject<ElementRef<HTMLElement>>(ElementRef);\n\n readonly open = model<boolean>(false);\n readonly align = input<'start' | 'end'>('start');\n\n /** Toggles when the (focusable, projected) trigger is activated. */\n protected onHostClick = (event: Event): void => {\n const trigger = this.host.nativeElement.querySelector('.viking-popover-trigger');\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 (this.open() && !this.host.nativeElement.contains(event.target as Node)) {\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 (https://fluxui.dev/components/profile).\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 [src]=\"avatarSrc()\" [name]=\"name()\" [size]=\"45\" [status]=\"status()\" />\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 { ChangeDetectionStrategy, Component, computed, input } from '@angular/core';\nimport { VikingTone } from '../core/types';\n\n/**\n * viking-progress — determinate/indeterminate progress bar\n * (https://fluxui.dev/components/progress).\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-success {\n background: var(--viking-success);\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(() => Math.min(100, Math.max(0, Math.round(this.value()))));\n}\n","import { ChangeDetectionStrategy, Component, input, model } from '@angular/core';\nimport { VikingControl, provideVikingCva } from '../core/cva';\nimport { VikingSelectOption } from '../core/types';\nimport { fluxUid } from '../core/uid';\n\n/**\n * viking-radio-group — radio group (https://fluxui.dev/components/radio).\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]=\"option.disabled || disabled() || formDisabled()\"\n >\n <span class=\"viking-radio-dot\" [class.viking-checked]=\"option.value === value()\">\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: 0.55;\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 = fluxUid('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 { ChangeDetectionStrategy, Component, computed, input } 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 viewBox=\"0 0 120 120\">\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 [attr.stroke-dasharray]=\"strokeDasharray()\"\n />\n </svg>\n `,\n styles: [\n `\n :host {\n display: block;\n width: 100%;\n height: 100%;\n }\n svg {\n width: 100%;\n height: 100%;\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 .viking-ring-bg {\n stroke: color-mix(in srgb, var(--viking-text-muted) 20%, transparent);\n }\n .viking-ring-fill {\n stroke: var(--viking-accent);\n transition: stroke-dasharray 0.4s ease;\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';\n\n/**\n * viking-search-palette — command-palette style search overlay.\n * Project custom result lists into the body slot.\n */\n@Component({\n selector: 'viking-search-palette',\n imports: [VikingIcon],\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=\"[fluxSearchPaletteFooter]\" />\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 = 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","import {\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n computed,\n inject,\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\n/**\n * viking-select — custom listbox select (https://fluxui.dev/components/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: { '(document:click)': 'onDocumentClick($event)' },\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 class=\"viking-select-value\" [class.viking-select-placeholder]=\"!selectedLabel()\">\n {{ selectedLabel() || placeholder() }}\n </span>\n <viking-icon [name]=\"open() ? 'chevron-up' : 'chevron-down'\" [size]=\"18\" />\n </button>\n @if (open()) {\n <div class=\"viking-select-panel\" role=\"listbox\" [attr.aria-label]=\"label() || placeholder()\">\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 }\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);\n text-align: left;\n }\n .viking-select-trigger:hover:not(:disabled) {\n border-color: var(--viking-accent-strong);\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: 0.55;\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-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: 315px;\n overflow: auto;\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);\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-select-option:disabled {\n opacity: 0.55;\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 }\n .viking-selected {\n font-weight: 600;\n color: var(--viking-accent);\n }\n `,\n ],\n})\nexport class VikingSelect extends VikingControl<unknown> {\n private readonly host = inject<ElementRef<HTMLElement>>(ElementRef);\n\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\n protected readonly open = signal(false);\n protected readonly activeIndex = signal(0);\n\n protected readonly selectedLabel = computed(\n () => this.options().find(option => option.value === this.value())?.label ?? '',\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(option => option.value === this.value());\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 => Math.min(options.length - 1, index + 1));\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 (this.open() && !this.host.nativeElement.contains(event.target as Node)) {\n this.open.set(false);\n }\n };\n}\n","import { ChangeDetectionStrategy, Component, input } from '@angular/core';\n\n/**\n * viking-separator — horizontal/vertical rule with optional label\n * (https://fluxui.dev/components/separator).\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 { 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\"><ng-content /></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 (Spartan-inspired sheet).\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\"><ng-content select=\"[vikingSheetActions]\" /></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(4px);\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-md);\n font-family: var(--viking-font-family);\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 border: none;\n background: transparent;\n color: var(--viking-text-muted);\n cursor: pointer;\n padding: 4px;\n border-radius: var(--viking-radius);\n }\n .viking-sheet-close:hover {\n color: var(--viking-text);\n background: var(--viking-accent-soft);\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 gap: var(--viking-space-2);\n justify-content: flex-end;\n padding: var(--viking-space-2);\n border-top: 1px solid var(--viking-border);\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 = 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 { ChangeDetectionStrategy, Component, input } from '@angular/core';\n\n/**\n * viking-skeleton — loading placeholder (https://fluxui.dev/components/skeleton).\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);\n background: linear-gradient(\n 100deg,\n var(--viking-surface-alt) 40%,\n color-mix(in srgb, var(--viking-text-muted) 14%, var(--viking-surface-alt)) 50%,\n var(--viking-surface-alt) 60%\n );\n background-size: 200% 100%;\n animation: viking-skeleton-shimmer 1.4s ease-in-out infinite;\n }\n :host(.viking-skeleton-circle) {\n border-radius: var(--viking-radius-pill);\n }\n @keyframes viking-skeleton-shimmer {\n from {\n background-position: 120% 0;\n }\n to {\n background-position: -80% 0;\n }\n }\n @media (prefers-reduced-motion: reduce) {\n :host {\n animation: none;\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>('18px');\n}\n","import { ChangeDetectionStrategy, Component, input } from '@angular/core';\n\n/**\n * viking-spinner — clinical loading indicator (Spartan-inspired SVG).\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 viewBox=\"0 0 24 24\" [attr.width]=\"size()\" [attr.height]=\"size()\" aria-hidden=\"true\">\n <circle class=\"viking-spinner-track\" cx=\"12\" cy=\"12\" r=\"9\" fill=\"none\" stroke-width=\"2.5\" />\n <circle\n class=\"viking-spinner-arc\"\n cx=\"12\"\n cy=\"12\"\n r=\"9\"\n fill=\"none\"\n stroke-width=\"2.5\"\n stroke-linecap=\"round\"\n />\n </svg>\n `,\n styles: [\n `\n :host {\n display: inline-flex;\n color: var(--viking-accent);\n }\n .viking-spinner-track {\n stroke: color-mix(in srgb, var(--viking-accent) 18%, transparent);\n }\n .viking-spinner-arc {\n stroke: currentColor;\n stroke-dasharray: 42 84;\n transform-origin: center;\n animation: viking-spin 0.8s linear infinite;\n }\n @keyframes viking-spin {\n to {\n transform: rotate(360deg);\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 { ChangeDetectionStrategy, Component, computed, input, model } from '@angular/core';\nimport { VikingControl, provideVikingCva } from '../core/cva';\n\n/**\n * viking-slider — range slider (https://fluxui.dev/components/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: 0.55;\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 { ChangeDetectionStrategy, Component, input, model } from '@angular/core';\nimport { VikingControl, provideVikingCva } from '../core/cva';\n\n/**\n * viking-switch — toggle switch (https://fluxui.dev/components/switch).\n * ControlValueAccessor-compatible.\n */\n@Component({\n selector: 'viking-switch',\n providers: [provideVikingCva(VikingSwitch)],\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <label class=\"viking-switch\" [class.viking-disabled]=\"disabled() || formDisabled()\">\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: 0.55;\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);\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);\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';\n\n/**\n * viking-table — clinical data table wrapper (Spartan-inspired).\n */\n@Component({\n selector: 'viking-table',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: 'viking-table-wrap',\n '[class.viking-table-compact]': 'compact()',\n },\n template: `\n <table class=\"viking-table\">\n <ng-content />\n </table>\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);\n background: var(--viking-surface);\n box-shadow: var(--viking-shadow-sm);\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);\n color: var(--viking-text);\n }\n :host ::ng-deep thead th {\n font-size: var(--viking-font-size-ui);\n font-weight: 700;\n text-align: left;\n letter-spacing: 0.04em;\n text-transform: uppercase;\n color: var(--viking-text-muted);\n background: color-mix(in srgb, var(--viking-bg) 2%, transparent);\n padding: var(--viking-space-2);\n border-bottom: 1px solid var(--viking-border-strong);\n }\n :host ::ng-deep tbody td {\n padding: var(--viking-space-2);\n border-bottom: 1px solid var(--viking-border);\n vertical-align: top;\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-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 `,\n ],\n})\nexport class VikingTable {\n readonly compact = input(false);\n}\n","import { ChangeDetectionStrategy, Component, InjectionToken, model } from '@angular/core';\n\nexport const VIKING_TABS = new InjectionToken<VikingTabs>('VIKING_TABS');\n\n/**\n * viking-tabs — tablist container (Spartan-inspired, clinical chrome).\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 class=\"viking-tabs-list\" role=\"tablist\">\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-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-alt);\n }\n `,\n ],\n})\nexport class VikingTabs {\n readonly value = model<string>('');\n}\n","import { ChangeDetectionStrategy, Component, inject, input } 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 [attr.aria-selected]=\"active()\"\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-ui);\n font-weight: 700;\n letter-spacing: 0.02em;\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);\n }\n .viking-tab:hover:not(:disabled) {\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.viking-active {\n color: var(--viking-accent-content);\n background: var(--viking-accent);\n border-color: var(--viking-accent);\n }\n .viking-tab:disabled {\n opacity: 0.55;\n cursor: not-allowed;\n }\n `,\n ],\n})\nexport class VikingTab {\n private readonly tabs = inject(VikingTabs, { optional: true });\n\n readonly value = input.required<string>();\n readonly disabled = input(false);\n\n protected active = () => (this.tabs?.value() ?? '') === this.value();\n\n protected select = (): void => {\n if (this.disabled() || !this.tabs) return;\n this.tabs.value.set(this.value());\n };\n}\n","import { ChangeDetectionStrategy, Component, inject, input } 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.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: 1.6;\n }\n :host(.viking-hidden) {\n display: none;\n }\n `,\n ],\n})\nexport class VikingTabPanel {\n private readonly tabs = inject(VikingTabs, { optional: true });\n\n readonly value = input.required<string>();\n\n protected hidden = () => (this.tabs?.value() ?? '') !== this.value();\n}\n","import { ChangeDetectionStrategy, Component, input, model } from '@angular/core';\nimport { VikingControl, provideVikingCva } from '../core/cva';\n\n/**\n * viking-textarea — auto-growing textarea (https://fluxui.dev/components/textarea).\n * ControlValueAccessor-compatible.\n */\n@Component({\n selector: 'viking-textarea',\n providers: [provideVikingCva(VikingTextarea)],\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <textarea\n class=\"viking-control\"\n [rows]=\"rows()\"\n [placeholder]=\"placeholder()\"\n [value]=\"value()\"\n [disabled]=\"disabled() || formDisabled()\"\n [attr.aria-label]=\"label() || placeholder() || 'Text area'\"\n [style.resize]=\"autoGrow() ? 'none' : 'vertical'\"\n (input)=\"onInput($event)\"\n (blur)=\"onTouched()\"\n ></textarea>\n `,\n styles: [\n `\n :host {\n display: block;\n }\n textarea {\n width: 100%;\n box-sizing: border-box;\n padding: var(--viking-space-1) 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 line-height: 1.55;\n transition: border-color 0.2s ease;\n }\n textarea:hover:not(:disabled) {\n border-color: var(--viking-accent-strong);\n }\n textarea:focus-visible {\n outline: var(--viking-ring-width) solid var(--viking-ring);\n outline-offset: var(--viking-ring-offset);\n }\n textarea:disabled {\n opacity: 0.55;\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 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 { ChangeDetectionStrategy, Component, InjectionToken, model } from '@angular/core';\n\nexport const VIKING_TOGGLE_GROUP = new InjectionToken<VikingToggleGroup>('VIKING_TOGGLE_GROUP');\n\n/**\n * viking-toggle-group — exclusive or multi toggle cluster (Spartan-inspired).\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 { ChangeDetectionStrategy, Component, inject, input, model, output } from '@angular/core';\nimport { VIKING_TOGGLE_GROUP, VikingToggleGroup } from './toggle-group';\n\n/**\n * viking-toggle — pressed-state button toggle (Spartan-inspired).\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: 0.55;\n cursor: not-allowed;\n }\n `,\n ],\n})\nexport class VikingToggle {\n private readonly group = inject(VikingToggleGroup, { optional: true });\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 inject,\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 (https://fluxui.dev/components/time-picker).\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 class=\"viking-time-value\" [class.viking-time-placeholder]=\"!value()\">\n {{ value() || placeholder() }}\n </span>\n <viking-icon [name]=\"open() ? 'chevron-up' : 'chevron-down'\" [size]=\"18\" />\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: 0.55;\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 private readonly host = inject<ElementRef<HTMLElement>>(ElementRef);\n\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 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 (this.open() && !this.host.nativeElement.contains(event.target as Node)) {\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 (https://fluxui.dev/components/timeline).\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 class=\"viking-timeline-marker\" [class]=\"'viking-marker-' + tone()\">\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-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 inject,\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 (https://fluxui.dev/components/toast).\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 class=\"viking-toast\" [class]=\"'viking-toast-' + toast.tone\" role=\"status\">\n <viking-icon class=\"viking-toast-icon\" [name]=\"toneIcon(toast.tone)\" [size]=\"20\" />\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 :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 0.25s cubic-bezier(0.16, 1, 0.3, 1);\n }\n @keyframes viking-toast-in {\n from {\n transform: translateY(9px);\n opacity: 0;\n }\n to {\n transform: translateY(0);\n opacity: 1;\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: 3px;\n border-radius: var(--viking-radius-pill);\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 protected readonly service = inject(VikingToastService);\n\n readonly position = input<'bottom-end' | 'top-end'>('bottom-end');\n\n protected toneIcon = (tone: string): VikingIconName => TONE_ICONS[tone] ?? 'info';\n}\n","import { ChangeDetectionStrategy, Component, computed, input } from '@angular/core';\n\nexport type VikingUptimeStatus = 'operational' | 'partial_outage' | 'major_outage' | '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 { DOCUMENT, Directive, ElementRef, OnDestroy, inject, input } from '@angular/core';\n\n/**\n * fluxTooltip — attribute directive tooltip (https://fluxui.dev/components/tooltip).\n * Shows on hover and keyboard focus; positions itself relative to the host.\n */\n@Directive({\n selector: '[fluxTooltip]',\n host: {\n '(mouseenter)': 'show()',\n '(mouseleave)': 'hide()',\n '(focusin)': 'show()',\n '(focusout)': 'hide()',\n '(keydown.escape)': 'hide()',\n },\n})\nexport class VikingTooltip implements OnDestroy {\n private readonly host = inject<ElementRef<HTMLElement>>(ElementRef);\n private readonly document = inject(DOCUMENT);\n\n readonly fluxTooltip = input.required<string>();\n readonly tooltipPosition = input<'top' | 'bottom'>('top');\n readonly tooltipKbd = input<string>('');\n\n private element: HTMLElement | null = null;\n\n protected show = (): void => {\n if (this.element || !this.fluxTooltip()) {\n return;\n }\n const tip = this.document.createElement('div');\n tip.setAttribute('role', 'tooltip');\n tip.textContent = this.fluxTooltip();\n if (this.tooltipKbd()) {\n const kbd = this.document.createElement('kbd');\n kbd.textContent = this.tooltipKbd();\n kbd.style.cssText =\n 'margin-left:9px;padding:0 5px;border:1px solid color-mix(in srgb, var(--viking-accent-content, #ffffff) 35%, transparent);border-radius:5px;';\n tip.appendChild(kbd);\n }\n tip.style.cssText = [\n 'position:fixed',\n 'z-index:var(--viking-z-tooltip, 1200)',\n 'background:var(--jet-black, #31393c)',\n 'color:var(--white, #ffffff)',\n 'font-family:var(--viking-font-family, Inter, sans-serif)',\n 'font-size:var(--viking-font-size-ui, 14px)',\n 'line-height:1.35',\n 'padding:5px 9px',\n 'border-radius:var(--viking-radius, 9px)',\n 'border:1px solid var(--viking-border-strong, rgba(255,255,255,0.2))',\n 'box-shadow:var(--viking-shadow-md)',\n 'pointer-events:none',\n 'max-width:315px',\n 'white-space:normal',\n ].join(';');\n this.document.body.appendChild(tip);\n\n const anchor = this.host.nativeElement.getBoundingClientRect();\n const rect = tip.getBoundingClientRect();\n const left = Math.max(\n 9,\n Math.min(anchor.left + anchor.width / 2 - rect.width / 2, window.innerWidth - rect.width - 9),\n );\n const top = this.tooltipPosition() === 'top' ? anchor.top - rect.height - 9 : anchor.bottom + 9;\n tip.style.left = `${left}px`;\n tip.style.top = `${Math.max(9, top)}px`;\n this.element = tip;\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 { ChangeDetectionStrategy, Component, computed, input } from '@angular/core';\n\n/**\n * viking-heading — consistent heading sizes (https://fluxui.dev/components/heading).\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-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<'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(() => `viking-heading-${this.size()}`);\n}\n","import { ChangeDetectionStrategy, Component, computed, input } from '@angular/core';\n\n/**\n * viking-text — body text with semantic variants (https://fluxui.dev/components/text).\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'>('default');\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","/*\n * @dataengineeringformachinelearning/viking-ui — public API surface.\n * Viking-UI: DEML clinical design system for Angular (THEME.md palette only).\n */\n\n// Core\nexport * from './lib/core/types';\nexport type { VikingChartCurve, VikingChartKind, VikingDonutSegment } from './lib/core/types';\nexport { VIKING_ICON_NAMES, VIKING_ICON_PATHS } from './lib/core/icons';\nexport type { VikingIconName } from './lib/core/icons';\nexport { VikingControl, provideVikingCva } from './lib/core/cva';\n\n// Components (alphabetical, mirrors fluxui.dev/components)\nexport * from './lib/app-header/app-header';\nexport * from './lib/app-sidebar/app-sidebar';\nexport * from './lib/accordion/accordion';\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/carousel/carousel';\nexport * from './lib/chart/chart';\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/editor/editor';\nexport * from './lib/fab/fab';\nexport * from './lib/field/field';\nexport * from './lib/footer/footer';\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/input/input';\nexport * from './lib/kanban/kanban';\nexport * from './lib/kbd/kbd';\nexport * from './lib/label/label';\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/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/skeleton/skeleton';\nexport * from './lib/spinner/spinner';\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 type { VikingUptimeStatus } from './lib/uptime-bar/uptime-bar';\nexport * from './lib/tooltip/tooltip';\nexport * from './lib/typography/heading';\nexport * from './lib/typography/text';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["TONE_ICONS"],"mappings":"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"}