@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
@@ -0,0 +1,28 @@
1
+ import { HTMLElementBase } from "../core/dom";
2
+ /**
3
+ * Framework-agnostic Viking badge Web Component.
4
+ * Tag: `viking-badge` (legacy alias: `viking-badge-wc`)
5
+ *
6
+ * @attr tone - Semantic color: accent | secondary | success | warning | danger | info | muted
7
+ * @attr size - Compact density: sm
8
+ * @attr icon - Viking icon registry name (pairs with label for a11y)
9
+ * @attr removable - Shows remove control; dispatches `viking-removed`
10
+ *
11
+ * @example
12
+ * <viking-badge-wc tone="success" icon="check">Healthy</viking-badge-wc>
13
+ */
14
+ export declare class VikingBadgeWc extends HTMLElementBase {
15
+ static readonly tag = "viking-badge";
16
+ static readonly legacyTag = "viking-badge-wc";
17
+ static get observedAttributes(): string[];
18
+ private readonly shadow;
19
+ constructor();
20
+ connectedCallback(): void;
21
+ attributeChangedCallback(): void;
22
+ private get tone();
23
+ private get size();
24
+ private get removable();
25
+ private readonly onRemove;
26
+ private render;
27
+ }
28
+ export declare const registerVikingBadgeWc: () => void;
@@ -0,0 +1,28 @@
1
+ import { HTMLElementBase } from "../core/dom";
2
+ /**
3
+ * Framework-agnostic Viking button Web Component.
4
+ * Tag: `viking-button` (legacy alias: `viking-button-wc`)
5
+ *
6
+ * @example
7
+ * <viking-button variant="primary">Launch</viking-button>
8
+ */
9
+ export declare class VikingButtonWc extends HTMLElementBase {
10
+ static readonly tag = "viking-button";
11
+ static readonly legacyTag = "viking-button-wc";
12
+ static get observedAttributes(): string[];
13
+ private readonly shadow;
14
+ private control;
15
+ constructor();
16
+ connectedCallback(): void;
17
+ disconnectedCallback(): void;
18
+ attributeChangedCallback(): void;
19
+ private readonly onClick;
20
+ private get variant();
21
+ private get size();
22
+ private get disabled();
23
+ private get loading();
24
+ private get square();
25
+ private syncHostSemantics;
26
+ private render;
27
+ }
28
+ export declare const registerVikingButtonWc: () => void;
@@ -0,0 +1,27 @@
1
+ import { HTMLElementBase } from "../core/dom";
2
+ /**
3
+ * Framework-agnostic Viking callout Web Component.
4
+ * Tag: `viking-callout` (legacy alias: `viking-callout-wc`)
5
+ *
6
+ * @attr tone - Semantic tone (default: info)
7
+ * @attr heading - Bold callout title
8
+ * @attr icon - Override leading icon from the Viking registry
9
+ * @attr dismissible - Shows dismiss control; dispatches `viking-close`
10
+ *
11
+ * @example
12
+ * <viking-callout-wc tone="warning" heading="Degraded worker">Lag exceeds 3s.</viking-callout-wc>
13
+ */
14
+ export declare class VikingCalloutWc extends HTMLElementBase {
15
+ static readonly tag = "viking-callout";
16
+ static readonly legacyTag = "viking-callout-wc";
17
+ static get observedAttributes(): string[];
18
+ private readonly shadow;
19
+ constructor();
20
+ connectedCallback(): void;
21
+ attributeChangedCallback(): void;
22
+ private get tone();
23
+ private get dismissible();
24
+ private readonly onDismiss;
25
+ private render;
26
+ }
27
+ export declare const registerVikingCalloutWc: () => void;
@@ -0,0 +1,29 @@
1
+ import { HTMLElementBase } from "../core/dom";
2
+ /**
3
+ * Framework-agnostic Viking card Web Component (light DOM — inherits global viking-card CSS).
4
+ * Tag: `viking-card` (legacy alias: `viking-card-wc`)
5
+ *
6
+ * Uses light DOM so slotted content inherits `viking-card`, `viking-card-header`, and related
7
+ * classes from the synced static CSS bundle.
8
+ *
9
+ * @attr compact - Applies `viking-card-compact` padding
10
+ * @attr interactive - Hover lift for clickable cards
11
+ * @attr title - Accessible name when the card is a landmark region
12
+ *
13
+ * @example
14
+ * <viking-card-wc compact title="Event throughput">
15
+ * <div class="viking-card-header">
16
+ * <h3 class="viking-heading viking-heading-sm">Event throughput</h3>
17
+ * </div>
18
+ * <p class="viking-text-muted">8.2K events/sec</p>
19
+ * </viking-card-wc>
20
+ */
21
+ export declare class VikingCardWc extends HTMLElementBase {
22
+ static readonly tag = "viking-card";
23
+ static readonly legacyTag = "viking-card-wc";
24
+ static get observedAttributes(): string[];
25
+ connectedCallback(): void;
26
+ attributeChangedCallback(): void;
27
+ private syncClasses;
28
+ }
29
+ export declare const registerVikingCardWc: () => void;
@@ -0,0 +1,12 @@
1
+ /** Attaches constructable stylesheet to a shadow root (with fallback). */
2
+ export declare const attachShadowStyles: (shadow: ShadowRoot, css: string) => void;
3
+ /** Reads a boolean attribute presence/value. */
4
+ export declare const readBoolAttr: (el: HTMLElement, name: string) => boolean;
5
+ /** Safely sets form value when ElementInternals is fully supported (e.g. not in jsdom). */
6
+ export declare const setFormValue: (internals: ElementInternals | null, value: string) => void;
7
+ /** Attaches ElementInternals where available without breaking older WebKit or test DOMs. */
8
+ export declare const attachElementInternals: (el: HTMLElement) => ElementInternals | null;
9
+ /** Opens a native dialog when showModal is available. */
10
+ export declare const showModalDialog: (dialog: HTMLDialogElement | null) => void;
11
+ /** Closes a native dialog when close is available. */
12
+ export declare const closeModalDialog: (dialog: HTMLDialogElement | null) => void;
@@ -0,0 +1,11 @@
1
+ export declare const HTMLElementBase: typeof HTMLElement;
2
+ /** Stable unique id for associating labels and controls. */
3
+ export declare const vikingWcUid: (prefix: string) => string;
4
+ /** Escape text for safe innerHTML insertion. */
5
+ export declare const escapeHtml: (value: string) => string;
6
+ /** Platform modifier label for keyboard shortcut hints. */
7
+ export declare const modKeyLabel: () => string;
8
+ /** Register a custom element when the runtime supports it (skip during SSR/prerender). */
9
+ export declare const defineCustomElement: (tag: string, ctor: CustomElementConstructor) => void;
10
+ /** Register an alias tag with a fresh subclass; customElements disallows reusing constructors. */
11
+ export declare const defineCustomElementAlias: <T extends CustomElementConstructor>(tag: string, ctor: T) => void;
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Renders a zero-dependency inline SVG icon for Web Components.
3
+ * Uses the same registry as `viking-icon` in Angular.
4
+ */
5
+ export declare const renderInlineIcon: (name: string, size?: number, className?: string) => string;
6
+ /** Default tone → icon mapping shared by callout and badge surfaces. */
7
+ export declare const TONE_ICON_NAMES: Record<string, string>;
@@ -0,0 +1,12 @@
1
+ /**
2
+ * Shadow DOM styles for Viking-UI Web Components.
3
+ * All values reference --viking-* tokens inherited from the document :root.
4
+ */
5
+ export declare const VIKING_BUTTON_STYLES = "\n:host {\n display: inline-flex;\n font-family: var(--viking-font-family);\n}\n\n:host([full-width]) {\n display: flex;\n width: 100%;\n}\n\n:host([full-width]) .viking-btn {\n width: 100%;\n min-width: 0;\n}\n\n:host([compact]) .viking-btn {\n min-width: 0;\n}\n\n:host([square]) {\n flex: 0 0 auto;\n}\n\n.viking-btn {\n font-family: inherit;\n font-size: var(--viking-font-size-ui, var(--viking-font-size-sm));\n font-weight: var(--viking-font-weight-semibold);\n letter-spacing: var(--viking-letter-spacing-wide);\n line-height: var(--viking-line-height-snug);\n display: inline-flex;\n align-items: center;\n justify-content: center;\n gap: var(--viking-space-1);\n min-height: var(--viking-control-height);\n padding: 0 var(--viking-control-padding-x);\n border-radius: var(--viking-radius);\n border: 1px solid transparent;\n cursor: pointer;\n text-decoration: none;\n transition: var(--viking-transition-interactive);\n width: auto;\n min-width: var(--viking-btn-min-width, 120px);\n white-space: nowrap;\n position: relative;\n user-select: none;\n -webkit-tap-highlight-color: transparent;\n box-sizing: border-box;\n}\n\n.viking-btn:focus-visible {\n outline: var(--viking-ring-width) solid var(--viking-ring);\n outline-offset: var(--viking-ring-offset);\n z-index: 1;\n}\n\n.viking-btn:disabled,\n.viking-btn[aria-busy='true'] {\n opacity: var(--viking-state-disabled-opacity);\n cursor: not-allowed;\n transform: none !important;\n box-shadow: none !important;\n}\n\n.viking-btn-sm {\n min-height: var(--viking-control-height-sm);\n padding: 0 var(--viking-space-2);\n font-size: var(--viking-font-size-xs);\n min-width: auto;\n}\n\n.viking-btn-xs {\n min-height: var(--viking-control-height-xs);\n padding: 0 var(--viking-space-1);\n font-size: var(--viking-font-size-xs);\n min-width: auto;\n}\n\n.viking-btn-square {\n display: inline-grid;\n place-items: center;\n width: var(--viking-control-height);\n min-width: var(--viking-control-height);\n max-width: var(--viking-control-height);\n height: var(--viking-control-height);\n min-height: var(--viking-control-height);\n padding: 0;\n line-height: 1;\n}\n\n.viking-btn-square.viking-btn-sm {\n width: var(--viking-control-height-sm);\n min-width: var(--viking-control-height-sm);\n max-width: var(--viking-control-height-sm);\n height: var(--viking-control-height-sm);\n min-height: var(--viking-control-height-sm);\n}\n\n.viking-btn-square.viking-btn-xs {\n width: var(--viking-control-height-xs);\n min-width: var(--viking-control-height-xs);\n max-width: var(--viking-control-height-xs);\n height: var(--viking-control-height-xs);\n min-height: var(--viking-control-height-xs);\n}\n\n.viking-btn-square .viking-btn-label {\n display: inline-grid;\n place-items: center;\n width: 100%;\n height: 100%;\n line-height: 1;\n}\n\n.viking-btn-square ::slotted(*) {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n margin: 0;\n line-height: 1;\n}\n\n.viking-btn-square ::slotted(svg),\n.viking-btn-square ::slotted([data-viking-icon]) {\n width: var(--viking-icon-size-md, 20px);\n height: var(--viking-icon-size-md, 20px);\n}\n\n.viking-btn-outline {\n background: var(--viking-surface);\n color: var(--viking-text);\n border-color: var(--viking-border-strong);\n box-shadow: var(--viking-shadow-sm);\n}\n\n.viking-btn-outline:hover:not(:disabled):not([aria-busy='true']) {\n background: var(--viking-surface-alt);\n border-color: color-mix(in srgb, var(--viking-accent) 45%, var(--viking-border-strong));\n box-shadow: var(--viking-shadow-md);\n transform: translateY(var(--viking-state-hover-lift));\n}\n\n.viking-btn-primary {\n background: var(--viking-accent);\n color: var(--viking-accent-content);\n border-color: color-mix(in srgb, var(--viking-accent) 82%, var(--viking-black));\n box-shadow: var(--viking-shadow-sm);\n}\n\n.viking-btn-primary:hover:not(:disabled):not([aria-busy='true']) {\n background: var(--viking-accent-hover);\n border-color: var(--viking-accent-hover);\n box-shadow: var(--viking-shadow-hover);\n transform: translateY(var(--viking-state-hover-lift));\n}\n\n.viking-btn-secondary {\n background: var(--viking-accent-secondary);\n color: var(--viking-accent-secondary-content);\n border-color: color-mix(in srgb, var(--viking-accent-secondary) 82%, var(--viking-black));\n box-shadow: var(--viking-shadow-sm);\n}\n\n.viking-btn-secondary:hover:not(:disabled):not([aria-busy='true']) {\n background: var(--viking-accent-secondary-hover);\n border-color: var(--viking-accent-secondary-hover);\n box-shadow: var(--viking-shadow-hover);\n transform: translateY(var(--viking-state-hover-lift));\n}\n\n.viking-btn-filled {\n background: var(--viking-surface-alt);\n color: var(--viking-text);\n border-color: var(--viking-border);\n box-shadow: var(--viking-shadow-xs);\n}\n\n.viking-btn-filled:hover:not(:disabled):not([aria-busy='true']) {\n border-color: color-mix(in srgb, var(--viking-accent) 45%, var(--viking-border));\n background: color-mix(in srgb, var(--viking-accent) 8%, var(--viking-surface-alt));\n box-shadow: var(--viking-shadow-sm);\n transform: translateY(var(--viking-state-hover-lift));\n}\n\n.viking-btn-danger {\n background: var(--viking-danger);\n color: var(--viking-on-danger);\n border-color: color-mix(in srgb, var(--viking-danger) 85%, var(--viking-black));\n box-shadow: var(--viking-shadow-sm);\n}\n\n.viking-btn-danger:hover:not(:disabled):not([aria-busy='true']) {\n background: color-mix(in srgb, var(--viking-danger) 88%, var(--viking-white));\n box-shadow: var(--viking-shadow-hover);\n transform: translateY(var(--viking-state-hover-lift));\n}\n\n.viking-btn-ghost {\n background: transparent;\n color: var(--viking-text);\n min-width: auto;\n box-shadow: none;\n border-color: transparent;\n}\n\n.viking-btn-ghost:hover:not(:disabled):not([aria-busy='true']) {\n background: var(--viking-accent-soft);\n color: var(--viking-accent-strong);\n}\n\n.viking-btn-subtle {\n background: transparent;\n color: var(--viking-text-muted);\n border-color: var(--viking-border-subtle);\n min-width: auto;\n box-shadow: none;\n}\n\n.viking-btn-subtle:hover:not(:disabled):not([aria-busy='true']) {\n color: var(--viking-text);\n background: var(--viking-accent-soft);\n border-color: var(--viking-border-strong);\n}\n\n.viking-btn:active:not(:disabled):not([aria-busy='true']) {\n transform: translateY(0) scale(var(--viking-state-active-scale));\n}\n\n.viking-btn-label {\n display: inline-flex;\n align-items: center;\n line-height: inherit;\n}\n\n.viking-btn-spinner {\n width: 1.125rem;\n height: 1.125rem;\n border: 2px solid currentColor;\n border-right-color: transparent;\n border-radius: 50%;\n animation: viking-spin 0.8s linear infinite;\n}\n\n@keyframes viking-spin {\n to { transform: rotate(360deg); }\n}\n\n@media (prefers-reduced-motion: reduce) {\n .viking-btn-spinner { animation-duration: 0.01ms; }\n .viking-btn { transition-duration: 0.01ms; }\n}\n";
6
+ export declare const VIKING_INPUT_STYLES = "\n:host {\n display: block;\n font-family: var(--viking-font-family);\n}\n\n.viking-input-shell {\n display: flex;\n align-items: center;\n gap: var(--viking-space-1);\n min-height: var(--viking-control-height);\n padding: 0 var(--viking-space-2);\n font-family: inherit;\n font-size: var(--viking-font-size);\n color: var(--viking-text);\n background: var(--viking-surface-alt);\n border: 1px solid var(--viking-border);\n border-radius: var(--viking-radius-sm);\n box-shadow: var(--viking-shadow-xs);\n transition: var(--viking-transition-interactive);\n width: 100%;\n min-width: 0;\n box-sizing: border-box;\n}\n\n.viking-input-shell:hover:not(.viking-disabled):not(.viking-loading) {\n border-color: color-mix(in srgb, var(--viking-accent) 35%, var(--viking-border-strong));\n box-shadow: var(--viking-shadow-sm);\n}\n\n.viking-input-shell:focus-within:not(.viking-loading) {\n outline: var(--viking-ring-width) solid var(--viking-ring);\n outline-offset: var(--viking-ring-offset);\n border-color: var(--viking-accent);\n box-shadow: var(--viking-shadow-sm);\n}\n\n.viking-input-shell.viking-disabled,\n.viking-input-shell.viking-loading {\n opacity: var(--viking-state-disabled-opacity);\n}\n\n.viking-input-shell.viking-loading {\n cursor: wait;\n}\n\n.viking-input-native {\n flex: 1;\n min-width: 0;\n width: 100%;\n border: none;\n outline: none !important;\n background: transparent;\n color: var(--viking-text);\n font-family: inherit;\n font-size: inherit;\n padding: 0;\n}\n\n.viking-input-native::placeholder {\n color: var(--viking-text-muted);\n}\n\ninput {\n flex: 1;\n min-width: 0;\n border: none;\n outline: none !important;\n background: transparent;\n color: var(--viking-text);\n font-family: inherit;\n font-size: inherit;\n padding: 0;\n}\n\ninput::placeholder {\n color: var(--viking-text-muted);\n}\n\ninput:disabled {\n cursor: not-allowed;\n}\n\n.viking-input-clear {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n min-width: var(--viking-touch-target-comfort, 44px);\n min-height: var(--viking-touch-target-comfort, 44px);\n border: none;\n background: transparent;\n color: var(--viking-text-muted);\n cursor: pointer;\n padding: var(--viking-space-half);\n border-radius: var(--viking-radius-pill);\n transition: var(--viking-transition-interactive);\n flex-shrink: 0;\n -webkit-tap-highlight-color: transparent;\n}\n\n.viking-input-clear:hover {\n color: var(--viking-text);\n background: var(--viking-accent-soft);\n}\n\n.viking-input-clear:focus-visible {\n outline: var(--viking-ring-width) solid var(--viking-ring);\n outline-offset: var(--viking-ring-offset);\n}\n\n.viking-input-spinner {\n width: 1rem;\n height: 1rem;\n border: 2px solid var(--viking-text-muted);\n border-right-color: transparent;\n border-radius: 50%;\n animation: viking-spin 0.8s linear infinite;\n flex-shrink: 0;\n}\n\n@keyframes viking-spin {\n to { transform: rotate(360deg); }\n}\n";
7
+ export declare const VIKING_FIELD_STYLES = "\n:host {\n display: block;\n font-family: var(--viking-font-family);\n color: var(--viking-text);\n min-width: 0;\n}\n\n:host([hidden]) {\n display: none;\n}\n\n:host([width='full']) {\n width: 100%;\n}\n\n:host([width='half']) {\n width: 100%;\n max-width: var(--viking-select-half-max-width, min(100%, 24rem));\n}\n\n.viking-field {\n display: flex;\n flex-direction: column;\n gap: var(--viking-space-1);\n}\n\n.viking-field-label-row {\n display: flex;\n align-items: baseline;\n justify-content: space-between;\n gap: var(--viking-space-2);\n}\n\n.viking-field-label {\n display: inline-flex;\n align-items: center;\n gap: var(--viking-space-half);\n font-size: var(--viking-font-size-ui);\n font-weight: var(--viking-font-weight-bold);\n color: var(--viking-text);\n line-height: var(--viking-line-height-snug);\n cursor: pointer;\n}\n\n.viking-field-required {\n color: var(--viking-danger-text);\n}\n\n.viking-field-control {\n min-width: 0;\n}\n\n.viking-field-description,\n.viking-field-error {\n margin: 0;\n font-size: var(--viking-font-size-xs);\n line-height: var(--viking-line-height-relaxed);\n}\n\n.viking-field-description {\n color: var(--viking-text-muted);\n}\n\n.viking-field-error {\n color: var(--viking-danger-text);\n}\n";
8
+ export declare const VIKING_BADGE_STYLES = "\n:host {\n display: inline-flex;\n align-items: center;\n gap: var(--viking-space-half);\n padding: var(--viking-space-half) var(--viking-space-1);\n font-family: var(--viking-font-family);\n font-size: var(--viking-font-size-xs);\n font-weight: var(--viking-font-weight-semibold);\n letter-spacing: var(--viking-letter-spacing-wide);\n line-height: var(--viking-line-height-snug);\n border-radius: var(--viking-radius-pill);\n border: 1px solid var(--viking-border);\n background: var(--viking-surface-alt);\n color: var(--viking-text);\n white-space: nowrap;\n transition: var(--viking-transition-interactive);\n box-shadow: var(--viking-shadow-xs);\n}\n\n:host([size='sm']) {\n padding: 0 var(--viking-space-1);\n font-size: var(--viking-font-size-2xs);\n}\n\n:host([tone='accent']) {\n background: var(--viking-accent);\n border-color: color-mix(in srgb, var(--viking-accent) 80%, var(--viking-black));\n color: var(--viking-accent-content);\n box-shadow: var(--viking-shadow-sm);\n}\n\n:host([tone='secondary']) {\n background: color-mix(in srgb, var(--viking-accent-secondary) 16%, var(--viking-surface));\n border-color: color-mix(in srgb, var(--viking-accent-secondary) 55%, transparent);\n color: var(--viking-accent-secondary);\n}\n\n:host([tone='success']) {\n background: color-mix(in srgb, var(--viking-success) 16%, var(--viking-surface));\n border-color: color-mix(in srgb, var(--viking-success) 55%, transparent);\n color: var(--viking-success);\n}\n\n:host([tone='warning']) {\n background: color-mix(in srgb, var(--viking-warning) 18%, var(--viking-surface));\n border-color: color-mix(in srgb, var(--viking-warning) 55%, transparent);\n color: var(--viking-warning);\n}\n\n:host([tone='danger']) {\n background: color-mix(in srgb, var(--viking-danger) 14%, var(--viking-surface));\n border-color: color-mix(in srgb, var(--viking-danger) 50%, transparent);\n color: var(--viking-danger-text);\n}\n\n:host([tone='info']) {\n background: color-mix(in srgb, var(--viking-info) 14%, var(--viking-surface));\n border-color: color-mix(in srgb, var(--viking-info) 50%, transparent);\n color: var(--viking-info);\n}\n\n:host([tone='muted']),\n:host([tone='subtle']) {\n color: var(--viking-text-muted);\n background: var(--viking-surface);\n border-color: var(--viking-border-subtle);\n}\n\n.viking-wc-icon {\n flex-shrink: 0;\n}\n\n.viking-badge-remove {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n min-width: var(--viking-touch-target-comfort, 44px);\n min-height: var(--viking-touch-target-comfort, 44px);\n border: none;\n background: transparent;\n color: currentColor;\n cursor: pointer;\n padding: var(--viking-space-half);\n border-radius: var(--viking-radius-pill);\n transition: var(--viking-transition-interactive);\n margin-left: calc(var(--viking-space-half) * -1);\n}\n\n.viking-badge-remove:hover {\n background: color-mix(in srgb, currentColor 12%, transparent);\n}\n\n.viking-badge-remove:focus-visible {\n outline: var(--viking-ring-width) solid var(--viking-ring);\n outline-offset: var(--viking-ring-offset);\n}\n";
9
+ export declare const VIKING_CALLOUT_STYLES = "\n:host {\n display: block;\n font-family: var(--viking-font-family);\n}\n\n:host([hidden]) {\n display: none;\n}\n\n.viking-callout {\n display: flex;\n align-items: flex-start;\n gap: var(--viking-space-2);\n padding: var(--viking-space-2);\n border-radius: var(--viking-radius-lg);\n border: 1px solid var(--viking-border);\n border-left-width: 3px;\n background: var(--viking-surface-alt);\n color: var(--viking-text);\n font-size: var(--viking-font-size-sm);\n box-shadow: var(--viking-shadow-sm);\n}\n\n.viking-callout-icon {\n flex-shrink: 0;\n margin-top: 2px;\n color: var(--viking-text-muted);\n}\n\n.viking-callout-body {\n flex: 1;\n min-width: 0;\n}\n\n.viking-callout-heading {\n margin: 0 0 var(--viking-space-half);\n font-size: var(--viking-font-size-ui);\n font-weight: var(--viking-font-weight-bold);\n color: var(--viking-text);\n}\n\n.viking-callout-text {\n margin: 0;\n color: var(--viking-text);\n line-height: var(--viking-line-height-relaxed);\n}\n\n.viking-callout-close {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n min-width: var(--viking-touch-target-comfort, 44px);\n min-height: var(--viking-touch-target-comfort, 44px);\n border: none;\n background: transparent;\n color: var(--viking-text-muted);\n cursor: pointer;\n padding: var(--viking-space-half);\n border-radius: var(--viking-radius);\n transition: var(--viking-transition-interactive);\n flex-shrink: 0;\n}\n\n.viking-callout-close:hover {\n color: var(--viking-text);\n background: color-mix(in srgb, currentColor 8%, transparent);\n}\n\n.viking-callout-close:focus-visible {\n outline: var(--viking-ring-width) solid var(--viking-ring);\n outline-offset: var(--viking-ring-offset);\n}\n\n.viking-callout-accent {\n border-color: var(--viking-accent);\n border-left-color: var(--viking-accent);\n background: var(--viking-accent-soft);\n}\n\n.viking-callout-accent .viking-callout-icon {\n color: var(--viking-accent);\n}\n\n.viking-callout-secondary {\n border-color: color-mix(in srgb, var(--viking-accent-secondary) 45%, transparent);\n border-left-color: var(--viking-accent-secondary);\n background: var(--viking-accent-secondary-soft);\n}\n\n.viking-callout-secondary .viking-callout-icon {\n color: var(--viking-accent-secondary);\n}\n\n.viking-callout-info {\n border-color: color-mix(in srgb, var(--viking-info) 45%, transparent);\n border-left-color: var(--viking-info);\n background: color-mix(in srgb, var(--viking-info) 10%, var(--viking-surface));\n}\n\n.viking-callout-info .viking-callout-icon {\n color: var(--viking-info);\n}\n\n.viking-callout-success {\n border-color: color-mix(in srgb, var(--viking-success) 45%, transparent);\n border-left-color: var(--viking-success);\n background: color-mix(in srgb, var(--viking-success) 10%, var(--viking-surface));\n}\n\n.viking-callout-success .viking-callout-icon {\n color: var(--viking-success);\n}\n\n.viking-callout-warning {\n border-color: color-mix(in srgb, var(--viking-warning) 45%, transparent);\n border-left-color: var(--viking-warning);\n background: color-mix(in srgb, var(--viking-warning) 12%, var(--viking-surface));\n}\n\n.viking-callout-warning .viking-callout-icon {\n color: var(--viking-warning);\n}\n\n.viking-callout-danger {\n border-color: var(--viking-danger);\n border-left-color: var(--viking-danger);\n background: color-mix(in srgb, var(--viking-crimson-600) 22%, var(--viking-surface));\n color: var(--viking-white);\n}\n\n.viking-callout-danger .viking-callout-icon {\n color: var(--viking-crimson-400);\n}\n\n.viking-callout-danger .viking-callout-text {\n color: var(--viking-white);\n}\n";
10
+ export declare const VIKING_SELECT_STYLES = "\n:host {\n display: block;\n font-family: var(--viking-font-family);\n min-width: 0;\n}\n\n:host([width='full']) {\n width: 100%;\n}\n\n:host([width='half']) {\n width: 100%;\n max-width: var(--viking-select-half-max-width, min(100%, 24rem));\n}\n\n.viking-field {\n display: flex;\n flex-direction: column;\n gap: var(--viking-space-1);\n}\n\n.viking-field-label {\n font-size: var(--viking-font-size-ui);\n font-weight: var(--viking-font-weight-bold);\n color: var(--viking-text);\n}\n\n.viking-field-description {\n margin: 0;\n font-size: var(--viking-font-size-xs);\n color: var(--viking-text-muted);\n}\n\n.viking-field-error {\n margin: 0;\n font-size: var(--viking-font-size-xs);\n color: var(--viking-danger);\n}\n\n.viking-select-native {\n width: 100%;\n min-height: var(--viking-control-height);\n padding: 0 var(--viking-space-2);\n border: 1px solid var(--viking-border-strong);\n border-radius: var(--viking-radius);\n background: var(--viking-surface);\n color: var(--viking-text);\n font-family: inherit;\n font-size: var(--viking-font-size);\n cursor: pointer;\n transition: var(--viking-transition-interactive);\n box-shadow: var(--viking-shadow-sm);\n}\n\n.viking-select-native:hover:not(:disabled) {\n border-color: var(--viking-accent-strong);\n box-shadow: var(--viking-shadow-md);\n}\n\n.viking-select-native:focus-visible {\n outline: var(--viking-ring-width) solid var(--viking-ring);\n outline-offset: var(--viking-ring-offset);\n}\n\n.viking-select-native:disabled {\n opacity: var(--viking-state-disabled-opacity);\n cursor: not-allowed;\n}\n\n.viking-select-native[aria-invalid='true'] {\n border-color: var(--viking-danger);\n}\n";
11
+ export declare const VIKING_MODAL_STYLES = "\n:host {\n display: contents;\n}\n\n.viking-modal-backdrop {\n position: fixed;\n inset: 0;\n z-index: var(--viking-z-overlay, 10001);\n display: flex;\n align-items: center;\n justify-content: center;\n padding: var(--viking-space-3);\n background: var(--viking-overlay-backdrop);\n backdrop-filter: blur(8px);\n -webkit-backdrop-filter: blur(8px);\n border: none;\n animation: viking-backdrop-in var(--viking-duration-fast) var(--viking-ease-out);\n}\n\n.viking-modal-panel {\n display: flex;\n flex-direction: column;\n gap: var(--viking-space-2);\n width: min(522px, calc(100vw - var(--viking-space-4)));\n max-height: calc(100vh - var(--viking-space-6));\n padding: var(--viking-space-3);\n border: 1px solid var(--viking-border-strong);\n border-radius: var(--viking-radius-lg);\n background: var(--viking-surface);\n color: var(--viking-text);\n box-shadow: var(--viking-shadow-lg);\n font-family: var(--viking-font-family);\n position: relative;\n overflow: hidden;\n animation: viking-modal-in var(--viking-duration) var(--viking-ease-default);\n}\n\n.viking-modal-panel::before {\n content: '';\n position: absolute;\n inset: 0 0 auto;\n height: 1px;\n background: linear-gradient(\n 90deg,\n transparent,\n color-mix(in srgb, var(--viking-metallic-200) 22%, transparent),\n transparent\n );\n pointer-events: none;\n}\n\n.viking-modal-header {\n display: flex;\n align-items: flex-start;\n justify-content: space-between;\n gap: var(--viking-space-2);\n padding-bottom: var(--viking-space-1);\n border-bottom: 1px solid var(--viking-border-subtle);\n}\n\n.viking-modal-heading {\n margin: 0;\n font-size: var(--viking-font-size-md);\n font-weight: var(--viking-font-weight-bold);\n letter-spacing: var(--viking-letter-spacing-tight);\n color: var(--viking-text);\n line-height: var(--viking-line-height-tight);\n}\n\n.viking-modal-close {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n min-width: var(--viking-touch-target-comfort, 44px);\n min-height: var(--viking-touch-target-comfort, 44px);\n border: 1px solid transparent;\n background: transparent;\n color: var(--viking-text-muted);\n cursor: pointer;\n border-radius: var(--viking-radius);\n transition: var(--viking-transition-interactive);\n flex-shrink: 0;\n}\n\n.viking-modal-close:hover {\n color: var(--viking-text);\n background: var(--viking-accent-soft);\n border-color: var(--viking-border-subtle);\n}\n\n.viking-modal-close:focus-visible {\n outline: var(--viking-ring-width) solid var(--viking-ring);\n outline-offset: var(--viking-ring-offset);\n}\n\n.viking-modal-body {\n overflow-y: auto;\n color: var(--viking-text-muted);\n font-size: var(--viking-font-size);\n line-height: var(--viking-line-height-relaxed);\n}\n\n.viking-modal-footer {\n display: flex;\n flex-wrap: wrap;\n gap: var(--viking-space-2);\n justify-content: flex-end;\n padding-top: var(--viking-space-2);\n border-top: 1px solid var(--viking-border-subtle);\n}\n\n.viking-modal-footer:empty {\n display: none;\n}\n\n@keyframes viking-backdrop-in {\n from { opacity: 0; }\n to { opacity: 1; }\n}\n\n@keyframes viking-modal-in {\n from {\n opacity: 0;\n transform: translateY(var(--viking-space-1)) scale(0.98);\n }\n to {\n opacity: 1;\n transform: translateY(0) scale(1);\n }\n}\n\n@media (prefers-reduced-motion: reduce) {\n .viking-modal-backdrop,\n .viking-modal-panel {\n animation: none;\n }\n}\n";
12
+ export declare const VIKING_SEARCH_PALETTE_STYLES = "\n:host {\n display: contents;\n}\n\n.viking-search-palette-backdrop {\n position: fixed;\n inset: 0;\n z-index: var(--viking-z-overlay, 10001);\n display: flex;\n align-items: flex-start;\n justify-content: center;\n padding: 10vh var(--viking-space-2) var(--viking-space-2);\n background: var(--viking-overlay-backdrop);\n backdrop-filter: blur(8px);\n -webkit-backdrop-filter: blur(8px);\n border: none;\n animation: viking-backdrop-in var(--viking-duration-fast) var(--viking-ease-out);\n}\n\n.viking-search-palette-backdrop:not([open]) {\n display: none !important;\n pointer-events: none;\n}\n\n.viking-search-palette {\n display: flex;\n flex-direction: column;\n background: var(--viking-surface-raised, var(--viking-surface));\n border: 1px solid var(--viking-border-strong);\n border-radius: var(--viking-radius-lg);\n box-shadow: var(--viking-shadow-lg);\n overflow: hidden;\n max-width: 600px;\n width: min(100%, 600px);\n margin: 0 auto;\n font-family: var(--viking-font-family);\n color: var(--viking-text);\n animation: viking-modal-in var(--viking-duration) var(--viking-ease-default);\n position: relative;\n isolation: isolate;\n}\n\n.viking-search-palette::before {\n content: '';\n position: absolute;\n inset: 0 0 auto;\n height: 1px;\n background: linear-gradient(\n 90deg,\n transparent,\n color-mix(in srgb, var(--viking-metallic-200) 22%, transparent),\n transparent\n );\n pointer-events: none;\n z-index: 1;\n}\n\n.viking-search-palette-header {\n display: flex;\n align-items: center;\n padding: var(--viking-space-2);\n border-bottom: 1px solid var(--viking-border);\n gap: var(--viking-space-1);\n background: color-mix(in srgb, var(--viking-bg) 26%, var(--viking-surface-raised));\n}\n\n.viking-search-palette-header:focus-within {\n border-bottom-color: var(--viking-accent);\n box-shadow: inset 0 -2px 0 var(--viking-accent-soft);\n}\n\n.viking-search-palette-icon {\n color: var(--viking-text-muted);\n flex-shrink: 0;\n}\n\n.viking-search-palette-input {\n flex: 1;\n background: none;\n border: none;\n outline: none;\n font-size: calc(var(--viking-font-size) * 1.05);\n color: var(--viking-text);\n font-family: inherit;\n min-width: 0;\n}\n\n.viking-search-palette-input::placeholder {\n color: var(--viking-text-muted);\n}\n\n.viking-search-palette-close {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n min-width: var(--viking-touch-target-comfort, 44px);\n min-height: var(--viking-touch-target-comfort, 44px);\n border: none;\n background: transparent;\n color: var(--viking-text-muted);\n cursor: pointer;\n padding: var(--viking-space-half);\n border-radius: var(--viking-radius);\n transition: var(--viking-transition-interactive);\n flex-shrink: 0;\n}\n\n.viking-search-palette-close:hover {\n color: var(--viking-text);\n background: var(--viking-accent-soft);\n}\n\n.viking-search-palette-close:focus-visible {\n outline: var(--viking-ring-width) solid var(--viking-ring);\n outline-offset: var(--viking-ring-offset);\n}\n\n.viking-search-palette-body {\n max-height: 50vh;\n overflow-y: auto;\n padding: var(--viking-space-2);\n}\n\n.viking-search-palette-footer {\n display: flex;\n align-items: center;\n justify-content: center;\n gap: var(--viking-space-1);\n padding: var(--viking-space-1) var(--viking-space-2);\n border-top: 1px solid var(--viking-border);\n font-size: calc(var(--viking-font-size) * 0.85);\n color: var(--viking-text-muted);\n}\n\n.viking-kbd {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n min-width: 1.5rem;\n padding: 2px 6px;\n font-family: inherit;\n font-size: calc(var(--viking-font-size) * 0.75);\n border-radius: calc(var(--viking-radius) / 2);\n border: 1px solid var(--viking-border);\n background: var(--viking-surface-alt);\n}\n\n.viking-search-results {\n display: flex;\n flex-direction: column;\n gap: var(--viking-space-1);\n}\n\n.viking-search-group-label {\n margin: var(--viking-space-1) 0 var(--viking-space-half);\n padding: 0 var(--viking-space-1);\n font-size: var(--viking-font-size-2xs);\n font-weight: var(--viking-font-weight-semibold);\n letter-spacing: var(--viking-letter-spacing-caps);\n text-transform: uppercase;\n color: var(--viking-text-muted);\n}\n\n.viking-search-result {\n display: flex;\n align-items: center;\n min-height: var(--viking-control-height-sm, 36px);\n padding: var(--viking-space-1) var(--viking-space-2);\n border-radius: var(--viking-radius);\n background: var(--viking-surface-alt);\n border: 1px solid var(--viking-border-subtle);\n cursor: pointer;\n transition: var(--viking-transition-interactive);\n gap: var(--viking-space-1);\n text-decoration: none;\n color: inherit;\n}\n\n.viking-search-result:hover,\n.viking-search-result.is-selected {\n background: color-mix(in srgb, var(--viking-accent) 10%, var(--viking-surface-alt));\n border-color: color-mix(in srgb, var(--viking-accent) 42%, var(--viking-border-strong));\n box-shadow: var(--viking-shadow-sm);\n}\n\n.viking-search-result:focus-visible {\n outline: var(--viking-ring-width) solid var(--viking-ring);\n outline-offset: var(--viking-ring-offset);\n}\n\n.viking-search-result-title {\n font-size: var(--viking-font-size-sm);\n font-weight: var(--viking-font-weight-semibold);\n color: var(--viking-text);\n}\n\n.viking-search-result-snippet {\n font-size: var(--viking-font-size-xs);\n color: var(--viking-text-muted);\n}\n\n.viking-search-empty {\n padding: var(--viking-space-3);\n text-align: center;\n color: var(--viking-text-muted);\n font-size: var(--viking-font-size-sm);\n}\n\n@keyframes viking-backdrop-in {\n from { opacity: 0; }\n to { opacity: 1; }\n}\n\n@keyframes viking-modal-in {\n from {\n opacity: 0;\n transform: translateY(var(--viking-space-1)) scale(0.98);\n }\n to {\n opacity: 1;\n transform: translateY(0) scale(1);\n }\n}\n\n@media (prefers-reduced-motion: reduce) {\n .viking-search-palette-backdrop,\n .viking-search-palette {\n animation: none;\n }\n}\n";
@@ -0,0 +1,10 @@
1
+ /** Shared Web Component item types. */
2
+ export type VikingSearchPaletteItem = {
3
+ title: string;
4
+ href: string;
5
+ snippet?: string;
6
+ group?: string;
7
+ keywords?: string[];
8
+ action?: "cookie-settings" | "bug-report";
9
+ };
10
+ export type VikingWcTone = "accent" | "secondary" | "success" | "warning" | "danger" | "info" | "muted" | "subtle";
@@ -0,0 +1,32 @@
1
+ import { HTMLElementBase } from "../core/dom";
2
+ /**
3
+ * Framework-agnostic Viking field stack Web Component.
4
+ * Tag: `viking-field` (legacy alias: `viking-field-wc`)
5
+ *
6
+ * @attr label - Visible field label
7
+ * @attr description - Helper text below the control
8
+ * @attr error - Validation message; sets aria-invalid on the slotted control
9
+ * @attr required - Adds a non-color-only required marker
10
+ * @attr width - full | half
11
+ *
12
+ * @slot default - Form control, usually `viking-input`, `viking-select`, or native input/select
13
+ */
14
+ export declare class VikingFieldWc extends HTMLElementBase {
15
+ static readonly tag = "viking-field";
16
+ static readonly legacyTag = "viking-field-wc";
17
+ static get observedAttributes(): string[];
18
+ private readonly shadow;
19
+ private readonly labelId;
20
+ private readonly descriptionId;
21
+ private readonly errorId;
22
+ private slotEl;
23
+ constructor();
24
+ connectedCallback(): void;
25
+ disconnectedCallback(): void;
26
+ attributeChangedCallback(): void;
27
+ private get control();
28
+ private readonly focusControl;
29
+ private readonly syncControlA11y;
30
+ private render;
31
+ }
32
+ export declare const registerVikingFieldWc: () => void;
@@ -0,0 +1,15 @@
1
+ export { VikingBadgeWc, registerVikingBadgeWc } from "./badge/viking-badge-wc";
2
+ export { VikingButtonWc, registerVikingButtonWc, } from "./button/viking-button-wc";
3
+ export { VikingCalloutWc, registerVikingCalloutWc, } from "./callout/viking-callout-wc";
4
+ export { VikingCardWc, registerVikingCardWc } from "./card/viking-card-wc";
5
+ export { VikingFieldWc, registerVikingFieldWc } from "./field/viking-field-wc";
6
+ export { VikingInputWc, registerVikingInputWc } from "./input/viking-input-wc";
7
+ export { VikingModalWc, registerVikingModalWc } from "./modal/viking-modal-wc";
8
+ export { VikingSearchPaletteWc, registerVikingSearchPaletteWc, type VikingSearchPaletteItem, } from "./search-palette/viking-search-palette-wc";
9
+ export { VikingSuiteSearchPaletteWc, registerVikingSuiteSearchPaletteWc, } from "./suite-search-palette/viking-suite-search-palette-wc";
10
+ export { VikingSuiteHeaderWc, registerVikingSuiteHeaderWc, } from "./suite-header/viking-suite-header-wc";
11
+ export { VikingSelectWc, registerVikingSelectWc, } from "./select/viking-select-wc";
12
+ export { VikingThemeToggleWc, registerVikingThemeToggleWc, } from "./theme-toggle/viking-theme-toggle-wc";
13
+ export type { VikingWcTone } from "./core/types";
14
+ /** Register all Viking-UI Web Components. Safe to call multiple times. */
15
+ export declare const registerVikingElements: () => void;
@@ -0,0 +1,32 @@
1
+ import { HTMLElementBase } from "../core/dom";
2
+ /**
3
+ * Framework-agnostic Viking input Web Component with form association.
4
+ * Tag: `viking-input` (legacy alias: `viking-input-wc`)
5
+ *
6
+ * @example
7
+ * <viking-input placeholder="Email" name="email" type="email"></viking-input>
8
+ */
9
+ export declare class VikingInputWc extends HTMLElementBase {
10
+ static readonly formAssociated = true;
11
+ static readonly tag = "viking-input";
12
+ static readonly legacyTag = "viking-input-wc";
13
+ static get observedAttributes(): string[];
14
+ private readonly shadow;
15
+ private readonly internals;
16
+ private input;
17
+ constructor();
18
+ connectedCallback(): void;
19
+ attributeChangedCallback(name: string): void;
20
+ get value(): string;
21
+ set value(next: string);
22
+ private get disabled();
23
+ private get loading();
24
+ private get clearable();
25
+ private get bare();
26
+ private readonly onInput;
27
+ private readonly onBlur;
28
+ private readonly onClear;
29
+ private syncFormValue;
30
+ private render;
31
+ }
32
+ export declare const registerVikingInputWc: () => void;
@@ -0,0 +1,50 @@
1
+ import { HTMLElementBase } from "../core/dom";
2
+ /**
3
+ * Framework-agnostic modal Web Component using native `<dialog>` semantics.
4
+ * Tag: `viking-modal` (legacy aliases: `viking-modal-wc`, `viking-dialog`)
5
+ *
6
+ * @attr open - When present, shows the modal
7
+ * @attr title - Dialog title for aria-label / heading
8
+ * @attr dismissible - Allow Escape and backdrop click to close (default: true)
9
+ *
10
+ * @slot default - Modal body content
11
+ * @slot actions - Footer action buttons
12
+ *
13
+ * @method openModal() - Programmatically open
14
+ * @method closeModal() - Programmatically close
15
+ *
16
+ * @event viking-close - Fired when the dialog closes
17
+ *
18
+ * @example
19
+ * <viking-modal title="Confirm deploy">
20
+ * <p>Push v2.0.0 to production?</p>
21
+ * <viking-button slot="actions" variant="primary">Deploy</viking-button>
22
+ * </viking-modal>
23
+ */
24
+ export declare class VikingModalWc extends HTMLElementBase {
25
+ static readonly tag = "viking-modal";
26
+ static readonly legacyTag = "viking-modal-wc";
27
+ static readonly dialogTag = "viking-dialog";
28
+ static get observedAttributes(): string[];
29
+ private readonly shadow;
30
+ private dialogEl;
31
+ constructor();
32
+ connectedCallback(): void;
33
+ disconnectedCallback(): void;
34
+ attributeChangedCallback(name: string): void;
35
+ /** Opens the modal dialog. */
36
+ openModal(): void;
37
+ /** Closes the modal dialog. */
38
+ closeModal(): void;
39
+ /** @deprecated Use openModal() */
40
+ open(): void;
41
+ /** @deprecated Use closeModal() */
42
+ close(): void;
43
+ private get dismissible();
44
+ private readonly onClose;
45
+ private readonly onBackdropClick;
46
+ private syncOpen;
47
+ private updateTitle;
48
+ private render;
49
+ }
50
+ export declare const registerVikingModalWc: () => void;
@@ -0,0 +1,64 @@
1
+ import { HTMLElementBase } from "../core/dom";
2
+ import type { VikingSearchPaletteItem } from "../core/types";
3
+ export type { VikingSearchPaletteItem };
4
+ /**
5
+ * Framework-agnostic command palette / search overlay Web Component.
6
+ * Tag: `viking-command-palette`
7
+ * Aliases: `viking-search-palette`, `viking-search-palette-wc`
8
+ *
9
+ * @attr open - When present, shows the palette
10
+ * @attr global-shortcut - Bind ⌘K / Ctrl+K to open
11
+ * @attr placeholder - Search input placeholder
12
+ * @attr items - JSON array of `{ title, href, snippet?, group? }`
13
+ *
14
+ * @method openPalette() - Programmatically open
15
+ * @method closePalette() - Programmatically close
16
+ *
17
+ * @event viking-close - Palette closed
18
+ * @event viking-query - `{ detail: { query: string } }` on input
19
+ * @event viking-select - `{ detail: { item } }` when a result is activated
20
+ *
21
+ * @example
22
+ * <viking-command-palette
23
+ * global-shortcut
24
+ * items='[{"title":"Components","href":"/components","group":"Docs"}]'
25
+ * ></viking-command-palette>
26
+ */
27
+ export declare class VikingSearchPaletteWc extends HTMLElementBase {
28
+ static readonly tag = "viking-command-palette";
29
+ static readonly searchTag = "viking-search-palette";
30
+ static readonly legacyTag = "viking-search-palette-wc";
31
+ static get observedAttributes(): string[];
32
+ private readonly shadow;
33
+ private dialogEl;
34
+ private inputEl;
35
+ private resultsEl;
36
+ private globalKeyHandler;
37
+ private readonly resultsId;
38
+ private readonly inputId;
39
+ private query;
40
+ private activeIndex;
41
+ private flatResults;
42
+ constructor();
43
+ connectedCallback(): void;
44
+ disconnectedCallback(): void;
45
+ attributeChangedCallback(name: string): void;
46
+ /** Opens the command palette. */
47
+ openPalette(): void;
48
+ /** Closes the command palette. */
49
+ closePalette(): void;
50
+ /** Sets the query string and re-renders filtered results. */
51
+ search(query: string): void;
52
+ private readonly onClose;
53
+ private readonly onBackdropClick;
54
+ private readonly onInput;
55
+ private readonly onInputKeydown;
56
+ private bindGlobalShortcut;
57
+ private unbindGlobalShortcut;
58
+ private syncOpen;
59
+ private scrollActiveIntoView;
60
+ private activateItem;
61
+ private renderResults;
62
+ private render;
63
+ }
64
+ export declare const registerVikingSearchPaletteWc: () => void;
@@ -0,0 +1,48 @@
1
+ import { HTMLElementBase } from "../core/dom";
2
+ /**
3
+ * Framework-agnostic native select Web Component with form association.
4
+ * Tag: `viking-select` (legacy alias: `viking-select-wc`)
5
+ *
6
+ * Place `<option>` elements as light DOM children; they are mirrored into the shadow select.
7
+ *
8
+ * @attr label - Visible field label
9
+ * @attr name - Form field name (participates in form submission via ElementInternals)
10
+ * @attr value - Selected option value
11
+ * @attr placeholder - Placeholder option text when no value is selected
12
+ * @attr description - Helper text below the control
13
+ * @attr error - Validation message; sets aria-invalid
14
+ * @attr width - full | half (default: half)
15
+ * @attr disabled - Disables the control
16
+ * @attr required - Marks field as required
17
+ *
18
+ * @event viking-change - `{ detail: { value: string } }`
19
+ *
20
+ * @example
21
+ * <viking-select-wc label="Retention" name="retention" value="30d">
22
+ * <option value="7d">7 days</option>
23
+ * <option value="30d">30 days</option>
24
+ * </viking-select-wc>
25
+ */
26
+ export declare class VikingSelectWc extends HTMLElementBase {
27
+ static readonly formAssociated = true;
28
+ static readonly tag = "viking-select";
29
+ static readonly legacyTag = "viking-select-wc";
30
+ static get observedAttributes(): string[];
31
+ private readonly shadow;
32
+ private readonly internals;
33
+ private selectEl;
34
+ private optionObserver;
35
+ private readonly controlId;
36
+ constructor();
37
+ connectedCallback(): void;
38
+ disconnectedCallback(): void;
39
+ attributeChangedCallback(name: string): void;
40
+ get value(): string;
41
+ set value(next: string);
42
+ private readonly onChange;
43
+ private syncFormValue;
44
+ private observeOptions;
45
+ private render;
46
+ private syncOptions;
47
+ }
48
+ export declare const registerVikingSelectWc: () => void;
@@ -0,0 +1,36 @@
1
+ import { HTMLElementBase } from "../core/dom";
2
+ /**
3
+ * Unified framework-agnostic DEML suite header.
4
+ * Tag: `viking-suite-header`
5
+ *
6
+ * @attr context - Surface: app | marketing | backend | docs (auto-detected when omitted)
7
+ * @attr authenticated - Render the user menu instead of Sign In
8
+ * @attr user-name - Display name for the authenticated user menu
9
+ * @attr user-email - Secondary user menu label
10
+ * @attr sign-in-href - Fallback href for static Sign In navigation
11
+ */
12
+ export declare class VikingSuiteHeaderWc extends HTMLElementBase {
13
+ static readonly tag = "viking-suite-header";
14
+ static get observedAttributes(): string[];
15
+ private readonly shadow;
16
+ private menuOpen;
17
+ private userMenuOpen;
18
+ private paletteEl;
19
+ constructor();
20
+ connectedCallback(): void;
21
+ disconnectedCallback(): void;
22
+ attributeChangedCallback(): void;
23
+ openSearch(): void;
24
+ private readonly onDocumentClick;
25
+ private readonly onSearchClick;
26
+ private readonly onMenuClick;
27
+ private readonly onUserClick;
28
+ private readonly onSignInClick;
29
+ private readonly onSignOutClick;
30
+ private syncOpenState;
31
+ private renderNavLinks;
32
+ private renderAuth;
33
+ private getDashboardHref;
34
+ private render;
35
+ }
36
+ export declare const registerVikingSuiteHeaderWc: () => void;
@@ -0,0 +1,39 @@
1
+ import { HTMLElementBase } from "../core/dom";
2
+ /**
3
+ * Unified cross-suite command palette Web Component.
4
+ * Tag: `viking-suite-command-palette`
5
+ * Aliases: `viking-suite-search-palette`, `viking-suite-search-palette-wc`
6
+ *
7
+ * Curated ⌘K navigation for marketing, docs, deml.app, and backend surfaces.
8
+ * Composes `viking-command-palette` with suite links from site-drakkar config.
9
+ *
10
+ * @attr context - Surface: app | marketing | backend | docs (auto-detected when omitted)
11
+ * @attr app-url - Override deml.app origin
12
+ * @attr marketing-url - Override marketing origin
13
+ * @attr backend-url - Override backend origin
14
+ * @attr global-shortcut - Bind ⌘K / Ctrl+K (default: on)
15
+ * @attr placeholder - Search input placeholder
16
+ *
17
+ * @method openPalette() - Programmatically open
18
+ * @method closePalette() - Programmatically close
19
+ *
20
+ * @example
21
+ * <viking-suite-command-palette context="marketing" global-shortcut></viking-suite-command-palette>
22
+ */
23
+ export declare class VikingSuiteSearchPaletteWc extends HTMLElementBase {
24
+ static readonly tag = "viking-suite-command-palette";
25
+ static readonly searchTag = "viking-suite-search-palette";
26
+ static readonly legacyTag = "viking-suite-search-palette-wc";
27
+ static get observedAttributes(): string[];
28
+ private paletteEl;
29
+ private itemsLoaded;
30
+ connectedCallback(): void;
31
+ attributeChangedCallback(name: string): void;
32
+ /** Opens the unified command palette. */
33
+ openPalette(): void;
34
+ /** Closes the unified command palette. */
35
+ closePalette(): void;
36
+ private ensurePalette;
37
+ private loadItems;
38
+ }
39
+ export declare const registerVikingSuiteSearchPaletteWc: () => void;
@@ -0,0 +1,19 @@
1
+ import { HTMLElementBase } from "../core/dom";
2
+ /**
3
+ * Framework-agnostic theme toggle Web Component.
4
+ * Tag: `viking-theme-toggle-wc`
5
+ */
6
+ export declare class VikingThemeToggleWc extends HTMLElementBase {
7
+ static readonly tag = "viking-theme-toggle-wc";
8
+ private readonly shadow;
9
+ private button;
10
+ private sunIcon;
11
+ private moonIcon;
12
+ constructor();
13
+ connectedCallback(): void;
14
+ disconnectedCallback(): void;
15
+ private readonly onClick;
16
+ private syncIcons;
17
+ private render;
18
+ }
19
+ export declare const registerVikingThemeToggleWc: () => void;
@@ -0,0 +1,40 @@
1
+ import type { VikingSearchPaletteItem } from "./core/types";
2
+ /** Custom events dispatched by Viking-UI Web Components. */
3
+ export type VikingWcChangeDetail = {
4
+ value: string;
5
+ };
6
+ export type VikingWcQueryDetail = {
7
+ query: string;
8
+ };
9
+ export type VikingWcSelectDetail = {
10
+ item: VikingSearchPaletteItem;
11
+ };
12
+ declare global {
13
+ interface HTMLElementTagNameMap {
14
+ "viking-badge": import("./badge/viking-badge-wc").VikingBadgeWc;
15
+ "viking-badge-wc": import("./badge/viking-badge-wc").VikingBadgeWc;
16
+ "viking-button": import("./button/viking-button-wc").VikingButtonWc;
17
+ "viking-button-wc": import("./button/viking-button-wc").VikingButtonWc;
18
+ "viking-callout": import("./callout/viking-callout-wc").VikingCalloutWc;
19
+ "viking-callout-wc": import("./callout/viking-callout-wc").VikingCalloutWc;
20
+ "viking-card": import("./card/viking-card-wc").VikingCardWc;
21
+ "viking-card-wc": import("./card/viking-card-wc").VikingCardWc;
22
+ "viking-field": import("./field/viking-field-wc").VikingFieldWc;
23
+ "viking-field-wc": import("./field/viking-field-wc").VikingFieldWc;
24
+ "viking-input": import("./input/viking-input-wc").VikingInputWc;
25
+ "viking-input-wc": import("./input/viking-input-wc").VikingInputWc;
26
+ "viking-dialog": import("./modal/viking-modal-wc").VikingModalWc;
27
+ "viking-modal": import("./modal/viking-modal-wc").VikingModalWc;
28
+ "viking-modal-wc": import("./modal/viking-modal-wc").VikingModalWc;
29
+ "viking-command-palette": import("./search-palette/viking-search-palette-wc").VikingSearchPaletteWc;
30
+ "viking-search-palette": import("./search-palette/viking-search-palette-wc").VikingSearchPaletteWc;
31
+ "viking-search-palette-wc": import("./search-palette/viking-search-palette-wc").VikingSearchPaletteWc;
32
+ "viking-select": import("./select/viking-select-wc").VikingSelectWc;
33
+ "viking-select-wc": import("./select/viking-select-wc").VikingSelectWc;
34
+ "viking-suite-command-palette": import("./suite-search-palette/viking-suite-search-palette-wc").VikingSuiteSearchPaletteWc;
35
+ "viking-suite-search-palette": import("./suite-search-palette/viking-suite-search-palette-wc").VikingSuiteSearchPaletteWc;
36
+ "viking-suite-search-palette-wc": import("./suite-search-palette/viking-suite-search-palette-wc").VikingSuiteSearchPaletteWc;
37
+ "viking-theme-toggle-wc": import("./theme-toggle/viking-theme-toggle-wc").VikingThemeToggleWc;
38
+ }
39
+ }
40
+ export {};
@@ -0,0 +1 @@
1
+ export * from "../web/index";