@skra/ui 0.4.0 → 0.6.0

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 (72) hide show
  1. package/consumer-guide/README.md +88 -85
  2. package/consumer-guide/custom-components.md +154 -0
  3. package/consumer-guide/wrapping-patterns.md +98 -90
  4. package/fesm2022/skra-ui-accordion.mjs +2 -2
  5. package/fesm2022/skra-ui-accordion.mjs.map +1 -1
  6. package/fesm2022/skra-ui-alert.mjs +2 -2
  7. package/fesm2022/skra-ui-alert.mjs.map +1 -1
  8. package/fesm2022/skra-ui-avatar.mjs.map +1 -1
  9. package/fesm2022/skra-ui-badge.mjs.map +1 -1
  10. package/fesm2022/skra-ui-button.mjs +2 -2
  11. package/fesm2022/skra-ui-button.mjs.map +1 -1
  12. package/fesm2022/skra-ui-checkbox.mjs +2 -2
  13. package/fesm2022/skra-ui-checkbox.mjs.map +1 -1
  14. package/fesm2022/skra-ui-chip.mjs +2 -2
  15. package/fesm2022/skra-ui-chip.mjs.map +1 -1
  16. package/fesm2022/skra-ui-combobox.mjs +120 -120
  17. package/fesm2022/skra-ui-combobox.mjs.map +1 -1
  18. package/fesm2022/skra-ui-core.mjs +64 -39
  19. package/fesm2022/skra-ui-core.mjs.map +1 -1
  20. package/fesm2022/skra-ui-counter.mjs.map +1 -1
  21. package/fesm2022/skra-ui-datepicker.mjs +605 -190
  22. package/fesm2022/skra-ui-datepicker.mjs.map +1 -1
  23. package/fesm2022/skra-ui-dialog.mjs.map +1 -1
  24. package/fesm2022/skra-ui-field.mjs.map +1 -1
  25. package/fesm2022/skra-ui-icon.mjs.map +1 -1
  26. package/fesm2022/skra-ui-input.mjs +2 -2
  27. package/fesm2022/skra-ui-input.mjs.map +1 -1
  28. package/fesm2022/skra-ui-kbd.mjs.map +1 -1
  29. package/fesm2022/skra-ui-layout.mjs.map +1 -1
  30. package/fesm2022/skra-ui-link.mjs +2 -2
  31. package/fesm2022/skra-ui-link.mjs.map +1 -1
  32. package/fesm2022/skra-ui-loading-indicator.mjs.map +1 -1
  33. package/fesm2022/skra-ui-menu.mjs +40 -16
  34. package/fesm2022/skra-ui-menu.mjs.map +1 -1
  35. package/fesm2022/skra-ui-multi-select.mjs +94 -94
  36. package/fesm2022/skra-ui-multi-select.mjs.map +1 -1
  37. package/fesm2022/skra-ui-native-select.mjs +2 -2
  38. package/fesm2022/skra-ui-native-select.mjs.map +1 -1
  39. package/fesm2022/skra-ui-popover.mjs +25 -9
  40. package/fesm2022/skra-ui-popover.mjs.map +1 -1
  41. package/fesm2022/skra-ui-progress.mjs.map +1 -1
  42. package/fesm2022/skra-ui-radio.mjs +2 -2
  43. package/fesm2022/skra-ui-radio.mjs.map +1 -1
  44. package/fesm2022/skra-ui-rating-display.mjs +2 -2
  45. package/fesm2022/skra-ui-rating-display.mjs.map +1 -1
  46. package/fesm2022/skra-ui-select.mjs +92 -92
  47. package/fesm2022/skra-ui-select.mjs.map +1 -1
  48. package/fesm2022/skra-ui-skeleton.mjs +8 -8
  49. package/fesm2022/skra-ui-skeleton.mjs.map +1 -1
  50. package/fesm2022/skra-ui-star-rating.mjs +2 -2
  51. package/fesm2022/skra-ui-star-rating.mjs.map +1 -1
  52. package/fesm2022/skra-ui-status-dot.mjs.map +1 -1
  53. package/fesm2022/skra-ui-switch.mjs +2 -2
  54. package/fesm2022/skra-ui-switch.mjs.map +1 -1
  55. package/fesm2022/skra-ui-tabs.mjs +2 -2
  56. package/fesm2022/skra-ui-tabs.mjs.map +1 -1
  57. package/fesm2022/skra-ui-textarea.mjs +2 -2
  58. package/fesm2022/skra-ui-textarea.mjs.map +1 -1
  59. package/fesm2022/skra-ui-toast.mjs +2 -2
  60. package/fesm2022/skra-ui-toast.mjs.map +1 -1
  61. package/fesm2022/skra-ui-tooltip.mjs +7 -2
  62. package/fesm2022/skra-ui-tooltip.mjs.map +1 -1
  63. package/fesm2022/skra-ui-typography.mjs.map +1 -1
  64. package/package.json +3 -3
  65. package/types/skra-ui-core.d.ts.map +1 -1
  66. package/types/skra-ui-datepicker.d.ts +146 -46
  67. package/types/skra-ui-datepicker.d.ts.map +1 -1
  68. package/types/skra-ui-menu.d.ts +18 -6
  69. package/types/skra-ui-menu.d.ts.map +1 -1
  70. package/types/skra-ui-popover.d.ts +13 -4
  71. package/types/skra-ui-popover.d.ts.map +1 -1
  72. package/types/skra-ui-tooltip.d.ts.map +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"skra-ui-accordion.mjs","sources":["../../../../libs/ui/accordion/src/lib/accordion/accordion-context.ts","../../../../libs/ui/accordion/src/lib/accordion/accordion-item-context.ts","../../../../libs/ui/accordion/src/lib/accordion/accordion-item.ts","../../../../libs/ui/accordion/src/lib/accordion/accordion.ts","../../../../libs/ui/accordion/src/lib/accordion/accordion-header.ts","../../../../libs/ui/accordion/src/lib/accordion/accordion.directives.ts","../../../../libs/ui/accordion/src/lib/accordion/accordion-trigger.ts","../../../../libs/ui/accordion/src/lib/accordion/accordion-trigger.html","../../../../libs/ui/accordion/src/lib/accordion/accordion-panel.ts","../../../../libs/ui/accordion/src/skra-ui-accordion.ts"],"sourcesContent":["import { Injectable, signal } from '@angular/core';\r\n\r\n/** Module-global counter → a deterministic, unique id base per `[skraAccordion]`\r\n * instance. Lib-local (mirrors `SkraTabsContext`) so `@skra/disclosure` takes no\r\n * dependency on another lib just for id generation. Stable across SSR↔hydration\r\n * (same instantiation order yields the same ids — the standard counter technique). */\r\nlet accordionInstanceCounter = 0;\r\n\r\n/** Sanitize a consumer `value` into an id-safe fragment (no spaces / special chars). */\r\nfunction idSafe(value: string): string {\r\n return value.replace(/[^a-zA-Z0-9_-]/g, '-');\r\n}\r\n\r\n/**\r\n * DI Context provided per `[skraAccordion]` instance — the ADR 013 §3.6 **non-form**\r\n * Contextual-ID-Sync bus (the 2nd consumer of the idiom after `SkraTabsContext`). It\r\n * carries **IDs + derived, read-only interaction state only** (`expanded` mirrors the\r\n * consumer's `[expanded]`; `exclusive` mirrors `[exclusive]`). It **never owns value** —\r\n * the open/closed set stays consumer-owned (ADR 037); a header requests a change through\r\n * `toggle()`, which the coordinator implements (resolving the exclusive policy) and from\r\n * which it emits `(expandedChange)`.\r\n */\r\n@Injectable()\r\nexport class SkraAccordionContext {\r\n /** Unique per `[skraAccordion]` — the prefix for every header/panel id in this group. */\r\n private readonly baseId = `skra-accordion-${++accordionInstanceCounter}`;\r\n\r\n /** Mirror of the consumer's `[expanded]` — the set of OPEN item values (read-only to children). */\r\n readonly expanded = signal<readonly string[]>([]);\r\n /** Mirror of the consumer's `[exclusive]` policy (read-only to children). */\r\n readonly exclusive = signal<boolean>(false);\r\n\r\n headerId(value: string): string {\r\n return `${this.baseId}-header-${idSafe(value)}`;\r\n }\r\n panelId(value: string): string {\r\n return `${this.baseId}-panel-${idSafe(value)}`;\r\n }\r\n isExpanded(value: string): boolean {\r\n return this.expanded().includes(value);\r\n }\r\n\r\n /** Coordinator-assigned: a header requests a toggle; the coordinator resolves the next\r\n * open-set (applying the exclusive policy) and emits `(expandedChange)` — never mutated here. */\r\n toggle: (value: string) => void = () => undefined;\r\n}\r\n","import type { Signal } from '@angular/core';\r\n\r\n/**\r\n * Per-item DI context provided by `[skraAccordionItem]` (via `useExisting`). It lets\r\n * `button[skraAccordionHeader]` and `[skraAccordionPanel]` read their shared `value`,\r\n * derived ids, and open state **without each re-declaring `value`** — the item declares it\r\n * once. All members are read-only/derived; `toggle()` forwards to the group coordinator\r\n * (the open/closed set stays consumer-owned, ADR 037). `*Id` are `null` only when an item\r\n * is used outside a `[skraAccordion]` (standalone misuse → dev-warned).\r\n */\r\nexport abstract class SkraAccordionItemContext {\r\n abstract readonly value: Signal<string>;\r\n abstract readonly expanded: Signal<boolean>;\r\n abstract readonly headerId: Signal<string | null>;\r\n abstract readonly panelId: Signal<string | null>;\r\n abstract toggle(): void;\r\n}\r\n","import {\r\n ChangeDetectionStrategy,\r\n Component,\r\n ViewEncapsulation,\r\n computed,\r\n inject,\r\n input,\r\n} from '@angular/core';\r\n\r\nimport { SkraAccordionContext } from './accordion-context';\r\nimport { SkraAccordionItemContext } from './accordion-item-context';\r\n\r\ndeclare const ngDevMode: boolean | undefined;\r\n\r\n/**\r\n * SkraAccordionItem — one item, a Component on the consumer's `<div skraAccordionItem>`\r\n * (ADR 040, `template: '<ng-content>'`). It declares `[value]` ONCE and provides\r\n * `SkraAccordionItemContext` (via `useExisting`) so its `button[skraAccordionHeader]` and\r\n * `[skraAccordionPanel]` read the shared value/ids/open-state without re-declaring it. It\r\n * owns the per-item top divider (no double borders) and the open-item box (skins may tint it).\r\n */\r\n@Component({\r\n selector: '[skraAccordionItem]',\r\n standalone: true,\r\n exportAs: 'skraAccordionItem',\r\n template: '<ng-content></ng-content>',\r\n styleUrl: './accordion-item.scss',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n encapsulation: ViewEncapsulation.Emulated,\r\n providers: [\r\n { provide: SkraAccordionItemContext, useExisting: SkraAccordionItem },\r\n ],\r\n host: {\r\n '[attr.data-skra-expanded]': 'expanded() ? \"\" : null',\r\n },\r\n})\r\nexport class SkraAccordionItem implements SkraAccordionItemContext {\r\n /** The item key — matched against `[expanded]` and the id base for its header/panel. */\r\n readonly value = input.required<string>();\r\n\r\n private readonly group = inject(SkraAccordionContext, { optional: true });\r\n\r\n readonly expanded = computed(\r\n () => this.group?.isExpanded(this.value()) ?? false,\r\n );\r\n readonly headerId = computed(\r\n () => this.group?.headerId(this.value()) ?? null,\r\n );\r\n readonly panelId = computed(() => this.group?.panelId(this.value()) ?? null);\r\n\r\n toggle(): void {\r\n this.group?.toggle(this.value());\r\n }\r\n\r\n constructor() {\r\n if (typeof ngDevMode === 'undefined' || ngDevMode) {\r\n if (!this.group) {\r\n console.warn(\r\n '[skraAccordionItem] has no [skraAccordion] ancestor — its header/panel are not wired ' +\r\n '(no aria-controls / open state). Project it inside <element skraAccordion>.',\r\n );\r\n }\r\n }\r\n }\r\n}\r\n","import {\r\n ChangeDetectionStrategy,\r\n Component,\r\n ViewEncapsulation,\r\n booleanAttribute,\r\n contentChildren,\r\n effect,\r\n inject,\r\n input,\r\n output,\r\n} from '@angular/core';\r\n\r\nimport { SkraAccordionContext } from './accordion-context';\r\nimport { SkraAccordionItem } from './accordion-item';\r\n\r\ndeclare const ngDevMode: boolean | undefined;\r\n\r\n/**\r\n * SkraAccordion — the WAI-ARIA APG **Accordion** coordinator. A Component on a wrapping\r\n * element that holds `[skraAccordionItem]` children (each item wraps a\r\n * `button[skraAccordionHeader]` + a `[skraAccordionPanel]`). It provides\r\n * `SkraAccordionContext` (the ADR 013 §3.6 non-form Contextual-ID-Sync bus), owns the\r\n * consumer-facing `[expanded]` / `(expandedChange)` (controlled, ADR 037 — NO internal open\r\n * state) and the `[exclusive]` policy, and draws the group's outer border + radius.\r\n *\r\n * <div skraAccordion [expanded]=\"open()\" (expandedChange)=\"open.set($event)\">\r\n * <div skraAccordionItem value=\"general\">\r\n * <h3><button skraAccordionHeader>General</button></h3>\r\n * <div skraAccordionPanel>…</div>\r\n * </div>\r\n * <div skraAccordionItem value=\"security\"> … </div>\r\n * </div>\r\n *\r\n * Open state is consumer-owned: a header click emits `(expandedChange)` with the resolved\r\n * next set (the `[exclusive]` policy applied here); the visible state updates when the\r\n * consumer round-trips `[expanded]`. `[exclusive]` is a POLICY flag on an invariant\r\n * `string[]` value — NOT a value-type switch, so it does not trigger ADR 0046.\r\n *\r\n * Full contract: adr/specs/component-accordion-spec.md.\r\n */\r\n@Component({\r\n selector: '[skraAccordion]',\r\n standalone: true,\r\n exportAs: 'skraAccordion',\r\n template: '<ng-content></ng-content>',\r\n styleUrl: './accordion.scss',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n encapsulation: ViewEncapsulation.Emulated,\r\n providers: [SkraAccordionContext],\r\n})\r\nexport class SkraAccordion {\r\n /** Consumer-owned set of OPEN item values (ADR 037). `[]` = all closed; order irrelevant. */\r\n readonly expanded = input<readonly string[]>([]);\r\n /** Policy: `true` → opening one item emits a set that drops the others (single-open). */\r\n readonly exclusive = input(false, { transform: booleanAttribute });\r\n /** Fires ONLY on user toggle — never on a programmatic `[expanded]` change. Carries the resolved next set. */\r\n readonly expandedChange = output<readonly string[]>();\r\n\r\n private readonly ctx = inject(SkraAccordionContext);\r\n private readonly items = contentChildren(SkraAccordionItem, {\r\n descendants: true,\r\n });\r\n\r\n constructor() {\r\n // Wire the context bus (a header requests a toggle; the coordinator resolves + emits).\r\n this.ctx.toggle = (value) => this.toggleItem(value);\r\n\r\n // Mirror inputs → context (read-only to children).\r\n effect(() => this.ctx.expanded.set(this.expanded()));\r\n effect(() => this.ctx.exclusive.set(this.exclusive()));\r\n\r\n if (typeof ngDevMode === 'undefined' || ngDevMode) {\r\n effect(() => this.warnDuplicateValues());\r\n }\r\n }\r\n\r\n /** A header was activated. Resolve the next open-set per the exclusive policy and REQUEST it\r\n * from the consumer via `(expandedChange)` — never mutate open state internally (ADR 037). */\r\n private toggleItem(value: string): void {\r\n const open = this.expanded();\r\n const isOpen = open.includes(value);\r\n let next: readonly string[];\r\n if (this.exclusive()) {\r\n next = isOpen ? [] : [value];\r\n } else {\r\n next = isOpen ? open.filter((v) => v !== value) : [...open, value];\r\n }\r\n this.expandedChange.emit(next);\r\n }\r\n\r\n /** Dev-only nudge: duplicate item values collide on the shared header/panel id base. */\r\n private warnDuplicateValues(): void {\r\n const seen = new Set<string>();\r\n for (const item of this.items()) {\r\n const v = item.value();\r\n if (seen.has(v)) {\r\n console.warn(\r\n `[skraAccordion] duplicate item value=\"${v}\" — header/panel ids will collide; values must be unique within a group.`,\r\n );\r\n }\r\n seen.add(v);\r\n }\r\n }\r\n}\r\n","import {\r\n ChangeDetectionStrategy,\r\n Component,\r\n ElementRef,\r\n ViewEncapsulation,\r\n inject,\r\n} from '@angular/core';\r\n\r\ndeclare const ngDevMode: boolean | undefined;\r\n\r\n/**\r\n * SkraAccordionHeader — the heading wrapper, a Component on the consumer's heading element\r\n * (`<h2 skraAccordionHeader>` … `<h6 skraAccordionHeader>` — the consumer picks the level for\r\n * the document outline; ADR 012 attach-to-native). It wraps a `button[skraAccordionTrigger]`\r\n * (the Radix Header+Trigger split, the way Material/Carbon/Radix all OWN the heading box rather\r\n * than leaving a projected heading's UA margin to leak).\r\n *\r\n * Its ONLY job is to OWN the heading's box: because Forge is now the heading's host, its Emulated\r\n * `:host` CSS can reset the UA heading margin (`margin: 0`) so the collapsed item hugs the\r\n * trigger height — impossible to do from the item, which only sees the heading as projected\r\n * content (ADR 040 cross-encapsulation limit; the same reason `_form-controls.scss` exists, but\r\n * here solved structurally without a global slice). Carries no ARIA role of its own (the native\r\n * heading element provides the heading semantics).\r\n */\r\n@Component({\r\n selector: '[skraAccordionHeader]',\r\n standalone: true,\r\n exportAs: 'skraAccordionHeader',\r\n template: '<ng-content></ng-content>',\r\n styleUrl: './accordion-header.scss',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n encapsulation: ViewEncapsulation.Emulated,\r\n})\r\nexport class SkraAccordionHeader {\r\n constructor() {\r\n if (typeof ngDevMode === 'undefined' || ngDevMode) {\r\n const tag =\r\n inject<ElementRef<HTMLElement>>(ElementRef).nativeElement.tagName;\r\n if (!/^H[1-6]$/.test(tag)) {\r\n console.warn(\r\n `[skraAccordionHeader] is on <${tag.toLowerCase()}> — APG requires the accordion ` +\r\n 'trigger to sit inside a heading element (<h2>…<h6>) for screen-reader heading navigation. ' +\r\n 'Apply it to a heading element.',\r\n );\r\n }\r\n }\r\n }\r\n}\r\n","import { Directive } from '@angular/core';\r\n\r\n/**\r\n * Marker for the leading icon/element slot of `button[skraAccordionTrigger]` (the ADR 003\r\n * `[skra-start]` convention). Detected via `contentChild` (ADR 020 Smart Slots v2.0) to\r\n * toggle the start wrapper without emitting an empty DOM node. Lib-local (mirrors the\r\n * Button/Chip per-lib marker) to avoid a cross-lib marker dependency.\r\n */\r\n@Directive({\r\n selector: '[skra-start]',\r\n standalone: true,\r\n})\r\nexport class SkraAccordionStart {}\r\n\r\n/**\r\n * Marker for the optional expand/collapse indicator override of `button[skraAccordionTrigger]`.\r\n * When present, it replaces the component-rendered default chevron (the ADR 028 slot+fallback\r\n * idiom — here a presentation override, NOT the loading primitive).\r\n */\r\n@Directive({\r\n selector: '[skra-accordion-indicator]',\r\n standalone: true,\r\n})\r\nexport class SkraAccordionIndicator {}\r\n","import {\r\n ChangeDetectionStrategy,\r\n Component,\r\n ViewEncapsulation,\r\n computed,\r\n contentChild,\r\n inject,\r\n} from '@angular/core';\r\n\r\nimport {\r\n SkraAccordionIndicator,\r\n SkraAccordionStart,\r\n} from './accordion.directives';\r\nimport { SkraAccordionItemContext } from './accordion-item-context';\r\n\r\ndeclare const ngDevMode: boolean | undefined;\r\n\r\n/**\r\n * SkraAccordionTrigger — the disclosure trigger, a Component on the native command host\r\n * `button[skraAccordionTrigger]` (ADR 012/040: a `<button>` gives Enter/Space→click + focus\r\n * for free — the same attach-to-native-button precedent as `button[skraButton]` / `skraTab` /\r\n * `skraMenuItem`). It is wrapped by `[skraAccordionHeader]` on a heading element (Radix\r\n * Header+Trigger split) so the heading owns the document outline + its own box/margin.\r\n * `aria-expanded` is the canonical Toggle state (no native HTML \"expanded\" attribute on a button\r\n * → ARIA is correct, boundary #9); the open STYLE keys off `:host([aria-expanded=\"true\"])` (Tabs\r\n * `aria-selected` precedent). value/ids/open-state come from `SkraAccordionItemContext` — the\r\n * trigger declares no `value`.\r\n *\r\n * **Iron boundary:** no `expanded` / `ariaLabel` / `size` / `severity` inputs.\r\n */\r\n@Component({\r\n selector: 'button[skraAccordionTrigger]',\r\n standalone: true,\r\n exportAs: 'skraAccordionTrigger',\r\n imports: [SkraAccordionStart, SkraAccordionIndicator],\r\n templateUrl: './accordion-trigger.html',\r\n styleUrl: './accordion-trigger.scss',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n encapsulation: ViewEncapsulation.Emulated,\r\n host: {\r\n type: 'button', // never an implicit submit if the accordion sits inside a <form>\r\n '[attr.id]': 'headerId()',\r\n '[attr.aria-controls]': 'panelId()',\r\n '[attr.aria-expanded]': 'ariaExpanded()',\r\n '[attr.data-skra-expanded]': 'expandedAttr()',\r\n '[attr.data-skra-has-start]': 'hasStart() ? \"\" : null',\r\n '(click)': 'onClick()',\r\n },\r\n})\r\nexport class SkraAccordionTrigger {\r\n private readonly ctx = inject(SkraAccordionItemContext, { optional: true });\r\n\r\n // Smart Slots v2.0 (ADR 020)\r\n protected readonly startSlot = contentChild(SkraAccordionStart);\r\n protected readonly indicatorSlot = contentChild(SkraAccordionIndicator);\r\n protected readonly hasStart = computed(() => !!this.startSlot());\r\n protected readonly hasIndicator = computed(() => !!this.indicatorSlot());\r\n\r\n // Derived id / state from the item context (null only on standalone misuse)\r\n protected readonly headerId = computed(() => this.ctx?.headerId() ?? null);\r\n protected readonly panelId = computed(() => this.ctx?.panelId() ?? null);\r\n protected readonly ariaExpanded = computed(() =>\r\n this.ctx ? (this.ctx.expanded() ? 'true' : 'false') : null,\r\n );\r\n protected readonly expandedAttr = computed(() =>\r\n this.ctx?.expanded() ? '' : null,\r\n );\r\n\r\n protected onClick(): void {\r\n this.ctx?.toggle();\r\n }\r\n\r\n constructor() {\r\n if (typeof ngDevMode === 'undefined' || ngDevMode) {\r\n if (!this.ctx) {\r\n console.warn(\r\n '[skraAccordionTrigger] has no [skraAccordionItem] ancestor — it is not wired to a panel ' +\r\n '(no aria-controls / toggle). Project it inside <element skraAccordionItem>.',\r\n );\r\n }\r\n }\r\n }\r\n}\r\n","@if (hasStart()) {\r\n<span class=\"skra-accordion-trigger-start\">\r\n <ng-content select=\"[skra-start]\"></ng-content>\r\n</span>\r\n}\r\n\r\n<span class=\"skra-accordion-trigger-label\">\r\n <ng-content></ng-content>\r\n</span>\r\n\r\n@if (hasIndicator()) {\r\n<span class=\"skra-accordion-trigger-indicator\">\r\n <ng-content select=\"[skra-accordion-indicator]\"></ng-content>\r\n</span>\r\n} @else {\r\n<span\r\n class=\"skra-accordion-trigger-indicator\"\r\n data-skra-accordion-indicator\r\n aria-hidden=\"true\"\r\n></span>\r\n}\r\n","import {\r\n ChangeDetectionStrategy,\r\n Component,\r\n ViewEncapsulation,\r\n computed,\r\n inject,\r\n} from '@angular/core';\r\n\r\nimport { SkraAccordionItemContext } from './accordion-item-context';\r\n\r\ndeclare const ngDevMode: boolean | undefined;\r\n\r\n/**\r\n * SkraAccordionPanel — the disclosed region, a Component on the consumer's\r\n * `<div skraAccordionPanel>` (ADR 040). `role=\"region\"`, auto-named by `aria-labelledby`→its\r\n * header. Collapse/expand is a CSS-only `grid-template-rows: 0fr↔1fr` animation driven by\r\n * `data-skra-expanded` (ADR 021 — no `[style.*]`); the inner wrapper's `visibility:hidden`\r\n * at the collapsed end removes content from the a11y tree + Tab order (see accordion-panel.scss).\r\n * value/ids/open-state come from `SkraAccordionItemContext`.\r\n */\r\n@Component({\r\n selector: '[skraAccordionPanel]',\r\n standalone: true,\r\n exportAs: 'skraAccordionPanel',\r\n template:\r\n '<div class=\"skra-accordion-panel-clip\"><div class=\"skra-accordion-panel-inner\"><ng-content></ng-content></div></div>',\r\n styleUrl: './accordion-panel.scss',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n encapsulation: ViewEncapsulation.Emulated,\r\n host: {\r\n role: 'region',\r\n '[attr.id]': 'panelId()',\r\n '[attr.aria-labelledby]': 'headerId()',\r\n '[attr.data-skra-expanded]': 'expandedAttr()',\r\n },\r\n})\r\nexport class SkraAccordionPanel {\r\n private readonly ctx = inject(SkraAccordionItemContext, { optional: true });\r\n\r\n protected readonly panelId = computed(() => this.ctx?.panelId() ?? null);\r\n protected readonly headerId = computed(() => this.ctx?.headerId() ?? null);\r\n protected readonly expandedAttr = computed(() =>\r\n this.ctx?.expanded() ? '' : null,\r\n );\r\n\r\n constructor() {\r\n if (typeof ngDevMode === 'undefined' || ngDevMode) {\r\n if (!this.ctx) {\r\n console.warn(\r\n '[skraAccordionPanel] has no [skraAccordionItem] ancestor — it is not wired to a header ' +\r\n '(no aria-labelledby / show-hide). Project it inside <element skraAccordionItem>.',\r\n );\r\n }\r\n }\r\n }\r\n}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"skra-ui-accordion.mjs","sources":["../../../../libs/ui/accordion/src/lib/accordion/accordion-context.ts","../../../../libs/ui/accordion/src/lib/accordion/accordion-item-context.ts","../../../../libs/ui/accordion/src/lib/accordion/accordion-item.ts","../../../../libs/ui/accordion/src/lib/accordion/accordion.ts","../../../../libs/ui/accordion/src/lib/accordion/accordion-header.ts","../../../../libs/ui/accordion/src/lib/accordion/accordion.directives.ts","../../../../libs/ui/accordion/src/lib/accordion/accordion-trigger.ts","../../../../libs/ui/accordion/src/lib/accordion/accordion-trigger.html","../../../../libs/ui/accordion/src/lib/accordion/accordion-panel.ts","../../../../libs/ui/accordion/src/skra-ui-accordion.ts"],"sourcesContent":["import { Injectable, signal } from '@angular/core';\n\n/** Module-global counter → a deterministic, unique id base per `[skraAccordion]`\n * instance. Lib-local (mirrors `SkraTabsContext`) so `@skra/disclosure` takes no\n * dependency on another lib just for id generation. Stable across SSR↔hydration\n * (same instantiation order yields the same ids — the standard counter technique). */\nlet accordionInstanceCounter = 0;\n\n/** Sanitize a consumer `value` into an id-safe fragment (no spaces / special chars). */\nfunction idSafe(value: string): string {\n return value.replace(/[^a-zA-Z0-9_-]/g, '-');\n}\n\n/**\n * DI Context provided per `[skraAccordion]` instance — the ADR 013 §3.6 **non-form**\n * Contextual-ID-Sync bus (the 2nd consumer of the idiom after `SkraTabsContext`). It\n * carries **IDs + derived, read-only interaction state only** (`expanded` mirrors the\n * consumer's `[expanded]`; `exclusive` mirrors `[exclusive]`). It **never owns value** —\n * the open/closed set stays consumer-owned (ADR 037); a header requests a change through\n * `toggle()`, which the coordinator implements (resolving the exclusive policy) and from\n * which it emits `(expandedChange)`.\n */\n@Injectable()\nexport class SkraAccordionContext {\n /** Unique per `[skraAccordion]` — the prefix for every header/panel id in this group. */\n private readonly baseId = `skra-accordion-${++accordionInstanceCounter}`;\n\n /** Mirror of the consumer's `[expanded]` — the set of OPEN item values (read-only to children). */\n readonly expanded = signal<readonly string[]>([]);\n /** Mirror of the consumer's `[exclusive]` policy (read-only to children). */\n readonly exclusive = signal<boolean>(false);\n\n headerId(value: string): string {\n return `${this.baseId}-header-${idSafe(value)}`;\n }\n panelId(value: string): string {\n return `${this.baseId}-panel-${idSafe(value)}`;\n }\n isExpanded(value: string): boolean {\n return this.expanded().includes(value);\n }\n\n /** Coordinator-assigned: a header requests a toggle; the coordinator resolves the next\n * open-set (applying the exclusive policy) and emits `(expandedChange)` — never mutated here. */\n toggle: (value: string) => void = () => undefined;\n}\n","import type { Signal } from '@angular/core';\n\n/**\n * Per-item DI context provided by `[skraAccordionItem]` (via `useExisting`). It lets\n * `button[skraAccordionHeader]` and `[skraAccordionPanel]` read their shared `value`,\n * derived ids, and open state **without each re-declaring `value`** — the item declares it\n * once. All members are read-only/derived; `toggle()` forwards to the group coordinator\n * (the open/closed set stays consumer-owned, ADR 037). `*Id` are `null` only when an item\n * is used outside a `[skraAccordion]` (standalone misuse → dev-warned).\n */\nexport abstract class SkraAccordionItemContext {\n abstract readonly value: Signal<string>;\n abstract readonly expanded: Signal<boolean>;\n abstract readonly headerId: Signal<string | null>;\n abstract readonly panelId: Signal<string | null>;\n abstract toggle(): void;\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n ViewEncapsulation,\n computed,\n inject,\n input,\n} from '@angular/core';\n\nimport { SkraAccordionContext } from './accordion-context';\nimport { SkraAccordionItemContext } from './accordion-item-context';\n\ndeclare const ngDevMode: boolean | undefined;\n\n/**\n * SkraAccordionItem — one item, a Component on the consumer's `<div skraAccordionItem>`\n * (ADR 040, `template: '<ng-content>'`). It declares `[value]` ONCE and provides\n * `SkraAccordionItemContext` (via `useExisting`) so its `button[skraAccordionHeader]` and\n * `[skraAccordionPanel]` read the shared value/ids/open-state without re-declaring it. It\n * owns the per-item top divider (no double borders) and the open-item box (skins may tint it).\n */\n@Component({\n selector: '[skraAccordionItem]',\n standalone: true,\n exportAs: 'skraAccordionItem',\n template: '<ng-content></ng-content>',\n styleUrl: './accordion-item.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.Emulated,\n providers: [\n { provide: SkraAccordionItemContext, useExisting: SkraAccordionItem },\n ],\n host: {\n '[attr.data-skra-expanded]': 'expanded() ? \"\" : null',\n },\n})\nexport class SkraAccordionItem implements SkraAccordionItemContext {\n /** The item key — matched against `[expanded]` and the id base for its header/panel. */\n readonly value = input.required<string>();\n\n private readonly group = inject(SkraAccordionContext, { optional: true });\n\n readonly expanded = computed(\n () => this.group?.isExpanded(this.value()) ?? false,\n );\n readonly headerId = computed(\n () => this.group?.headerId(this.value()) ?? null,\n );\n readonly panelId = computed(() => this.group?.panelId(this.value()) ?? null);\n\n toggle(): void {\n this.group?.toggle(this.value());\n }\n\n constructor() {\n if (typeof ngDevMode === 'undefined' || ngDevMode) {\n if (!this.group) {\n console.warn(\n '[skraAccordionItem] has no [skraAccordion] ancestor — its header/panel are not wired ' +\n '(no aria-controls / open state). Project it inside <element skraAccordion>.',\n );\n }\n }\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n ViewEncapsulation,\n booleanAttribute,\n contentChildren,\n effect,\n inject,\n input,\n output,\n} from '@angular/core';\n\nimport { SkraAccordionContext } from './accordion-context';\nimport { SkraAccordionItem } from './accordion-item';\n\ndeclare const ngDevMode: boolean | undefined;\n\n/**\n * SkraAccordion — the WAI-ARIA APG **Accordion** coordinator. A Component on a wrapping\n * element that holds `[skraAccordionItem]` children (each item wraps a\n * `button[skraAccordionHeader]` + a `[skraAccordionPanel]`). It provides\n * `SkraAccordionContext` (the ADR 013 §3.6 non-form Contextual-ID-Sync bus), owns the\n * consumer-facing `[expanded]` / `(expandedChange)` (controlled, ADR 037 — NO internal open\n * state) and the `[exclusive]` policy, and draws the group's outer border + radius.\n *\n * <div skraAccordion [expanded]=\"open()\" (expandedChange)=\"open.set($event)\">\n * <div skraAccordionItem value=\"general\">\n * <h3><button skraAccordionHeader>General</button></h3>\n * <div skraAccordionPanel>…</div>\n * </div>\n * <div skraAccordionItem value=\"security\"> … </div>\n * </div>\n *\n * Open state is consumer-owned: a header click emits `(expandedChange)` with the resolved\n * next set (the `[exclusive]` policy applied here); the visible state updates when the\n * consumer round-trips `[expanded]`. `[exclusive]` is a POLICY flag on an invariant\n * `string[]` value — NOT a value-type switch, so it does not trigger ADR 0046.\n *\n * Full contract: adr/specs/component-accordion-spec.md.\n */\n@Component({\n selector: '[skraAccordion]',\n standalone: true,\n exportAs: 'skraAccordion',\n template: '<ng-content></ng-content>',\n styleUrl: './accordion.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.Emulated,\n providers: [SkraAccordionContext],\n})\nexport class SkraAccordion {\n /** Consumer-owned set of OPEN item values (ADR 037). `[]` = all closed; order irrelevant. */\n readonly expanded = input<readonly string[]>([]);\n /** Policy: `true` → opening one item emits a set that drops the others (single-open). */\n readonly exclusive = input(false, { transform: booleanAttribute });\n /** Fires ONLY on user toggle — never on a programmatic `[expanded]` change. Carries the resolved next set. */\n readonly expandedChange = output<readonly string[]>();\n\n private readonly ctx = inject(SkraAccordionContext);\n private readonly items = contentChildren(SkraAccordionItem, {\n descendants: true,\n });\n\n constructor() {\n // Wire the context bus (a header requests a toggle; the coordinator resolves + emits).\n this.ctx.toggle = (value) => this.toggleItem(value);\n\n // Mirror inputs → context (read-only to children).\n effect(() => this.ctx.expanded.set(this.expanded()));\n effect(() => this.ctx.exclusive.set(this.exclusive()));\n\n if (typeof ngDevMode === 'undefined' || ngDevMode) {\n effect(() => this.warnDuplicateValues());\n }\n }\n\n /** A header was activated. Resolve the next open-set per the exclusive policy and REQUEST it\n * from the consumer via `(expandedChange)` — never mutate open state internally (ADR 037). */\n private toggleItem(value: string): void {\n const open = this.expanded();\n const isOpen = open.includes(value);\n let next: readonly string[];\n if (this.exclusive()) {\n next = isOpen ? [] : [value];\n } else {\n next = isOpen ? open.filter((v) => v !== value) : [...open, value];\n }\n this.expandedChange.emit(next);\n }\n\n /** Dev-only nudge: duplicate item values collide on the shared header/panel id base. */\n private warnDuplicateValues(): void {\n const seen = new Set<string>();\n for (const item of this.items()) {\n const v = item.value();\n if (seen.has(v)) {\n console.warn(\n `[skraAccordion] duplicate item value=\"${v}\" — header/panel ids will collide; values must be unique within a group.`,\n );\n }\n seen.add(v);\n }\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n ViewEncapsulation,\n inject,\n} from '@angular/core';\n\ndeclare const ngDevMode: boolean | undefined;\n\n/**\n * SkraAccordionHeader — the heading wrapper, a Component on the consumer's heading element\n * (`<h2 skraAccordionHeader>` … `<h6 skraAccordionHeader>` — the consumer picks the level for\n * the document outline; ADR 012 attach-to-native). It wraps a `button[skraAccordionTrigger]`\n * (the Radix Header+Trigger split, the way Material/Carbon/Radix all OWN the heading box rather\n * than leaving a projected heading's UA margin to leak).\n *\n * Its ONLY job is to OWN the heading's box: because Forge is now the heading's host, its Emulated\n * `:host` CSS can reset the UA heading margin (`margin: 0`) so the collapsed item hugs the\n * trigger height — impossible to do from the item, which only sees the heading as projected\n * content (ADR 040 cross-encapsulation limit; the same reason `_form-controls.scss` exists, but\n * here solved structurally without a global slice). Carries no ARIA role of its own (the native\n * heading element provides the heading semantics).\n */\n@Component({\n selector: '[skraAccordionHeader]',\n standalone: true,\n exportAs: 'skraAccordionHeader',\n template: '<ng-content></ng-content>',\n styleUrl: './accordion-header.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.Emulated,\n})\nexport class SkraAccordionHeader {\n constructor() {\n if (typeof ngDevMode === 'undefined' || ngDevMode) {\n const tag =\n inject<ElementRef<HTMLElement>>(ElementRef).nativeElement.tagName;\n if (!/^H[1-6]$/.test(tag)) {\n console.warn(\n `[skraAccordionHeader] is on <${tag.toLowerCase()}> — APG requires the accordion ` +\n 'trigger to sit inside a heading element (<h2>…<h6>) for screen-reader heading navigation. ' +\n 'Apply it to a heading element.',\n );\n }\n }\n }\n}\n","import { Directive } from '@angular/core';\n\n/**\n * Marker for the leading icon/element slot of `button[skraAccordionTrigger]` (the ADR 003\n * `[skra-start]` convention). Detected via `contentChild` (ADR 020 Smart Slots v2.0) to\n * toggle the start wrapper without emitting an empty DOM node. Lib-local (mirrors the\n * Button/Chip per-lib marker) to avoid a cross-lib marker dependency.\n */\n@Directive({\n selector: '[skra-start]',\n standalone: true,\n})\nexport class SkraAccordionStart {}\n\n/**\n * Marker for the optional expand/collapse indicator override of `button[skraAccordionTrigger]`.\n * When present, it replaces the component-rendered default chevron (the ADR 028 slot+fallback\n * idiom — here a presentation override, NOT the loading primitive).\n */\n@Directive({\n selector: '[skra-accordion-indicator]',\n standalone: true,\n})\nexport class SkraAccordionIndicator {}\n","import {\n ChangeDetectionStrategy,\n Component,\n ViewEncapsulation,\n computed,\n contentChild,\n inject,\n} from '@angular/core';\n\nimport {\n SkraAccordionIndicator,\n SkraAccordionStart,\n} from './accordion.directives';\nimport { SkraAccordionItemContext } from './accordion-item-context';\n\ndeclare const ngDevMode: boolean | undefined;\n\n/**\n * SkraAccordionTrigger — the disclosure trigger, a Component on the native command host\n * `button[skraAccordionTrigger]` (ADR 012/040: a `<button>` gives Enter/Space→click + focus\n * for free — the same attach-to-native-button precedent as `button[skraButton]` / `skraTab` /\n * `skraMenuItem`). It is wrapped by `[skraAccordionHeader]` on a heading element (Radix\n * Header+Trigger split) so the heading owns the document outline + its own box/margin.\n * `aria-expanded` is the canonical Toggle state (no native HTML \"expanded\" attribute on a button\n * → ARIA is correct, boundary #9); the open STYLE keys off `:host([aria-expanded=\"true\"])` (Tabs\n * `aria-selected` precedent). value/ids/open-state come from `SkraAccordionItemContext` — the\n * trigger declares no `value`.\n *\n * **Iron boundary:** no `expanded` / `ariaLabel` / `size` / `severity` inputs.\n */\n@Component({\n selector: 'button[skraAccordionTrigger]',\n standalone: true,\n exportAs: 'skraAccordionTrigger',\n imports: [SkraAccordionStart, SkraAccordionIndicator],\n templateUrl: './accordion-trigger.html',\n styleUrl: './accordion-trigger.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.Emulated,\n host: {\n type: 'button', // never an implicit submit if the accordion sits inside a <form>\n '[attr.id]': 'headerId()',\n '[attr.aria-controls]': 'panelId()',\n '[attr.aria-expanded]': 'ariaExpanded()',\n '[attr.data-skra-expanded]': 'expandedAttr()',\n '[attr.data-skra-has-start]': 'hasStart() ? \"\" : null',\n '(click)': 'onClick()',\n },\n})\nexport class SkraAccordionTrigger {\n private readonly ctx = inject(SkraAccordionItemContext, { optional: true });\n\n // Smart Slots v2.0 (ADR 020)\n protected readonly startSlot = contentChild(SkraAccordionStart);\n protected readonly indicatorSlot = contentChild(SkraAccordionIndicator);\n protected readonly hasStart = computed(() => !!this.startSlot());\n protected readonly hasIndicator = computed(() => !!this.indicatorSlot());\n\n // Derived id / state from the item context (null only on standalone misuse)\n protected readonly headerId = computed(() => this.ctx?.headerId() ?? null);\n protected readonly panelId = computed(() => this.ctx?.panelId() ?? null);\n protected readonly ariaExpanded = computed(() =>\n this.ctx ? (this.ctx.expanded() ? 'true' : 'false') : null,\n );\n protected readonly expandedAttr = computed(() =>\n this.ctx?.expanded() ? '' : null,\n );\n\n protected onClick(): void {\n this.ctx?.toggle();\n }\n\n constructor() {\n if (typeof ngDevMode === 'undefined' || ngDevMode) {\n if (!this.ctx) {\n console.warn(\n '[skraAccordionTrigger] has no [skraAccordionItem] ancestor — it is not wired to a panel ' +\n '(no aria-controls / toggle). Project it inside <element skraAccordionItem>.',\n );\n }\n }\n }\n}\n","@if (hasStart()) {\r\n<span class=\"skra-accordion-trigger-start\">\r\n <ng-content select=\"[skra-start]\"></ng-content>\r\n</span>\r\n}\r\n\r\n<span class=\"skra-accordion-trigger-label\">\r\n <ng-content></ng-content>\r\n</span>\r\n\r\n@if (hasIndicator()) {\r\n<span class=\"skra-accordion-trigger-indicator\">\r\n <ng-content select=\"[skra-accordion-indicator]\"></ng-content>\r\n</span>\r\n} @else {\r\n<span\r\n class=\"skra-accordion-trigger-indicator\"\r\n data-skra-accordion-indicator\r\n aria-hidden=\"true\"\r\n></span>\r\n}\r\n","import {\n ChangeDetectionStrategy,\n Component,\n ViewEncapsulation,\n computed,\n inject,\n} from '@angular/core';\n\nimport { SkraAccordionItemContext } from './accordion-item-context';\n\ndeclare const ngDevMode: boolean | undefined;\n\n/**\n * SkraAccordionPanel — the disclosed region, a Component on the consumer's\n * `<div skraAccordionPanel>` (ADR 040). `role=\"region\"`, auto-named by `aria-labelledby`→its\n * header. Collapse/expand is a CSS-only `grid-template-rows: 0fr↔1fr` animation driven by\n * `data-skra-expanded` (ADR 021 — no `[style.*]`); the inner wrapper's `visibility:hidden`\n * at the collapsed end removes content from the a11y tree + Tab order (see accordion-panel.scss).\n * value/ids/open-state come from `SkraAccordionItemContext`.\n */\n@Component({\n selector: '[skraAccordionPanel]',\n standalone: true,\n exportAs: 'skraAccordionPanel',\n template:\n '<div class=\"skra-accordion-panel-clip\"><div class=\"skra-accordion-panel-inner\"><ng-content></ng-content></div></div>',\n styleUrl: './accordion-panel.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.Emulated,\n host: {\n role: 'region',\n '[attr.id]': 'panelId()',\n '[attr.aria-labelledby]': 'headerId()',\n '[attr.data-skra-expanded]': 'expandedAttr()',\n },\n})\nexport class SkraAccordionPanel {\n private readonly ctx = inject(SkraAccordionItemContext, { optional: true });\n\n protected readonly panelId = computed(() => this.ctx?.panelId() ?? null);\n protected readonly headerId = computed(() => this.ctx?.headerId() ?? null);\n protected readonly expandedAttr = computed(() =>\n this.ctx?.expanded() ? '' : null,\n );\n\n constructor() {\n if (typeof ngDevMode === 'undefined' || ngDevMode) {\n if (!this.ctx) {\n console.warn(\n '[skraAccordionPanel] has no [skraAccordionItem] ancestor — it is not wired to a header ' +\n '(no aria-labelledby / show-hide). Project it inside <element skraAccordionItem>.',\n );\n }\n }\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
@@ -94,7 +94,7 @@ class SkraAlert {
94
94
  this.dismissed.emit();
95
95
  }
96
96
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.1", ngImport: i0, type: SkraAlert, deps: [], target: i0.ɵɵFactoryTarget.Component });
97
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.1.1", type: SkraAlert, isStandalone: true, selector: "skra-alert", inputs: { intent: { classPropertyName: "intent", publicName: "intent", isSignal: true, isRequired: false, transformFunction: null }, emphasis: { classPropertyName: "emphasis", publicName: "emphasis", isSignal: true, isRequired: false, transformFunction: null }, live: { classPropertyName: "live", publicName: "live", isSignal: true, isRequired: false, transformFunction: null }, dismissible: { classPropertyName: "dismissible", publicName: "dismissible", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { dismissed: "dismissed" }, host: { properties: { "attr.data-skra-intent": "intent()", "attr.data-skra-emphasis": "emphasis()", "attr.role": "liveRole()", "attr.data-skra-has-icon": "hasIcon() ? \"\" : null", "attr.data-skra-has-title": "hasTitle() ? \"\" : null" } }, queries: [{ propertyName: "iconSlot", first: true, predicate: SkraAlertIcon, descendants: true, isSignal: true }, { propertyName: "titleSlot", first: true, predicate: SkraAlertTitle, descendants: true, isSignal: true }], ngImport: i0, template: "@if (hasIcon()) {\r\n<span class=\"skra-alert-icon\">\r\n <ng-content select=\"[skra-alert-icon]\"></ng-content>\r\n</span>\r\n}\r\n\r\n<div class=\"skra-alert-content\">\r\n @if (hasTitle()) {\r\n <div class=\"skra-alert-title\">\r\n <ng-content select=\"[skra-alert-title]\"></ng-content>\r\n </div>\r\n }\r\n <div class=\"skra-alert-body\">\r\n <ng-content></ng-content>\r\n </div>\r\n</div>\r\n\r\n@if (dismissible()) {\r\n<button type=\"button\" class=\"skra-alert-dismiss\" (click)=\"onDismiss()\">\r\n <span class=\"skra-alert-dismiss-glyph\" aria-hidden=\"true\">&times;</span>\r\n <ng-content select=\"[skra-alert-close-label]\"></ng-content>\r\n</button>\r\n}\r\n", styles: ["@charset \"UTF-8\";:host{display:flex;align-items:flex-start;box-sizing:border-box;margin:0;gap:var(--skra-comp-alert-icon-gap);font-family:var(--skra-sys-typography-role-body-medium-font-family);font-size:var(--skra-sys-typography-role-body-medium-font-size);font-weight:var(--skra-sys-typography-role-body-medium-font-weight);line-height:var(--skra-sys-typography-role-body-medium-line-height);letter-spacing:var(--skra-sys-typography-role-body-medium-letter-spacing);background:var(--skra-comp-alert-background);color:var(--skra-comp-alert-foreground);border-color:var(--skra-comp-alert-border-color);border-width:var(--skra-comp-alert-border-width);border-style:var(--skra-comp-alert-border-style);border-radius:var(--skra-comp-alert-radius);padding-block:var(--skra-comp-alert-padding-block);padding-inline:var(--skra-comp-alert-padding-inline);box-shadow:var(--skra-comp-alert-shadow)}:host([data-skra-emphasis=high]){--skra-comp-alert-border-width: 0}:host([data-skra-intent=neutral][data-skra-emphasis=high]){--skra-comp-alert-background: var( --skra-comp-alert-background-neutral-high, var(--skra-sys-color-neutral-base) );--skra-comp-alert-foreground: var( --skra-comp-alert-foreground-neutral-high, var(--skra-sys-color-neutral-contrast) );--skra-comp-alert-border-color: var( --skra-comp-alert-border-color-neutral-high, transparent )}:host([data-skra-intent=neutral][data-skra-emphasis=medium]){--skra-comp-alert-background: var( --skra-comp-alert-background-neutral-medium, var(--skra-sys-color-neutral-soft) );--skra-comp-alert-foreground: var( --skra-comp-alert-foreground-neutral-medium, var(--skra-sys-color-neutral-strong) );--skra-comp-alert-border-color: var( --skra-comp-alert-border-color-neutral-medium, var(--skra-sys-color-neutral-border) )}:host([data-skra-intent=info][data-skra-emphasis=high]){--skra-comp-alert-background: var( --skra-comp-alert-background-info-high, var(--skra-sys-color-info-base) );--skra-comp-alert-foreground: var( --skra-comp-alert-foreground-info-high, var(--skra-sys-color-info-contrast) );--skra-comp-alert-border-color: var( --skra-comp-alert-border-color-info-high, transparent )}:host([data-skra-intent=info][data-skra-emphasis=medium]){--skra-comp-alert-background: var( --skra-comp-alert-background-info-medium, var(--skra-sys-color-info-soft) );--skra-comp-alert-foreground: var( --skra-comp-alert-foreground-info-medium, var(--skra-sys-color-info-strong) );--skra-comp-alert-border-color: var( --skra-comp-alert-border-color-info-medium, var(--skra-sys-color-info-border) )}:host([data-skra-intent=success][data-skra-emphasis=high]){--skra-comp-alert-background: var( --skra-comp-alert-background-success-high, var(--skra-sys-color-success-base) );--skra-comp-alert-foreground: var( --skra-comp-alert-foreground-success-high, var(--skra-sys-color-success-contrast) );--skra-comp-alert-border-color: var( --skra-comp-alert-border-color-success-high, transparent )}:host([data-skra-intent=success][data-skra-emphasis=medium]){--skra-comp-alert-background: var( --skra-comp-alert-background-success-medium, var(--skra-sys-color-success-soft) );--skra-comp-alert-foreground: var( --skra-comp-alert-foreground-success-medium, var(--skra-sys-color-success-strong) );--skra-comp-alert-border-color: var( --skra-comp-alert-border-color-success-medium, var(--skra-sys-color-success-border) )}:host([data-skra-intent=warning][data-skra-emphasis=high]){--skra-comp-alert-background: var( --skra-comp-alert-background-warning-high, var(--skra-sys-color-warning-base) );--skra-comp-alert-foreground: var( --skra-comp-alert-foreground-warning-high, var(--skra-sys-color-warning-contrast) );--skra-comp-alert-border-color: var( --skra-comp-alert-border-color-warning-high, transparent )}:host([data-skra-intent=warning][data-skra-emphasis=medium]){--skra-comp-alert-background: var( --skra-comp-alert-background-warning-medium, var(--skra-sys-color-warning-soft) );--skra-comp-alert-foreground: var( --skra-comp-alert-foreground-warning-medium, var(--skra-sys-color-warning-strong) );--skra-comp-alert-border-color: var( --skra-comp-alert-border-color-warning-medium, var(--skra-sys-color-warning-border) )}:host([data-skra-intent=danger][data-skra-emphasis=high]){--skra-comp-alert-background: var( --skra-comp-alert-background-danger-high, var(--skra-sys-color-danger-base) );--skra-comp-alert-foreground: var( --skra-comp-alert-foreground-danger-high, var(--skra-sys-color-danger-contrast) );--skra-comp-alert-border-color: var( --skra-comp-alert-border-color-danger-high, transparent )}:host([data-skra-intent=danger][data-skra-emphasis=medium]){--skra-comp-alert-background: var( --skra-comp-alert-background-danger-medium, var(--skra-sys-color-danger-soft) );--skra-comp-alert-foreground: var( --skra-comp-alert-foreground-danger-medium, var(--skra-sys-color-danger-strong) );--skra-comp-alert-border-color: var( --skra-comp-alert-border-color-danger-medium, var(--skra-sys-color-danger-border) )}.skra-alert-icon{display:inline-flex;flex-shrink:0;align-items:center;block-size:1lh;--skra-comp-icon-size: var(--skra-comp-alert-icon-size)}.skra-alert-content{flex:1 1 auto;min-inline-size:0;display:flex;flex-direction:column;gap:var(--skra-comp-alert-title-gap)}.skra-alert-title{font-family:var(--skra-sys-typography-role-label-large-font-family);font-size:var(--skra-sys-typography-role-label-large-font-size);font-weight:var(--skra-sys-typography-role-label-large-font-weight);line-height:var(--skra-sys-typography-role-label-large-line-height);letter-spacing:var(--skra-sys-typography-role-label-large-letter-spacing)}.skra-alert-dismiss{flex-shrink:0;display:inline-flex;align-items:center;justify-content:center;inline-size:var(--skra-comp-alert-dismiss-size);block-size:var(--skra-comp-alert-dismiss-size);margin:0;padding:0;border:0;background:transparent;color:inherit;cursor:pointer;border-radius:var(--skra-comp-alert-radius);transition:opacity var(--skra-comp-alert-motion-duration) var(--skra-comp-alert-motion-easing)}.skra-alert-dismiss:hover{opacity:.7}.skra-alert-dismiss:focus-visible{outline-style:solid;outline-color:var(--skra-comp-alert-focus-ring-color);outline-width:var(--skra-comp-alert-focus-ring-width);outline-offset:2px}.skra-alert-dismiss-glyph{font-size:1.25em;line-height:1}@media(prefers-reduced-motion:reduce){.skra-alert-dismiss{transition:none}}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush });
97
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.1.1", type: SkraAlert, isStandalone: true, selector: "skra-alert", inputs: { intent: { classPropertyName: "intent", publicName: "intent", isSignal: true, isRequired: false, transformFunction: null }, emphasis: { classPropertyName: "emphasis", publicName: "emphasis", isSignal: true, isRequired: false, transformFunction: null }, live: { classPropertyName: "live", publicName: "live", isSignal: true, isRequired: false, transformFunction: null }, dismissible: { classPropertyName: "dismissible", publicName: "dismissible", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { dismissed: "dismissed" }, host: { properties: { "attr.data-skra-intent": "intent()", "attr.data-skra-emphasis": "emphasis()", "attr.role": "liveRole()", "attr.data-skra-has-icon": "hasIcon() ? \"\" : null", "attr.data-skra-has-title": "hasTitle() ? \"\" : null" } }, queries: [{ propertyName: "iconSlot", first: true, predicate: SkraAlertIcon, descendants: true, isSignal: true }, { propertyName: "titleSlot", first: true, predicate: SkraAlertTitle, descendants: true, isSignal: true }], ngImport: i0, template: "@if (hasIcon()) {\r\n<span class=\"skra-alert-icon\">\r\n <ng-content select=\"[skra-alert-icon]\"></ng-content>\r\n</span>\r\n}\r\n\r\n<div class=\"skra-alert-content\">\r\n @if (hasTitle()) {\r\n <div class=\"skra-alert-title\">\r\n <ng-content select=\"[skra-alert-title]\"></ng-content>\r\n </div>\r\n }\r\n <div class=\"skra-alert-body\">\r\n <ng-content></ng-content>\r\n </div>\r\n</div>\r\n\r\n@if (dismissible()) {\r\n<button type=\"button\" class=\"skra-alert-dismiss\" (click)=\"onDismiss()\">\r\n <span class=\"skra-alert-dismiss-glyph\" aria-hidden=\"true\">&times;</span>\r\n <ng-content select=\"[skra-alert-close-label]\"></ng-content>\r\n</button>\r\n}\r\n", styles: ["@charset \"UTF-8\";:host{display:flex;align-items:flex-start;box-sizing:border-box;margin:0;gap:var(--skra-comp-alert-icon-gap);font-family:var(--skra-sys-typography-role-body-medium-font-family);font-size:var(--skra-sys-typography-role-body-medium-font-size);font-weight:var(--skra-sys-typography-role-body-medium-font-weight);line-height:var(--skra-sys-typography-role-body-medium-line-height);letter-spacing:var(--skra-sys-typography-role-body-medium-letter-spacing);background:var(--skra-comp-alert-background);color:var(--skra-comp-alert-foreground);border-color:var(--skra-comp-alert-border-color);border-width:var(--skra-comp-alert-border-width);border-style:var(--skra-comp-alert-border-style);border-radius:var(--skra-comp-alert-radius);padding-block:var(--skra-comp-alert-padding-block);padding-inline:var(--skra-comp-alert-padding-inline);box-shadow:var(--skra-comp-alert-shadow)}:host([data-skra-emphasis=high]){--skra-comp-alert-border-width: 0}:host([data-skra-intent=neutral][data-skra-emphasis=high]){--skra-comp-alert-background: var( --skra-comp-alert-background-neutral-high, var(--skra-sys-color-neutral-base) );--skra-comp-alert-foreground: var( --skra-comp-alert-foreground-neutral-high, var(--skra-sys-color-neutral-contrast) );--skra-comp-alert-border-color: var( --skra-comp-alert-border-color-neutral-high, transparent )}:host([data-skra-intent=neutral][data-skra-emphasis=medium]){--skra-comp-alert-background: var( --skra-comp-alert-background-neutral-medium, var(--skra-sys-color-neutral-soft) );--skra-comp-alert-foreground: var( --skra-comp-alert-foreground-neutral-medium, var(--skra-sys-color-neutral-strong) );--skra-comp-alert-border-color: var( --skra-comp-alert-border-color-neutral-medium, var(--skra-sys-color-neutral-border) )}:host([data-skra-intent=info][data-skra-emphasis=high]){--skra-comp-alert-background: var( --skra-comp-alert-background-info-high, var(--skra-sys-color-info-base) );--skra-comp-alert-foreground: var( --skra-comp-alert-foreground-info-high, var(--skra-sys-color-info-contrast) );--skra-comp-alert-border-color: var( --skra-comp-alert-border-color-info-high, transparent )}:host([data-skra-intent=info][data-skra-emphasis=medium]){--skra-comp-alert-background: var( --skra-comp-alert-background-info-medium, var(--skra-sys-color-info-soft) );--skra-comp-alert-foreground: var( --skra-comp-alert-foreground-info-medium, var(--skra-sys-color-info-strong) );--skra-comp-alert-border-color: var( --skra-comp-alert-border-color-info-medium, var(--skra-sys-color-info-border) )}:host([data-skra-intent=success][data-skra-emphasis=high]){--skra-comp-alert-background: var( --skra-comp-alert-background-success-high, var(--skra-sys-color-success-base) );--skra-comp-alert-foreground: var( --skra-comp-alert-foreground-success-high, var(--skra-sys-color-success-contrast) );--skra-comp-alert-border-color: var( --skra-comp-alert-border-color-success-high, transparent )}:host([data-skra-intent=success][data-skra-emphasis=medium]){--skra-comp-alert-background: var( --skra-comp-alert-background-success-medium, var(--skra-sys-color-success-soft) );--skra-comp-alert-foreground: var( --skra-comp-alert-foreground-success-medium, var(--skra-sys-color-success-strong) );--skra-comp-alert-border-color: var( --skra-comp-alert-border-color-success-medium, var(--skra-sys-color-success-border) )}:host([data-skra-intent=warning][data-skra-emphasis=high]){--skra-comp-alert-background: var( --skra-comp-alert-background-warning-high, var(--skra-sys-color-warning-base) );--skra-comp-alert-foreground: var( --skra-comp-alert-foreground-warning-high, var(--skra-sys-color-warning-contrast) );--skra-comp-alert-border-color: var( --skra-comp-alert-border-color-warning-high, transparent )}:host([data-skra-intent=warning][data-skra-emphasis=medium]){--skra-comp-alert-background: var( --skra-comp-alert-background-warning-medium, var(--skra-sys-color-warning-soft) );--skra-comp-alert-foreground: var( --skra-comp-alert-foreground-warning-medium, var(--skra-sys-color-warning-strong) );--skra-comp-alert-border-color: var( --skra-comp-alert-border-color-warning-medium, var(--skra-sys-color-warning-border) )}:host([data-skra-intent=danger][data-skra-emphasis=high]){--skra-comp-alert-background: var( --skra-comp-alert-background-danger-high, var(--skra-sys-color-danger-base) );--skra-comp-alert-foreground: var( --skra-comp-alert-foreground-danger-high, var(--skra-sys-color-danger-contrast) );--skra-comp-alert-border-color: var( --skra-comp-alert-border-color-danger-high, transparent )}:host([data-skra-intent=danger][data-skra-emphasis=medium]){--skra-comp-alert-background: var( --skra-comp-alert-background-danger-medium, var(--skra-sys-color-danger-soft) );--skra-comp-alert-foreground: var( --skra-comp-alert-foreground-danger-medium, var(--skra-sys-color-danger-strong) );--skra-comp-alert-border-color: var( --skra-comp-alert-border-color-danger-medium, var(--skra-sys-color-danger-border) )}.skra-alert-icon{display:inline-flex;flex-shrink:0;align-items:center;block-size:1lh;--skra-comp-icon-size: var(--skra-comp-alert-icon-size)}.skra-alert-content{flex:1 1 auto;min-inline-size:0;display:flex;flex-direction:column;gap:var(--skra-comp-alert-title-gap)}.skra-alert-title{font-family:var(--skra-sys-typography-role-label-large-font-family);font-size:var(--skra-sys-typography-role-label-large-font-size);font-weight:var(--skra-sys-typography-role-label-large-font-weight);line-height:var(--skra-sys-typography-role-label-large-line-height);letter-spacing:var(--skra-sys-typography-role-label-large-letter-spacing)}.skra-alert-dismiss{flex-shrink:0;display:inline-flex;align-items:center;justify-content:center;inline-size:var(--skra-comp-alert-dismiss-size);block-size:var(--skra-comp-alert-dismiss-size);margin:0;padding:0;border:0;background:transparent;color:inherit;cursor:pointer;border-radius:var(--skra-comp-alert-radius);transition:opacity var(--skra-comp-alert-motion-duration) var(--skra-comp-alert-motion-easing)}@media(hover:hover)and (pointer:fine){.skra-alert-dismiss:hover{opacity:.7}}.skra-alert-dismiss:focus-visible{outline-style:solid;outline-color:var(--skra-comp-alert-focus-ring-color);outline-width:var(--skra-comp-alert-focus-ring-width);outline-offset:2px}.skra-alert-dismiss-glyph{font-size:1.25em;line-height:1}@media(prefers-reduced-motion:reduce){.skra-alert-dismiss{transition:none}}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush });
98
98
  }
99
99
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.1", ngImport: i0, type: SkraAlert, decorators: [{
100
100
  type: Component,
@@ -107,7 +107,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.1", ngImpor
107
107
  // Smart Slots layout reflection (ADR 020 v2.0 — slot-presence, State-Surface-exempt §3.6)
108
108
  '[attr.data-skra-has-icon]': 'hasIcon() ? "" : null',
109
109
  '[attr.data-skra-has-title]': 'hasTitle() ? "" : null',
110
- }, template: "@if (hasIcon()) {\r\n<span class=\"skra-alert-icon\">\r\n <ng-content select=\"[skra-alert-icon]\"></ng-content>\r\n</span>\r\n}\r\n\r\n<div class=\"skra-alert-content\">\r\n @if (hasTitle()) {\r\n <div class=\"skra-alert-title\">\r\n <ng-content select=\"[skra-alert-title]\"></ng-content>\r\n </div>\r\n }\r\n <div class=\"skra-alert-body\">\r\n <ng-content></ng-content>\r\n </div>\r\n</div>\r\n\r\n@if (dismissible()) {\r\n<button type=\"button\" class=\"skra-alert-dismiss\" (click)=\"onDismiss()\">\r\n <span class=\"skra-alert-dismiss-glyph\" aria-hidden=\"true\">&times;</span>\r\n <ng-content select=\"[skra-alert-close-label]\"></ng-content>\r\n</button>\r\n}\r\n", styles: ["@charset \"UTF-8\";:host{display:flex;align-items:flex-start;box-sizing:border-box;margin:0;gap:var(--skra-comp-alert-icon-gap);font-family:var(--skra-sys-typography-role-body-medium-font-family);font-size:var(--skra-sys-typography-role-body-medium-font-size);font-weight:var(--skra-sys-typography-role-body-medium-font-weight);line-height:var(--skra-sys-typography-role-body-medium-line-height);letter-spacing:var(--skra-sys-typography-role-body-medium-letter-spacing);background:var(--skra-comp-alert-background);color:var(--skra-comp-alert-foreground);border-color:var(--skra-comp-alert-border-color);border-width:var(--skra-comp-alert-border-width);border-style:var(--skra-comp-alert-border-style);border-radius:var(--skra-comp-alert-radius);padding-block:var(--skra-comp-alert-padding-block);padding-inline:var(--skra-comp-alert-padding-inline);box-shadow:var(--skra-comp-alert-shadow)}:host([data-skra-emphasis=high]){--skra-comp-alert-border-width: 0}:host([data-skra-intent=neutral][data-skra-emphasis=high]){--skra-comp-alert-background: var( --skra-comp-alert-background-neutral-high, var(--skra-sys-color-neutral-base) );--skra-comp-alert-foreground: var( --skra-comp-alert-foreground-neutral-high, var(--skra-sys-color-neutral-contrast) );--skra-comp-alert-border-color: var( --skra-comp-alert-border-color-neutral-high, transparent )}:host([data-skra-intent=neutral][data-skra-emphasis=medium]){--skra-comp-alert-background: var( --skra-comp-alert-background-neutral-medium, var(--skra-sys-color-neutral-soft) );--skra-comp-alert-foreground: var( --skra-comp-alert-foreground-neutral-medium, var(--skra-sys-color-neutral-strong) );--skra-comp-alert-border-color: var( --skra-comp-alert-border-color-neutral-medium, var(--skra-sys-color-neutral-border) )}:host([data-skra-intent=info][data-skra-emphasis=high]){--skra-comp-alert-background: var( --skra-comp-alert-background-info-high, var(--skra-sys-color-info-base) );--skra-comp-alert-foreground: var( --skra-comp-alert-foreground-info-high, var(--skra-sys-color-info-contrast) );--skra-comp-alert-border-color: var( --skra-comp-alert-border-color-info-high, transparent )}:host([data-skra-intent=info][data-skra-emphasis=medium]){--skra-comp-alert-background: var( --skra-comp-alert-background-info-medium, var(--skra-sys-color-info-soft) );--skra-comp-alert-foreground: var( --skra-comp-alert-foreground-info-medium, var(--skra-sys-color-info-strong) );--skra-comp-alert-border-color: var( --skra-comp-alert-border-color-info-medium, var(--skra-sys-color-info-border) )}:host([data-skra-intent=success][data-skra-emphasis=high]){--skra-comp-alert-background: var( --skra-comp-alert-background-success-high, var(--skra-sys-color-success-base) );--skra-comp-alert-foreground: var( --skra-comp-alert-foreground-success-high, var(--skra-sys-color-success-contrast) );--skra-comp-alert-border-color: var( --skra-comp-alert-border-color-success-high, transparent )}:host([data-skra-intent=success][data-skra-emphasis=medium]){--skra-comp-alert-background: var( --skra-comp-alert-background-success-medium, var(--skra-sys-color-success-soft) );--skra-comp-alert-foreground: var( --skra-comp-alert-foreground-success-medium, var(--skra-sys-color-success-strong) );--skra-comp-alert-border-color: var( --skra-comp-alert-border-color-success-medium, var(--skra-sys-color-success-border) )}:host([data-skra-intent=warning][data-skra-emphasis=high]){--skra-comp-alert-background: var( --skra-comp-alert-background-warning-high, var(--skra-sys-color-warning-base) );--skra-comp-alert-foreground: var( --skra-comp-alert-foreground-warning-high, var(--skra-sys-color-warning-contrast) );--skra-comp-alert-border-color: var( --skra-comp-alert-border-color-warning-high, transparent )}:host([data-skra-intent=warning][data-skra-emphasis=medium]){--skra-comp-alert-background: var( --skra-comp-alert-background-warning-medium, var(--skra-sys-color-warning-soft) );--skra-comp-alert-foreground: var( --skra-comp-alert-foreground-warning-medium, var(--skra-sys-color-warning-strong) );--skra-comp-alert-border-color: var( --skra-comp-alert-border-color-warning-medium, var(--skra-sys-color-warning-border) )}:host([data-skra-intent=danger][data-skra-emphasis=high]){--skra-comp-alert-background: var( --skra-comp-alert-background-danger-high, var(--skra-sys-color-danger-base) );--skra-comp-alert-foreground: var( --skra-comp-alert-foreground-danger-high, var(--skra-sys-color-danger-contrast) );--skra-comp-alert-border-color: var( --skra-comp-alert-border-color-danger-high, transparent )}:host([data-skra-intent=danger][data-skra-emphasis=medium]){--skra-comp-alert-background: var( --skra-comp-alert-background-danger-medium, var(--skra-sys-color-danger-soft) );--skra-comp-alert-foreground: var( --skra-comp-alert-foreground-danger-medium, var(--skra-sys-color-danger-strong) );--skra-comp-alert-border-color: var( --skra-comp-alert-border-color-danger-medium, var(--skra-sys-color-danger-border) )}.skra-alert-icon{display:inline-flex;flex-shrink:0;align-items:center;block-size:1lh;--skra-comp-icon-size: var(--skra-comp-alert-icon-size)}.skra-alert-content{flex:1 1 auto;min-inline-size:0;display:flex;flex-direction:column;gap:var(--skra-comp-alert-title-gap)}.skra-alert-title{font-family:var(--skra-sys-typography-role-label-large-font-family);font-size:var(--skra-sys-typography-role-label-large-font-size);font-weight:var(--skra-sys-typography-role-label-large-font-weight);line-height:var(--skra-sys-typography-role-label-large-line-height);letter-spacing:var(--skra-sys-typography-role-label-large-letter-spacing)}.skra-alert-dismiss{flex-shrink:0;display:inline-flex;align-items:center;justify-content:center;inline-size:var(--skra-comp-alert-dismiss-size);block-size:var(--skra-comp-alert-dismiss-size);margin:0;padding:0;border:0;background:transparent;color:inherit;cursor:pointer;border-radius:var(--skra-comp-alert-radius);transition:opacity var(--skra-comp-alert-motion-duration) var(--skra-comp-alert-motion-easing)}.skra-alert-dismiss:hover{opacity:.7}.skra-alert-dismiss:focus-visible{outline-style:solid;outline-color:var(--skra-comp-alert-focus-ring-color);outline-width:var(--skra-comp-alert-focus-ring-width);outline-offset:2px}.skra-alert-dismiss-glyph{font-size:1.25em;line-height:1}@media(prefers-reduced-motion:reduce){.skra-alert-dismiss{transition:none}}\n"] }]
110
+ }, template: "@if (hasIcon()) {\r\n<span class=\"skra-alert-icon\">\r\n <ng-content select=\"[skra-alert-icon]\"></ng-content>\r\n</span>\r\n}\r\n\r\n<div class=\"skra-alert-content\">\r\n @if (hasTitle()) {\r\n <div class=\"skra-alert-title\">\r\n <ng-content select=\"[skra-alert-title]\"></ng-content>\r\n </div>\r\n }\r\n <div class=\"skra-alert-body\">\r\n <ng-content></ng-content>\r\n </div>\r\n</div>\r\n\r\n@if (dismissible()) {\r\n<button type=\"button\" class=\"skra-alert-dismiss\" (click)=\"onDismiss()\">\r\n <span class=\"skra-alert-dismiss-glyph\" aria-hidden=\"true\">&times;</span>\r\n <ng-content select=\"[skra-alert-close-label]\"></ng-content>\r\n</button>\r\n}\r\n", styles: ["@charset \"UTF-8\";:host{display:flex;align-items:flex-start;box-sizing:border-box;margin:0;gap:var(--skra-comp-alert-icon-gap);font-family:var(--skra-sys-typography-role-body-medium-font-family);font-size:var(--skra-sys-typography-role-body-medium-font-size);font-weight:var(--skra-sys-typography-role-body-medium-font-weight);line-height:var(--skra-sys-typography-role-body-medium-line-height);letter-spacing:var(--skra-sys-typography-role-body-medium-letter-spacing);background:var(--skra-comp-alert-background);color:var(--skra-comp-alert-foreground);border-color:var(--skra-comp-alert-border-color);border-width:var(--skra-comp-alert-border-width);border-style:var(--skra-comp-alert-border-style);border-radius:var(--skra-comp-alert-radius);padding-block:var(--skra-comp-alert-padding-block);padding-inline:var(--skra-comp-alert-padding-inline);box-shadow:var(--skra-comp-alert-shadow)}:host([data-skra-emphasis=high]){--skra-comp-alert-border-width: 0}:host([data-skra-intent=neutral][data-skra-emphasis=high]){--skra-comp-alert-background: var( --skra-comp-alert-background-neutral-high, var(--skra-sys-color-neutral-base) );--skra-comp-alert-foreground: var( --skra-comp-alert-foreground-neutral-high, var(--skra-sys-color-neutral-contrast) );--skra-comp-alert-border-color: var( --skra-comp-alert-border-color-neutral-high, transparent )}:host([data-skra-intent=neutral][data-skra-emphasis=medium]){--skra-comp-alert-background: var( --skra-comp-alert-background-neutral-medium, var(--skra-sys-color-neutral-soft) );--skra-comp-alert-foreground: var( --skra-comp-alert-foreground-neutral-medium, var(--skra-sys-color-neutral-strong) );--skra-comp-alert-border-color: var( --skra-comp-alert-border-color-neutral-medium, var(--skra-sys-color-neutral-border) )}:host([data-skra-intent=info][data-skra-emphasis=high]){--skra-comp-alert-background: var( --skra-comp-alert-background-info-high, var(--skra-sys-color-info-base) );--skra-comp-alert-foreground: var( --skra-comp-alert-foreground-info-high, var(--skra-sys-color-info-contrast) );--skra-comp-alert-border-color: var( --skra-comp-alert-border-color-info-high, transparent )}:host([data-skra-intent=info][data-skra-emphasis=medium]){--skra-comp-alert-background: var( --skra-comp-alert-background-info-medium, var(--skra-sys-color-info-soft) );--skra-comp-alert-foreground: var( --skra-comp-alert-foreground-info-medium, var(--skra-sys-color-info-strong) );--skra-comp-alert-border-color: var( --skra-comp-alert-border-color-info-medium, var(--skra-sys-color-info-border) )}:host([data-skra-intent=success][data-skra-emphasis=high]){--skra-comp-alert-background: var( --skra-comp-alert-background-success-high, var(--skra-sys-color-success-base) );--skra-comp-alert-foreground: var( --skra-comp-alert-foreground-success-high, var(--skra-sys-color-success-contrast) );--skra-comp-alert-border-color: var( --skra-comp-alert-border-color-success-high, transparent )}:host([data-skra-intent=success][data-skra-emphasis=medium]){--skra-comp-alert-background: var( --skra-comp-alert-background-success-medium, var(--skra-sys-color-success-soft) );--skra-comp-alert-foreground: var( --skra-comp-alert-foreground-success-medium, var(--skra-sys-color-success-strong) );--skra-comp-alert-border-color: var( --skra-comp-alert-border-color-success-medium, var(--skra-sys-color-success-border) )}:host([data-skra-intent=warning][data-skra-emphasis=high]){--skra-comp-alert-background: var( --skra-comp-alert-background-warning-high, var(--skra-sys-color-warning-base) );--skra-comp-alert-foreground: var( --skra-comp-alert-foreground-warning-high, var(--skra-sys-color-warning-contrast) );--skra-comp-alert-border-color: var( --skra-comp-alert-border-color-warning-high, transparent )}:host([data-skra-intent=warning][data-skra-emphasis=medium]){--skra-comp-alert-background: var( --skra-comp-alert-background-warning-medium, var(--skra-sys-color-warning-soft) );--skra-comp-alert-foreground: var( --skra-comp-alert-foreground-warning-medium, var(--skra-sys-color-warning-strong) );--skra-comp-alert-border-color: var( --skra-comp-alert-border-color-warning-medium, var(--skra-sys-color-warning-border) )}:host([data-skra-intent=danger][data-skra-emphasis=high]){--skra-comp-alert-background: var( --skra-comp-alert-background-danger-high, var(--skra-sys-color-danger-base) );--skra-comp-alert-foreground: var( --skra-comp-alert-foreground-danger-high, var(--skra-sys-color-danger-contrast) );--skra-comp-alert-border-color: var( --skra-comp-alert-border-color-danger-high, transparent )}:host([data-skra-intent=danger][data-skra-emphasis=medium]){--skra-comp-alert-background: var( --skra-comp-alert-background-danger-medium, var(--skra-sys-color-danger-soft) );--skra-comp-alert-foreground: var( --skra-comp-alert-foreground-danger-medium, var(--skra-sys-color-danger-strong) );--skra-comp-alert-border-color: var( --skra-comp-alert-border-color-danger-medium, var(--skra-sys-color-danger-border) )}.skra-alert-icon{display:inline-flex;flex-shrink:0;align-items:center;block-size:1lh;--skra-comp-icon-size: var(--skra-comp-alert-icon-size)}.skra-alert-content{flex:1 1 auto;min-inline-size:0;display:flex;flex-direction:column;gap:var(--skra-comp-alert-title-gap)}.skra-alert-title{font-family:var(--skra-sys-typography-role-label-large-font-family);font-size:var(--skra-sys-typography-role-label-large-font-size);font-weight:var(--skra-sys-typography-role-label-large-font-weight);line-height:var(--skra-sys-typography-role-label-large-line-height);letter-spacing:var(--skra-sys-typography-role-label-large-letter-spacing)}.skra-alert-dismiss{flex-shrink:0;display:inline-flex;align-items:center;justify-content:center;inline-size:var(--skra-comp-alert-dismiss-size);block-size:var(--skra-comp-alert-dismiss-size);margin:0;padding:0;border:0;background:transparent;color:inherit;cursor:pointer;border-radius:var(--skra-comp-alert-radius);transition:opacity var(--skra-comp-alert-motion-duration) var(--skra-comp-alert-motion-easing)}@media(hover:hover)and (pointer:fine){.skra-alert-dismiss:hover{opacity:.7}}.skra-alert-dismiss:focus-visible{outline-style:solid;outline-color:var(--skra-comp-alert-focus-ring-color);outline-width:var(--skra-comp-alert-focus-ring-width);outline-offset:2px}.skra-alert-dismiss-glyph{font-size:1.25em;line-height:1}@media(prefers-reduced-motion:reduce){.skra-alert-dismiss{transition:none}}\n"] }]
111
111
  }], propDecorators: { intent: [{ type: i0.Input, args: [{ isSignal: true, alias: "intent", required: false }] }], emphasis: [{ type: i0.Input, args: [{ isSignal: true, alias: "emphasis", required: false }] }], live: [{ type: i0.Input, args: [{ isSignal: true, alias: "live", required: false }] }], dismissible: [{ type: i0.Input, args: [{ isSignal: true, alias: "dismissible", required: false }] }], dismissed: [{ type: i0.Output, args: ["dismissed"] }], iconSlot: [{ type: i0.ContentChild, args: [i0.forwardRef(() => SkraAlertIcon), { isSignal: true }] }], titleSlot: [{ type: i0.ContentChild, args: [i0.forwardRef(() => SkraAlertTitle), { isSignal: true }] }] } });
112
112
 
113
113
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"skra-ui-alert.mjs","sources":["../../../../libs/ui/alert/src/lib/alert.directives.ts","../../../../libs/ui/alert/src/lib/alert/alert.ts","../../../../libs/ui/alert/src/lib/alert/alert.html","../../../../libs/ui/alert/src/skra-ui-alert.ts"],"sourcesContent":["import { Directive } from '@angular/core';\r\n\r\n/**\r\n * Marker directive for the leading icon slot of `<skra-alert>`.\r\n * Detected via `contentChild` (ADR 020 Smart Slots v2.0) to toggle the icon\r\n * wrapper without emitting an empty DOM node. Feedback-local (not the button\r\n * lib's `[skra-start]`) to avoid a cross-lib marker dependency.\r\n */\r\n@Directive({\r\n selector: '[skra-alert-icon]',\r\n standalone: true,\r\n})\r\nexport class SkraAlertIcon {}\r\n\r\n/**\r\n * Marker directive for the OPTIONAL title slot of `<skra-alert>` — a short, bold\r\n * heading rendered above the message. Detected via `contentChild` (ADR 020) to\r\n * toggle the title row. It is styled bold via a typography role but is NOT a\r\n * semantic heading (`<h*>`): an alert title is not part of the document outline,\r\n * and a heading would pollute screen-reader heading navigation (especially for a\r\n * dynamically-injected alert). The live region announces title + body atomically.\r\n */\r\n@Directive({\r\n selector: '[skra-alert-title]',\r\n standalone: true,\r\n})\r\nexport class SkraAlertTitle {}\r\n","import {\r\n ChangeDetectionStrategy,\r\n Component,\r\n ViewEncapsulation,\r\n booleanAttribute,\r\n computed,\r\n contentChild,\r\n input,\r\n output,\r\n} from '@angular/core';\r\nimport { SkraAlertIcon, SkraAlertTitle } from '../alert.directives';\r\n\r\n/**\r\n * AlertIntent — semantic feedback meaning (ADR 035 §3.1, downward subset).\r\n * Excludes the action intents `primary`/`secondary` (meaningless for a status\r\n * message). Closed enum; extension requires an ADR 035 amendment.\r\n */\r\nexport type AlertIntent = 'neutral' | 'info' | 'success' | 'warning' | 'danger';\r\n\r\n/**\r\n * AlertEmphasis — visual loudness within the chosen intent (ADR 035 §3.1, subset).\r\n * `high` = filled banner, `medium` = soft/tinted. `low` deferred.\r\n */\r\nexport type AlertEmphasis = 'high' | 'medium';\r\n\r\n/**\r\n * AlertLive — screen-reader announcement politeness (ADR 0052). Maps to the\r\n * implicit-live ARIA role; politeness is a property of USE (static vs injected),\r\n * NOT of intent.\r\n */\r\nexport type AlertLive = 'off' | 'polite' | 'assertive';\r\n\r\n/**\r\n * `<skra-alert>` — in-content, page/section-level feedback message (Feedback/Status\r\n * family, ADR 0052). Serves BOTH a static notification (`live=\"off\"`, present at load)\r\n * and a dynamically-injected alert (`live=\"polite\"|\"assertive\"`, announced on insertion).\r\n *\r\n * SRP-distinct from `<skra-error>` (form-validation-bound, `SkraFieldContext`, error-only).\r\n *\r\n * Announcement (ADR 0052): the `live` input maps to the implicit-live ARIA role\r\n * (`status`/`alert`) — which carries `aria-live` + `aria-atomic` implicitly. NO explicit\r\n * `aria-live` is set (that would be redundant/contradictory; the `skra-error` pattern).\r\n *\r\n * Dismissal: `dismissible` renders a built-in close control that emits `(dismissed)`.\r\n * Forge does NOT remove itself from the DOM — the consumer owns removal via `@if`\r\n * (agnostic-atom doctrine). The close control's accessible name comes from a projected\r\n * `[skra-alert-close-label]` (sr-only; ADR 033 Path 2) — the \"×\" glyph is `aria-hidden`.\r\n */\r\n@Component({\r\n selector: 'skra-alert',\r\n standalone: true,\r\n imports: [SkraAlertIcon, SkraAlertTitle],\r\n templateUrl: './alert.html',\r\n styleUrl: './alert.scss',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n encapsulation: ViewEncapsulation.Emulated,\r\n host: {\r\n // Variant Surface reflection (ADR 035 §3.5)\r\n '[attr.data-skra-intent]': 'intent()',\r\n '[attr.data-skra-emphasis]': 'emphasis()',\r\n\r\n // Announcement role (ADR 0052) — implicit-live role ONLY; never an explicit aria-live.\r\n '[attr.role]': 'liveRole()',\r\n\r\n // Smart Slots layout reflection (ADR 020 v2.0 — slot-presence, State-Surface-exempt §3.6)\r\n '[attr.data-skra-has-icon]': 'hasIcon() ? \"\" : null',\r\n '[attr.data-skra-has-title]': 'hasTitle() ? \"\" : null',\r\n },\r\n})\r\nexport class SkraAlert {\r\n // --- Variant Surface (ADR 035) ---\r\n readonly intent = input<AlertIntent>('neutral');\r\n readonly emphasis = input<AlertEmphasis>('medium');\r\n\r\n // --- Announcement (ADR 0052) ---\r\n readonly live = input<AlertLive>('off');\r\n\r\n // --- Dismissal ---\r\n readonly dismissible = input(false, { transform: booleanAttribute });\r\n readonly dismissed = output<void>();\r\n\r\n // --- Smart Slots v2.0 (ADR 020) ---\r\n readonly iconSlot = contentChild(SkraAlertIcon);\r\n readonly hasIcon = computed(() => !!this.iconSlot());\r\n\r\n readonly titleSlot = contentChild(SkraAlertTitle);\r\n readonly hasTitle = computed(() => !!this.titleSlot());\r\n\r\n /**\r\n * Map `live` politeness to the implicit-live ARIA role (ADR 0052). The role\r\n * carries `aria-live` + `aria-atomic` implicitly; `off` → no live region.\r\n */\r\n readonly liveRole = computed<'alert' | 'status' | null>(() => {\r\n switch (this.live()) {\r\n case 'assertive':\r\n return 'alert';\r\n case 'polite':\r\n return 'status';\r\n default:\r\n return null;\r\n }\r\n });\r\n\r\n protected onDismiss(): void {\r\n this.dismissed.emit();\r\n }\r\n}\r\n","@if (hasIcon()) {\r\n<span class=\"skra-alert-icon\">\r\n <ng-content select=\"[skra-alert-icon]\"></ng-content>\r\n</span>\r\n}\r\n\r\n<div class=\"skra-alert-content\">\r\n @if (hasTitle()) {\r\n <div class=\"skra-alert-title\">\r\n <ng-content select=\"[skra-alert-title]\"></ng-content>\r\n </div>\r\n }\r\n <div class=\"skra-alert-body\">\r\n <ng-content></ng-content>\r\n </div>\r\n</div>\r\n\r\n@if (dismissible()) {\r\n<button type=\"button\" class=\"skra-alert-dismiss\" (click)=\"onDismiss()\">\r\n <span class=\"skra-alert-dismiss-glyph\" aria-hidden=\"true\">&times;</span>\r\n <ng-content select=\"[skra-alert-close-label]\"></ng-content>\r\n</button>\r\n}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"skra-ui-alert.mjs","sources":["../../../../libs/ui/alert/src/lib/alert.directives.ts","../../../../libs/ui/alert/src/lib/alert/alert.ts","../../../../libs/ui/alert/src/lib/alert/alert.html","../../../../libs/ui/alert/src/skra-ui-alert.ts"],"sourcesContent":["import { Directive } from '@angular/core';\n\n/**\n * Marker directive for the leading icon slot of `<skra-alert>`.\n * Detected via `contentChild` (ADR 020 Smart Slots v2.0) to toggle the icon\n * wrapper without emitting an empty DOM node. Feedback-local (not the button\n * lib's `[skra-start]`) to avoid a cross-lib marker dependency.\n */\n@Directive({\n selector: '[skra-alert-icon]',\n standalone: true,\n})\nexport class SkraAlertIcon {}\n\n/**\n * Marker directive for the OPTIONAL title slot of `<skra-alert>` — a short, bold\n * heading rendered above the message. Detected via `contentChild` (ADR 020) to\n * toggle the title row. It is styled bold via a typography role but is NOT a\n * semantic heading (`<h*>`): an alert title is not part of the document outline,\n * and a heading would pollute screen-reader heading navigation (especially for a\n * dynamically-injected alert). The live region announces title + body atomically.\n */\n@Directive({\n selector: '[skra-alert-title]',\n standalone: true,\n})\nexport class SkraAlertTitle {}\n","import {\n ChangeDetectionStrategy,\n Component,\n ViewEncapsulation,\n booleanAttribute,\n computed,\n contentChild,\n input,\n output,\n} from '@angular/core';\nimport { SkraAlertIcon, SkraAlertTitle } from '../alert.directives';\n\n/**\n * AlertIntent — semantic feedback meaning (ADR 035 §3.1, downward subset).\n * Excludes the action intents `primary`/`secondary` (meaningless for a status\n * message). Closed enum; extension requires an ADR 035 amendment.\n */\nexport type AlertIntent = 'neutral' | 'info' | 'success' | 'warning' | 'danger';\n\n/**\n * AlertEmphasis — visual loudness within the chosen intent (ADR 035 §3.1, subset).\n * `high` = filled banner, `medium` = soft/tinted. `low` deferred.\n */\nexport type AlertEmphasis = 'high' | 'medium';\n\n/**\n * AlertLive — screen-reader announcement politeness (ADR 0052). Maps to the\n * implicit-live ARIA role; politeness is a property of USE (static vs injected),\n * NOT of intent.\n */\nexport type AlertLive = 'off' | 'polite' | 'assertive';\n\n/**\n * `<skra-alert>` — in-content, page/section-level feedback message (Feedback/Status\n * family, ADR 0052). Serves BOTH a static notification (`live=\"off\"`, present at load)\n * and a dynamically-injected alert (`live=\"polite\"|\"assertive\"`, announced on insertion).\n *\n * SRP-distinct from `<skra-error>` (form-validation-bound, `SkraFieldContext`, error-only).\n *\n * Announcement (ADR 0052): the `live` input maps to the implicit-live ARIA role\n * (`status`/`alert`) — which carries `aria-live` + `aria-atomic` implicitly. NO explicit\n * `aria-live` is set (that would be redundant/contradictory; the `skra-error` pattern).\n *\n * Dismissal: `dismissible` renders a built-in close control that emits `(dismissed)`.\n * Forge does NOT remove itself from the DOM — the consumer owns removal via `@if`\n * (agnostic-atom doctrine). The close control's accessible name comes from a projected\n * `[skra-alert-close-label]` (sr-only; ADR 033 Path 2) — the \"×\" glyph is `aria-hidden`.\n */\n@Component({\n selector: 'skra-alert',\n standalone: true,\n imports: [SkraAlertIcon, SkraAlertTitle],\n templateUrl: './alert.html',\n styleUrl: './alert.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.Emulated,\n host: {\n // Variant Surface reflection (ADR 035 §3.5)\n '[attr.data-skra-intent]': 'intent()',\n '[attr.data-skra-emphasis]': 'emphasis()',\n\n // Announcement role (ADR 0052) — implicit-live role ONLY; never an explicit aria-live.\n '[attr.role]': 'liveRole()',\n\n // Smart Slots layout reflection (ADR 020 v2.0 — slot-presence, State-Surface-exempt §3.6)\n '[attr.data-skra-has-icon]': 'hasIcon() ? \"\" : null',\n '[attr.data-skra-has-title]': 'hasTitle() ? \"\" : null',\n },\n})\nexport class SkraAlert {\n // --- Variant Surface (ADR 035) ---\n readonly intent = input<AlertIntent>('neutral');\n readonly emphasis = input<AlertEmphasis>('medium');\n\n // --- Announcement (ADR 0052) ---\n readonly live = input<AlertLive>('off');\n\n // --- Dismissal ---\n readonly dismissible = input(false, { transform: booleanAttribute });\n readonly dismissed = output<void>();\n\n // --- Smart Slots v2.0 (ADR 020) ---\n readonly iconSlot = contentChild(SkraAlertIcon);\n readonly hasIcon = computed(() => !!this.iconSlot());\n\n readonly titleSlot = contentChild(SkraAlertTitle);\n readonly hasTitle = computed(() => !!this.titleSlot());\n\n /**\n * Map `live` politeness to the implicit-live ARIA role (ADR 0052). The role\n * carries `aria-live` + `aria-atomic` implicitly; `off` → no live region.\n */\n readonly liveRole = computed<'alert' | 'status' | null>(() => {\n switch (this.live()) {\n case 'assertive':\n return 'alert';\n case 'polite':\n return 'status';\n default:\n return null;\n }\n });\n\n protected onDismiss(): void {\n this.dismissed.emit();\n }\n}\n","@if (hasIcon()) {\r\n<span class=\"skra-alert-icon\">\r\n <ng-content select=\"[skra-alert-icon]\"></ng-content>\r\n</span>\r\n}\r\n\r\n<div class=\"skra-alert-content\">\r\n @if (hasTitle()) {\r\n <div class=\"skra-alert-title\">\r\n <ng-content select=\"[skra-alert-title]\"></ng-content>\r\n </div>\r\n }\r\n <div class=\"skra-alert-body\">\r\n <ng-content></ng-content>\r\n </div>\r\n</div>\r\n\r\n@if (dismissible()) {\r\n<button type=\"button\" class=\"skra-alert-dismiss\" (click)=\"onDismiss()\">\r\n <span class=\"skra-alert-dismiss-glyph\" aria-hidden=\"true\">&times;</span>\r\n <ng-content select=\"[skra-alert-close-label]\"></ng-content>\r\n</button>\r\n}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"skra-ui-avatar.mjs","sources":["../../../../libs/ui/avatar/src/lib/avatar/avatar.ts","../../../../libs/ui/avatar/src/lib/avatar/avatar.html","../../../../libs/ui/avatar/src/skra-ui-avatar.ts"],"sourcesContent":["import {\r\n ChangeDetectionStrategy,\r\n Component,\r\n ViewEncapsulation,\r\n computed,\r\n input,\r\n signal,\r\n} from '@angular/core';\r\n\r\n/**\r\n * AvatarSize — the Variant Surface Size axis (ADR 035 §3.1, downward subset `sm|md|lg`).\r\n * `xs`/`xl` are reserved (ADR 035 §3.2) and NOT in MVP — adding them later is purely additive\r\n * (new enum values + token rows, zero migration). Closed enum; extension requires an ADR 035\r\n * amendment. See `adr/specs/component-avatar-spec.md` OQ 1.\r\n */\r\nexport type AvatarSize = 'sm' | 'md' | 'lg';\r\n\r\n/**\r\n * `<skra-avatar>` — a compact graphical representation of a person/entity: a photo with a\r\n * graceful fallback to projected **initials** or an **icon** when the image is absent or fails\r\n * to load. First resident of `libs/ui/data-display` (the identity/media-display family). See\r\n * `adr/specs/component-avatar-spec.md`.\r\n *\r\n * **Element, not a decorated native (ADR 012):** there is no native `<avatar>`, and a bare\r\n * `<img>` has nowhere to render the text/icon fallback — so Forge owns a container that\r\n * conditionally renders an internal `<img>` OR the projected fallback. NOT a Web Component\r\n * (ADR 000).\r\n *\r\n * **Image + fallback (the defining value-add):** Forge owns the internal `<img>` (rendered from\r\n * the `src` *data* input — value not look, ADR 037, agnostic) so it can observe `(error)`/`(load)`\r\n * and swap to the projected fallback. The swap is internal presentational logic, NOT an ADR 028\r\n * `loading` operation (no `aria-busy`, no `[skraLoadingIndicator]`). SSR-safe: pure signals +\r\n * template; on the server the `<img>` renders, the client swaps on error.\r\n *\r\n * **Non-interactive (Badge precedent):** no focusable node, no role, no keyboard, no outputs →\r\n * State Surface all-N/A. A clickable avatar is `button[skraButton]`/`a[skraLink]` wrapping\r\n * `<skra-avatar>` (composition), not a variant.\r\n *\r\n * **Accessible name (ADR 033 Path 3 — graphic host, the SkraIcon/ADR 034 §3.4 contract):** the\r\n * inner content is **always decorative** — the internal `<img>` is `alt=\"\"` and the fallback\r\n * wrapper is `aria-hidden` — and the host carries **NO default ARIA**. The consumer declares\r\n * semantics explicitly, exactly as for `<skra-icon>`:\r\n * - decorative (Mode A, the ~90% case — avatar beside a visible name) → `aria-hidden=\"true\"`;\r\n * - meaningful (Mode B — standalone) → **`role=\"img\"` + `aria-label`/`aria-labelledby` TOGETHER**.\r\n * `role=\"img\"` is REQUIRED: `aria-label` on the roleless custom-element host is ARIA-prohibited\r\n * (axe `aria-prohibited-attr`) and conveys no name. Forge does NOT auto-set the role (parity\r\n * with SkraIcon — host owns no default ARIA).\r\n * NO `ariaLabel` input (ADR 033 boundary #8), NO `name`/`alt` input (no initials derivation —\r\n * agnostic; the name survives image failure by living on the host, not on the swapped-out img).\r\n *\r\n * **Look is skin-owned:** circle-vs-square is the `radius` comp token (a skin with\r\n * `sys.radius.full: 0` — e.g. brutal — ships square avatars automatically). NO `shape`/`color`/\r\n * `variant` look-inputs (skin philosophy). NO `intent`/`emphasis` (a neutral identity graphic —\r\n * status colour is the sibling StatusDot's job, SRP).\r\n */\r\n@Component({\r\n selector: 'skra-avatar',\r\n standalone: true,\r\n templateUrl: './avatar.html',\r\n styleUrl: './avatar.scss',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n encapsulation: ViewEncapsulation.Emulated,\r\n host: {\r\n // Variant Surface reflection (ADR 035 §3.5; ADR 021 — never [style.--var])\r\n '[attr.data-skra-size]': 'size()',\r\n // Presentational state for SCSS (image painted vs placeholder/fallback). Not an ADR 027\r\n // State — it is presentational, like a Smart-Slot flag (§3.6 exempt).\r\n '[attr.data-skra-state]': 'showImage() ? \"image\" : \"fallback\"',\r\n },\r\n})\r\nexport class SkraAvatar {\r\n /**\r\n * Image URL — a data input (ADR 037; agnostic). Absent or failed-to-load → the projected\r\n * fallback (initials / icon) shows.\r\n */\r\n readonly src = input<string>();\r\n\r\n /** Variant Surface Size axis (ADR 035) — the square box dimension + initials scale. */\r\n readonly size = input<AvatarSize>('md');\r\n\r\n /**\r\n * The `src` value that failed to load, if any. Keyed by URL (not a boolean) so that changing\r\n * `src` to a new URL re-attempts the image instead of staying on the fallback.\r\n */\r\n private readonly failedSrc = signal<string | null>(null);\r\n\r\n /** Whether the internal `<img>` should render (a `src` is set and has not failed). */\r\n readonly showImage = computed(() => {\r\n const current = this.src();\r\n return !!current && this.failedSrc() !== current;\r\n });\r\n\r\n /** The `<img>` failed to load → fall back to the projected content. */\r\n protected onImageError(): void {\r\n this.failedSrc.set(this.src() ?? null);\r\n }\r\n}\r\n","@if (showImage()) {\r\n<!-- alt=\"\" — the image is always decorative; the accessible name lives on the host\r\n (consumer native aria-label / adjacent text). ADR 033 Path 3. -->\r\n<img class=\"skra-avatar-image\" [src]=\"src()\" alt=\"\" (error)=\"onImageError()\" />\r\n} @else {\r\n<!-- Fallback (initials / icon) is a decorative visual stand-in — aria-hidden so it never\r\n competes as a visible accessible name (the name is host-level). ADR 034. -->\r\n<span class=\"skra-avatar-fallback\" aria-hidden=\"true\">\r\n <ng-content></ng-content>\r\n</span>\r\n}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;;AAiBA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAqCG;MAgBU,UAAU,CAAA;AACrB;;;AAGG;AACM,IAAA,GAAG,GAAG,KAAK;uFAAU;;IAGrB,IAAI,GAAG,KAAK,CAAa,IAAI;6EAAC;AAEvC;;;AAGG;IACc,SAAS,GAAG,MAAM,CAAgB,IAAI;kFAAC;;AAG/C,IAAA,SAAS,GAAG,QAAQ,CAAC,MAAK;AACjC,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE;QAC1B,OAAO,CAAC,CAAC,OAAO,IAAI,IAAI,CAAC,SAAS,EAAE,KAAK,OAAO;IAClD,CAAC;kFAAC;;IAGQ,YAAY,GAAA;AACpB,QAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,IAAI,CAAC;IACxC;uGAzBW,UAAU,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAV,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAU,ubCtEvB,6kBAWA,EAAA,MAAA,EAAA,CAAA,ihDAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;2FD2Da,UAAU,EAAA,UAAA,EAAA,CAAA;kBAftB,SAAS;+BACE,aAAa,EAAA,UAAA,EACX,IAAI,EAAA,eAAA,EAGC,uBAAuB,CAAC,MAAM,EAAA,aAAA,EAChC,iBAAiB,CAAC,QAAQ,EAAA,IAAA,EACnC;;AAEJ,wBAAA,uBAAuB,EAAE,QAAQ;;;AAGjC,wBAAA,wBAAwB,EAAE,oCAAoC;AAC/D,qBAAA,EAAA,QAAA,EAAA,6kBAAA,EAAA,MAAA,EAAA,CAAA,ihDAAA,CAAA,EAAA;;;AEpEH;;AAEG;;;;"}
1
+ {"version":3,"file":"skra-ui-avatar.mjs","sources":["../../../../libs/ui/avatar/src/lib/avatar/avatar.ts","../../../../libs/ui/avatar/src/lib/avatar/avatar.html","../../../../libs/ui/avatar/src/skra-ui-avatar.ts"],"sourcesContent":["import {\n ChangeDetectionStrategy,\n Component,\n ViewEncapsulation,\n computed,\n input,\n signal,\n} from '@angular/core';\n\n/**\n * AvatarSize — the Variant Surface Size axis (ADR 035 §3.1, downward subset `sm|md|lg`).\n * `xs`/`xl` are reserved (ADR 035 §3.2) and NOT in MVP — adding them later is purely additive\n * (new enum values + token rows, zero migration). Closed enum; extension requires an ADR 035\n * amendment. See `adr/specs/component-avatar-spec.md` OQ 1.\n */\nexport type AvatarSize = 'sm' | 'md' | 'lg';\n\n/**\n * `<skra-avatar>` — a compact graphical representation of a person/entity: a photo with a\n * graceful fallback to projected **initials** or an **icon** when the image is absent or fails\n * to load. First resident of `libs/ui/data-display` (the identity/media-display family). See\n * `adr/specs/component-avatar-spec.md`.\n *\n * **Element, not a decorated native (ADR 012):** there is no native `<avatar>`, and a bare\n * `<img>` has nowhere to render the text/icon fallback — so Forge owns a container that\n * conditionally renders an internal `<img>` OR the projected fallback. NOT a Web Component\n * (ADR 000).\n *\n * **Image + fallback (the defining value-add):** Forge owns the internal `<img>` (rendered from\n * the `src` *data* input — value not look, ADR 037, agnostic) so it can observe `(error)`/`(load)`\n * and swap to the projected fallback. The swap is internal presentational logic, NOT an ADR 028\n * `loading` operation (no `aria-busy`, no `[skraLoadingIndicator]`). SSR-safe: pure signals +\n * template; on the server the `<img>` renders, the client swaps on error.\n *\n * **Non-interactive (Badge precedent):** no focusable node, no role, no keyboard, no outputs →\n * State Surface all-N/A. A clickable avatar is `button[skraButton]`/`a[skraLink]` wrapping\n * `<skra-avatar>` (composition), not a variant.\n *\n * **Accessible name (ADR 033 Path 3 — graphic host, the SkraIcon/ADR 034 §3.4 contract):** the\n * inner content is **always decorative** — the internal `<img>` is `alt=\"\"` and the fallback\n * wrapper is `aria-hidden` — and the host carries **NO default ARIA**. The consumer declares\n * semantics explicitly, exactly as for `<skra-icon>`:\n * - decorative (Mode A, the ~90% case — avatar beside a visible name) → `aria-hidden=\"true\"`;\n * - meaningful (Mode B — standalone) → **`role=\"img\"` + `aria-label`/`aria-labelledby` TOGETHER**.\n * `role=\"img\"` is REQUIRED: `aria-label` on the roleless custom-element host is ARIA-prohibited\n * (axe `aria-prohibited-attr`) and conveys no name. Forge does NOT auto-set the role (parity\n * with SkraIcon — host owns no default ARIA).\n * NO `ariaLabel` input (ADR 033 boundary #8), NO `name`/`alt` input (no initials derivation —\n * agnostic; the name survives image failure by living on the host, not on the swapped-out img).\n *\n * **Look is skin-owned:** circle-vs-square is the `radius` comp token (a skin with\n * `sys.radius.full: 0` — e.g. brutal — ships square avatars automatically). NO `shape`/`color`/\n * `variant` look-inputs (skin philosophy). NO `intent`/`emphasis` (a neutral identity graphic —\n * status colour is the sibling StatusDot's job, SRP).\n */\n@Component({\n selector: 'skra-avatar',\n standalone: true,\n templateUrl: './avatar.html',\n styleUrl: './avatar.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.Emulated,\n host: {\n // Variant Surface reflection (ADR 035 §3.5; ADR 021 — never [style.--var])\n '[attr.data-skra-size]': 'size()',\n // Presentational state for SCSS (image painted vs placeholder/fallback). Not an ADR 027\n // State — it is presentational, like a Smart-Slot flag (§3.6 exempt).\n '[attr.data-skra-state]': 'showImage() ? \"image\" : \"fallback\"',\n },\n})\nexport class SkraAvatar {\n /**\n * Image URL — a data input (ADR 037; agnostic). Absent or failed-to-load → the projected\n * fallback (initials / icon) shows.\n */\n readonly src = input<string>();\n\n /** Variant Surface Size axis (ADR 035) — the square box dimension + initials scale. */\n readonly size = input<AvatarSize>('md');\n\n /**\n * The `src` value that failed to load, if any. Keyed by URL (not a boolean) so that changing\n * `src` to a new URL re-attempts the image instead of staying on the fallback.\n */\n private readonly failedSrc = signal<string | null>(null);\n\n /** Whether the internal `<img>` should render (a `src` is set and has not failed). */\n readonly showImage = computed(() => {\n const current = this.src();\n return !!current && this.failedSrc() !== current;\n });\n\n /** The `<img>` failed to load → fall back to the projected content. */\n protected onImageError(): void {\n this.failedSrc.set(this.src() ?? null);\n }\n}\n","@if (showImage()) {\r\n<!-- alt=\"\" — the image is always decorative; the accessible name lives on the host\r\n (consumer native aria-label / adjacent text). ADR 033 Path 3. -->\r\n<img class=\"skra-avatar-image\" [src]=\"src()\" alt=\"\" (error)=\"onImageError()\" />\r\n} @else {\r\n<!-- Fallback (initials / icon) is a decorative visual stand-in — aria-hidden so it never\r\n competes as a visible accessible name (the name is host-level). ADR 034. -->\r\n<span class=\"skra-avatar-fallback\" aria-hidden=\"true\">\r\n <ng-content></ng-content>\r\n</span>\r\n}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;;AAiBA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAqCG;MAgBU,UAAU,CAAA;AACrB;;;AAGG;AACM,IAAA,GAAG,GAAG,KAAK;uFAAU;;IAGrB,IAAI,GAAG,KAAK,CAAa,IAAI;6EAAC;AAEvC;;;AAGG;IACc,SAAS,GAAG,MAAM,CAAgB,IAAI;kFAAC;;AAG/C,IAAA,SAAS,GAAG,QAAQ,CAAC,MAAK;AACjC,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE;QAC1B,OAAO,CAAC,CAAC,OAAO,IAAI,IAAI,CAAC,SAAS,EAAE,KAAK,OAAO;IAClD,CAAC;kFAAC;;IAGQ,YAAY,GAAA;AACpB,QAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,IAAI,CAAC;IACxC;uGAzBW,UAAU,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAV,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAU,ubCtEvB,6kBAWA,EAAA,MAAA,EAAA,CAAA,ihDAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;2FD2Da,UAAU,EAAA,UAAA,EAAA,CAAA;kBAftB,SAAS;+BACE,aAAa,EAAA,UAAA,EACX,IAAI,EAAA,eAAA,EAGC,uBAAuB,CAAC,MAAM,EAAA,aAAA,EAChC,iBAAiB,CAAC,QAAQ,EAAA,IAAA,EACnC;;AAEJ,wBAAA,uBAAuB,EAAE,QAAQ;;;AAGjC,wBAAA,wBAAwB,EAAE,oCAAoC;AAC/D,qBAAA,EAAA,QAAA,EAAA,6kBAAA,EAAA,MAAA,EAAA,CAAA,ihDAAA,CAAA,EAAA;;;AEpEH;;AAEG;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"skra-ui-badge.mjs","sources":["../../../../libs/ui/badge/src/lib/badge.directives.ts","../../../../libs/ui/badge/src/lib/badge/badge.ts","../../../../libs/ui/badge/src/lib/badge/badge.html","../../../../libs/ui/badge/src/skra-ui-badge.ts"],"sourcesContent":["import { Directive } from '@angular/core';\r\n\r\n/**\r\n * Marker directive for the OPTIONAL leading icon/dot slot of `<skra-badge>`.\r\n * Detected via `contentChild` (ADR 020 Smart Slots v2.0) to toggle the icon\r\n * wrapper without emitting an empty DOM node. Feedback-local (not the button\r\n * lib's `[skra-start]`) to avoid a cross-lib marker dependency, mirroring\r\n * `[skra-alert-icon]`.\r\n *\r\n * The icon is decorative — the consumer sets `aria-hidden` on its content (ADR\r\n * 034). The badge's visible text label still carries the meaning (WCAG 1.4.1):\r\n * a leading dot enables the `● Active` pattern but never substitutes for the word.\r\n */\r\n@Directive({\r\n selector: '[skra-badge-icon]',\r\n standalone: true,\r\n})\r\nexport class SkraBadgeIcon {}\r\n","import {\r\n ChangeDetectionStrategy,\r\n Component,\r\n ViewEncapsulation,\r\n computed,\r\n contentChild,\r\n input,\r\n} from '@angular/core';\r\nimport { SkraBadgeIcon } from '../badge.directives';\r\n\r\n/**\r\n * BadgeIntent — semantic feedback meaning (ADR 035 §3.1, downward subset).\r\n * Excludes the action intents `primary`/`secondary` (meaningless for a status\r\n * indicator). Closed enum; extension requires an ADR 035 amendment.\r\n */\r\nexport type BadgeIntent = 'neutral' | 'info' | 'success' | 'warning' | 'danger';\r\n\r\n/**\r\n * BadgeEmphasis — visual loudness within the chosen intent (ADR 035 §3.1, subset).\r\n * `high` = filled chip, `medium` = soft/tinted lozenge. `low` deferred.\r\n */\r\nexport type BadgeEmphasis = 'high' | 'medium';\r\n\r\n/**\r\n * BadgeLive — screen-reader announcement politeness (ADR 0052). Maps to the\r\n * implicit-live ARIA role; politeness is a property of USE (static status vs a\r\n * live notification count), NOT of intent. Default `off` (the static-status case).\r\n */\r\nexport type BadgeLive = 'off' | 'polite' | 'assertive';\r\n\r\n/**\r\n * `<skra-badge>` — a small, inline, non-interactive status indicator (Feedback/Status\r\n * family, ADR 0052). Carries semantic importance (intent) as a short label or count —\r\n * e.g. a status lozenge (`Active`/`Failed`) in a table, or a notification count.\r\n *\r\n * SRP-distinct from `<skra-counter>` (form value-bound character counter, `libs/ui/forms`)\r\n * and from the closable `Tag/Chip` (interactive/dismissible — a different SRP, Wave 2).\r\n *\r\n * Non-interactive: no focusable node, no widget role, no keyboard, no outputs. The host is\r\n * a presentational surface; severity is a Variant Surface axis (ADR 035), not a State (ADR 027).\r\n *\r\n * Announcement (ADR 0052): the `live` input maps to the implicit-live ARIA role\r\n * (`status`/`alert`) — which carries `aria-live` + `aria-atomic` implicitly. NO explicit\r\n * `aria-live` is set (that would be redundant; the `skra-alert`/`skra-error` pattern).\r\n * When `live ≠ off`, the content must be self-describing (`3 unread`, not a bare `3`) — the\r\n * role announces the whole badge atomically.\r\n *\r\n * Positioning (ADR 022): the badge owns no outer position. Overlaying it on a host's corner\r\n * (a notification badge) is a consumer composition, not an atom responsibility.\r\n */\r\n@Component({\r\n selector: 'skra-badge',\r\n standalone: true,\r\n imports: [SkraBadgeIcon],\r\n templateUrl: './badge.html',\r\n styleUrl: './badge.scss',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n encapsulation: ViewEncapsulation.Emulated,\r\n host: {\r\n // Variant Surface reflection (ADR 035 §3.5; ADR 021 — never [style.--var])\r\n '[attr.data-skra-intent]': 'intent()',\r\n '[attr.data-skra-emphasis]': 'emphasis()',\r\n\r\n // Announcement role (ADR 0052) — implicit-live role ONLY; never an explicit aria-live.\r\n '[attr.role]': 'liveRole()',\r\n\r\n // Smart Slot layout reflection (ADR 020 v2.0 — slot-presence, State-Surface-exempt §3.6)\r\n '[attr.data-skra-has-icon]': 'hasIcon() ? \"\" : null',\r\n },\r\n})\r\nexport class SkraBadge {\r\n // --- Variant Surface (ADR 035) ---\r\n readonly intent = input<BadgeIntent>('neutral');\r\n readonly emphasis = input<BadgeEmphasis>('medium');\r\n\r\n // --- Announcement (ADR 0052) ---\r\n readonly live = input<BadgeLive>('off');\r\n\r\n // --- Smart Slots v2.0 (ADR 020) ---\r\n readonly iconSlot = contentChild(SkraBadgeIcon);\r\n readonly hasIcon = computed(() => !!this.iconSlot());\r\n\r\n /**\r\n * Map `live` politeness to the implicit-live ARIA role (ADR 0052). The role\r\n * carries `aria-live` + `aria-atomic` implicitly; `off` → no live region.\r\n */\r\n readonly liveRole = computed<'alert' | 'status' | null>(() => {\r\n switch (this.live()) {\r\n case 'assertive':\r\n return 'alert';\r\n case 'polite':\r\n return 'status';\r\n default:\r\n return null;\r\n }\r\n });\r\n}\r\n","@if (hasIcon()) {\r\n<span class=\"skra-badge-icon\">\r\n <ng-content select=\"[skra-badge-icon]\"></ng-content>\r\n</span>\r\n}\r\n\r\n<ng-content></ng-content>\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"skra-ui-badge.mjs","sources":["../../../../libs/ui/badge/src/lib/badge.directives.ts","../../../../libs/ui/badge/src/lib/badge/badge.ts","../../../../libs/ui/badge/src/lib/badge/badge.html","../../../../libs/ui/badge/src/skra-ui-badge.ts"],"sourcesContent":["import { Directive } from '@angular/core';\n\n/**\n * Marker directive for the OPTIONAL leading icon/dot slot of `<skra-badge>`.\n * Detected via `contentChild` (ADR 020 Smart Slots v2.0) to toggle the icon\n * wrapper without emitting an empty DOM node. Feedback-local (not the button\n * lib's `[skra-start]`) to avoid a cross-lib marker dependency, mirroring\n * `[skra-alert-icon]`.\n *\n * The icon is decorative — the consumer sets `aria-hidden` on its content (ADR\n * 034). The badge's visible text label still carries the meaning (WCAG 1.4.1):\n * a leading dot enables the `● Active` pattern but never substitutes for the word.\n */\n@Directive({\n selector: '[skra-badge-icon]',\n standalone: true,\n})\nexport class SkraBadgeIcon {}\n","import {\n ChangeDetectionStrategy,\n Component,\n ViewEncapsulation,\n computed,\n contentChild,\n input,\n} from '@angular/core';\nimport { SkraBadgeIcon } from '../badge.directives';\n\n/**\n * BadgeIntent — semantic feedback meaning (ADR 035 §3.1, downward subset).\n * Excludes the action intents `primary`/`secondary` (meaningless for a status\n * indicator). Closed enum; extension requires an ADR 035 amendment.\n */\nexport type BadgeIntent = 'neutral' | 'info' | 'success' | 'warning' | 'danger';\n\n/**\n * BadgeEmphasis — visual loudness within the chosen intent (ADR 035 §3.1, subset).\n * `high` = filled chip, `medium` = soft/tinted lozenge. `low` deferred.\n */\nexport type BadgeEmphasis = 'high' | 'medium';\n\n/**\n * BadgeLive — screen-reader announcement politeness (ADR 0052). Maps to the\n * implicit-live ARIA role; politeness is a property of USE (static status vs a\n * live notification count), NOT of intent. Default `off` (the static-status case).\n */\nexport type BadgeLive = 'off' | 'polite' | 'assertive';\n\n/**\n * `<skra-badge>` — a small, inline, non-interactive status indicator (Feedback/Status\n * family, ADR 0052). Carries semantic importance (intent) as a short label or count —\n * e.g. a status lozenge (`Active`/`Failed`) in a table, or a notification count.\n *\n * SRP-distinct from `<skra-counter>` (form value-bound character counter, `libs/ui/forms`)\n * and from the closable `Tag/Chip` (interactive/dismissible — a different SRP, Wave 2).\n *\n * Non-interactive: no focusable node, no widget role, no keyboard, no outputs. The host is\n * a presentational surface; severity is a Variant Surface axis (ADR 035), not a State (ADR 027).\n *\n * Announcement (ADR 0052): the `live` input maps to the implicit-live ARIA role\n * (`status`/`alert`) — which carries `aria-live` + `aria-atomic` implicitly. NO explicit\n * `aria-live` is set (that would be redundant; the `skra-alert`/`skra-error` pattern).\n * When `live ≠ off`, the content must be self-describing (`3 unread`, not a bare `3`) — the\n * role announces the whole badge atomically.\n *\n * Positioning (ADR 022): the badge owns no outer position. Overlaying it on a host's corner\n * (a notification badge) is a consumer composition, not an atom responsibility.\n */\n@Component({\n selector: 'skra-badge',\n standalone: true,\n imports: [SkraBadgeIcon],\n templateUrl: './badge.html',\n styleUrl: './badge.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.Emulated,\n host: {\n // Variant Surface reflection (ADR 035 §3.5; ADR 021 — never [style.--var])\n '[attr.data-skra-intent]': 'intent()',\n '[attr.data-skra-emphasis]': 'emphasis()',\n\n // Announcement role (ADR 0052) — implicit-live role ONLY; never an explicit aria-live.\n '[attr.role]': 'liveRole()',\n\n // Smart Slot layout reflection (ADR 020 v2.0 — slot-presence, State-Surface-exempt §3.6)\n '[attr.data-skra-has-icon]': 'hasIcon() ? \"\" : null',\n },\n})\nexport class SkraBadge {\n // --- Variant Surface (ADR 035) ---\n readonly intent = input<BadgeIntent>('neutral');\n readonly emphasis = input<BadgeEmphasis>('medium');\n\n // --- Announcement (ADR 0052) ---\n readonly live = input<BadgeLive>('off');\n\n // --- Smart Slots v2.0 (ADR 020) ---\n readonly iconSlot = contentChild(SkraBadgeIcon);\n readonly hasIcon = computed(() => !!this.iconSlot());\n\n /**\n * Map `live` politeness to the implicit-live ARIA role (ADR 0052). The role\n * carries `aria-live` + `aria-atomic` implicitly; `off` → no live region.\n */\n readonly liveRole = computed<'alert' | 'status' | null>(() => {\n switch (this.live()) {\n case 'assertive':\n return 'alert';\n case 'polite':\n return 'status';\n default:\n return null;\n }\n });\n}\n","@if (hasIcon()) {\r\n<span class=\"skra-badge-icon\">\r\n <ng-content select=\"[skra-badge-icon]\"></ng-content>\r\n</span>\r\n}\r\n\r\n<ng-content></ng-content>\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
@@ -50,7 +50,7 @@ class SkraButton {
50
50
  hasLoadingIndicator = computed(() => !!this.loadingIndicatorSlot(), /* @ts-ignore */
51
51
  ...(ngDevMode ? [{ debugName: "hasLoadingIndicator" }] : /* istanbul ignore next */ []));
52
52
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.1", ngImport: i0, type: SkraButton, deps: [], target: i0.ɵɵFactoryTarget.Component });
53
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.1.1", type: SkraButton, isStandalone: true, selector: "button[skraButton]", inputs: { intent: { classPropertyName: "intent", publicName: "intent", isSignal: true, isRequired: false, transformFunction: null }, emphasis: { classPropertyName: "emphasis", publicName: "emphasis", isSignal: true, isRequired: false, transformFunction: null }, size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null }, loading: { classPropertyName: "loading", publicName: "loading", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "attr.data-skra-intent": "intent()", "attr.data-skra-emphasis": "emphasis()", "attr.data-skra-size": "size()", "attr.data-skra-loading": "loading() ? \"\" : null", "attr.aria-busy": "loading() ? \"true\" : null", "attr.data-skra-has-start": "hasStart() ? \"\" : null", "attr.data-skra-has-end": "hasEnd() ? \"\" : null" } }, queries: [{ propertyName: "startSlot", first: true, predicate: SkraButtonStart, descendants: true, isSignal: true }, { propertyName: "endSlot", first: true, predicate: SkraButtonEnd, descendants: true, isSignal: true }, { propertyName: "loadingIndicatorSlot", first: true, predicate: SkraLoadingIndicator, descendants: true, isSignal: true }], ngImport: i0, template: "@if (hasStart()) {\r\n<span class=\"skra-button-slot-wrapper\">\r\n <ng-content select=\"[skra-start]\"></ng-content>\r\n</span>\r\n}\r\n\r\n<span class=\"skra-button-label-wrapper\">\r\n <ng-content></ng-content>\r\n</span>\r\n\r\n@if (hasEnd()) {\r\n<span class=\"skra-button-slot-wrapper\">\r\n <ng-content select=\"[skra-end]\"></ng-content>\r\n</span>\r\n} @if (loading()) {\r\n<span class=\"skra-button-loading-indicator\" data-skra-loading-indicator>\r\n @if (hasLoadingIndicator()) {\r\n <ng-content select=\"[skraLoadingIndicator]\"></ng-content>\r\n } @else {\r\n <span data-skra-loading-indicator-fallback aria-hidden=\"true\"></span>\r\n }\r\n</span>\r\n}\r\n", styles: ["@charset \"UTF-8\";:host{display:inline-flex;align-items:center;justify-content:center;box-sizing:border-box;margin:0;cursor:pointer;font-family:var(--skra-comp-button-font-family);font-size:var(--skra-comp-button-font-size);font-weight:var(--skra-comp-button-font-weight);line-height:var(--skra-comp-button-line-height);letter-spacing:var(--skra-comp-button-letter-spacing);min-block-size:var(--skra-comp-button-min-block-size);background:var(--skra-comp-button-background);color:var(--skra-comp-button-foreground);border-color:var(--skra-comp-button-border-color);border-width:var(--skra-comp-button-border-width);border-style:var(--skra-comp-button-border-style);border-radius:var(--skra-comp-button-radius);padding-block:var(--skra-comp-button-padding-block);padding-inline:var(--skra-comp-button-padding-inline);box-shadow:var(--skra-comp-button-shadow);transition:background var(--skra-comp-button-motion-duration) var(--skra-comp-button-motion-easing),color var(--skra-comp-button-motion-duration) var(--skra-comp-button-motion-easing),border-color var(--skra-comp-button-motion-duration) var(--skra-comp-button-motion-easing),box-shadow var(--skra-comp-button-motion-duration) var(--skra-comp-button-motion-easing)}:host[data-skra-has-start],:host[data-skra-has-end]{gap:var(--skra-comp-button-icon-gap)}:host:focus-visible{outline-style:solid;outline-color:var(--skra-comp-button-focus-ring-color);outline-width:var(--skra-comp-button-focus-ring-width);outline-offset:2px}:host:hover:not(:disabled){box-shadow:var(--skra-comp-button-shadow-hover)}:host([data-skra-size=sm]){--skra-comp-button-padding-block: var( --skra-comp-button-size-sm-padding-block );--skra-comp-button-padding-inline: var( --skra-comp-button-size-sm-padding-inline );--skra-comp-button-min-block-size: var( --skra-comp-button-size-sm-min-block-size );--skra-comp-button-font-family: var( --skra-sys-typography-role-label-small-font-family );--skra-comp-button-font-size: var( --skra-sys-typography-role-label-small-font-size );--skra-comp-button-font-weight: var( --skra-sys-typography-role-label-small-font-weight );--skra-comp-button-line-height: var( --skra-sys-typography-role-label-small-line-height );--skra-comp-button-letter-spacing: var( --skra-sys-typography-role-label-small-letter-spacing )}:host([data-skra-size=md]){--skra-comp-button-padding-block: var( --skra-comp-button-size-md-padding-block );--skra-comp-button-padding-inline: var( --skra-comp-button-size-md-padding-inline );--skra-comp-button-min-block-size: var( --skra-comp-button-size-md-min-block-size );--skra-comp-button-font-family: var( --skra-sys-typography-role-label-medium-font-family );--skra-comp-button-font-size: var( --skra-sys-typography-role-label-medium-font-size );--skra-comp-button-font-weight: var( --skra-sys-typography-role-label-medium-font-weight );--skra-comp-button-line-height: var( --skra-sys-typography-role-label-medium-line-height );--skra-comp-button-letter-spacing: var( --skra-sys-typography-role-label-medium-letter-spacing )}:host([data-skra-size=lg]){--skra-comp-button-padding-block: var( --skra-comp-button-size-lg-padding-block );--skra-comp-button-padding-inline: var( --skra-comp-button-size-lg-padding-inline );--skra-comp-button-min-block-size: var( --skra-comp-button-size-lg-min-block-size );--skra-comp-button-font-family: var( --skra-sys-typography-role-label-large-font-family );--skra-comp-button-font-size: var( --skra-sys-typography-role-label-large-font-size );--skra-comp-button-font-weight: var( --skra-sys-typography-role-label-large-font-weight );--skra-comp-button-line-height: var( --skra-sys-typography-role-label-large-line-height );--skra-comp-button-letter-spacing: var( --skra-sys-typography-role-label-large-letter-spacing )}:host([data-skra-emphasis=high]){--skra-comp-button-border-width: 0}:host([data-skra-emphasis=medium]){--skra-comp-button-border-width: .0625rem}:host([data-skra-emphasis=low]){--skra-comp-button-border-width: 0}:host([data-skra-intent=neutral][data-skra-emphasis=high]){--skra-comp-button-background: var( --skra-comp-button-background-neutral-high, var(--skra-sys-color-neutral-base) );--skra-comp-button-foreground: var( --skra-comp-button-foreground-neutral-high, var(--skra-sys-color-neutral-contrast) );--skra-comp-button-border-color: var( --skra-comp-button-border-color-neutral-high, transparent )}:host([data-skra-intent=neutral][data-skra-emphasis=high]):hover:not(:disabled){--skra-comp-button-background: var(--skra-sys-color-neutral-base-hover)}:host([data-skra-intent=neutral][data-skra-emphasis=high]):active:not(:disabled){--skra-comp-button-background: var(--skra-sys-color-neutral-base-active)}:host([data-skra-intent=neutral][data-skra-emphasis=medium]){--skra-comp-button-background: var( --skra-comp-button-background-neutral-medium, transparent );--skra-comp-button-foreground: var( --skra-comp-button-foreground-neutral-medium, var(--skra-sys-color-neutral-ink) );--skra-comp-button-border-color: var( --skra-comp-button-border-color-neutral-medium, var(--skra-sys-color-neutral-ink) )}:host([data-skra-intent=neutral][data-skra-emphasis=medium]):hover:not(:disabled){--skra-comp-button-background: var(--skra-sys-color-neutral-soft)}:host([data-skra-intent=neutral][data-skra-emphasis=low]){--skra-comp-button-background: var( --skra-comp-button-background-neutral-low, transparent );--skra-comp-button-foreground: var( --skra-comp-button-foreground-neutral-low, var(--skra-sys-color-neutral-ink) );--skra-comp-button-border-color: var( --skra-comp-button-border-color-neutral-low, transparent )}:host([data-skra-intent=neutral][data-skra-emphasis=low]):hover:not(:disabled){--skra-comp-button-background: var(--skra-sys-color-neutral-soft)}:host([data-skra-intent=primary][data-skra-emphasis=high]){--skra-comp-button-background: var( --skra-comp-button-background-primary-high, var(--skra-sys-color-primary-base) );--skra-comp-button-foreground: var( --skra-comp-button-foreground-primary-high, var(--skra-sys-color-primary-contrast) );--skra-comp-button-border-color: var( --skra-comp-button-border-color-primary-high, transparent )}:host([data-skra-intent=primary][data-skra-emphasis=high]):hover:not(:disabled){--skra-comp-button-background: var(--skra-sys-color-primary-base-hover)}:host([data-skra-intent=primary][data-skra-emphasis=high]):active:not(:disabled){--skra-comp-button-background: var(--skra-sys-color-primary-base-active)}:host([data-skra-intent=primary][data-skra-emphasis=medium]){--skra-comp-button-background: var( --skra-comp-button-background-primary-medium, transparent );--skra-comp-button-foreground: var( --skra-comp-button-foreground-primary-medium, var(--skra-sys-color-primary-ink) );--skra-comp-button-border-color: var( --skra-comp-button-border-color-primary-medium, var(--skra-sys-color-primary-ink) )}:host([data-skra-intent=primary][data-skra-emphasis=medium]):hover:not(:disabled){--skra-comp-button-background: var(--skra-sys-color-primary-soft)}:host([data-skra-intent=primary][data-skra-emphasis=low]){--skra-comp-button-background: var( --skra-comp-button-background-primary-low, transparent );--skra-comp-button-foreground: var( --skra-comp-button-foreground-primary-low, var(--skra-sys-color-primary-ink) );--skra-comp-button-border-color: var( --skra-comp-button-border-color-primary-low, transparent )}:host([data-skra-intent=primary][data-skra-emphasis=low]):hover:not(:disabled){--skra-comp-button-background: var(--skra-sys-color-primary-soft)}:host([data-skra-intent=secondary][data-skra-emphasis=high]){--skra-comp-button-background: var( --skra-comp-button-background-secondary-high, var(--skra-sys-color-secondary-base) );--skra-comp-button-foreground: var( --skra-comp-button-foreground-secondary-high, var(--skra-sys-color-secondary-contrast) );--skra-comp-button-border-color: var( --skra-comp-button-border-color-secondary-high, transparent )}:host([data-skra-intent=secondary][data-skra-emphasis=high]):hover:not(:disabled){--skra-comp-button-background: var(--skra-sys-color-secondary-base-hover)}:host([data-skra-intent=secondary][data-skra-emphasis=high]):active:not(:disabled){--skra-comp-button-background: var(--skra-sys-color-secondary-base-active)}:host([data-skra-intent=secondary][data-skra-emphasis=medium]){--skra-comp-button-background: var( --skra-comp-button-background-secondary-medium, transparent );--skra-comp-button-foreground: var( --skra-comp-button-foreground-secondary-medium, var(--skra-sys-color-secondary-ink) );--skra-comp-button-border-color: var( --skra-comp-button-border-color-secondary-medium, var(--skra-sys-color-secondary-ink) )}:host([data-skra-intent=secondary][data-skra-emphasis=medium]):hover:not(:disabled){--skra-comp-button-background: var(--skra-sys-color-secondary-soft)}:host([data-skra-intent=secondary][data-skra-emphasis=low]){--skra-comp-button-background: var( --skra-comp-button-background-secondary-low, transparent );--skra-comp-button-foreground: var( --skra-comp-button-foreground-secondary-low, var(--skra-sys-color-secondary-ink) );--skra-comp-button-border-color: var( --skra-comp-button-border-color-secondary-low, transparent )}:host([data-skra-intent=secondary][data-skra-emphasis=low]):hover:not(:disabled){--skra-comp-button-background: var(--skra-sys-color-secondary-soft)}:host([data-skra-intent=info][data-skra-emphasis=high]){--skra-comp-button-background: var( --skra-comp-button-background-info-high, var(--skra-sys-color-info-base) );--skra-comp-button-foreground: var( --skra-comp-button-foreground-info-high, var(--skra-sys-color-info-contrast) );--skra-comp-button-border-color: var( --skra-comp-button-border-color-info-high, transparent )}:host([data-skra-intent=info][data-skra-emphasis=high]):hover:not(:disabled){--skra-comp-button-background: var(--skra-sys-color-info-base-hover)}:host([data-skra-intent=info][data-skra-emphasis=high]):active:not(:disabled){--skra-comp-button-background: var(--skra-sys-color-info-base-active)}:host([data-skra-intent=info][data-skra-emphasis=medium]){--skra-comp-button-background: var( --skra-comp-button-background-info-medium, transparent );--skra-comp-button-foreground: var( --skra-comp-button-foreground-info-medium, var(--skra-sys-color-info-ink) );--skra-comp-button-border-color: var( --skra-comp-button-border-color-info-medium, var(--skra-sys-color-info-ink) )}:host([data-skra-intent=info][data-skra-emphasis=medium]):hover:not(:disabled){--skra-comp-button-background: var(--skra-sys-color-info-soft)}:host([data-skra-intent=info][data-skra-emphasis=low]){--skra-comp-button-background: var( --skra-comp-button-background-info-low, transparent );--skra-comp-button-foreground: var( --skra-comp-button-foreground-info-low, var(--skra-sys-color-info-ink) );--skra-comp-button-border-color: var( --skra-comp-button-border-color-info-low, transparent )}:host([data-skra-intent=info][data-skra-emphasis=low]):hover:not(:disabled){--skra-comp-button-background: var(--skra-sys-color-info-soft)}:host([data-skra-intent=success][data-skra-emphasis=high]){--skra-comp-button-background: var( --skra-comp-button-background-success-high, var(--skra-sys-color-success-base) );--skra-comp-button-foreground: var( --skra-comp-button-foreground-success-high, var(--skra-sys-color-success-contrast) );--skra-comp-button-border-color: var( --skra-comp-button-border-color-success-high, transparent )}:host([data-skra-intent=success][data-skra-emphasis=high]):hover:not(:disabled){--skra-comp-button-background: var(--skra-sys-color-success-base-hover)}:host([data-skra-intent=success][data-skra-emphasis=high]):active:not(:disabled){--skra-comp-button-background: var(--skra-sys-color-success-base-active)}:host([data-skra-intent=success][data-skra-emphasis=medium]){--skra-comp-button-background: var( --skra-comp-button-background-success-medium, transparent );--skra-comp-button-foreground: var( --skra-comp-button-foreground-success-medium, var(--skra-sys-color-success-ink) );--skra-comp-button-border-color: var( --skra-comp-button-border-color-success-medium, var(--skra-sys-color-success-ink) )}:host([data-skra-intent=success][data-skra-emphasis=medium]):hover:not(:disabled){--skra-comp-button-background: var(--skra-sys-color-success-soft)}:host([data-skra-intent=success][data-skra-emphasis=low]){--skra-comp-button-background: var( --skra-comp-button-background-success-low, transparent );--skra-comp-button-foreground: var( --skra-comp-button-foreground-success-low, var(--skra-sys-color-success-ink) );--skra-comp-button-border-color: var( --skra-comp-button-border-color-success-low, transparent )}:host([data-skra-intent=success][data-skra-emphasis=low]):hover:not(:disabled){--skra-comp-button-background: var(--skra-sys-color-success-soft)}:host([data-skra-intent=warning][data-skra-emphasis=high]){--skra-comp-button-background: var( --skra-comp-button-background-warning-high, var(--skra-sys-color-warning-base) );--skra-comp-button-foreground: var( --skra-comp-button-foreground-warning-high, var(--skra-sys-color-warning-contrast) );--skra-comp-button-border-color: var( --skra-comp-button-border-color-warning-high, transparent )}:host([data-skra-intent=warning][data-skra-emphasis=high]):hover:not(:disabled){--skra-comp-button-background: var(--skra-sys-color-warning-base-hover)}:host([data-skra-intent=warning][data-skra-emphasis=high]):active:not(:disabled){--skra-comp-button-background: var(--skra-sys-color-warning-base-active)}:host([data-skra-intent=warning][data-skra-emphasis=medium]){--skra-comp-button-background: var( --skra-comp-button-background-warning-medium, transparent );--skra-comp-button-foreground: var( --skra-comp-button-foreground-warning-medium, var(--skra-sys-color-warning-ink) );--skra-comp-button-border-color: var( --skra-comp-button-border-color-warning-medium, var(--skra-sys-color-warning-ink) )}:host([data-skra-intent=warning][data-skra-emphasis=medium]):hover:not(:disabled){--skra-comp-button-background: var(--skra-sys-color-warning-soft)}:host([data-skra-intent=warning][data-skra-emphasis=low]){--skra-comp-button-background: var( --skra-comp-button-background-warning-low, transparent );--skra-comp-button-foreground: var( --skra-comp-button-foreground-warning-low, var(--skra-sys-color-warning-ink) );--skra-comp-button-border-color: var( --skra-comp-button-border-color-warning-low, transparent )}:host([data-skra-intent=warning][data-skra-emphasis=low]):hover:not(:disabled){--skra-comp-button-background: var(--skra-sys-color-warning-soft)}:host([data-skra-intent=danger][data-skra-emphasis=high]){--skra-comp-button-background: var( --skra-comp-button-background-danger-high, var(--skra-sys-color-danger-base) );--skra-comp-button-foreground: var( --skra-comp-button-foreground-danger-high, var(--skra-sys-color-danger-contrast) );--skra-comp-button-border-color: var( --skra-comp-button-border-color-danger-high, transparent )}:host([data-skra-intent=danger][data-skra-emphasis=high]):hover:not(:disabled){--skra-comp-button-background: var(--skra-sys-color-danger-base-hover)}:host([data-skra-intent=danger][data-skra-emphasis=high]):active:not(:disabled){--skra-comp-button-background: var(--skra-sys-color-danger-base-active)}:host([data-skra-intent=danger][data-skra-emphasis=medium]){--skra-comp-button-background: var( --skra-comp-button-background-danger-medium, transparent );--skra-comp-button-foreground: var( --skra-comp-button-foreground-danger-medium, var(--skra-sys-color-danger-ink) );--skra-comp-button-border-color: var( --skra-comp-button-border-color-danger-medium, var(--skra-sys-color-danger-ink) )}:host([data-skra-intent=danger][data-skra-emphasis=medium]):hover:not(:disabled){--skra-comp-button-background: var(--skra-sys-color-danger-soft)}:host([data-skra-intent=danger][data-skra-emphasis=low]){--skra-comp-button-background: var( --skra-comp-button-background-danger-low, transparent );--skra-comp-button-foreground: var( --skra-comp-button-foreground-danger-low, var(--skra-sys-color-danger-ink) );--skra-comp-button-border-color: var( --skra-comp-button-border-color-danger-low, transparent )}:host([data-skra-intent=danger][data-skra-emphasis=low]):hover:not(:disabled){--skra-comp-button-background: var(--skra-sys-color-danger-soft)}:host:disabled{background:var(--skra-comp-button-background-disabled);color:var(--skra-comp-button-foreground-disabled);border-color:var(--skra-comp-button-border-color-disabled);cursor:not-allowed;box-shadow:none}.skra-button-slot-wrapper{display:inline-flex;align-items:center;flex-shrink:0;align-self:center;--skra-comp-icon-size: var(--skra-comp-button-icon-size)}.skra-button-label-wrapper{display:inline-block}.skra-button-loading-indicator{display:inline-flex;align-items:center}:host([data-skra-loading]){pointer-events:none;position:relative}:host([data-skra-loading]) .skra-button-label-wrapper,:host([data-skra-loading]) .skra-button-slot-wrapper{opacity:0}:host([data-skra-loading]) .skra-button-loading-indicator{position:absolute;inset:0;justify-content:center}[data-skra-loading-indicator-fallback]{display:inline-block;inline-size:var(--skra-comp-button-loading-indicator-size);block-size:var(--skra-comp-button-loading-indicator-size);border:.125em solid var(--skra-comp-button-loading-indicator-color);border-block-start-color:transparent;border-radius:50%;animation:skra-button-spin .8s linear infinite}@keyframes skra-button-spin{to{transform:rotate(360deg)}}@media(prefers-reduced-motion:reduce){[data-skra-loading-indicator-fallback]{animation:none;opacity:.6}}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush });
53
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.1.1", type: SkraButton, isStandalone: true, selector: "button[skraButton]", inputs: { intent: { classPropertyName: "intent", publicName: "intent", isSignal: true, isRequired: false, transformFunction: null }, emphasis: { classPropertyName: "emphasis", publicName: "emphasis", isSignal: true, isRequired: false, transformFunction: null }, size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null }, loading: { classPropertyName: "loading", publicName: "loading", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "attr.data-skra-intent": "intent()", "attr.data-skra-emphasis": "emphasis()", "attr.data-skra-size": "size()", "attr.data-skra-loading": "loading() ? \"\" : null", "attr.aria-busy": "loading() ? \"true\" : null", "attr.data-skra-has-start": "hasStart() ? \"\" : null", "attr.data-skra-has-end": "hasEnd() ? \"\" : null" } }, queries: [{ propertyName: "startSlot", first: true, predicate: SkraButtonStart, descendants: true, isSignal: true }, { propertyName: "endSlot", first: true, predicate: SkraButtonEnd, descendants: true, isSignal: true }, { propertyName: "loadingIndicatorSlot", first: true, predicate: SkraLoadingIndicator, descendants: true, isSignal: true }], ngImport: i0, template: "@if (hasStart()) {\r\n<span class=\"skra-button-slot-wrapper\">\r\n <ng-content select=\"[skra-start]\"></ng-content>\r\n</span>\r\n}\r\n\r\n<span class=\"skra-button-label-wrapper\">\r\n <ng-content></ng-content>\r\n</span>\r\n\r\n@if (hasEnd()) {\r\n<span class=\"skra-button-slot-wrapper\">\r\n <ng-content select=\"[skra-end]\"></ng-content>\r\n</span>\r\n} @if (loading()) {\r\n<span class=\"skra-button-loading-indicator\" data-skra-loading-indicator>\r\n @if (hasLoadingIndicator()) {\r\n <ng-content select=\"[skraLoadingIndicator]\"></ng-content>\r\n } @else {\r\n <span data-skra-loading-indicator-fallback aria-hidden=\"true\"></span>\r\n }\r\n</span>\r\n}\r\n", styles: ["@charset \"UTF-8\";:host{display:inline-flex;align-items:center;justify-content:center;box-sizing:border-box;margin:0;cursor:pointer;font-family:var(--skra-comp-button-font-family);font-size:var(--skra-comp-button-font-size);font-weight:var(--skra-comp-button-font-weight);line-height:var(--skra-comp-button-line-height);letter-spacing:var(--skra-comp-button-letter-spacing);min-block-size:var(--skra-comp-button-min-block-size);background:var(--skra-comp-button-background);color:var(--skra-comp-button-foreground);border-color:var(--skra-comp-button-border-color);border-width:var(--skra-comp-button-border-width);border-style:var(--skra-comp-button-border-style);border-radius:var(--skra-comp-button-radius);padding-block:var(--skra-comp-button-padding-block);padding-inline:var(--skra-comp-button-padding-inline);box-shadow:var(--skra-comp-button-shadow);transition:background var(--skra-comp-button-motion-duration) var(--skra-comp-button-motion-easing),color var(--skra-comp-button-motion-duration) var(--skra-comp-button-motion-easing),border-color var(--skra-comp-button-motion-duration) var(--skra-comp-button-motion-easing),box-shadow var(--skra-comp-button-motion-duration) var(--skra-comp-button-motion-easing)}:host[data-skra-has-start],:host[data-skra-has-end]{gap:var(--skra-comp-button-icon-gap)}:host:focus-visible{outline-style:solid;outline-color:var(--skra-comp-button-focus-ring-color);outline-width:var(--skra-comp-button-focus-ring-width);outline-offset:2px}@media(hover:hover)and (pointer:fine){:host:hover:not(:disabled){box-shadow:var(--skra-comp-button-shadow-hover)}}:host([data-skra-size=sm]){--skra-comp-button-padding-block: var( --skra-comp-button-size-sm-padding-block );--skra-comp-button-padding-inline: var( --skra-comp-button-size-sm-padding-inline );--skra-comp-button-min-block-size: var( --skra-comp-button-size-sm-min-block-size );--skra-comp-button-font-family: var( --skra-sys-typography-role-label-small-font-family );--skra-comp-button-font-size: var( --skra-sys-typography-role-label-small-font-size );--skra-comp-button-font-weight: var( --skra-sys-typography-role-label-small-font-weight );--skra-comp-button-line-height: var( --skra-sys-typography-role-label-small-line-height );--skra-comp-button-letter-spacing: var( --skra-sys-typography-role-label-small-letter-spacing )}:host([data-skra-size=md]){--skra-comp-button-padding-block: var( --skra-comp-button-size-md-padding-block );--skra-comp-button-padding-inline: var( --skra-comp-button-size-md-padding-inline );--skra-comp-button-min-block-size: var( --skra-comp-button-size-md-min-block-size );--skra-comp-button-font-family: var( --skra-sys-typography-role-label-medium-font-family );--skra-comp-button-font-size: var( --skra-sys-typography-role-label-medium-font-size );--skra-comp-button-font-weight: var( --skra-sys-typography-role-label-medium-font-weight );--skra-comp-button-line-height: var( --skra-sys-typography-role-label-medium-line-height );--skra-comp-button-letter-spacing: var( --skra-sys-typography-role-label-medium-letter-spacing )}:host([data-skra-size=lg]){--skra-comp-button-padding-block: var( --skra-comp-button-size-lg-padding-block );--skra-comp-button-padding-inline: var( --skra-comp-button-size-lg-padding-inline );--skra-comp-button-min-block-size: var( --skra-comp-button-size-lg-min-block-size );--skra-comp-button-font-family: var( --skra-sys-typography-role-label-large-font-family );--skra-comp-button-font-size: var( --skra-sys-typography-role-label-large-font-size );--skra-comp-button-font-weight: var( --skra-sys-typography-role-label-large-font-weight );--skra-comp-button-line-height: var( --skra-sys-typography-role-label-large-line-height );--skra-comp-button-letter-spacing: var( --skra-sys-typography-role-label-large-letter-spacing )}:host([data-skra-emphasis=high]){--skra-comp-button-border-width: 0}:host([data-skra-emphasis=medium]){--skra-comp-button-border-width: .0625rem}:host([data-skra-emphasis=low]){--skra-comp-button-border-width: 0}:host([data-skra-intent=neutral][data-skra-emphasis=high]){--skra-comp-button-background: var( --skra-comp-button-background-neutral-high, var(--skra-sys-color-neutral-base) );--skra-comp-button-foreground: var( --skra-comp-button-foreground-neutral-high, var(--skra-sys-color-neutral-contrast) );--skra-comp-button-border-color: var( --skra-comp-button-border-color-neutral-high, transparent )}@media(hover:hover)and (pointer:fine){:host([data-skra-intent=neutral][data-skra-emphasis=high]):hover:not(:disabled){--skra-comp-button-background: var(--skra-sys-color-neutral-base-hover)}}:host([data-skra-intent=neutral][data-skra-emphasis=high]):active:not(:disabled){--skra-comp-button-background: var(--skra-sys-color-neutral-base-active)}:host([data-skra-intent=neutral][data-skra-emphasis=medium]){--skra-comp-button-background: var( --skra-comp-button-background-neutral-medium, transparent );--skra-comp-button-foreground: var( --skra-comp-button-foreground-neutral-medium, var(--skra-sys-color-neutral-strong) );--skra-comp-button-border-color: var( --skra-comp-button-border-color-neutral-medium, var(--skra-sys-color-neutral-strong) )}@media(hover:hover)and (pointer:fine){:host([data-skra-intent=neutral][data-skra-emphasis=medium]):hover:not(:disabled){--skra-comp-button-background: var(--skra-sys-color-neutral-soft)}}:host([data-skra-intent=neutral][data-skra-emphasis=low]){--skra-comp-button-background: var( --skra-comp-button-background-neutral-low, transparent );--skra-comp-button-foreground: var( --skra-comp-button-foreground-neutral-low, var(--skra-sys-color-neutral-strong) );--skra-comp-button-border-color: var( --skra-comp-button-border-color-neutral-low, transparent )}@media(hover:hover)and (pointer:fine){:host([data-skra-intent=neutral][data-skra-emphasis=low]):hover:not(:disabled){--skra-comp-button-background: var(--skra-sys-color-neutral-soft)}}:host([data-skra-intent=primary][data-skra-emphasis=high]){--skra-comp-button-background: var( --skra-comp-button-background-primary-high, var(--skra-sys-color-primary-base) );--skra-comp-button-foreground: var( --skra-comp-button-foreground-primary-high, var(--skra-sys-color-primary-contrast) );--skra-comp-button-border-color: var( --skra-comp-button-border-color-primary-high, transparent )}@media(hover:hover)and (pointer:fine){:host([data-skra-intent=primary][data-skra-emphasis=high]):hover:not(:disabled){--skra-comp-button-background: var(--skra-sys-color-primary-base-hover)}}:host([data-skra-intent=primary][data-skra-emphasis=high]):active:not(:disabled){--skra-comp-button-background: var(--skra-sys-color-primary-base-active)}:host([data-skra-intent=primary][data-skra-emphasis=medium]){--skra-comp-button-background: var( --skra-comp-button-background-primary-medium, transparent );--skra-comp-button-foreground: var( --skra-comp-button-foreground-primary-medium, var(--skra-sys-color-primary-strong) );--skra-comp-button-border-color: var( --skra-comp-button-border-color-primary-medium, var(--skra-sys-color-primary-strong) )}@media(hover:hover)and (pointer:fine){:host([data-skra-intent=primary][data-skra-emphasis=medium]):hover:not(:disabled){--skra-comp-button-background: var(--skra-sys-color-primary-soft)}}:host([data-skra-intent=primary][data-skra-emphasis=low]){--skra-comp-button-background: var( --skra-comp-button-background-primary-low, transparent );--skra-comp-button-foreground: var( --skra-comp-button-foreground-primary-low, var(--skra-sys-color-primary-strong) );--skra-comp-button-border-color: var( --skra-comp-button-border-color-primary-low, transparent )}@media(hover:hover)and (pointer:fine){:host([data-skra-intent=primary][data-skra-emphasis=low]):hover:not(:disabled){--skra-comp-button-background: var(--skra-sys-color-primary-soft)}}:host([data-skra-intent=secondary][data-skra-emphasis=high]){--skra-comp-button-background: var( --skra-comp-button-background-secondary-high, var(--skra-sys-color-secondary-base) );--skra-comp-button-foreground: var( --skra-comp-button-foreground-secondary-high, var(--skra-sys-color-secondary-contrast) );--skra-comp-button-border-color: var( --skra-comp-button-border-color-secondary-high, transparent )}@media(hover:hover)and (pointer:fine){:host([data-skra-intent=secondary][data-skra-emphasis=high]):hover:not(:disabled){--skra-comp-button-background: var(--skra-sys-color-secondary-base-hover)}}:host([data-skra-intent=secondary][data-skra-emphasis=high]):active:not(:disabled){--skra-comp-button-background: var(--skra-sys-color-secondary-base-active)}:host([data-skra-intent=secondary][data-skra-emphasis=medium]){--skra-comp-button-background: var( --skra-comp-button-background-secondary-medium, transparent );--skra-comp-button-foreground: var( --skra-comp-button-foreground-secondary-medium, var(--skra-sys-color-secondary-strong) );--skra-comp-button-border-color: var( --skra-comp-button-border-color-secondary-medium, var(--skra-sys-color-secondary-strong) )}@media(hover:hover)and (pointer:fine){:host([data-skra-intent=secondary][data-skra-emphasis=medium]):hover:not(:disabled){--skra-comp-button-background: var(--skra-sys-color-secondary-soft)}}:host([data-skra-intent=secondary][data-skra-emphasis=low]){--skra-comp-button-background: var( --skra-comp-button-background-secondary-low, transparent );--skra-comp-button-foreground: var( --skra-comp-button-foreground-secondary-low, var(--skra-sys-color-secondary-strong) );--skra-comp-button-border-color: var( --skra-comp-button-border-color-secondary-low, transparent )}@media(hover:hover)and (pointer:fine){:host([data-skra-intent=secondary][data-skra-emphasis=low]):hover:not(:disabled){--skra-comp-button-background: var(--skra-sys-color-secondary-soft)}}:host([data-skra-intent=info][data-skra-emphasis=high]){--skra-comp-button-background: var( --skra-comp-button-background-info-high, var(--skra-sys-color-info-base) );--skra-comp-button-foreground: var( --skra-comp-button-foreground-info-high, var(--skra-sys-color-info-contrast) );--skra-comp-button-border-color: var( --skra-comp-button-border-color-info-high, transparent )}@media(hover:hover)and (pointer:fine){:host([data-skra-intent=info][data-skra-emphasis=high]):hover:not(:disabled){--skra-comp-button-background: var(--skra-sys-color-info-base-hover)}}:host([data-skra-intent=info][data-skra-emphasis=high]):active:not(:disabled){--skra-comp-button-background: var(--skra-sys-color-info-base-active)}:host([data-skra-intent=info][data-skra-emphasis=medium]){--skra-comp-button-background: var( --skra-comp-button-background-info-medium, transparent );--skra-comp-button-foreground: var( --skra-comp-button-foreground-info-medium, var(--skra-sys-color-info-strong) );--skra-comp-button-border-color: var( --skra-comp-button-border-color-info-medium, var(--skra-sys-color-info-strong) )}@media(hover:hover)and (pointer:fine){:host([data-skra-intent=info][data-skra-emphasis=medium]):hover:not(:disabled){--skra-comp-button-background: var(--skra-sys-color-info-soft)}}:host([data-skra-intent=info][data-skra-emphasis=low]){--skra-comp-button-background: var( --skra-comp-button-background-info-low, transparent );--skra-comp-button-foreground: var( --skra-comp-button-foreground-info-low, var(--skra-sys-color-info-strong) );--skra-comp-button-border-color: var( --skra-comp-button-border-color-info-low, transparent )}@media(hover:hover)and (pointer:fine){:host([data-skra-intent=info][data-skra-emphasis=low]):hover:not(:disabled){--skra-comp-button-background: var(--skra-sys-color-info-soft)}}:host([data-skra-intent=success][data-skra-emphasis=high]){--skra-comp-button-background: var( --skra-comp-button-background-success-high, var(--skra-sys-color-success-base) );--skra-comp-button-foreground: var( --skra-comp-button-foreground-success-high, var(--skra-sys-color-success-contrast) );--skra-comp-button-border-color: var( --skra-comp-button-border-color-success-high, transparent )}@media(hover:hover)and (pointer:fine){:host([data-skra-intent=success][data-skra-emphasis=high]):hover:not(:disabled){--skra-comp-button-background: var(--skra-sys-color-success-base-hover)}}:host([data-skra-intent=success][data-skra-emphasis=high]):active:not(:disabled){--skra-comp-button-background: var(--skra-sys-color-success-base-active)}:host([data-skra-intent=success][data-skra-emphasis=medium]){--skra-comp-button-background: var( --skra-comp-button-background-success-medium, transparent );--skra-comp-button-foreground: var( --skra-comp-button-foreground-success-medium, var(--skra-sys-color-success-strong) );--skra-comp-button-border-color: var( --skra-comp-button-border-color-success-medium, var(--skra-sys-color-success-strong) )}@media(hover:hover)and (pointer:fine){:host([data-skra-intent=success][data-skra-emphasis=medium]):hover:not(:disabled){--skra-comp-button-background: var(--skra-sys-color-success-soft)}}:host([data-skra-intent=success][data-skra-emphasis=low]){--skra-comp-button-background: var( --skra-comp-button-background-success-low, transparent );--skra-comp-button-foreground: var( --skra-comp-button-foreground-success-low, var(--skra-sys-color-success-strong) );--skra-comp-button-border-color: var( --skra-comp-button-border-color-success-low, transparent )}@media(hover:hover)and (pointer:fine){:host([data-skra-intent=success][data-skra-emphasis=low]):hover:not(:disabled){--skra-comp-button-background: var(--skra-sys-color-success-soft)}}:host([data-skra-intent=warning][data-skra-emphasis=high]){--skra-comp-button-background: var( --skra-comp-button-background-warning-high, var(--skra-sys-color-warning-base) );--skra-comp-button-foreground: var( --skra-comp-button-foreground-warning-high, var(--skra-sys-color-warning-contrast) );--skra-comp-button-border-color: var( --skra-comp-button-border-color-warning-high, transparent )}@media(hover:hover)and (pointer:fine){:host([data-skra-intent=warning][data-skra-emphasis=high]):hover:not(:disabled){--skra-comp-button-background: var(--skra-sys-color-warning-base-hover)}}:host([data-skra-intent=warning][data-skra-emphasis=high]):active:not(:disabled){--skra-comp-button-background: var(--skra-sys-color-warning-base-active)}:host([data-skra-intent=warning][data-skra-emphasis=medium]){--skra-comp-button-background: var( --skra-comp-button-background-warning-medium, transparent );--skra-comp-button-foreground: var( --skra-comp-button-foreground-warning-medium, var(--skra-sys-color-warning-strong) );--skra-comp-button-border-color: var( --skra-comp-button-border-color-warning-medium, var(--skra-sys-color-warning-strong) )}@media(hover:hover)and (pointer:fine){:host([data-skra-intent=warning][data-skra-emphasis=medium]):hover:not(:disabled){--skra-comp-button-background: var(--skra-sys-color-warning-soft)}}:host([data-skra-intent=warning][data-skra-emphasis=low]){--skra-comp-button-background: var( --skra-comp-button-background-warning-low, transparent );--skra-comp-button-foreground: var( --skra-comp-button-foreground-warning-low, var(--skra-sys-color-warning-strong) );--skra-comp-button-border-color: var( --skra-comp-button-border-color-warning-low, transparent )}@media(hover:hover)and (pointer:fine){:host([data-skra-intent=warning][data-skra-emphasis=low]):hover:not(:disabled){--skra-comp-button-background: var(--skra-sys-color-warning-soft)}}:host([data-skra-intent=danger][data-skra-emphasis=high]){--skra-comp-button-background: var( --skra-comp-button-background-danger-high, var(--skra-sys-color-danger-base) );--skra-comp-button-foreground: var( --skra-comp-button-foreground-danger-high, var(--skra-sys-color-danger-contrast) );--skra-comp-button-border-color: var( --skra-comp-button-border-color-danger-high, transparent )}@media(hover:hover)and (pointer:fine){:host([data-skra-intent=danger][data-skra-emphasis=high]):hover:not(:disabled){--skra-comp-button-background: var(--skra-sys-color-danger-base-hover)}}:host([data-skra-intent=danger][data-skra-emphasis=high]):active:not(:disabled){--skra-comp-button-background: var(--skra-sys-color-danger-base-active)}:host([data-skra-intent=danger][data-skra-emphasis=medium]){--skra-comp-button-background: var( --skra-comp-button-background-danger-medium, transparent );--skra-comp-button-foreground: var( --skra-comp-button-foreground-danger-medium, var(--skra-sys-color-danger-strong) );--skra-comp-button-border-color: var( --skra-comp-button-border-color-danger-medium, var(--skra-sys-color-danger-strong) )}@media(hover:hover)and (pointer:fine){:host([data-skra-intent=danger][data-skra-emphasis=medium]):hover:not(:disabled){--skra-comp-button-background: var(--skra-sys-color-danger-soft)}}:host([data-skra-intent=danger][data-skra-emphasis=low]){--skra-comp-button-background: var( --skra-comp-button-background-danger-low, transparent );--skra-comp-button-foreground: var( --skra-comp-button-foreground-danger-low, var(--skra-sys-color-danger-strong) );--skra-comp-button-border-color: var( --skra-comp-button-border-color-danger-low, transparent )}@media(hover:hover)and (pointer:fine){:host([data-skra-intent=danger][data-skra-emphasis=low]):hover:not(:disabled){--skra-comp-button-background: var(--skra-sys-color-danger-soft)}}:host:disabled{background:var(--skra-comp-button-background-disabled);color:var(--skra-comp-button-foreground-disabled);border-color:var(--skra-comp-button-border-color-disabled);cursor:not-allowed;box-shadow:none}.skra-button-slot-wrapper{display:inline-flex;align-items:center;flex-shrink:0;align-self:center;--skra-comp-icon-size: var(--skra-comp-button-icon-size)}.skra-button-label-wrapper{display:inline-block}.skra-button-loading-indicator{display:inline-flex;align-items:center}:host([data-skra-loading]){pointer-events:none;position:relative}:host([data-skra-loading]) .skra-button-label-wrapper,:host([data-skra-loading]) .skra-button-slot-wrapper{opacity:0}:host([data-skra-loading]) .skra-button-loading-indicator{position:absolute;inset:0;justify-content:center}[data-skra-loading-indicator-fallback]{display:inline-block;inline-size:var(--skra-comp-button-loading-indicator-size);block-size:var(--skra-comp-button-loading-indicator-size);border:.125em solid var(--skra-comp-button-loading-indicator-color);border-block-start-color:transparent;border-radius:50%;animation:skra-button-spin .8s linear infinite}@keyframes skra-button-spin{to{transform:rotate(360deg)}}@media(prefers-reduced-motion:reduce){[data-skra-loading-indicator-fallback]{animation:none;opacity:.6}}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush });
54
54
  }
55
55
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.1", ngImport: i0, type: SkraButton, decorators: [{
56
56
  type: Component,
@@ -65,7 +65,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.1", ngImpor
65
65
  // Smart Slots layout reflection (ADR 020 v2.0 §3.2 — slot-presence, exempt from State Surface per ADR 027 §3.6)
66
66
  '[attr.data-skra-has-start]': 'hasStart() ? "" : null',
67
67
  '[attr.data-skra-has-end]': 'hasEnd() ? "" : null',
68
- }, template: "@if (hasStart()) {\r\n<span class=\"skra-button-slot-wrapper\">\r\n <ng-content select=\"[skra-start]\"></ng-content>\r\n</span>\r\n}\r\n\r\n<span class=\"skra-button-label-wrapper\">\r\n <ng-content></ng-content>\r\n</span>\r\n\r\n@if (hasEnd()) {\r\n<span class=\"skra-button-slot-wrapper\">\r\n <ng-content select=\"[skra-end]\"></ng-content>\r\n</span>\r\n} @if (loading()) {\r\n<span class=\"skra-button-loading-indicator\" data-skra-loading-indicator>\r\n @if (hasLoadingIndicator()) {\r\n <ng-content select=\"[skraLoadingIndicator]\"></ng-content>\r\n } @else {\r\n <span data-skra-loading-indicator-fallback aria-hidden=\"true\"></span>\r\n }\r\n</span>\r\n}\r\n", styles: ["@charset \"UTF-8\";:host{display:inline-flex;align-items:center;justify-content:center;box-sizing:border-box;margin:0;cursor:pointer;font-family:var(--skra-comp-button-font-family);font-size:var(--skra-comp-button-font-size);font-weight:var(--skra-comp-button-font-weight);line-height:var(--skra-comp-button-line-height);letter-spacing:var(--skra-comp-button-letter-spacing);min-block-size:var(--skra-comp-button-min-block-size);background:var(--skra-comp-button-background);color:var(--skra-comp-button-foreground);border-color:var(--skra-comp-button-border-color);border-width:var(--skra-comp-button-border-width);border-style:var(--skra-comp-button-border-style);border-radius:var(--skra-comp-button-radius);padding-block:var(--skra-comp-button-padding-block);padding-inline:var(--skra-comp-button-padding-inline);box-shadow:var(--skra-comp-button-shadow);transition:background var(--skra-comp-button-motion-duration) var(--skra-comp-button-motion-easing),color var(--skra-comp-button-motion-duration) var(--skra-comp-button-motion-easing),border-color var(--skra-comp-button-motion-duration) var(--skra-comp-button-motion-easing),box-shadow var(--skra-comp-button-motion-duration) var(--skra-comp-button-motion-easing)}:host[data-skra-has-start],:host[data-skra-has-end]{gap:var(--skra-comp-button-icon-gap)}:host:focus-visible{outline-style:solid;outline-color:var(--skra-comp-button-focus-ring-color);outline-width:var(--skra-comp-button-focus-ring-width);outline-offset:2px}:host:hover:not(:disabled){box-shadow:var(--skra-comp-button-shadow-hover)}:host([data-skra-size=sm]){--skra-comp-button-padding-block: var( --skra-comp-button-size-sm-padding-block );--skra-comp-button-padding-inline: var( --skra-comp-button-size-sm-padding-inline );--skra-comp-button-min-block-size: var( --skra-comp-button-size-sm-min-block-size );--skra-comp-button-font-family: var( --skra-sys-typography-role-label-small-font-family );--skra-comp-button-font-size: var( --skra-sys-typography-role-label-small-font-size );--skra-comp-button-font-weight: var( --skra-sys-typography-role-label-small-font-weight );--skra-comp-button-line-height: var( --skra-sys-typography-role-label-small-line-height );--skra-comp-button-letter-spacing: var( --skra-sys-typography-role-label-small-letter-spacing )}:host([data-skra-size=md]){--skra-comp-button-padding-block: var( --skra-comp-button-size-md-padding-block );--skra-comp-button-padding-inline: var( --skra-comp-button-size-md-padding-inline );--skra-comp-button-min-block-size: var( --skra-comp-button-size-md-min-block-size );--skra-comp-button-font-family: var( --skra-sys-typography-role-label-medium-font-family );--skra-comp-button-font-size: var( --skra-sys-typography-role-label-medium-font-size );--skra-comp-button-font-weight: var( --skra-sys-typography-role-label-medium-font-weight );--skra-comp-button-line-height: var( --skra-sys-typography-role-label-medium-line-height );--skra-comp-button-letter-spacing: var( --skra-sys-typography-role-label-medium-letter-spacing )}:host([data-skra-size=lg]){--skra-comp-button-padding-block: var( --skra-comp-button-size-lg-padding-block );--skra-comp-button-padding-inline: var( --skra-comp-button-size-lg-padding-inline );--skra-comp-button-min-block-size: var( --skra-comp-button-size-lg-min-block-size );--skra-comp-button-font-family: var( --skra-sys-typography-role-label-large-font-family );--skra-comp-button-font-size: var( --skra-sys-typography-role-label-large-font-size );--skra-comp-button-font-weight: var( --skra-sys-typography-role-label-large-font-weight );--skra-comp-button-line-height: var( --skra-sys-typography-role-label-large-line-height );--skra-comp-button-letter-spacing: var( --skra-sys-typography-role-label-large-letter-spacing )}:host([data-skra-emphasis=high]){--skra-comp-button-border-width: 0}:host([data-skra-emphasis=medium]){--skra-comp-button-border-width: .0625rem}:host([data-skra-emphasis=low]){--skra-comp-button-border-width: 0}:host([data-skra-intent=neutral][data-skra-emphasis=high]){--skra-comp-button-background: var( --skra-comp-button-background-neutral-high, var(--skra-sys-color-neutral-base) );--skra-comp-button-foreground: var( --skra-comp-button-foreground-neutral-high, var(--skra-sys-color-neutral-contrast) );--skra-comp-button-border-color: var( --skra-comp-button-border-color-neutral-high, transparent )}:host([data-skra-intent=neutral][data-skra-emphasis=high]):hover:not(:disabled){--skra-comp-button-background: var(--skra-sys-color-neutral-base-hover)}:host([data-skra-intent=neutral][data-skra-emphasis=high]):active:not(:disabled){--skra-comp-button-background: var(--skra-sys-color-neutral-base-active)}:host([data-skra-intent=neutral][data-skra-emphasis=medium]){--skra-comp-button-background: var( --skra-comp-button-background-neutral-medium, transparent );--skra-comp-button-foreground: var( --skra-comp-button-foreground-neutral-medium, var(--skra-sys-color-neutral-ink) );--skra-comp-button-border-color: var( --skra-comp-button-border-color-neutral-medium, var(--skra-sys-color-neutral-ink) )}:host([data-skra-intent=neutral][data-skra-emphasis=medium]):hover:not(:disabled){--skra-comp-button-background: var(--skra-sys-color-neutral-soft)}:host([data-skra-intent=neutral][data-skra-emphasis=low]){--skra-comp-button-background: var( --skra-comp-button-background-neutral-low, transparent );--skra-comp-button-foreground: var( --skra-comp-button-foreground-neutral-low, var(--skra-sys-color-neutral-ink) );--skra-comp-button-border-color: var( --skra-comp-button-border-color-neutral-low, transparent )}:host([data-skra-intent=neutral][data-skra-emphasis=low]):hover:not(:disabled){--skra-comp-button-background: var(--skra-sys-color-neutral-soft)}:host([data-skra-intent=primary][data-skra-emphasis=high]){--skra-comp-button-background: var( --skra-comp-button-background-primary-high, var(--skra-sys-color-primary-base) );--skra-comp-button-foreground: var( --skra-comp-button-foreground-primary-high, var(--skra-sys-color-primary-contrast) );--skra-comp-button-border-color: var( --skra-comp-button-border-color-primary-high, transparent )}:host([data-skra-intent=primary][data-skra-emphasis=high]):hover:not(:disabled){--skra-comp-button-background: var(--skra-sys-color-primary-base-hover)}:host([data-skra-intent=primary][data-skra-emphasis=high]):active:not(:disabled){--skra-comp-button-background: var(--skra-sys-color-primary-base-active)}:host([data-skra-intent=primary][data-skra-emphasis=medium]){--skra-comp-button-background: var( --skra-comp-button-background-primary-medium, transparent );--skra-comp-button-foreground: var( --skra-comp-button-foreground-primary-medium, var(--skra-sys-color-primary-ink) );--skra-comp-button-border-color: var( --skra-comp-button-border-color-primary-medium, var(--skra-sys-color-primary-ink) )}:host([data-skra-intent=primary][data-skra-emphasis=medium]):hover:not(:disabled){--skra-comp-button-background: var(--skra-sys-color-primary-soft)}:host([data-skra-intent=primary][data-skra-emphasis=low]){--skra-comp-button-background: var( --skra-comp-button-background-primary-low, transparent );--skra-comp-button-foreground: var( --skra-comp-button-foreground-primary-low, var(--skra-sys-color-primary-ink) );--skra-comp-button-border-color: var( --skra-comp-button-border-color-primary-low, transparent )}:host([data-skra-intent=primary][data-skra-emphasis=low]):hover:not(:disabled){--skra-comp-button-background: var(--skra-sys-color-primary-soft)}:host([data-skra-intent=secondary][data-skra-emphasis=high]){--skra-comp-button-background: var( --skra-comp-button-background-secondary-high, var(--skra-sys-color-secondary-base) );--skra-comp-button-foreground: var( --skra-comp-button-foreground-secondary-high, var(--skra-sys-color-secondary-contrast) );--skra-comp-button-border-color: var( --skra-comp-button-border-color-secondary-high, transparent )}:host([data-skra-intent=secondary][data-skra-emphasis=high]):hover:not(:disabled){--skra-comp-button-background: var(--skra-sys-color-secondary-base-hover)}:host([data-skra-intent=secondary][data-skra-emphasis=high]):active:not(:disabled){--skra-comp-button-background: var(--skra-sys-color-secondary-base-active)}:host([data-skra-intent=secondary][data-skra-emphasis=medium]){--skra-comp-button-background: var( --skra-comp-button-background-secondary-medium, transparent );--skra-comp-button-foreground: var( --skra-comp-button-foreground-secondary-medium, var(--skra-sys-color-secondary-ink) );--skra-comp-button-border-color: var( --skra-comp-button-border-color-secondary-medium, var(--skra-sys-color-secondary-ink) )}:host([data-skra-intent=secondary][data-skra-emphasis=medium]):hover:not(:disabled){--skra-comp-button-background: var(--skra-sys-color-secondary-soft)}:host([data-skra-intent=secondary][data-skra-emphasis=low]){--skra-comp-button-background: var( --skra-comp-button-background-secondary-low, transparent );--skra-comp-button-foreground: var( --skra-comp-button-foreground-secondary-low, var(--skra-sys-color-secondary-ink) );--skra-comp-button-border-color: var( --skra-comp-button-border-color-secondary-low, transparent )}:host([data-skra-intent=secondary][data-skra-emphasis=low]):hover:not(:disabled){--skra-comp-button-background: var(--skra-sys-color-secondary-soft)}:host([data-skra-intent=info][data-skra-emphasis=high]){--skra-comp-button-background: var( --skra-comp-button-background-info-high, var(--skra-sys-color-info-base) );--skra-comp-button-foreground: var( --skra-comp-button-foreground-info-high, var(--skra-sys-color-info-contrast) );--skra-comp-button-border-color: var( --skra-comp-button-border-color-info-high, transparent )}:host([data-skra-intent=info][data-skra-emphasis=high]):hover:not(:disabled){--skra-comp-button-background: var(--skra-sys-color-info-base-hover)}:host([data-skra-intent=info][data-skra-emphasis=high]):active:not(:disabled){--skra-comp-button-background: var(--skra-sys-color-info-base-active)}:host([data-skra-intent=info][data-skra-emphasis=medium]){--skra-comp-button-background: var( --skra-comp-button-background-info-medium, transparent );--skra-comp-button-foreground: var( --skra-comp-button-foreground-info-medium, var(--skra-sys-color-info-ink) );--skra-comp-button-border-color: var( --skra-comp-button-border-color-info-medium, var(--skra-sys-color-info-ink) )}:host([data-skra-intent=info][data-skra-emphasis=medium]):hover:not(:disabled){--skra-comp-button-background: var(--skra-sys-color-info-soft)}:host([data-skra-intent=info][data-skra-emphasis=low]){--skra-comp-button-background: var( --skra-comp-button-background-info-low, transparent );--skra-comp-button-foreground: var( --skra-comp-button-foreground-info-low, var(--skra-sys-color-info-ink) );--skra-comp-button-border-color: var( --skra-comp-button-border-color-info-low, transparent )}:host([data-skra-intent=info][data-skra-emphasis=low]):hover:not(:disabled){--skra-comp-button-background: var(--skra-sys-color-info-soft)}:host([data-skra-intent=success][data-skra-emphasis=high]){--skra-comp-button-background: var( --skra-comp-button-background-success-high, var(--skra-sys-color-success-base) );--skra-comp-button-foreground: var( --skra-comp-button-foreground-success-high, var(--skra-sys-color-success-contrast) );--skra-comp-button-border-color: var( --skra-comp-button-border-color-success-high, transparent )}:host([data-skra-intent=success][data-skra-emphasis=high]):hover:not(:disabled){--skra-comp-button-background: var(--skra-sys-color-success-base-hover)}:host([data-skra-intent=success][data-skra-emphasis=high]):active:not(:disabled){--skra-comp-button-background: var(--skra-sys-color-success-base-active)}:host([data-skra-intent=success][data-skra-emphasis=medium]){--skra-comp-button-background: var( --skra-comp-button-background-success-medium, transparent );--skra-comp-button-foreground: var( --skra-comp-button-foreground-success-medium, var(--skra-sys-color-success-ink) );--skra-comp-button-border-color: var( --skra-comp-button-border-color-success-medium, var(--skra-sys-color-success-ink) )}:host([data-skra-intent=success][data-skra-emphasis=medium]):hover:not(:disabled){--skra-comp-button-background: var(--skra-sys-color-success-soft)}:host([data-skra-intent=success][data-skra-emphasis=low]){--skra-comp-button-background: var( --skra-comp-button-background-success-low, transparent );--skra-comp-button-foreground: var( --skra-comp-button-foreground-success-low, var(--skra-sys-color-success-ink) );--skra-comp-button-border-color: var( --skra-comp-button-border-color-success-low, transparent )}:host([data-skra-intent=success][data-skra-emphasis=low]):hover:not(:disabled){--skra-comp-button-background: var(--skra-sys-color-success-soft)}:host([data-skra-intent=warning][data-skra-emphasis=high]){--skra-comp-button-background: var( --skra-comp-button-background-warning-high, var(--skra-sys-color-warning-base) );--skra-comp-button-foreground: var( --skra-comp-button-foreground-warning-high, var(--skra-sys-color-warning-contrast) );--skra-comp-button-border-color: var( --skra-comp-button-border-color-warning-high, transparent )}:host([data-skra-intent=warning][data-skra-emphasis=high]):hover:not(:disabled){--skra-comp-button-background: var(--skra-sys-color-warning-base-hover)}:host([data-skra-intent=warning][data-skra-emphasis=high]):active:not(:disabled){--skra-comp-button-background: var(--skra-sys-color-warning-base-active)}:host([data-skra-intent=warning][data-skra-emphasis=medium]){--skra-comp-button-background: var( --skra-comp-button-background-warning-medium, transparent );--skra-comp-button-foreground: var( --skra-comp-button-foreground-warning-medium, var(--skra-sys-color-warning-ink) );--skra-comp-button-border-color: var( --skra-comp-button-border-color-warning-medium, var(--skra-sys-color-warning-ink) )}:host([data-skra-intent=warning][data-skra-emphasis=medium]):hover:not(:disabled){--skra-comp-button-background: var(--skra-sys-color-warning-soft)}:host([data-skra-intent=warning][data-skra-emphasis=low]){--skra-comp-button-background: var( --skra-comp-button-background-warning-low, transparent );--skra-comp-button-foreground: var( --skra-comp-button-foreground-warning-low, var(--skra-sys-color-warning-ink) );--skra-comp-button-border-color: var( --skra-comp-button-border-color-warning-low, transparent )}:host([data-skra-intent=warning][data-skra-emphasis=low]):hover:not(:disabled){--skra-comp-button-background: var(--skra-sys-color-warning-soft)}:host([data-skra-intent=danger][data-skra-emphasis=high]){--skra-comp-button-background: var( --skra-comp-button-background-danger-high, var(--skra-sys-color-danger-base) );--skra-comp-button-foreground: var( --skra-comp-button-foreground-danger-high, var(--skra-sys-color-danger-contrast) );--skra-comp-button-border-color: var( --skra-comp-button-border-color-danger-high, transparent )}:host([data-skra-intent=danger][data-skra-emphasis=high]):hover:not(:disabled){--skra-comp-button-background: var(--skra-sys-color-danger-base-hover)}:host([data-skra-intent=danger][data-skra-emphasis=high]):active:not(:disabled){--skra-comp-button-background: var(--skra-sys-color-danger-base-active)}:host([data-skra-intent=danger][data-skra-emphasis=medium]){--skra-comp-button-background: var( --skra-comp-button-background-danger-medium, transparent );--skra-comp-button-foreground: var( --skra-comp-button-foreground-danger-medium, var(--skra-sys-color-danger-ink) );--skra-comp-button-border-color: var( --skra-comp-button-border-color-danger-medium, var(--skra-sys-color-danger-ink) )}:host([data-skra-intent=danger][data-skra-emphasis=medium]):hover:not(:disabled){--skra-comp-button-background: var(--skra-sys-color-danger-soft)}:host([data-skra-intent=danger][data-skra-emphasis=low]){--skra-comp-button-background: var( --skra-comp-button-background-danger-low, transparent );--skra-comp-button-foreground: var( --skra-comp-button-foreground-danger-low, var(--skra-sys-color-danger-ink) );--skra-comp-button-border-color: var( --skra-comp-button-border-color-danger-low, transparent )}:host([data-skra-intent=danger][data-skra-emphasis=low]):hover:not(:disabled){--skra-comp-button-background: var(--skra-sys-color-danger-soft)}:host:disabled{background:var(--skra-comp-button-background-disabled);color:var(--skra-comp-button-foreground-disabled);border-color:var(--skra-comp-button-border-color-disabled);cursor:not-allowed;box-shadow:none}.skra-button-slot-wrapper{display:inline-flex;align-items:center;flex-shrink:0;align-self:center;--skra-comp-icon-size: var(--skra-comp-button-icon-size)}.skra-button-label-wrapper{display:inline-block}.skra-button-loading-indicator{display:inline-flex;align-items:center}:host([data-skra-loading]){pointer-events:none;position:relative}:host([data-skra-loading]) .skra-button-label-wrapper,:host([data-skra-loading]) .skra-button-slot-wrapper{opacity:0}:host([data-skra-loading]) .skra-button-loading-indicator{position:absolute;inset:0;justify-content:center}[data-skra-loading-indicator-fallback]{display:inline-block;inline-size:var(--skra-comp-button-loading-indicator-size);block-size:var(--skra-comp-button-loading-indicator-size);border:.125em solid var(--skra-comp-button-loading-indicator-color);border-block-start-color:transparent;border-radius:50%;animation:skra-button-spin .8s linear infinite}@keyframes skra-button-spin{to{transform:rotate(360deg)}}@media(prefers-reduced-motion:reduce){[data-skra-loading-indicator-fallback]{animation:none;opacity:.6}}\n"] }]
68
+ }, template: "@if (hasStart()) {\r\n<span class=\"skra-button-slot-wrapper\">\r\n <ng-content select=\"[skra-start]\"></ng-content>\r\n</span>\r\n}\r\n\r\n<span class=\"skra-button-label-wrapper\">\r\n <ng-content></ng-content>\r\n</span>\r\n\r\n@if (hasEnd()) {\r\n<span class=\"skra-button-slot-wrapper\">\r\n <ng-content select=\"[skra-end]\"></ng-content>\r\n</span>\r\n} @if (loading()) {\r\n<span class=\"skra-button-loading-indicator\" data-skra-loading-indicator>\r\n @if (hasLoadingIndicator()) {\r\n <ng-content select=\"[skraLoadingIndicator]\"></ng-content>\r\n } @else {\r\n <span data-skra-loading-indicator-fallback aria-hidden=\"true\"></span>\r\n }\r\n</span>\r\n}\r\n", styles: ["@charset \"UTF-8\";:host{display:inline-flex;align-items:center;justify-content:center;box-sizing:border-box;margin:0;cursor:pointer;font-family:var(--skra-comp-button-font-family);font-size:var(--skra-comp-button-font-size);font-weight:var(--skra-comp-button-font-weight);line-height:var(--skra-comp-button-line-height);letter-spacing:var(--skra-comp-button-letter-spacing);min-block-size:var(--skra-comp-button-min-block-size);background:var(--skra-comp-button-background);color:var(--skra-comp-button-foreground);border-color:var(--skra-comp-button-border-color);border-width:var(--skra-comp-button-border-width);border-style:var(--skra-comp-button-border-style);border-radius:var(--skra-comp-button-radius);padding-block:var(--skra-comp-button-padding-block);padding-inline:var(--skra-comp-button-padding-inline);box-shadow:var(--skra-comp-button-shadow);transition:background var(--skra-comp-button-motion-duration) var(--skra-comp-button-motion-easing),color var(--skra-comp-button-motion-duration) var(--skra-comp-button-motion-easing),border-color var(--skra-comp-button-motion-duration) var(--skra-comp-button-motion-easing),box-shadow var(--skra-comp-button-motion-duration) var(--skra-comp-button-motion-easing)}:host[data-skra-has-start],:host[data-skra-has-end]{gap:var(--skra-comp-button-icon-gap)}:host:focus-visible{outline-style:solid;outline-color:var(--skra-comp-button-focus-ring-color);outline-width:var(--skra-comp-button-focus-ring-width);outline-offset:2px}@media(hover:hover)and (pointer:fine){:host:hover:not(:disabled){box-shadow:var(--skra-comp-button-shadow-hover)}}:host([data-skra-size=sm]){--skra-comp-button-padding-block: var( --skra-comp-button-size-sm-padding-block );--skra-comp-button-padding-inline: var( --skra-comp-button-size-sm-padding-inline );--skra-comp-button-min-block-size: var( --skra-comp-button-size-sm-min-block-size );--skra-comp-button-font-family: var( --skra-sys-typography-role-label-small-font-family );--skra-comp-button-font-size: var( --skra-sys-typography-role-label-small-font-size );--skra-comp-button-font-weight: var( --skra-sys-typography-role-label-small-font-weight );--skra-comp-button-line-height: var( --skra-sys-typography-role-label-small-line-height );--skra-comp-button-letter-spacing: var( --skra-sys-typography-role-label-small-letter-spacing )}:host([data-skra-size=md]){--skra-comp-button-padding-block: var( --skra-comp-button-size-md-padding-block );--skra-comp-button-padding-inline: var( --skra-comp-button-size-md-padding-inline );--skra-comp-button-min-block-size: var( --skra-comp-button-size-md-min-block-size );--skra-comp-button-font-family: var( --skra-sys-typography-role-label-medium-font-family );--skra-comp-button-font-size: var( --skra-sys-typography-role-label-medium-font-size );--skra-comp-button-font-weight: var( --skra-sys-typography-role-label-medium-font-weight );--skra-comp-button-line-height: var( --skra-sys-typography-role-label-medium-line-height );--skra-comp-button-letter-spacing: var( --skra-sys-typography-role-label-medium-letter-spacing )}:host([data-skra-size=lg]){--skra-comp-button-padding-block: var( --skra-comp-button-size-lg-padding-block );--skra-comp-button-padding-inline: var( --skra-comp-button-size-lg-padding-inline );--skra-comp-button-min-block-size: var( --skra-comp-button-size-lg-min-block-size );--skra-comp-button-font-family: var( --skra-sys-typography-role-label-large-font-family );--skra-comp-button-font-size: var( --skra-sys-typography-role-label-large-font-size );--skra-comp-button-font-weight: var( --skra-sys-typography-role-label-large-font-weight );--skra-comp-button-line-height: var( --skra-sys-typography-role-label-large-line-height );--skra-comp-button-letter-spacing: var( --skra-sys-typography-role-label-large-letter-spacing )}:host([data-skra-emphasis=high]){--skra-comp-button-border-width: 0}:host([data-skra-emphasis=medium]){--skra-comp-button-border-width: .0625rem}:host([data-skra-emphasis=low]){--skra-comp-button-border-width: 0}:host([data-skra-intent=neutral][data-skra-emphasis=high]){--skra-comp-button-background: var( --skra-comp-button-background-neutral-high, var(--skra-sys-color-neutral-base) );--skra-comp-button-foreground: var( --skra-comp-button-foreground-neutral-high, var(--skra-sys-color-neutral-contrast) );--skra-comp-button-border-color: var( --skra-comp-button-border-color-neutral-high, transparent )}@media(hover:hover)and (pointer:fine){:host([data-skra-intent=neutral][data-skra-emphasis=high]):hover:not(:disabled){--skra-comp-button-background: var(--skra-sys-color-neutral-base-hover)}}:host([data-skra-intent=neutral][data-skra-emphasis=high]):active:not(:disabled){--skra-comp-button-background: var(--skra-sys-color-neutral-base-active)}:host([data-skra-intent=neutral][data-skra-emphasis=medium]){--skra-comp-button-background: var( --skra-comp-button-background-neutral-medium, transparent );--skra-comp-button-foreground: var( --skra-comp-button-foreground-neutral-medium, var(--skra-sys-color-neutral-strong) );--skra-comp-button-border-color: var( --skra-comp-button-border-color-neutral-medium, var(--skra-sys-color-neutral-strong) )}@media(hover:hover)and (pointer:fine){:host([data-skra-intent=neutral][data-skra-emphasis=medium]):hover:not(:disabled){--skra-comp-button-background: var(--skra-sys-color-neutral-soft)}}:host([data-skra-intent=neutral][data-skra-emphasis=low]){--skra-comp-button-background: var( --skra-comp-button-background-neutral-low, transparent );--skra-comp-button-foreground: var( --skra-comp-button-foreground-neutral-low, var(--skra-sys-color-neutral-strong) );--skra-comp-button-border-color: var( --skra-comp-button-border-color-neutral-low, transparent )}@media(hover:hover)and (pointer:fine){:host([data-skra-intent=neutral][data-skra-emphasis=low]):hover:not(:disabled){--skra-comp-button-background: var(--skra-sys-color-neutral-soft)}}:host([data-skra-intent=primary][data-skra-emphasis=high]){--skra-comp-button-background: var( --skra-comp-button-background-primary-high, var(--skra-sys-color-primary-base) );--skra-comp-button-foreground: var( --skra-comp-button-foreground-primary-high, var(--skra-sys-color-primary-contrast) );--skra-comp-button-border-color: var( --skra-comp-button-border-color-primary-high, transparent )}@media(hover:hover)and (pointer:fine){:host([data-skra-intent=primary][data-skra-emphasis=high]):hover:not(:disabled){--skra-comp-button-background: var(--skra-sys-color-primary-base-hover)}}:host([data-skra-intent=primary][data-skra-emphasis=high]):active:not(:disabled){--skra-comp-button-background: var(--skra-sys-color-primary-base-active)}:host([data-skra-intent=primary][data-skra-emphasis=medium]){--skra-comp-button-background: var( --skra-comp-button-background-primary-medium, transparent );--skra-comp-button-foreground: var( --skra-comp-button-foreground-primary-medium, var(--skra-sys-color-primary-strong) );--skra-comp-button-border-color: var( --skra-comp-button-border-color-primary-medium, var(--skra-sys-color-primary-strong) )}@media(hover:hover)and (pointer:fine){:host([data-skra-intent=primary][data-skra-emphasis=medium]):hover:not(:disabled){--skra-comp-button-background: var(--skra-sys-color-primary-soft)}}:host([data-skra-intent=primary][data-skra-emphasis=low]){--skra-comp-button-background: var( --skra-comp-button-background-primary-low, transparent );--skra-comp-button-foreground: var( --skra-comp-button-foreground-primary-low, var(--skra-sys-color-primary-strong) );--skra-comp-button-border-color: var( --skra-comp-button-border-color-primary-low, transparent )}@media(hover:hover)and (pointer:fine){:host([data-skra-intent=primary][data-skra-emphasis=low]):hover:not(:disabled){--skra-comp-button-background: var(--skra-sys-color-primary-soft)}}:host([data-skra-intent=secondary][data-skra-emphasis=high]){--skra-comp-button-background: var( --skra-comp-button-background-secondary-high, var(--skra-sys-color-secondary-base) );--skra-comp-button-foreground: var( --skra-comp-button-foreground-secondary-high, var(--skra-sys-color-secondary-contrast) );--skra-comp-button-border-color: var( --skra-comp-button-border-color-secondary-high, transparent )}@media(hover:hover)and (pointer:fine){:host([data-skra-intent=secondary][data-skra-emphasis=high]):hover:not(:disabled){--skra-comp-button-background: var(--skra-sys-color-secondary-base-hover)}}:host([data-skra-intent=secondary][data-skra-emphasis=high]):active:not(:disabled){--skra-comp-button-background: var(--skra-sys-color-secondary-base-active)}:host([data-skra-intent=secondary][data-skra-emphasis=medium]){--skra-comp-button-background: var( --skra-comp-button-background-secondary-medium, transparent );--skra-comp-button-foreground: var( --skra-comp-button-foreground-secondary-medium, var(--skra-sys-color-secondary-strong) );--skra-comp-button-border-color: var( --skra-comp-button-border-color-secondary-medium, var(--skra-sys-color-secondary-strong) )}@media(hover:hover)and (pointer:fine){:host([data-skra-intent=secondary][data-skra-emphasis=medium]):hover:not(:disabled){--skra-comp-button-background: var(--skra-sys-color-secondary-soft)}}:host([data-skra-intent=secondary][data-skra-emphasis=low]){--skra-comp-button-background: var( --skra-comp-button-background-secondary-low, transparent );--skra-comp-button-foreground: var( --skra-comp-button-foreground-secondary-low, var(--skra-sys-color-secondary-strong) );--skra-comp-button-border-color: var( --skra-comp-button-border-color-secondary-low, transparent )}@media(hover:hover)and (pointer:fine){:host([data-skra-intent=secondary][data-skra-emphasis=low]):hover:not(:disabled){--skra-comp-button-background: var(--skra-sys-color-secondary-soft)}}:host([data-skra-intent=info][data-skra-emphasis=high]){--skra-comp-button-background: var( --skra-comp-button-background-info-high, var(--skra-sys-color-info-base) );--skra-comp-button-foreground: var( --skra-comp-button-foreground-info-high, var(--skra-sys-color-info-contrast) );--skra-comp-button-border-color: var( --skra-comp-button-border-color-info-high, transparent )}@media(hover:hover)and (pointer:fine){:host([data-skra-intent=info][data-skra-emphasis=high]):hover:not(:disabled){--skra-comp-button-background: var(--skra-sys-color-info-base-hover)}}:host([data-skra-intent=info][data-skra-emphasis=high]):active:not(:disabled){--skra-comp-button-background: var(--skra-sys-color-info-base-active)}:host([data-skra-intent=info][data-skra-emphasis=medium]){--skra-comp-button-background: var( --skra-comp-button-background-info-medium, transparent );--skra-comp-button-foreground: var( --skra-comp-button-foreground-info-medium, var(--skra-sys-color-info-strong) );--skra-comp-button-border-color: var( --skra-comp-button-border-color-info-medium, var(--skra-sys-color-info-strong) )}@media(hover:hover)and (pointer:fine){:host([data-skra-intent=info][data-skra-emphasis=medium]):hover:not(:disabled){--skra-comp-button-background: var(--skra-sys-color-info-soft)}}:host([data-skra-intent=info][data-skra-emphasis=low]){--skra-comp-button-background: var( --skra-comp-button-background-info-low, transparent );--skra-comp-button-foreground: var( --skra-comp-button-foreground-info-low, var(--skra-sys-color-info-strong) );--skra-comp-button-border-color: var( --skra-comp-button-border-color-info-low, transparent )}@media(hover:hover)and (pointer:fine){:host([data-skra-intent=info][data-skra-emphasis=low]):hover:not(:disabled){--skra-comp-button-background: var(--skra-sys-color-info-soft)}}:host([data-skra-intent=success][data-skra-emphasis=high]){--skra-comp-button-background: var( --skra-comp-button-background-success-high, var(--skra-sys-color-success-base) );--skra-comp-button-foreground: var( --skra-comp-button-foreground-success-high, var(--skra-sys-color-success-contrast) );--skra-comp-button-border-color: var( --skra-comp-button-border-color-success-high, transparent )}@media(hover:hover)and (pointer:fine){:host([data-skra-intent=success][data-skra-emphasis=high]):hover:not(:disabled){--skra-comp-button-background: var(--skra-sys-color-success-base-hover)}}:host([data-skra-intent=success][data-skra-emphasis=high]):active:not(:disabled){--skra-comp-button-background: var(--skra-sys-color-success-base-active)}:host([data-skra-intent=success][data-skra-emphasis=medium]){--skra-comp-button-background: var( --skra-comp-button-background-success-medium, transparent );--skra-comp-button-foreground: var( --skra-comp-button-foreground-success-medium, var(--skra-sys-color-success-strong) );--skra-comp-button-border-color: var( --skra-comp-button-border-color-success-medium, var(--skra-sys-color-success-strong) )}@media(hover:hover)and (pointer:fine){:host([data-skra-intent=success][data-skra-emphasis=medium]):hover:not(:disabled){--skra-comp-button-background: var(--skra-sys-color-success-soft)}}:host([data-skra-intent=success][data-skra-emphasis=low]){--skra-comp-button-background: var( --skra-comp-button-background-success-low, transparent );--skra-comp-button-foreground: var( --skra-comp-button-foreground-success-low, var(--skra-sys-color-success-strong) );--skra-comp-button-border-color: var( --skra-comp-button-border-color-success-low, transparent )}@media(hover:hover)and (pointer:fine){:host([data-skra-intent=success][data-skra-emphasis=low]):hover:not(:disabled){--skra-comp-button-background: var(--skra-sys-color-success-soft)}}:host([data-skra-intent=warning][data-skra-emphasis=high]){--skra-comp-button-background: var( --skra-comp-button-background-warning-high, var(--skra-sys-color-warning-base) );--skra-comp-button-foreground: var( --skra-comp-button-foreground-warning-high, var(--skra-sys-color-warning-contrast) );--skra-comp-button-border-color: var( --skra-comp-button-border-color-warning-high, transparent )}@media(hover:hover)and (pointer:fine){:host([data-skra-intent=warning][data-skra-emphasis=high]):hover:not(:disabled){--skra-comp-button-background: var(--skra-sys-color-warning-base-hover)}}:host([data-skra-intent=warning][data-skra-emphasis=high]):active:not(:disabled){--skra-comp-button-background: var(--skra-sys-color-warning-base-active)}:host([data-skra-intent=warning][data-skra-emphasis=medium]){--skra-comp-button-background: var( --skra-comp-button-background-warning-medium, transparent );--skra-comp-button-foreground: var( --skra-comp-button-foreground-warning-medium, var(--skra-sys-color-warning-strong) );--skra-comp-button-border-color: var( --skra-comp-button-border-color-warning-medium, var(--skra-sys-color-warning-strong) )}@media(hover:hover)and (pointer:fine){:host([data-skra-intent=warning][data-skra-emphasis=medium]):hover:not(:disabled){--skra-comp-button-background: var(--skra-sys-color-warning-soft)}}:host([data-skra-intent=warning][data-skra-emphasis=low]){--skra-comp-button-background: var( --skra-comp-button-background-warning-low, transparent );--skra-comp-button-foreground: var( --skra-comp-button-foreground-warning-low, var(--skra-sys-color-warning-strong) );--skra-comp-button-border-color: var( --skra-comp-button-border-color-warning-low, transparent )}@media(hover:hover)and (pointer:fine){:host([data-skra-intent=warning][data-skra-emphasis=low]):hover:not(:disabled){--skra-comp-button-background: var(--skra-sys-color-warning-soft)}}:host([data-skra-intent=danger][data-skra-emphasis=high]){--skra-comp-button-background: var( --skra-comp-button-background-danger-high, var(--skra-sys-color-danger-base) );--skra-comp-button-foreground: var( --skra-comp-button-foreground-danger-high, var(--skra-sys-color-danger-contrast) );--skra-comp-button-border-color: var( --skra-comp-button-border-color-danger-high, transparent )}@media(hover:hover)and (pointer:fine){:host([data-skra-intent=danger][data-skra-emphasis=high]):hover:not(:disabled){--skra-comp-button-background: var(--skra-sys-color-danger-base-hover)}}:host([data-skra-intent=danger][data-skra-emphasis=high]):active:not(:disabled){--skra-comp-button-background: var(--skra-sys-color-danger-base-active)}:host([data-skra-intent=danger][data-skra-emphasis=medium]){--skra-comp-button-background: var( --skra-comp-button-background-danger-medium, transparent );--skra-comp-button-foreground: var( --skra-comp-button-foreground-danger-medium, var(--skra-sys-color-danger-strong) );--skra-comp-button-border-color: var( --skra-comp-button-border-color-danger-medium, var(--skra-sys-color-danger-strong) )}@media(hover:hover)and (pointer:fine){:host([data-skra-intent=danger][data-skra-emphasis=medium]):hover:not(:disabled){--skra-comp-button-background: var(--skra-sys-color-danger-soft)}}:host([data-skra-intent=danger][data-skra-emphasis=low]){--skra-comp-button-background: var( --skra-comp-button-background-danger-low, transparent );--skra-comp-button-foreground: var( --skra-comp-button-foreground-danger-low, var(--skra-sys-color-danger-strong) );--skra-comp-button-border-color: var( --skra-comp-button-border-color-danger-low, transparent )}@media(hover:hover)and (pointer:fine){:host([data-skra-intent=danger][data-skra-emphasis=low]):hover:not(:disabled){--skra-comp-button-background: var(--skra-sys-color-danger-soft)}}:host:disabled{background:var(--skra-comp-button-background-disabled);color:var(--skra-comp-button-foreground-disabled);border-color:var(--skra-comp-button-border-color-disabled);cursor:not-allowed;box-shadow:none}.skra-button-slot-wrapper{display:inline-flex;align-items:center;flex-shrink:0;align-self:center;--skra-comp-icon-size: var(--skra-comp-button-icon-size)}.skra-button-label-wrapper{display:inline-block}.skra-button-loading-indicator{display:inline-flex;align-items:center}:host([data-skra-loading]){pointer-events:none;position:relative}:host([data-skra-loading]) .skra-button-label-wrapper,:host([data-skra-loading]) .skra-button-slot-wrapper{opacity:0}:host([data-skra-loading]) .skra-button-loading-indicator{position:absolute;inset:0;justify-content:center}[data-skra-loading-indicator-fallback]{display:inline-block;inline-size:var(--skra-comp-button-loading-indicator-size);block-size:var(--skra-comp-button-loading-indicator-size);border:.125em solid var(--skra-comp-button-loading-indicator-color);border-block-start-color:transparent;border-radius:50%;animation:skra-button-spin .8s linear infinite}@keyframes skra-button-spin{to{transform:rotate(360deg)}}@media(prefers-reduced-motion:reduce){[data-skra-loading-indicator-fallback]{animation:none;opacity:.6}}\n"] }]
69
69
  }], propDecorators: { intent: [{ type: i0.Input, args: [{ isSignal: true, alias: "intent", required: false }] }], emphasis: [{ type: i0.Input, args: [{ isSignal: true, alias: "emphasis", required: false }] }], size: [{ type: i0.Input, args: [{ isSignal: true, alias: "size", required: false }] }], loading: [{ type: i0.Input, args: [{ isSignal: true, alias: "loading", required: false }] }], startSlot: [{ type: i0.ContentChild, args: [i0.forwardRef(() => SkraButtonStart), { isSignal: true }] }], endSlot: [{ type: i0.ContentChild, args: [i0.forwardRef(() => SkraButtonEnd), { isSignal: true }] }], loadingIndicatorSlot: [{ type: i0.ContentChild, args: [i0.forwardRef(() => SkraLoadingIndicator), { isSignal: true }] }] } });
70
70
 
71
71
  /**